From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id B890A4723A for ; Mon, 29 Apr 2024 00:37:13 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 958E368D494; Mon, 29 Apr 2024 03:36:11 +0300 (EEST) Received: from EUR03-AM7-obe.outbound.protection.outlook.com (mail-am7eur03olkn2092.outbound.protection.outlook.com [40.92.59.92]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8432E68D435 for ; Mon, 29 Apr 2024 03:36:00 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Q81/OlTK+bOGRDJW/aphbfXi498FjyZnPVXP0nKwcW9V3+gU3T1JqP2Vg0H945Fls72i/xg2f5//pZft910ch//ywfzetYDY6/tuSKS2vEWmUea+gsTVYRBdrbWNS6H6taj/K1W8FRoL7PTUnD1upZ8zYnKAb1qSm3yY9x00/anBFjpz2rhXRTUO3+0Y/ysZcQ+AhL0UFjTSwt3eAc9ZAjlqhscogNScBoa4Fdrp5ooSOo/kWlqgvTAYPuVmv1Tng2Y2q89nJrm8/gEPZQPu5jM1oyzbsRd/ihC7QntFGGg5UNRBHODzTY1RhRvBsjOWcYhAL/teSJNqLFobZ21tpg== 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=cLzQRfHQpVWldzxBlhMm3F3TJwYGQff6nHC2iic9rnc=; b=icCP6kp+kmq6Q5Ku3xnwY5lnZihZUlKNvs9AzIOuY3yAx9TvwsThKbAwhwmTsMSaWtPWyOzxwnO2ianTCraxQFIdJxFyQulI/nXHl+0KUUd5BLzKO5fa5nj/ktx5A37axPfvKIGaCTvpGHqjcOoNP4SakaKnc3vaxkMg5h3Ogirl8i8pbnmlnMNTLFIJCWQRUqB2efaMMJb9b9YB0OCvHfu/27Ho51TaA+D9VFuzIkyD00j9kSgMcinfOq4Uk8Y4gnQGBCpqP2U4cY1xFuCisp65qG78uI0KRhfCfO8WvwkmgH/vx/ttrv83F6mbs1H4syJzpQ7tP8C41VEGoEXvnQ== 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=cLzQRfHQpVWldzxBlhMm3F3TJwYGQff6nHC2iic9rnc=; b=LDNxNB9a9aUEGwxsudFcpg19pcage3ZmQLo8mOgkSjxJ85OC4JVL3srZPQQjA+LPwlNscLmuhzYQ4IDw7GzmUvnBCj/HJKJCIIlCnZsZ4iFYpEr0u8VZ79+Z/d+lc95UE6xTiC0gwUU/bOmpJfb1IKoLV8CYDG5H8HYutBcG7bczw1uAoIwRXEgL7JxG86fmFoywxprZEGGS/ffw/sT1TRmo1LwqwvIcNNVpDDWP1nCbqzdzCjmddttUQpbx73ARhM8FjlXeAx9juGz1GE7zSVuH0n3p39D8E3u/A5/21OaJWiE+EM1x1SCBelAKUVLI3gIsINd9eR4xz0VsBuDc/w== Received: from GV1SPRMB0021.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:60::6) by PR3P250MB0068.EURP250.PROD.OUTLOOK.COM (2603:10a6:102:173::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7519.34; Mon, 29 Apr 2024 00:35:51 +0000 Received: from GV1SPRMB0021.EURP250.PROD.OUTLOOK.COM ([fe80::4eb:f54f:b451:34fd]) by GV1SPRMB0021.EURP250.PROD.OUTLOOK.COM ([fe80::4eb:f54f:b451:34fd%4]) with mapi id 15.20.7519.021; Mon, 29 Apr 2024 00:35:51 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 29 Apr 2024 02:35:27 +0200 Message-ID: X-Mailer: git-send-email 2.40.1 In-Reply-To: References: X-TMN: [z+4kZePXiysnUmZo6Y8+qaTjGVJCfYJXgAZ9aW3EG2k=] X-ClientProxiedBy: FR2P281CA0080.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:9a::13) To GV1SPRMB0021.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:60::6) X-Microsoft-Original-Message-ID: <20240429003535.1516058-5-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1SPRMB0021:EE_|PR3P250MB0068:EE_ X-MS-Office365-Filtering-Correlation-Id: 6a0b1403-6772-439e-8ba9-08dc67e4524c X-Microsoft-Antispam: BCL:0; ARA:14566002|461199019|440099019|3412199016|1710799017; X-Microsoft-Antispam-Message-Info: z1PYO0G0wapYBBGCRjmmPaXaZUzi5e2/0zxyjBKep2CLS4qTiBHP0MAO/6vG1kT3htYen6zDUi0cnGhEDOLEJJ0f4zNqcfYts6erPVi4HpO21ehOXALz4hcDBtVIum+vFKIM/Uo6NPWBX2dK1f1wn23dj/gMwibdVpMBgklgByqUDcTAyZuar8p2DZVDSgzVnRyfOxE/m/S4Vm3TLQbYtslvVu0X/oxUVuSI9q+8R9JpAjqlR/FPROIMQBCz1GJ5CQCytzoUiP/y+pehbddbF0TuBo/K3kF8hFFZ8TaC4mi0AZ0nJTqIlWPpJ8MA9HXoURb2Dsj66Tj7Vpn+UB0zg+OERZPWADUj2NQ+5E1NuMkdDduLNKS1KnQrpQMuY3iWxvEFMvpvE+zkQr1lV1SmeQEzN9ahFAE/sYH3MXYVsY7ZFR1bMWw7gS1CII+mQqR23BJrdPlYBCNQicWtBgaAh9brZ+bDmk796rhhfXM6ox27CSI2JDfjA8yhOy94QUTtcVnVLSZync9UEI96NUXoohK8XrIqQQRy7eYUk/9UsRt6CJ+HzqduAQ2A0HaVWgYwoOWAAk3XN2yetMuAVwfFNdosekBvlCKbmCIn5wcf8c/On1qELOvB56zL8xzat3jm X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?zmnSLV/UXkZ9ss8gZHWrWonaRf080ZjpmuQdm2OeqNG5J9Tw6CBmlljTLAAK?= =?us-ascii?Q?ZsYnkgheQoEocNhldQDWjbQcpfTbhHmOGk+9gMquRubYJpUovzK1gpkhKvsz?= =?us-ascii?Q?zFWHGEzsr2n3sKtXE3ahdrZMGf3wpSBzm+jJqCEPlJoDW+kHYseihojjB+fn?= =?us-ascii?Q?HAQvLdnx9Tb+Ejul9dO/qMOEvBS56GCAbsuEITFGLCgmPdU/ge6zXWVkF+cA?= =?us-ascii?Q?tHMOh3KtzvrdKQgqJcyddBRB8xXJ1x6tjMLmGev9kToWhwI9bWl7mFI3klRj?= =?us-ascii?Q?TSMU/abNln753o5Eiw1SAAatfOTsAKxvQ2fZZ4A0Yy+uunfCpjq59e1HsFGr?= =?us-ascii?Q?RWml6J2/9chQ9kiH9TJFI71lRCIZ1S02bEtct+mNnoCNWurIHIuGVh3Znzmc?= =?us-ascii?Q?xn2TmGmawZf2zBBde9I4sVnnI02vFM3v1qmTg0lgXhOBMXF3IIET51aU5iL4?= =?us-ascii?Q?ZHXPkxW9me6UcqfuisHgaBdZfX37FHhx4TXQORCAylWnSLNIxVSbzrOSuiji?= =?us-ascii?Q?KQnUijwdzzjTcYFL4uyCC+lNyORctsyzANV1kTnQOQHkEsf4ETqolPRWSKBH?= =?us-ascii?Q?CNrQ+NAWaLo5r5rHUNOoJ6Rq9b23FmftV5WWdE6+6aDWMrk5T1oGTIC6Fp30?= =?us-ascii?Q?CojmDvbkgJWmiOooGb92IDK/KiEfB+VFM90lBNP2e7W3JCZC5Ppt4By0vmQ1?= =?us-ascii?Q?bwXFIbJLyiXmdllnjUtahZPKCv8ALyIiG0w7Am2yaZ88yZSUDJHA9I6W0ih0?= =?us-ascii?Q?yowP/0yOGszlZgHzQdKuOalho6bkXBCOlAwP+imrkv9gGce55eqswuCvAt4E?= =?us-ascii?Q?5LkGYt8qZgzKzuJhYF977+C5kyqKdcZgpeC7/gy7w/2t6gCyJeHLA884ira6?= =?us-ascii?Q?NwTyQ+Y97zfj83QOefNxT6phxKC5VwyMZlzbZ1W1R333DO/xdxfgyB6Uk2Pr?= =?us-ascii?Q?5laj1WNcilnVmh3knezLkhzpKu6x6RxoaRns4iM07bn1DnhcMBhJSWCuyeK5?= =?us-ascii?Q?TM1dKRLvyMOsEYCfCA4ynrfLuHOn/GmYpbLJUXOMsT3M6mqvZbZBKVphxT95?= =?us-ascii?Q?GnMrSd7RZT01+HYMQv74KU/EKtLqXS7UniArxbJ5i5KsH6e+Hqdly0Zgyb1Y?= =?us-ascii?Q?2tjb8EEhXIqtlK4OCyzT5k/on7G7UBKiaGi4ZKmCcwq1a5ZmwKooiLm3xFyo?= =?us-ascii?Q?Ukh1WjPzq1gcS9gIMh5H/VOhfIAjoQMc8B65y/yIDrdvgcW13JDQ3g0Qcy+n?= =?us-ascii?Q?BU/0fs3kCEmuhqa4cavLBNb21dwQvpB8vI1dJEcv9Q=3D=3D?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6a0b1403-6772-439e-8ba9-08dc67e4524c X-MS-Exchange-CrossTenant-AuthSource: GV1SPRMB0021.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Apr 2024 00:35:51.2245 (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: PR3P250MB0068 Subject: [FFmpeg-devel] [PATCH 06/14] avcodec/mpeg12dec: Allocate dummy frames for non-I fields 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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: MPEG-2 allows to pair an intra field (as first field) together with a P-field. In this case a conformant bitstream has to satisfy certain restrictions in order to ensure that only the I field is used for prediction. See section 7.6.3.5 of the MPEG-2 specifications. We do not check these restrictions; normally we simply allocate dummy frames for reference in order to avoid checks lateron. This happens in ff_mpv_frame_start() and therefore does not happen for a second field. This is inconsistent. Fix this by allocating these dummy frames for the second field, too. This already fixes two bugs: 1. Undefined pointer arithmetic in prefetch_motion() in mpegvideo_motion.c where it is simply presumed that the reference frame exists. 2. Several MPEG-2 hardware accelerations rely on last_picture being allocated for P pictures and next picture for B pictures; e.g. VDPAU returns VDP_STATUS_INVALID_HANDLE when decoding an I-P fields pair because the forward_reference was set incorrectly. Signed-off-by: Andreas Rheinhardt --- libavcodec/mpeg12dec.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/libavcodec/mpeg12dec.c b/libavcodec/mpeg12dec.c index 21a214ef5b..9940ff898c 100644 --- a/libavcodec/mpeg12dec.c +++ b/libavcodec/mpeg12dec.c @@ -1372,6 +1372,9 @@ static int mpeg_field_start(MpegEncContext *s, const uint8_t *buf, int buf_size) return ret; } } + ret = ff_mpv_alloc_dummy_frames(s); + if (ret < 0) + return ret; for (int i = 0; i < 3; i++) { s->current_picture.f->data[i] = s->current_picture_ptr->f->data[i]; @@ -1727,7 +1730,7 @@ static int slice_decode_thread(AVCodecContext *c, void *arg) * Handle slice ends. * @return 1 if it seems to be the last slice */ -static int slice_end(AVCodecContext *avctx, AVFrame *pict) +static int slice_end(AVCodecContext *avctx, AVFrame *pict, int *got_output) { Mpeg1Context *s1 = avctx->priv_data; MpegEncContext *s = &s1->mpeg_enc_ctx; @@ -1758,14 +1761,16 @@ static int slice_end(AVCodecContext *avctx, AVFrame *pict) return ret; ff_print_debug_info(s, s->current_picture_ptr, pict); ff_mpv_export_qp_table(s, pict, s->current_picture_ptr, FF_MPV_QSCALE_TYPE_MPEG2); + *got_output = 1; } else { /* latency of 1 frame for I- and P-frames */ - if (s->last_picture_ptr) { + if (s->last_picture_ptr && !s->last_picture_ptr->dummy) { int ret = av_frame_ref(pict, s->last_picture_ptr->f); if (ret < 0) return ret; ff_print_debug_info(s, s->last_picture_ptr, pict); ff_mpv_export_qp_table(s, pict, s->last_picture_ptr, FF_MPV_QSCALE_TYPE_MPEG2); + *got_output = 1; } } @@ -2204,14 +2209,9 @@ static int decode_chunks(AVCodecContext *avctx, AVFrame *picture, s2->er.error_count += s2->thread_context[i]->er.error_count; } - ret = slice_end(avctx, picture); + ret = slice_end(avctx, picture, got_output); if (ret < 0) return ret; - else if (ret) { - // FIXME: merge with the stuff in mpeg_decode_slice - if (s2->last_picture_ptr || s2->low_delay || s2->pict_type == AV_PICTURE_TYPE_B) - *got_output = 1; - } } s2->pict_type = 0; -- 2.40.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".