Merge "libhevcenc: reduce output buffer latency for B picture"
am: fc394ef8ce

Change-Id: Ib1a43c41eb767922748dc219431bf66a431c301b
diff --git a/common/ivd.h b/common/ivd.h
index fe39a78..a3dae2d 100644
--- a/common/ivd.h
+++ b/common/ivd.h
@@ -484,6 +484,17 @@
      * disp_buf_id
      */
     UWORD32                                 u4_disp_buf_id;
+
+    /**
+     * reorder_depth
+     */
+    WORD32                                  i4_reorder_depth;
+
+    /**
+     * display index
+     */
+    WORD32                                  i4_display_index;
+
 }ivd_video_decode_op_t;
 
 
diff --git a/decoder/ihevcd_decode.c b/decoder/ihevcd_decode.c
index 1295687..16ed36b 100644
--- a/decoder/ihevcd_decode.c
+++ b/decoder/ihevcd_decode.c
@@ -207,6 +207,8 @@
 
     ps_dec_op->u4_output_present = 0;
     ps_dec_op->u4_progressive_frame_flag = 1;
+    ps_dec_op->i4_display_index = -1;
+    ps_dec_op->i4_reorder_depth = -1;
     if(ps_codec->i4_sps_done)
     {
         sps_t *ps_sps = (ps_codec->s_parse.ps_sps_base + ps_codec->i4_sps_id);
@@ -217,6 +219,8 @@
         {
             ps_dec_op->u4_progressive_frame_flag = 0;
         }
+        ps_dec_op->i4_reorder_depth =
+                        ps_sps->ai1_sps_max_num_reorder_pics[ps_sps->i1_sps_max_sub_layers - 1];
     }
 
     ps_dec_op->u4_is_ref_flag = 1;
@@ -224,7 +228,6 @@
     ps_dec_op->u4_is_ref_flag = 1;
 
     ps_dec_op->e4_fld_type = IV_FLD_TYPE_DEFAULT;
-
     ps_dec_op->u4_ts = (UWORD32)(-1);
     ps_dec_op->u4_disp_buf_id = ps_codec->i4_disp_buf_id;
     if(ps_codec->i4_flush_mode)
@@ -264,6 +267,7 @@
                     break;
             }
         }
+        ps_dec_op->i4_display_index = ps_disp_buf->i4_abs_poc;
         ps_dec_op->u4_output_present = 1;
         ps_dec_op->u4_ts = ps_disp_buf->u4_ts;
         if((ps_codec->i4_flush_mode == 0) && (ps_codec->s_parse.i4_end_of_frame == 0))
diff --git a/decoder/ihevcd_parse_headers.c b/decoder/ihevcd_parse_headers.c
index 2d1f567..e16a9e6 100644
--- a/decoder/ihevcd_parse_headers.c
+++ b/decoder/ihevcd_parse_headers.c
@@ -1675,6 +1675,19 @@
     {
         return IHEVCD_INVALID_PARAMETER;
     }
+    /* Check if CTB size is different in case of multiple SPS with same ID */
+    {
+        sps_t *ps_sps_old = (ps_codec->s_parse.ps_sps_base + sps_id);
+        if(ps_sps_old->i1_sps_valid && ps_sps_old->i1_log2_ctb_size != ctb_log2_size_y)
+        {
+            if(0 == ps_codec->i4_first_pic_done)
+            {
+                return IHEVCD_INVALID_PARAMETER;
+            }
+            ps_codec->i4_reset_flag = 1;
+            return (IHEVCD_ERROR_T)IVD_RES_CHANGED;
+        }
+    }
     ps_sps->i1_log2_ctb_size = ctb_log2_size_y;
 
     UEV_PARSE("log2_min_transform_block_size_minus2", value, ps_bitstrm);
diff --git a/decoder/ihevcd_parse_slice_header.c b/decoder/ihevcd_parse_slice_header.c
index ba2c5e8..c161fc4 100644
--- a/decoder/ihevcd_parse_slice_header.c
+++ b/decoder/ihevcd_parse_slice_header.c
@@ -318,7 +318,7 @@
     }
 
     ps_slice_hdr = ps_codec->s_parse.ps_slice_hdr_base + (ps_codec->s_parse.i4_cur_slice_idx & (MAX_SLICE_HDR_CNT - 1));
-
+    memset(ps_slice_hdr, 0, sizeof(*ps_slice_hdr));
 
     if((ps_pps->i1_dependent_slice_enabled_flag) &&
        (!first_slice_in_pic_flag))