summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarish Mahendrakar <harish.mahendrakar@ittiam.com>2015-04-28 19:07:40 +0530
committerThe Android Automerger <android-build@google.com>2015-05-05 13:10:32 -0700
commit4e091252cb061b97cbb4a214199c174dd26e453d (patch)
treeee7914d40fe6226b5c9e0e25d9e3b9e4f578eab1
parentfab9a811d267f2c71bd031512e2a230cea1fb96f (diff)
downloadandroid_external_libavc-4e091252cb061b97cbb4a214199c174dd26e453d.tar.gz
android_external_libavc-4e091252cb061b97cbb4a214199c174dd26e453d.tar.bz2
android_external_libavc-4e091252cb061b97cbb4a214199c174dd26e453d.zip
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 Bug: 20554276 Change-Id: I111093950f94698296d8499a2845cfe2db6c557b
-rwxr-xr-xcommon/ih264_macros.h2
-rwxr-xr-xdecoder/ih264d_parse_headers.c19
-rwxr-xr-xencoder/arm/ih264e_fmt_conv.s7
-rwxr-xr-xencoder/ih264e_cavlc.c1
-rwxr-xr-xencoder/ih264e_cavlc.h26
-rwxr-xr-xencoder/ih264e_core_coding.c15
-rwxr-xr-xencoder/ih264e_process.c107
-rwxr-xr-xtest/encoder/app.h1
-rwxr-xr-xtest/encoder/input.c6
-rwxr-xr-xtest/encoder/main.c8
10 files changed, 94 insertions, 98 deletions
diff --git a/common/ih264_macros.h b/common/ih264_macros.h
index 6e4cb16..969012f 100755
--- a/common/ih264_macros.h
+++ b/common/ih264_macros.h
@@ -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)
/**
******************************************************************************
diff --git a/decoder/ih264d_parse_headers.c b/decoder/ih264d_parse_headers.c
index 9458d6b..de5bcb9 100755
--- a/decoder/ih264d_parse_headers.c
+++ b/decoder/ih264d_parse_headers.c
@@ -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;
diff --git a/encoder/arm/ih264e_fmt_conv.s b/encoder/arm/ih264e_fmt_conv.s
index 2bf1479..2c04141 100755
--- a/encoder/arm/ih264e_fmt_conv.s
+++ b/encoder/arm/ih264e_fmt_conv.s
@@ -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
diff --git a/encoder/ih264e_cavlc.c b/encoder/ih264e_cavlc.c
index 1341dcd..1f98b6a 100755
--- a/encoder/ih264e_cavlc.c
+++ b/encoder/ih264e_cavlc.c
@@ -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"
diff --git a/encoder/ih264e_cavlc.h b/encoder/ih264e_cavlc.h
index 86f4cd4..acd0def 100755
--- a/encoder/ih264e_cavlc.h
+++ b/encoder/ih264e_cavlc.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;\
+ }\
+}
/*****************************************************************************/
diff --git a/encoder/ih264e_core_coding.c b/encoder/ih264e_core_coding.c
index 5ba18de..89243a5 100755
--- a/encoder/ih264e_core_coding.c
+++ b/encoder/ih264e_core_coding.c
@@ -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);
diff --git a/encoder/ih264e_process.c b/encoder/ih264e_process.c
index 9a468e9..fa67d84 100755
--- a/encoder/ih264e_process.c
+++ b/encoder/ih264e_process.c
@@ -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);
diff --git a/test/encoder/app.h b/test/encoder/app.h
index 8c409b8..7c16fcd 100755
--- a/test/encoder/app.h
+++ b/test/encoder/app.h
@@ -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
diff --git a/test/encoder/input.c b/test/encoder/input.c
index aa52b45..c292612 100755
--- a/test/encoder/input.c
+++ b/test/encoder/input.c
@@ -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);
diff --git a/test/encoder/main.c b/test/encoder/main.c
index b02958a..2a9635d 100755
--- a/test/encoder/main.c
+++ b/test/encoder/main.c
@@ -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);
/*****************************************************************************/