static int vaapi_vp9_end_frame(AVCodecContext *avctx) { FFVAContext * const vactx = ff_vaapi_get_context(avctx); const VP9SharedContext *h = avctx->priv_data; int ret; ret = ff_vaapi_commit_slices(vactx); if (ret < 0) goto finish; ret = ff_vaapi_render_picture(vactx, ff_vaapi_get_surface_id(h->frames[CUR_FRAME].tf.f)); if (ret < 0) goto finish; finish: ff_vaapi_common_end_frame(avctx); return ret; }
/** End a hardware decoding based frame. */ static int vaapi_h264_end_frame(AVCodecContext *avctx) { struct vaapi_context * const vactx = avctx->hwaccel_context; H264Context * const h = avctx->priv_data; int ret; av_dlog(avctx, "vaapi_h264_end_frame()\n"); ret = ff_vaapi_commit_slices(vactx); if (ret < 0) goto finish; ret = ff_vaapi_render_picture(vactx, ff_vaapi_get_surface_id(h->cur_pic_ptr)); if (ret < 0) goto finish; ff_h264_draw_horiz_band(h, 0, h->avctx->height); finish: ff_vaapi_common_end_frame(avctx); return ret; }
int ff_vaapi_mpeg_end_frame(AVCodecContext *avctx) { struct vaapi_context * const vactx = avctx->hwaccel_context; MpegEncContext *s = avctx->priv_data; int ret; ret = ff_vaapi_commit_slices(vactx); if (ret < 0) goto finish; ret = ff_vaapi_render_picture(vactx, ff_vaapi_get_surface_id(s->current_picture_ptr)); if (ret < 0) goto finish; ff_mpeg_draw_horiz_band(s, 0, s->avctx->height); finish: ff_vaapi_common_end_frame(avctx); return ret; }
/** End a hardware decoding based frame. */ static int vaapi_h264_end_frame(AVCodecContext *avctx) { FFVAContext * const vactx = ff_vaapi_get_context(avctx); H264Context * const h = avctx->priv_data; H264SliceContext *sl = &h->slice_ctx[0]; int ret; ret = ff_vaapi_commit_slices(vactx); if (ret < 0) goto finish; ret = ff_vaapi_render_picture(vactx, ff_vaapi_get_surface_id(h->cur_pic_ptr->f)); if (ret < 0) goto finish; ff_h264_draw_horiz_band(h, sl, 0, h->avctx->height); finish: ff_vaapi_common_end_frame(avctx); return ret; }
/** End a hardware decoding based frame. */ static int vaapi_hevc_end_frame(AVCodecContext *avctx) { FFVAContext * const vactx = ff_vaapi_get_context(avctx); HEVCContext * const h = avctx->priv_data; vaapi_hevc_frame_data *frame_data = h->ref->hwaccel_picture_private; int ret; ff_dlog(avctx, "vaapi_hevc_end_frame()\n"); frame_data->last_slice_param->LongSliceFlags.fields.LastSliceOfPic = 1; ret = ff_vaapi_commit_slices(vactx); if (ret < 0) goto finish; ret = ff_vaapi_render_picture(vactx, ff_vaapi_get_surface_id(h->ref->frame)); if (ret < 0) goto finish; finish: ff_vaapi_common_end_frame(avctx); return ret; }