[automerger] Encoder: Return error for odd resolution am: 9fa58d4db3 am: f56e0c0ed3 am: db53adff11 am: 538e4ed787 am: c8fc4c0206

Change-Id: Iafdb9ee561ac366c63959b5b392e37fe81771a9f
diff --git a/decoder/ih264d.h b/decoder/ih264d.h
index 63a5ce1..7c76296 100644
--- a/decoder/ih264d.h
+++ b/decoder/ih264d.h
@@ -429,6 +429,45 @@
     UWORD32                                     u4_buffer_ht[3];
 }ih264d_ctl_get_frame_dimensions_op_t;
 
+typedef struct
+{
+    UWORD32                                     u4_size;
+    IVD_API_COMMAND_TYPE_T                      e_cmd;
+    IVD_CONTROL_API_COMMAND_TYPE_T              e_sub_cmd;
+}ih264d_ctl_get_vui_params_ip_t;
+
+typedef struct
+{
+    UWORD32                                     u4_size;
+    UWORD32                                     u4_error_code;
+    UWORD8                                      u1_aspect_ratio_idc;
+    UWORD16                                     u2_sar_width;
+    UWORD16                                     u2_sar_height;
+    UWORD8                                      u1_overscan_appropriate_flag;
+    UWORD8                                      u1_video_format;
+    UWORD8                                      u1_video_full_range_flag;
+    UWORD8                                      u1_colour_primaries;
+    UWORD8                                      u1_tfr_chars;
+    UWORD8                                      u1_matrix_coeffs;
+    UWORD8                                      u1_cr_top_field;
+    UWORD8                                      u1_cr_bottom_field;
+    UWORD32                                     u4_num_units_in_tick;
+    UWORD32                                     u4_time_scale;
+    UWORD8                                      u1_fixed_frame_rate_flag;
+    UWORD8                                      u1_nal_hrd_params_present;
+    UWORD8                                      u1_vcl_hrd_params_present;
+    UWORD8                                      u1_low_delay_hrd_flag;
+    UWORD8                                      u1_pic_struct_present_flag;
+    UWORD8                                      u1_bitstream_restriction_flag;
+    UWORD8                                      u1_mv_over_pic_boundaries_flag;
+    UWORD32                                     u4_max_bytes_per_pic_denom;
+    UWORD32                                     u4_max_bits_per_mb_denom;
+    UWORD32                                     u4_log2_max_mv_length_horz;
+    UWORD32                                     u4_log2_max_mv_length_vert;
+    UWORD32                                     u4_num_reorder_frames;
+    UWORD32                                     u4_max_dec_frame_buffering;
+}ih264d_ctl_get_vui_params_op_t;
+
 #ifdef __cplusplus
 } /* closing brace for extern "C" */
 #endif
diff --git a/decoder/ih264d_api.c b/decoder/ih264d_api.c
index f65094c..3ace427 100644
--- a/decoder/ih264d_api.c
+++ b/decoder/ih264d_api.c
@@ -135,6 +135,10 @@
 WORD32 ih264d_get_frame_dimensions(iv_obj_t *dec_hdl,
                                    void *pv_api_ip,
                                    void *pv_api_op);
+WORD32 ih264d_get_vui_params(iv_obj_t *dec_hdl,
+                             void *pv_api_ip,
+                             void *pv_api_op);
+
 WORD32 ih264d_set_num_cores(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op);
 
 WORD32 ih264d_deblock_display(dec_struct_t *ps_dec);
@@ -743,7 +747,36 @@
 
                     break;
                 }
