From patchwork Mon Apr 8 20:13:46 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 47946 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:3f98:b0:1a7:a0dc:8de5 with SMTP id ay24csp135949pzb; Mon, 8 Apr 2024 13:15:37 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCVTtmMfBIF5gzwd6BZPMKyuuFpsXFPojQJ9KQ4NsOPDxmF9UW0LADkUQWa4cuk1bibY9L94QHjgjOVepZK6e/o6Tt0BbJYtiEbwBQ== X-Google-Smtp-Source: AGHT+IE0niyogysF+2yMEuIjq7fECqcbjwWm0Ac3H9WPMPTjE6FXsC/SrgLO1ynI6tKMk4wbM/cN X-Received: by 2002:a05:6512:3154:b0:516:c422:ab1f with SMTP id s20-20020a056512315400b00516c422ab1fmr5982734lfi.4.1712607336822; Mon, 08 Apr 2024 13:15:36 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id ck7-20020a170906c44700b00a5196a15dd1si3781211ejb.176.2024.04.08.13.15.36; Mon, 08 Apr 2024 13:15:36 -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=@outlook.com header.s=selector1 header.b="bki/nokG"; arc=fail (body hash mismatch); 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=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4E97268D391; Mon, 8 Apr 2024 23:15:06 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-ve1eur01olkn2073.outbound.protection.outlook.com [40.92.66.73]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9F9D168D352 for ; Mon, 8 Apr 2024 23:15:01 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kfLXkJ+44//JapzjdE4YMWgIRIgj9NjYeHDdhC1WKqvyIQZ+/b90TyI4Eimw1bX4TV8dRQARQfcDaaw0aaYs8DaRUra7rlF7vhFmaTxFOQfnhFSvVZ5Fd5IEYeqJKqEq1g/vmQq9WMIKK02wXQMSCrX0Q4744hZmxRSiVFv2HBcnrXqjDm52DI/z5RTo9nHxk1DI9S0wD/I5CblU6VsW6in4hFADvgsOrtT8HnxPBHGTs6Eu7UofqhJmpyPCUKSASFUihc/93rRd5cyfL+jmuvAgzaOU7btNER/chYCubBhFzV5Zl1/QBc6nhEERIqX6gtFKFFITxyKGOxA2U41rmg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=lFLIaQBuwNkCp4YDja6ZV1H/pkryIVEN0qBPCQw4C3Q=; b=gMcLz3A9tN7SPQtitXIM0wFMcuCvjGPPJIgxiyKNzouVwIGWVJG17BP4UlvjWhyXqQKV0xM7YeIpX/fVo/9ZrPwyB87w8mmaCeSYSF7kVlshi9CdOVyexyzYG6f/jkW1XG7A5zDW6RanxYqhp+hrV0s7vk0K8Qb63NzTHVwr929r42wnMHd1MQ8mS/0MK5Cyh0MgXeWgzlzDiZ/l8YwptKY31UOj+GDrddVEEuq1kZSaUUk9mzr7zexKzisdAvr3VMrLKSAm8GvVGatw/LtLDOJXa59a9afIMQXWWcjVj9PBE3RmOC5K4omar+nIM5ubwfvIhRSaGt2W7PrpUWm7Sg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=lFLIaQBuwNkCp4YDja6ZV1H/pkryIVEN0qBPCQw4C3Q=; b=bki/nokGI+U2fTMkcLKW34dljv2v639JKFXjcNDuiLPJ1VwG/xaCwKGzs5HvyPFR/50wWjX8p8XpRKDMtuPMlKjsjXwEfkInXaZaRG1vgbOI3e3ZAycWmLM84LoXO3/6tjUlsHBc1LEFuSXCED4MTsXAiVmIl4I9PW66t4+EPSmA2eq/HTGbwS23ymLvL1QyyTqc+ygPKDZLWd/Vdgwg4sJuVQj6Vnee82iVdgRyYCKcK+WwBNN4Rr9a1IgodZY69KbkNXy4x+oouN4JKL6zOBxgVzrl3v7diveSLsaJiPlF2Frm7Hu28/dbE9lJ7CEzCRMnsX2dwRXM7qwOye6M4A== Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) by PAXP250MB0494.EURP250.PROD.OUTLOOK.COM (2603:10a6:102:28d::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7409.46; Mon, 8 Apr 2024 20:15:00 +0000 Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::4a3b:cf76:cddc:c68d]) by GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::4a3b:cf76:cddc:c68d%4]) with mapi id 15.20.7409.042; Mon, 8 Apr 2024 20:15:00 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 8 Apr 2024 22:13:46 +0200 Message-ID: X-Mailer: git-send-email 2.40.1 In-Reply-To: References: X-TMN: [sxkWN7mgGjniIjSk0Ehe2Tod3bvfRTBBf2P+lGy5R5s=] X-ClientProxiedBy: ZR0P278CA0124.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:20::21) To GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) X-Microsoft-Original-Message-ID: <20240408201405.2136840-7-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1P250MB0737:EE_|PAXP250MB0494:EE_ X-MS-Office365-Filtering-Correlation-Id: dbb194c5-1c26-4908-fb15-08dc5808917a X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Am0WAy1WNQe56y7FWJMNP1jNIPB/4xKJl+r/ISmLSaCrwIAJNy6GJihga9OoN7olA3Kw0kRB49sxZzGLntGyTBSsdOyi+Ns/mIB4U5mwXb+X8ChUUWuPhPLKX001hcQJ2SC60pnW0C7XiKDtXCHvirTKr7eBvMPEfJNyn4uVyfHKTssCZ+OtWvRn57lvzo+QucxgCJkG0vQIJavJEfVODNKTyIVWGLOMaoplrwvpp0LmRBC6loS23IZdV8I5StgO5rWKTvqoqUaKnCdGK7cAPGYQfylYWYq0/OwX0HCrJVkvozZXzmptkneTsiTNYifeLWOkhXDHa05tIbdMSnWhkiRPydoo8jYvEgC67rSepOkBxmI+6yv0/NsqgwLwMxOhwnHrZDu9YV27psIjueMrAj2XkZW2394xS+OGWVxS80Sitsl7ieglPYjpi5NEgJT1uXUfrkMrvfag6767cvDQaQlf7sSIDDw1lSwivb8P+SGaAkSjsB69nj7+h9jXSx6fjm0G13Rus4VbeZafHLKYNHFl8tEJAeM4yiBIqh0FNQp47oBmEYsWDVOJ9Tk0NTR9+yuKLPIDz4uewiInuM+qwTCHGp/Bx6nbvv6GbrNUVQCc8fL2Zf8Wn3SULyx/9hkC X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: H1uwXd8rk1llbB4ohax3gB0LYmvNTA0g8FscS9rrVfLiiQLgZInVSrGZHRc3ESLo2CMbQn0GqGQlupsbO6n6oKV9KnBKUiEHBe3gNhzifCtIgC3zKbogR8gS4bkJAO0tnS95sjf9gIhh6/jAIaEn27bmhDswiToJDKotMHBsQECUiLkoh0JgQG2deqWD2HZtx/dWnqccbD4p+nVHbbEBUoD1GKiAwgXe99nN1i8RZ9JiGJimPtneS9l7M4jfPPPJcxUEIZXVoohBPaeQY/HByx1XEMvtw9EyB7ZL5i95ToNUm+yvMVAY8lBDhWl6ZC3nCNQrkQ22/fNelA4+N9qupz9IRKeU8VKBWOqMaBvOS05KsYzUZeQBfwWJ3QPrrxoeU2mNru11oVo7ilb/jtSn4pEUrFkzhiqc12oVgPG+kYlgsM3hazeKB97b4291PN7dD4lWmAq1V32rMtefGzm/XQgWkycCKPsPR1NzksWuseDmuzI9nxpbP8t5YBDtFOECLUfxvEptzoM9LxM1gnhAZ+F/0frPuK6WygCJbUOKhtOvfHv2wh69IrIc6jx18TjKbbkyxPD9DUqLkKff211UBiMLKQUnPFW+UZf0hbNG4QtWrVIfbZAvXBFvKFOLKu23hxULCjwMd37++tMnIgU79yhPjlP2hogjduZ60N2Ob25ZrO1f72BMNoa5f2Ayr2arKDJsK1KY45OXV23zRlK9itUrtThl841RsiRVRKLaKd3K14XGLjPcwOGGMxCv42CBso/JG9jRPIvW8Qj4ffNHLP51wMpQzYz1S/z4YiyKrEZZoJJV6pFaIrrPlYVPFPp0YGJKycJef6ezIPj7+g6PSyO7VRCB9Je/UYzvzoAVZUUpGRwss+XDxQsY+OQqKeFjhGb0dNCn6L15AwOWfuAf2B/aohxyrJvfwBs4M4a67tFcKfIV7o150t7wA2rlCwQmQGFEbo8OJ5JyjJgto6GJGG6XeiAZMJ0NyH8hDAQ7CMNEYLHMYJe0jwRooVWl1XY+i0wxFJx5K6MJQnA27yuS7m7Bodv9Hu/4xXhrTkpjP3ZHPKNLF7wTjtTVhpE8ReC5rtUz2BWBi0+t3pIxj8AELM45lt8NLwMXElTp6bpWGzngO3NcPdU/pudksZpwEKuaRB8zf9c8yb7Mll5thDvlDLVT/zZ57bopPF1d5XRYN9KxVwA5P6dwpaDgCqaluh0F2wlJa6i2/TXQbjdKw3y2Bd+bYqiwUfwmPGQsLszWfwm8o9IFJrLdnbawINn4Nu14DVm1kjh1Oi8ZKWQzjzD/uw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: dbb194c5-1c26-4908-fb15-08dc5808917a X-MS-Exchange-CrossTenant-AuthSource: GV1P250MB0737.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Apr 2024 20:15:00.5379 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXP250MB0494 Subject: [FFmpeg-devel] [PATCH v2 08/27] avcodec/vp9: Simplify replacing VP9Frame 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: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: tUhkC5LdCJSx ff_thread_progress_replace() can handle a blank ProgressFrame as src (in which case it simply unreferences dst), but not a NULL one. So add a blank frame to be used as source for this case, so that we can use the replace functions to simplify vp9_frame_replace(). Signed-off-by: Andreas Rheinhardt --- libavcodec/vp9.c | 16 +++++----------- libavcodec/vp9shared.h | 3 ++- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/libavcodec/vp9.c b/libavcodec/vp9.c index bdfa543188..443eb74c3c 100644 --- a/libavcodec/vp9.c +++ b/libavcodec/vp9.c @@ -147,11 +147,11 @@ fail: return ret; } -static void vp9_frame_ref(VP9Frame *dst, const VP9Frame *src) +static void vp9_frame_replace(VP9Frame *dst, const VP9Frame *src) { - ff_progress_frame_ref(&dst->tf, &src->tf); + ff_progress_frame_replace(&dst->tf, &src->tf); - dst->extradata = ff_refstruct_ref(src->extradata); + ff_refstruct_replace(&dst->extradata, src->extradata); dst->segmentation_map = src->segmentation_map; dst->mv = src->mv; @@ -161,13 +161,6 @@ static void vp9_frame_ref(VP9Frame *dst, const VP9Frame *src) src->hwaccel_picture_private); } -static void vp9_frame_replace(VP9Frame *dst, const VP9Frame *src) -{ - vp9_frame_unref(dst); - if (src && src->tf.f) - vp9_frame_ref(dst, src); -} - static int update_size(AVCodecContext *avctx, int w, int h) { #define HWACCEL_MAX (CONFIG_VP9_DXVA2_HWACCEL + \ @@ -1584,7 +1577,8 @@ static int vp9_decode_frame(AVCodecContext *avctx, AVFrame *frame, data += ret; size -= ret; - src = !s->s.h.keyframe && !s->s.h.intraonly && !s->s.h.errorres ? &s->s.frames[CUR_FRAME] : NULL; + src = !s->s.h.keyframe && !s->s.h.intraonly && !s->s.h.errorres ? + &s->s.frames[CUR_FRAME] : &s->s.frames[BLANK_FRAME]; if (!retain_segmap_ref || s->s.h.keyframe || s->s.h.intraonly) vp9_frame_replace(&s->s.frames[REF_FRAME_SEGMAP], src); vp9_frame_replace(&s->s.frames[REF_FRAME_MVPAIR], src); diff --git a/libavcodec/vp9shared.h b/libavcodec/vp9shared.h index 805668416f..8a450c26a6 100644 --- a/libavcodec/vp9shared.h +++ b/libavcodec/vp9shared.h @@ -168,7 +168,8 @@ typedef struct VP9SharedContext { #define CUR_FRAME 0 #define REF_FRAME_MVPAIR 1 #define REF_FRAME_SEGMAP 2 - VP9Frame frames[3]; +#define BLANK_FRAME 3 + VP9Frame frames[4]; } VP9SharedContext; #endif /* AVCODEC_VP9SHARED_H */