Fixed few issues seen in CTS tests
Added support for encoding non-multiple of 16 dimensions Added support for encoding dimensions smaller than 64x64 Aligned coeff data to 4 byte boundary Change-Id: I111093950f94698296d8499a2845cfe2db6c557b
This commit is contained in:
parent
fab9a811d2
commit
c72323e723
10 changed files with 94 additions and 98 deletions
|
|
@ -48,7 +48,7 @@
|
|||
#define ALIGN16(x) ((((x) + 15) >> 4) << 4)
|
||||
#define ALIGN8(x) ((((x) + 7) >> 3) << 3)
|
||||
#define ALIGN4(x) ((((x) + 3) >> 2) << 2)
|
||||
|
||||
#define ALIGN2(x) ((((x) + 1) >> 1) << 1)
|
||||
|
||||
/**
|
||||
******************************************************************************
|
||||
|
|
|
|||
|
|
@ -958,28 +958,9 @@ WORD32 ih264d_parse_sps(dec_struct_t *ps_dec, dec_bit_stream_t *ps_bitstrm)
|
|||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Code Add to check for display width.
|
||||
* This has to be at the end of the SPS parsing, so everything gets
|
||||
* parsed and the error will not affect decoding.
|
||||
* */
|
||||
if((0 != ps_dec->u4_app_disp_width)
|
||||
&& (ps_dec->u4_app_disp_width < ps_dec->u2_pic_wd))
|
||||
{
|
||||
ps_dec->u4_app_disp_width = ps_dec->u2_pic_wd;
|
||||
return ERROR_DISP_WIDTH_RESET_TO_PIC_WIDTH;
|
||||
}
|
||||
|
||||
|
||||
|
||||
ps_dec->u2_pic_wd = u2_pic_wd;
|
||||
ps_dec->u2_pic_ht = u2_pic_ht;
|
||||
|
||||
/* Added temporarily to give pic height and width as display height */
|
||||
/* and width in case some cropping errors occur` */
|
||||
/*ps_dec->u2_disp_height = ps_dec->u2_pic_ht;
|
||||
ps_dec->u2_disp_width = ps_dec->u2_pic_wd;*/
|
||||
|
||||
/* Determining the Width and Height of Frame from that of Picture */
|
||||
|
||||
ps_dec->u2_frm_wd_y = u2_frm_wd_y;
|
||||
|
|
|
|||
|
|
@ -83,7 +83,6 @@ ih264e_fmt_conv_420p_to_420sp_a9q:
|
|||
sub r7, r7, r5 @// Source increment
|
||||
sub r8, r8, r5 @// Destination increment
|
||||
|
||||
vpush {d8-d15}
|
||||
yuv420sp_uv_row_loop_y:
|
||||
mov r6, r5
|
||||
|
||||
|
|
@ -134,7 +133,7 @@ yuv420sp_uv_chroma:
|
|||
mov r5, r5, lsr #1
|
||||
mov r4, r4, lsr #1
|
||||
ldr r3, [sp, #40] @// Load pu1_dest_uv from stack
|
||||
vpush {d8-d15}
|
||||
|
||||
yuv420sp_uv_row_loop_uv:
|
||||
mov r6, r5
|
||||
|
||||
|
|
@ -171,7 +170,6 @@ yuv420sp_uv_row_loop_end_uv:
|
|||
subs r4, r4, #1
|
||||
bgt yuv420sp_uv_row_loop_uv
|
||||
@//POP THE REGISTERS
|
||||
vpop {d8-d15}
|
||||
ldmfd sp!, {r4-r12, pc}
|
||||
|
||||
|
||||
|
|
@ -276,8 +274,6 @@ ih264e_fmt_conv_422i_to_420sp_a9q:
|
|||
add r4, r12, r4 @// u2_offset1 = u2_offset1 + u4_stride_y
|
||||
add r5, r14, r5, lsl #1 @// u2_offset_yuv422i = u2_offset_yuv422i + u4_stride_yuv422i
|
||||
|
||||
vpush {d8-d15}
|
||||
|
||||
@// Register Assignment
|
||||
@// pu1_y - r0
|
||||
@// pu1_y_nxt_row - r6
|
||||
|
|
@ -322,7 +318,6 @@ yuv420_to_yuv422i_width_loop:
|
|||
|
||||
add r8, r8, r5 @// pu2_yuv422i_nxt_row = pu2_yuv422i_nxt_row + u2_offset_yuv422i
|
||||
bgt yuv420_to_yuv422i_hight_loop
|
||||
vpop {d8-d15}
|
||||
ldmfd sp!, {r4-r12, pc} @// Restore the register which are used
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -59,6 +59,7 @@
|
|||
#include "iv2.h"
|
||||
#include "ive2.h"
|
||||
#include "ih264_debug.h"
|
||||
#include "ih264_macros.h"
|
||||
#include "ih264_defs.h"
|
||||
#include "ih264e_defs.h"
|
||||
#include "ih264e_error.h"
|
||||
|
|
|
|||
|
|
@ -43,20 +43,20 @@
|
|||
/*****************************************************************************/
|
||||
|
||||
#define PARSE_COEFF_DATA_BLOCK_4x4(pv_mb_coeff_data, ps_mb_coeff_data, u4_nnz, u4_sig_coeff_map, pi2_res_block) \
|
||||
{\
|
||||
ps_mb_coeff_data = pv_mb_coeff_data; \
|
||||
u4_nnz = ps_mb_coeff_data->i4_sig_map_nnz & 0xff; \
|
||||
if (u4_nnz)\
|
||||
{\
|
||||
ps_mb_coeff_data = pv_mb_coeff_data; \
|
||||
u4_nnz = ps_mb_coeff_data->i4_sig_map_nnz & 0xff; \
|
||||
if (u4_nnz)\
|
||||
{\
|
||||
u4_sig_coeff_map = ps_mb_coeff_data->i4_sig_map_nnz >> 16; \
|
||||
pi2_res_block = ps_mb_coeff_data->ai2_residue; \
|
||||
pv_mb_coeff_data = ps_mb_coeff_data->ai2_residue + u4_nnz; \
|
||||
}\
|
||||
else\
|
||||
{\
|
||||
pv_mb_coeff_data = ps_mb_coeff_data->ai2_residue;\
|
||||
}\
|
||||
}
|
||||
u4_sig_coeff_map = ps_mb_coeff_data->i4_sig_map_nnz >> 16; \
|
||||
pi2_res_block = ps_mb_coeff_data->ai2_residue; \
|
||||
pv_mb_coeff_data = ps_mb_coeff_data->ai2_residue + ALIGN2(u4_nnz); \
|
||||
}\
|
||||
else\
|
||||
{\
|
||||
pv_mb_coeff_data = ps_mb_coeff_data->ai2_residue;\
|
||||
}\
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
|
|||
|
|
@ -58,6 +58,7 @@
|
|||
#include "ih264_platform_macros.h"
|
||||
#include "iv2.h"
|
||||
#include "ive2.h"
|
||||
#include "ih264_macros.h"
|
||||
#include "ih264_defs.h"
|
||||
#include "ih264e_defs.h"
|
||||
#include "ih264_trans_data.h"
|
||||
|
|
@ -843,7 +844,7 @@ void ih264e_pack_l_mb_i16(WORD16 *pi2_res_mb,
|
|||
}
|
||||
/* write significant coeff map */
|
||||
ps_mb_coeff_data->i4_sig_map_nnz |= (u4_s_map << 16);
|
||||
(*pv_mb_coeff_data) = ps_mb_coeff_data->ai2_residue + u4_nnz_cnt;
|
||||
(*pv_mb_coeff_data) = ps_mb_coeff_data->ai2_residue + ALIGN2(u4_nnz_cnt);
|
||||
|
||||
u4_cntrl = 0x00008000;// Set DC bit in ctrl code
|
||||
}
|
||||
|
|
@ -896,7 +897,7 @@ void ih264e_pack_l_mb_i16(WORD16 *pi2_res_mb,
|
|||
}
|
||||
/* write significant coeff map */
|
||||
ps_mb_coeff_data->i4_sig_map_nnz |= (u4_s_map << 16);
|
||||
(*pv_mb_coeff_data) = ps_mb_coeff_data->ai2_residue + u4_nnz_cnt;
|
||||
(*pv_mb_coeff_data) = ps_mb_coeff_data->ai2_residue + ALIGN2(u4_nnz_cnt);
|
||||
*u1_cbp_l = 15;
|
||||
|
||||
u4_cntrl |= (1 << (31 - u1_scan_order[b4]));
|
||||
|
|
@ -1059,7 +1060,7 @@ void ih264e_pack_l_mb(WORD16 *pi2_res_mb,
|
|||
|
||||
/* write significant coeff map */
|
||||
ps_mb_coeff_data->i4_sig_map_nnz |= (u4_s_map << 16);
|
||||
(*pv_mb_coeff_data) = ps_mb_coeff_data->ai2_residue + u4_nnz_cnt;
|
||||
(*pv_mb_coeff_data) = ps_mb_coeff_data->ai2_residue + ALIGN2(u4_nnz_cnt);
|
||||
|
||||
/* cbp */
|
||||
*u1_cbp_l |= (1 << b8);
|
||||
|
|
@ -1283,7 +1284,7 @@ void ih264e_pack_c_mb(WORD16 *pi2_res_mb,
|
|||
}
|
||||
/* write significant coeff map U/V */
|
||||
ps_mb_coeff_data->i4_sig_map_nnz |= (u4_s_map << 16);
|
||||
(*pv_mb_coeff_data) = ps_mb_coeff_data->ai2_residue + u4_nnz_cnt;
|
||||
(*pv_mb_coeff_data) = ps_mb_coeff_data->ai2_residue + ALIGN2(u4_nnz_cnt);
|
||||
*u1_cbp_c = 1;
|
||||
|
||||
(*pu4_cntrl) |= (1 << cntrl_pos);
|
||||
|
|
@ -1388,7 +1389,7 @@ void ih264e_pack_c_mb(WORD16 *pi2_res_mb,
|
|||
|
||||
/* write significant coeff map U/V */
|
||||
ps_mb_coeff_data->i4_sig_map_nnz |= (u4_s_map << 16);
|
||||
(*pv_mb_coeff_data) = ps_mb_coeff_data->ai2_residue + u4_nnz_cnt;
|
||||
(*pv_mb_coeff_data) = ps_mb_coeff_data->ai2_residue + ALIGN2(u4_nnz_cnt);
|
||||
u1_cbp_ac = 2;
|
||||
|
||||
(*pu4_cntrl) |= 1 << cntrl_pos;
|
||||
|
|
@ -1804,7 +1805,7 @@ UWORD8 ih264e_code_luma_intra_macroblock_4x4(process_ctxt_t *ps_proc)
|
|||
ps_mb_coeff_data->i4_sig_map_nnz |= (u4_s_map << 16);
|
||||
|
||||
/* update ptr to coeff data */
|
||||
(*pv_mb_coeff_data) = ps_mb_coeff_data->ai2_residue + u4_nnz_cnt;
|
||||
(*pv_mb_coeff_data) = ps_mb_coeff_data->ai2_residue + ALIGN2(u4_nnz_cnt);
|
||||
|
||||
/* cbp */
|
||||
u1_cbp_l |= (1 << b8);
|
||||
|
|
@ -1950,7 +1951,7 @@ UWORD8 ih264e_code_luma_intra_macroblock_4x4_rdopt_on(process_ctxt_t *ps_proc)
|
|||
ps_mb_coeff_data->i4_sig_map_nnz |= (u4_s_map << 16);
|
||||
|
||||
/* update ptr to coeff data */
|
||||
(*pv_mb_coeff_data) = ps_mb_coeff_data->ai2_residue + u4_nnz_cnt;
|
||||
(*pv_mb_coeff_data) = ps_mb_coeff_data->ai2_residue + ALIGN2(u4_nnz_cnt);
|
||||
|
||||
/* cbp */
|
||||
u1_cbp_l |= (1 << b8);
|
||||
|
|
|
|||
|
|
@ -778,13 +778,6 @@ WORD32 ih264e_update_proc_ctxt(process_ctxt_t *ps_proc)
|
|||
/* sub mb modes */
|
||||
UWORD8 *pu1_top_mb_intra_modes = ps_proc->pu1_top_mb_intra_modes + (i4_mb_x << 4);
|
||||
|
||||
// /* zero mv */
|
||||
// mv_t zero_mv = {0, 0};
|
||||
|
||||
/* Pad the MB to support non standard sizes */
|
||||
UWORD32 u4_pad_right_sz = ps_codec->s_cfg.u4_wd - ps_codec->s_cfg.u4_disp_wd;
|
||||
UWORD32 u4_pad_bottom_sz = ps_codec->s_cfg.u4_ht - ps_codec->s_cfg.u4_disp_ht;
|
||||
|
||||
/*************************************************************/
|
||||
/* During MV prediction, when top right mb is not available, */
|
||||
/* top left mb info. is used for prediction. Hence the curr */
|
||||
|
|
@ -946,28 +939,6 @@ WORD32 ih264e_update_proc_ctxt(process_ctxt_t *ps_proc)
|
|||
ps_proc->pu1_rec_buf_chroma += MB_SIZE;
|
||||
ps_proc->pu1_ref_buf_chroma += MB_SIZE;
|
||||
|
||||
/* pad right edge */
|
||||
if (u4_pad_right_sz && (ps_proc->i4_mb_x == i4_wd_mbs - 1))
|
||||
{
|
||||
ih264_pad_right_luma(
|
||||
ps_proc->pu1_src_buf_luma + MB_SIZE - u4_pad_right_sz,
|
||||
ps_proc->i4_src_strd, MB_SIZE, u4_pad_right_sz);
|
||||
|
||||
ih264_pad_right_chroma(
|
||||
ps_proc->pu1_src_buf_chroma + MB_SIZE - u4_pad_right_sz,
|
||||
ps_proc->i4_src_strd, BLK8x8SIZE, u4_pad_right_sz);
|
||||
}
|
||||
|
||||
/* pad bottom edge */
|
||||
if (u4_pad_bottom_sz && (ps_proc->i4_mb_y == i4_ht_mbs - 1) &&
|
||||
ps_proc->i4_mb_x != 0)
|
||||
{
|
||||
ih264_pad_bottom(ps_proc->pu1_src_buf_luma + (MB_SIZE - u4_pad_bottom_sz) * ps_proc->i4_src_strd,
|
||||
ps_proc->i4_src_strd, MB_SIZE, u4_pad_bottom_sz);
|
||||
|
||||
ih264_pad_bottom(ps_proc->pu1_src_buf_chroma + (MB_SIZE - u4_pad_bottom_sz) * ps_proc->i4_src_strd / 2,
|
||||
ps_proc->i4_src_strd, MB_SIZE, (u4_pad_bottom_sz / 2));
|
||||
}
|
||||
|
||||
/* Reset cost, distortion params */
|
||||
ps_proc->i4_mb_cost = INT_MAX;
|
||||
|
|
@ -1051,7 +1022,10 @@ IH264E_ERROR_T ih264e_init_proc_ctxt(process_ctxt_t *ps_proc)
|
|||
UWORD8 *pu1_y_buf_base, *pu1_u_buf_base, *pu1_v_buf_base;
|
||||
|
||||
/* Pad the MB to support non standard sizes */
|
||||
UWORD32 u4_pad_right_sz = ps_codec->s_cfg.u4_wd - ps_codec->s_cfg.u4_disp_wd;
|
||||
UWORD32 u4_pad_bottom_sz = ps_codec->s_cfg.u4_ht - ps_codec->s_cfg.u4_disp_ht;
|
||||
UWORD16 u2_num_rows = MB_SIZE;
|
||||
WORD32 convert_uv_only;
|
||||
|
||||
/********************************************************************/
|
||||
/* BEGIN INIT */
|
||||
|
|
@ -1064,14 +1038,27 @@ IH264E_ERROR_T ih264e_init_proc_ctxt(process_ctxt_t *ps_proc)
|
|||
ps_proc->i4_nmb_ntrpy = (ps_proc->i4_wd_mbs > MAX_NMB) ? MAX_NMB : ps_proc->i4_wd_mbs;
|
||||
ps_proc->u4_nmb_me = (ps_proc->i4_wd_mbs > MAX_NMB)? MAX_NMB : ps_proc->i4_wd_mbs;
|
||||
|
||||
convert_uv_only = 1;
|
||||
if (u4_pad_bottom_sz && (ps_proc->i4_mb_y == ps_proc->i4_ht_mbs - 1))
|
||||
{
|
||||
u2_num_rows = (UWORD16) MB_SIZE - u4_pad_bottom_sz;
|
||||
ps_proc->pu1_src_buf_luma_base = ps_codec->pu1_y_csc_buf_base;
|
||||
ps_proc->pu1_src_buf_luma = ps_proc->pu1_src_buf_luma_base + (i4_mb_x * MB_SIZE) + ps_codec->s_cfg.u4_max_wd * (i4_mb_y * MB_SIZE);
|
||||
convert_uv_only = 0;
|
||||
|
||||
}
|
||||
else
|
||||
ps_proc->pu1_src_buf_luma = ps_proc->pu1_src_buf_luma_base + (i4_mb_x * MB_SIZE) + i4_src_strd * (i4_mb_y * MB_SIZE);
|
||||
|
||||
/* init buffer pointers */
|
||||
ps_proc->pu1_src_buf_luma = ps_proc->pu1_src_buf_luma_base + (i4_mb_x * MB_SIZE) + i4_src_strd * (i4_mb_y * MB_SIZE);
|
||||
ps_proc->pu1_src_buf_chroma = ps_proc->pu1_src_buf_chroma_base + (i4_mb_x * MB_SIZE) + i4_src_strd * (i4_mb_y * BLK8x8SIZE);
|
||||
|
||||
ps_proc->pu1_src_buf_chroma = ps_proc->pu1_src_buf_chroma_base + (i4_mb_x * MB_SIZE) + ps_codec->s_cfg.u4_max_wd * (i4_mb_y * BLK8x8SIZE);
|
||||
ps_proc->pu1_rec_buf_luma = ps_proc->pu1_rec_buf_luma_base + (i4_mb_x * MB_SIZE) + i4_rec_strd * (i4_mb_y * MB_SIZE);
|
||||
ps_proc->pu1_rec_buf_chroma = ps_proc->pu1_rec_buf_chroma_base + (i4_mb_x * MB_SIZE) + i4_rec_strd * (i4_mb_y * BLK8x8SIZE);
|
||||
ps_proc->pu1_ref_buf_luma = ps_proc->pu1_ref_buf_luma_base + (i4_mb_x * MB_SIZE) + i4_rec_strd * (i4_mb_y * MB_SIZE);
|
||||
ps_proc->pu1_ref_buf_chroma = ps_proc->pu1_ref_buf_chroma_base + (i4_mb_x * MB_SIZE) + i4_rec_strd * (i4_mb_y * BLK8x8SIZE);
|
||||
|
||||
|
||||
/*
|
||||
* Do color space conversion
|
||||
* NOTE : We assume there that the number of MB's to process will not span multiple rows
|
||||
|
|
@ -1095,12 +1082,13 @@ IH264E_ERROR_T ih264e_init_proc_ctxt(process_ctxt_t *ps_proc)
|
|||
ps_codec->pf_ih264e_conv_420p_to_420sp(
|
||||
pu1_y_buf_base, pu1_u_buf_base, pu1_v_buf_base,
|
||||
ps_proc->pu1_src_buf_luma,
|
||||
ps_proc->pu1_src_buf_chroma, MB_SIZE,
|
||||
ps_proc->i4_wd_mbs * MB_SIZE,
|
||||
ps_proc->pu1_src_buf_chroma, u2_num_rows,
|
||||
ps_codec->s_cfg.u4_disp_wd,
|
||||
ps_proc->s_inp_buf.s_raw_buf.au4_strd[0],
|
||||
ps_proc->s_inp_buf.s_raw_buf.au4_strd[1],
|
||||
ps_proc->s_inp_buf.s_raw_buf.au4_strd[2],
|
||||
ps_proc->i4_src_strd, ps_proc->i4_src_strd, 1);
|
||||
ps_proc->i4_src_strd, ps_proc->i4_src_strd,
|
||||
convert_uv_only);
|
||||
break;
|
||||
|
||||
case IV_YUV_422ILE :
|
||||
|
|
@ -1111,7 +1099,7 @@ IH264E_ERROR_T ih264e_init_proc_ctxt(process_ctxt_t *ps_proc)
|
|||
ps_proc->pu1_src_buf_luma,
|
||||
ps_proc->pu1_src_buf_chroma,
|
||||
ps_proc->pu1_src_buf_chroma + 1, pu1_y_buf_base,
|
||||
ps_proc->i4_wd_mbs * MB_SIZE, MB_SIZE,
|
||||
ps_codec->s_cfg.u4_disp_wd, u2_num_rows,
|
||||
ps_proc->i4_src_strd, ps_proc->i4_src_strd,
|
||||
ps_proc->i4_src_strd,
|
||||
ps_proc->s_inp_buf.s_raw_buf.au4_strd[0] >> 1);
|
||||
|
|
@ -1121,16 +1109,36 @@ IH264E_ERROR_T ih264e_init_proc_ctxt(process_ctxt_t *ps_proc)
|
|||
break;
|
||||
}
|
||||
|
||||
if (u4_pad_right_sz && (ps_proc->i4_mb_x == 0) &&
|
||||
(ps_proc->i4_src_strd > (WORD32)ps_codec->s_cfg.u4_disp_wd) )
|
||||
{
|
||||
UWORD32 u4_pad_wd, u4_pad_ht;
|
||||
u4_pad_wd = (UWORD32)(ps_proc->i4_src_strd - ps_codec->s_cfg.u4_disp_wd);
|
||||
u4_pad_wd = MIN(u4_pad_right_sz, u4_pad_wd);
|
||||
u4_pad_ht = MB_SIZE;
|
||||
if(ps_proc->i4_mb_y == ps_proc->i4_ht_mbs - 1)
|
||||
u4_pad_ht = MIN(MB_SIZE, (MB_SIZE - u4_pad_bottom_sz));
|
||||
|
||||
ih264_pad_right_luma(
|
||||
ps_proc->pu1_src_buf_luma + ps_codec->s_cfg.u4_disp_wd,
|
||||
ps_proc->i4_src_strd, u4_pad_ht, u4_pad_wd);
|
||||
|
||||
ih264_pad_right_chroma(
|
||||
ps_proc->pu1_src_buf_chroma + ps_codec->s_cfg.u4_disp_wd,
|
||||
ps_proc->i4_src_strd, u4_pad_ht / 2, u4_pad_wd);
|
||||
}
|
||||
|
||||
/* pad bottom edge */
|
||||
if (u4_pad_bottom_sz && (ps_proc->i4_mb_y == ps_proc->i4_ht_mbs - 1) && ps_proc->i4_mb_x == 0)
|
||||
{
|
||||
ih264_pad_bottom(ps_proc->pu1_src_buf_luma + (MB_SIZE - u4_pad_bottom_sz) * ps_proc->i4_src_strd,
|
||||
ps_proc->i4_src_strd, MB_SIZE, u4_pad_bottom_sz);
|
||||
ps_proc->i4_src_strd, ps_proc->i4_src_strd, u4_pad_bottom_sz);
|
||||
|
||||
ih264_pad_bottom(ps_proc->pu1_src_buf_chroma + (MB_SIZE - u4_pad_bottom_sz) * ps_proc->i4_src_strd / 2,
|
||||
ps_proc->i4_src_strd, MB_SIZE, (u4_pad_bottom_sz / 2));
|
||||
ps_proc->i4_src_strd, ps_proc->i4_src_strd, (u4_pad_bottom_sz / 2));
|
||||
}
|
||||
|
||||
|
||||
/* packed mb coeff data */
|
||||
ps_proc->pv_mb_coeff_data = ((UWORD8 *)ps_proc->pv_pic_mb_coeff_data) + i4_mb_y * ps_codec->u4_size_coeff_data;
|
||||
|
||||
|
|
@ -1266,7 +1274,7 @@ IH264E_ERROR_T ih264e_pad_recon_buffer(process_ctxt_t *ps_proc,
|
|||
/* padding left chroma */
|
||||
ps_codec->pf_pad_left_chroma(pu1_curr_pic_chroma, i4_rec_strd, i4_pad_ht >> 1, PAD_LEFT);
|
||||
}
|
||||
else if (i4_mb_x == ps_proc->i4_wd_mbs - 1)
|
||||
if (i4_mb_x == ps_proc->i4_wd_mbs - 1)
|
||||
{
|
||||
/* padding right luma */
|
||||
ps_codec->pf_pad_right_luma(pu1_curr_pic_luma + MB_SIZE, i4_rec_strd, i4_pad_ht, PAD_RIGHT);
|
||||
|
|
@ -1300,7 +1308,7 @@ IH264E_ERROR_T ih264e_pad_recon_buffer(process_ctxt_t *ps_proc,
|
|||
|
||||
wd += PAD_LEFT;
|
||||
}
|
||||
else if (i4_mb_x == ps_proc->i4_wd_mbs - 1)
|
||||
if (i4_mb_x == ps_proc->i4_wd_mbs - 1)
|
||||
{
|
||||
wd += PAD_RIGHT;
|
||||
}
|
||||
|
|
@ -1415,7 +1423,7 @@ IH264E_ERROR_T ih264e_dblk_pad_hpel_processing_n_mbs(process_ctxt_t *ps_proc,
|
|||
}
|
||||
}
|
||||
|
||||
if (i4_mb_y > 0)
|
||||
if ((i4_mb_y > 0) || (i4_mb_y == (ps_proc->i4_ht_mbs - 1)))
|
||||
{
|
||||
/* if number of mb's to be processed are less than 'N', go back.
|
||||
* exception to the above clause is end of row */
|
||||
|
|
@ -1442,10 +1450,10 @@ IH264E_ERROR_T ih264e_dblk_pad_hpel_processing_n_mbs(process_ctxt_t *ps_proc,
|
|||
}
|
||||
|
||||
/* performing deblocking for required number of MBs */
|
||||
if (ps_proc->u4_disable_deblock_level != 1)
|
||||
if ((i4_mb_y > 0) && (ps_proc->u4_disable_deblock_level != 1))
|
||||
{
|
||||
/* Top or Top right MBs not deblocked */
|
||||
if (u4_deblk_prev_row != 1)
|
||||
if ((u4_deblk_prev_row != 1) && (i4_mb_y > 0))
|
||||
{
|
||||
return IH264E_SUCCESS;
|
||||
}
|
||||
|
|
@ -1483,7 +1491,7 @@ IH264E_ERROR_T ih264e_dblk_pad_hpel_processing_n_mbs(process_ctxt_t *ps_proc,
|
|||
|
||||
}
|
||||
}
|
||||
else
|
||||
else if(i4_mb_y > 0)
|
||||
{
|
||||
ps_deblk->i4_mb_x += i4_n_mb_process_count;
|
||||
|
||||
|
|
@ -1606,6 +1614,19 @@ IH264E_ERROR_T ih264e_dblk_pad_hpel_processing_n_mbs(process_ctxt_t *ps_proc,
|
|||
|
||||
}
|
||||
|
||||
/* In case height is less than 2 MBs pad top */
|
||||
if (ps_proc->i4_ht_mbs <= 2)
|
||||
{
|
||||
UWORD8 *pu1_pad_top_src;
|
||||
/* padding top luma */
|
||||
pu1_pad_top_src = ps_proc->pu1_rec_buf_luma_base - PAD_LEFT;
|
||||
ps_codec->pf_pad_top(pu1_pad_top_src, i4_rec_strd, i4_rec_strd, PAD_TOP);
|
||||
|
||||
/* padding top chroma */
|
||||
pu1_pad_top_src = ps_proc->pu1_rec_buf_chroma_base - PAD_LEFT;
|
||||
ps_codec->pf_pad_top(pu1_pad_top_src, i4_rec_strd, i4_rec_strd, (PAD_TOP >> 1));
|
||||
}
|
||||
|
||||
/* padding bottom luma */
|
||||
pu1_pad_bottom_src = ps_proc->pu1_rec_buf_luma_base + ps_proc->i4_ht_mbs * MB_SIZE * i4_rec_strd - PAD_LEFT;
|
||||
ps_codec->pf_pad_bottom(pu1_pad_bottom_src, i4_rec_strd, i4_rec_strd, PAD_BOT);
|
||||
|
|
|
|||
|
|
@ -127,7 +127,6 @@
|
|||
#define DEFAULT_EPROFILE IV_PROFILE_BASE
|
||||
#define DEFAULT_SLICE_MODE 0
|
||||
#define DEFAULT_SLICE_PARAM 256
|
||||
#define DEFAULT_ARCH ARCH_ARM_A9Q
|
||||
#define STRLENGTH 500
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -243,10 +243,8 @@ void allocate_input(app_ctxt_t *ps_app_ctxt)
|
|||
num_bufs = MIN(DEFAULT_MAX_INPUT_BUFS, num_bufs);
|
||||
|
||||
/* Size of buffer */
|
||||
luma_size = ps_get_buf_info_op->s_ive_op.au4_min_in_buf_size[0];
|
||||
chroma_size = ps_get_buf_info_op->s_ive_op.au4_min_in_buf_size[1]+
|
||||
ps_get_buf_info_op->s_ive_op.au4_min_in_buf_size[2];
|
||||
|
||||
luma_size = ps_app_ctxt->u4_wd * ps_app_ctxt->u4_ht;
|
||||
chroma_size = luma_size >> 1;
|
||||
pic_size = luma_size + chroma_size;
|
||||
|
||||
num_mbs = ALIGN16(ps_app_ctxt->u4_max_wd) * ALIGN16(ps_app_ctxt->u4_max_ht);
|
||||
|
|
|
|||
|
|
@ -905,7 +905,7 @@ void init_default_params(app_ctxt_t *ps_app_ctxt)
|
|||
ps_app_ctxt->u4_pics_cnt = 0;
|
||||
ps_app_ctxt->e_inp_color_fmt = DEFAULT_INP_COLOR_FMT;
|
||||
ps_app_ctxt->e_recon_color_fmt = DEFAULT_RECON_COLOR_FMT;
|
||||
ps_app_ctxt->e_arch = DEFAULT_ARCH;
|
||||
ps_app_ctxt->e_arch = ARCH_ARM_A9Q;
|
||||
ps_app_ctxt->e_soc = SOC_GENERIC;
|
||||
ps_app_ctxt->header_generated = 0;
|
||||
ps_app_ctxt->pv_codec_obj = NULL;
|
||||
|
|
@ -1604,9 +1604,9 @@ void synchronous_encode(iv_obj_t *ps_enc, app_ctxt_t *ps_app_ctxt)
|
|||
{
|
||||
/* init buffers */
|
||||
ps_inp_raw_buf->apv_bufs[0] = pu1_buf;
|
||||
pu1_buf += (ps_app_ctxt->u4_strd) * ALIGN16(ps_app_ctxt->u4_ht);
|
||||
pu1_buf += (ps_app_ctxt->u4_wd) * ps_app_ctxt->u4_ht;
|
||||
ps_inp_raw_buf->apv_bufs[1] = pu1_buf;
|
||||
pu1_buf += (ps_app_ctxt->u4_strd >> 1) * (ALIGN16(ps_app_ctxt->u4_ht) >> 1);
|
||||
pu1_buf += (ps_app_ctxt->u4_wd >> 1) * (ps_app_ctxt->u4_ht >> 1);
|
||||
ps_inp_raw_buf->apv_bufs[2] = pu1_buf;
|
||||
|
||||
ps_inp_raw_buf->au4_wd[0] = ps_app_ctxt->u4_wd;
|
||||
|
|
@ -2346,7 +2346,7 @@ int main(int argc, char *argv[])
|
|||
/*****************************************************************************/
|
||||
/* Video control Set Frame dimensions */
|
||||
/*****************************************************************************/
|
||||
s_app_ctxt.u4_strd = ALIGN16(s_app_ctxt.u4_wd);
|
||||
s_app_ctxt.u4_strd = s_app_ctxt.u4_wd;
|
||||
set_dimensions(&s_app_ctxt, 0, 0);
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue