In addition, uses the corresponding surface object directly.
Signed-off-by: Xiang, Haihao <haihao.xiang@intel.com>
struct gen6_mfd_context *gen6_mfd_context)
{
struct intel_batchbuffer *batch = gen6_mfd_context->base.batch;
- struct i965_driver_data *i965 = i965_driver_data(ctx);
- struct object_surface *obj_surface = SURFACE(decode_state->current_render_target);
- assert(obj_surface);
+ struct object_surface *obj_surface = decode_state->render_object;
BEGIN_BCS_BATCH(batch, 6);
OUT_BCS_BATCH(batch, MFX_SURFACE_STATE | (6 - 2));
assert(decode_state->pic_param && decode_state->pic_param->buffer);
pic_param = (VAPictureParameterBufferH264 *)decode_state->pic_param->buffer;
- assert(!(pic_param->CurrPic.flags & VA_PICTURE_H264_INVALID));
if (decode_state->iq_matrix && decode_state->iq_matrix->buffer)
qm_present_flag = 1;
static void
gen6_mfd_avc_directmode_state(VADriverContextP ctx,
+ struct decode_state *decode_state,
VAPictureParameterBufferH264 *pic_param,
VASliceParameterBufferH264 *slice_param,
struct gen6_mfd_context *gen6_mfd_context)
/* the current decoding frame/field */
va_pic = &pic_param->CurrPic;
- assert(!(va_pic->flags & VA_PICTURE_H264_INVALID));
- obj_surface = SURFACE(va_pic->picture_id);
- assert(obj_surface && obj_surface->bo && obj_surface->private_data);
+ obj_surface = decode_state->render_object;
+ assert(obj_surface->bo && obj_surface->private_data);
gen6_avc_surface = obj_surface->private_data;
OUT_BCS_RELOC(batch, gen6_avc_surface->dmv_top,
{
VAPictureParameterBufferH264 *pic_param;
VASliceParameterBufferH264 *slice_param;
- VAPictureH264 *va_pic;
struct i965_driver_data *i965 = i965_driver_data(ctx);
struct object_surface *obj_surface;
dri_bo *bo;
width_in_mbs = ((pic_param->picture_width_in_mbs_minus1 + 1) & 0xff);
/* Current decoded picture */
- va_pic = &pic_param->CurrPic;
- assert(!(va_pic->flags & VA_PICTURE_H264_INVALID));
- obj_surface = SURFACE(va_pic->picture_id);
- assert(obj_surface);
+ obj_surface = decode_state->render_object;
obj_surface->flags &= ~SURFACE_REF_DIS_MASK;
obj_surface->flags |= (pic_param->pic_fields.bits.reference_pic_flag ? SURFACE_REFERENCED : 0);
i965_check_alloc_surface_bo(ctx, obj_surface, 1, VA_FOURCC('N','V','1','2'), SUBSAMPLE_YUV420);
else
next_slice_param = next_slice_group_param;
- gen6_mfd_avc_directmode_state(ctx, pic_param, slice_param, gen6_mfd_context);
+ gen6_mfd_avc_directmode_state(ctx, decode_state, pic_param, slice_param, gen6_mfd_context);
gen6_mfd_avc_slice_state(ctx, pic_param, slice_param, next_slice_param, gen6_mfd_context);
gen6_mfd_avc_ref_idx_state(ctx, pic_param, slice_param, gen6_mfd_context);
gen6_mfd_avc_weightoffset_state(ctx, pic_param, slice_param, gen6_mfd_context);
);
/* Current decoded picture */
- obj_surface = SURFACE(decode_state->current_render_target);
- assert(obj_surface);
+ obj_surface = decode_state->render_object;
i965_check_alloc_surface_bo(ctx, obj_surface, 1, VA_FOURCC('N','V','1','2'), SUBSAMPLE_YUV420);
dri_bo_unreference(gen6_mfd_context->pre_deblocking_output.bo);
gen6_mfd_context->reference_surface[i].surface_id = gen6_mfd_context->reference_surface[i % 2].surface_id;
/* Current decoded picture */
- obj_surface = SURFACE(decode_state->current_render_target);
- assert(obj_surface);
+ obj_surface = decode_state->render_object;
i965_check_alloc_surface_bo(ctx, obj_surface, 1, VA_FOURCC('N','V','1','2'), SUBSAMPLE_YUV420);
gen6_mfd_init_vc1_surface(ctx, pic_param, obj_surface);
assert(decode_state->pic_param && decode_state->pic_param->buffer);
pic_param = (VAPictureParameterBufferVC1 *)decode_state->pic_param->buffer;
- obj_surface = SURFACE(decode_state->current_render_target);
+ obj_surface = decode_state->render_object;
if (obj_surface && obj_surface->private_data) {
dmv_write_buffer = ((struct gen6_vc1_surface *)(obj_surface->private_data))->dmv;
{
struct gen6_mfd_context *gen6_mfd_context = (struct gen6_mfd_context *)hw_context;
struct decode_state *decode_state = &codec_state->decode;
+ VAStatus vaStatus;
assert(gen6_mfd_context);
+ vaStatus = intel_decoder_sanity_check_input(ctx, profile, decode_state);
+
+ if (vaStatus != VA_STATUS_SUCCESS)
+ goto out;
+
switch (profile) {
case VAProfileMPEG2Simple:
case VAProfileMPEG2Main:
break;
}
- return VA_STATUS_SUCCESS;
+ vaStatus = VA_STATUS_SUCCESS;
+
+out:
+ return vaStatus;
}
static void
struct gen7_mfd_context *gen7_mfd_context)
{
struct intel_batchbuffer *batch = gen7_mfd_context->base.batch;
- struct i965_driver_data *i965 = i965_driver_data(ctx);
- struct object_surface *obj_surface = SURFACE(decode_state->current_render_target);
+ struct object_surface *obj_surface = decode_state->render_object;
unsigned int y_cb_offset;
unsigned int y_cr_offset;
assert(decode_state->pic_param && decode_state->pic_param->buffer);
pic_param = (VAPictureParameterBufferH264 *)decode_state->pic_param->buffer;
- assert(!(pic_param->CurrPic.flags & VA_PICTURE_H264_INVALID));
if (pic_param->CurrPic.flags & VA_PICTURE_H264_TOP_FIELD)
img_struct = 1;
static void
gen75_mfd_avc_directmode_state_bplus(VADriverContextP ctx,
+ struct decode_state *decode_state,
VAPictureParameterBufferH264 *pic_param,
VASliceParameterBufferH264 *slice_param,
struct gen7_mfd_context *gen7_mfd_context)
/* the current decoding frame/field */
va_pic = &pic_param->CurrPic;
- assert(!(va_pic->flags & VA_PICTURE_H264_INVALID));
- obj_surface = SURFACE(va_pic->picture_id);
- assert(obj_surface && obj_surface->bo && obj_surface->private_data);
+ obj_surface = decode_state->render_object;
+ assert(obj_surface->bo && obj_surface->private_data);
gen7_avc_surface = obj_surface->private_data;
OUT_BCS_RELOC(batch, gen7_avc_surface->dmv_top,
static void
gen75_mfd_avc_directmode_state(VADriverContextP ctx,
+ struct decode_state *decode_state,
VAPictureParameterBufferH264 *pic_param,
VASliceParameterBufferH264 *slice_param,
struct gen7_mfd_context *gen7_mfd_context)
int i, j;
if (IS_STEPPING_BPLUS(i965)) {
- gen75_mfd_avc_directmode_state_bplus(ctx, pic_param, slice_param,
+ gen75_mfd_avc_directmode_state_bplus(ctx, decode_state, pic_param, slice_param,
gen7_mfd_context);
return;
/* the current decoding frame/field */
va_pic = &pic_param->CurrPic;
- assert(!(va_pic->flags & VA_PICTURE_H264_INVALID));
- obj_surface = SURFACE(va_pic->picture_id);
- assert(obj_surface && obj_surface->bo && obj_surface->private_data);
+ obj_surface = decode_state->render_object;
+ assert(obj_surface->bo && obj_surface->private_data);
gen7_avc_surface = obj_surface->private_data;
OUT_BCS_RELOC(batch, gen7_avc_surface->dmv_top,
{
VAPictureParameterBufferH264 *pic_param;
VASliceParameterBufferH264 *slice_param;
- VAPictureH264 *va_pic;
struct i965_driver_data *i965 = i965_driver_data(ctx);
struct object_surface *obj_surface;
dri_bo *bo;
assert(height_in_mbs > 0 && height_in_mbs <= 256);
/* Current decoded picture */
- va_pic = &pic_param->CurrPic;
- assert(!(va_pic->flags & VA_PICTURE_H264_INVALID));
- obj_surface = SURFACE(va_pic->picture_id);
- assert(obj_surface);
+ obj_surface = decode_state->render_object;
obj_surface->flags &= ~SURFACE_REF_DIS_MASK;
obj_surface->flags |= (pic_param->pic_fields.bits.reference_pic_flag ? SURFACE_REFERENCED : 0);
i965_check_alloc_surface_bo(ctx, obj_surface, 1, VA_FOURCC('N','V','1','2'), SUBSAMPLE_YUV420);
else
next_slice_param = next_slice_group_param;
- gen75_mfd_avc_directmode_state(ctx, pic_param, slice_param, gen7_mfd_context);
+ gen75_mfd_avc_directmode_state(ctx, decode_state, pic_param, slice_param, gen7_mfd_context);
gen75_mfd_avc_ref_idx_state(ctx, pic_param, slice_param, gen7_mfd_context);
gen75_mfd_avc_weightoffset_state(ctx, pic_param, slice_param, gen7_mfd_context);
gen75_mfd_avc_slice_state(ctx, pic_param, slice_param, next_slice_param, gen7_mfd_context);
);
/* Current decoded picture */
- obj_surface = SURFACE(decode_state->current_render_target);
- assert(obj_surface);
+ obj_surface = decode_state->render_object;
i965_check_alloc_surface_bo(ctx, obj_surface, 1, VA_FOURCC('N','V','1','2'), SUBSAMPLE_YUV420);
dri_bo_unreference(gen7_mfd_context->pre_deblocking_output.bo);
gen7_mfd_context->reference_surface[i].surface_id = gen7_mfd_context->reference_surface[i % 2].surface_id;
/* Current decoded picture */
- obj_surface = SURFACE(decode_state->current_render_target);
- assert(obj_surface);
+ obj_surface = decode_state->render_object;
i965_check_alloc_surface_bo(ctx, obj_surface, 1, VA_FOURCC('N','V','1','2'), SUBSAMPLE_YUV420);
gen75_mfd_init_vc1_surface(ctx, pic_param, obj_surface);
assert(decode_state->pic_param && decode_state->pic_param->buffer);
pic_param = (VAPictureParameterBufferVC1 *)decode_state->pic_param->buffer;
- obj_surface = SURFACE(decode_state->current_render_target);
+ obj_surface = decode_state->render_object;
if (obj_surface && obj_surface->private_data) {
dmv_write_buffer = ((struct gen7_vc1_surface *)(obj_surface->private_data))->dmv;
assert(decode_state->pic_param && decode_state->pic_param->buffer);
pic_param = (VAPictureParameterBufferVC1 *)decode_state->pic_param->buffer;
- obj_surface = SURFACE(decode_state->current_render_target);
+ obj_surface = decode_state->render_object;
if (obj_surface && obj_surface->private_data) {
dmv_write_buffer = ((struct gen7_vc1_surface *)(obj_surface->private_data))->dmv;
struct decode_state *decode_state,
struct gen7_mfd_context *gen7_mfd_context)
{
- struct i965_driver_data *i965 = i965_driver_data(ctx);
struct object_surface *obj_surface;
VAPictureParameterBufferJPEGBaseline *pic_param;
int subsampling = SUBSAMPLE_YUV420;
}
/* Current decoded picture */
- obj_surface = SURFACE(decode_state->current_render_target);
- assert(obj_surface);
+ obj_surface = decode_state->render_object;
+
i965_check_alloc_surface_bo(ctx, obj_surface, 1, VA_FOURCC('I','M','C','1'), subsampling);
dri_bo_unreference(gen7_mfd_context->pre_deblocking_output.bo);
{
struct gen7_mfd_context *gen7_mfd_context = (struct gen7_mfd_context *)hw_context;
struct decode_state *decode_state = &codec_state->decode;
+ VAStatus vaStatus;
assert(gen7_mfd_context);
+ vaStatus = intel_decoder_sanity_check_input(ctx, profile, decode_state);
+
+ if (vaStatus != VA_STATUS_SUCCESS)
+ goto out;
+
gen7_mfd_context->wa_mpeg2_slice_vertical_position = -1;
switch (profile) {
break;
}
- return VA_STATUS_SUCCESS;
+ vaStatus = VA_STATUS_SUCCESS;
+
+out:
+ return vaStatus;
}
static void
struct gen7_mfd_context *gen7_mfd_context)
{
struct intel_batchbuffer *batch = gen7_mfd_context->base.batch;
- struct i965_driver_data *i965 = i965_driver_data(ctx);
- struct object_surface *obj_surface = SURFACE(decode_state->current_render_target);
+ struct object_surface *obj_surface = decode_state->render_object;
unsigned int y_cb_offset;
unsigned int y_cr_offset;
assert(decode_state->pic_param && decode_state->pic_param->buffer);
pic_param = (VAPictureParameterBufferH264 *)decode_state->pic_param->buffer;
- assert(!(pic_param->CurrPic.flags & VA_PICTURE_H264_INVALID));
if (pic_param->CurrPic.flags & VA_PICTURE_H264_TOP_FIELD)
img_struct = 1;
static void
gen7_mfd_avc_directmode_state(VADriverContextP ctx,
+ struct decode_state *decode_state,
VAPictureParameterBufferH264 *pic_param,
VASliceParameterBufferH264 *slice_param,
struct gen7_mfd_context *gen7_mfd_context)
/* the current decoding frame/field */
va_pic = &pic_param->CurrPic;
- assert(!(va_pic->flags & VA_PICTURE_H264_INVALID));
- obj_surface = SURFACE(va_pic->picture_id);
- assert(obj_surface && obj_surface->bo && obj_surface->private_data);
+ obj_surface = decode_state->render_object;
+ assert(obj_surface->bo && obj_surface->private_data);
gen7_avc_surface = obj_surface->private_data;
OUT_BCS_RELOC(batch, gen7_avc_surface->dmv_top,
{
VAPictureParameterBufferH264 *pic_param;
VASliceParameterBufferH264 *slice_param;
- VAPictureH264 *va_pic;
struct i965_driver_data *i965 = i965_driver_data(ctx);
struct object_surface *obj_surface;
dri_bo *bo;
assert(height_in_mbs > 0 && height_in_mbs <= 256);
/* Current decoded picture */
- va_pic = &pic_param->CurrPic;
- assert(!(va_pic->flags & VA_PICTURE_H264_INVALID));
- obj_surface = SURFACE(va_pic->picture_id);
- assert(obj_surface);
+ obj_surface = decode_state->render_object;
obj_surface->flags &= ~SURFACE_REF_DIS_MASK;
obj_surface->flags |= (pic_param->pic_fields.bits.reference_pic_flag ? SURFACE_REFERENCED : 0);
i965_check_alloc_surface_bo(ctx, obj_surface, 1, VA_FOURCC('N','V','1','2'), SUBSAMPLE_YUV420);
else
next_slice_param = next_slice_group_param;
- gen7_mfd_avc_directmode_state(ctx, pic_param, slice_param, gen7_mfd_context);
+ gen7_mfd_avc_directmode_state(ctx, decode_state, pic_param, slice_param, gen7_mfd_context);
gen7_mfd_avc_ref_idx_state(ctx, pic_param, slice_param, gen7_mfd_context);
gen7_mfd_avc_weightoffset_state(ctx, pic_param, slice_param, gen7_mfd_context);
gen7_mfd_avc_slice_state(ctx, pic_param, slice_param, next_slice_param, gen7_mfd_context);
);
/* Current decoded picture */
- obj_surface = SURFACE(decode_state->current_render_target);
- assert(obj_surface);
+ obj_surface = decode_state->render_object;
i965_check_alloc_surface_bo(ctx, obj_surface, 1, VA_FOURCC('N','V','1','2'), SUBSAMPLE_YUV420);
dri_bo_unreference(gen7_mfd_context->pre_deblocking_output.bo);
gen7_mfd_context->reference_surface[i].surface_id = gen7_mfd_context->reference_surface[i % 2].surface_id;
/* Current decoded picture */
- obj_surface = SURFACE(decode_state->current_render_target);
- assert(obj_surface);
+ obj_surface = decode_state->render_object;
i965_check_alloc_surface_bo(ctx, obj_surface, 1, VA_FOURCC('N','V','1','2'), SUBSAMPLE_YUV420);
gen7_mfd_init_vc1_surface(ctx, pic_param, obj_surface);
assert(decode_state->pic_param && decode_state->pic_param->buffer);
pic_param = (VAPictureParameterBufferVC1 *)decode_state->pic_param->buffer;
- obj_surface = SURFACE(decode_state->current_render_target);
+ obj_surface = decode_state->render_object;
if (obj_surface && obj_surface->private_data) {
dmv_write_buffer = ((struct gen7_vc1_surface *)(obj_surface->private_data))->dmv;
struct decode_state *decode_state,
struct gen7_mfd_context *gen7_mfd_context)
{
- struct i965_driver_data *i965 = i965_driver_data(ctx);
struct object_surface *obj_surface;
VAPictureParameterBufferJPEGBaseline *pic_param;
int subsampling = SUBSAMPLE_YUV420;
}
/* Current decoded picture */
- obj_surface = SURFACE(decode_state->current_render_target);
- assert(obj_surface);
+ obj_surface = decode_state->render_object;
i965_check_alloc_surface_bo(ctx, obj_surface, 1, VA_FOURCC('I','M','C','1'), subsampling);
dri_bo_unreference(gen7_mfd_context->pre_deblocking_output.bo);
{
struct gen7_mfd_context *gen7_mfd_context = (struct gen7_mfd_context *)hw_context;
struct decode_state *decode_state = &codec_state->decode;
+ VAStatus vaStatus;
assert(gen7_mfd_context);
+ vaStatus = intel_decoder_sanity_check_input(ctx, profile, decode_state);
+
+ if (vaStatus != VA_STATUS_SUCCESS)
+ goto out;
+
gen7_mfd_context->wa_mpeg2_slice_vertical_position = -1;
switch (profile) {
break;
}
- return VA_STATUS_SUCCESS;
+ vaStatus = VA_STATUS_SUCCESS;
+
+out:
+ return vaStatus;
}
static void
assert(decode_state->pic_param && decode_state->pic_param->buffer);
pic_param = (VAPictureParameterBufferH264 *)decode_state->pic_param->buffer;
- assert(!(pic_param->CurrPic.flags & VA_PICTURE_H264_INVALID));
-
if (pic_param->CurrPic.flags & VA_PICTURE_H264_TOP_FIELD)
img_struct = 1;
else if (pic_param->CurrPic.flags & VA_PICTURE_H264_BOTTOM_FIELD)
static void
i965_avc_bsd_buf_base_state(VADriverContextP ctx,
+ struct decode_state *decode_state,
VAPictureParameterBufferH264 *pic_param,
VASliceParameterBufferH264 *slice_param,
struct i965_h264_context *i965_h264_context)
}
va_pic = &pic_param->CurrPic;
- assert(!(va_pic->flags & VA_PICTURE_H264_INVALID));
- obj_surface = SURFACE(va_pic->picture_id);
- assert(obj_surface);
+ obj_surface = decode_state->render_object;
obj_surface->flags &= ~SURFACE_REF_DIS_MASK;
obj_surface->flags |= (pic_param->pic_fields.bits.reference_pic_flag ? SURFACE_REFERENCED : 0);
i965_check_alloc_surface_bo(ctx, obj_surface, 0, VA_FOURCC('N','V','1','2'), SUBSAMPLE_YUV420);
i965_h264_context->picture.i_flag = 0;
i965_avc_bsd_slice_state(ctx, pic_param, slice_param, i965_h264_context);
- i965_avc_bsd_buf_base_state(ctx, pic_param, slice_param, i965_h264_context);
+ i965_avc_bsd_buf_base_state(ctx, decode_state, pic_param, slice_param, i965_h264_context);
i965_avc_bsd_object(ctx, decode_state, pic_param, slice_param, j, i965_h264_context);
slice_param++;
}
struct decode_state *decode_state,
struct i965_h264_context *i965_h264_context)
{
- struct i965_driver_data *i965 = i965_driver_data(ctx);
struct i965_avc_ildb_context *avc_ildb_context = &i965_h264_context->avc_ildb_context;
struct i965_surface_state *ss;
struct object_surface *obj_surface;
assert(decode_state->pic_param && decode_state->pic_param->buffer);
pic_param = (VAPictureParameterBufferH264 *)decode_state->pic_param->buffer;
va_pic = &pic_param->CurrPic;
- assert(!(va_pic->flags & VA_PICTURE_H264_INVALID));
- obj_surface = SURFACE(va_pic->picture_id);
- assert(obj_surface);
+ obj_surface = decode_state->render_object;
avc_ildb_context->surface[SURFACE_EDGE_CONTROL_DATA].s_bo = i965_h264_context->avc_ildb_data.bo;
dri_bo_reference(avc_ildb_context->surface[SURFACE_EDGE_CONTROL_DATA].s_bo);
frame_store
);
}
+
+static VAStatus
+intel_decoder_check_avc_parameter(VADriverContextP ctx,
+ struct decode_state *decode_state)
+{
+ VAPictureParameterBufferH264 *pic_param = (VAPictureParameterBufferH264 *)decode_state->pic_param->buffer;
+
+ assert(!(pic_param->CurrPic.flags & VA_PICTURE_H264_INVALID));
+ assert(pic_param->CurrPic.picture_id != VA_INVALID_SURFACE);
+
+ if (pic_param->CurrPic.flags & VA_PICTURE_H264_INVALID ||
+ pic_param->CurrPic.picture_id == VA_INVALID_SURFACE)
+ goto error;
+
+ assert(pic_param->CurrPic.picture_id == decode_state->current_render_target);
+
+ if (pic_param->CurrPic.picture_id != decode_state->current_render_target)
+ goto error;
+
+ return VA_STATUS_SUCCESS;
+
+error:
+ return VA_STATUS_ERROR_INVALID_PARAMETER;
+}
+
+VAStatus
+intel_decoder_sanity_check_input(VADriverContextP ctx,
+ VAProfile profile,
+ struct decode_state *decode_state)
+{
+ struct i965_driver_data *i965 = i965_driver_data(ctx);
+ struct object_surface *obj_surface;
+ VAStatus vaStatus = VA_STATUS_ERROR_INVALID_PARAMETER;
+
+ if (decode_state->current_render_target == VA_INVALID_SURFACE)
+ goto out;
+
+ obj_surface = SURFACE(decode_state->current_render_target);
+
+ if (!obj_surface)
+ goto out;
+
+ decode_state->render_object = obj_surface;
+
+ switch (profile) {
+ case VAProfileMPEG2Simple:
+ case VAProfileMPEG2Main:
+ vaStatus = VA_STATUS_SUCCESS;
+ break;
+
+ case VAProfileH264Baseline:
+ case VAProfileH264Main:
+ case VAProfileH264High:
+ vaStatus = intel_decoder_check_avc_parameter(ctx, decode_state);
+ break;
+
+ case VAProfileVC1Simple:
+ case VAProfileVC1Main:
+ case VAProfileVC1Advanced:
+ vaStatus = VA_STATUS_SUCCESS;
+ break;
+
+ case VAProfileJPEGBaseline:
+ vaStatus = VA_STATUS_SUCCESS;
+ break;
+
+ default:
+ vaStatus = VA_STATUS_ERROR_INVALID_PARAMETER;
+ break;
+ }
+
+out:
+ return vaStatus;
+}
const GenFrameStore frame_store[MAX_GEN_REFERENCE_FRAMES]
);
+VAStatus
+intel_decoder_sanity_check_input(VADriverContextP ctx,
+ VAProfile profile,
+ struct decode_state *decode_state);
+
#endif /* I965_DECODER_UTILS_H */
int max_slice_datas;
int num_slice_params;
int num_slice_datas;
+
+ struct object_surface *render_object;
};
struct encode_state
#include "i965_media.h"
#include "i965_media_mpeg2.h"
#include "i965_media_h264.h"
+#include "i965_decoder_utils.h"
static void
i965_media_pipeline_select(VADriverContextP ctx, struct i965_media_context *media_context)
{
struct i965_media_context *media_context = (struct i965_media_context *)hw_context;
struct decode_state *decode_state = &codec_state->decode;
+ VAStatus vaStatus;
+
+ vaStatus = intel_decoder_sanity_check_input(ctx, profile, decode_state);
+
+ if (vaStatus != VA_STATUS_SUCCESS)
+ goto out;
i965_media_decode_init(ctx, profile, decode_state, media_context);
assert(media_context->media_states_setup);
i965_media_pipeline_setup(ctx, decode_state, media_context);
intel_batchbuffer_flush(hw_context->batch);
- return VA_STATUS_SUCCESS;
+ vaStatus = VA_STATUS_SUCCESS;
+
+out:
+ return vaStatus;
}
static void
/* Target Picture */
va_pic = &pic_param->CurrPic;
- assert(!(va_pic->flags & VA_PICTURE_H264_INVALID));
- obj_surface = SURFACE(va_pic->picture_id);
- assert(obj_surface);
+ obj_surface = decode_state->render_object;
w = obj_surface->width;
h = obj_surface->height;
field_picture = !!(va_pic->flags & (VA_PICTURE_H264_TOP_FIELD | VA_PICTURE_H264_BOTTOM_FIELD));
assert(decode_state->pic_param && decode_state->pic_param->buffer);
param = (VAPictureParameterBufferMPEG2 *)decode_state->pic_param->buffer;
- obj_surface = SURFACE(decode_state->current_render_target);
- assert(obj_surface);
+ obj_surface = decode_state->render_object;
+
i965_media_mpeg2_surface_setup(ctx, 0, obj_surface, True,
param->picture_coding_extension.bits.picture_structure,
SURFACE_TARGET,