fix[hal_jpegd]: fix huffman table selection

Some JPEG file has only one DC or AC table, and all the components using
the same DC or AC table.

Change-Id: Icab55bd3a00d66d983c9ac89110fb9e077afec90
Signed-off-by: Johnson Ding <johnson.ding@rock-chips.com>
This commit is contained in:
Johnson Ding
2024-09-26 11:29:52 +08:00
committed by Herman Chen
parent ca125fe6b6
commit 32a0134fea

View File

@@ -83,8 +83,6 @@ MPP_RET jpegd_write_rkv_htbl(JpegdHalCtx *ctx, JpegdSyntax *jpegd_syntax)
MPP_RET ret = MPP_OK; MPP_RET ret = MPP_OK;
JpegdSyntax *s = jpegd_syntax; JpegdSyntax *s = jpegd_syntax;
AcTable *ac_ptr0 = NULL, *ac_ptr1 = NULL;
DcTable *dc_ptr0 = NULL, *dc_ptr1 = NULL;
void * htbl_ptr[6] = {NULL}; void * htbl_ptr[6] = {NULL};
RK_U32 i, j, k = 0; RK_U32 i, j, k = 0;
RK_U8 *p_htbl_value = (RK_U8 *)mpp_buffer_get_ptr(ctx->pTableBase) + RKD_HUFFMAN_VALUE_TBL_OFFSET; RK_U8 *p_htbl_value = (RK_U8 *)mpp_buffer_get_ptr(ctx->pTableBase) + RKD_HUFFMAN_VALUE_TBL_OFFSET;
@@ -100,30 +98,14 @@ MPP_RET jpegd_write_rkv_htbl(JpegdHalCtx *ctx, JpegdSyntax *jpegd_syntax)
AcTable *ac_ptr; AcTable *ac_ptr;
DcTable *dc_ptr; DcTable *dc_ptr;
if (s->ac_index[0] == HUFFMAN_TABLE_ID_ZERO) { htbl_ptr[0] = &s->dc_table[s->dc_index[0]];
/* Luma's AC uses Huffman table zero */ htbl_ptr[1] = &s->ac_table[s->ac_index[0]];
ac_ptr0 = &(s->ac_table[HUFFMAN_TABLE_ID_ZERO]);
ac_ptr1 = &(s->ac_table[HUFFMAN_TABLE_ID_ONE]);
} else {
ac_ptr0 = &(s->ac_table[HUFFMAN_TABLE_ID_ONE]);
ac_ptr1 = &(s->ac_table[HUFFMAN_TABLE_ID_ZERO]);
}
if (s->dc_index[0] == HUFFMAN_TABLE_ID_ZERO) { htbl_ptr[2] = &s->dc_table[s->dc_index[1]];
/* Luma's DC uses Huffman table zero */ htbl_ptr[3] = &s->ac_table[s->ac_index[1]];
dc_ptr0 = &(s->dc_table[HUFFMAN_TABLE_ID_ZERO]);
dc_ptr1 = &(s->dc_table[HUFFMAN_TABLE_ID_ONE]);
} else {
dc_ptr0 = &(s->dc_table[HUFFMAN_TABLE_ID_ONE]);
dc_ptr1 = &(s->dc_table[HUFFMAN_TABLE_ID_ZERO]);
}
htbl_ptr[0] = dc_ptr0; htbl_ptr[4] = htbl_ptr[2];
htbl_ptr[1] = ac_ptr0; htbl_ptr[5] = htbl_ptr[3];
htbl_ptr[2] = dc_ptr1;
htbl_ptr[3] = ac_ptr1;
htbl_ptr[4] = dc_ptr1;
htbl_ptr[5] = ac_ptr1;
for (k = 0; k < s->nb_components; k++) { for (k = 0; k < s->nb_components; k++) {
dc_ptr = (DcTable *)htbl_ptr[k * 2]; dc_ptr = (DcTable *)htbl_ptr[k * 2];