[Libva] [PATCH 3/4] decoder: h264: use frame store context to maintain ref frames.
Gwenole Beauchesne
gb.devel at gmail.com
Mon Jun 2 10:58:41 PDT 2014
This is a convenience to use the GenFrameStoreContext structure,
when the whole frame store machinery is maintain. No functional
change.
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne at intel.com>
---
src/gen6_mfd.c | 4 ++--
src/gen75_mfd.c | 3 ++-
src/gen7_mfd.c | 3 ++-
src/gen8_mfd.c | 4 ++--
src/i965_avc_bsd.c | 4 ++--
src/i965_decoder_utils.c | 17 +++++++++--------
src/i965_decoder_utils.h | 10 ++++++----
7 files changed, 25 insertions(+), 20 deletions(-)
diff --git a/src/gen6_mfd.c b/src/gen6_mfd.c
index 1c3b9e3..0cc82e6 100755
--- a/src/gen6_mfd.c
+++ b/src/gen6_mfd.c
@@ -820,8 +820,8 @@ gen6_mfd_avc_decode_init(VADriverContextP ctx,
assert(decode_state->pic_param && decode_state->pic_param->buffer);
pic_param = (VAPictureParameterBufferH264 *)decode_state->pic_param->buffer;
- intel_update_avc_frame_store_index(ctx, decode_state, pic_param,
- gen6_mfd_context->fsc.used_frames);
+ intel_update_avc_frame_store_index(ctx, &gen6_mfd_context->fsc,
+ decode_state, pic_param);
width_in_mbs = ((pic_param->picture_width_in_mbs_minus1 + 1) & 0xff);
/* Current decoded picture */
diff --git a/src/gen75_mfd.c b/src/gen75_mfd.c
index 018740e..673ca14 100644
--- a/src/gen75_mfd.c
+++ b/src/gen75_mfd.c
@@ -1045,7 +1045,8 @@ gen75_mfd_avc_decode_init(VADriverContextP ctx,
assert(decode_state->pic_param && decode_state->pic_param->buffer);
pic_param = (VAPictureParameterBufferH264 *)decode_state->pic_param->buffer;
- intel_update_avc_frame_store_index(ctx, decode_state, pic_param, gen7_mfd_context->fsc.used_frames);
+ intel_update_avc_frame_store_index(ctx, &gen7_mfd_context->fsc,
+ decode_state, pic_param);
width_in_mbs = pic_param->picture_width_in_mbs_minus1 + 1;
height_in_mbs = pic_param->picture_height_in_mbs_minus1 + 1;
assert(width_in_mbs > 0 && width_in_mbs <= 256); /* 4K */
diff --git a/src/gen7_mfd.c b/src/gen7_mfd.c
index 07cdd46..69253c1 100755
--- a/src/gen7_mfd.c
+++ b/src/gen7_mfd.c
@@ -735,7 +735,8 @@ gen7_mfd_avc_decode_init(VADriverContextP ctx,
assert(decode_state->pic_param && decode_state->pic_param->buffer);
pic_param = (VAPictureParameterBufferH264 *)decode_state->pic_param->buffer;
- intel_update_avc_frame_store_index(ctx, decode_state, pic_param, gen7_mfd_context->fsc.used_frames);
+ intel_update_avc_frame_store_index(ctx, &gen7_mfd_context->fsc,
+ decode_state, pic_param);
width_in_mbs = pic_param->picture_width_in_mbs_minus1 + 1;
height_in_mbs = pic_param->picture_height_in_mbs_minus1 + 1;
assert(width_in_mbs > 0 && width_in_mbs <= 256); /* 4K */
diff --git a/src/gen8_mfd.c b/src/gen8_mfd.c
index 10c109c..13514df 100644
--- a/src/gen8_mfd.c
+++ b/src/gen8_mfd.c
@@ -822,8 +822,8 @@ gen8_mfd_avc_decode_init(VADriverContextP ctx,
assert(decode_state->pic_param && decode_state->pic_param->buffer);
pic_param = (VAPictureParameterBufferH264 *)decode_state->pic_param->buffer;
- intel_update_avc_frame_store_index(ctx, decode_state, pic_param,
- gen7_mfd_context->fsc.used_frames);
+ intel_update_avc_frame_store_index(ctx, &gen7_mfd_context->fsc,
+ decode_state, pic_param);
width_in_mbs = pic_param->picture_width_in_mbs_minus1 + 1;
height_in_mbs = pic_param->picture_height_in_mbs_minus1 + 1;
assert(width_in_mbs > 0 && width_in_mbs <= 256); /* 4K */
diff --git a/src/i965_avc_bsd.c b/src/i965_avc_bsd.c
index ce03439..43b8e68 100644
--- a/src/i965_avc_bsd.c
+++ b/src/i965_avc_bsd.c
@@ -796,8 +796,8 @@ i965_avc_bsd_pipeline(VADriverContextP ctx, struct decode_state *decode_state, v
assert(decode_state->pic_param && decode_state->pic_param->buffer);
pic_param = (VAPictureParameterBufferH264 *)decode_state->pic_param->buffer;
- intel_update_avc_frame_store_index(ctx, decode_state, pic_param,
- i965_h264_context->fs_context.used_frames);
+ intel_update_avc_frame_store_index(ctx, &i965_h264_context->fs_context,
+ decode_state, pic_param);
i965_h264_context->enable_avc_ildb = 0;
i965_h264_context->picture.i_flag = 1;
diff --git a/src/i965_decoder_utils.c b/src/i965_decoder_utils.c
index fff20c6..8f23bfb 100644
--- a/src/i965_decoder_utils.c
+++ b/src/i965_decoder_utils.c
@@ -452,10 +452,10 @@ gen_frame_store_context_init(GenFrameStoreContext *fsc)
void
intel_update_avc_frame_store_index(
- VADriverContextP ctx,
- struct decode_state *decode_state,
- VAPictureParameterBufferH264 *pic_param,
- GenFrameStore frame_store[MAX_GEN_REFERENCE_FRAMES]
+ VADriverContextP ctx,
+ GenFrameStoreContext *fs_ctx,
+ struct decode_state *decode_state,
+ VAPictureParameterBufferH264 *pic_param
)
{
int free_slots[MAX_GEN_REFERENCE_FRAMES];
@@ -464,7 +464,7 @@ intel_update_avc_frame_store_index(
/* Remove obsolete entries from the internal DPB */
for (i = 0, n = 0; i < MAX_GEN_REFERENCE_FRAMES; i++) {
- GenFrameStore * const fs = &frame_store[i];
+ GenFrameStore * const fs = &fs_ctx->used_frames[i];
if (fs->surface_id == VA_INVALID_ID || !fs->obj_surface) {
free_slots[n++] = i;
continue;
@@ -501,17 +501,18 @@ intel_update_avc_frame_store_index(
// Find whether the current frame is not already in our frame store
found = false;
for (j = 0; j < MAX_GEN_REFERENCE_FRAMES; j++) {
- if ((found = frame_store[j].obj_surface == obj_surface))
+ if ((found = fs_ctx->used_frames[j].obj_surface == obj_surface))
break;
}
// ... or add it
if (!found) {
if (n < num_free_slots) {
- GenFrameStore * const fs = &frame_store[free_slots[n++]];
+ GenFrameStore * const fs =
+ &fs_ctx->used_frames[free_slots[n++]];
fs->surface_id = obj_surface->base.id;
fs->obj_surface = obj_surface;
- fs->frame_store_id = fs - frame_store;
+ fs->frame_store_id = fs - fs_ctx->used_frames;
}
else {
WARN_ONCE("No free slot found for DPB reference list!!!\n");
diff --git a/src/i965_decoder_utils.h b/src/i965_decoder_utils.h
index a4c9415..77e9d2e 100644
--- a/src/i965_decoder_utils.h
+++ b/src/i965_decoder_utils.h
@@ -92,10 +92,12 @@ intel_decoder_sanity_check_input(VADriverContextP ctx,
struct decode_state *decode_state);
void
-intel_update_avc_frame_store_index(VADriverContextP ctx,
- struct decode_state *decode_state,
- VAPictureParameterBufferH264 *pic_param,
- GenFrameStore frame_store[MAX_GEN_REFERENCE_FRAMES]);
+intel_update_avc_frame_store_index(
+ VADriverContextP ctx,
+ GenFrameStoreContext *fs_ctx,
+ struct decode_state *decode_state,
+ VAPictureParameterBufferH264 *pic_param
+);
void
intel_update_vc1_frame_store_index(VADriverContextP ctx,
--
1.7.9.5
More information about the Libva
mailing list