From patchwork Sun May 5 16:36:41 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Rosca X-Patchwork-Id: 48541 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:e68f:b0:1af:836d:81b3 with SMTP id mz15csp959723pzb; Sun, 5 May 2024 09:37:52 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXxdK7gVlNPKmyYlVFXKFSRQSl+boFBMsK2AliAzVY2vbLUdyN23asMzgx8+0z6bUP67fS49PNtnAFIbvsWalgBQfYYFdgiR1WQNA== X-Google-Smtp-Source: AGHT+IF0Jh2i5PkvAE2/WpF1qKqZmrU36C3ahNrmsVrrBf868RuVuo2kh7fHnZ4iWvDsoB/F4KDk X-Received: by 2002:a2e:9c87:0:b0:2dd:374d:724e with SMTP id x7-20020a2e9c87000000b002dd374d724emr5065844lji.1.1714927072216; Sun, 05 May 2024 09:37:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1714927072; cv=none; d=google.com; s=arc-20160816; b=0mPziqvh0JWSOaNYo1UoiANPgP6Cq7jfVRmqrRxPwUOnGn0rFPhIC2anAFuKv9YQko rKeirIRWwKA+KoQrmy0DJevj8vfOZScMWziEeLUdZ2h5/Ra/fz7W5ufRnNigxVrNKfdC 98wziunJ4KMopOgkgVo77IVz0ffYtdSEq8F106W3DVxZWa6iXqyyH7sEkrwqtQ1UqCKs Z0PaINUWm9ercleJzHru2Ulap8C3I244ClrJH6hmer3PoSQWDWbDV+XP4A5Ey7ehda6r UH8fBMp9URgzpGxLM6RDK3H27XwRwBCi7CFHkddSDiK0E2RBv7nOuKTQcOxucMAu+AoV 1mHQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:message-id:date:to:from :dkim-signature:delivered-to; bh=5OPbAIThhdmgBSxJWa43T1WHzjsZGnSm5NiSHXlFDZM=; fh=mbb85L8FZ404unHdLI+iF4ZFmTMGr6nZHIcfO/oKEvw=; b=JNCZsOh7rMpale02S4u4HcHfdxh8V4QuAbW1lUzCcgUW13bQgVJcQRMaPrt5lE1Onx QhgJfdOpM6lZQfCan3ZlQS5EMZN4HU2GyZvf0MXTvwRJMVpfyMVPuu5kvtCxM4VVvOVV he2NXbPIZ0asOoXHVeCaD8ItlEfDzbBn40PcpwQhBI77qxJ7iu9nccmUY18PB1wwT4Qo 0AoMjTiECshWlDzAUKnoTR+f6zodFQec2rPG82K0/N6ZB7JZP+IcAJlJJ12Fr+SLUdTQ bNGS7ymYz2eF7gZueg/m2eocCnnRLhDgWT532FEam+b+9VpFTSKort3cTD0MNY4Rsur/ NoiA==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=UEO+A5hG; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 9-20020a05651c008900b002e1eaf1bceesi1439535ljq.545.2024.05.05.09.37.51; Sun, 05 May 2024 09:37:52 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=UEO+A5hG; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id EDF0868D5A2; Sun, 5 May 2024 19:37:46 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ej1-f54.google.com (mail-ej1-f54.google.com [209.85.218.54]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E2F3C68CDAC for ; Sun, 5 May 2024 19:37:39 +0300 (EEST) Received: by mail-ej1-f54.google.com with SMTP id a640c23a62f3a-a599af16934so257072366b.1 for ; Sun, 05 May 2024 09:37:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1714927059; x=1715531859; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=nalY5o2WrAW2j2lxbuFlI5hmQk4rSCUQUQpGE38JN84=; b=UEO+A5hGgthY3if0sjHtDKUVBwO3oFNdGvsvAqsMJJ5Iuok8tYe5cgc6Rh4qso+YML qWej7mwe8td0Ui8DpKvpf1XYIzqV+PuC30EUNd7pOUnmhJh/vW4pUs9T+CsjxlBgYjHe VbuZ+1gogJ65+i+ur3cXjkmdI5MFl83js4Wc1kTHVav9p1mKqH4rSUMLUIdAswEHwsdp eHeSOFUJd5rhoKHflTRMefyAgn7mGAg0s6XJYDx69MevbHLjGeVbf4k5AvUCdww8cVBb 5D9cIehh8djmTwGMuRAw1Ny3YTs5ICKPZnqpKsIFa85DGUTFbx1oHI44K4o/KJqI4/Tl 7aIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714927059; x=1715531859; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=nalY5o2WrAW2j2lxbuFlI5hmQk4rSCUQUQpGE38JN84=; b=ZW07uZ6MqVpUQwuKAZMx0vvBHNyQd+Xb1VVh+EFg1w/GY7PlRuCKtDeZn91BYnus+T 9y1RWRkRHMzigwTM0zZRcAz+E4uGj7Rsxz2UVjvEVXBy6BwUAgCCujxHd5WXDvSVefxS f0ZCQkBwE2bIfXU2XTWxPear9TCj6VNSxbXk/1GWk8qE4HHsC49VznbHn4k6IodntNZL xGBkMIB5jq0m5BbBAmQYldPKSNWPRRRxZJk5h3Vhmd5anTh3825+Nf5i057EVmu2lz17 I5yZPePgRRFc1KACLVPQcjQJSj5OSyHhxOVG/OEKHijmi00Gj38HBv9P7PBVBKmBSL11 U4HA== X-Gm-Message-State: AOJu0YywtC7/F8dejKXiKDP7iUAhb5/36gOTHhM9w+GSqpy84MEuwoCI pGm7wYdbMEUB61KhBHJEED3P73qY1HTYfVOEgkoR5ZzQxEiqPxO/+eXz3g== X-Received: by 2002:a17:906:16cf:b0:a59:c3d0:5502 with SMTP id t15-20020a17090616cf00b00a59c3d05502mr1262450ejd.17.1714927058845; Sun, 05 May 2024 09:37:38 -0700 (PDT) Received: from mitsuki.. (ip-78-45-35-87.bb.vodafone.cz. [78.45.35.87]) by smtp.gmail.com with ESMTPSA id ld13-20020a170906f94d00b00a59cf137227sm121763ejb.89.2024.05.05.09.37.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 05 May 2024 09:37:38 -0700 (PDT) From: David Rosca To: ffmpeg-devel@ffmpeg.org Date: Sun, 5 May 2024 18:36:41 +0200 Message-ID: <20240505163656.765900-3-nowrep@gmail.com> X-Mailer: git-send-email 2.45.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] lavc/vaapi_h264: Don't try to merge fields in DPB for non-field pics X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: David Rosca Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: f4GyWMS3FZUZ This path can be hit when there are missing references while decoding progressive stream and would completely break the DPB contents. --- libavcodec/vaapi_h264.c | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/libavcodec/vaapi_h264.c b/libavcodec/vaapi_h264.c index b47531ce1c..ca0076f57a 100644 --- a/libavcodec/vaapi_h264.c +++ b/libavcodec/vaapi_h264.c @@ -98,22 +98,24 @@ static int dpb_add(DPB *dpb, const H264Picture *pic) if (dpb->size >= dpb->max_size) return -1; - for (i = 0; i < dpb->size; i++) { - VAPictureH264 * const va_pic = &dpb->va_pics[i]; - if (va_pic->picture_id == ff_vaapi_get_surface_id(pic->f)) { - VAPictureH264 temp_va_pic; - fill_vaapi_pic(&temp_va_pic, pic, 0); - - if ((temp_va_pic.flags ^ va_pic->flags) & (VA_PICTURE_H264_TOP_FIELD | VA_PICTURE_H264_BOTTOM_FIELD)) { - va_pic->flags |= temp_va_pic.flags & (VA_PICTURE_H264_TOP_FIELD | VA_PICTURE_H264_BOTTOM_FIELD); - /* Merge second field */ - if (temp_va_pic.flags & VA_PICTURE_H264_TOP_FIELD) { - va_pic->TopFieldOrderCnt = temp_va_pic.TopFieldOrderCnt; - } else { - va_pic->BottomFieldOrderCnt = temp_va_pic.BottomFieldOrderCnt; + if (pic->field_picture) { + for (i = 0; i < dpb->size; i++) { + VAPictureH264 * const va_pic = &dpb->va_pics[i]; + if (va_pic->picture_id == ff_vaapi_get_surface_id(pic->f)) { + VAPictureH264 temp_va_pic; + fill_vaapi_pic(&temp_va_pic, pic, 0); + + if ((temp_va_pic.flags ^ va_pic->flags) & (VA_PICTURE_H264_TOP_FIELD | VA_PICTURE_H264_BOTTOM_FIELD)) { + va_pic->flags |= temp_va_pic.flags & (VA_PICTURE_H264_TOP_FIELD | VA_PICTURE_H264_BOTTOM_FIELD); + /* Merge second field */ + if (temp_va_pic.flags & VA_PICTURE_H264_TOP_FIELD) { + va_pic->TopFieldOrderCnt = temp_va_pic.TopFieldOrderCnt; + } else { + va_pic->BottomFieldOrderCnt = temp_va_pic.BottomFieldOrderCnt; + } } + return 0; } - return 0; } }