mirror of
https://github.com/openmv/openmv.git
synced 2025-11-04 14:49:50 +08:00
Fix quant table init
This commit is contained in:
parent
c41cbc1e85
commit
e01565cdb5
@ -395,6 +395,26 @@ void jpeg_compress(image_t *src, image_t *dst, int quality)
|
|||||||
.buf = xalloc(4096)
|
.buf = xalloc(4096)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
quality = quality < 50 ? 5000 / quality : 200 - quality * 2;
|
||||||
|
|
||||||
|
// If quality changed, update quantization matrix
|
||||||
|
if (q != quality) {
|
||||||
|
q = quality;
|
||||||
|
for(int i = 0; i < 64; ++i) {
|
||||||
|
int yti = (YQT[i]*quality+50)/100;
|
||||||
|
YTable[s_jo_ZigZag[i]] = yti < 1 ? 1 : yti > 255 ? 255 : yti;
|
||||||
|
int uvti = (UVQT[i]*quality+50)/100;
|
||||||
|
UVTable[s_jo_ZigZag[i]] = uvti < 1 ? 1 : uvti > 255 ? 255 : uvti;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int r = 0, k = 0; r < 8; ++r) {
|
||||||
|
for(int c = 0; c < 8; ++c, ++k) {
|
||||||
|
fdtbl_Y[k] = 1 / (YTable [s_jo_ZigZag[k]] * aasf[r] * aasf[c]);
|
||||||
|
fdtbl_UV[k] = 1 / (UVTable[s_jo_ZigZag[k]] * aasf[r] * aasf[c]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Write Headers
|
// Write Headers
|
||||||
jpeg_put_bytes(&jpeg_buf, head0, sizeof(head0));
|
jpeg_put_bytes(&jpeg_buf, head0, sizeof(head0));
|
||||||
jpeg_put_bytes(&jpeg_buf, YTable, sizeof(YTable));
|
jpeg_put_bytes(&jpeg_buf, YTable, sizeof(YTable));
|
||||||
@ -418,26 +438,6 @@ void jpeg_compress(image_t *src, image_t *dst, int quality)
|
|||||||
jpeg_put_bytes(&jpeg_buf, std_ac_chrominance_values, sizeof(std_ac_chrominance_values));
|
jpeg_put_bytes(&jpeg_buf, std_ac_chrominance_values, sizeof(std_ac_chrominance_values));
|
||||||
jpeg_put_bytes(&jpeg_buf, head2, sizeof(head2));
|
jpeg_put_bytes(&jpeg_buf, head2, sizeof(head2));
|
||||||
|
|
||||||
quality = quality < 50 ? 5000 / quality : 200 - quality * 2;
|
|
||||||
|
|
||||||
// If quality changed, update quantization matrix
|
|
||||||
if (q != quality) {
|
|
||||||
q = quality;
|
|
||||||
for(int i = 0; i < 64; ++i) {
|
|
||||||
int yti = (YQT[i]*quality+50)/100;
|
|
||||||
YTable[s_jo_ZigZag[i]] = yti < 1 ? 1 : yti > 255 ? 255 : yti;
|
|
||||||
int uvti = (UVQT[i]*quality+50)/100;
|
|
||||||
UVTable[s_jo_ZigZag[i]] = uvti < 1 ? 1 : uvti > 255 ? 255 : uvti;
|
|
||||||
}
|
|
||||||
|
|
||||||
for(int r = 0, k = 0; r < 8; ++r) {
|
|
||||||
for(int c = 0; c < 8; ++c, ++k) {
|
|
||||||
fdtbl_Y[k] = 1 / (YTable [s_jo_ZigZag[k]] * aasf[r] * aasf[c]);
|
|
||||||
fdtbl_UV[k] = 1 / (UVTable[s_jo_ZigZag[k]] * aasf[r] * aasf[c]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Encode 8x8 macroblocks
|
// Encode 8x8 macroblocks
|
||||||
int bitBuf=0, bitCnt=0;
|
int bitBuf=0, bitCnt=0;
|
||||||
int DCY=0, DCU=0, DCV=0;
|
int DCY=0, DCU=0, DCV=0;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user