[FFmpeg-devel] [PATCH 1/2] avcodec/d3d12va_decode: check existance before assigning a new index
Xiang, Haihao
haihao.xiang at intel.com
Wed Jan 17 08:23:24 EET 2024
On Do, 2024-01-11 at 14:31 +0800, tong1.wu-at-intel.com at ffmpeg.org wrote:
> From: Tong Wu <tong1.wu at intel.com>
>
> Fixes #10759.
>
> It can happen in H.264, MPEG2, VC1 that the current frame resource
> memory is already in ref_resource. For example, for a interlaced frame,
> the same curr memory is passed twice. For the second time it could possibly
> reference itself. When this happens the curr is already given an index and
> in ref_resources. When the reference frame index is required, we should check
> the existance in the ref_resources first before assigning a new index for it.
>
> Signed-off-by: Tong Wu <tong1.wu at intel.com>
> ---
> libavcodec/d3d12va_decode.c | 14 +++++++-------
> 1 file changed, 7 insertions(+), 7 deletions(-)
>
> diff --git a/libavcodec/d3d12va_decode.c b/libavcodec/d3d12va_decode.c
> index c5c599675e..a6f40236d1 100644
> --- a/libavcodec/d3d12va_decode.c
> +++ b/libavcodec/d3d12va_decode.c
> @@ -62,14 +62,14 @@ unsigned ff_d3d12va_get_surface_index(const AVCodecContext
> *avctx,
> if (!res)
> goto fail;
>
> - if (!curr) {
> - for (i = 0; i < ctx->max_num_ref; i++) {
> - if (ctx->ref_resources[i] && res == ctx->ref_resources[i]) {
> - ctx->used_mask |= 1 << i;
> - return i;
> - }
> + for (i = 0; i < ctx->max_num_ref; i++) {
> + if (ctx->ref_resources[i] && res == ctx->ref_resources[i]) {
> + ctx->used_mask |= 1 << i;
> + return i;
> }
> - } else {
> + }
> +
> + if (curr) {
> for (i = 0; i < ctx->max_num_ref; i++) {
> if (!((ctx->used_mask >> i) & 0x1)) {
> ctx->ref_resources[i] = res;
Patchset LGTM,
BRs
Haihao
More information about the ffmpeg-devel
mailing list