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

Function vaapi_mpeg2_start_frame

libavcodec/vaapi_mpeg2.c:39–100  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

37}
38
39static int vaapi_mpeg2_start_frame(AVCodecContext *avctx, av_unused const uint8_t *buffer, av_unused uint32_t size)
40{
41 struct MpegEncContext * const s = avctx->priv_data;
42 struct vaapi_context * const vactx = avctx->hwaccel_context;
43 VAPictureParameterBufferMPEG2 *pic_param;
44 VAIQMatrixBufferMPEG2 *iq_matrix;
45 int i;
46
47 dprintf(avctx, "vaapi_mpeg2_start_frame()\n");
48
49 vactx->slice_param_size = sizeof(VASliceParameterBufferMPEG2);
50
51 /* Fill in VAPictureParameterBufferMPEG2 */
52 pic_param = ff_vaapi_alloc_pic_param(vactx, sizeof(VAPictureParameterBufferMPEG2));
53 if (!pic_param)
54 return -1;
55 pic_param->horizontal_size = s->width;
56 pic_param->vertical_size = s->height;
57 pic_param->forward_reference_picture = VA_INVALID_ID;
58 pic_param->backward_reference_picture = VA_INVALID_ID;
59 pic_param->picture_coding_type = s->pict_type;
60 pic_param->f_code = mpeg2_get_f_code(s);
61 pic_param->picture_coding_extension.value = 0; /* reset all bits */
62 pic_param->picture_coding_extension.bits.intra_dc_precision = s->intra_dc_precision;
63 pic_param->picture_coding_extension.bits.picture_structure = s->picture_structure;
64 pic_param->picture_coding_extension.bits.top_field_first = s->top_field_first;
65 pic_param->picture_coding_extension.bits.frame_pred_frame_dct = s->frame_pred_frame_dct;
66 pic_param->picture_coding_extension.bits.concealment_motion_vectors = s->concealment_motion_vectors;
67 pic_param->picture_coding_extension.bits.q_scale_type = s->q_scale_type;
68 pic_param->picture_coding_extension.bits.intra_vlc_format = s->intra_vlc_format;
69 pic_param->picture_coding_extension.bits.alternate_scan = s->alternate_scan;
70 pic_param->picture_coding_extension.bits.repeat_first_field = s->repeat_first_field;
71 pic_param->picture_coding_extension.bits.progressive_frame = s->progressive_frame;
72 pic_param->picture_coding_extension.bits.is_first_field = mpeg2_get_is_frame_start(s);
73
74 switch (s->pict_type) {
75 case FF_B_TYPE:
76 pic_param->backward_reference_picture = ff_vaapi_get_surface_id(&s->next_picture);
77 // fall-through
78 case FF_P_TYPE:
79 pic_param->forward_reference_picture = ff_vaapi_get_surface_id(&s->last_picture);
80 break;
81 }
82
83 /* Fill in VAIQMatrixBufferMPEG2 */
84 iq_matrix = ff_vaapi_alloc_iq_matrix(vactx, sizeof(VAIQMatrixBufferMPEG2));
85 if (!iq_matrix)
86 return -1;
87 iq_matrix->load_intra_quantiser_matrix = 1;
88 iq_matrix->load_non_intra_quantiser_matrix = 1;
89 iq_matrix->load_chroma_intra_quantiser_matrix = 1;
90 iq_matrix->load_chroma_non_intra_quantiser_matrix = 1;
91
92 for (i = 0; i < 64; i++) {
93 int n = s->dsp.idct_permutation[ff_zigzag_direct[i]];
94 iq_matrix->intra_quantiser_matrix[i] = s->intra_matrix[n];
95 iq_matrix->non_intra_quantiser_matrix[i] = s->inter_matrix[n];
96 iq_matrix->chroma_intra_quantiser_matrix[i] = s->chroma_intra_matrix[n];

Callers

nothing calls this directly

Calls 5

ff_vaapi_alloc_pic_paramFunction · 0.85
mpeg2_get_f_codeFunction · 0.85
mpeg2_get_is_frame_startFunction · 0.85
ff_vaapi_get_surface_idFunction · 0.85
ff_vaapi_alloc_iq_matrixFunction · 0.85

Tested by

no test coverage detected