History

vaapi_vc1: Convert to use the new VAAPI hwaccel code

Mark Thompson committed 10 years ago

Commit 520fb771 parent 102e13c1 file · +206 −140Browse files

Unified · Split

libavcodec/vaapi_vc1.c+206−140
@@ -20,8 +20,8 @@ · 19 unmodified lines
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 */21 */
22 22
23#include "vaapi_internal.h"
24#include "internal.h"23#include "internal.h"
24#include "vaapi_decode.h"
25#include "vc1.h"25#include "vc1.h"
26#include "vc1data.h"26#include "vc1data.h"
27 27
@@ -148,143 +148,165 @@ static int vaapi_vc1_start_frame(AVCodecContext *avctx, av_unused const uint8_t · 120 unmodified lines
148{148{
149 const VC1Context *v = avctx->priv_data;149 const VC1Context *v = avctx->priv_data;
150 const MpegEncContext *s = &v->s;150 const MpegEncContext *s = &v->s;
151 struct vaapi_context * const vactx = avctx->hwaccel_context;151 VAAPIDecodePicture *pic = s->current_picture_ptr->hwaccel_picture_private;
152 VAPictureParameterBufferVC1 *pic_param;152 VAPictureParameterBufferVC1 pic_param;
153 153 int err;
154 vactx->slice_param_size = sizeof(VASliceParameterBufferVC1);154
155 155 pic->output_surface = ff_vaapi_get_surface_id(s->current_picture_ptr->f);
156 /* Fill in VAPictureParameterBufferVC1 */156
157 pic_param = ff_vaapi_alloc_pic_param(vactx, sizeof(VAPictureParameterBufferVC1));157 pic_param = (VAPictureParameterBufferVC1) {
158 if (!pic_param)158 .forward_reference_picture = VA_INVALID_ID,
159 return -1;159 .backward_reference_picture = VA_INVALID_ID,
160 pic_param->forward_reference_picture = VA_INVALID_ID;160 .inloop_decoded_picture = VA_INVALID_ID,
161 pic_param->backward_reference_picture = VA_INVALID_ID;161 .sequence_fields.bits = {
162 pic_param->inloop_decoded_picture = VA_INVALID_ID;162 .pulldown = v->broadcast,
163 pic_param->sequence_fields.value = 0; /* reset all bits */163 .interlace = v->interlace,
164 pic_param->sequence_fields.bits.pulldown = v->broadcast;164 .tfcntrflag = v->tfcntrflag,
165 pic_param->sequence_fields.bits.interlace = v->interlace;165 .finterpflag = v->finterpflag,
166 pic_param->sequence_fields.bits.tfcntrflag = v->tfcntrflag;166 .psf = v->psf,
167 pic_param->sequence_fields.bits.finterpflag = v->finterpflag;167 .multires = v->multires,
168 pic_param->sequence_fields.bits.psf = v->psf;168 .overlap = v->overlap,
169 pic_param->sequence_fields.bits.multires = v->multires;169 .syncmarker = v->resync_marker,
170 pic_param->sequence_fields.bits.overlap = v->overlap;170 .rangered = v->rangered,
171 pic_param->sequence_fields.bits.syncmarker = v->resync_marker;171 .max_b_frames = s->avctx->max_b_frames,
172 pic_param->sequence_fields.bits.rangered = v->rangered;172 .profile = v->profile,
173 pic_param->sequence_fields.bits.max_b_frames = s->avctx->max_b_frames;173 },
174 pic_param->sequence_fields.bits.profile = v->profile;174 .coded_width = s->avctx->coded_width,
175 pic_param->coded_width = s->avctx->coded_width;175 .coded_height = s->avctx->coded_height,
176 pic_param->coded_height = s->avctx->coded_height;176 .entrypoint_fields.bits = {
177 pic_param->entrypoint_fields.value = 0; /* reset all bits */177 .broken_link = v->broken_link,
178 pic_param->entrypoint_fields.bits.broken_link = v->broken_link;178 .closed_entry = v->closed_entry,
179 pic_param->entrypoint_fields.bits.closed_entry = v->closed_entry;179 .panscan_flag = v->panscanflag,
180 pic_param->entrypoint_fields.bits.panscan_flag = v->panscanflag;180 .loopfilter = s->loop_filter,
181 pic_param->entrypoint_fields.bits.loopfilter = s->loop_filter;181 },
182 pic_param->conditional_overlap_flag = v->condover;182 .conditional_overlap_flag = v->condover,
183 pic_param->fast_uvmc_flag = v->fastuvmc;183 .fast_uvmc_flag = v->fastuvmc,
184 pic_param->range_mapping_fields.value = 0; /* reset all bits */184 .range_mapping_fields.bits = {
185 pic_param->range_mapping_fields.bits.luma_flag = v->range_mapy_flag;185 .luma_flag = v->range_mapy_flag,
186 pic_param->range_mapping_fields.bits.luma = v->range_mapy;186 .luma = v->range_mapy,
187 pic_param->range_mapping_fields.bits.chroma_flag = v->range_mapuv_flag;187 .chroma_flag = v->range_mapuv_flag,
188 pic_param->range_mapping_fields.bits.chroma = v->range_mapuv;188 .chroma = v->range_mapuv,
189 pic_param->b_picture_fraction = v->bfraction_lut_index;189 },
190 pic_param->cbp_table = v->cbpcy_vlc ? v->cbpcy_vlc - ff_vc1_cbpcy_p_vlc : 0;190 .b_picture_fraction = v->bfraction_lut_index,
191 pic_param->mb_mode_table = 0; /* XXX: interlaced frame */191 .cbp_table = v->cbpcy_vlc ? v->cbpcy_vlc - ff_vc1_cbpcy_p_vlc : 0,
192 pic_param->range_reduction_frame = v->rangeredfrm;192 .mb_mode_table = 0, /* XXX: interlaced frame */
193 pic_param->rounding_control = v->rnd;193 .range_reduction_frame = v->rangeredfrm,
194 pic_param->post_processing = v->postproc;194 .rounding_control = v->rnd,
195 pic_param->picture_resolution_index = v->respic;195 .post_processing = v->postproc,
196 pic_param->luma_scale = v->lumscale;196 .picture_resolution_index = v->respic,
197 pic_param->luma_shift = v->lumshift;197 .luma_scale = v->lumscale,
198 pic_param->picture_fields.value = 0; /* reset all bits */198 .luma_shift = v->lumshift,
199 pic_param->picture_fields.bits.picture_type = vc1_get_PTYPE(v);199 .picture_fields.bits = {
200 pic_param->picture_fields.bits.frame_coding_mode = v->fcm;200 .picture_type = vc1_get_PTYPE(v),
201 pic_param->picture_fields.bits.top_field_first = v->tff;201 .frame_coding_mode = v->fcm,
202 pic_param->picture_fields.bits.is_first_field = v->fcm == 0; /* XXX: interlaced frame */202 .top_field_first = v->tff,
203 pic_param->picture_fields.bits.intensity_compensation = v->mv_mode == MV_PMODE_INTENSITY_COMP;203 .is_first_field = v->fcm == 0, /* XXX: interlaced frame */
204 pic_param->raw_coding.value = 0; /* reset all bits */204 .intensity_compensation = v->mv_mode == MV_PMODE_INTENSITY_COMP,
205 pic_param->raw_coding.flags.mv_type_mb = v->mv_type_is_raw;205 },
206 pic_param->raw_coding.flags.direct_mb = v->dmb_is_raw;206 .raw_coding.flags = {
207 pic_param->raw_coding.flags.skip_mb = v->skip_is_raw;207 .mv_type_mb = v->mv_type_is_raw,
208 pic_param->raw_coding.flags.field_tx = 0; /* XXX: interlaced frame */208 .direct_mb = v->dmb_is_raw,
209 pic_param->raw_coding.flags.forward_mb = 0; /* XXX: interlaced frame */209 .skip_mb = v->skip_is_raw,
210 pic_param->raw_coding.flags.ac_pred = v->acpred_is_raw;210 .field_tx = 0, /* XXX: interlaced frame */
211 pic_param->raw_coding.flags.overflags = v->overflg_is_raw;211 .forward_mb = 0, /* XXX: interlaced frame */
212 pic_param->bitplane_present.value = 0; /* reset all bits */212 .ac_pred = v->acpred_is_raw,
213 pic_param->bitplane_present.flags.bp_mv_type_mb = vc1_has_MVTYPEMB_bitplane(v);213 .overflags = v->overflg_is_raw,
214 pic_param->bitplane_present.flags.bp_direct_mb = vc1_has_DIRECTMB_bitplane(v);214 },
215 pic_param->bitplane_present.flags.bp_skip_mb = vc1_has_SKIPMB_bitplane(v);215 .bitplane_present.flags = {
216 pic_param->bitplane_present.flags.bp_field_tx = 0; /* XXX: interlaced frame */216 .bp_mv_type_mb = vc1_has_MVTYPEMB_bitplane(v),
217 pic_param->bitplane_present.flags.bp_forward_mb = 0; /* XXX: interlaced frame */217 .bp_direct_mb = vc1_has_DIRECTMB_bitplane(v),
218 pic_param->bitplane_present.flags.bp_ac_pred = vc1_has_ACPRED_bitplane(v);218 .bp_skip_mb = vc1_has_SKIPMB_bitplane(v),
219 pic_param->bitplane_present.flags.bp_overflags = vc1_has_OVERFLAGS_bitplane(v);219 .bp_field_tx = 0, /* XXX: interlaced frame */
220 pic_param->reference_fields.value = 0; /* reset all bits */220 .bp_forward_mb = 0, /* XXX: interlaced frame */
221 pic_param->reference_fields.bits.reference_distance_flag = v->refdist_flag;221 .bp_ac_pred = vc1_has_ACPRED_bitplane(v),
222 pic_param->reference_fields.bits.reference_distance = 0; /* XXX: interlaced frame */222 .bp_overflags = vc1_has_OVERFLAGS_bitplane(v),
223 pic_param->reference_fields.bits.num_reference_pictures = 0; /* XXX: interlaced frame */223 },
224 pic_param->reference_fields.bits.reference_field_pic_indicator = 0; /* XXX: interlaced frame */224 .reference_fields.bits = {
225 pic_param->mv_fields.value = 0; /* reset all bits */225 .reference_distance_flag = v->refdist_flag,
226 pic_param->mv_fields.bits.mv_mode = vc1_get_MVMODE(v);226 .reference_distance = 0, /* XXX: interlaced frame */
227 pic_param->mv_fields.bits.mv_mode2 = vc1_get_MVMODE2(v);227 .num_reference_pictures = 0, /* XXX: interlaced frame */
228 pic_param->mv_fields.bits.mv_table = s->mv_table_index;228 .reference_field_pic_indicator = 0, /* XXX: interlaced frame */
229 pic_param->mv_fields.bits.two_mv_block_pattern_table = 0; /* XXX: interlaced frame */229 },
230 pic_param->mv_fields.bits.four_mv_switch = 0; /* XXX: interlaced frame */230 .mv_fields.bits = {
231 pic_param->mv_fields.bits.four_mv_block_pattern_table = 0; /* XXX: interlaced frame */231 .mv_mode = vc1_get_MVMODE(v),
232 pic_param->mv_fields.bits.extended_mv_flag = v->extended_mv;232 .mv_mode2 = vc1_get_MVMODE2(v),
233 pic_param->mv_fields.bits.extended_mv_range = v->mvrange;233 .mv_table = s->mv_table_index,
234 pic_param->mv_fields.bits.extended_dmv_flag = v->extended_dmv;234 .two_mv_block_pattern_table = 0, /* XXX: interlaced frame */
235 pic_param->mv_fields.bits.extended_dmv_range = 0; /* XXX: interlaced frame */235 .four_mv_switch = 0, /* XXX: interlaced frame */
236 pic_param->pic_quantizer_fields.value = 0; /* reset all bits */236 .four_mv_block_pattern_table = 0, /* XXX: interlaced frame */
237 pic_param->pic_quantizer_fields.bits.dquant = v->dquant;237 .extended_mv_flag = v->extended_mv,
238 pic_param->pic_quantizer_fields.bits.quantizer = v->quantizer_mode;238 .extended_mv_range = v->mvrange,
239 pic_param->pic_quantizer_fields.bits.half_qp = v->halfpq;239 .extended_dmv_flag = v->extended_dmv,
240 pic_param->pic_quantizer_fields.bits.pic_quantizer_scale = v->pq;240 .extended_dmv_range = 0, /* XXX: interlaced frame */
241 pic_param->pic_quantizer_fields.bits.pic_quantizer_type = v->pquantizer;241 },
242 pic_param->pic_quantizer_fields.bits.dq_frame = v->dquantfrm;242 .pic_quantizer_fields.bits = {
243 pic_param->pic_quantizer_fields.bits.dq_profile = v->dqprofile;243 .dquant = v->dquant,
244 pic_param->pic_quantizer_fields.bits.dq_sb_edge = v->dqprofile == DQPROFILE_SINGLE_EDGE ? v->dqsbedge : 0;244 .quantizer = v->quantizer_mode,
245 pic_param->pic_quantizer_fields.bits.dq_db_edge = v->dqprofile == DQPROFILE_DOUBLE_EDGES ? v->dqsbedge : 0;245 .half_qp = v->halfpq,
246 pic_param->pic_quantizer_fields.bits.dq_binary_level = v->dqbilevel;246 .pic_quantizer_scale = v->pq,
247 pic_param->pic_quantizer_fields.bits.alt_pic_quantizer = v->altpq;247 .pic_quantizer_type = v->pquantizer,
248 pic_param->transform_fields.value = 0; /* reset all bits */248 .dq_frame = v->dquantfrm,
249 pic_param->transform_fields.bits.variable_sized_transform_flag = v->vstransform;249 .dq_profile = v->dqprofile,
250 pic_param->transform_fields.bits.mb_level_transform_type_flag = v->ttmbf;250 .dq_sb_edge = v->dqprofile == DQPROFILE_SINGLE_EDGE ? v->dqsbedge : 0,
251 pic_param->transform_fields.bits.frame_level_transform_type = vc1_get_TTFRM(v);251 .dq_db_edge = v->dqprofile == DQPROFILE_DOUBLE_EDGES ? v->dqsbedge : 0,
252 pic_param->transform_fields.bits.transform_ac_codingset_idx1 = v->c_ac_table_index;252 .dq_binary_level = v->dqbilevel,
253 pic_param->transform_fields.bits.transform_ac_codingset_idx2 = v->y_ac_table_index;253 .alt_pic_quantizer = v->altpq,
254 pic_param->transform_fields.bits.intra_transform_dc_table = v->s.dc_table_index;254 },
255 .transform_fields.bits = {
256 .variable_sized_transform_flag = v->vstransform,
257 .mb_level_transform_type_flag = v->ttmbf,
258 .frame_level_transform_type = vc1_get_TTFRM(v),
259 .transform_ac_codingset_idx1 = v->c_ac_table_index,
260 .transform_ac_codingset_idx2 = v->y_ac_table_index,
261 .intra_transform_dc_table = v->s.dc_table_index,
262 },
263 };
255 264
256 switch (s->pict_type) {265 switch (s->pict_type) {
257 case AV_PICTURE_TYPE_B:266 case AV_PICTURE_TYPE_B:
258 pic_param->backward_reference_picture = ff_vaapi_get_surface_id(s->next_picture.f);267 pic_param.backward_reference_picture = ff_vaapi_get_surface_id(s->next_picture.f);
259 // fall-through268 // fall-through
260 case AV_PICTURE_TYPE_P:269 case AV_PICTURE_TYPE_P:
261 pic_param->forward_reference_picture = ff_vaapi_get_surface_id(s->last_picture.f);270 pic_param.forward_reference_picture = ff_vaapi_get_surface_id(s->last_picture.f);
262 break;271 break;
263 }272 }
264 273
265 if (pic_param->bitplane_present.value) {274 err = ff_vaapi_decode_make_param_buffer(avctx, pic,
275 VAPictureParameterBufferType,
276 &pic_param, sizeof(pic_param));
277 if (err)
278 goto fail;
279
280 if (pic_param.bitplane_present.value) {
266 uint8_t *bitplane;281 uint8_t *bitplane;
267 const uint8_t *ff_bp[3];282 const uint8_t *ff_bp[3];
268 int x, y, n;283 int x, y, n;
284 size_t size = (s->mb_width * s->mb_height + 1) / 2;
285
286 bitplane = av_mallocz(size);
287 if (!bitplane) {
288 err = AVERROR(ENOMEM);
289 goto fail;
290 }
269 291
270 switch (s->pict_type) {292 switch (s->pict_type) {
271 case AV_PICTURE_TYPE_P:293 case AV_PICTURE_TYPE_P:
272 ff_bp[0] = pic_param->bitplane_present.flags.bp_direct_mb ? v->direct_mb_plane : NULL;294 ff_bp[0] = pic_param.bitplane_present.flags.bp_direct_mb ? v->direct_mb_plane : NULL;
273 ff_bp[1] = pic_param->bitplane_present.flags.bp_skip_mb ? s->mbskip_table : NULL;295 ff_bp[1] = pic_param.bitplane_present.flags.bp_skip_mb ? s->mbskip_table : NULL;
274 ff_bp[2] = pic_param->bitplane_present.flags.bp_mv_type_mb ? v->mv_type_mb_plane : NULL;296 ff_bp[2] = pic_param.bitplane_present.flags.bp_mv_type_mb ? v->mv_type_mb_plane : NULL;
275 break;297 break;
276 case AV_PICTURE_TYPE_B:298 case AV_PICTURE_TYPE_B:
277 if (!v->bi_type) {299 if (!v->bi_type) {
278 ff_bp[0] = pic_param->bitplane_present.flags.bp_direct_mb ? v->direct_mb_plane : NULL;300 ff_bp[0] = pic_param.bitplane_present.flags.bp_direct_mb ? v->direct_mb_plane : NULL;
279 ff_bp[1] = pic_param->bitplane_present.flags.bp_skip_mb ? s->mbskip_table : NULL;301 ff_bp[1] = pic_param.bitplane_present.flags.bp_skip_mb ? s->mbskip_table : NULL;
280 ff_bp[2] = NULL; /* XXX: interlaced frame (FORWARD plane) */302 ff_bp[2] = NULL; /* XXX: interlaced frame (FORWARD plane) */
281 break;303 break;
282 }304 }
283 /* fall-through (BI-type) */305 /* fall-through (BI-type) */
284 case AV_PICTURE_TYPE_I:306 case AV_PICTURE_TYPE_I:
285 ff_bp[0] = NULL; /* XXX: interlaced frame (FIELDTX plane) */307 ff_bp[0] = NULL; /* XXX: interlaced frame (FIELDTX plane) */
286 ff_bp[1] = pic_param->bitplane_present.flags.bp_ac_pred ? v->acpred_plane : NULL;308 ff_bp[1] = pic_param.bitplane_present.flags.bp_ac_pred ? v->acpred_plane : NULL;
287 ff_bp[2] = pic_param->bitplane_present.flags.bp_overflags ? v->over_flags_plane : NULL;309 ff_bp[2] = pic_param.bitplane_present.flags.bp_overflags ? v->over_flags_plane : NULL;
288 break;310 break;
289 default:311 default:
290 ff_bp[0] = NULL;312 ff_bp[0] = NULL;
@@ -293,25 +315,51 @@ static int vaapi_vc1_start_frame(AVCodecContext *avctx, av_unused const uint8_t · 2 unmodified lines
293 break;315 break;
294 }316 }
295 317
296 bitplane = ff_vaapi_alloc_bitplane(vactx, (s->mb_width * s->mb_height + 1) / 2);
297 if (!bitplane)
298 return -1;
299
300 n = 0;318 n = 0;
301 for (y = 0; y < s->mb_height; y++)319 for (y = 0; y < s->mb_height; y++)
302 for (x = 0; x < s->mb_width; x++, n++)320 for (x = 0; x < s->mb_width; x++, n++)
303 vc1_pack_bitplanes(bitplane, n, ff_bp, x, y, s->mb_stride);321 vc1_pack_bitplanes(bitplane, n, ff_bp, x, y, s->mb_stride);
304 if (n & 1) /* move last nibble to the high order */322 if (n & 1) /* move last nibble to the high order */
305 bitplane[n/2] <<= 4;323 bitplane[n/2] <<= 4;
324
325 err = ff_vaapi_decode_make_param_buffer(avctx, pic,
326 VABitPlaneBufferType,
327 bitplane, size);
328 av_free(bitplane);
329 if (err)
330 goto fail;
306 }331 }
307 return 0;332 return 0;
333
334fail:
335 ff_vaapi_decode_cancel(avctx, pic);
336 return err;
337}
338
339static int vaapi_vc1_end_frame(AVCodecContext *avctx)
340{
341 VC1Context *v = avctx->priv_data;
342 MpegEncContext *s = &v->s;
343 VAAPIDecodePicture *pic = s->current_picture_ptr->hwaccel_picture_private;
344 int ret;
345
346 ret = ff_vaapi_decode_issue(avctx, pic);
347 if (ret < 0)
348 goto fail;
349
350 ff_mpeg_draw_horiz_band(s, 0, s->avctx->height);
351
352fail:
353 return ret;
308}354}
309 355
310static int vaapi_vc1_decode_slice(AVCodecContext *avctx, const uint8_t *buffer, uint32_t size)356static int vaapi_vc1_decode_slice(AVCodecContext *avctx, const uint8_t *buffer, uint32_t size)
311{357{
312 const VC1Context *v = avctx->priv_data;358 const VC1Context *v = avctx->priv_data;
313 const MpegEncContext *s = &v->s;359 const MpegEncContext *s = &v->s;
314 VASliceParameterBufferVC1 *slice_param;360 VAAPIDecodePicture *pic = s->current_picture_ptr->hwaccel_picture_private;
361 VASliceParameterBufferVC1 slice_param;
362 int err;
315 363
316 /* Current bit buffer is beyond any marker for VC-1, so skip it */364 /* Current bit buffer is beyond any marker for VC-1, so skip it */
317 if (avctx->codec_id == AV_CODEC_ID_VC1 && IS_MARKER(AV_RB32(buffer))) {365 if (avctx->codec_id == AV_CODEC_ID_VC1 && IS_MARKER(AV_RB32(buffer))) {
@@ -319,33 +367,51 @@ static int vaapi_vc1_decode_slice(AVCodecContext *avctx, const uint8_t *buffer, · 1 unmodified line
319 size -= 4;367 size -= 4;
320 }368 }
321 369
322 /* Fill in VASliceParameterBufferVC1 */370 slice_param = (VASliceParameterBufferVC1) {
323 slice_param = (VASliceParameterBufferVC1 *)ff_vaapi_alloc_slice(avctx->hwaccel_context, buffer, size);371 .slice_data_size = size,
324 if (!slice_param)372 .slice_data_offset = 0,
325 return -1;373 .slice_data_flag = VA_SLICE_DATA_FLAG_ALL,
326 slice_param->macroblock_offset = get_bits_count(&s->gb);374 .macroblock_offset = get_bits_count(&s->gb),
327 slice_param->slice_vertical_position = s->mb_y;375 .slice_vertical_position = s->mb_y,
376 };
377
378 err = ff_vaapi_decode_make_slice_buffer(avctx, pic,
379 &slice_param, sizeof(slice_param),
380 buffer, size);
381 if (err < 0) {
382 ff_vaapi_decode_cancel(avctx, pic);
383 return err;
384 }
385
328 return 0;386 return 0;
329}387}
330 388
331#if CONFIG_WMV3_VAAPI_HWACCEL389#if CONFIG_WMV3_VAAPI_HWACCEL
332AVHWAccel ff_wmv3_vaapi_hwaccel = {390AVHWAccel ff_wmv3_vaapi_hwaccel = {
333 .name = "wmv3_vaapi",391 .name = "wmv3_vaapi",
334 .type = AVMEDIA_TYPE_VIDEO,392 .type = AVMEDIA_TYPE_VIDEO,
335 .id = AV_CODEC_ID_WMV3,393 .id = AV_CODEC_ID_WMV3,
336 .pix_fmt = AV_PIX_FMT_VAAPI,394 .pix_fmt = AV_PIX_FMT_VAAPI,
337 .start_frame = vaapi_vc1_start_frame,395 .start_frame = &vaapi_vc1_start_frame,
338 .end_frame = ff_vaapi_mpeg_end_frame,396 .end_frame = &vaapi_vc1_end_frame,
339 .decode_slice = vaapi_vc1_decode_slice,397 .decode_slice = &vaapi_vc1_decode_slice,
398 .frame_priv_data_size = sizeof(VAAPIDecodePicture),
399 .init = &ff_vaapi_decode_init,
400 .uninit = &ff_vaapi_decode_uninit,
401 .priv_data_size = sizeof(VAAPIDecodeContext),
340};402};
341#endif403#endif
342 404
343AVHWAccel ff_vc1_vaapi_hwaccel = {405AVHWAccel ff_vc1_vaapi_hwaccel = {
344 .name = "vc1_vaapi",406 .name = "vc1_vaapi",
345 .type = AVMEDIA_TYPE_VIDEO,407 .type = AVMEDIA_TYPE_VIDEO,
346 .id = AV_CODEC_ID_VC1,408 .id = AV_CODEC_ID_VC1,
347 .pix_fmt = AV_PIX_FMT_VAAPI,409 .pix_fmt = AV_PIX_FMT_VAAPI,
348 .start_frame = vaapi_vc1_start_frame,410 .start_frame = &vaapi_vc1_start_frame,
349 .end_frame = ff_vaapi_mpeg_end_frame,411 .end_frame = &vaapi_vc1_end_frame,
350 .decode_slice = vaapi_vc1_decode_slice,412 .decode_slice = &vaapi_vc1_decode_slice,
413 .frame_priv_data_size = sizeof(VAAPIDecodePicture),
414 .init = &ff_vaapi_decode_init,
415 .uninit = &ff_vaapi_decode_uninit,
416 .priv_data_size = sizeof(VAAPIDecodeContext),
351};417};

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t