summaryrefslogtreecommitdiff
path: root/src/gen6_vme.c
diff options
context:
space:
mode:
authorZhou Chang <chang.zhou@intel.com>2011-06-02 16:47:09 +0800
committerGwenole Beauchesne <gwenole.beauchesne@intel.com>2011-08-25 14:28:59 +0200
commit995def6787d9c7a699373fcdb114977db3383bc4 (patch)
tree8bbaed206cd52e9287e321108659a463d009f08a /src/gen6_vme.c
parent63b2c548418eda87241b28a3dd3ea76b6390596c (diff)
downloadlibva-intel-driver-995def6787d9c7a699373fcdb114977db3383bc4.tar.gz
Support B frame in MFC and VME.
Diffstat (limited to 'src/gen6_vme.c')
-rw-r--r--src/gen6_vme.c28
1 files changed, 15 insertions, 13 deletions
diff --git a/src/gen6_vme.c b/src/gen6_vme.c
index 09a042f2..984e0c2b 100644
--- a/src/gen6_vme.c
+++ b/src/gen6_vme.c
@@ -256,8 +256,8 @@ gen6_vme_output_buffer_setup(VADriverContextP ctx,
struct i965_surface_state *ss;
dri_bo *bo;
VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param->buffer;
- VAEncSliceParameterBuffer *pSliceParameter = (VAEncSliceParameterBuffer *)encode_state->slice_params[0]->buffer;
- int is_intra = pSliceParameter->slice_flags.bits.is_intra;
+ VAEncSliceParameterBufferH264Ext *pSliceParameter = (VAEncSliceParameterBufferH264Ext *)encode_state->slice_params[0]->buffer;
+ int is_intra = pSliceParameter->slice_type == SLICE_TYPE_I;
int width_in_mbs = pSequenceParameter->picture_width_in_mbs;
int height_in_mbs = pSequenceParameter->picture_height_in_mbs;
int num_entries;
@@ -311,7 +311,7 @@ static VAStatus gen6_vme_surface_setup(VADriverContextP ctx,
{
struct i965_driver_data *i965 = i965_driver_data(ctx);
struct object_surface *obj_surface;
- VAEncPictureParameterBufferH264 *pPicParameter = (VAEncPictureParameterBufferH264 *)encode_state->pic_param->buffer;
+ VAEncPictureParameterBufferH264Ext *pPicParameter = (VAEncPictureParameterBufferH264Ext *)encode_state->pic_param->buffer;
/*Setup surfaces state*/
/* current picture for encoding */
@@ -322,13 +322,15 @@ static VAStatus gen6_vme_surface_setup(VADriverContextP ctx,
if ( ! is_intra ) {
/* reference 0 */
- obj_surface = SURFACE(pPicParameter->reference_picture);
+ obj_surface = SURFACE(pPicParameter->ReferenceFrames[0].picture_id);
assert(obj_surface);
- gen6_vme_source_surface_state(ctx, 1, obj_surface, gen6_encoder_context);
- /* reference 1, FIXME: */
- // obj_surface = SURFACE(pPicParameter->reference_picture);
- // assert(obj_surface);
- //gen6_vme_source_surface_state(ctx, 2, obj_surface);
+ if ( obj_surface->bo != NULL)
+ gen6_vme_source_surface_state(ctx, 1, obj_surface, gen6_encoder_context);
+ /* reference 1 */
+ obj_surface = SURFACE(pPicParameter->ReferenceFrames[1].picture_id);
+ assert(obj_surface);
+ if ( obj_surface->bo != NULL )
+ gen6_vme_source_surface_state(ctx, 2, obj_surface, gen6_encoder_context);
}
/* VME output */
@@ -847,9 +849,9 @@ static void gen6_vme_pipeline_programing(VADriverContextP ctx,
struct gen6_encoder_context *gen6_encoder_context)
{
struct intel_batchbuffer *batch = gen6_encoder_context->base.batch;
- VAEncSliceParameterBuffer *pSliceParameter = (VAEncSliceParameterBuffer *)encode_state->slice_params[0]->buffer;
+ VAEncSliceParameterBufferH264Ext *pSliceParameter = (VAEncSliceParameterBufferH264Ext *)encode_state->slice_params[0]->buffer;
VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param->buffer;
- int is_intra = pSliceParameter->slice_flags.bits.is_intra;
+ int is_intra = pSliceParameter->slice_type == SLICE_TYPE_I;
int width_in_mbs = pSequenceParameter->picture_width_in_mbs;
int height_in_mbs = pSequenceParameter->picture_height_in_mbs;
int emit_new_state = 1, object_len_in_bytes;
@@ -898,8 +900,8 @@ static VAStatus gen6_vme_prepare(VADriverContextP ctx,
{
struct i965_driver_data *i965 = i965_driver_data(ctx);
VAStatus vaStatus = VA_STATUS_SUCCESS;
- VAEncSliceParameterBuffer *pSliceParameter = (VAEncSliceParameterBuffer *)encode_state->slice_params[0]->buffer;
- int is_intra = pSliceParameter->slice_flags.bits.is_intra;
+ VAEncSliceParameterBufferH264Ext *pSliceParameter = (VAEncSliceParameterBufferH264Ext *)encode_state->slice_params[0]->buffer;
+ int is_intra = pSliceParameter->slice_type == SLICE_TYPE_I;
/*Setup all the memory object*/
if (IS_GEN7(i965->intel.device_id))