[automerger] Adding Check For Number of Skip MBs am: 414cd5db73 am: 5da13fdeb2 am: 7b162d4405 am: c03b3f3f0c am: 7dd36bd482
Change-Id: Ib99f72f9068cbc1d93de273115455b8d2f170fd7
diff --git a/decoder/impeg2d.h b/decoder/impeg2d.h
index 5567733..97094dc 100644
--- a/decoder/impeg2d.h
+++ b/decoder/impeg2d.h
@@ -167,6 +167,9 @@
IMPEG2D_CMD_CTL_GET_BUFFER_DIMENSIONS = IVD_CMD_CTL_CODEC_SUBCMD_START
+ 0x100,
+ /** Get Seq header/seq header extension info */
+ IMPEG2D_CMD_CTL_GET_SEQ_INFO = IVD_CMD_CTL_CODEC_SUBCMD_START + 0x101,
+
} IMPEG2D_CMD_CTL_SUB_CMDS;
/*****************************************************************************/
@@ -509,6 +512,87 @@
UWORD32 u4_buffer_ht[3];
} impeg2d_ctl_get_frame_dimensions_op_t;
+typedef struct
+{
+ /**
+ * size
+ */
+ UWORD32 u4_size;
+
+ /**
+ * cmd
+ */
+ IVD_API_COMMAND_TYPE_T e_cmd;
+
+ /**
+ * sub cmd
+ */
+ IVD_CONTROL_API_COMMAND_TYPE_T e_sub_cmd;
+} impeg2d_ctl_get_seq_info_ip_t;
+
+typedef struct
+{
+ /**
+ * size
+ */
+ UWORD32 u4_size;
+
+ /**
+ * error_code
+ */
+ UWORD32 u4_error_code;
+
+ /**
+ * aspect_ratio_information
+ */
+ UWORD8 u1_aspect_ratio_information;
+
+ /**
+ * frame_rate_code
+ */
+ UWORD8 u1_frame_rate_code;
+
+ /**
+ * frame_rate_extension_n
+ */
+ UWORD8 u1_frame_rate_extension_n;
+
+ /**
+ * frame_rate_extension_d
+ */
+ UWORD8 u1_frame_rate_extension_d;
+
+ /**
+ * video_format
+ */
+ UWORD8 u1_video_format;
+
+ /**
+ * colour_primaries
+ */
+ UWORD8 u1_colour_primaries;
+
+ /**
+ * transfer_characteristics
+ */
+ UWORD8 u1_transfer_characteristics;
+
+ /**
+ * matrix_coefficients
+ */
+ UWORD8 u1_matrix_coefficients;
+
+ /**
+ * display_horizontal_size
+ */
+ UWORD16 u2_display_horizontal_size;
+
+ /**
+ * display_vertical_size
+ */
+ UWORD16 u2_display_vertical_size;
+
+} impeg2d_ctl_get_seq_info_op_t;
#ifdef __cplusplus
} /* closing brace for extern "C" */
#endif
diff --git a/decoder/impeg2d_api_main.c b/decoder/impeg2d_api_main.c
index e4f3c1c..cd549e4 100644
--- a/decoder/impeg2d_api_main.c
+++ b/decoder/impeg2d_api_main.c
@@ -328,6 +328,55 @@
return IV_SUCCESS;
}
+IV_API_CALL_STATUS_T impeg2d_api_get_seq_info(iv_obj_t *ps_dechdl,
+ void *pv_api_ip,
+ void *pv_api_op)
+{
+ impeg2d_ctl_get_seq_info_ip_t *ps_ip;
+ impeg2d_ctl_get_seq_info_op_t *ps_op;
+ dec_state_t *ps_codec;
+ dec_state_multi_core_t *ps_dec_state_multi_core;
+
+ ps_ip = (impeg2d_ctl_get_seq_info_ip_t *)pv_api_ip;
+ ps_op = (impeg2d_ctl_get_seq_info_op_t *)pv_api_op;
+
+ ps_dec_state_multi_core = (dec_state_multi_core_t *) (ps_dechdl->pv_codec_handle);
+ ps_codec = ps_dec_state_multi_core->ps_dec_state[0];
+ UNUSED(ps_ip);
+ if(ps_codec->u2_header_done == 1)
+ {
+ ps_op->u1_aspect_ratio_information = ps_codec->u2_aspect_ratio_info;
+ ps_op->u1_frame_rate_code = ps_codec->u2_frame_rate_code;
+ ps_op->u1_frame_rate_extension_n = ps_codec->u2_frame_rate_extension_n;
+ ps_op->u1_frame_rate_extension_d = ps_codec->u2_frame_rate_extension_d;
+ if(ps_codec->u1_seq_disp_extn_present == 1)
+ {
+ ps_op->u1_video_format = ps_codec->u1_video_format;
+ ps_op->u1_colour_primaries = ps_codec->u1_colour_primaries;
+ ps_op->u1_transfer_characteristics = ps_codec->u1_transfer_characteristics;
+ ps_op->u1_matrix_coefficients = ps_codec->u1_matrix_coefficients;
+ ps_op->u2_display_horizontal_size = ps_codec->u2_display_horizontal_size;
+ ps_op->u2_display_vertical_size = ps_codec->u2_display_vertical_size;
+ }
+ else
+ {
+ ps_op->u1_video_format = 5;
+ ps_op->u1_colour_primaries = 2;
+ ps_op->u1_transfer_characteristics = 2;
+ ps_op->u1_matrix_coefficients = 2;
+ ps_op->u2_display_horizontal_size = ps_codec->u2_horizontal_size;
+ ps_op->u2_display_vertical_size = ps_codec->u2_vertical_size;
+ }
+ ps_op->u4_error_code = IV_SUCCESS;
+ return IV_SUCCESS;
+ }
+ else
+ {
+ ps_op->u4_error_code = IV_FAIL;
+ return IV_FAIL;
+ }
+}
+
/**
*******************************************************************************
*
@@ -2113,6 +2162,12 @@
(void *)pv_api_op);
break;
+ case IMPEG2D_CMD_CTL_GET_SEQ_INFO:
+ u4_error_code = impeg2d_api_get_seq_info(ps_dechdl,
+ (void *)pv_api_ip,
+ (void *)pv_api_op);
+ break;
+
case IMPEG2D_CMD_CTL_SET_PROCESSOR:
u4_error_code = impeg2d_set_processor(ps_dechdl, (void *)pv_api_ip,
(void *)pv_api_op);
@@ -2972,7 +3027,36 @@
break;
}
+ case IMPEG2D_CMD_CTL_GET_SEQ_INFO:
+ {
+ impeg2d_ctl_get_seq_info_ip_t *ps_ip;
+ impeg2d_ctl_get_seq_info_op_t *ps_op;
+ ps_ip =
+ (impeg2d_ctl_get_seq_info_ip_t *)pv_api_ip;
+ ps_op =
+ (impeg2d_ctl_get_seq_info_op_t *)pv_api_op;
+
+ if(ps_ip->u4_size
+ != sizeof(impeg2d_ctl_get_seq_info_ip_t))
+ {
+ ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
+ ps_op->u4_error_code |=
+ IVD_IP_API_STRUCT_SIZE_INCORRECT;
+ return IV_FAIL;
+ }
+
+ if(ps_op->u4_size
+ != sizeof(impeg2d_ctl_get_seq_info_op_t))
+ {
+ ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
+ ps_op->u4_error_code |=
+ IVD_OP_API_STRUCT_SIZE_INCORRECT;
+ return IV_FAIL;
+ }
+
+ break;
+ }
case IMPEG2D_CMD_CTL_SET_NUM_CORES:
{
impeg2d_ctl_set_num_cores_ip_t *ps_ip;
diff --git a/decoder/impeg2d_dec_hdr.c b/decoder/impeg2d_dec_hdr.c
index 3dff8c2..6bb0a85 100644
--- a/decoder/impeg2d_dec_hdr.c
+++ b/decoder/impeg2d_dec_hdr.c
@@ -421,10 +421,17 @@
}
*/
- impeg2d_bit_stream_get(ps_stream,7);
- if (impeg2d_bit_stream_get_bit(ps_stream) == 1)
+ impeg2d_bit_stream_get(ps_stream, 4);
+ ps_dec->u1_video_format = impeg2d_bit_stream_get(ps_stream, 3);
+ ps_dec->u1_colour_description = impeg2d_bit_stream_get(ps_stream, 1);
+ ps_dec->u1_colour_primaries = 2;
+ ps_dec->u1_transfer_characteristics = 2;
+ ps_dec->u1_matrix_coefficients = 2;
+ if(ps_dec->u1_colour_description)
{
- impeg2d_bit_stream_get(ps_stream,24);
+ ps_dec->u1_colour_primaries = impeg2d_bit_stream_get(ps_stream, 8);
+ ps_dec->u1_transfer_characteristics = impeg2d_bit_stream_get(ps_stream, 8);
+ ps_dec->u1_matrix_coefficients = impeg2d_bit_stream_get(ps_stream, 8);
}
/* display_horizontal_size and display_vertical_size */
@@ -432,6 +439,7 @@
GET_MARKER_BIT(ps_dec,ps_stream);
ps_dec->u2_display_vertical_size = impeg2d_bit_stream_get(ps_stream,14);
+ ps_dec->u1_seq_disp_extn_present = 1;
impeg2d_next_start_code(ps_dec);
}
diff --git a/decoder/impeg2d_structs.h b/decoder/impeg2d_structs.h
index 9d0c756..48fdd13 100644
--- a/decoder/impeg2d_structs.h
+++ b/decoder/impeg2d_structs.h
@@ -249,6 +249,11 @@
/* Members related to display dimensions of bitstream */
/* The size values may not be returned right now. But they are read */
/* and can be returned if there is a requirement. */
+ UWORD8 u1_video_format;
+ UWORD8 u1_colour_description;
+ UWORD8 u1_colour_primaries;
+ UWORD8 u1_transfer_characteristics;
+ UWORD8 u1_matrix_coefficients;
UWORD16 u2_display_horizontal_size;
UWORD16 u2_display_vertical_size;
UWORD16 u2_aspect_ratio_info;
@@ -384,6 +389,8 @@
/** Buffer used after deinterlacer for format conversion */
UWORD8 *pu1_deint_fmt_buf;
+ /** Flag to indicate if Seq Display Extn is present */
+ UWORD8 u1_seq_disp_extn_present;
}dec_state_t;
diff --git a/test/decoder/main.c b/test/decoder/main.c
index e6eb1ef..6229f50 100644
--- a/test/decoder/main.c
+++ b/test/decoder/main.c
@@ -2599,6 +2599,30 @@
s_ctl_get_frame_dimensions_op.u4_y_offset[0]);
*/
}
+ /*************************************************************************/
+ /* Get Sequence Header/Seq Extn/Seq display extension info */
+ /*************************************************************************/
+ {
+
+ impeg2d_ctl_get_seq_info_ip_t s_ctl_get_seq_info_ip;
+ impeg2d_ctl_get_seq_info_op_t s_ctl_get_seq_info_op;
+
+ s_ctl_get_seq_info_ip.e_cmd = IVD_CMD_VIDEO_CTL;
+ s_ctl_get_seq_info_ip.e_sub_cmd =
+ (IVD_CONTROL_API_COMMAND_TYPE_T)IMPEG2D_CMD_CTL_GET_SEQ_INFO;
+ s_ctl_get_seq_info_ip.u4_size =
+ sizeof(impeg2d_ctl_get_seq_info_ip_t);
+ s_ctl_get_seq_info_op.u4_size =
+ sizeof(impeg2d_ctl_get_seq_info_op_t);
+
+ ret = ivd_api_function((iv_obj_t *)codec_obj, (void *)&s_ctl_get_seq_info_ip,
+ (void *)&s_ctl_get_seq_info_op);
+ if(IV_SUCCESS != ret)
+ {
+ sprintf(ac_error_str, "Error in Get Sequence Info");
+ codec_exit(ac_error_str);
+ }
+ }
/*************************************************************************/