From patchwork Fri Apr 5 12:41:35 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 47822 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:24a8:b0:1a3:b6bb:3029 with SMTP id m40csp936435pzd; Fri, 5 Apr 2024 05:43:27 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCULeAM+y8f0eXbcV8XllNUJacy0+Qx/DeKFSokYN69aThBhA1ZQfLuKZd5pDBereTilbb1nV4juYvpxYbQF2IrxfUMjheRKbErTDA== X-Google-Smtp-Source: AGHT+IHZa7Zv/spwy8QA69GAF8/6U87QRXKVWJ0SkqWlBJohjTJ7HKTjJD+d2fYSIo04OBG0q0iu X-Received: by 2002:a17:906:af97:b0:a51:9ec2:e06d with SMTP id mj23-20020a170906af9700b00a519ec2e06dmr753469ejb.29.1712321007623; Fri, 05 Apr 2024 05:43:27 -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 e7-20020a170906080700b00a51a25bcbcbsi690266ejd.187.2024.04.05.05.43.27; Fri, 05 Apr 2024 05:43:27 -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=YDVBWdn9; 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 863A268D171; Fri, 5 Apr 2024 15:42:36 +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-ve1eur01olkn2016.outbound.protection.outlook.com [40.92.66.16]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 228E668D188 for ; Fri, 5 Apr 2024 15:42:29 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=djFxGPX1H7G4AHd4NTQHU3sY0EaMFDcsRS24BP8dhWCQ1awVx7jbD1IkIASxYFXVX571z4r290EmSEVDEpl+isgPi3Jov6QdNL2s0tc8yr981EtKsHPcesrLlh1mp00xXJnT5BIabpI9gp7C2rsh8eeN+/mf/kPH+5QqhbCwcMClpb8h6zLaHrVkvgrK+2fuF3rssTd0Up29W0L6rV7HCTMioWX9wB81e9ceIcMIGor0y7uOQYfyV6z5VxIfLyzeqEmgSgOUZbeHY9VKbZJ8FNY/OW3lpad1PCiYdZ01NqNXDSMJyZrNrwpCp0PW9auOCsd09fu6qtta4z8hE4ScAg== 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=ZI5pl8FYsWWoOyYGfoXuLmxhM8qWuNME98A5Vul4688=; b=LceEpM4qWfiux+YQ+LBxcejXRqPmdek6+xgHOQWef6Br5E96nabiRJrEg/WlT6QJc/oRDoEghWUcngRtApFgF/E3Khw0ryXG/J0pQ6PmZ8vjNNrrGnfYP9UtbZIHhrQ4IwwKPF7eHGbAILxuasXJA+Y4zFmDHUke1pxDpATNen/1RLRPZSJBXHK/aCnpIXsy269/XUsFxDdutcd2Qag81BapdwVDA7g9zM+L2v3iuJ69FM8e4AwuA9YzWqrjvIYG4JNgKSiScDrW+d7IlVa5UNqkgONGavDtqNsrTVpYoNu6Zf2kBlPD4dVJDnJuoKQgEuT5gTCi9M08+IDEwqAylQ== 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=ZI5pl8FYsWWoOyYGfoXuLmxhM8qWuNME98A5Vul4688=; b=YDVBWdn9dwRwZ547ykfYGyFLf+keVcyZGcowZF3W1Ltf+pqr694PpNspEi7YoWbcyS7FeCmRKtf/QuHFZ7wIyfDPjsLLgZgHdgpKu83QEWadVbuK/eASEMMC+LPwP+x1Wl2cHhuoKdRpfoiarJwHxRcDcvUn+B8Et++7JJNXhjTcX7zzT0niNbCr1Y1K/ATnenR9oyJQUYDEHGT3GdGgkAA1wfuelbtears4gNLxkIqe9WyQfAU2P3ZW+QkrUpFAAhkV1GaKmOWk0ElEB8U7Z6cYLHHRp3mURwOotdYzIt+FGKPfHxTzN/ISYJvXa6HAEM1qypw/BZBUoUUQnocNnw== 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:27 +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:27 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Fri, 5 Apr 2024 14:41:35 +0200 Message-ID: X-Mailer: git-send-email 2.40.1 In-Reply-To: References: X-TMN: [4iKVknsJ8UN1oc6TLA1AToCNx10x6pjjZ9/98BQARBc=] 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-11-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: 53e493f4-6924-48dc-9ab4-08dc556dd99e X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: of3dJhicM/vKECXK4/Fup38i4HauTQP5eQdAXjd9NlPAwrKKn04cy3UKNv0m1zh+vmFY3Az8WsWjn1MFmrx/3GHOsRR1Z+PXMFpB9poWSfV6TynE5kLOubzXlVcKtF1HBK9KWxEkMJ9x2PeZOqqyA8Lj+DfT7z7zyTnNkyL0nCdFG6uH2ObhX1QARSQzquiRSXehUs/ev70o+fgmqlgmJBDZ9xpGV3hVoQlRmzu+X8PkXZLZLKhIq16vhP5U1wZskfqsK1xFlMw3X0jsNCI/iN4jWDUcq7t671RMImlLYEeYgi19Enua7LV0PchWuINw+VnFc0+1rGinMltAamWQXvapUaTiD++26r//SqkprZSE7dji5aE/SAFv2wcVCkGQ+AdDAVmRAMeu0+Ncwquf4OUdT8hMmVQknQazVY4k897Cx7/KyBmCqPYbMk2FNFjgBCPOeDQWeYDeyUkHjsPIpEzGQN/WSCYM/1f5MiqsEL+aGM9hCYwtq1vGJ7TtYdhD8JGPi39zGbCrEkv2ip7/98XKN/IXnUvm/n3hUsCqtFsVvkNhc6ord3wwyyuv35tuiuVuYliR82nmHF4+v79gmVObgP5FdUyjNFk6Zpiy5hmHiw/l88R93FJKm3fXAm2J X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 2TFpcSoa3kVd90L6uBpMB+YMXZflwBm6oKMUfyqrp0A8ZEfdgAf2Vd4GTxCynbwynGMoxyUToMi0fZA8B+Xfx4r4vOhDt+vW97zHssct8gdqGbaRh58IeXHp01oeEtVziR+SJFOuNayMaQH8Cz69QNNbO5n321MfFdDejrVIwLj2zX1Ks8BMB9RyKNchxFb60UY9axkG7QAZ3ElMMjTDTVtcJlDkZm2rSnGJtxIaPKJdaTAUJ4POmvqJjO8ZYoGCJzbdX05kyeaWQNErvM1+wTuA2gf6507wTurgTz8f4JdTeS4Mt2LTfCOVWvVGqyW+xBMUDshgpNkGhJVzqKR68dwK+AsB3Sx1YYyZt91/ZUIncJRkvrtyVH9Ijhj+shSVscuViVwMaaq5WDiOlyGJy32RPqPxL0Vt/MINBxEsiRmpJUbj0KkMj0CaOOmiPcT5XbEN4GIZePg1aFY6ptp1OiOm2yWhRBbhACFfQ82TRhe7AVz4ryazS7GU5SavoRQnKo0gE2G2/961SNON7zz4Lzr9nrPHTQ85Yu7MEtErbf/cYyiewlJ3MMA6JHG2dHnHnMYom5i2eGxHzI37FQFWNfGAzbUZ73MSozcP2yrHuaGr6vvU1hia7MnjeJXDs6AHikhbirdsWiDvjYLasWAb7WOLOXK8+mJPkuK9RRrtKtxzj0K4hF7lFWqJ9/t3O0PPgc9ZS+aRWXG6So1AXpuMpWfueHhbHFgP5aTwJbm3FMF3d03C+WIDuPe7mBvEwfIUmCNukl5frZQuoB/wYoVzAZHvJYdX7grVsa40OtH1sylS2xjIc5Gw5pexRQcojXomqFeHgRFbjCmwrz+0VIGbdfx41hWpfU6mTgO331xJI5Tf6cRedXe5eEzZmb6TyB4FU2KFQ+yXPMHr2QrCUQCESJzqapA26kw9JjGcoKBiqMgAVVOcldDj0EzQ8XVXXvoCOaQYCVZT8AZ8ZF3gIgfmTNNS75uGTt50Hu4lRhK+a7su6fJhnuRRVF2/GHcL9eg7ryQM5AdWEGfTihso8IOUjQtgdKnnZZQWrGyA578l/gh13goCaspmlrPMzT4/gfSPwbgAFhaf8hIv0PDbDWOm4LtYfPqQ23ODp0wrT48A48K5Abxpqz96KQhwt0bQulQ16lnCDnEAXV30Oz3fF8YZq1LVXyNZd0sqCcX+ldZ2MKmpnhNAZJhPeSJkldiX+kNyy8StRkKd3AZpi6OcAPxexI93pxNjG9oyE2wmXgYBVMAjGjtIYr0flHplumPVI2ldiK5CbPHEPozuZKMFLwBoVg== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 53e493f4-6924-48dc-9ab4-08dc556dd99e 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:27.6452 (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 12/15] avcodec/mpegvideo_dec: Move getting Picture slot into alloc_picture() 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: z0FVPYRQgUmq Signed-off-by: Andreas Rheinhardt --- libavcodec/mpegvideo_dec.c | 63 ++++++++++++++++---------------------- 1 file changed, 26 insertions(+), 37 deletions(-) diff --git a/libavcodec/mpegvideo_dec.c b/libavcodec/mpegvideo_dec.c index b6ef4e5582..d337a6565b 100644 --- a/libavcodec/mpegvideo_dec.c +++ b/libavcodec/mpegvideo_dec.c @@ -235,12 +235,20 @@ int ff_mpv_common_frame_size_change(MpegEncContext *s) return err; } -static int alloc_picture(MpegEncContext *s, Picture *pic) +static int alloc_picture(MpegEncContext *s, Picture **picp, int reference) { AVCodecContext *avctx = s->avctx; + 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->tf.f = pic->f; + pic->reference = reference; /* WM Image / Screen codecs allocate internal buffers with different * dimensions / colorspaces; ignore user-defined callbacks for these. */ @@ -248,7 +256,7 @@ static int alloc_picture(MpegEncContext *s, Picture *pic) avctx->codec_id != AV_CODEC_ID_VC1IMAGE && avctx->codec_id != AV_CODEC_ID_MSS2) { ret = ff_thread_get_ext_buffer(avctx, &pic->tf, - pic->reference ? AV_GET_BUFFER_FLAG_REF : 0); + reference ? AV_GET_BUFFER_FLAG_REF : 0); } else { pic->f->width = avctx->width; pic->f->height = avctx->height; @@ -262,9 +270,14 @@ static int alloc_picture(MpegEncContext *s, Picture *pic) if (ret < 0) goto fail; - return ff_alloc_picture(s->avctx, pic, &s->me, &s->sc, 0, s->out_format, - s->mb_stride, s->mb_width, s->mb_height, s->b8_stride, - &s->linesize, &s->uvlinesize); + ret = ff_alloc_picture(s->avctx, pic, &s->me, &s->sc, 0, s->out_format, + s->mb_stride, s->mb_width, s->mb_height, s->b8_stride, + &s->linesize, &s->uvlinesize); + if (ret < 0) + goto fail; + *picp = pic; + + return 0; fail: ff_mpeg_unref_picture(pic); return ret; @@ -272,27 +285,16 @@ fail: 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); + int ret = alloc_picture(s, picp, 1); if (ret < 0) return ret; + pic = *picp; + ff_thread_report_progress(&pic->tf, INT_MAX, 0); ff_thread_report_progress(&pic->tf, INT_MAX, 1); - *picp = pic; - return 0; } @@ -320,8 +322,7 @@ static void color_frame(AVFrame *frame, int luma) */ int ff_mpv_frame_start(MpegEncContext *s, AVCodecContext *avctx) { - Picture *pic; - int idx, ret; + int ret; s->mb_skipped = 0; @@ -351,23 +352,11 @@ int ff_mpv_frame_start(MpegEncContext *s, AVCodecContext *avctx) ff_mpeg_unref_picture(&s->last_picture); ff_mpeg_unref_picture(&s->next_picture); - 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; - } - pic = &s->picture[idx]; - - pic->reference = 0; - if (!s->droppable) { - if (s->pict_type != AV_PICTURE_TYPE_B) - pic->reference = 3; - } - - if (alloc_picture(s, pic) < 0) - return -1; + ret = alloc_picture(s, &s->current_picture_ptr, + s->pict_type != AV_PICTURE_TYPE_B && !s->droppable); + if (ret < 0) + return ret; - s->current_picture_ptr = pic; s->current_picture_ptr->f->flags |= AV_FRAME_FLAG_TOP_FIELD_FIRST * !!s->top_field_first; s->current_picture_ptr->f->flags |= AV_FRAME_FLAG_INTERLACED * (!s->progressive_frame && !s->progressive_sequence);