diff options
author | Zhou Chang <chang.zhou@intel.com> | 2011-06-02 16:47:09 +0800 |
---|---|---|
committer | Gwenole Beauchesne <gwenole.beauchesne@intel.com> | 2011-08-25 14:28:59 +0200 |
commit | 995def6787d9c7a699373fcdb114977db3383bc4 (patch) | |
tree | 8bbaed206cd52e9287e321108659a463d009f08a /src/gen6_vme.c | |
parent | 63b2c548418eda87241b28a3dd3ea76b6390596c (diff) | |
download | libva-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.c | 28 |
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)) |