+                case IH264D_CMD_CTL_GET_VUI_PARAMS:
+                {
+                    ih264d_ctl_get_vui_params_ip_t *ps_ip;
+                    ih264d_ctl_get_vui_params_op_t *ps_op;
 
+                    ps_ip =
+                                    (ih264d_ctl_get_vui_params_ip_t *)pv_api_ip;
+                    ps_op =
+                                    (ih264d_ctl_get_vui_params_op_t *)pv_api_op;
+
+                    if(ps_ip->u4_size
+                                    != sizeof(ih264d_ctl_get_vui_params_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(ih264d_ctl_get_vui_params_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 IH264D_CMD_CTL_SET_NUM_CORES:
                 {
                     ih264d_ctl_set_num_cores_ip_t *ps_ip;
@@ -3382,6 +3415,11 @@
             ret = ih264d_get_frame_dimensions(dec_hdl, (void *)pv_api_ip,
                                               (void *)pv_api_op);
             break;
+        case IH264D_CMD_CTL_GET_VUI_PARAMS:
+            ret = ih264d_get_vui_params(dec_hdl, (void *)pv_api_ip,
+                                        (void *)pv_api_op);
+            break;
+
         case IH264D_CMD_CTL_SET_PROCESSOR:
             ret = ih264d_set_processor(dec_hdl, (void *)pv_api_ip,
                                        (void *)pv_api_op);
@@ -3609,6 +3647,72 @@
 
 }
 
+WORD32 ih264d_get_vui_params(iv_obj_t *dec_hdl,
+                             void *pv_api_ip,
+                             void *pv_api_op)
+{
+    ih264d_ctl_get_vui_params_ip_t *ps_ip;
+    ih264d_ctl_get_vui_params_op_t *ps_op;
+    dec_struct_t *ps_dec = dec_hdl->pv_codec_handle;
+    dec_seq_params_t *ps_sps;
+    vui_t *ps_vui;
+    WORD32 i;
+    UWORD32 u4_size;
+
+    ps_ip = (ih264d_ctl_get_vui_params_ip_t *)pv_api_ip;
+    ps_op = (ih264d_ctl_get_vui_params_op_t *)pv_api_op;
+    UNUSED(ps_ip);
+
+    u4_size = ps_op->u4_size;
+    memset(ps_op, 0, sizeof(ih264d_ctl_get_vui_params_op_t));
+    ps_op->u4_size = u4_size;
+
+    if(NULL == ps_dec->ps_cur_sps)
+    {
+        ps_op->u4_error_code = ERROR_VUI_PARAMS_NOT_FOUND;
+        return IV_FAIL;
+    }
+
+    ps_sps = ps_dec->ps_cur_sps;
+    if((0 == ps_sps->u1_is_valid)
+                    || (0 == ps_sps->u1_vui_parameters_present_flag))
+    {
+        ps_op->u4_error_code = ERROR_VUI_PARAMS_NOT_FOUND;
+        return IV_FAIL;
+    }
+
+    ps_vui = &ps_sps->s_vui;
+
+    ps_op->u1_aspect_ratio_idc              = ps_vui->u1_aspect_ratio_idc;
+    ps_op->u2_sar_width                     = ps_vui->u2_sar_width;
+    ps_op->u2_sar_height                    = ps_vui->u2_sar_height;
+    ps_op->u1_overscan_appropriate_flag     = ps_vui->u1_overscan_appropriate_flag;
+    ps_op->u1_video_format                  = ps_vui->u1_video_format;
+    ps_op->u1_video_full_range_flag         = ps_vui->u1_video_full_range_flag;
+    ps_op->u1_colour_primaries              = ps_vui->u1_colour_primaries;
+    ps_op->u1_tfr_chars                     = ps_vui->u1_tfr_chars;
+    ps_op->u1_matrix_coeffs                 = ps_vui->u1_matrix_coeffs;
+    ps_op->u1_cr_top_field                  = ps_vui->u1_cr_top_field;
+    ps_op->u1_cr_bottom_field               = ps_vui->u1_cr_bottom_field;
+    ps_op->u4_num_units_in_tick             = ps_vui->u4_num_units_in_tick;
+    ps_op->u4_time_scale                    = ps_vui->u4_time_scale;
+    ps_op->u1_fixed_frame_rate_flag         = ps_vui->u1_fixed_frame_rate_flag;
+    ps_op->u1_nal_hrd_params_present        = ps_vui->u1_nal_hrd_params_present;
+    ps_op->u1_vcl_hrd_params_present        = ps_vui->u1_vcl_hrd_params_present;
+    ps_op->u1_low_delay_hrd_flag            = ps_vui->u1_low_delay_hrd_flag;
+    ps_op->u1_pic_struct_present_flag       = ps_vui->u1_pic_struct_present_flag;
+    ps_op->u1_bitstream_restriction_flag    = ps_vui->u1_bitstream_restriction_flag;
+    ps_op->u1_mv_over_pic_boundaries_flag   = ps_vui->u1_mv_over_pic_boundaries_flag;
+    ps_op->u4_max_bytes_per_pic_denom       = ps_vui->u4_max_bytes_per_pic_denom;
+    ps_op->u4_max_bits_per_mb_denom         = ps_vui->u4_max_bits_per_mb_denom;
+    ps_op->u4_log2_max_mv_length_horz       = ps_vui->u4_log2_max_mv_length_horz;
+    ps_op->u4_log2_max_mv_length_vert       = ps_vui->u4_log2_max_mv_length_vert;
+    ps_op->u4_num_reorder_frames            = ps_vui->u4_num_reorder_frames;
+    ps_op->u4_max_dec_frame_buffering       = ps_vui->u4_max_dec_frame_buffering;
+
+    return IV_SUCCESS;
+}
+
 WORD32 ih264d_set_num_cores(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op)
 {
     ih264d_ctl_set_num_cores_ip_t *ps_ip;
diff --git a/decoder/ih264d_error_handler.h b/decoder/ih264d_error_handler.h
index 5b1bc84..586fe8a 100644
--- a/decoder/ih264d_error_handler.h
+++ b/decoder/ih264d_error_handler.h
@@ -112,7 +112,8 @@
     ERROR_PIC_NUM_IS_REPEATED = 0x92,
     ERROR_IN_LAST_SLICE_OF_PIC = 0x93,
     ERROR_NEW_FRAME_EXPECTED = 0x94,
-    ERROR_INCOMPLETE_FRAME = 0x95
+    ERROR_INCOMPLETE_FRAME = 0x95,
+    ERROR_VUI_PARAMS_NOT_FOUND = 0x96
 
 } h264_decoder_error_code_t;
 
diff --git a/decoder/ih264d_vui.c b/decoder/ih264d_vui.c
index 97b40c2..15bc37d 100644
--- a/decoder/ih264d_vui.c
+++ b/decoder/ih264d_vui.c
@@ -149,6 +149,14 @@
                         ps_bitstrm, 1);
     }
     u4_bits = ih264d_get_bits_h264(ps_bitstrm, 1);
+    /* Initialize to unspecified (5 for video_format and
+       2 for colour_primaries, tfr_chars, matrix_coeffs  */
+    ps_vu4->u1_video_format = 5;
+    ps_vu4->u1_video_full_range_flag = 0;
+    ps_vu4->u1_colour_primaries = 2;
+    ps_vu4->u1_tfr_chars = 2;
+    ps_vu4->u1_matrix_coeffs = 2;
+
     if(u4_bits)
     {
         ps_vu4->u1_video_format = ih264d_get_bits_h264(ps_bitstrm, 3);
diff --git a/encoder/ih264e.h b/encoder/ih264e.h
index 15a9d8f..4de0b17 100644
--- a/encoder/ih264e.h
+++ b/encoder/ih264e.h
@@ -484,6 +484,137 @@
 }ih264e_video_encode_op_t;
 
 
+/*****************************************************************************/
+/*   Video usability information                                             */
+/*****************************************************************************/
+typedef struct
+{
+    /** size of the structure  */
+    UWORD32                                     u4_size;
+
+    /** Command type : IVE_CMD_VIDEO_CTL  */
+    IVE_API_COMMAND_TYPE_T                      e_cmd;
+
+    /** Sub command type : IVE_CMD_CTL_SET_GOP_PARAMS */
+    IVE_CONTROL_API_COMMAND_TYPE_T              e_sub_cmd;
+
+    /** indicates the presence of aspect_ratio */
+    UWORD8                                      u1_aspect_ratio_info_present_flag;
+
+    /** specifies the aspect ratio of the luma samples */
+    UWORD8                                      u1_aspect_ratio_idc;
+
+    /** width of the luma samples. user dependent */
+    UWORD16                                     u2_sar_width;
+
+    /** Height of the luma samples. user dependent */
+    UWORD16                                     u2_sar_height;
+
+    /** if 1, specifies that the overscan_appropriate_flag is present
+     * if 0, the preferred display method for the video signal is unspecified */
+    UWORD8                                      u1_overscan_info_present_flag;
+
+    /** if 1,indicates that the cropped decoded pictures output
+     * are suitable for display using overscan */
+    UWORD8                                      u1_overscan_appropriate_flag;
+
+    /** if 1 specifies that video_format, video_full_range_flag and
+     * colour_description_present_flag are present */
+    UWORD8                                      u1_video_signal_type_present_flag;
+
+    /** pal, secam, ntsc, ...  */
+    UWORD8                                      u1_video_format;
+
+    /** indicates the black level and range of the luma and chroma signals */
+    UWORD8                                      u1_video_full_range_flag;
+
+    /** if 1,specifies that colour_primaries, transfer_characteristics
+     * and matrix_coefficients are present */
+    UWORD8                                      u1_colour_description_present_flag;
+
+    /** indicates the chromaticity coordinates of the source primaries  */
+    UWORD8                                      u1_colour_primaries;
+
+    /** indicates the opto-electronic transfer characteristic of the source picture */
+    UWORD8                                      u1_transfer_characteristics;
+
+    /** the matrix coefficients used in deriving luma and chroma signals
+     * from the green, blue, and red primaries */
+    UWORD8                                      u1_matrix_coefficients;
+
+    /** if 1, specifies that chroma_sample_loc_type_top_field and
+     * chroma_sample_loc_type_bottom_field are present */
+    UWORD8                                      u1_chroma_loc_info_present_flag;
+
+    /** location of chroma samples */
+    UWORD8                                      u1_chroma_sample_loc_type_top_field;
+    UWORD8                                      u1_chroma_sample_loc_type_bottom_field;
+
+    /**  Indicates the presence of the num_units_in_ticks, time_scale flag */
+    UWORD8                                      u1_vui_timing_info_present_flag;
+
+    /**  Number of units that correspond to one increment of the
+    *   clock. Indicates the  resolution */
+    UWORD32                                     u4_vui_num_units_in_tick;
+
+    /**  The number of time units that pass in one second */
+    UWORD32                                     u4_vui_time_scale;
+
+    /** Flag indicating that time difference between two frames is a constant */
+    UWORD8                                      u1_fixed_frame_rate_flag;
+
+    /** Indicates the presence of NAL HRD parameters */
+    UWORD8                                      u1_nal_hrd_parameters_present_flag;
+
+    /** Indicates the presence of VCL HRD parameters */
+    UWORD8                                      u1_vcl_hrd_parameters_present_flag;
+
+    /** Specifies the HRD operational mode */
+    UWORD8                                      u1_low_delay_hrd_flag;
+
+    /** Indicates presence of SEI messages which include pic_struct syntax element */
+    UWORD8                                      u1_pic_struct_present_flag;
+
+    /** 1, specifies that the following cvs bitstream restriction parameters are present */
+    UWORD8                                      u1_bitstream_restriction_flag;
+
+    /** if 0, indicates that no pel outside the pic boundaries and
+     * no sub-pels derived using pels outside the pic boundaries is used for inter prediction */
+    UWORD8                                      u1_motion_vectors_over_pic_boundaries_flag;
+
+    /** Indicates a number of bytes not exceeded by the sum of the sizes of the VCL NAL units
+     * associated with any coded picture */
+    UWORD8                                      u1_max_bytes_per_pic_denom;
+
+    /** Indicates an upper bound for the number of bits of coding_unit() data */
+    UWORD8                                      u1_max_bits_per_mb_denom;
+
+    /** Indicate the maximum absolute value of a decoded horizontal MV component
+     * in quarter-pel luma units */
+    UWORD8                                      u1_log2_max_mv_length_horizontal;
+
+    /** Indicate the maximum absolute value of a decoded vertical MV component
+     * in quarter-pel luma units */
+    UWORD8                                      u1_log2_max_mv_length_vertical;
+
+    /** Max number of frames that are not synchronized in display and decode order */
+    UWORD8                                      u1_num_reorder_frames;
+
+    /** specifies required size of the HRD DPB in units of frame buffers */
+    UWORD8                                      u1_max_dec_frame_buffering;
+
+}ih264e_vui_ip_t;
+
+typedef struct
+{
+    /** size of the structure                                           */
+    UWORD32                                     u4_size;
+
+    /** Return error code                                               */
+    UWORD32                                     u4_error_code;
+}ih264e_vui_op_t;
+
+
 /* The enum values should not have greater than 8 bits as this is assigned to WORD8 */
 typedef enum
 {
diff --git a/encoder/ih264e_api.c b/encoder/ih264e_api.c
index 5217e36..4091fc2 100644
--- a/encoder/ih264e_api.c
+++ b/encoder/ih264e_api.c
@@ -1627,6 +1627,30 @@
                     break;
                 }
 
+                case IVE_CMD_CTL_SET_VUI_PARAMS:
+                {
+                    ih264e_vui_ip_t *ps_ip = pv_api_ip;
+                    ih264e_vui_op_t *ps_op = pv_api_op;
+
+                    if(ps_ip->u4_size != sizeof(ih264e_vui_ip_t))
+                    {
+                        ps_op->u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
+                        ps_op->u4_error_code |=
+                                        IVE_ERR_IP_CTL_SET_VUI_STRUCT_SIZE_INCORRECT;
+                        return IV_FAIL;
+                    }
+
+                    if(ps_op->u4_size != sizeof(ih264e_vui_op_t))
+                    {
+                        ps_op->u4_error_code |= 1 << IVE_UNSUPPORTEDPARAM;
+                        ps_op->u4_error_code |=
+                                        IVE_ERR_OP_CTL_SET_VUI_STRUCT_SIZE_INCORRECT;
+                        return IV_FAIL;
+                    }
+
+                    break;
+                }
+
                 case IVE_CMD_CTL_SET_ENC_MODE:
                 {
                     ih264e_ctl_set_enc_mode_ip_t *ps_ip = pv_api_ip;
@@ -2228,7 +2252,10 @@
     {
         ps_codec->s_cfg.u4_num_cores = ps_cfg->u4_num_cores;
     }
-
+    else if (ps_cfg->e_cmd == IVE_CMD_CTL_SET_VUI_PARAMS)
+    {
+        ps_codec->s_cfg.s_vui = ps_cfg->s_vui;
+    }
     /* reset RC model */
     if (u4_init_rc)
     {
@@ -5235,7 +5262,90 @@
 
     return IV_SUCCESS;
 }
+/**
+ *******************************************************************************
+ *
+ * @brief
+ *  Sets vui params
+ *
+ * @par Description:
+ *  Video usability information
+ *
+ * @param[in] pv_api_ip
+ *  Pointer to input argument structure
+ *
+ * @param[out] pv_api_op
+ *  Pointer to output argument structure
+ *
+ * @param[out] ps_cfg
+ *  Pointer to config structure to be updated
+ *
+ * @returns error status
+ *
+ * @remarks none
+ *
+ *******************************************************************************
+ */
+static WORD32 ih264e_set_vui_params(void *pv_api_ip,
+                                    void *pv_api_op,
+                                    cfg_params_t *ps_cfg)
+{
+    /* ctrl call I/O structures */
+    ih264e_vui_ip_t *ps_ip = pv_api_ip;
+    ih264e_vui_op_t *ps_op = pv_api_op;
+    vui_t *ps_vui = &ps_cfg->s_vui;
 
+    ps_op->u4_error_code = 0;
+
+    ps_vui->u1_aspect_ratio_info_present_flag =
+                    ps_ip->u1_aspect_ratio_info_present_flag;
+    ps_vui->u1_aspect_ratio_idc = ps_ip->u1_aspect_ratio_idc;
+    ps_vui->u2_sar_width = ps_ip->u2_sar_width;
+    ps_vui->u2_sar_height = ps_ip->u2_sar_height;
+    ps_vui->u1_overscan_info_present_flag =
+                    ps_ip->u1_overscan_info_present_flag;
+    ps_vui->u1_overscan_appropriate_flag = ps_ip->u1_overscan_appropriate_flag;
+    ps_vui->u1_video_signal_type_present_flag =
+                    ps_ip->u1_video_signal_type_present_flag;
+    ps_vui->u1_video_format = ps_ip->u1_video_format;
+    ps_vui->u1_video_full_range_flag = ps_ip->u1_video_full_range_flag;
+    ps_vui->u1_colour_description_present_flag =
+                    ps_ip->u1_colour_description_present_flag;
+    ps_vui->u1_colour_primaries = ps_ip->u1_colour_primaries;
+    ps_vui->u1_transfer_characteristics = ps_ip->u1_transfer_characteristics;
+    ps_vui->u1_matrix_coefficients = ps_ip->u1_matrix_coefficients;
+    ps_vui->u1_chroma_loc_info_present_flag =
+                    ps_ip->u1_chroma_loc_info_present_flag;
+    ps_vui->u1_chroma_sample_loc_type_top_field =
+                    ps_ip->u1_chroma_sample_loc_type_top_field;
+    ps_vui->u1_chroma_sample_loc_type_bottom_field =
+                    ps_ip->u1_chroma_sample_loc_type_bottom_field;
+    ps_vui->u1_vui_timing_info_present_flag =
+                    ps_ip->u1_vui_timing_info_present_flag;
+    ps_vui->u4_vui_num_units_in_tick = ps_ip->u4_vui_num_units_in_tick;
+    ps_vui->u4_vui_time_scale = ps_ip->u4_vui_time_scale;
+    ps_vui->u1_fixed_frame_rate_flag = ps_ip->u1_fixed_frame_rate_flag;
+    ps_vui->u1_nal_hrd_parameters_present_flag =
+                    ps_ip->u1_nal_hrd_parameters_present_flag;
+    ps_vui->u1_vcl_hrd_parameters_present_flag =
+                    ps_ip->u1_vcl_hrd_parameters_present_flag;
+    ps_vui->u1_low_delay_hrd_flag = ps_ip->u1_low_delay_hrd_flag;
+    ps_vui->u1_pic_struct_present_flag = ps_ip->u1_pic_struct_present_flag;
+    ps_vui->u1_bitstream_restriction_flag =
+                    ps_ip->u1_bitstream_restriction_flag;
+    ps_vui->u1_motion_vectors_over_pic_boundaries_flag =
+                    ps_ip->u1_motion_vectors_over_pic_boundaries_flag;
+    ps_vui->u1_max_bytes_per_pic_denom = ps_ip->u1_max_bytes_per_pic_denom;
+    ps_vui->u1_max_bits_per_mb_denom = ps_ip->u1_max_bits_per_mb_denom;
+    ps_vui->u1_log2_max_mv_length_horizontal =
+                    ps_ip->u1_log2_max_mv_length_horizontal;
+    ps_vui->u1_log2_max_mv_length_vertical =
+                    ps_ip->u1_log2_max_mv_length_vertical;
+    ps_vui->u1_num_reorder_frames = ps_ip->u1_num_reorder_frames;
+    ps_vui->u1_max_dec_frame_buffering = ps_ip->u1_max_dec_frame_buffering;
+
+    return IV_SUCCESS;
+}
 /**
 *******************************************************************************
 *
@@ -5459,6 +5569,10 @@
             ret = ih264_set_deblock_params(pv_api_ip, pv_api_op, ps_cfg);
             break;
 
+        case IVE_CMD_CTL_SET_VUI_PARAMS:
+            ret = ih264e_set_vui_params(pv_api_ip, pv_api_op, ps_cfg);
+            break;
+
         case IVE_CMD_CTL_RESET:
 
             /* invalidate config param struct as it is being served right away */
diff --git a/encoder/ih264e_encode_header.c b/encoder/ih264e_encode_header.c
index ac025d6..04bdc14 100644
--- a/encoder/ih264e_encode_header.c
+++ b/encoder/ih264e_encode_header.c
@@ -160,54 +160,255 @@
     WORD32 return_status = IH264E_SUCCESS;
 
     /* aspect_ratio_info_present_flag */
-    PUT_BITS(ps_bitstrm, ps_vui->u1_aspect_ratio_info_present_flag, 1, return_status, "aspect_ratio_info_present_flag");
+    PUT_BITS(ps_bitstrm, ps_vui->u1_aspect_ratio_info_present_flag, 1,
+             return_status, "aspect_ratio_info_present_flag");
 
+    if(ps_vui->u1_aspect_ratio_info_present_flag)
+    { /* aspect_ratio_idc */
+        PUT_BITS(ps_bitstrm, ps_vui->u1_aspect_ratio_idc, 8, return_status,
+                 "aspect_ratio_idc");
+        if(255 == ps_vui->u1_aspect_ratio_idc) /* Extended_SAR */
+        { /* sar_width */
+            PUT_BITS(ps_bitstrm, ps_vui->u2_sar_width, 16, return_status,
+                     "sar_width");
+            /* sar_height */
+            PUT_BITS(ps_bitstrm, ps_vui->u2_sar_height, 16, return_status,
+                     "sar_height");
+        }
+
+    }
     /* overscan_info_present_flag */
-    PUT_BITS(ps_bitstrm, ps_vui->u1_overscan_info_present_flag, 1, return_status, "overscan_info_present_flag");
+    PUT_BITS(ps_bitstrm, ps_vui->u1_overscan_info_present_flag, 1,
+             return_status, "overscan_info_present_flag");
 
+    if(ps_vui->u1_overscan_info_present_flag)
+    {
+        /* overscan_appropriate_flag */
+        PUT_BITS(ps_bitstrm, ps_vui->u1_overscan_appropriate_flag, 1,
+                 return_status, "overscan_appropriate_flag");
+
+    }
     /* video_signal_type_present_flag */
-    PUT_BITS(ps_bitstrm, ps_vui->u1_video_signal_type_present_flag, 1, return_status, "video_signal_type_present_flag");
+    PUT_BITS(ps_bitstrm, ps_vui->u1_video_signal_type_present_flag, 1,
+             return_status, "video_signal_type_present_flag");
+
+    if(ps_vui->u1_video_signal_type_present_flag)
+    { /* video_format */
+        PUT_BITS(ps_bitstrm, ps_vui->u1_video_format, 3, return_status,
+                 "video_format");
+
+        /* video_full_range_flag */
+        PUT_BITS(ps_bitstrm, ps_vui->u1_video_full_range_flag, 1, return_status,
+                 "video_full_range_flag");
+
+        /* colour_description_present_flag */
+        PUT_BITS(ps_bitstrm, ps_vui->u1_colour_description_present_flag, 1,
+                 return_status, "colour_description_present_flag");
+
+        if(ps_vui->u1_colour_description_present_flag)
+        {
+            /* colour_primaries */
+            PUT_BITS(ps_bitstrm, ps_vui->u1_colour_primaries, 8, return_status,
+                     "colour_primaries");
+
+            /* transfer_characteristics */
+            PUT_BITS(ps_bitstrm, ps_vui->u1_transfer_characteristics, 8,
+                     return_status, "transfer_characteristics");
+
+            /* matrix_coefficients */
+            PUT_BITS(ps_bitstrm, ps_vui->u1_matrix_coefficients, 8,
+                     return_status, "matrix_coefficients");
+        }
+
+    }
 
     /* chroma_loc_info_present_flag */
-    PUT_BITS(ps_bitstrm, ps_vui->u1_chroma_loc_info_present_flag, 1, return_status, "chroma_loc_info_present_flag");
+    PUT_BITS(ps_bitstrm, ps_vui->u1_chroma_loc_info_present_flag, 1,
+             return_status, "chroma_loc_info_present_flag");
+
+    if(ps_vui->u1_chroma_loc_info_present_flag)
+    {
+        /* chroma_sample_loc_type_top_field */
+        PUT_BITS_UEV(ps_bitstrm, ps_vui->u1_chroma_sample_loc_type_top_field,
+                     return_status, "chroma_sample_loc_type_top_field");
+
+        /* chroma_sample_loc_type_bottom_field */
+        PUT_BITS_UEV(ps_bitstrm, ps_vui->u1_chroma_sample_loc_type_bottom_field,
+                     return_status, "chroma_sample_loc_type_bottom_field");
+    }
 
     /* timing_info_present_flag */
-    PUT_BITS(ps_bitstrm, ps_vui->u1_vui_timing_info_present_flag, 1, return_status, "timing_info_present_flag");
+    PUT_BITS(ps_bitstrm, ps_vui->u1_vui_timing_info_present_flag, 1,
+             return_status, "timing_info_present_flag");
+
+    if(ps_vui->u1_vui_timing_info_present_flag)
+    {
+        /* num_units_in_tick */
+        PUT_BITS(ps_bitstrm, ps_vui->u4_vui_num_units_in_tick, 32,
+                 return_status, "num_units_in_tick");
+
+        /* time_scale */
+        PUT_BITS(ps_bitstrm, ps_vui->u4_vui_time_scale, 32, return_status,
+                 "time_scale");
+
+        /* fixed_frame_rate_flag */
+        PUT_BITS(ps_bitstrm, ps_vui->u1_fixed_frame_rate_flag, 1, return_status,
+                 "fixed_frame_rate_flag");
+
+    }
 
     /* nal_hrd_parameters_present_flag */
-    PUT_BITS(ps_bitstrm, ps_vui->u1_nal_hrd_parameters_present_flag, 1, return_status, "nal_hrd_parameters_present_flag");
+    PUT_BITS(ps_bitstrm, ps_vui->u1_nal_hrd_parameters_present_flag, 1,
+             return_status, "nal_hrd_parameters_present_flag");
+
+    if(ps_vui->u1_nal_hrd_parameters_present_flag)
+    {
+        hrd_params_t * ps_hrd_params = &ps_vui->s_nal_hrd_parameters;
+        WORD32 i;
+        /* cpb_cnt_minus1 */
+        PUT_BITS_UEV(ps_bitstrm, ps_hrd_params->u1_cpb_cnt_minus1,
+                     return_status, "cpb_cnt_minus1");
+
+        /* bit_rate_scale */
+        PUT_BITS(ps_bitstrm, ps_hrd_params->u4_bit_rate_scale, 4, return_status,
+                 "bit_rate_scale");
+
+        /* cpb_size_scale */
+        PUT_BITS(ps_bitstrm, ps_hrd_params->u4_cpb_size_scale, 4, return_status,
+                 "cpb_size_scale");
+        for(i = 0; i < ps_hrd_params->u1_cpb_cnt_minus1; i++)
+        {
+            /* bit_rate_value_minus1[SchedSelIdx] */
+            PUT_BITS_UEV(ps_bitstrm,
+                         ps_hrd_params->au4_bit_rate_value_minus1[i],
+                         return_status, "bit_rate_value_minus1[SchedSelIdx]");
+
+            /* cpb_size_value_minus1[SchedSelIdx] */
+            PUT_BITS_UEV(ps_bitstrm,
+                         ps_hrd_params->au4_cpb_size_value_minus1[i],
+                         return_status, "cpb_size_value_minus1[SchedSelIdx]");
+
+            /* cbr_flag[SchedSelIdx] */
+            PUT_BITS(ps_bitstrm, ps_hrd_params->au1_cbr_flag[i], 1,
+                     return_status, "cbr_flag[SchedSelIdx]");
+        }
+
+        /* initial_cpb_removal_delay_length_minus1 */
+        PUT_BITS(ps_bitstrm,
+                 ps_hrd_params->u1_initial_cpb_removal_delay_length_minus1, 5,
+                 return_status, "initial_cpb_removal_delay_length_minus1");
+
+        /* cpb_removal_delay_length_minus1 */
+        PUT_BITS(ps_bitstrm, ps_hrd_params->u1_cpb_removal_delay_length_minus1,
+                 5, return_status, "cpb_removal_delay_length_minus1");
+
+        /* dpb_output_delay_length_minus1 */
+        PUT_BITS(ps_bitstrm, ps_hrd_params->u1_dpb_output_delay_length_minus1,
+                 5, return_status, "dpb_output_delay_length_minus1");
+
+        /* time_offset_length */
+        PUT_BITS(ps_bitstrm, ps_hrd_params->u1_time_offset_length, 5,
+                 return_status, "time_offset_length");
+    }
 
     /* vcl_hrd_parameters_present_flag */
-    PUT_BITS(ps_bitstrm, ps_vui->u1_vcl_hrd_parameters_present_flag, 1, return_status, "vcl_hrd_parameters_present_flag");
+    PUT_BITS(ps_bitstrm, ps_vui->u1_vcl_hrd_parameters_present_flag, 1,
+             return_status, "vcl_hrd_parameters_present_flag");
 
+    if(ps_vui->u1_vcl_hrd_parameters_present_flag)
+    {
+        hrd_params_t * ps_hrd_params = &ps_vui->s_vcl_hrd_parameters;
+        WORD32 i;
+        /* cpb_cnt_minus1 */
+        PUT_BITS_UEV(ps_bitstrm, ps_hrd_params->u1_cpb_cnt_minus1,
+                     return_status, "cpb_cnt_minus1");
+
+        /* bit_rate_scale */
+        PUT_BITS(ps_bitstrm, ps_hrd_params->u4_bit_rate_scale, 4, return_status,
+                 "bit_rate_scale");
+
+        /* cpb_size_scale */
+        PUT_BITS(ps_bitstrm, ps_hrd_params->u4_cpb_size_scale, 4, return_status,
+                 "cpb_size_scale");
+        for(i = 0; i < ps_hrd_params->u1_cpb_cnt_minus1; i++)
+        {
+            /* bit_rate_value_minus1[SchedSelIdx] */
+            PUT_BITS_UEV(ps_bitstrm,
+                         ps_hrd_params->au4_bit_rate_value_minus1[i],
+                         return_status, "bit_rate_value_minus1[SchedSelIdx]");
+
+            /* cpb_size_value_minus1[SchedSelIdx] */
+            PUT_BITS_UEV(ps_bitstrm,
+                         ps_hrd_params->au4_cpb_size_value_minus1[i],
+                         return_status, "cpb_size_value_minus1[SchedSelIdx]");
+
+            /* cbr_flag[SchedSelIdx] */
+            PUT_BITS(ps_bitstrm, ps_hrd_params->au1_cbr_flag[i], 1,
+                     return_status, "cbr_flag[SchedSelIdx]");
+        }
+
+        /* initial_cpb_removal_delay_length_minus1 */
+        PUT_BITS(ps_bitstrm,
+                 ps_hrd_params->u1_initial_cpb_removal_delay_length_minus1, 5,
+                 return_status, "initial_cpb_removal_delay_length_minus1");
+
+        /* cpb_removal_delay_length_minus1 */
+        PUT_BITS(ps_bitstrm, ps_hrd_params->u1_cpb_removal_delay_length_minus1,
+                 5, return_status, "cpb_removal_delay_length_minus1");
+
+        /* dpb_output_delay_length_minus1 */
+        PUT_BITS(ps_bitstrm, ps_hrd_params->u1_dpb_output_delay_length_minus1,
+                 5, return_status, "dpb_output_delay_length_minus1");
+
+        /* time_offset_length */
+        PUT_BITS(ps_bitstrm, ps_hrd_params->u1_time_offset_length, 5,
+                 return_status, "time_offset_length");
+    }
+
+    if(ps_vui->u1_nal_hrd_parameters_present_flag
+                    || ps_vui->u1_vcl_hrd_parameters_present_flag)
+    {
+        /* low_delay_hrd_flag */
+        PUT_BITS(ps_bitstrm, ps_vui->u1_low_delay_hrd_flag, 1, return_status,
+                 "low_delay_hrd_flag");
+    }
     /* pic_struct_present_flag */
-    PUT_BITS(ps_bitstrm, ps_vui->u1_pic_struct_present_flag, 1, return_status, "pic_struct_present_flag");
+    PUT_BITS(ps_bitstrm, ps_vui->u1_pic_struct_present_flag, 1, return_status,
+             "pic_struct_present_flag");
 
     /* bitstream_restriction_flag */
-    PUT_BITS(ps_bitstrm, ps_vui->u1_bitstream_restriction_flag, 1, return_status, "bitstream_restriction_flag");
+    PUT_BITS(ps_bitstrm, ps_vui->u1_bitstream_restriction_flag, 1,
+             return_status, "bitstream_restriction_flag");
 
     if(ps_vui->u1_bitstream_restriction_flag == 1)
     {
         /* motion_vectors_over_pic_boundaries_flag */
-        PUT_BITS(ps_bitstrm, ps_vui->u1_motion_vectors_over_pic_boundaries_flag, 1, return_status, "motion_vectors_over_pic_boundaries_flag");
+        PUT_BITS(ps_bitstrm, ps_vui->u1_motion_vectors_over_pic_boundaries_flag,
+                 1, return_status, "motion_vectors_over_pic_boundaries_flag");
 
         /* max_bytes_per_pic_denom */
-        PUT_BITS_UEV(ps_bitstrm,ps_vui->u1_max_bytes_per_pic_denom,return_status,"max_bytes_per_pic_denom");
+        PUT_BITS_UEV(ps_bitstrm, ps_vui->u1_max_bytes_per_pic_denom,
+                     return_status, "max_bytes_per_pic_denom");
 
         /* max_bits_per_mb_denom */
-        PUT_BITS_UEV(ps_bitstrm,ps_vui->u1_max_bits_per_mb_denom,return_status,"max_bits_per_mb_denom");
+        PUT_BITS_UEV(ps_bitstrm, ps_vui->u1_max_bits_per_mb_denom,
+                     return_status, "max_bits_per_mb_denom");
 
         /* log2_max_mv_length_horizontal */
-        PUT_BITS_UEV(ps_bitstrm,ps_vui->u1_log2_max_mv_length_horizontal,return_status,"log2_max_mv_length_horizontal");
+        PUT_BITS_UEV(ps_bitstrm, ps_vui->u1_log2_max_mv_length_horizontal,
+                     return_status, "log2_max_mv_length_horizontal");
 
         /* log2_max_mv_length_vertical */
-        PUT_BITS_UEV(ps_bitstrm,ps_vui->u1_log2_max_mv_length_vertical,return_status,"log2_max_mv_length_vertical");
+        PUT_BITS_UEV(ps_bitstrm, ps_vui->u1_log2_max_mv_length_vertical,
+                     return_status, "log2_max_mv_length_vertical");
 
         /* max_num_reorder_frames */
-        PUT_BITS_UEV(ps_bitstrm,ps_vui->u1_num_reorder_frames,return_status,"max_num_reorder_frames");
+        PUT_BITS_UEV(ps_bitstrm, ps_vui->u1_num_reorder_frames, return_status,
+                     "max_num_reorder_frames");
 
         /* max_dec_frame_buffering */
-        PUT_BITS_UEV(ps_bitstrm,ps_vui->u1_max_dec_frame_buffering,return_status,"max_dec_frame_buffering");
+        PUT_BITS_UEV(ps_bitstrm, ps_vui->u1_max_dec_frame_buffering,
+                     return_status, "max_dec_frame_buffering");
     }
 
     return return_status;
@@ -728,26 +929,20 @@
 * @param[in]   ps_codec
 *  pointer to encoder context
 *
-* @param[out]  ps_vui
-*  pointer to vui params that needs to be populated
-*
 * @return      success or failure error code
 *
 ******************************************************************************
 */
-IH264E_ERROR_T ih264e_populate_vui(codec_t *ps_codec, vui_t *ps_vui)
+IH264E_ERROR_T ih264e_populate_vui(codec_t *ps_codec)
 {
-    sps_t *ps_sps;
 
-    ps_sps = ps_codec->ps_sps_base + ps_codec->i4_sps_id;
-    ps_vui->u1_aspect_ratio_info_present_flag = 0;
-    ps_vui->u1_overscan_info_present_flag = 0;
-    ps_vui->u1_video_signal_type_present_flag = 0;
-    ps_vui->u1_chroma_loc_info_present_flag = 0;
-    ps_vui->u1_vui_timing_info_present_flag = 0;
+    vui_t *ps_vui = &ps_codec->s_cfg.s_vui;
+    sps_t *ps_sps = ps_codec->ps_sps_base + ps_codec->i4_sps_id;
+
+
     ps_vui->u1_nal_hrd_parameters_present_flag = 0;
     ps_vui->u1_vcl_hrd_parameters_present_flag = 0;
-    ps_vui->u1_pic_struct_present_flag = 0;
+
     ps_vui->u1_bitstream_restriction_flag = 1;
     ps_vui->u1_motion_vectors_over_pic_boundaries_flag = 1;
     ps_vui->u1_max_bytes_per_pic_denom = 0;
@@ -766,6 +961,7 @@
 
     ps_vui->u1_max_dec_frame_buffering = ps_sps->u1_max_num_ref_frames;
 
+
     return 0;
 }
 
@@ -961,7 +1157,7 @@
     if (ps_sps->i1_vui_parameters_present_flag)
     {
         /* populate vui params */
-        ih264e_populate_vui(ps_codec,&(ps_codec->s_vui));
+        ih264e_populate_vui(ps_codec);
     }
 
     return i4_err_code;
diff --git a/encoder/ih264e_process.c b/encoder/ih264e_process.c
index fce7e35..796c983 100644
--- a/encoder/ih264e_process.c
+++ b/encoder/ih264e_process.c
@@ -181,7 +181,8 @@
     ps_entropy->i4_error_code = IH264E_SUCCESS;
 
     /* generate sps */
-    ps_entropy->i4_error_code |= ih264e_generate_sps(ps_bitstrm, ps_sps, &ps_codec->s_vui);
+    ps_entropy->i4_error_code |= ih264e_generate_sps(ps_bitstrm, ps_sps,
+                                                     &ps_codec->s_cfg.s_vui);
 
     /* generate pps */
     ps_entropy->i4_error_code |= ih264e_generate_pps(ps_bitstrm, ps_pps, ps_sps);
@@ -371,8 +372,8 @@
         if (1 == ps_entropy->i4_gen_header)
         {
             /* generate sps */
-            ps_entropy->i4_error_code |= ih264e_generate_sps(ps_bitstrm, ps_sps, &ps_codec->s_vui);
-
+            ps_entropy->i4_error_code |= ih264e_generate_sps(ps_bitstrm, ps_sps,
+                                                             &ps_codec->s_cfg.s_vui);
             /* generate pps */
             ps_entropy->i4_error_code |= ih264e_generate_pps(ps_bitstrm, ps_pps, ps_sps);
 
diff --git a/encoder/ih264e_structs.h b/encoder/ih264e_structs.h
index 074731e..6cbce7c 100644
--- a/encoder/ih264e_structs.h
+++ b/encoder/ih264e_structs.h
@@ -563,6 +563,9 @@
      */
     UWORD32                                     u4_mb_info_type;
 
+    /** VUI structure                                                         */
+    vui_t                                       s_vui;
+
 }cfg_params_t;
 
 
@@ -2618,11 +2621,6 @@
     rate_control_ctxt_t s_rate_control;
 
     /**
-     * VUI structure
-     */
-    vui_t s_vui;
-
-    /**
      * input buffer queue
      */
     inp_buf_t as_inp_list[MAX_NUM_BFRAMES];
diff --git a/encoder/ive2.h b/encoder/ive2.h
index 411f376..b2c00d5 100644
--- a/encoder/ive2.h
+++ b/encoder/ive2.h
@@ -139,6 +139,7 @@
     IVE_CMD_CTL_SET_PROFILE_PARAMS          = 0XB,
     IVE_CMD_CTL_SET_DEBLOCK_PARAMS          = 0XC,
     IVE_CMD_CTL_SET_IPE_PARAMS              = 0XD,
+    IVE_CMD_CTL_SET_VUI_PARAMS              = 0XE,
     IVE_CMD_CTL_SET_NUM_CORES               = 0x30,
     IVE_CMD_CTL_RESET                       = 0xA0,
     IVE_CMD_CTL_FLUSH                       = 0xB0,
@@ -235,7 +236,8 @@
     IVE_ERR_OP_CTL_SETVBVPARAMS_API_STRUCT_SIZE_INCORRECT       = 0x3D,
     IVE_ERR_IP_CTL_SETPROFILE_API_STRUCT_SIZE_INCORRECT         = 0x3E,
     IVE_ERR_OP_CTL_SETPROFILE_API_STRUCT_SIZE_INCORRECT         = 0x3F,
-
+    IVE_ERR_IP_CTL_SET_VUI_STRUCT_SIZE_INCORRECT                = 0x40,
+    IVE_ERR_OP_CTL_SET_VUI_STRUCT_SIZE_INCORRECT                = 0x41,
 }IVE_ERROR_CODES_T;
 
 
diff --git a/test/decoder/main.c b/test/decoder/main.c
index 875ed3d..ea7fca3 100644
--- a/test/decoder/main.c
+++ b/test/decoder/main.c
@@ -2607,7 +2607,30 @@
 */
     }
 
+    /*************************************************************************/
+    /* Get VUI parameters                                                    */
+    /*************************************************************************/
+    {
 
+        ih264d_ctl_get_vui_params_ip_t s_ctl_get_vui_params_ip;
+        ih264d_ctl_get_vui_params_op_t s_ctl_get_vui_params_op;
+
+        s_ctl_get_vui_params_ip.e_cmd = IVD_CMD_VIDEO_CTL;
+        s_ctl_get_vui_params_ip.e_sub_cmd =
+                        (IVD_CONTROL_API_COMMAND_TYPE_T)IH264D_CMD_CTL_GET_VUI_PARAMS;
+        s_ctl_get_vui_params_ip.u4_size =
+                        sizeof(ih264d_ctl_get_vui_params_ip_t);
+        s_ctl_get_vui_params_op.u4_size =
+                        sizeof(ih264d_ctl_get_vui_params_op_t);
+
+        ret = ivd_api_function((iv_obj_t *)codec_obj, (void *)&s_ctl_get_vui_params_ip,
+                             (void *)&s_ctl_get_vui_params_op);
+        if(IV_SUCCESS != ret)
+        {
+            sprintf(ac_error_str, "Error in Get VUI params");
+            //codec_exit(ac_error_str);
+        }
+    }
 
     /*************************************************************************/
     /* Set the decoder in frame decode mode. It was set in header decode     */
diff --git a/test/encoder/main.c b/test/encoder/main.c
index 0c7d4f0..bc25e8d 100644
--- a/test/encoder/main.c
+++ b/test/encoder/main.c
@@ -1445,6 +1445,65 @@
     return;
 }
 
