1
0
Fork 0

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.
This commit is contained in:
Lynne 2023-10-24 06:33:07 +02:00
parent 3c5bceb751
commit 9ee4f47c94
No known key found for this signature in database
GPG Key ID: A2FEA5F03F034464
1 changed files with 8 additions and 8 deletions

View File

@ -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,