MCPcopy Create free account
hub / github.com/FFmpeg/FFmpeg / vaapi_mpeg4_start_frame

Function vaapi_mpeg4_start_frame

libavcodec/vaapi_mpeg4.c:41–115  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

39}
40
41static int vaapi_mpeg4_start_frame(AVCodecContext *avctx, av_unused const uint8_t *buffer, av_unused uint32_t size)
42{
43 MpegEncContext * const s = avctx->priv_data;
44 struct vaapi_context * const vactx = avctx->hwaccel_context;
45 VAPictureParameterBufferMPEG4 *pic_param;
46 VAIQMatrixBufferMPEG4 *iq_matrix;
47 int i;
48
49 dprintf(avctx, "vaapi_mpeg4_start_frame()\n");
50
51 vactx->slice_param_size = sizeof(VASliceParameterBufferMPEG4);
52
53 /* Fill in VAPictureParameterBufferMPEG4 */
54 pic_param = ff_vaapi_alloc_pic_param(vactx, sizeof(VAPictureParameterBufferMPEG4));
55 if (!pic_param)
56 return -1;
57 pic_param->vop_width = s->width;
58 pic_param->vop_height = s->height;
59 pic_param->forward_reference_picture = VA_INVALID_ID;
60 pic_param->backward_reference_picture = VA_INVALID_ID;
61 pic_param->vol_fields.value = 0; /* reset all bits */
62 pic_param->vol_fields.bits.short_video_header = avctx->codec->id == CODEC_ID_H263;
63 pic_param->vol_fields.bits.chroma_format = CHROMA_420;
64 pic_param->vol_fields.bits.interlaced = !s->progressive_sequence;
65 pic_param->vol_fields.bits.obmc_disable = 1;
66 pic_param->vol_fields.bits.sprite_enable = s->vol_sprite_usage;
67 pic_param->vol_fields.bits.sprite_warping_accuracy = s->sprite_warping_accuracy;
68 pic_param->vol_fields.bits.quant_type = s->mpeg_quant;
69 pic_param->vol_fields.bits.quarter_sample = s->quarter_sample;
70 pic_param->vol_fields.bits.data_partitioned = s->data_partitioning;
71 pic_param->vol_fields.bits.reversible_vlc = s->rvlc;
72 pic_param->vol_fields.bits.resync_marker_disable = !s->resync_marker;
73 pic_param->no_of_sprite_warping_points = s->num_sprite_warping_points;
74 for (i = 0; i < s->num_sprite_warping_points && i < 3; i++) {
75 pic_param->sprite_trajectory_du[i] = s->sprite_traj[i][0];
76 pic_param->sprite_trajectory_dv[i] = s->sprite_traj[i][1];
77 }
78 pic_param->quant_precision = s->quant_precision;
79 pic_param->vop_fields.value = 0; /* reset all bits */
80 pic_param->vop_fields.bits.vop_coding_type = s->pict_type - FF_I_TYPE;
81 pic_param->vop_fields.bits.backward_reference_vop_coding_type = s->pict_type == FF_B_TYPE ? s->next_picture.pict_type - FF_I_TYPE : 0;
82 pic_param->vop_fields.bits.vop_rounding_type = s->no_rounding;
83 pic_param->vop_fields.bits.intra_dc_vlc_thr = mpeg4_get_intra_dc_vlc_thr(s);
84 pic_param->vop_fields.bits.top_field_first = s->top_field_first;
85 pic_param->vop_fields.bits.alternate_vertical_scan_flag = s->alternate_scan;
86 pic_param->vop_fcode_forward = s->f_code;
87 pic_param->vop_fcode_backward = s->b_code;
88 pic_param->vop_time_increment_resolution = avctx->time_base.den;
89 pic_param->num_macroblocks_in_gob = s->mb_width * ff_h263_get_gob_height(s);
90 pic_param->num_gobs_in_vop = (s->mb_width * s->mb_height) / pic_param->num_macroblocks_in_gob;
91 pic_param->TRB = s->pb_time;
92 pic_param->TRD = s->pp_time;
93
94 if (s->pict_type == FF_B_TYPE)
95 pic_param->backward_reference_picture = ff_vaapi_get_surface_id(&s->next_picture);
96 if (s->pict_type != FF_I_TYPE)
97 pic_param->forward_reference_picture = ff_vaapi_get_surface_id(&s->last_picture);
98

Callers

nothing calls this directly

Calls 5

ff_vaapi_alloc_pic_paramFunction · 0.85
ff_h263_get_gob_heightFunction · 0.85
ff_vaapi_get_surface_idFunction · 0.85
ff_vaapi_alloc_iq_matrixFunction · 0.85

Tested by

no test coverage detected