[Libva] [Libva-intel-driver PATCH 19/27] HEVC: update frame store index

Xiang, Haihao haihao.xiang at intel.com
Wed Nov 19 07:05:34 PST 2014


Signed-off-by: Xiang, Haihao <haihao.xiang at intel.com>
---
 src/gen9_mfd.c           |  6 ++++++
 src/gen9_mfd.h           |  2 ++
 src/i965_decoder_utils.c | 17 +++++++++++++++++
 src/i965_decoder_utils.h |  9 +++++++++
 src/intel_media.h        |  1 +
 5 files changed, 35 insertions(+)

diff --git a/src/gen9_mfd.c b/src/gen9_mfd.c
index d04b133..45550f4 100644
--- a/src/gen9_mfd.c
+++ b/src/gen9_mfd.c
@@ -77,6 +77,7 @@ gen9_hcpd_init_hevc_surface(VADriverContextP ctx,
 
     if (!gen9_hevc_surface) {
         gen9_hevc_surface = calloc(sizeof(GenHevcSurface), 1);
+        gen9_hevc_surface->base.frame_store_id = -1;
         obj_surface->private_data = gen9_hevc_surface;
     }
 
@@ -127,6 +128,11 @@ gen9_hcpd_hevc_decode_init(VADriverContextP ctx,
 
     assert(decode_state->pic_param && decode_state->pic_param->buffer);
     pic_param = (VAPictureParameterBufferHEVC *)decode_state->pic_param->buffer;
+    intel_update_hevc_frame_store_index(ctx,
+                                        decode_state,
+                                        pic_param,
+                                        gen9_hcpd_context->reference_surfaces,
+                                        &gen9_hcpd_context->fs_ctx);
 
     gen9_hcpd_context->picture_width_in_pixels = pic_param->pic_width_in_luma_samples;
     gen9_hcpd_context->picture_height_in_pixels = pic_param->pic_height_in_luma_samples;
diff --git a/src/gen9_mfd.h b/src/gen9_mfd.h
index 6cf6db3..727c579 100644
--- a/src/gen9_mfd.h
+++ b/src/gen9_mfd.h
@@ -41,6 +41,8 @@ struct gen9_hcpd_context
 {
     struct hw_context base;
 
+    GenFrameStoreContext fs_ctx;
+
     GenFrameStore reference_surfaces[MAX_GEN_HCP_REFERENCE_FRAMES];
 
     VAIQMatrixBufferHEVC  iq_matrix_hevc;
diff --git a/src/i965_decoder_utils.c b/src/i965_decoder_utils.c
index 6cf9604..491b266 100644
--- a/src/i965_decoder_utils.c
+++ b/src/i965_decoder_utils.c
@@ -671,6 +671,23 @@ intel_update_avc_frame_store_index(
 }
 
 void
+intel_update_hevc_frame_store_index(
+    VADriverContextP              ctx,
+    struct decode_state          *decode_state,
+    VAPictureParameterBufferHEVC *pic_param,
+    GenFrameStore                 frame_store[MAX_GEN_HCP_REFERENCE_FRAMES],
+    GenFrameStoreContext         *fs_ctx
+    )
+{
+    intel_update_codec_frame_store_index(ctx,
+                                         decode_state,
+                                         pic_param->CurrPic.pic_order_cnt,
+                                         frame_store,
+                                         MAX_GEN_HCP_REFERENCE_FRAMES,
+                                         fs_ctx);
+}
+
+void
 gen75_update_avc_frame_store_index(
     VADriverContextP              ctx,
     struct decode_state          *decode_state,
diff --git a/src/i965_decoder_utils.h b/src/i965_decoder_utils.h
index 856f4c4..a447707 100644
--- a/src/i965_decoder_utils.h
+++ b/src/i965_decoder_utils.h
@@ -111,6 +111,15 @@ intel_update_avc_frame_store_index(
 );
 
 void
+intel_update_hevc_frame_store_index(
+    VADriverContextP              ctx,
+    struct decode_state          *decode_state,
+    VAPictureParameterBufferHEVC *pic_param,
+    GenFrameStore                 frame_store[MAX_GEN_HCP_REFERENCE_FRAMES],
+    GenFrameStoreContext         *fs_ctx
+);
+
+void
 gen75_update_avc_frame_store_index(
     VADriverContextP                    ctx,
     struct decode_state                *decode_state,
diff --git a/src/intel_media.h b/src/intel_media.h
index e30a3f0..73a03c7 100644
--- a/src/intel_media.h
+++ b/src/intel_media.h
@@ -55,6 +55,7 @@ extern int intel_format_convert(float src, int out_int_bits, int out_frac_bits,i
 typedef struct gen_hevc_surface GenHevcSurface;
 struct gen_hevc_surface
 {
+    GenCodecSurface base;
     dri_bo *motion_vector_temporal_bo;
 };
 
-- 
1.9.1



More information about the Libva mailing list