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 0574D43622 for ; Thu, 18 Aug 2022 13:58:49 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 50FF268B995; Thu, 18 Aug 2022 16:58:46 +0300 (EEST) Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-oln040092075053.outbound.protection.outlook.com [40.92.75.53]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 99DBE68B987 for ; Thu, 18 Aug 2022 16:58:40 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=f1rzxqfInAykDgZ95BxgDjx0+hmvrJq7iQzZytZPvIekKbTdenRwWZMVxOXn3hzH43CXJXNe1EB06KmcANChZOx7NoF7QMfB06x/jZTqTiHEKaiwObap6WdGPOvyGupqlSXqjytjHanWdjMHuOBRO+4yJdjVtzNFGO3KwqUFbLn87K1Xf85gRJx+M4Ah7MVprVqtlF7++7MgzPc6wo3Qld4Pi5YM0pTunlHfYWSPdLMFSmDMuY0EEoaxE2VSUHqv8E8wmaMj/Yyie/EspMpVzJpYz8ZhbCgaXUtdQA6WlmkTz8nA5BOqfQF7ohm8zou0xMLUtMfO6BRRiuifZLivdg== 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=a0BzTHhOF1tz0hd0tVsfGRVncYt+OZ4o/mIkslcsw2M=; b=iRmZ9nsRDKEDN3IZwynHi38uSWHv8OvMbePUcOdQdCPP4j8cjSeMRkLmb5iPpgshwSvabcQpel2e5eGWBDX1EirWyRDNDnJ93TIXb4Qy28m6Af5LqePFI42fCsmTybECcvN97+mIRbC8zlhZg2UtVRVYPAAaStZDeZIVC5WDDNcdGZSIIV8VQEG7m/SsWdXisBFULT6OG+wJVnW7zpUmD6r23MHV8Wi/m1hi/GEhgCnYsDoQldtY1UK4oTbo86D/hpoBfDtE03EYO0i1gmpCpXTXG8SNWYUtVM8lF23B/YcPX1DHkDT27Jl3FVqXcSLuoFJfqMsbZwPlPidxKyqltQ== 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=a0BzTHhOF1tz0hd0tVsfGRVncYt+OZ4o/mIkslcsw2M=; b=JPbQx23r4cdfk58kxTRsfYlb9meBhD7DQ6lyfGn7E44/QtLGzMwqSoubWLTeClKFCsUK9/2y3vW84o/SFyIGq1cY4OVwqPiKkhzydI4oycPBZPS3JsbEu1Ot5tUyFJjRnctupIy1X4zAXgSll4ZiQsopaKnoWyDAX/uMXqNM1zlKfGJ5J2ZdjUDZkwYQOWqvTs72oeL3/zrAmS39jLxuvOP9RLDhjhnOCp9Z60wlrS7PPfePJWdq5uKdqXp8aD510Y8HrRU4QRg54oCM2W+gjSk/ysJOngSOGARBqxw1HAz3upg2kUuC0IS+d4YfIdf0qONjLOZpdhAp2JVfuE7sBA== Received: from DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) by PR1PR01MB4891.eurprd01.prod.exchangelabs.com (2603:10a6:102:6::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5525.19; Thu, 18 Aug 2022 13:58:38 +0000 Received: from DB6PR0101MB2214.eurprd01.prod.exchangelabs.com ([fe80::210e:b627:bcc9:8c46]) by DB6PR0101MB2214.eurprd01.prod.exchangelabs.com ([fe80::210e:b627:bcc9:8c46%11]) with mapi id 15.20.5504.028; Thu, 18 Aug 2022 13:58:38 +0000 Message-ID: Date: Thu, 18 Aug 2022 15:58:37 +0200 Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <20220818134605.12583-1-anton@khirnov.net> <20220818134605.12583-2-anton@khirnov.net> From: Andreas Rheinhardt In-Reply-To: <20220818134605.12583-2-anton@khirnov.net> X-TMN: [z2qioMjWkdzAXijN0UFJvNZjpTJB1ORF] X-ClientProxiedBy: ZRAP278CA0009.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:10::19) To DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) X-Microsoft-Original-Message-ID: <02f6b7cf-0d15-7200-32ed-6108bffcfac2@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: dc61f7c0-276f-4507-d905-08da8121c010 X-MS-TrafficTypeDiagnostic: PR1PR01MB4891:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 14z1gJjK1he9PEBHJsnnLeM4ovU5V2yr0K9c4iiNIJYmxcAZUdh43EXABb0dQJ+G72ik0L12CZlcv9rOyD2QJ2yalFTZE0po6xVmtnAgIU/eHZG+8e5XFUku+uZYuEovBtY0jbjcSEzCpyWPNwAcLk12IqIj0MG1PAMKW3Vqcpksjo5CVk1NiwkPslrXSWrq6E0pT7+mnvIaytthYkN86/EYXGUm8d/f9olxs8w6AH7MOuh3qfjocMmNNZ8Vra3+irGoc8LfHJEURDT3DZGpQIBK2OYhD8NZ/X2F0ia+rAkT5RfCghm15v9gKtXpjJ5wo6C7e1AZUKuZoWQJUFO8dF6Ai879K/+bSQYYx1c7QR+nrBeeN/g9Wt472R7fmCrBBMS+EHVzo80K1sEdEg1WEJZoYeuG+50XbGi9sFJZXUAXffli51Ty2P9t2zq/ZyDvlvRxnXetn1twZ7c1Fkzxr5XZS/Ouq3LGPQl0ekfIp14uwVOVS2hJdIxXkbn9S9WDNU96QjPvkiZK/rLjacQiBm+okUn/FCA59gP4ZUFxa4Wj67IPR8WfSmFG+F+FAjl6Qn4NDpLzMRA/TakxYPwHUgDNqwDaFpiW8RmGn3Zcc95n4veah3CYlncjcUaRNAQovilIVCP0F4vTP9aoOF+VfLz1KDpVoS4k8c4WHeV5AJaAoeWLZpDzgCd9Sz54nUms X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?L2JFcFppWURPVytTWHZKWEZnOXBlNFN4eEhZUXJxYkFMK09ZTlh4dW5EVUdQ?= =?utf-8?B?dSttMm1Zclk4OHdnNXFxSFhMNi9TVVpySGNnSDZJTWVlb3JlUjR2MWFKaXVZ?= =?utf-8?B?RmFSZS8yNW8xWEN4Rk96eCtQalFBTkRnTkFKLzYvbjNwRGRPMFFHdmFKRDIx?= =?utf-8?B?ckozTGxiV0RyekNRUVA5bWE4WHhsUFBwUUVFUnMrVTNMai8zR2NLQXQzdk5M?= =?utf-8?B?K0NyT3FFdUV1dWtaZTZrYlJTM3IxZ29WUTZTTGdDOVRZQzJXbUpGb2M3RzVw?= =?utf-8?B?a2NmZGZSYjVTOC9LRlhWZjd6MU5GaUtha0d0VHZEMnZxdWZUQ0NhcWF2aGdw?= =?utf-8?B?Q2Y0Rm9xSXh6ZGxTV2N0MzNxRnFKTnFzRkhvbDMxN05rc3dEUEk1bXMvUGZZ?= =?utf-8?B?V2JMcDBTWXJMOVpXVVcxQ1hWeEhUa0FZbjBaZENhR1RKb0I2THFqb3BBclRC?= =?utf-8?B?eXJ2NjJ0ZnU5ZVFiNnkwRFVMSnVRVnRQZXFZdzdhcFh4MzM5bjYvVGVEYkgv?= =?utf-8?B?eVRTblJMb3dzaGZHR1V6ZlE1YVVDWlhIZWlZN0dqaXoxQkp3bkw0UC9DMFhx?= =?utf-8?B?bGVZS2RrVmxUNENNNjBiVnNIZGlLR3J6VlFvb05YQ01Qck4rd1NqVE1ud2tM?= =?utf-8?B?ZjAzeXFGZkZLTUx2MGgxVnQyckZxa3Y5L2hzV2VGVWozb2hqcytObHl4dUdJ?= =?utf-8?B?YlhHZkhBMlFoeXZYMHNPM3VKdkVuL29GdnVlZHFUbW0rcUs5ZlJ4dHJ3bmlF?= =?utf-8?B?T2dKNzhtQU56b1BrZWpTdCtXbDRuUC8xL09MTW5scTdFQi9kam42cUxtZ2U3?= =?utf-8?B?Qm5ITWVPbFBTZURieWZFY1FKUzFRdDZOdW8vOGRoYU9Cc2Z3TzZFK3R2Szdp?= =?utf-8?B?N2RoVVBjTjNma2ZOMEdpb0VpMWdsRTc4SXFYL3ZjKzVzcDhEVzlaWTRmQXJM?= =?utf-8?B?bjM2VGQ2NDhjZ1BjMW5RbEJWVytabmc5Z001NVRvTTRkRFNXQi9Fa0FzZFVn?= =?utf-8?B?aUx1aTdBV3lRQkVwMXFiQmVzUmN0Q2pDdHFtYXZPcXNkY0FqbGNTYnZtZTI0?= =?utf-8?B?aER4bWFCdW9MaXJ6MGVPL21XL3ZOdU1YeVRMZzM1NTljZUJrcEpHTjdPNk1h?= =?utf-8?B?dGNKZVgxQnpqNVVObGJGK3FybnJHOURwRVVLV3dwNzNHVmxJVFZVdDdlQ0FT?= =?utf-8?B?cGVLNWtyMHJyditDakpuWm1lNndPRnlRY2Y0bk1GeFJEMGIwaks0RDloeTBQ?= =?utf-8?B?eTFKbXc3Zk15UkpHMy85TmUxU0tRZlliTlZjTzYrcFN1OWNDSXV2cGJsK3Zq?= =?utf-8?B?RzRIUEw0aGhoVUpPdjU5aXpUU2REa0FBMEJDZXN4SXJCK0lyaGdGZFQxZEcr?= =?utf-8?B?eHVaaHhKVFRJc2lleXhKK1o3dHM5YjVRM0EwVHEwajA5dHYzQW9mKytrZDdo?= =?utf-8?B?SnBrTE5rdzArNm9MQUdXZmd0NmQrYzRnNUJDZThUYjZXSSs2d0NONTdlWVlR?= =?utf-8?B?cjhnQVJ1RzF0SXZkeUNJODlSMVF4WHhieFZQTDZLVnQybHlaZ09JalBaai9T?= =?utf-8?B?MitHclRDTEFJcFJlcVNQS0g3OUtCcFFvalM2SndYc1M3cmtxbmxHZU1qbVcz?= =?utf-8?B?bkQzRWlxbWM2UkZ0VDlYQU1TR0pwbmhES3JCWmI2b3ltNjNncktwNUJTcFBO?= =?utf-8?B?c2V3Ry8wOE90UEdvY0FzQTJMRFF4NVNibUtYdGVScnBwUUNNSnhySFI0VmtB?= =?utf-8?Q?MTjuHC2Metv2lBSKYk=3D?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: dc61f7c0-276f-4507-d905-08da8121c010 X-MS-Exchange-CrossTenant-AuthSource: DB6PR0101MB2214.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Aug 2022 13:58:38.6642 (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: PR1PR01MB4891 Subject: Re: [FFmpeg-devel] [PATCH 2/4] fftools/ffmpeg: stop using av_stream_get_parser() 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 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: Anton Khirnov: > The parser is internal to the demuxer, so its state at any particular > point is not well-defined for the caller. Additionally, it is being > accessed from the main thread, while demuxing runs in a separate thread. > > Use a separate parser owned by ffmpeg.c to retrieve the same > information. > > Fixes races, e.g. in: > - fate-h264-brokensps-2580 > - fate-h264-extradata-reload > - fate-iv8-demux > - fate-m4v-cfr > - fate-m4v > --- > fftools/ffmpeg.c | 33 +++++++++++++++++++++++++++++++-- > fftools/ffmpeg.h | 9 +++++++++ > fftools/ffmpeg_opt.c | 9 +++++++++ > 3 files changed, 49 insertions(+), 2 deletions(-) > > diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c > index ef7177fc33..580df0443a 100644 > --- a/fftools/ffmpeg.c > +++ b/fftools/ffmpeg.c > @@ -610,6 +610,9 @@ static void ffmpeg_cleanup(int ret) > avcodec_free_context(&ist->dec_ctx); > avcodec_parameters_free(&ist->par); > > + avcodec_free_context(&ist->parser_dec); > + av_parser_close(ist->parser); > + > av_freep(&input_streams[i]); > } > > @@ -2421,6 +2424,15 @@ static int process_input_packet(InputStream *ist, const AVPacket *pkt, int no_eo > ret = av_packet_ref(avpkt, pkt); > if (ret < 0) > return ret; > + > + if (ist->parser) { > + // we do not use the parsed output, only the > + // filled codec context fields > + uint8_t *dummy; > + int dummy_size; > + av_parser_parse2(ist->parser, ist->parser_dec, &dummy, &dummy_size, > + pkt->data, pkt->size, pkt->pts, pkt->dts, pkt->pos); > + } > } > > if (pkt && pkt->dts != AV_NOPTS_VALUE) { > @@ -2452,7 +2464,8 @@ static int process_input_packet(InputStream *ist, const AVPacket *pkt, int no_eo > if (pkt && pkt->duration) { > duration_dts = av_rescale_q(pkt->duration, ist->st->time_base, AV_TIME_BASE_Q); > } else if(ist->dec_ctx->framerate.num != 0 && ist->dec_ctx->framerate.den != 0) { > - int ticks= av_stream_get_parser(ist->st) ? av_stream_get_parser(ist->st)->repeat_pict+1 : ist->dec_ctx->ticks_per_frame; > + int ticks = ist->parser ? ist->parser->repeat_pict + 1 : > + ist->dec_ctx->ticks_per_frame; > duration_dts = ((int64_t)AV_TIME_BASE * > ist->dec_ctx->framerate.den * ticks) / > ist->dec_ctx->framerate.num / ist->dec_ctx->ticks_per_frame; > @@ -2555,7 +2568,8 @@ static int process_input_packet(InputStream *ist, const AVPacket *pkt, int no_eo > } else if (pkt->duration) { > ist->next_dts += av_rescale_q(pkt->duration, ist->st->time_base, AV_TIME_BASE_Q); > } else if(ist->dec_ctx->framerate.num != 0) { > - int ticks= av_stream_get_parser(ist->st) ? av_stream_get_parser(ist->st)->repeat_pict + 1 : ist->dec_ctx->ticks_per_frame; > + int ticks = ist->parser ? ist->parser->repeat_pict + 1 : > + ist->dec_ctx->ticks_per_frame; > ist->next_dts += ((int64_t)AV_TIME_BASE * > ist->dec_ctx->framerate.den * ticks) / > ist->dec_ctx->framerate.num / ist->dec_ctx->ticks_per_frame; > @@ -2688,6 +2702,21 @@ static int init_input_stream(int ist_index, char *error, int error_len) > assert_avoptions(ist->decoder_opts); > } > > + if (ist->parser) { > + AVCodecParameters *par_tmp; > + > + par_tmp = avcodec_parameters_alloc(); > + if (!par_tmp) > + return AVERROR(ENOMEM); > + > + ret = avcodec_parameters_from_context(par_tmp, ist->dec_ctx); > + if (ret >= 0) > + ret = avcodec_parameters_to_context(ist->parser_dec, par_tmp); > + avcodec_parameters_free(&par_tmp); > + if (ret < 0) > + return ret; > + } > + > ist->next_pts = AV_NOPTS_VALUE; > ist->next_dts = AV_NOPTS_VALUE; > > diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h > index 44cc23fa84..f67a2f1d1d 100644 > --- a/fftools/ffmpeg.h > +++ b/fftools/ffmpeg.h > @@ -334,6 +334,15 @@ typedef struct InputStream { > AVFrame *decoded_frame; > AVPacket *pkt; > > + /** > + * Parser for timestamp processing. > + */ > + AVCodecParserContext *parser; > + /** > + * Codec context needed by parsing. > + */ > + AVCodecContext *parser_dec; > + > int64_t prev_pkt_pts; > int64_t start; /* time when read started */ > /* predicted dts of the next packet read for this stream or (when there are > diff --git a/fftools/ffmpeg_opt.c b/fftools/ffmpeg_opt.c > index 30ca5cd609..a505c7b26f 100644 > --- a/fftools/ffmpeg_opt.c > +++ b/fftools/ffmpeg_opt.c > @@ -1065,6 +1065,15 @@ static void add_input_streams(OptionsContext *o, AVFormatContext *ic) > ist->top_field_first = -1; > MATCH_PER_STREAM_OPT(top_field_first, i, ist->top_field_first, ic, st); > > + ist->parser = av_parser_init(ist->dec->id); > + if (ist->parser) { > + ist->parser->flags |= PARSER_FLAG_COMPLETE_FRAMES; > + > + ist->parser_dec = avcodec_alloc_context3(NULL); > + if (!ist->parser_dec) > + exit_program(1); > + } > + > break; > case AVMEDIA_TYPE_AUDIO: > ist->guess_layout_max = INT_MAX; Are you aware that some parsers (e.g. the HEVC one) are still slow even with the PARSER_FLAG_COMPLETE_FRAMES flag and consume non-negligible amounts of memory? - Andreas _______________________________________________ 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".