diff --git a/decoder/ih264d_api.c b/decoder/ih264d_api.c
index 859efe0..6fe3916 100644
--- a/decoder/ih264d_api.c
+++ b/decoder/ih264d_api.c
@@ -2173,12 +2173,16 @@
         else
             prev_slice_err = 2;
 
+        if(ps_dec->u4_first_slice_in_pic && (ps_dec->u2_total_mbs_coded == 0))
+            prev_slice_err = 1;
+
         ret1 = ih264d_mark_err_slice_skip(ps_dec, num_mb_skipped, ps_dec->u1_nal_unit_type == IDR_SLICE_NAL, ps_dec->ps_cur_slice->u2_frame_num,
                                    &temp_poc, prev_slice_err);
 
-        if((ret1 == ERROR_UNAVAIL_PICBUF_T) || (ret1 == ERROR_UNAVAIL_MVBUF_T))
+        if((ret1 == ERROR_UNAVAIL_PICBUF_T) || (ret1 == ERROR_UNAVAIL_MVBUF_T) ||
+                       (ret1 == ERROR_INV_SPS_PPS_T))
         {
-            return IV_FAIL;
+            ret = ret1;
         }
     }
 
diff --git a/decoder/ih264d_inter_pred.c b/decoder/ih264d_inter_pred.c
index 01f2e01..b99a77c 100644
--- a/decoder/ih264d_inter_pred.c
+++ b/decoder/ih264d_inter_pred.c
@@ -474,7 +474,7 @@
     UWORD8 i1_mc_wd, u1_dma_ht, u1_dma_wd, u1_dx, u1_dy;
     pred_info_t * ps_pred ;
     dec_slice_params_t * const ps_cur_slice = ps_dec->ps_cur_slice;
-    const UWORD8 u1_slice_type = ps_cur_slice->u1_slice_type;
+    const UWORD8 u1_slice_type = ps_dec->ps_decode_cur_slice->slice_type;
     UWORD8 u1_pod_bot, u1_pod_top;
 
     /* load the pictype for pod u4_flag & chroma motion vector derivation */
@@ -1013,7 +1013,7 @@
     UWORD32 u2_dest_wd_y, u2_dest_wd_uv;
     UWORD32 u2_row_buf_wd_y = 0;
     UWORD32 u2_row_buf_wd_uv = 0;
-    UWORD32 u2_log2Y_crwd = ps_dec->ps_cur_slice->u2_log2Y_crwd;
+    UWORD32 u2_log2Y_crwd;
     UWORD32 u4_wd_y, u4_ht_y, u1_dir, u4_wd_uv;
     UWORD32 u4_ht_uv;
     UWORD8 *pu1_temp_mc_buffer = ps_dec->pu1_temp_mc_buffer;
@@ -1039,8 +1039,7 @@
     ps_pred_y_back = ps_pred;
     ps_pred_cr_forw = ps_pred;
 
-    if(ps_dec->u1_separate_parse)
-        u2_log2Y_crwd = ps_dec->ps_decode_cur_slice->u2_log2Y_crwd;
+    u2_log2Y_crwd = ps_dec->ps_decode_cur_slice->u2_log2Y_crwd;
 
     if(!u1_pic_fld)
     {
diff --git a/decoder/ih264d_parse_pslice.c b/decoder/ih264d_parse_pslice.c
index c712ed5..dfd1ba8 100644
--- a/decoder/ih264d_parse_pslice.c
+++ b/decoder/ih264d_parse_pslice.c
@@ -1489,10 +1489,27 @@
             if(ps_dec->ps_cur_pic != NULL)
                 poc = ps_dec->ps_cur_pic->i4_poc + 2;
 
-            j = 0;
+            j = -1;
             for(i = 0; i < MAX_NUM_PIC_PARAMS; i++)
+            {
                    if(ps_dec->ps_pps[i].u1_is_valid == TRUE)
-                       j = i;
+                   {
+                       if(ps_dec->ps_pps[i].ps_sps->u1_is_valid == TRUE)
+                       {
+                           j = i;
+                           break;
+                       }
+                   }
+            }
+
+            //if valid SPS PPS is not found return error
+            if(j == -1)
+            {
+                return ERROR_INV_SPS_PPS_T;
+            }
+
+            /* call ih264d_start_of_pic only if it was not called earlier*/
+            if(ps_dec->u4_pic_buf_got == 0)
             {
                 //initialize slice params required by ih264d_start_of_pic to valid values
                 ps_dec->ps_cur_slice->u1_slice_type = P_SLICE;
@@ -1563,7 +1580,8 @@
             && ps_parse_cur_slice == ps_dec->ps_parse_cur_slice)
         {
             // Slice data corrupted
-            u1_num_mbs = ps_dec->u4_num_mbs_cur_nmb;
+            // in the case of mbaff, conceal from the even mb.
+            u1_num_mbs = (ps_dec->u4_num_mbs_cur_nmb >> u1_mbaff ) << u1_mbaff;
 
             if(u1_num_mbs)
             {
diff --git a/decoder/ih264d_parse_slice.c b/decoder/ih264d_parse_slice.c
index 22a7d0b..f7e1fba 100644
--- a/decoder/ih264d_parse_slice.c
+++ b/decoder/ih264d_parse_slice.c
@@ -441,6 +441,8 @@
             /*make first entry of list0 point to cur pic,so that if first Islice is in error, ref pic struct will have valid entries*/
             ps_dec->ps_ref_pic_buf_lx[0] = ps_dec->ps_dpb_mgr->ps_init_dpb[0];
             *(ps_dec->ps_dpb_mgr->ps_init_dpb[0][0]) = *ps_cur_pic;
+            /* Initialize for field reference as well */
+            *(ps_dec->ps_dpb_mgr->ps_init_dpb[0][MAX_REF_BUFS]) = *ps_cur_pic;
         }
 
         if(!ps_dec->ps_cur_pic)
@@ -1415,6 +1417,11 @@
         ps_dec->u2_cur_slice_num++;
     }
 
+    // in the case of single core increment ps_decode_cur_slice
+    if((ps_dec->u1_separate_parse == 0) && (ps_dec->u4_first_slice_in_pic == 0))
+    {
+        ps_dec->ps_decode_cur_slice++;
+    }
     ps_dec->u1_slice_header_done = 0;
 
     /*--------------------------------------------------------------------*/
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 415dd01..2ecfdf5 100644
--- a/encoder/ih264e_api.c
+++ b/encoder/ih264e_api.c
@@ -1609,6 +1609,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;
@@ -2210,7 +2234,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)
     {
@@ -5217,7 +5244,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;
+}
 /**
 *******************************************************************************
 *
@@ -5441,6 +5551,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 6cb5220..3626a63 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;
 }
 
@@ -968,7 +1164,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 ae178c6..5fb0b88 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 cedd66c..125db84 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;
 
 
@@ -2796,11 +2799,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/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);
