diff options
-rw-r--r-- | PREUPLOAD.cfg | 2 | ||||
-rw-r--r-- | common/ih264_defs.h | 10 | ||||
-rw-r--r-- | decoder/ih264d_parse_headers.c | 18 | ||||
-rw-r--r-- | decoder/ih264d_process_bslice.c | 40 | ||||
-rw-r--r-- | decoder/ih264d_process_pslice.c | 20 | ||||
-rw-r--r-- | decoder/ih264d_quant_scaling.c | 9 | ||||
-rw-r--r-- | decoder/ih264d_quant_scaling.h | 2 | ||||
-rw-r--r-- | encoder/ih264e_process.c | 5 |
8 files changed, 68 insertions, 38 deletions
diff --git a/PREUPLOAD.cfg b/PREUPLOAD.cfg new file mode 100644 index 0000000..ecf8b8e --- /dev/null +++ b/PREUPLOAD.cfg @@ -0,0 +1,2 @@ +[Hook Scripts] +mainline_hook = ${REPO_ROOT}/frameworks/av/tools/mainline_hook_project.sh diff --git a/common/ih264_defs.h b/common/ih264_defs.h index 16d8627..9c84be9 100644 --- a/common/ih264_defs.h +++ b/common/ih264_defs.h @@ -611,6 +611,16 @@ typedef enum #define MAX_H264_QP 51 /** + * @brief Minimum delta scale supported in H264 spec + */ +#define MIN_H264_DELTA_SCALE (-128) + +/** + * @brief Maximum delta scale supported in H264 spec + */ +#define MAX_H264_DELTA_SCALE 127 + +/** * @breif Total number of transform sizes * used for sizeID while getting scale matrix */ diff --git a/decoder/ih264d_parse_headers.c b/decoder/ih264d_parse_headers.c index 674f4c3..f286e29 100644 --- a/decoder/ih264d_parse_headers.c +++ b/decoder/ih264d_parse_headers.c @@ -425,9 +425,10 @@ WORD32 ih264d_parse_pps(dec_struct_t * ps_dec, dec_bit_stream_t * ps_bitstrm) if(ps_pps->u1_pic_scaling_list_present_flag[i4_i]) { + WORD32 ret; if(i4_i < 6) { - ih264d_scaling_list( + ret = ih264d_scaling_list( ps_pps->i2_pic_scalinglist4x4[i4_i], 16, &ps_pps->u1_pic_use_default_scaling_matrix_flag[i4_i], @@ -435,12 +436,17 @@ WORD32 ih264d_parse_pps(dec_struct_t * ps_dec, dec_bit_stream_t * ps_bitstrm) } else { - ih264d_scaling_list( + ret = ih264d_scaling_list( ps_pps->i2_pic_scalinglist8x8[i4_i - 6], 64, &ps_pps->u1_pic_use_default_scaling_matrix_flag[i4_i], ps_bitstrm); } + + if(ret != OK) + { + return ret; + } } } } @@ -740,7 +746,7 @@ WORD32 ih264d_parse_sps(dec_struct_t *ps_dec, dec_bit_stream_t *ps_bitstrm) { if(i4_i < 6) { - ih264d_scaling_list( + ret = ih264d_scaling_list( ps_seq->i2_scalinglist4x4[i4_i], 16, &ps_seq->u1_use_default_scaling_matrix_flag[i4_i], @@ -748,12 +754,16 @@ WORD32 ih264d_parse_sps(dec_struct_t *ps_dec, dec_bit_stream_t *ps_bitstrm) } else { - ih264d_scaling_list( + ret = ih264d_scaling_list( ps_seq->i2_scalinglist8x8[i4_i - 6], 64, &ps_seq->u1_use_default_scaling_matrix_flag[i4_i], ps_bitstrm); } + if(ret != OK) + { + return ret; + } } } } diff --git a/decoder/ih264d_process_bslice.c b/decoder/ih264d_process_bslice.c index f2adcf6..5dfba33 100644 --- a/decoder/ih264d_process_bslice.c +++ b/decoder/ih264d_process_bslice.c @@ -1387,17 +1387,17 @@ void ih264d_init_ref_idx_lx_b(dec_struct_t *ps_dec) /* reference list to handle of errors */ { UWORD8 u1_i; - pic_buffer_t *ps_ref_pic; + pic_buffer_t ref_pic; - ps_ref_pic = ps_dpb_mgr->ps_init_dpb[0][0] + MAX_REF_BUFS; + ref_pic = *(ps_dpb_mgr->ps_init_dpb[0][0] + MAX_REF_BUFS); - if(NULL == ps_ref_pic->pu1_buf1) + if(NULL == ref_pic.pu1_buf1) { - ps_ref_pic = ps_dec->ps_cur_pic; + ref_pic = *ps_dec->ps_cur_pic; } for(u1_i = u1_L0; u1_i < u1_max_ref_idx_l0; u1_i++) { - *ps_ref_pic_buf_lx = *ps_ref_pic; + *ps_ref_pic_buf_lx = ref_pic; ps_ref_pic_buf_lx++; } } @@ -1414,17 +1414,17 @@ void ih264d_init_ref_idx_lx_b(dec_struct_t *ps_dec) /* reference list to handle of errors */ { UWORD8 u1_i; - pic_buffer_t *ps_ref_pic; + pic_buffer_t ref_pic; - ps_ref_pic = ps_dpb_mgr->ps_init_dpb[0][0]; + ref_pic = *(ps_dpb_mgr->ps_init_dpb[0][0]); - if(NULL == ps_ref_pic->pu1_buf1) + if(NULL == ref_pic.pu1_buf1) { - ps_ref_pic = ps_dec->ps_cur_pic; + ref_pic = *ps_dec->ps_cur_pic; } for(u1_i = u1_L0; u1_i < u1_max_ref_idx_l0; u1_i++) { - *ps_ref_pic_buf_lx = *ps_ref_pic; + *ps_ref_pic_buf_lx = ref_pic; ps_ref_pic_buf_lx++; } } @@ -1498,17 +1498,17 @@ void ih264d_init_ref_idx_lx_b(dec_struct_t *ps_dec) /* reference list to handle of errors */ { UWORD8 u1_i; - pic_buffer_t *ps_ref_pic; + pic_buffer_t ref_pic; - ps_ref_pic = ps_dpb_mgr->ps_init_dpb[0][0] + MAX_REF_BUFS; + ref_pic = *(ps_dpb_mgr->ps_init_dpb[0][0] + MAX_REF_BUFS); - if(NULL == ps_ref_pic->pu1_buf1) + if(NULL == ref_pic.pu1_buf1) { - ps_ref_pic = ps_dec->ps_cur_pic; + ref_pic = *ps_dec->ps_cur_pic; } for(u1_i = u1_L1; u1_i < u1_max_ref_idx_l1; u1_i++) { - *ps_ref_pic_buf_lx = *ps_ref_pic; + *ps_ref_pic_buf_lx = ref_pic; ps_ref_pic_buf_lx++; } } @@ -1525,17 +1525,17 @@ void ih264d_init_ref_idx_lx_b(dec_struct_t *ps_dec) /* reference list to handle of errors */ { UWORD8 u1_i; - pic_buffer_t *ps_ref_pic; + pic_buffer_t ref_pic; - ps_ref_pic = ps_dpb_mgr->ps_init_dpb[0][0]; + ref_pic = *(ps_dpb_mgr->ps_init_dpb[0][0]); - if(NULL == ps_ref_pic->pu1_buf1) + if(NULL == ref_pic.pu1_buf1) { - ps_ref_pic = ps_dec->ps_cur_pic; + ref_pic = *ps_dec->ps_cur_pic; } for(u1_i = u1_L1; u1_i < u1_max_ref_idx_l1; u1_i++) { - *ps_ref_pic_buf_lx = *ps_ref_pic; + *ps_ref_pic_buf_lx = ref_pic; ps_ref_pic_buf_lx++; } } diff --git a/decoder/ih264d_process_pslice.c b/decoder/ih264d_process_pslice.c index ed4cbbe..7c24383 100644 --- a/decoder/ih264d_process_pslice.c +++ b/decoder/ih264d_process_pslice.c @@ -1112,17 +1112,17 @@ void ih264d_init_ref_idx_lx_p(dec_struct_t *ps_dec) /* reference list to handle of errors */ { UWORD8 u1_i; - pic_buffer_t *ps_ref_pic; + pic_buffer_t ref_pic; - ps_ref_pic = ps_dpb_mgr->ps_init_dpb[0][0] + MAX_REF_BUFS; + ref_pic = *(ps_dpb_mgr->ps_init_dpb[0][0] + MAX_REF_BUFS); - if(NULL == ps_ref_pic->pu1_buf1) + if(NULL == ref_pic.pu1_buf1) { - ps_ref_pic = ps_dec->ps_cur_pic; + ref_pic = *ps_dec->ps_cur_pic; } for(u1_i = u1_L0; u1_i < u1_max_ref_idx_l0; u1_i++) { - *ps_ref_pic_buf_lx = *ps_ref_pic; + *ps_ref_pic_buf_lx = ref_pic; ps_ref_pic_buf_lx++; } } @@ -1138,17 +1138,17 @@ void ih264d_init_ref_idx_lx_p(dec_struct_t *ps_dec) /* reference list to handle of errors */ { UWORD8 u1_i; - pic_buffer_t *ps_ref_pic; + pic_buffer_t ref_pic; - ps_ref_pic = ps_dpb_mgr->ps_init_dpb[0][0]; + ref_pic = *(ps_dpb_mgr->ps_init_dpb[0][0]); - if(NULL == ps_ref_pic->pu1_buf1) + if(NULL == ref_pic.pu1_buf1) { - ps_ref_pic = ps_dec->ps_cur_pic; + ref_pic = *ps_dec->ps_cur_pic; } for(u1_i = u1_L0; u1_i < u1_max_ref_idx_l0; u1_i++) { - *ps_ref_pic_buf_lx = *ps_ref_pic; + *ps_ref_pic_buf_lx = ref_pic; ps_ref_pic_buf_lx++; } } diff --git a/decoder/ih264d_quant_scaling.c b/decoder/ih264d_quant_scaling.c index 1d48907..4e5c58d 100644 --- a/decoder/ih264d_quant_scaling.c +++ b/decoder/ih264d_quant_scaling.c @@ -20,6 +20,7 @@ #include "ih264_typedefs.h" #include "ih264_macros.h" #include "ih264_platform_macros.h" +#include "ih264_defs.h" #include "ih264d_bitstrm.h" #include "ih264d_structs.h" #include "ih264d_parse_cavlc.h" @@ -44,7 +45,7 @@ #define IDCT_BLOCK_WIDTH8X8 8 -void ih264d_scaling_list(WORD16 *pi2_scaling_list, +WORD32 ih264d_scaling_list(WORD16 *pi2_scaling_list, WORD32 i4_size_of_scalinglist, UWORD8 *pu1_use_default_scaling_matrix_flag, dec_bit_stream_t *ps_bitstrm) @@ -62,6 +63,11 @@ void ih264d_scaling_list(WORD16 *pi2_scaling_list, i4_delta_scale = ih264d_sev(pu4_bitstrm_ofst, pu4_bitstrm_buf); + if(i4_delta_scale < MIN_H264_DELTA_SCALE || + i4_delta_scale > MAX_H264_DELTA_SCALE) + { + return ERROR_INV_RANGE_QP_T; + } i4_nextScale = ((i4_lastScale + i4_delta_scale + 256) & 0xff); *pu1_use_default_scaling_matrix_flag = ((i4_j == 0) @@ -72,6 +78,7 @@ void ih264d_scaling_list(WORD16 *pi2_scaling_list, (i4_nextScale == 0) ? (i4_lastScale) : (i4_nextScale); i4_lastScale = pi2_scaling_list[i4_j]; } + return OK; } WORD32 ih264d_form_default_scaling_matrix(dec_struct_t *ps_dec) diff --git a/decoder/ih264d_quant_scaling.h b/decoder/ih264d_quant_scaling.h index c714c34..1a9b7d1 100644 --- a/decoder/ih264d_quant_scaling.h +++ b/decoder/ih264d_quant_scaling.h @@ -19,7 +19,7 @@ */ #ifndef _IH264D_QUANT_SCALING_H_ #define _IH264D_QUANT_SCALING_H_ -void ih264d_scaling_list(WORD16 *pi2_scaling_list, +WORD32 ih264d_scaling_list(WORD16 *pi2_scaling_list, WORD32 i4_size_of_scalinglist, UWORD8 *pu1_use_default_scaling_matrix_flag, dec_bit_stream_t *ps_bitstrm); diff --git a/encoder/ih264e_process.c b/encoder/ih264e_process.c index 5333046..490c6d8 100644 --- a/encoder/ih264e_process.c +++ b/encoder/ih264e_process.c @@ -584,8 +584,6 @@ IH264E_ERROR_T ih264e_entropy(process_ctxt_t *ps_proc) } } } - /* Dont execute any further instructions until store synchronization took place */ - DATA_SYNC(); } /* Ending bitstream offset for header in bits */ @@ -676,6 +674,9 @@ IH264E_ERROR_T ih264e_entropy(process_ctxt_t *ps_proc) DEBUG("entropy status %x", ps_entropy->i4_error_code); } + /* Dont execute any further instructions until store synchronization took place */ + DATA_SYNC(); + /* allow threads to dequeue entropy jobs */ ps_codec->au4_entropy_thread_active[ctxt_sel] = 0; |