Last active
January 3, 2019 04:26
-
-
Save Mainvooid/cb049e10de449f24844c766b1d760cee to your computer and use it in GitHub Desktop.
根据编码质量修改原始量化表,NPP实现与普通实现对比 #C++ #NPP
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #include <iostream> | |
| #include <npp.h> | |
| using namespace std; | |
| unsigned char _STD_Y_QT[64] = | |
| { | |
| 16, 11, 10, 16, 24, 40, 51, 61, | |
| 12, 12, 14, 19, 26, 58, 60, 55, | |
| 14, 13, 16, 24, 40, 57, 69, 56, | |
| 14, 17, 22, 29, 51, 87, 80, 62, | |
| 18, 22, 37, 56, 68, 109, 103, 77, | |
| 24, 35, 55, 64, 81, 104, 113, 92, | |
| 49, 64, 78, 87, 103, 121, 120, 101, | |
| 72, 92, 95, 98, 112, 100, 103, 99 | |
| }; | |
| unsigned char _STD_UV_QT[64] = | |
| { | |
| 17, 18, 24, 47, 99, 99, 99, 99, | |
| 18, 21, 26, 66, 99, 99, 99, 99, | |
| 24, 26, 56, 99, 99, 99, 99, 99, | |
| 47, 66, 99, 99, 99, 99, 99, 99, | |
| 99, 99, 99, 99, 99, 99, 99, 99, | |
| 99, 99, 99, 99, 99, 99, 99, 99, | |
| 99, 99, 99, 99, 99, 99, 99, 99, | |
| 99, 99, 99, 99, 99, 99, 99, 99 | |
| }; | |
| unsigned char _STD_Y_QT_npp[64] = | |
| { | |
| 16, 11, 10, 16, 24, 40, 51, 61, | |
| 12, 12, 14, 19, 26, 58, 60, 55, | |
| 14, 13, 16, 24, 40, 57, 69, 56, | |
| 14, 17, 22, 29, 51, 87, 80, 62, | |
| 18, 22, 37, 56, 68, 109, 103, 77, | |
| 24, 35, 55, 64, 81, 104, 113, 92, | |
| 49, 64, 78, 87, 103, 121, 120, 101, | |
| 72, 92, 95, 98, 112, 100, 103, 99 | |
| }; | |
| unsigned char _STD_UV_QT_npp[64] = | |
| { | |
| 17, 18, 24, 47, 99, 99, 99, 99, | |
| 18, 21, 26, 66, 99, 99, 99, 99, | |
| 24, 26, 56, 99, 99, 99, 99, 99, | |
| 47, 66, 99, 99, 99, 99, 99, 99, | |
| 99, 99, 99, 99, 99, 99, 99, 99, | |
| 99, 99, 99, 99, 99, 99, 99, 99, | |
| 99, 99, 99, 99, 99, 99, 99, 99, | |
| 99, 99, 99, 99, 99, 99, 99, 99 | |
| }; | |
| void nppsetQTByQuality(int nQualityFactor) { | |
| nppiQuantFwdRawTableInit_JPEG_8u(_STD_Y_QT_npp, nQualityFactor); | |
| nppiQuantFwdRawTableInit_JPEG_8u(_STD_UV_QT_npp, nQualityFactor); | |
| } | |
| void setQTByQuality(int quality) | |
| { | |
| float s; | |
| if (quality < 50) | |
| s = 5000.0f / quality; | |
| else s = 200.0f - 2 * quality; | |
| for (size_t i = 0; i < 64; i++) { | |
| // 亮度 | |
| float luminVal = (float)_STD_Y_QT[i]; | |
| luminVal = floor((s * luminVal + 50.0f) / 100.0f); | |
| if (luminVal < 1) | |
| luminVal = 1; | |
| else if (luminVal > 255) | |
| luminVal = 255; | |
| _STD_Y_QT[i] = (unsigned char)luminVal; | |
| // 色度 | |
| float chromaVal = (float)_STD_UV_QT[i]; | |
| chromaVal = floor((s * chromaVal + 50.0f) / 100.0f); | |
| if (chromaVal < 1) | |
| chromaVal = 1; | |
| else if (chromaVal > 255) | |
| chromaVal = 255; | |
| _STD_UV_QT[i] = (unsigned char)chromaVal; | |
| } | |
| } | |
| void printResult() { | |
| for (size_t i = 0; i < 64; i++) | |
| { | |
| if (i % 8 == 0) | |
| { | |
| cout << endl; | |
| } | |
| cout << (int)_STD_Y_QT[i] << ","; | |
| } | |
| cout << endl; | |
| for (size_t i = 0; i < 64; i++) | |
| { | |
| if (i % 8 == 0) | |
| { | |
| cout << endl; | |
| } | |
| cout << (int)_STD_UV_QT[i] << ","; | |
| } | |
| cout << endl; | |
| } | |
| int main() | |
| { | |
| cout << "setQTByQuality:" << endl; | |
| setQTByQuality(90); | |
| printResult(); | |
| cout << endl; | |
| cout << "nppsetQTByQuality:" << endl; | |
| nppsetQTByQuality(90); | |
| printResult(); | |
| } | |
| /* | |
| 结果完全相同. | |
| setQTByQuality: | |
| 3,2,2,3,5,8,10,12, | |
| 2,2,3,4,5,12,12,11, | |
| 3,3,3,5,8,11,14,11, | |
| 3,3,4,6,10,17,16,12, | |
| 4,4,7,11,14,22,21,15, | |
| 5,7,11,13,16,21,23,18, | |
| 10,13,16,17,21,24,24,20, | |
| 14,18,19,20,22,20,21,20, | |
| 3,4,5,9,20,20,20,20, | |
| 4,4,5,13,20,20,20,20, | |
| 5,5,11,20,20,20,20,20, | |
| 9,13,20,20,20,20,20,20, | |
| 20,20,20,20,20,20,20,20, | |
| 20,20,20,20,20,20,20,20, | |
| 20,20,20,20,20,20,20,20, | |
| 20,20,20,20,20,20,20,20, | |
| nppsetQTByQuality: | |
| 3,2,2,3,5,8,10,12, | |
| 2,2,3,4,5,12,12,11, | |
| 3,3,3,5,8,11,14,11, | |
| 3,3,4,6,10,17,16,12, | |
| 4,4,7,11,14,22,21,15, | |
| 5,7,11,13,16,21,23,18, | |
| 10,13,16,17,21,24,24,20, | |
| 14,18,19,20,22,20,21,20, | |
| 3,4,5,9,20,20,20,20, | |
| 4,4,5,13,20,20,20,20, | |
| 5,5,11,20,20,20,20,20, | |
| 9,13,20,20,20,20,20,20, | |
| 20,20,20,20,20,20,20,20, | |
| 20,20,20,20,20,20,20,20, | |
| 20,20,20,20,20,20,20,20, | |
| 20,20,20,20,20,20,20,20, | |
| */ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment