From patchwork Fri Apr 5 12:41:34 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 47821 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:24a8:b0:1a3:b6bb:3029 with SMTP id m40csp936369pzd; Fri, 5 Apr 2024 05:43:19 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCVmX70hdsQthNcZlIcYVcc/03afcx/wNFT2MlVksm2sJ4W88Fn3Rkiz8tlmH1MXLy74MXLxPhkeypPYPrDhddv7CFWqhDRvnYUmRQ== X-Google-Smtp-Source: AGHT+IGbcWrSAL7xSsJwZEUqqSpR4IErjgzkZ1YMBbom1QY/W0/PrEdOSjXOhXL559svMzReoFWX X-Received: by 2002:a05:6402:35cb:b0:56e:2a2b:7326 with SMTP id z11-20020a05640235cb00b0056e2a2b7326mr1107618edc.0.1712320999167; Fri, 05 Apr 2024 05:43:19 -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 x22-20020a05640226d600b0056e3147ff64si562725edd.638.2024.04.05.05.43.18; Fri, 05 Apr 2024 05:43:19 -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=uziMoIHL; 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 6A4BD68D1C9; Fri, 5 Apr 2024 15:42:30 +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-ve1eur01olkn2061.outbound.protection.outlook.com [40.92.66.61]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6BDB268D16C for ; Fri, 5 Apr 2024 15:42:28 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=acVoIQqXp5v9aK2hqQ+ckIjjHpOvqfnYgdQft3Xbv0FtJTPMnBf2Udcv2WuyJ1e8lLKyNJHRjj03AXpvrbaRglNEDhIKUVUxDlYVyFTEb5qWa1v/x0AMaJNKrQP1vPOJwf+tq0NtL1Ao3+sg+vVPhW2bx7ioVeV1fZ3iXxkPn/Tw3c+9VImlx8Z8rsdymMzmVKb5f5kiZpmT9by+7CBj6QAC0tesjkFY1B/Kj1kJPyWZm2ApuZUL0/x9A5ygm1M+BGdBJnDeK0YVgcpE1SCk1ErufvA/5eEto9aeqIHwIBKPHsG0obolj9JfRJ1zgaEANjeWd0FcKsmOk1GtU8CuyA== 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=H6M/nFYxN9xTMzovnzB4TA4XC5mrKPBBrD2WmyiX0Ao=; b=ByeHehmQhepD0Fb/eQ9SYVdlV8qnp3i97I3j1QAccFjEaFsPHFSdmYxay00JyBf/IsUAj+t4RWBhgWVj/DAnoyn9lZT4LIOsFNO1BF+51PXvk4LryzTjhfG77Zx7IKiPLzapGsoTa9VP911IQrg23lx16Q4gmVKUhoG6Y3xsXHEfOLxcbaOCOFD/WrqkkZMHADumo6zUXwCABWT4BOhAgAVkOkSMSWCVbhcEy2NJ2YSSzXdGlnFRdBsYgppMMyY8yVyFWiD1Md29n1pd9NUnRJGKX0W4d6B47LH6snvPVEmhOaFgKnWW9QM7pai/5x6ReMs9/4a8DrkBUyOQb6oigQ== 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=H6M/nFYxN9xTMzovnzB4TA4XC5mrKPBBrD2WmyiX0Ao=; b=uziMoIHLiAI1zDe/kRDnVsFDIrcuXj8YXNRvTgGZIqQoqh3RFGpwtfRfU99mAN4Z7d6xRPMq2n+TGKcDL/64TNDAPa+Dma7R2+k2TuplQoz4DcNl3V07J8wQFHOsf3fwlypl4fYZq0IxwqF3Kqr0uzrLUu1oV/T5ldllYlX2v26z6tdSGcQ2ImjD/TwSXMGeGF3a43QUGn8Q48Vdj9oMwiIsQeME6m+LlyAawvodPg9QKyFxrQ73K1g3Zp3FD/I9uXf8ed0Ey2AB/w5vMV75ijrAE4dpb0PYdvnjweYIfxeG3yyrkVPFcSiu5OeutrRqKgUc51zLtGLLv2HWKtQ91w== Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) by PR3P250MB0002.EURP250.PROD.OUTLOOK.COM (2603:10a6:102:14d::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7409.53; Fri, 5 Apr 2024 12:42:26 +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; Fri, 5 Apr 2024 12:42:26 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Fri, 5 Apr 2024 14:41:34 +0200 Message-ID: X-Mailer: git-send-email 2.40.1 In-Reply-To: References: X-TMN: [LNji7NMZZVBVZN1YlNwehv473KvzM8wNTp2LIyDbr6M=] X-ClientProxiedBy: ZR2P278CA0074.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:52::8) To GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) X-Microsoft-Original-Message-ID: <20240405124138.2343725-10-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1P250MB0737:EE_|PR3P250MB0002:EE_ X-MS-Office365-Filtering-Correlation-Id: 2f489578-5f54-4ac6-445e-08dc556dd8dc X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: K+k3S3yzeBk5kbzfROH9KdvsvbR2VfkbZwnSh4u5w7vYlahwIn1p3R6z4tCTC4/9K6YOoMVYblfC8NQ5oyHovQHjUJ27tKT1vbNOzL2YTjoG7eCNV9ienmUL/2lFgPBeBqkP/4gYBBfZ3HLojeZGwmN6B2zW2Bm0rcmWwhdcovZoLGddJCDmuVAEL83Ofs2XQQRWnDCbFYNvwR+aW4cX4QVH+k7jTsaNLynguHCKpaP05Zz13pTD0TuV5MRmYUc1bEhlyYD9h0bY9S9VMLsBjnIhYkiQY6GBOu2ijz3/QVUqgQ0+ghIG7B8zbv4ufsquu4O6714pyps9QweF505zebZI4RPg5yuOEm0QNjgKva7aduEQhZ7PNd6cw+smy92s+I34VdZNQ/8nzHtVkPMnyOQ4TIaHrRNCXMagd3OLXliWiaz/ZdD1eJtNt4cva2AVD7rq+k5Yrx9mwhAC2rPwJZdFDjbDEyEAEKkbydTF6p/q3w0en5a9lfTFizCBd8tJbygF24IaZkmZLP+3cXRIWPb7RqzhIIJjAXkA60u8jx48XHvKnbHvjsMd1HMJtnG/f2ImU909sxa8mgjjX7f59fwlHqhyvHQSZeDmNgZo+4V6coRUEgswLwHtWGtfqN33 X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: f2rcE49+z/39QzBlsQcjfV2mZa8cdJhpn/lSRBQbEe+LOHar/JkrP5D+AmsrCOHLae9nDcIdkCoybUkxw7EFsVQWtJVA+fznw3xfwGX+AQ3OklavvAEmYYzwY5IL7zJi82krEO6e7MQYjgA1GN9rOagKlPH3L4wHUOMwuzzkVgMa86w5PkJi7zMX5k5EelVPFfmRmUUhsW38saFeV5i2vJ/5xfRPw1V9F/HOV99zbnYlYY61Pq2AGI8yzL1bAr+6DmK4vHgJ4q5t0Pprp3hI5v5D/kBDtzmnQ0GqImHw+cPP//f8ux7zeoVGZ6BVF8Y+u1YMqxgh/QNS3hR3NqUroFSzJ8JTTgckAYjpAVT12FaB77QOskNWWDlCymhmFY4VjQiyK1Q35X1xTTQfdYUi2IAYLjjKKQ6a/SXX+O7e2iAoL4Vr4CX/4OQdHUZtAhXW9aTzljJ3abgmhClJD3F5zgZny/Fmb+Mn/OKp+vuU8cj1Ms1p/wCr/zbfVdX5cYYSyThCTT5aovs3eHOOhL4nlGcbebOE42iyxiDUDELFP/T6QkUllSP4/a/jiVrwhEqfyUpuEWCuevNMnxXSoxTcr4Xa1P9GLAGQtRGh9LzcV2qhUBAQXoaxLQLRf1B9OQvwaL8Rge8dR56+J1auZwRTczT/rSutxHBQDueh6xJYnns816ZNzAv4ENrjidlhiWCVqeIh/jfCgAzfKnUcnQ5iA62dvQcYbp82iAMWiayWMIegQ7FCRz5I3ToVmXotgDbc6gaO8YfJGufHSpZgnhs5DeKsO5dlTmQfMzhfzbDn0lBQ/d9Rbst5HYWOeBdgmNy1vgl2cCCqEbZuL6wINkDZF3ew6KnYcdGXIF/zo+GLSz2bjHM58EgZ2lkbcgW3iHUhCmuEh0cZpI1ZpjLP81xqkp/h3ubUzb5wbiYo6oFoaHLhyKDfedzJbjfFWiGYcgQZUzS2SJHXx9Y+DiPA02xHrZVXwB6iR1YF32BQ9/FFOMEeGYMmGAZKVjEnn7/ZJImif4zElwLRfEvA/LWSH7WB4P2cPZriNY7I7RbINXy0r40pm6ewlo69+irLK01yyuuMxrKtO1nZKJBYlsjWt1fa2s0L5xlcNazSyhLcjiTrO/ujgKKVA0lOIpcOyBNYfd6568IhmcBXqCvzebev+70Ff55on/wufvTUaOgVRgM8+pumQyomPJEUEr1ZcAvjocPixVKfVsaF0azoaCGx1ykmfhq14jKMT2aEmTCBH/LGiTWa4icbulR+6Ff+FHx5mUFtBsOxqt401ZSw0XDaOYo3Xw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2f489578-5f54-4ac6-445e-08dc556dd8dc X-MS-Exchange-CrossTenant-AuthSource: GV1P250MB0737.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Apr 2024 12:42:25.9939 (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: PR3P250MB0002 Subject: [FFmpeg-devel] [PATCH 11/15] avcodec/mpegvideo_dec: Factor allocating dummy frame out 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: XeDFy//ARI1U Signed-off-by: Andreas Rheinhardt --- libavcodec/mpegvideo_dec.c | 64 +++++++++++++++++++------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/libavcodec/mpegvideo_dec.c b/libavcodec/mpegvideo_dec.c index 4fa89e4aef..b6ef4e5582 100644 --- a/libavcodec/mpegvideo_dec.c +++ b/libavcodec/mpegvideo_dec.c @@ -270,6 +270,32 @@ fail: return ret; } +static int av_cold alloc_dummy_frame(MpegEncContext *s, Picture **picp) +{ + int idx = ff_find_unused_picture(s->avctx, s->picture, 0); + Picture *pic; + int ret; + + if (idx < 0) + return idx; + + pic = &s->picture[idx]; + + pic->reference = 3; + pic->f->pict_type = AV_PICTURE_TYPE_P; + + ret = alloc_picture(s, pic); + if (ret < 0) + return ret; + + ff_thread_report_progress(&pic->tf, INT_MAX, 0); + ff_thread_report_progress(&pic->tf, INT_MAX, 1); + + *picp = pic; + + return 0; +} + static void color_frame(AVFrame *frame, int luma) { int h_chroma_shift, v_chroma_shift; @@ -379,48 +405,22 @@ int ff_mpv_frame_start(MpegEncContext *s, AVCodecContext *avctx) "warning: first frame is no keyframe\n"); /* Allocate a dummy frame */ - idx = ff_find_unused_picture(s->avctx, s->picture, 0); - if (idx < 0) { - av_log(s->avctx, AV_LOG_ERROR, "no frame buffer available\n"); - return idx; - } - s->last_picture_ptr = &s->picture[idx]; - - s->last_picture_ptr->reference = 3; - s->last_picture_ptr->f->pict_type = AV_PICTURE_TYPE_P; - - if (alloc_picture(s, s->last_picture_ptr) < 0) { - s->last_picture_ptr = NULL; - return -1; - } + ret = alloc_dummy_frame(s, &s->last_picture_ptr); + if (ret < 0) + return ret; if (!avctx->hwaccel) { int luma_val = s->codec_id == AV_CODEC_ID_FLV1 || s->codec_id == AV_CODEC_ID_H263 ? 16 : 0x80; color_frame(s->last_picture_ptr->f, luma_val); } - ff_thread_report_progress(&s->last_picture_ptr->tf, INT_MAX, 0); - ff_thread_report_progress(&s->last_picture_ptr->tf, INT_MAX, 1); } if ((!s->next_picture_ptr || !s->next_picture_ptr->f->buf[0]) && s->pict_type == AV_PICTURE_TYPE_B) { /* Allocate a dummy frame */ - idx = ff_find_unused_picture(s->avctx, s->picture, 0); - if (idx < 0) { - av_log(s->avctx, AV_LOG_ERROR, "no frame buffer available\n"); - return idx; - } - s->next_picture_ptr = &s->picture[idx]; - - s->next_picture_ptr->reference = 3; - s->next_picture_ptr->f->pict_type = AV_PICTURE_TYPE_P; - - if (alloc_picture(s, s->next_picture_ptr) < 0) { - s->next_picture_ptr = NULL; - return -1; - } - ff_thread_report_progress(&s->next_picture_ptr->tf, INT_MAX, 0); - ff_thread_report_progress(&s->next_picture_ptr->tf, INT_MAX, 1); + ret = alloc_dummy_frame(s, &s->next_picture_ptr); + if (ret < 0) + return ret; } if (s->last_picture_ptr) {