mirror of
https://github.com/ittiam-systems/libhevc.git
synced 2026-04-02 20:30:49 +07:00
hevcdec: update lib for chroma format idc 422
Some checks are pending
CMake / build (cmake, aarch64-linux-gnu-gcc, -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchains/aarch64_toolchain.cmake, aarch64-linux-gnu-g++, ubuntu-latest-cross-aarch64-cmake, ubuntu-latest) (push) Waiting to run
CMake / build (cmake, arm-linux-gnueabihf-gcc, -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchains/aarch32_toolchain.cmake, arm-linux-gnueabihf-g++, ubuntu-latest-cross-aarch32-cmake, ubuntu-latest) (push) Waiting to run
CMake / build (cmake, clang, , clang++, macos-latest-clang-cmake, macos-latest) (push) Waiting to run
CMake / build (cmake, clang, , clang++, ubuntu-24.04-arm-clang-cmake, ubuntu-24.04-arm) (push) Waiting to run
CMake / build (cmake, clang, , clang++, ubuntu-latest-clang-cmake, ubuntu-latest) (push) Waiting to run
CMake / build (cmake, clang, -DSANITIZE=fuzzer-no-link,address, clang++, ubuntu-latest-clang-cmake-asan-fuzzer, ubuntu-latest) (push) Waiting to run
CMake / build (cmake, clang, -G Ninja, clang++, ubuntu-latest-clang-cmake-ninja, ubuntu-latest) (push) Waiting to run
CMake / build (cmake, gcc, , g++, ubuntu-latest-gcc-cmake, ubuntu-latest) (push) Waiting to run
Some checks are pending
CMake / build (cmake, aarch64-linux-gnu-gcc, -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchains/aarch64_toolchain.cmake, aarch64-linux-gnu-g++, ubuntu-latest-cross-aarch64-cmake, ubuntu-latest) (push) Waiting to run
CMake / build (cmake, arm-linux-gnueabihf-gcc, -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchains/aarch32_toolchain.cmake, arm-linux-gnueabihf-g++, ubuntu-latest-cross-aarch32-cmake, ubuntu-latest) (push) Waiting to run
CMake / build (cmake, clang, , clang++, macos-latest-clang-cmake, macos-latest) (push) Waiting to run
CMake / build (cmake, clang, , clang++, ubuntu-24.04-arm-clang-cmake, ubuntu-24.04-arm) (push) Waiting to run
CMake / build (cmake, clang, , clang++, ubuntu-latest-clang-cmake, ubuntu-latest) (push) Waiting to run
CMake / build (cmake, clang, -DSANITIZE=fuzzer-no-link,address, clang++, ubuntu-latest-clang-cmake-asan-fuzzer, ubuntu-latest) (push) Waiting to run
CMake / build (cmake, clang, -G Ninja, clang++, ubuntu-latest-clang-cmake-ninja, ubuntu-latest) (push) Waiting to run
CMake / build (cmake, gcc, , g++, ubuntu-latest-gcc-cmake, ubuntu-latest) (push) Waiting to run
- updated parser for 422 specific syntax elements - updated iqitrecon module to handle 422 subtu's. Verified functionality for intra only slices - add support 422 i/o - restrict combinations of output chroma format and internal chroma format allowed. That is, for a given chroma format idc not all output color formats are supported. The output format can now be either same as internal color format or 420p. Test: ./hevcdec Change-Id: I9dbf5c141aceb8ffcbe063aa35856eeed11e3d4f
This commit is contained in:
parent
141e971581
commit
38e622bf6a
12 changed files with 441 additions and 236 deletions
|
|
@ -233,7 +233,9 @@ static IV_API_CALL_STATUS_T api_check_struct_sanity(iv_obj_t *ps_handle,
|
|||
&& (ps_ip->s_ivd_create_ip_t.e_output_format
|
||||
!= IV_GRAY)
|
||||
&& (ps_ip->s_ivd_create_ip_t.e_output_format
|
||||
!= IV_YUV_444P))
|
||||
!= IV_YUV_444P)
|
||||
&& (ps_ip->s_ivd_create_ip_t.e_output_format
|
||||
!= IV_YUV_422P))
|
||||
{
|
||||
ps_op->s_ivd_create_op_t.u4_error_code |= 1
|
||||
<< IVD_UNSUPPORTEDPARAM;
|
||||
|
|
@ -1437,7 +1439,7 @@ WORD32 ihevcd_allocate_static_bufs(iv_obj_t **pps_codec_obj,
|
|||
|
||||
size = inter_pred_tmp_buf_size * 2;
|
||||
#ifdef ENABLE_MAIN_REXT_PROFILE
|
||||
size += (res_buf_size * 2);
|
||||
size += (res_buf_size * 4);
|
||||
#endif
|
||||
size += pic_pu_idx_map_size;
|
||||
size *= MAX_PROCESS_THREADS;
|
||||
|
|
@ -1460,6 +1462,9 @@ WORD32 ihevcd_allocate_static_bufs(iv_obj_t **pps_codec_obj,
|
|||
|
||||
ps_codec->as_process[i].pi2_res_chroma_buf = (WORD16 *)pu1_buf;
|
||||
pu1_buf += res_buf_size;
|
||||
|
||||
ps_codec->as_process[i].pi2_invscan_out_subtu = (WORD16 *)pu1_buf;
|
||||
pu1_buf += (res_buf_size * 2);
|
||||
#endif
|
||||
|
||||
/* Inverse transform intermediate and inverse scan output buffers reuse inter pred scratch buffers */
|
||||
|
|
@ -2640,6 +2645,8 @@ WORD32 ihevcd_get_status(iv_obj_t *ps_codec_obj,
|
|||
ps_ctl_op->u4_min_num_out_bufs = MIN_OUT_BUFS_420;
|
||||
else if(ps_codec->e_chroma_fmt == IV_YUV_444P)
|
||||
ps_ctl_op->u4_min_num_out_bufs = MIN_OUT_BUFS_444;
|
||||
else if(ps_codec->e_chroma_fmt == IV_YUV_422P)
|
||||
ps_ctl_op->u4_min_num_out_bufs = MIN_OUT_BUFS_422;
|
||||
else if((ps_codec->e_chroma_fmt == IV_YUV_420SP_UV)
|
||||
|| (ps_codec->e_chroma_fmt == IV_YUV_420SP_VU))
|
||||
ps_ctl_op->u4_min_num_out_bufs = MIN_OUT_BUFS_420SP;
|
||||
|
|
@ -2728,6 +2735,12 @@ WORD32 ihevcd_get_status(iv_obj_t *ps_codec_obj,
|
|||
ps_ctl_op->u4_min_out_buf_size[1] = 0;
|
||||
ps_ctl_op->u4_min_out_buf_size[2] = 0;
|
||||
}
|
||||
else if(ps_codec->e_chroma_fmt == IV_YUV_422P)
|
||||
{
|
||||
ps_ctl_op->u4_min_out_buf_size[0] = (wd * ht);
|
||||
ps_ctl_op->u4_min_out_buf_size[1] = (wd * ht) >> 1;
|
||||
ps_ctl_op->u4_min_out_buf_size[2] = (wd * ht) >> 1;
|
||||
}
|
||||
ps_ctl_op->u4_pic_ht = ht;
|
||||
ps_ctl_op->u4_pic_wd = wd;
|
||||
ps_ctl_op->u4_frame_rate = 30000;
|
||||
|
|
@ -2792,6 +2805,8 @@ WORD32 ihevcd_get_buf_info(iv_obj_t *ps_codec_obj,
|
|||
ps_ctl_op->u4_min_num_out_bufs = MIN_OUT_BUFS_420;
|
||||
else if(ps_codec->e_chroma_fmt == IV_YUV_444P)
|
||||
ps_ctl_op->u4_min_num_out_bufs = MIN_OUT_BUFS_444;
|
||||
else if(ps_codec->e_chroma_fmt == IV_YUV_422P)
|
||||
ps_ctl_op->u4_min_num_out_bufs = MIN_OUT_BUFS_422;
|
||||
else if((ps_codec->e_chroma_fmt == IV_YUV_420SP_UV)
|
||||
|| (ps_codec->e_chroma_fmt == IV_YUV_420SP_VU))
|
||||
ps_ctl_op->u4_min_num_out_bufs = MIN_OUT_BUFS_420SP;
|
||||
|
|
@ -2908,6 +2923,12 @@ WORD32 ihevcd_get_buf_info(iv_obj_t *ps_codec_obj,
|
|||
ps_ctl_op->u4_min_out_buf_size[1] =
|
||||
ps_ctl_op->u4_min_out_buf_size[2] = 0;
|
||||
}
|
||||
else if(ps_codec->e_chroma_fmt == IV_YUV_422P)
|
||||
{
|
||||
ps_ctl_op->u4_min_out_buf_size[0] = (wd * ht);
|
||||
ps_ctl_op->u4_min_out_buf_size[1] = (wd * ht) >> 1;
|
||||
ps_ctl_op->u4_min_out_buf_size[2] = (wd * ht) >> 1;
|
||||
}
|
||||
ps_codec->i4_num_disp_bufs = ps_ctl_op->u4_num_disp_bufs;
|
||||
|
||||
return IV_SUCCESS;
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@
|
|||
#include "ihevcd_common_tables.h"
|
||||
#include "ihevc_defs.h"
|
||||
|
||||
const WORD16 gai2_ihevcd_chroma_qp[] =
|
||||
const WORD16 gai2_ihevcd_chroma_qp_420[] =
|
||||
{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
|
||||
17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 29,
|
||||
30, 31, 32, 33, 33, 34, 34, 35, 35, 36, 36, 37, 37, 38,
|
||||
|
|
@ -47,7 +47,11 @@ const WORD16 gai2_ihevcd_chroma_qp[] =
|
|||
const UWORD8 gau1_intra_pred_chroma_modes[] =
|
||||
{ INTRA_PLANAR, INTRA_ANGULAR(26), INTRA_ANGULAR(10), INTRA_DC };
|
||||
|
||||
const WORD16 gai2_ihevcd_chroma_qp_444[] =
|
||||
const UWORD8 gau1_intra_pred_chroma_modes_422[] =
|
||||
{ 0, 1, 2, 2, 2, 2, 3, 5, 7, 8, 10, 12, 13, 15, 17, 18, 19, 20,
|
||||
21, 22, 23, 23, 24, 24, 25, 25, 26, 27, 27, 28, 28, 29, 29, 30, 31};
|
||||
|
||||
const WORD16 gai2_ihevcd_chroma_qp_clip[] =
|
||||
{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
|
||||
17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
|
||||
31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
|
||||
|
|
|
|||
|
|
@ -34,10 +34,12 @@
|
|||
#ifndef _IHEVCD_COMMON_TABLES_H_
|
||||
#define _IHEVCD_COMMON_TABLES_H_
|
||||
|
||||
extern const WORD16 gai2_ihevcd_chroma_qp[];
|
||||
extern const WORD16 gai2_ihevcd_chroma_qp_420[];
|
||||
|
||||
extern const UWORD8 gau1_intra_pred_chroma_modes[];
|
||||
|
||||
extern const WORD16 gai2_ihevcd_chroma_qp_444[];
|
||||
extern const UWORD8 gau1_intra_pred_chroma_modes_422[];
|
||||
|
||||
extern const WORD16 gai2_ihevcd_chroma_qp_clip[];
|
||||
|
||||
#endif /*_IHEVCD_COMMON_TABLES_H_*/
|
||||
|
|
|
|||
|
|
@ -374,6 +374,21 @@ static void ihevcd_fill_outargs(codec_t *ps_codec,
|
|||
ps_dec_op->s_disp_frm_buf.u4_u_ht = 0;
|
||||
ps_dec_op->s_disp_frm_buf.u4_v_ht = 0;
|
||||
}
|
||||
else if(IV_YUV_422P == ps_codec->e_chroma_fmt)
|
||||
{
|
||||
ps_dec_op->s_disp_frm_buf.u4_u_strd =
|
||||
ps_dec_op->s_disp_frm_buf.u4_y_strd / 2;
|
||||
ps_dec_op->s_disp_frm_buf.u4_v_strd =
|
||||
ps_dec_op->s_disp_frm_buf.u4_y_strd / 2;
|
||||
ps_dec_op->s_disp_frm_buf.u4_u_wd =
|
||||
ps_dec_op->s_disp_frm_buf.u4_y_wd / 2;
|
||||
ps_dec_op->s_disp_frm_buf.u4_v_wd =
|
||||
ps_dec_op->s_disp_frm_buf.u4_y_wd / 2;
|
||||
ps_dec_op->s_disp_frm_buf.u4_u_ht =
|
||||
ps_dec_op->s_disp_frm_buf.u4_y_ht;
|
||||
ps_dec_op->s_disp_frm_buf.u4_v_ht =
|
||||
ps_dec_op->s_disp_frm_buf.u4_y_ht;
|
||||
}
|
||||
|
||||
}
|
||||
else if(ps_codec->i4_flush_mode)
|
||||
|
|
|
|||
|
|
@ -450,6 +450,7 @@ enum
|
|||
*/
|
||||
#define MIN_IN_BUFS 1
|
||||
#define MIN_OUT_BUFS_420 3
|
||||
#define MIN_OUT_BUFS_422 3
|
||||
#define MIN_OUT_BUFS_444 3
|
||||
#define MIN_OUT_BUFS_420SP 2
|
||||
#define MIN_OUT_BUFS_GRAY 1
|
||||
|
|
|
|||
|
|
@ -289,45 +289,6 @@ void ihevcd_fmt_conv_400_to_420p(UWORD8 *pu1_y_src,
|
|||
return;
|
||||
}
|
||||
|
||||
void ihevcd_fmt_conv_400_to_420sp(UWORD8 *pu1_y_src,
|
||||
UWORD8 *pu1_y_dst,
|
||||
UWORD8 *pu1_uv_dst,
|
||||
WORD32 wd,
|
||||
WORD32 ht,
|
||||
WORD32 src_y_strd,
|
||||
WORD32 dst_y_strd,
|
||||
WORD32 dst_uv_strd)
|
||||
{
|
||||
ihevcd_fmt_conv_luma_copy(pu1_y_src, pu1_y_dst, wd, ht, src_y_strd, dst_y_strd);
|
||||
for(int i = 0; i < ht / 2; i++)
|
||||
{
|
||||
memset(pu1_uv_dst, 128, wd);
|
||||
pu1_uv_dst += dst_uv_strd;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
void ihevcd_fmt_conv_400_to_444p(UWORD8 *pu1_y_src,
|
||||
UWORD8 *pu1_y_dst,
|
||||
UWORD8 *pu1_u_dst,
|
||||
UWORD8 *pu1_v_dst,
|
||||
WORD32 wd,
|
||||
WORD32 ht,
|
||||
WORD32 src_y_strd,
|
||||
WORD32 dst_y_strd,
|
||||
WORD32 dst_uv_strd)
|
||||
{
|
||||
ihevcd_fmt_conv_luma_copy(pu1_y_src, pu1_y_dst, wd, ht, src_y_strd, dst_y_strd);
|
||||
for(int i = 0; i < ht; i++)
|
||||
{
|
||||
memset(pu1_u_dst, 128, wd);
|
||||
memset(pu1_v_dst, 128, wd);
|
||||
pu1_u_dst += dst_uv_strd;
|
||||
pu1_v_dst += dst_uv_strd;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
*******************************************************************************
|
||||
*
|
||||
|
|
@ -556,59 +517,6 @@ void ihevcd_fmt_conv_420sp_to_420p(UWORD8 *pu1_y_src,
|
|||
return;
|
||||
}
|
||||
|
||||
void ihevcd_fmt_conv_420sp_to_444p(UWORD8 *pu1_y_src,
|
||||
UWORD8 *pu1_uv_src,
|
||||
UWORD8 *pu1_y_dst,
|
||||
UWORD8 *pu1_u_dst,
|
||||
UWORD8 *pu1_v_dst,
|
||||
WORD32 wd,
|
||||
WORD32 ht,
|
||||
WORD32 src_y_strd,
|
||||
WORD32 src_uv_strd,
|
||||
WORD32 dst_y_strd,
|
||||
WORD32 dst_uv_strd,
|
||||
WORD32 is_u_first)
|
||||
{
|
||||
UWORD8 *pu1_u_src, *pu1_v_src;
|
||||
WORD32 i, j;
|
||||
|
||||
ihevcd_fmt_conv_luma_copy(pu1_y_src, pu1_y_dst, wd, ht, src_y_strd, dst_y_strd);
|
||||
|
||||
/* de-interleave U and V and copy to destination */
|
||||
if(is_u_first)
|
||||
{
|
||||
pu1_u_src = (UWORD8 *)pu1_uv_src;
|
||||
pu1_v_src = (UWORD8 *)pu1_uv_src + 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
pu1_u_src = (UWORD8 *)pu1_uv_src + 1;
|
||||
pu1_v_src = (UWORD8 *)pu1_uv_src;
|
||||
}
|
||||
|
||||
for(i = 0; i < ht; i += 2)
|
||||
{
|
||||
for(j = 0; j < wd; j += 2)
|
||||
{
|
||||
pu1_u_dst[j] = pu1_u_src[j];
|
||||
pu1_u_dst[j + 1] = pu1_u_src[j];
|
||||
pu1_u_dst[j + dst_uv_strd] = pu1_u_src[j];
|
||||
pu1_u_dst[j + dst_uv_strd + 1] = pu1_u_src[j];
|
||||
|
||||
pu1_v_dst[j] = pu1_v_src[j];
|
||||
pu1_v_dst[j + 1] = pu1_v_src[j];
|
||||
pu1_v_dst[j + dst_uv_strd] = pu1_v_src[j];
|
||||
pu1_v_dst[j + dst_uv_strd + 1] = pu1_v_src[j];
|
||||
}
|
||||
|
||||
pu1_u_dst += (2 * dst_uv_strd);
|
||||
pu1_v_dst += (2 * dst_uv_strd);
|
||||
pu1_u_src += src_uv_strd;
|
||||
pu1_v_src += src_uv_strd;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
*******************************************************************************
|
||||
*
|
||||
|
|
@ -718,34 +626,66 @@ void ihevcd_fmt_conv_444sp_to_420p(UWORD8 *pu1_y_src,
|
|||
return;
|
||||
}
|
||||
|
||||
void ihevcd_fmt_conv_444sp_to_420sp(UWORD8 *pu1_y_src,
|
||||
UWORD8 *pu1_uv_src,
|
||||
UWORD8 *pu1_y_dst,
|
||||
UWORD8 *pu1_uv_dst,
|
||||
WORD32 wd,
|
||||
WORD32 ht,
|
||||
WORD32 src_y_strd,
|
||||
WORD32 src_uv_strd,
|
||||
WORD32 dst_y_strd,
|
||||
WORD32 dst_uv_strd)
|
||||
void ihevcd_fmt_conv_422sp_to_422p(UWORD8 *pu1_y_src,
|
||||
UWORD8 *pu1_uv_src,
|
||||
UWORD8 *pu1_y_dst,
|
||||
UWORD8 *pu1_u_dst,
|
||||
UWORD8 *pu1_v_dst,
|
||||
WORD32 wd,
|
||||
WORD32 ht,
|
||||
WORD32 src_y_strd,
|
||||
WORD32 src_uv_strd,
|
||||
WORD32 dst_y_strd,
|
||||
WORD32 dst_uv_strd)
|
||||
{
|
||||
UWORD8 *pu1_u_src, *pu1_v_src;
|
||||
WORD32 i, j;
|
||||
|
||||
ihevcd_fmt_conv_luma_copy(pu1_y_src, pu1_y_dst, wd, ht, src_y_strd, dst_y_strd);
|
||||
|
||||
pu1_u_src = (UWORD8 *)pu1_uv_src;
|
||||
pu1_v_src = (UWORD8 *)pu1_uv_src + 1;
|
||||
|
||||
for(i = 0; i < ht; i++)
|
||||
{
|
||||
for(j = 0; j < (wd >> 1); j++)
|
||||
{
|
||||
pu1_u_dst[j] = pu1_u_src[j * 2];
|
||||
pu1_v_dst[j] = pu1_v_src[j * 2];
|
||||
}
|
||||
|
||||
pu1_u_dst += dst_uv_strd;
|
||||
pu1_v_dst += dst_uv_strd;
|
||||
pu1_u_src += src_uv_strd;
|
||||
pu1_v_src += src_uv_strd;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
void ihevcd_fmt_conv_422sp_to_420p(UWORD8 *pu1_y_src,
|
||||
UWORD8 *pu1_uv_src,
|
||||
UWORD8 *pu1_y_dst,
|
||||
UWORD8 *pu1_u_dst,
|
||||
UWORD8 *pu1_v_dst,
|
||||
WORD32 wd,
|
||||
WORD32 ht,
|
||||
WORD32 src_y_strd,
|
||||
WORD32 src_uv_strd,
|
||||
WORD32 dst_y_strd,
|
||||
WORD32 dst_uv_strd)
|
||||
{
|
||||
ihevcd_fmt_conv_luma_copy(pu1_y_src, pu1_y_dst, wd, ht, src_y_strd, dst_y_strd);
|
||||
|
||||
/* de-interleave U and V and copy to destination */
|
||||
UWORD8 *pu1_u_src = (UWORD8*)pu1_uv_src;
|
||||
UWORD8 *pu1_v_src = (UWORD8*)pu1_uv_src + 1;
|
||||
|
||||
for(WORD32 i = 0; i < ht; i += 2)
|
||||
for(WORD32 i = 0; i < ht; i++)
|
||||
{
|
||||
for(WORD32 j = 0; j < wd; j += 2)
|
||||
{
|
||||
pu1_uv_dst[j] = pu1_u_src[j * 2];
|
||||
pu1_uv_dst[j + 1] = pu1_v_src[j * 2];
|
||||
pu1_u_dst[j / 2] = pu1_uv_src[j * 2];
|
||||
pu1_v_dst[j / 2] = pu1_uv_src[j * 2 + 1];
|
||||
}
|
||||
|
||||
pu1_uv_dst += dst_uv_strd;
|
||||
pu1_u_src += (src_uv_strd * 2);
|
||||
pu1_v_src += (src_uv_strd * 2);
|
||||
pu1_u_dst += dst_uv_strd;
|
||||
pu1_v_dst += dst_uv_strd;
|
||||
pu1_uv_src += src_uv_strd;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
|
@ -885,6 +825,11 @@ IHEVCD_ERROR_T ihevcd_fmt_conv(codec_t *ps_codec,
|
|||
pu1_u_dst_tmp = pu1_u_dst + cur_row * ps_codec->i4_disp_strd;
|
||||
pu1_v_dst_tmp = pu1_v_dst + cur_row * ps_codec->i4_disp_strd;
|
||||
}
|
||||
else if(IV_YUV_422P == ps_codec->e_chroma_fmt)
|
||||
{
|
||||
pu1_u_dst_tmp = pu1_u_dst + cur_row * ps_codec->i4_disp_strd / 2;
|
||||
pu1_v_dst_tmp = pu1_v_dst + cur_row * ps_codec->i4_disp_strd / 2;
|
||||
}
|
||||
else if(IV_YUV_420P == ps_codec->e_chroma_fmt)
|
||||
{
|
||||
pu1_u_dst_tmp = pu1_u_dst + (cur_row / 2) * ps_codec->i4_disp_strd / 2;
|
||||
|
|
@ -963,22 +908,6 @@ IHEVCD_ERROR_T ihevcd_fmt_conv(codec_t *ps_codec,
|
|||
ps_codec->i4_strd, ps_codec->i4_strd,
|
||||
ps_codec->i4_disp_strd, ps_codec->i4_disp_strd);
|
||||
}
|
||||
else if(ps_sps->i1_chroma_format_idc == CHROMA_FMT_IDC_MONOCHROME)
|
||||
{
|
||||
ihevcd_fmt_conv_400_to_420sp(pu1_y_src,
|
||||
pu1_y_dst_tmp, pu1_uv_dst_tmp,
|
||||
ps_codec->i4_disp_wd, num_rows,
|
||||
ps_codec->i4_strd,
|
||||
ps_codec->i4_disp_strd, ps_codec->i4_disp_strd);
|
||||
}
|
||||
else if(ps_sps->i1_chroma_format_idc == CHROMA_FMT_IDC_YUV444)
|
||||
{
|
||||
ihevcd_fmt_conv_444sp_to_420sp(pu1_y_src, pu1_uv_src,
|
||||
pu1_y_dst_tmp, pu1_uv_dst_tmp,
|
||||
ps_codec->i4_disp_wd, num_rows,
|
||||
ps_codec->i4_strd, src_chroma_row_stride,
|
||||
ps_codec->i4_disp_strd, ps_codec->i4_disp_strd);
|
||||
}
|
||||
}
|
||||
else if(IV_GRAY == ps_codec->e_chroma_fmt)
|
||||
{
|
||||
|
|
@ -999,21 +928,16 @@ IHEVCD_ERROR_T ihevcd_fmt_conv(codec_t *ps_codec,
|
|||
ps_codec->i4_strd, src_chroma_row_stride,
|
||||
ps_codec->i4_disp_strd, ps_codec->i4_disp_strd);
|
||||
}
|
||||
else if(ps_sps->i1_chroma_format_idc == CHROMA_FMT_IDC_MONOCHROME)
|
||||
}
|
||||
else if(IV_YUV_422P == ps_codec->e_chroma_fmt)
|
||||
{
|
||||
if(ps_sps->i1_chroma_format_idc == CHROMA_FMT_IDC_YUV422)
|
||||
{
|
||||
ihevcd_fmt_conv_400_to_444p(pu1_y_src,
|
||||
pu1_y_dst_tmp, pu1_u_dst_tmp, pu1_v_dst_tmp,
|
||||
ps_codec->i4_disp_wd, num_rows,
|
||||
ps_codec->i4_strd,
|
||||
ps_codec->i4_disp_strd, ps_codec->i4_disp_strd);
|
||||
}
|
||||
else if(ps_sps->i1_chroma_format_idc == CHROMA_FMT_IDC_YUV420)
|
||||
{
|
||||
ihevcd_fmt_conv_420sp_to_444p(pu1_y_src, pu1_uv_src,
|
||||
ihevcd_fmt_conv_422sp_to_422p(pu1_y_src, pu1_uv_src,
|
||||
pu1_y_dst_tmp, pu1_u_dst_tmp, pu1_v_dst_tmp,
|
||||
ps_codec->i4_disp_wd, num_rows,
|
||||
ps_codec->i4_strd, ps_codec->i4_strd,
|
||||
ps_codec->i4_disp_strd, ps_codec->i4_disp_strd, is_u_first);
|
||||
ps_codec->i4_disp_strd, (ps_codec->i4_disp_strd / 2));
|
||||
}
|
||||
}
|
||||
else if(IV_YUV_420P == ps_codec->e_chroma_fmt)
|
||||
|
|
@ -1069,6 +993,14 @@ IHEVCD_ERROR_T ihevcd_fmt_conv(codec_t *ps_codec,
|
|||
ps_codec->i4_strd, src_chroma_row_stride,
|
||||
ps_codec->i4_disp_strd, ps_codec->i4_disp_strd / 2);
|
||||
}
|
||||
else if(ps_sps->i1_chroma_format_idc == CHROMA_FMT_IDC_YUV422)
|
||||
{
|
||||
ihevcd_fmt_conv_422sp_to_420p(pu1_y_src, pu1_uv_src,
|
||||
pu1_y_dst_tmp, pu1_u_dst_tmp, pu1_v_dst_tmp,
|
||||
ps_codec->i4_disp_wd, num_rows,
|
||||
ps_codec->i4_strd, src_chroma_row_stride,
|
||||
ps_codec->i4_disp_strd, ps_codec->i4_disp_strd / 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
return (ret);
|
||||
|
|
|
|||
|
|
@ -773,6 +773,7 @@ WORD32 ihevcd_iquant_itrans_recon_ctb(process_ctxt_t *ps_proc)
|
|||
WORD32 luma_nbr_flags;
|
||||
WORD32 luma_nbr_flags_4x4[4] = { 0 };
|
||||
WORD32 chroma_nbr_flags = 0;
|
||||
WORD32 chroma_nbr_flags_subtu = 0;
|
||||
UWORD8 u1_luma_pred_mode_first_tu = 0;
|
||||
/* Pointers for generating 2d coeffs from coeff-map */
|
||||
UWORD8 *pu1_tu_coeff_data;
|
||||
|
|
@ -893,6 +894,12 @@ WORD32 ihevcd_iquant_itrans_recon_ctb(process_ctxt_t *ps_proc)
|
|||
{
|
||||
tu_plane_iq_it_recon_ctxt_t y_cb_tu = { 0 };
|
||||
tu_plane_iq_it_recon_ctxt_t cr_tu = { 0 };
|
||||
tu_plane_iq_it_recon_ctxt_t *ps_cb_tu = &y_cb_tu;
|
||||
tu_plane_iq_it_recon_ctxt_t *ps_cr_tu = &cr_tu;
|
||||
#ifdef ENABLE_MAIN_REXT_PROFILE
|
||||
tu_plane_iq_it_recon_ctxt_t cb_sub_tu = { 0 };
|
||||
tu_plane_iq_it_recon_ctxt_t cr_sub_tu = { 0 };
|
||||
#endif
|
||||
|
||||
WORD32 num_comp, c_idx, func_idx;
|
||||
|
||||
|
|
@ -1078,9 +1085,9 @@ WORD32 ihevcd_iquant_itrans_recon_ctb(process_ctxt_t *ps_proc)
|
|||
{
|
||||
/* Initializing variables */
|
||||
const WORD16 *pi2_ihevcd_chroma_qp =
|
||||
CHROMA_FMT_IDC_YUV444 == ps_sps->i1_chroma_format_idc ?
|
||||
gai2_ihevcd_chroma_qp_444 :
|
||||
gai2_ihevcd_chroma_qp;
|
||||
CHROMA_FMT_IDC_YUV420 != ps_sps->i1_chroma_format_idc ?
|
||||
gai2_ihevcd_chroma_qp_clip :
|
||||
gai2_ihevcd_chroma_qp_420;
|
||||
|
||||
/* Chroma :If Transform size is 4x4, keep 4x4 else do transform on (trans_size/2 x trans_size/2) */
|
||||
if(ps_tu->b3_size == 0)
|
||||
|
|
@ -1091,10 +1098,10 @@ WORD32 ihevcd_iquant_itrans_recon_ctb(process_ctxt_t *ps_proc)
|
|||
tu_uv_offset = (tu_x * chroma_pixel_strd)
|
||||
+ (tu_y * chroma_pixel_strd * pic_strd);
|
||||
}
|
||||
else if(CHROMA_FMT_IDC_YUV420 == ps_sps->i1_chroma_format_idc)
|
||||
else
|
||||
{
|
||||
/* Chroma 4x4 is present with 4th luma 4x4 block. For this case chroma postion has to be (luma pos x - 4, luma pos y - 4) */
|
||||
tu_uv_offset = (tu_x - 4) + ((tu_y - 4) / 2) * pic_strd;
|
||||
tu_uv_offset = (tu_x - 4) + ((tu_y - 4) / v_samp_factor) * pic_strd;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
@ -1103,7 +1110,7 @@ WORD32 ihevcd_iquant_itrans_recon_ctb(process_ctxt_t *ps_proc)
|
|||
{
|
||||
log2_uv_trans_size_minus_2 = ps_tu->b3_size;
|
||||
}
|
||||
else if(CHROMA_FMT_IDC_YUV420 == ps_sps->i1_chroma_format_idc)
|
||||
else
|
||||
{
|
||||
log2_uv_trans_size_minus_2 = ps_tu->b3_size - 1;
|
||||
}
|
||||
|
|
@ -1177,6 +1184,29 @@ WORD32 ihevcd_iquant_itrans_recon_ctb(process_ctxt_t *ps_proc)
|
|||
&y_cb_tu.zero_rows, &y_cb_tu.coeff_type,
|
||||
&y_cb_tu.coeff_value);
|
||||
}
|
||||
#ifdef ENABLE_MAIN_REXT_PROFILE
|
||||
if(ps_sps->i1_chroma_format_idc == CHROMA_FMT_IDC_YUV422)
|
||||
{
|
||||
cb_sub_tu.pi2_tu_coeff = ps_proc->pi2_invscan_out_subtu;
|
||||
cb_sub_tu.pu1_pred = y_cb_tu.pu1_pred + trans_size * y_cb_tu.pred_strd;
|
||||
cb_sub_tu.pu1_dst = y_cb_tu.pu1_dst + trans_size * y_cb_tu.dst_strd;
|
||||
cb_sub_tu.tu_coeff_stride = trans_size;
|
||||
cb_sub_tu.pred_strd = pic_strd * chroma_pixel_strd / h_samp_factor;
|
||||
cb_sub_tu.dst_strd = pic_strd * chroma_pixel_strd / h_samp_factor;
|
||||
cb_sub_tu.cbf = ps_tu->b1_cb_cbf_subtu1;
|
||||
cb_sub_tu.transform_skip_flag = pu1_tu_coeff_data[1] & 1;
|
||||
if(1 == cb_sub_tu.cbf)
|
||||
{
|
||||
pu1_tu_coeff_data = ihevcd_unpack_coeffs(
|
||||
cb_sub_tu.pi2_tu_coeff, log2_uv_trans_size_minus_2 + 2,
|
||||
pu1_tu_coeff_data, pi2_dequant_matrix,
|
||||
qp_rem, qp_div, e_trans_type,
|
||||
ps_tu->b1_transquant_bypass, &cb_sub_tu.zero_cols,
|
||||
&cb_sub_tu.zero_rows, &cb_sub_tu.coeff_type,
|
||||
&cb_sub_tu.coeff_value);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
cr_tu.transform_skip_flag = pu1_tu_coeff_data[1] & 1;
|
||||
if(1 == cr_tu.cbf)
|
||||
|
|
@ -1188,7 +1218,33 @@ WORD32 ihevcd_iquant_itrans_recon_ctb(process_ctxt_t *ps_proc)
|
|||
ps_tu->b1_transquant_bypass, &cr_tu.zero_cols,
|
||||
&cr_tu.zero_rows, &cr_tu.coeff_type, &cr_tu.coeff_value);
|
||||
}
|
||||
#ifdef ENABLE_MAIN_REXT_PROFILE
|
||||
if(ps_sps->i1_chroma_format_idc == CHROMA_FMT_IDC_YUV422)
|
||||
{
|
||||
cr_sub_tu.pi2_tu_coeff = ps_proc->pi2_invscan_out_subtu + trans_size * trans_size;
|
||||
cr_sub_tu.pu1_pred = cr_tu.pu1_pred + trans_size * cr_tu.pred_strd;
|
||||
cr_sub_tu.pu1_dst = cr_tu.pu1_dst + trans_size * cr_tu.dst_strd;
|
||||
cr_sub_tu.tu_coeff_stride = trans_size;
|
||||
cr_sub_tu.pred_strd = pic_strd * chroma_pixel_strd / h_samp_factor;
|
||||
cr_sub_tu.dst_strd = pic_strd * chroma_pixel_strd / h_samp_factor;
|
||||
cr_sub_tu.cbf = ps_tu->b1_cr_cbf_subtu1;
|
||||
cr_sub_tu.transform_skip_flag = pu1_tu_coeff_data[1] & 1;
|
||||
if(1 == cr_sub_tu.cbf)
|
||||
{
|
||||
pu1_tu_coeff_data = ihevcd_unpack_coeffs(
|
||||
cr_sub_tu.pi2_tu_coeff, log2_uv_trans_size_minus_2 + 2,
|
||||
pu1_tu_coeff_data, pi2_dequant_matrix_v,
|
||||
qp_rem_v, qp_div_v, e_trans_type,
|
||||
ps_tu->b1_transquant_bypass, &cr_sub_tu.zero_cols,
|
||||
&cr_sub_tu.zero_rows, &cr_sub_tu.coeff_type,
|
||||
&cr_sub_tu.coeff_value);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
WORD8 subtu_idx = 0;
|
||||
do
|
||||
{
|
||||
/***************************************************************/
|
||||
/****************** Intra Prediction **************************/
|
||||
/***************************************************************/
|
||||
|
|
@ -1226,8 +1282,15 @@ WORD32 ihevcd_iquant_itrans_recon_ctb(process_ctxt_t *ps_proc)
|
|||
}
|
||||
else if(ps_sps->i1_chroma_format_idc == CHROMA_FMT_IDC_YUV422)
|
||||
{
|
||||
if(ps_tu->b4_pos_y % 2 == 0)
|
||||
chroma_nbr_flags = luma_nbr_flags;
|
||||
WORD32 bot_left, left, top, tp_right, tp_left;
|
||||
tp_left = (luma_nbr_flags & 0x10000);
|
||||
tp_right = (luma_nbr_flags & 0x0f000);
|
||||
top = (luma_nbr_flags & 0x00f00);
|
||||
left = (luma_nbr_flags & 0x000f0);
|
||||
bot_left = (luma_nbr_flags & 0x0000f);
|
||||
chroma_nbr_flags = tp_left | tp_right | top | left | (left >> 4);
|
||||
chroma_nbr_flags_subtu = ((left != 0 ? 1 : 0) << 16) | (0xf << 8)
|
||||
| left | bot_left;
|
||||
}
|
||||
else if(ps_sps->i1_chroma_format_idc == CHROMA_FMT_IDC_YUV420)
|
||||
{
|
||||
|
|
@ -1272,22 +1335,54 @@ WORD32 ihevcd_iquant_itrans_recon_ctb(process_ctxt_t *ps_proc)
|
|||
}
|
||||
else
|
||||
{
|
||||
|
||||
#ifdef ENABLE_MAIN_REXT_PROFILE
|
||||
if(subtu_idx != 0)
|
||||
{
|
||||
ps_cb_tu = &cb_sub_tu;
|
||||
ps_cr_tu = &cr_sub_tu;
|
||||
chroma_nbr_flags = chroma_nbr_flags_subtu;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* In case of yuv420sp_vu, prediction happens as usual. */
|
||||
/* So point the pu1_pred pointer to original prediction pointer */
|
||||
UWORD8 *pu1_pred_orig = y_cb_tu.pu1_pred - chroma_yuv420sp_vu_u_offset;
|
||||
UWORD8 *pu1_pred_orig = ps_cb_tu->pu1_pred - chroma_yuv420sp_vu_u_offset;
|
||||
|
||||
/* Top-Left | Top-Right | Top | Left | Bottom-Left
|
||||
* 1 4 4 4 4
|
||||
*
|
||||
* Generating chroma_nbr_flags depending upon the transform size */
|
||||
if(ps_tu->b3_size == 0 && ps_sps->i1_chroma_format_idc == CHROMA_FMT_IDC_YUV420)
|
||||
if(ps_tu->b3_size == 0)
|
||||
{
|
||||
/* Take TL,T,L flags of First luma 4x4 block */
|
||||
chroma_nbr_flags = (luma_nbr_flags_4x4[0] & 0x10FF0);
|
||||
/* Take TR flags of Second luma 4x4 block */
|
||||
chroma_nbr_flags |= (luma_nbr_flags_4x4[1] & 0x0F000);
|
||||
/* Take BL flags of Third luma 4x4 block */
|
||||
chroma_nbr_flags |= (luma_nbr_flags_4x4[2] & 0x0000F);
|
||||
if(ps_sps->i1_chroma_format_idc == CHROMA_FMT_IDC_YUV420)
|
||||
{
|
||||
/* Take TL,T,L flags of First luma 4x4 block */
|
||||
chroma_nbr_flags = (luma_nbr_flags_4x4[0] & 0x10FF0);
|
||||
/* Take TR flags of Second luma 4x4 block */
|
||||
chroma_nbr_flags |= (luma_nbr_flags_4x4[1] & 0x0F000);
|
||||
/* Take BL flags of Third luma 4x4 block */
|
||||
chroma_nbr_flags |= (luma_nbr_flags_4x4[2] & 0x0000F);
|
||||
}
|
||||
else if(ps_sps->i1_chroma_format_idc == CHROMA_FMT_IDC_YUV422)
|
||||
{
|
||||
if(subtu_idx == 0)
|
||||
{
|
||||
/* Take TL,T,L flags of First luma 4x4 block */
|
||||
chroma_nbr_flags = (luma_nbr_flags_4x4[0] & 0x10FF0);
|
||||
/* Take TR flags of Second luma 4x4 block */
|
||||
chroma_nbr_flags |= (luma_nbr_flags_4x4[1] & 0x0F000);
|
||||
/* Take BL flags of first luma 4x4 block */
|
||||
chroma_nbr_flags |= (luma_nbr_flags_4x4[0] & 0x0000F);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Take TL,T,L flags of Third luma 4x4 block */
|
||||
chroma_nbr_flags = (luma_nbr_flags_4x4[2] & 0x10FF0);
|
||||
/* Take BL flags of Third luma 4x4 block */
|
||||
chroma_nbr_flags |= (luma_nbr_flags_4x4[2] & 0x0000F);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Initializing nbr pointers */
|
||||
|
|
@ -1295,6 +1390,8 @@ WORD32 ihevcd_iquant_itrans_recon_ctb(process_ctxt_t *ps_proc)
|
|||
pu1_left = pu1_pred_orig - 2;
|
||||
pu1_top_left = pu1_pred_orig - (pic_strd * chroma_pixel_strd / h_samp_factor) - 2;
|
||||
|
||||
if(subtu_idx == 0)
|
||||
{
|
||||
/* Chroma pred mode derivation from luma pred mode */
|
||||
{
|
||||
tu_t *ps_tu_tmp = ps_tu;
|
||||
|
|
@ -1318,12 +1415,21 @@ WORD32 ihevcd_iquant_itrans_recon_ctb(process_ctxt_t *ps_proc)
|
|||
u1_chroma_pred_mode = INTRA_ANGULAR(34);
|
||||
}
|
||||
}
|
||||
if(ps_sps->i1_chroma_format_idc == CHROMA_FMT_IDC_YUV422)
|
||||
{
|
||||
u1_chroma_pred_mode = gau1_intra_pred_chroma_modes_422[u1_chroma_pred_mode];
|
||||
}
|
||||
|
||||
/* use the look up to get the function idx */
|
||||
chroma_pred_func_idx =
|
||||
g_i4_ip_funcs[u1_chroma_pred_mode];
|
||||
}
|
||||
|
||||
/* call the chroma reference array substitution */
|
||||
ps_codec->s_func_selector.ihevc_intra_pred_chroma_ref_substitution_fptr(
|
||||
pu1_top_left,
|
||||
pu1_top, pu1_left,
|
||||
y_cb_tu.pred_strd,
|
||||
ps_cb_tu->pred_strd,
|
||||
trans_size, chroma_nbr_flags, pu1_ref_sub_out, 1,
|
||||
ps_sps->i1_chroma_format_idc);
|
||||
|
||||
|
|
@ -1341,12 +1447,8 @@ WORD32 ihevcd_iquant_itrans_recon_ctb(process_ctxt_t *ps_proc)
|
|||
}
|
||||
#endif
|
||||
|
||||
/* use the look up to get the function idx */
|
||||
chroma_pred_func_idx =
|
||||
g_i4_ip_funcs[u1_chroma_pred_mode];
|
||||
|
||||
/* call the intra prediction function */
|
||||
ps_codec->apf_intra_pred_chroma[chroma_pred_func_idx](pu1_ref_sub_out, 1, pu1_pred_orig, y_cb_tu.pred_strd, trans_size, u1_chroma_pred_mode);
|
||||
ps_codec->apf_intra_pred_chroma[chroma_pred_func_idx](pu1_ref_sub_out, 1, pu1_pred_orig, ps_cb_tu->pred_strd, trans_size, u1_chroma_pred_mode);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1355,22 +1457,25 @@ WORD32 ihevcd_iquant_itrans_recon_ctb(process_ctxt_t *ps_proc)
|
|||
|
||||
#ifdef ENABLE_MAIN_REXT_PROFILE
|
||||
iqitrecon_fptr = get_iqitrec_func(
|
||||
ps_proc, ps_tu, &y_cb_tu, log2_trans_size,
|
||||
ps_proc, ps_tu, ps_cb_tu, log2_trans_size,
|
||||
c_idx != 0 ? U_PLANE : NULL_PLANE, intra_flag);
|
||||
#endif
|
||||
/* IQ, IT and Recon for Y if c_idx == 0, and U if c_idx !=0 */
|
||||
iqitrecon_fptr(ps_proc, ps_tu, &y_cb_tu, func_idx, log2_trans_size,
|
||||
iqitrecon_fptr(ps_proc, ps_tu, ps_cb_tu, func_idx, log2_trans_size,
|
||||
c_idx != 0 ? U_PLANE : NULL_PLANE, intra_flag);
|
||||
/* IQ, IT and Recon for V */
|
||||
if(c_idx != 0)
|
||||
{
|
||||
#ifdef ENABLE_MAIN_REXT_PROFILE
|
||||
iqitrecon_fptr = get_iqitrec_func(ps_proc, ps_tu, &cr_tu, log2_trans_size,
|
||||
iqitrecon_fptr = get_iqitrec_func(ps_proc, ps_tu, ps_cr_tu, log2_trans_size,
|
||||
V_PLANE, intra_flag);
|
||||
#endif
|
||||
iqitrecon_fptr(ps_proc, ps_tu, &cr_tu, func_idx, log2_trans_size, V_PLANE,
|
||||
iqitrecon_fptr(ps_proc, ps_tu, ps_cr_tu, func_idx, log2_trans_size, V_PLANE,
|
||||
intra_flag);
|
||||
}
|
||||
}
|
||||
while(c_idx != 0 && ps_sps->i1_chroma_format_idc == CHROMA_FMT_IDC_YUV422
|
||||
&& ++subtu_idx < 2);
|
||||
}
|
||||
|
||||
/* Neighbor availability inside CTB */
|
||||
|
|
|
|||
|
|
@ -2096,6 +2096,23 @@ IHEVCD_ERROR_T ihevcd_parse_sps(codec_t *ps_codec)
|
|||
return (IHEVCD_ERROR_T)IVD_STREAM_WIDTH_HEIGHT_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
// limit format conversions
|
||||
if(ps_codec->e_chroma_fmt == IV_YUV_444P
|
||||
&& ps_sps->i1_chroma_format_idc != CHROMA_FMT_IDC_YUV444)
|
||||
{
|
||||
return (IHEVCD_ERROR_T)IVD_INIT_DEC_COL_FMT_NOT_SUPPORTED;
|
||||
}
|
||||
if(ps_codec->e_chroma_fmt == IV_YUV_422P
|
||||
&& ps_sps->i1_chroma_format_idc != CHROMA_FMT_IDC_YUV422)
|
||||
{
|
||||
return (IHEVCD_ERROR_T)IVD_INIT_DEC_COL_FMT_NOT_SUPPORTED;
|
||||
}
|
||||
if((ps_codec->e_chroma_fmt == IV_YUV_420SP_UV || ps_codec->e_chroma_fmt == IV_YUV_420SP_VU)
|
||||
&& ps_sps->i1_chroma_format_idc != CHROMA_FMT_IDC_YUV420)
|
||||
{
|
||||
return (IHEVCD_ERROR_T)IVD_INIT_DEC_COL_FMT_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
/* Update display width and display height */
|
||||
{
|
||||
WORD32 disp_wd, disp_ht;
|
||||
|
|
|
|||
|
|
@ -181,11 +181,27 @@ WORD32 ihevcd_parse_transform_tree(codec_t *ps_codec,
|
|||
{
|
||||
ps_codec->s_parse.s_cu.ai1_cbf_cr[trafo_depth] = 0;
|
||||
ps_codec->s_parse.s_cu.ai1_cbf_cb[trafo_depth] = 0;
|
||||
#ifdef ENABLE_MAIN_REXT_PROFILE
|
||||
if(ps_sps->i1_chroma_format_idc == CHROMA_FMT_IDC_YUV422)
|
||||
{
|
||||
ps_codec->s_parse.s_cu.ai1_cbf_cr_subtu[trafo_depth] = 0;
|
||||
ps_codec->s_parse.s_cu.ai1_cbf_cb_subtu[trafo_depth] = 0;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
ps_codec->s_parse.s_cu.ai1_cbf_cb[trafo_depth] = ps_codec->s_parse.s_cu.ai1_cbf_cb[trafo_depth - 1];
|
||||
ps_codec->s_parse.s_cu.ai1_cbf_cr[trafo_depth] = ps_codec->s_parse.s_cu.ai1_cbf_cr[trafo_depth - 1];
|
||||
#ifdef ENABLE_MAIN_REXT_PROFILE
|
||||
if(ps_sps->i1_chroma_format_idc == CHROMA_FMT_IDC_YUV422)
|
||||
{
|
||||
ps_codec->s_parse.s_cu.ai1_cbf_cb_subtu[trafo_depth] =
|
||||
ps_codec->s_parse.s_cu.ai1_cbf_cb_subtu[trafo_depth - 1];
|
||||
ps_codec->s_parse.s_cu.ai1_cbf_cr_subtu[trafo_depth] =
|
||||
ps_codec->s_parse.s_cu.ai1_cbf_cr_subtu[trafo_depth - 1];
|
||||
}
|
||||
#endif
|
||||
}
|
||||
if ((CHROMA_FMT_IDC_MONOCHROME != ps_sps->i1_chroma_format_idc && log2_trafo_size > 2) ||
|
||||
ps_sps->i1_chroma_format_idc == CHROMA_FMT_IDC_YUV444)
|
||||
|
|
@ -198,6 +214,16 @@ WORD32 ihevcd_parse_transform_tree(codec_t *ps_codec,
|
|||
value = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx);
|
||||
AEV_TRACE("cbf_cb", value, ps_cabac->u4_range);
|
||||
ps_codec->s_parse.s_cu.ai1_cbf_cb[trafo_depth] = value;
|
||||
#ifdef ENABLE_MAIN_REXT_PROFILE
|
||||
if(ps_sps->i1_chroma_format_idc == CHROMA_FMT_IDC_YUV422
|
||||
&& (!split_transform_flag || log2_trafo_size == 3))
|
||||
{
|
||||
TRACE_CABAC_CTXT("cbf_cb", ps_cabac->u4_range, ctxt_idx);
|
||||
value = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx);
|
||||
AEV_TRACE("cbf_cb", value, ps_cabac->u4_range);
|
||||
ps_codec->s_parse.s_cu.ai1_cbf_cb_subtu[trafo_depth] = value;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
if((trafo_depth == 0) || ps_codec->s_parse.s_cu.ai1_cbf_cr[trafo_depth - 1])
|
||||
|
|
@ -206,6 +232,16 @@ WORD32 ihevcd_parse_transform_tree(codec_t *ps_codec,
|
|||
value = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx);
|
||||
AEV_TRACE("cbf_cr", value, ps_cabac->u4_range);
|
||||
ps_codec->s_parse.s_cu.ai1_cbf_cr[trafo_depth] = value;
|
||||
#ifdef ENABLE_MAIN_REXT_PROFILE
|
||||
if(ps_sps->i1_chroma_format_idc == CHROMA_FMT_IDC_YUV422
|
||||
&& (!split_transform_flag || log2_trafo_size == 3))
|
||||
{
|
||||
TRACE_CABAC_CTXT("cbf_cr", ps_cabac->u4_range, ctxt_idx);
|
||||
value = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx);
|
||||
AEV_TRACE("cbf_cr", value, ps_cabac->u4_range);
|
||||
ps_codec->s_parse.s_cu.ai1_cbf_cr_subtu[trafo_depth] = value;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
if(split_transform_flag)
|
||||
|
|
@ -249,6 +285,7 @@ WORD32 ihevcd_parse_transform_tree(codec_t *ps_codec,
|
|||
WORD32 ctb_x_base;
|
||||
WORD32 ctb_y_base;
|
||||
WORD32 cu_qp_delta_abs;
|
||||
WORD32 cbf_chroma;
|
||||
|
||||
|
||||
|
||||
|
|
@ -256,11 +293,19 @@ WORD32 ihevcd_parse_transform_tree(codec_t *ps_codec,
|
|||
cu_qp_delta_abs = 0;
|
||||
ctb_x_base = ps_codec->s_parse.i4_ctb_x << ps_sps->i1_log2_ctb_size;
|
||||
ctb_y_base = ps_codec->s_parse.i4_ctb_y << ps_sps->i1_log2_ctb_size;
|
||||
cbf_chroma = ps_codec->s_parse.s_cu.ai1_cbf_cb[trafo_depth]
|
||||
|| ps_codec->s_parse.s_cu.ai1_cbf_cr[trafo_depth];
|
||||
#ifdef ENABLE_MAIN_REXT_PROFILE
|
||||
if(ps_sps->i1_chroma_format_idc == CHROMA_FMT_IDC_YUV422)
|
||||
{
|
||||
cbf_chroma |= ps_codec->s_parse.s_cu.ai1_cbf_cb_subtu[trafo_depth]
|
||||
|| ps_codec->s_parse.s_cu.ai1_cbf_cr_subtu[trafo_depth];
|
||||
}
|
||||
#endif
|
||||
|
||||
if((ps_codec->s_parse.s_cu.i4_pred_mode == PRED_MODE_INTRA) ||
|
||||
(trafo_depth != 0) ||
|
||||
(ps_codec->s_parse.s_cu.ai1_cbf_cb[trafo_depth]) ||
|
||||
(ps_codec->s_parse.s_cu.ai1_cbf_cr[trafo_depth]))
|
||||
(cbf_chroma))
|
||||
{
|
||||
ctxt_idx = IHEVC_CAB_CBF_LUMA_IDX;
|
||||
ctxt_idx += (trafo_depth == 0) ? 1 : 0;
|
||||
|
|
@ -279,7 +324,13 @@ WORD32 ihevcd_parse_transform_tree(codec_t *ps_codec,
|
|||
/* Initialize ps_tu to default values */
|
||||
/* If required change this to WORD32 packed write */
|
||||
ps_tu->b1_cb_cbf = 0;
|
||||
#ifdef ENABLE_MAIN_REXT_PROFILE
|
||||
ps_tu->b1_cb_cbf_subtu1 = 0;
|
||||
#endif
|
||||
ps_tu->b1_cr_cbf = 0;
|
||||
#ifdef ENABLE_MAIN_REXT_PROFILE
|
||||
ps_tu->b1_cr_cbf_subtu1 = 0;
|
||||
#endif
|
||||
ps_tu->b1_y_cbf = 0;
|
||||
ps_tu->b4_pos_x = ((x0 - ctb_x_base) >> 2);
|
||||
ps_tu->b4_pos_y = ((y0 - ctb_y_base) >> 2);
|
||||
|
|
@ -297,9 +348,7 @@ WORD32 ihevcd_parse_transform_tree(codec_t *ps_codec,
|
|||
ps_tu->b3_chroma_intra_mode_idx = chroma_intra_pred_mode_idx;
|
||||
|
||||
/* Section:7.3.12 Transform unit syntax inlined here */
|
||||
if(ps_codec->s_parse.s_cu.i1_cbf_luma ||
|
||||
ps_codec->s_parse.s_cu.ai1_cbf_cb[trafo_depth] ||
|
||||
ps_codec->s_parse.s_cu.ai1_cbf_cr[trafo_depth])
|
||||
if(ps_codec->s_parse.s_cu.i1_cbf_luma || cbf_chroma)
|
||||
{
|
||||
WORD32 intra_pred_mode_chroma;
|
||||
if(ps_pps->i1_cu_qp_delta_enabled_flag && !ps_codec->s_parse.i4_is_cu_qp_delta_coded)
|
||||
|
|
@ -370,6 +419,10 @@ WORD32 ihevcd_parse_transform_tree(codec_t *ps_codec,
|
|||
intra_pred_mode_chroma = INTRA_ANGULAR(34);
|
||||
}
|
||||
}
|
||||
if(ps_sps->i1_chroma_format_idc == CHROMA_FMT_IDC_YUV422)
|
||||
{
|
||||
intra_pred_mode_chroma = gau1_intra_pred_chroma_modes_422[intra_pred_mode_chroma];
|
||||
}
|
||||
if(log2_trafo_size > 2 || ps_sps->i1_chroma_format_idc == CHROMA_FMT_IDC_YUV444)
|
||||
{
|
||||
WORD32 trafo_offset = (ps_sps->i1_chroma_format_idc == CHROMA_FMT_IDC_YUV444 ? 0 : 1);
|
||||
|
|
@ -402,6 +455,13 @@ WORD32 ihevcd_parse_transform_tree(codec_t *ps_codec,
|
|||
ps_tu->b1_cb_cbf = 1;
|
||||
ihevcd_parse_residual_coding(ps_codec, x0, y0, log2_trafo_size_c, 1, intra_pred_mode_chroma);
|
||||
}
|
||||
#ifdef ENABLE_MAIN_REXT_PROFILE
|
||||
if(ps_sps->i1_chroma_format_idc == CHROMA_FMT_IDC_YUV422 && ps_codec->s_parse.s_cu.ai1_cbf_cb_subtu[trafo_depth])
|
||||
{
|
||||
ps_tu->b1_cb_cbf_subtu1 = 1;
|
||||
ihevcd_parse_residual_coding(ps_codec, x0, y0 + (1 << log2_trafo_size_c), log2_trafo_size_c, 1, intra_pred_mode_chroma);
|
||||
}
|
||||
#endif
|
||||
#ifdef ENABLE_MAIN_REXT_PROFILE
|
||||
if(ps_pps->i1_cross_component_prediction_enabled_flag
|
||||
&& ps_codec->s_parse.s_cu.i1_cbf_luma
|
||||
|
|
@ -429,6 +489,13 @@ WORD32 ihevcd_parse_transform_tree(codec_t *ps_codec,
|
|||
ps_tu->b1_cr_cbf = 1;
|
||||
ihevcd_parse_residual_coding(ps_codec, x0, y0, log2_trafo_size_c, 2, intra_pred_mode_chroma);
|
||||
}
|
||||
#ifdef ENABLE_MAIN_REXT_PROFILE
|
||||
if(ps_sps->i1_chroma_format_idc == CHROMA_FMT_IDC_YUV422 && ps_codec->s_parse.s_cu.ai1_cbf_cr_subtu[trafo_depth])
|
||||
{
|
||||
ps_tu->b1_cr_cbf_subtu1 = 1;
|
||||
ihevcd_parse_residual_coding(ps_codec, x0, y0 + (1 << log2_trafo_size_c), log2_trafo_size_c, 1, intra_pred_mode_chroma);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
else if(blk_idx == 3)
|
||||
{
|
||||
|
|
@ -437,12 +504,26 @@ WORD32 ihevcd_parse_transform_tree(codec_t *ps_codec,
|
|||
ps_tu->b1_cb_cbf = 1;
|
||||
ihevcd_parse_residual_coding(ps_codec, cu_x_base, cu_y_base, log2_trafo_size, 1, intra_pred_mode_chroma);
|
||||
}
|
||||
#ifdef ENABLE_MAIN_REXT_PROFILE
|
||||
if(ps_sps->i1_chroma_format_idc == CHROMA_FMT_IDC_YUV422 && ps_codec->s_parse.s_cu.ai1_cbf_cb_subtu[trafo_depth])
|
||||
{
|
||||
ps_tu->b1_cb_cbf_subtu1 = 1;
|
||||
ihevcd_parse_residual_coding(ps_codec, x0, y0, log2_trafo_size, 1, intra_pred_mode_chroma);
|
||||
}
|
||||
#endif
|
||||
|
||||
if(ps_codec->s_parse.s_cu.ai1_cbf_cr[trafo_depth])
|
||||
{
|
||||
ps_tu->b1_cr_cbf = 1;
|
||||
ihevcd_parse_residual_coding(ps_codec, cu_x_base, cu_y_base, log2_trafo_size, 2, intra_pred_mode_chroma);
|
||||
}
|
||||
#ifdef ENABLE_MAIN_REXT_PROFILE
|
||||
if(ps_sps->i1_chroma_format_idc == CHROMA_FMT_IDC_YUV422 && ps_codec->s_parse.s_cu.ai1_cbf_cr_subtu[trafo_depth])
|
||||
{
|
||||
ps_tu->b1_cr_cbf_subtu1 = 1;
|
||||
ihevcd_parse_residual_coding(ps_codec, x0, y0, log2_trafo_size, 1, intra_pred_mode_chroma);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -452,7 +533,7 @@ WORD32 ihevcd_parse_transform_tree(codec_t *ps_codec,
|
|||
}
|
||||
else
|
||||
{
|
||||
if((3 != blk_idx) && (2 == log2_trafo_size && ps_sps->i1_chroma_format_idc == CHROMA_FMT_IDC_YUV420))
|
||||
if((3 != blk_idx) && (2 == log2_trafo_size && ps_sps->i1_chroma_format_idc != CHROMA_FMT_IDC_YUV444))
|
||||
{
|
||||
ps_tu->b3_chroma_intra_mode_idx = INTRA_PRED_CHROMA_IDX_NONE;
|
||||
}
|
||||
|
|
@ -1092,7 +1173,13 @@ IHEVCD_ERROR_T ihevcd_parse_coding_unit_intra(codec_t *ps_codec,
|
|||
|
||||
ps_tu = ps_codec->s_parse.ps_tu;
|
||||
ps_tu->b1_cb_cbf = 1;
|
||||
#ifdef ENABLE_MAIN_REXT_PROFILE
|
||||
ps_tu->b1_cb_cbf_subtu1 = 1;
|
||||
#endif
|
||||
ps_tu->b1_cr_cbf = 1;
|
||||
#ifdef ENABLE_MAIN_REXT_PROFILE
|
||||
ps_tu->b1_cr_cbf_subtu1 = 1;
|
||||
#endif
|
||||
ps_tu->b1_y_cbf = 1;
|
||||
ps_tu->b4_pos_x = ((x0 - ctb_x_base) >> 2);
|
||||
ps_tu->b4_pos_y = ((y0 - ctb_y_base) >> 2);
|
||||
|
|
@ -1439,7 +1526,13 @@ IHEVCD_ERROR_T ihevcd_parse_coding_unit(codec_t *ps_codec,
|
|||
ctb_y_base = ps_codec->s_parse.i4_ctb_y << ps_sps->i1_log2_ctb_size;
|
||||
|
||||
ps_tu->b1_cb_cbf = 0;
|
||||
#ifdef ENABLE_MAIN_REXT_PROFILE
|
||||
ps_tu->b1_cb_cbf_subtu1 = 0;
|
||||
#endif
|
||||
ps_tu->b1_cr_cbf = 0;
|
||||
#ifdef ENABLE_MAIN_REXT_PROFILE
|
||||
ps_tu->b1_cr_cbf_subtu1 = 0;
|
||||
#endif
|
||||
ps_tu->b1_y_cbf = 0;
|
||||
ps_tu->b4_pos_x = ((x0 - ctb_x_base) >> 2);
|
||||
ps_tu->b4_pos_y = ((y0 - ctb_y_base) >> 2);
|
||||
|
|
@ -1740,7 +1833,13 @@ IHEVCD_ERROR_T ihevcd_parse_coding_unit(codec_t *ps_codec,
|
|||
|
||||
ps_tu = ps_codec->s_parse.ps_tu;
|
||||
ps_tu->b1_cb_cbf = 0;
|
||||
#ifdef ENABLE_MAIN_REXT_PROFILE
|
||||
ps_tu->b1_cb_cbf_subtu1 = 0;
|
||||
#endif
|
||||
ps_tu->b1_cr_cbf = 0;
|
||||
#ifdef ENABLE_MAIN_REXT_PROFILE
|
||||
ps_tu->b1_cr_cbf_subtu1 = 0;
|
||||
#endif
|
||||
ps_tu->b1_y_cbf = 0;
|
||||
ps_tu->b4_pos_x = ((x0 - ctb_x_base) >> 2);
|
||||
ps_tu->b4_pos_y = ((y0 - ctb_y_base) >> 2);
|
||||
|
|
@ -2374,7 +2473,13 @@ void ihevcd_set_ctb_skip(codec_t *ps_codec)
|
|||
{
|
||||
ps_tu = ps_codec->s_parse.ps_tu;
|
||||
ps_tu->b1_cb_cbf = 0;
|
||||
#ifdef ENABLE_MAIN_REXT_PROFILE
|
||||
ps_tu->b1_cb_cbf_subtu1 = 0;
|
||||
#endif
|
||||
ps_tu->b1_cr_cbf = 0;
|
||||
#ifdef ENABLE_MAIN_REXT_PROFILE
|
||||
ps_tu->b1_cr_cbf_subtu1 = 0;
|
||||
#endif
|
||||
ps_tu->b1_y_cbf = 0;
|
||||
ps_tu->b4_pos_x = pu_x >> 2;
|
||||
ps_tu->b4_pos_y = pu_y >> 2;
|
||||
|
|
|
|||
|
|
@ -751,11 +751,17 @@ typedef struct
|
|||
* Cb CBF
|
||||
*/
|
||||
UWORD8 ai1_cbf_cb[MAX_TRAFO_DEPTH];
|
||||
#ifdef ENABLE_MAIN_REXT_PROFILE
|
||||
UWORD8 ai1_cbf_cb_subtu[MAX_TRAFO_DEPTH];
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Cr CBF
|
||||
*/
|
||||
UWORD8 ai1_cbf_cr[MAX_TRAFO_DEPTH];
|
||||
#ifdef ENABLE_MAIN_REXT_PROFILE
|
||||
UWORD8 ai1_cbf_cr_subtu[MAX_TRAFO_DEPTH];
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Intra split flag
|
||||
|
|
@ -1476,6 +1482,9 @@ typedef struct
|
|||
|
||||
/** Buffer to hold output of inverse scan */
|
||||
WORD16 *pi2_invscan_out;
|
||||
#ifdef ENABLE_MAIN_REXT_PROFILE
|
||||
WORD16 *pi2_invscan_out_subtu;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Top availability for current CTB level
|
||||
|
|
|
|||
|
|
@ -798,6 +798,8 @@ IHEVCD_ERROR_T ihevcd_check_out_buf_size(codec_t *ps_codec)
|
|||
u4_min_num_out_bufs = MIN_OUT_BUFS_420;
|
||||
else if(ps_codec->e_chroma_fmt == IV_YUV_444P)
|
||||
u4_min_num_out_bufs = MIN_OUT_BUFS_444;
|
||||
else if(ps_codec->e_chroma_fmt == IV_YUV_422P)
|
||||
u4_min_num_out_bufs = MIN_OUT_BUFS_422;
|
||||
else if((ps_codec->e_chroma_fmt == IV_YUV_420SP_UV)
|
||||
|| (ps_codec->e_chroma_fmt == IV_YUV_420SP_VU))
|
||||
u4_min_num_out_bufs = MIN_OUT_BUFS_420SP;
|
||||
|
|
@ -829,6 +831,12 @@ IHEVCD_ERROR_T ihevcd_check_out_buf_size(codec_t *ps_codec)
|
|||
au4_min_out_buf_size[1] = 0;
|
||||
au4_min_out_buf_size[2] = 0;
|
||||
}
|
||||
else if(ps_codec->e_chroma_fmt == IV_YUV_422P)
|
||||
{
|
||||
au4_min_out_buf_size[0] = (wd * ht);
|
||||
au4_min_out_buf_size[1] = (wd * ht) >> 1;
|
||||
au4_min_out_buf_size[2] = (wd * ht) >> 1;
|
||||
}
|
||||
|
||||
|
||||
if(ps_out_buffer->u4_num_bufs < u4_min_num_out_bufs)
|
||||
|
|
|
|||
|
|
@ -972,7 +972,10 @@ void dump_output(vid_dec_ctx_t *ps_app_ctx,
|
|||
if(NULL == s_dump_disp_frm_buf.pv_y_buf)
|
||||
return;
|
||||
|
||||
if(ps_app_ctx->e_output_chroma_format == IV_YUV_420P)
|
||||
if(ps_app_ctx->e_output_chroma_format == IV_YUV_420P
|
||||
|| ps_app_ctx->e_output_chroma_format == IV_YUV_444P
|
||||
|| ps_app_ctx->e_output_chroma_format == IV_YUV_422P
|
||||
|| ps_app_ctx->e_output_chroma_format == IV_GRAY)
|
||||
{
|
||||
#if DUMP_SINGLE_BUF
|
||||
{
|
||||
|
|
@ -994,17 +997,20 @@ void dump_output(vid_dec_ctx_t *ps_app_ctx,
|
|||
buf += s_dump_disp_frm_buf.u4_y_strd;
|
||||
}
|
||||
|
||||
buf = (UWORD8 *)s_dump_disp_frm_buf.pv_u_buf;
|
||||
for(i = 0; i < s_dump_disp_frm_buf.u4_u_ht; i++)
|
||||
if(ps_app_ctx->e_output_chroma_format != IV_GRAY)
|
||||
{
|
||||
fwrite(buf, 1, s_dump_disp_frm_buf.u4_u_wd, ps_op_file);
|
||||
buf += s_dump_disp_frm_buf.u4_u_strd;
|
||||
}
|
||||
buf = (UWORD8 *)s_dump_disp_frm_buf.pv_v_buf;
|
||||
for(i = 0; i < s_dump_disp_frm_buf.u4_v_ht; i++)
|
||||
{
|
||||
fwrite(buf, 1, s_dump_disp_frm_buf.u4_v_wd, ps_op_file);
|
||||
buf += s_dump_disp_frm_buf.u4_v_strd;
|
||||
buf = (UWORD8*)s_dump_disp_frm_buf.pv_u_buf;
|
||||
for(i = 0; i < s_dump_disp_frm_buf.u4_u_ht; i++)
|
||||
{
|
||||
fwrite(buf, 1, s_dump_disp_frm_buf.u4_u_wd, ps_op_file);
|
||||
buf += s_dump_disp_frm_buf.u4_u_strd;
|
||||
}
|
||||
buf = (UWORD8*)s_dump_disp_frm_buf.pv_v_buf;
|
||||
for(i = 0; i < s_dump_disp_frm_buf.u4_v_ht; i++)
|
||||
{
|
||||
fwrite(buf, 1, s_dump_disp_frm_buf.u4_v_wd, ps_op_file);
|
||||
buf += s_dump_disp_frm_buf.u4_v_strd;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1012,27 +1018,30 @@ void dump_output(vid_dec_ctx_t *ps_app_ctx,
|
|||
if(0 != chksum_save)
|
||||
{
|
||||
UWORD8 au1_y_chksum[16];
|
||||
UWORD8 au1_u_chksum[16];
|
||||
UWORD8 au1_v_chksum[16];
|
||||
calc_md5_cksum((UWORD8 *)s_dump_disp_frm_buf.pv_y_buf,
|
||||
s_dump_disp_frm_buf.u4_y_strd,
|
||||
s_dump_disp_frm_buf.u4_y_wd,
|
||||
s_dump_disp_frm_buf.u4_y_ht,
|
||||
au1_y_chksum);
|
||||
calc_md5_cksum((UWORD8 *)s_dump_disp_frm_buf.pv_u_buf,
|
||||
s_dump_disp_frm_buf.u4_u_strd,
|
||||
s_dump_disp_frm_buf.u4_u_wd,
|
||||
s_dump_disp_frm_buf.u4_u_ht,
|
||||
au1_u_chksum);
|
||||
calc_md5_cksum((UWORD8 *)s_dump_disp_frm_buf.pv_v_buf,
|
||||
s_dump_disp_frm_buf.u4_v_strd,
|
||||
s_dump_disp_frm_buf.u4_v_wd,
|
||||
s_dump_disp_frm_buf.u4_v_ht,
|
||||
au1_v_chksum);
|
||||
|
||||
fwrite(au1_y_chksum, sizeof(UWORD8), 16, ps_op_chksum_file);
|
||||
fwrite(au1_u_chksum, sizeof(UWORD8), 16, ps_op_chksum_file);
|
||||
fwrite(au1_v_chksum, sizeof(UWORD8), 16, ps_op_chksum_file);
|
||||
|
||||
if(ps_app_ctx->e_output_chroma_format != IV_GRAY)
|
||||
{
|
||||
UWORD8 au1_u_chksum[16];
|
||||
UWORD8 au1_v_chksum[16];
|
||||
calc_md5_cksum((UWORD8 *)s_dump_disp_frm_buf.pv_u_buf,
|
||||
s_dump_disp_frm_buf.u4_u_strd,
|
||||
s_dump_disp_frm_buf.u4_u_wd,
|
||||
s_dump_disp_frm_buf.u4_u_ht,
|
||||
au1_u_chksum);
|
||||
calc_md5_cksum((UWORD8 *)s_dump_disp_frm_buf.pv_v_buf,
|
||||
s_dump_disp_frm_buf.u4_v_strd,
|
||||
s_dump_disp_frm_buf.u4_v_wd,
|
||||
s_dump_disp_frm_buf.u4_v_ht,
|
||||
au1_v_chksum);
|
||||
fwrite(au1_u_chksum, sizeof(UWORD8), 16, ps_op_chksum_file);
|
||||
fwrite(au1_v_chksum, sizeof(UWORD8), 16, ps_op_chksum_file);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
|
@ -1067,38 +1076,6 @@ void dump_output(vid_dec_ctx_t *ps_app_ctx,
|
|||
}
|
||||
#endif
|
||||
}
|
||||
else if(ps_app_ctx->e_output_chroma_format == IV_GRAY)
|
||||
{
|
||||
UWORD8 *buf;
|
||||
buf = (UWORD8 *)s_dump_disp_frm_buf.pv_y_buf;
|
||||
for(i = 0; i < s_dump_disp_frm_buf.u4_y_ht; i++)
|
||||
{
|
||||
fwrite(buf, 1, s_dump_disp_frm_buf.u4_y_wd, ps_op_file);
|
||||
buf += s_dump_disp_frm_buf.u4_y_strd;
|
||||
}
|
||||
}
|
||||
else if(ps_app_ctx->e_output_chroma_format == IV_YUV_444P)
|
||||
{
|
||||
UWORD32 i;
|
||||
UWORD8 *buf_y = (UWORD8 *)s_dump_disp_frm_buf.pv_y_buf;
|
||||
for(i = 0; i < s_dump_disp_frm_buf.u4_y_ht; i++)
|
||||
{
|
||||
fwrite(buf_y, 1, s_dump_disp_frm_buf.u4_y_wd, ps_op_file);
|
||||
buf_y += s_dump_disp_frm_buf.u4_y_strd;
|
||||
}
|
||||
UWORD8 *buf_u = (UWORD8 *)s_dump_disp_frm_buf.pv_u_buf;
|
||||
for(i = 0; i < s_dump_disp_frm_buf.u4_u_ht; i++)
|
||||
{
|
||||
fwrite(buf_u, 1, s_dump_disp_frm_buf.u4_u_wd, ps_op_file);
|
||||
buf_u += s_dump_disp_frm_buf.u4_u_strd;
|
||||
}
|
||||
UWORD8 *buf_v = (UWORD8 *)s_dump_disp_frm_buf.pv_v_buf;
|
||||
for(i = 0; i < s_dump_disp_frm_buf.u4_v_ht; i++)
|
||||
{
|
||||
fwrite(buf_v, 1, s_dump_disp_frm_buf.u4_v_wd, ps_op_file);
|
||||
buf_v += s_dump_disp_frm_buf.u4_v_strd;
|
||||
}
|
||||
}
|
||||
|
||||
fflush(ps_op_file);
|
||||
fflush(ps_op_chksum_file);
|
||||
|
|
@ -1262,6 +1239,8 @@ void parse_argument(vid_dec_ctx_t *ps_app_ctx, CHAR *argument, CHAR *value)
|
|||
ps_app_ctx->e_output_chroma_format = IV_YUV_420SP_VU;
|
||||
else if((strcmp(value, "GRAY")) == 0)
|
||||
ps_app_ctx->e_output_chroma_format = IV_GRAY;
|
||||
else if((strcmp(value, "YUV_422P")) == 0)
|
||||
ps_app_ctx->e_output_chroma_format = IV_YUV_422P;
|
||||
else
|
||||
{
|
||||
printf("\nInvalid colour format setting it to IV_YUV_420P\n");
|
||||
|
|
@ -2438,6 +2417,13 @@ int main(WORD32 argc, CHAR *argv[])
|
|||
s_ctl_op.u4_min_out_buf_size[2] = 0;
|
||||
break;
|
||||
}
|
||||
case IV_YUV_422P:
|
||||
{
|
||||
s_ctl_op.u4_min_out_buf_size[0] = ADAPTIVE_MAX_WD * ADAPTIVE_MAX_HT;
|
||||
s_ctl_op.u4_min_out_buf_size[1] = ADAPTIVE_MAX_WD * ADAPTIVE_MAX_HT >> 1;
|
||||
s_ctl_op.u4_min_out_buf_size[2] = ADAPTIVE_MAX_WD * ADAPTIVE_MAX_HT >> 1;
|
||||
break;
|
||||
}
|
||||
case IV_YUV_444P:
|
||||
{
|
||||
s_ctl_op.u4_min_out_buf_size[0] = ADAPTIVE_MAX_WD * ADAPTIVE_MAX_HT;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue