static int vda_old_h264_end_frame(AVCodecContext *avctx) { H264Context *h = avctx->priv_data; VDAContext *vda = avctx->internal->hwaccel_priv_data; struct vda_context *vda_ctx = avctx->hwaccel_context; AVFrame *frame = &h->cur_pic_ptr->f; struct vda_buffer *context; AVBufferRef *buffer; int status; if (!vda_ctx->decoder || !vda->bitstream) return -1; status = vda_sync_decode(vda, vda_ctx); frame->data[3] = (void*)vda_ctx->cv_buffer; if (status) av_log(avctx, AV_LOG_ERROR, "Failed to decode frame (%d)\n", status); if (!vda_ctx->use_ref_buffer || status) return status; context = av_mallocz(sizeof(*context)); buffer = av_buffer_create(NULL, 0, vda_h264_release_buffer, context, 0); if (!context || !buffer) { CVPixelBufferRelease(vda_ctx->cv_buffer); av_free(context); return -1; } context->cv_buffer = vda_ctx->cv_buffer; frame->buf[3] = buffer; return status; }
static int vda_old_h264_end_frame(AVCodecContext *avctx) { H264Context *h = avctx->priv_data; VDAContext *vda = avctx->internal->hwaccel_priv_data; struct vda_context *vda_ctx = avctx->hwaccel_context; AVFrame *frame = h->cur_pic_ptr->f; int status; if (!vda_ctx->decoder || !vda->bitstream) return -1; status = vda_sync_decode(vda, vda_ctx); frame->data[3] = (void*)vda_ctx->cv_buffer; if (status) av_log(avctx, AV_LOG_ERROR, "Failed to decode frame (%d)\n", status); return status; }
static int vda_h264_end_frame(AVCodecContext *avctx) { H264Context *h = avctx->priv_data; struct vda_context *vda_ctx = avctx->hwaccel_context; AVFrame *frame = &h->cur_pic_ptr->f; int status; if (!vda_ctx->decoder || !vda_ctx->priv_bitstream) return -1; if (vda_ctx->use_sync_decoding) { status = vda_sync_decode(vda_ctx); frame->data[3] = (void*)vda_ctx->cv_buffer; } else { status = vda_decoder_decode(vda_ctx, vda_ctx->priv_bitstream, vda_ctx->priv_bitstream_size, frame->reordered_opaque); } if (status) av_log(avctx, AV_LOG_ERROR, "Failed to decode frame (%d)\n", status); return status; }