- MpegEncContext * const s = &ctx->m;
- struct vaapi_context * const vactx = avctx->hwaccel_context;
- VAPictureParameterBufferMPEG4 *pic_param;
- VAIQMatrixBufferMPEG4 *iq_matrix;
- int i;
-
- av_dlog(avctx, "vaapi_mpeg4_start_frame()\n");
-
- vactx->slice_param_size = sizeof(VASliceParameterBufferMPEG4);
-
- /* Fill in VAPictureParameterBufferMPEG4 */
- pic_param = ff_vaapi_alloc_pic_param(vactx, sizeof(VAPictureParameterBufferMPEG4));
- if (!pic_param)
- return -1;
- pic_param->vop_width = s->width;
- pic_param->vop_height = s->height;
- pic_param->forward_reference_picture = VA_INVALID_ID;
- pic_param->backward_reference_picture = VA_INVALID_ID;
- pic_param->vol_fields.value = 0; /* reset all bits */
- pic_param->vol_fields.bits.short_video_header = avctx->codec->id == AV_CODEC_ID_H263;
- pic_param->vol_fields.bits.chroma_format = CHROMA_420;
- pic_param->vol_fields.bits.interlaced = !s->progressive_sequence;
- pic_param->vol_fields.bits.obmc_disable = 1;
- pic_param->vol_fields.bits.sprite_enable = ctx->vol_sprite_usage;
- pic_param->vol_fields.bits.sprite_warping_accuracy = s->sprite_warping_accuracy;
- pic_param->vol_fields.bits.quant_type = s->mpeg_quant;
- pic_param->vol_fields.bits.quarter_sample = s->quarter_sample;
- pic_param->vol_fields.bits.data_partitioned = s->data_partitioning;
- pic_param->vol_fields.bits.reversible_vlc = ctx->rvlc;
- pic_param->vol_fields.bits.resync_marker_disable = !ctx->resync_marker;
- pic_param->no_of_sprite_warping_points = ctx->num_sprite_warping_points;
+ MpegEncContext *s = &ctx->m;
+ VAAPIDecodePicture *pic = s->current_picture_ptr->hwaccel_picture_private;
+ VAPictureParameterBufferMPEG4 pic_param;
+ int i, err;
+
+ pic->output_surface = ff_vaapi_get_surface_id(s->current_picture_ptr->f);
+
+ pic_param = (VAPictureParameterBufferMPEG4) {
+ .vop_width = s->width,
+ .vop_height = s->height,
+ .forward_reference_picture = VA_INVALID_ID,
+ .backward_reference_picture = VA_INVALID_ID,
+ .vol_fields.bits = {
+ .short_video_header = avctx->codec->id == AV_CODEC_ID_H263,
+ .chroma_format = CHROMA_420,
+ .interlaced = !s->progressive_sequence,
+ .obmc_disable = 1,
+ .sprite_enable = ctx->vol_sprite_usage,
+ .sprite_warping_accuracy = s->sprite_warping_accuracy,
+ .quant_type = s->mpeg_quant,
+ .quarter_sample = s->quarter_sample,
+ .data_partitioned = s->data_partitioning,
+ .reversible_vlc = ctx->rvlc,
+ .resync_marker_disable = !ctx->resync_marker,
+ },
+ .no_of_sprite_warping_points = ctx->num_sprite_warping_points,
+ .quant_precision = s->quant_precision,
+ .vop_fields.bits = {
+ .vop_coding_type = s->pict_type - AV_PICTURE_TYPE_I,
+ .backward_reference_vop_coding_type =
+ s->pict_type == AV_PICTURE_TYPE_B ? s->next_picture.f->pict_type - AV_PICTURE_TYPE_I : 0,
+ .vop_rounding_type = s->no_rounding,
+ .intra_dc_vlc_thr = mpeg4_get_intra_dc_vlc_thr(ctx),
+ .top_field_first = s->top_field_first,
+ .alternate_vertical_scan_flag = s->alternate_scan,
+ },
+ .vop_fcode_forward = s->f_code,
+ .vop_fcode_backward = s->b_code,
+ .vop_time_increment_resolution = avctx->framerate.num,
+ .num_macroblocks_in_gob = s->mb_width * H263_GOB_HEIGHT(s->height),
+ .num_gobs_in_vop =
+ (s->mb_width * s->mb_height) / (s->mb_width * H263_GOB_HEIGHT(s->height)),
+ .TRB = s->pb_time,
+ .TRD = s->pp_time,
+ };
+