+
+void set_vui_params(app_ctxt_t *ps_app_ctxt)
+{
+    IV_STATUS_T status;
+
+    ih264e_vui_ip_t s_vui_params_ip;
+    ih264e_vui_op_t s_vui_params_op;
+
+    s_vui_params_ip.e_cmd = IVE_CMD_VIDEO_CTL;
+    s_vui_params_ip.e_sub_cmd = IVE_CMD_CTL_SET_VUI_PARAMS;
+
+    s_vui_params_ip.u1_aspect_ratio_info_present_flag = 0;
+    s_vui_params_ip.u1_aspect_ratio_idc = 0;
+    s_vui_params_ip.u2_sar_width = 0;
+    s_vui_params_ip.u2_sar_height = 0;
+    s_vui_params_ip.u1_overscan_info_present_flag = 0;
+    s_vui_params_ip.u1_overscan_appropriate_flag = 0;
+    s_vui_params_ip.u1_video_signal_type_present_flag = 0;
+    s_vui_params_ip.u1_video_format = 0;
+    s_vui_params_ip.u1_video_full_range_flag = 0;
+    s_vui_params_ip.u1_colour_description_present_flag = 0;
+    s_vui_params_ip.u1_colour_primaries = 0;
+    s_vui_params_ip.u1_transfer_characteristics = 0;
+    s_vui_params_ip.u1_matrix_coefficients = 0;
+    s_vui_params_ip.u1_chroma_loc_info_present_flag = 0;
+    s_vui_params_ip.u1_chroma_sample_loc_type_top_field = 0;
+    s_vui_params_ip.u1_chroma_sample_loc_type_bottom_field = 0;
+    s_vui_params_ip.u1_vui_timing_info_present_flag = 0;
+    s_vui_params_ip.u4_vui_num_units_in_tick = 0;
+    s_vui_params_ip.u4_vui_time_scale = 0;
+    s_vui_params_ip.u1_fixed_frame_rate_flag = 0;
+    s_vui_params_ip.u1_nal_hrd_parameters_present_flag = 0;
+    s_vui_params_ip.u1_vcl_hrd_parameters_present_flag = 0;
+    s_vui_params_ip.u1_low_delay_hrd_flag = 0;
+    s_vui_params_ip.u1_pic_struct_present_flag = 0;
+    s_vui_params_ip.u1_bitstream_restriction_flag = 0;
+    s_vui_params_ip.u1_motion_vectors_over_pic_boundaries_flag = 0;
+    s_vui_params_ip.u1_max_bytes_per_pic_denom = 0;
+    s_vui_params_ip.u1_max_bits_per_mb_denom = 0;
+    s_vui_params_ip.u1_log2_max_mv_length_horizontal = 0;
+    s_vui_params_ip.u1_log2_max_mv_length_vertical = 0;
+    s_vui_params_ip.u1_num_reorder_frames = 0;
+    s_vui_params_ip.u1_max_dec_frame_buffering = 0;
+
+
+    s_vui_params_ip.u4_size = sizeof(ih264e_vui_ip_t);
+    s_vui_params_op.u4_size = sizeof(ih264e_vui_op_t);
+
+    status = ih264e_api_function(ps_app_ctxt->ps_enc, &s_vui_params_ip,
+                                      &s_vui_params_op);
+    if(status != IV_SUCCESS)
+    {
+        CHAR ac_error[STRLENGTH];
+        sprintf(ac_error, "Unable to set vui params = 0x%x\n",
+                s_vui_params_op.u4_error_code);
+        codec_exit(ac_error);
+    }
+    return;
+}
 #define PEAK_WINDOW_SIZE    8
 
 void synchronous_encode(iv_obj_t *ps_enc, app_ctxt_t *ps_app_ctxt)
@@ -2477,6 +2536,11 @@
     /*****************************************************************************/
     set_enc_mode(&s_app_ctxt, 0, 0, IVE_ENC_MODE_PICTURE);
 
+    /*****************************************************************************/
+    /*   Video usability information                                             */
+    /*****************************************************************************/
+    set_vui_params(&s_app_ctxt);
+
 #ifdef IOS
     /* Correct file paths */
     sprintf(filename_with_path, "%s/%s", documentdir, s_app_ctxt.ac_ip_fname);