aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLynne <dev@lynne.ee>2023-10-24 06:33:07 +0200
committerLynne <dev@lynne.ee>2023-10-25 20:51:05 +0200
commit9ee4f47c94083b4fe38d4e217a7d65055d3ad53f (patch)
tree8c9db04ddb1e8457e64993ec8240347cb03b59e1
parent3c5bceb751891ae664319410f5dd8943732c15f0 (diff)
downloadffmpeg-9ee4f47c94083b4fe38d4e217a7d65055d3ad53f.tar.gz
vulkan_decode: use coded_width/height instead of the non-coded width and height
Partially fixes https://streams.videolan.org/issues/19938/20000_20180305-15.04.59.ts The is coded as 1920x1080, meant to be rendered at 1440x1080 with cropping, or 1680x1080 before cropping. Currently, the created DPB is 1440x1080, which results in the image being decoded incorrectly, as the decoder overwrites output memory. This commit fixes this.
-rw-r--r--libavcodec/vulkan_decode.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/libavcodec/vulkan_decode.c b/libavcodec/vulkan_decode.c
index e6a0646139..3b9576c0a9 100644
--- a/libavcodec/vulkan_decode.c
+++ b/libavcodec/vulkan_decode.c
@@ -872,10 +872,10 @@ static int vulkan_decode_get_profile(AVCodecContext *avctx, AVBufferRef *frames_
" separate_references" : "");
/* Check if decoding is possible with the given parameters */
- if (avctx->width < caps->minCodedExtent.width ||
- avctx->height < caps->minCodedExtent.height ||
- avctx->width > caps->maxCodedExtent.width ||
- avctx->height > caps->maxCodedExtent.height)
+ if (avctx->coded_width < caps->minCodedExtent.width ||
+ avctx->coded_height < caps->minCodedExtent.height ||
+ avctx->coded_width > caps->maxCodedExtent.width ||
+ avctx->coded_height > caps->maxCodedExtent.height)
return AVERROR(EINVAL);
if (!(avctx->hwaccel_flags & AV_HWACCEL_FLAG_IGNORE_LEVEL) &&
@@ -1027,8 +1027,8 @@ int ff_vk_frame_params(AVCodecContext *avctx, AVBufferRef *hw_frames_ctx)
frames_ctx->user_opaque = prof;
frames_ctx->free = free_profile_data;
- frames_ctx->width = avctx->width;
- frames_ctx->height = avctx->height;
+ frames_ctx->width = avctx->coded_width;
+ frames_ctx->height = avctx->coded_height;
frames_ctx->format = AV_PIX_FMT_VULKAN;
hwfc->format[0] = vkfmt;
@@ -1224,8 +1224,8 @@ int ff_vk_decode_init(AVCodecContext *avctx)
dpb_frames = (AVHWFramesContext *)ctx->dpb_hwfc_ref->data;
dpb_frames->format = s->frames->format;
dpb_frames->sw_format = s->frames->sw_format;
- dpb_frames->width = s->frames->width;
- dpb_frames->height = s->frames->height;
+ dpb_frames->width = avctx->coded_width;
+ dpb_frames->height = avctx->coded_height;
dpb_hwfc = dpb_frames->hwctx;
dpb_hwfc->create_pnext = (void *)ff_vk_find_struct(ctx->s.hwfc->create_pnext,