mirror of https://git.ffmpeg.org/ffmpeg.git
hw_base_encode: make recon_frames_ref optional
Vulkan supports some stupidly odd hardware, that unfortunately, most modern GPUs happen to be. The DPB images for encoders may be required to be preallocated all at once, and rather than be individual frames, be layers of a single frame. As the hw_base_encode code is written with the thought that either the driver or the device itself supports sane image allocation, Vulkan does not leave us with this option. So, in the case that the hardware does not support individual frames to be used as DPBs, make the DBP frames context optional, and let the subsystem manage this.
This commit is contained in:
parent
e6019ed075
commit
3de73f1262
|
@ -440,16 +440,18 @@ static int hw_base_encode_send_frame(AVCodecContext *avctx, FFHWBaseEncodeContex
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
pic->recon_image = av_frame_alloc();
|
if (ctx->recon_frames_ref) {
|
||||||
if (!pic->recon_image) {
|
pic->recon_image = av_frame_alloc();
|
||||||
err = AVERROR(ENOMEM);
|
if (!pic->recon_image) {
|
||||||
goto fail;
|
err = AVERROR(ENOMEM);
|
||||||
}
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
err = av_hwframe_get_buffer(ctx->recon_frames_ref, pic->recon_image, 0);
|
err = av_hwframe_get_buffer(ctx->recon_frames_ref, pic->recon_image, 0);
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
err = AVERROR(ENOMEM);
|
err = AVERROR(ENOMEM);
|
||||||
goto fail;
|
goto fail;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pic->priv = av_mallocz(ctx->op->priv_size);
|
pic->priv = av_mallocz(ctx->op->priv_size);
|
||||||
|
|
Loading…
Reference in New Issue