From patchwork Thu Aug 18 13:46:02 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 37350 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:139a:b0:8f:1db5:eae2 with SMTP id w26csp323240pzh; Thu, 18 Aug 2022 06:46:45 -0700 (PDT) X-Google-Smtp-Source: AA6agR4KETcwMi7hSl2CBpmAupI70teNzXOKT3Tm/ccD5kjJAy3GYzr8YHs5yU3aoT//IeOsW6if X-Received: by 2002:a17:906:4fd2:b0:733:f44:c964 with SMTP id i18-20020a1709064fd200b007330f44c964mr1989837ejw.386.1660830405098; Thu, 18 Aug 2022 06:46:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1660830405; cv=none; d=google.com; s=arc-20160816; b=M2HjibRkjuRj/6nQOUkFqcQL7HS+VRYasslvzvVXOeIlO69IC/MXRW2Yh3NLWtrzU1 z8fppkzJc+zS5WGb5Rlv12CVuJNllzPQE8yPXmLzqmBfIqOdkyjp+9YklEOWHcrd0ktT cPGnYEe+Xab2GCuUL+oksTYX2g+Swmd1BC8dxk9ok7tmjWEeTDbXNN4xibJJ3/S8hbmU RlGn2druCT04pdtnK9YOdjsMIujfMD2NNmclmoFDOOLbtoa7vFhu7AsRgXDFzG8BRbBj BgfKuxDXDhYHftt8kfnCMAULMScKRSGEgSkFGmSDUTPF1BjCKPDGcXnP2eCcLoffVIRj HmHw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:message-id:date:to:from :delivered-to; bh=rPQmT6savWfLjWG9erKlAEvdGG24FWy1hOrZt8MmHOc=; b=a0cbaNDnAykEAe7LHg1F519ZHUoEu773/ndicyIzkkCMNnyiFOWYQRekmzNp7U3Mea OJjrfT7O827GCckhcO69NAkZtFw00OZkXL/vuA17TI5KsG5kgUtdetdPil3sIs3cBwJc esXM7tTvd1uNXJ2Re+3X5nB0K53QMO+crd1GSeu19kRNhBoveCtpLsxHqSBCajBpIzVx 2ee+q9FU4Q3V5hmp+AjcQEon/6tUiReo6h67H9Ws205/6DSNltrhCrJEHXkWl8slMxl3 mQrZWHkevtsmMz6DXtNi/U6qBxFTpFx/NYApk5No/mfx1Z7LwrclQWFWkYX8r/diQzS/ 5mdw== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id t3-20020a056402524300b0043e39c683f9si1396113edd.556.2022.08.18.06.46.44; Thu, 18 Aug 2022 06:46:45 -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; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A6B9E68B9A9; Thu, 18 Aug 2022 16:46:23 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9E65D68B969 for ; Thu, 18 Aug 2022 16:46:15 +0300 (EEST) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id C1B1F240511 for ; Thu, 18 Aug 2022 15:46:14 +0200 (CEST) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id ivvKAeMDKbvk for ; Thu, 18 Aug 2022 15:46:12 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:2a00:c500:561:201::7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "libav.khirnov.net", Issuer "smtp.khirnov.net SMTP CA" (verified OK)) by mail0.khirnov.net (Postfix) with ESMTPS id 5F639240506 for ; Thu, 18 Aug 2022 15:46:12 +0200 (CEST) Received: by libav.khirnov.net (Postfix, from userid 1000) id 48E803A160B; Thu, 18 Aug 2022 15:46:06 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Thu, 18 Aug 2022 15:46:02 +0200 Message-Id: <20220818134605.12583-1-anton@khirnov.net> X-Mailer: git-send-email 2.35.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/4] lavf: deprecate av_stream_get_end_pts() 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 0wsrgpQqsNYZ According to its documentation it returns "pts of the last muxed packet + its duration", but the value it actually returns right now is (possibly guessed) dts after muxer-internal bitstream filtering (if any). This function was added for ffmpeg.c, but it is not used there anymore. Since the value it returns is ill-defined and so inappropriate for any serious use, deprecate it. --- doc/APIchanges | 3 +++ libavformat/avformat.h | 3 +++ libavformat/mux_utils.c | 2 ++ libavformat/version_major.h | 1 + 4 files changed, 9 insertions(+) diff --git a/doc/APIchanges b/doc/APIchanges index b3ba07ee7c..bc355b59ed 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -14,6 +14,9 @@ libavutil: 2021-04-27 API changes, most recent first: +2022-08-xx - xxxxxxxxxx - lavf 59 - avformat.h + Deprecate av_stream_get_end_pts() without replacement. + 2022-08-07 - e95b08a7dd - lavu 57.33.101 - pixfmt.h Add AV_PIX_FMT_RGBAF16{BE,LE} pixel formats. diff --git a/libavformat/avformat.h b/libavformat/avformat.h index f12fa7d904..9d46875cce 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -1121,12 +1121,15 @@ typedef struct AVStream { struct AVCodecParserContext *av_stream_get_parser(const AVStream *s); +#if FF_API_GET_END_PTS /** * Returns the pts of the last muxed packet + its duration * * the retuned value is undefined when used with a demuxer. */ +attribute_deprecated int64_t av_stream_get_end_pts(const AVStream *st); +#endif #define AV_PROGRAM_RUNNING 1 diff --git a/libavformat/mux_utils.c b/libavformat/mux_utils.c index 2fa2ab5b0f..8b95fc5e7e 100644 --- a/libavformat/mux_utils.c +++ b/libavformat/mux_utils.c @@ -29,6 +29,7 @@ #include "internal.h" #include "mux.h" +#if FF_API_GET_END_PTS int64_t av_stream_get_end_pts(const AVStream *st) { if (cffstream(st)->priv_pts) { @@ -36,6 +37,7 @@ int64_t av_stream_get_end_pts(const AVStream *st) } else return AV_NOPTS_VALUE; } +#endif int avformat_query_codec(const AVOutputFormat *ofmt, enum AVCodecID codec_id, int std_compliance) diff --git a/libavformat/version_major.h b/libavformat/version_major.h index 5f71298bcc..099a17873f 100644 --- a/libavformat/version_major.h +++ b/libavformat/version_major.h @@ -46,6 +46,7 @@ #define FF_API_AVIOCONTEXT_WRITTEN (LIBAVFORMAT_VERSION_MAJOR < 60) #define FF_HLS_TS_OPTIONS (LIBAVFORMAT_VERSION_MAJOR < 60) #define FF_API_AVSTREAM_CLASS (LIBAVFORMAT_VERSION_MAJOR > 59) +#define FF_API_GET_END_PTS (LIBAVFORMAT_VERSION_MAJOR < 60) #define FF_API_R_FRAME_RATE 1 From patchwork Thu Aug 18 13:46:03 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 37351 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:139a:b0:8f:1db5:eae2 with SMTP id w26csp323315pzh; Thu, 18 Aug 2022 06:46:56 -0700 (PDT) X-Google-Smtp-Source: AA6agR68riZhabPSF1xRteYOGA7e030g7s/SRkh/eUtsdATxVrKCkTmjocYorTGIgl1eW5vkaMsa X-Received: by 2002:a17:906:845c:b0:730:bbf1:196a with SMTP id e28-20020a170906845c00b00730bbf1196amr1984895ejy.13.1660830416023; Thu, 18 Aug 2022 06:46:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1660830416; cv=none; d=google.com; s=arc-20160816; b=NM0Ir+zGJlv0W9b6WmHbYNfUOj8kMAV+19XLrT8dKmbH8hnWFYImzXz6sMPh/B+ihc hApgdGNgzSunqjsNTDDOVmgf1uUUfltfVrtcvPQm5tsO4DERSLbgwHEyeTlMIBfPBfGS 0Q+8/hP0ZNFFi025wQxvj723L/KpY6BNcogmp6FYxSSAYM4fBT1ezrv6J2BNHYog+zRZ njRSyqIVTw97FULesymOcvtVVdhxcxbLykTNxiSbF83TFWMnkirHuEqlIHrnSHlU8JCp uRTttT1oFT8vrag+OdS7XB9TrntnbWrLi5F2BWtoaQinxW4LQtuLBt8MbUN4PLXjCEJB Oaug== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:delivered-to; bh=v7eTXZ6SnhE/yzp7YU6UAEkujoXe4XpTLAt8JYZjCuw=; b=J1n6flk/70rQgh1OO1tm3Wobs8Yee6idLDsv2xcCJ7KHiaXmyHx6Iftp1by+VvBh+2 BQn3OudFQvqv4FTchawfNlh2Jh47WZfDUNLvXq0DcCS6gYQ2QQkvwosnmAmRqs08PKZE ikiyxg+z7RZio6Mj5smTHFLD5rcMuUYvhg3UTXb0sZTYwpjKIWfTl9U60rnQmM05FH9t hLr01BRokdZ1IdtIVoAgPNmaus8Cc7Xm3V6L7Y+cKhjDMUB91Gs3XD0Qh60HgJhRYqAR eKM+FS4jkZnLBryLLr5PplD5aLkq5IYNwCQMZ2nXeVGUlz/cD2Vm26PDqu884LjIZHnX z6eQ== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id c14-20020a0564021f8e00b00445db771c57si1091410edc.133.2022.08.18.06.46.54; Thu, 18 Aug 2022 06:46:56 -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; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9E59468B9AE; Thu, 18 Aug 2022 16:46:24 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A11BB68B972 for ; Thu, 18 Aug 2022 16:46:15 +0300 (EEST) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 031FF240506 for ; Thu, 18 Aug 2022 15:46:15 +0200 (CEST) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id bBhNZKv-OZCo for ; Thu, 18 Aug 2022 15:46:14 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:2a00:c500:561:201::7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "libav.khirnov.net", Issuer "smtp.khirnov.net SMTP CA" (verified OK)) by mail0.khirnov.net (Postfix) with ESMTPS id 6A41724050B for ; Thu, 18 Aug 2022 15:46:12 +0200 (CEST) Received: by libav.khirnov.net (Postfix, from userid 1000) id 4A7E13A0520; Thu, 18 Aug 2022 15:46:06 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Thu, 18 Aug 2022 15:46:03 +0200 Message-Id: <20220818134605.12583-2-anton@khirnov.net> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220818134605.12583-1-anton@khirnov.net> References: <20220818134605.12583-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: sqeBlDLjNlTM 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; From patchwork Thu Aug 18 13:46:04 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 37349 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:139a:b0:8f:1db5:eae2 with SMTP id w26csp323165pzh; Thu, 18 Aug 2022 06:46:35 -0700 (PDT) X-Google-Smtp-Source: AA6agR7rbD2HrGWiijUHDHvI1t1L/ZV7oYX/TaIcSCZK+/vfbjapKITpTnghXcgB9vOj2Ghavcfv X-Received: by 2002:a05:6402:1703:b0:43c:c03a:db3d with SMTP id y3-20020a056402170300b0043cc03adb3dmr2360447edu.384.1660830395705; Thu, 18 Aug 2022 06:46:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1660830395; cv=none; d=google.com; s=arc-20160816; b=0ooKZCESPiRwLJqJTWKdKfEqnMtqsYnZevAEni82bsre/pYrVmRn8qs0ZrpoQJ1Fht WR7DgV4JGTWoozAgxsZBnAdIN1lYbopU7aOamsqCMVeSBJTd0TKkZoo6CelVaE5oe8i6 4aAIVOXlx0CncxqKJtEMPTjjej08IrqIj/zxmJemS3Id16M3u2fv5iNLNNsmBSd4/eIb jhlV6/+SgfC7lvjJA18DwvPBYiieRKOu2cDdqSqoEdCE0/mw/nNq71dj0DwGUq/96BBb 4gN5Psa/+577/d0B7dq9yp7mCbwslLzG50kVWe9VakY88jHZIiFdWzPYz2SbU+IZvkAs bS2A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:delivered-to; bh=xIXTx43wO2Ild1kG2iuvZ0141Eow+n3Q8RuM5Kk+d9A=; b=yID1OwzL08g7FLSjkJpYNgoTLlBt6RX1Z60aL//JlXMOwpDWeW/sz+5d2ugmbKtzcp hlZgj0FJ0nLZiFAsv5zFp0w4+JocbcI7HQiFT5OKI+k/KZn1Tn/8KaEVKRdh+3uOWOuZ 7PS29cZaxiMdmetKUCzmRp32fLuGOwreS30Y7PzSpU3nrGpqNOCDb/+dbKzhV0JK1A+P 0utUGH5orvNX9ng/gIAgFIxMOZPzkIC+0WRC0b58AYlDtPU0IKwk76P1N5amp2UOHHu4 in73uWNJVZt3lPmp6JnIgu8SGbLvbA+sRMGIQtQhZz02YRcgeL0RNjUIFk7EEVHE3N1u eG0w== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id dd10-20020a1709069b8a00b007306064f323si1254878ejc.531.2022.08.18.06.46.35; Thu, 18 Aug 2022 06:46:35 -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; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id AA03D68B934; Thu, 18 Aug 2022 16:46:22 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9BD3A68B915 for ; Thu, 18 Aug 2022 16:46:15 +0300 (EEST) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id BE1D6240512 for ; Thu, 18 Aug 2022 15:46:13 +0200 (CEST) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id b5NxpEShEC3X for ; Thu, 18 Aug 2022 15:46:12 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:2a00:c500:561:201::7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "libav.khirnov.net", Issuer "smtp.khirnov.net SMTP CA" (verified OK)) by mail0.khirnov.net (Postfix) with ESMTPS id 6848E240507 for ; Thu, 18 Aug 2022 15:46:12 +0200 (CEST) Received: by libav.khirnov.net (Postfix, from userid 1000) id 515313A168D; Thu, 18 Aug 2022 15:46:06 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Thu, 18 Aug 2022 15:46:04 +0200 Message-Id: <20220818134605.12583-3-anton@khirnov.net> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220818134605.12583-1-anton@khirnov.net> References: <20220818134605.12583-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/4] lavf: deprecate 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: crqTw80fRMQy It retrieves an AVStream's internal parser, whose state is not well-defined from the caller's point of view. This function was added for ffmpeg.c, which is no longer using it. As there is no valid use for this function, deprecate it without replacement. --- doc/APIchanges | 3 ++- libavformat/avformat.h | 3 +++ libavformat/demux_utils.c | 2 ++ libavformat/version_major.h | 1 + 4 files changed, 8 insertions(+), 1 deletion(-) diff --git a/doc/APIchanges b/doc/APIchanges index bc355b59ed..078f9de223 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -15,7 +15,8 @@ libavutil: 2021-04-27 API changes, most recent first: 2022-08-xx - xxxxxxxxxx - lavf 59 - avformat.h - Deprecate av_stream_get_end_pts() without replacement. + Deprecate av_stream_get_end_pts() and av_stream_get_parser() + without replacement. 2022-08-07 - e95b08a7dd - lavu 57.33.101 - pixfmt.h Add AV_PIX_FMT_RGBAF16{BE,LE} pixel formats. diff --git a/libavformat/avformat.h b/libavformat/avformat.h index 9d46875cce..7c36972735 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -1119,7 +1119,10 @@ typedef struct AVStream { int pts_wrap_bits; } AVStream; +#if FF_API_STREAM_GET_PARSER +attribute_deprecated struct AVCodecParserContext *av_stream_get_parser(const AVStream *s); +#endif #if FF_API_GET_END_PTS /** diff --git a/libavformat/demux_utils.c b/libavformat/demux_utils.c index 56cc6e15d8..d8cbcb630c 100644 --- a/libavformat/demux_utils.c +++ b/libavformat/demux_utils.c @@ -29,10 +29,12 @@ #include "demux.h" #include "internal.h" +#if FF_API_STREAM_GET_PARSER struct AVCodecParserContext *av_stream_get_parser(const AVStream *st) { return cffstream(st)->parser; } +#endif void avpriv_stream_set_need_parsing(AVStream *st, enum AVStreamParseType type) { diff --git a/libavformat/version_major.h b/libavformat/version_major.h index 099a17873f..2747767768 100644 --- a/libavformat/version_major.h +++ b/libavformat/version_major.h @@ -47,6 +47,7 @@ #define FF_HLS_TS_OPTIONS (LIBAVFORMAT_VERSION_MAJOR < 60) #define FF_API_AVSTREAM_CLASS (LIBAVFORMAT_VERSION_MAJOR > 59) #define FF_API_GET_END_PTS (LIBAVFORMAT_VERSION_MAJOR < 60) +#define FF_API_STREAM_GET_PARSER (LIBAVFORMAT_VERSION_MAJOR < 60) #define FF_API_R_FRAME_RATE 1 From patchwork Thu Aug 18 13:46:05 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 37348 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:139a:b0:8f:1db5:eae2 with SMTP id w26csp323077pzh; Thu, 18 Aug 2022 06:46:26 -0700 (PDT) X-Google-Smtp-Source: AA6agR6FASi5JtF46dC434Nh1AnTYi+vqFLuLguj7Sc4RkRy9GhCoVnoiEKiJXkbyBFZ6UCBtGJO X-Received: by 2002:a17:907:97d2:b0:730:657f:bef5 with SMTP id js18-20020a17090797d200b00730657fbef5mr1913056ejc.757.1660830386143; Thu, 18 Aug 2022 06:46:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1660830386; cv=none; d=google.com; s=arc-20160816; b=dYva1vEA0UGbC8TKZ/jtf8yWFbJq+/prEeUZsobdzeM9BCVcPLKVy0k3+n8fkgq2oo BIscoBITHfnkuk+9zP9jFwga7ZKKijV/ee0vxkeawJDFlf64b0ExqwZKwfj0HDRp3BVc SE+AtiNxmocSy6gfjiUuNjJrXm4E+g7EJiXhJ16KWdWVreIznjOnRFmNws49ZgYlKEMJ lTSC2dy+spJNNpAX/Cz0Mc2GNBuhwSHhvTWnD4aVfzLbSARMvDEcXGqwcTUWhn+06kPK pqLI3/uszCrzIOyOUA2HT4Von/E04DqCw2IrKwreboawCVQ/ZpGlSeIApyZcHp012bud DjFQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:delivered-to; bh=sime+z/VDDekgf+kN9MdIQLAfVls95KdsDeDD3DZULU=; b=kV80kzH+EazoQufTRhJfsBRsk2TolDnD4kFzwVV+wMFucRQ+1KGNYkDoisn01xiGAo sE4j23UXKwVIWz/houFD7rgooeaB9UhJ/YAKch/Y1NrfbaWV7QL5WzPRaAeTDWliMMJM OlT2Wi5x0iCcg3/xFquZJU1GJzx4xydmcsukj7YhNm1d4oPEYqvWZaSXjKGpmzLg4g7f Bwq6pLxXMG8IgDqk00IUD1CZMsa+nHO8KX+bNBJv6TOsjZz7UtIwx2YfpbFo6WT3osnE V14l8rJFHjZpua2/l8bAYuBcof5LfWfEjoQ8WKmuLy9O0N+tB1y/675E4DjRAnu6UgX2 pqaw== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id s9-20020a508dc9000000b00445ec0f51c5si1005669edh.302.2022.08.18.06.46.25; Thu, 18 Aug 2022 06:46:26 -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; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8AA7268B99B; Thu, 18 Aug 2022 16:46:21 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9A1A568A6D0 for ; Thu, 18 Aug 2022 16:46:15 +0300 (EEST) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 52B7F240507 for ; Thu, 18 Aug 2022 15:46:14 +0200 (CEST) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id 9me5ies8P7CJ for ; Thu, 18 Aug 2022 15:46:13 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:2a00:c500:561:201::7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "libav.khirnov.net", Issuer "smtp.khirnov.net SMTP CA" (verified OK)) by mail0.khirnov.net (Postfix) with ESMTPS id 6BA3B240511 for ; Thu, 18 Aug 2022 15:46:12 +0200 (CEST) Received: by libav.khirnov.net (Postfix, from userid 1000) id 55D5E3A169F; Thu, 18 Aug 2022 15:46:06 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Thu, 18 Aug 2022 15:46:05 +0200 Message-Id: <20220818134605.12583-4-anton@khirnov.net> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220818134605.12583-1-anton@khirnov.net> References: <20220818134605.12583-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 4/4] fftools/ffmpeg: call av_guess_frame_rate() when opening the file 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: Ca3R8B7LDymb It is currently called when configuring the filter, which races with the demuxer thread. --- fftools/ffmpeg.h | 2 ++ fftools/ffmpeg_filter.c | 2 +- fftools/ffmpeg_opt.c | 2 ++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h index f67a2f1d1d..ee3ae8120e 100644 --- a/fftools/ffmpeg.h +++ b/fftools/ffmpeg.h @@ -343,6 +343,8 @@ typedef struct InputStream { */ AVCodecContext *parser_dec; + AVRational framerate_guessed; + 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_filter.c b/fftools/ffmpeg_filter.c index f9ae76f76d..16622e49c1 100644 --- a/fftools/ffmpeg_filter.c +++ b/fftools/ffmpeg_filter.c @@ -738,7 +738,7 @@ static int configure_input_video_filter(FilterGraph *fg, InputFilter *ifilter, } if (!fr.num) - fr = av_guess_frame_rate(input_files[ist->file_index]->ctx, ist->st, NULL); + fr = ist->framerate_guessed; if (ist->dec_ctx->codec_type == AVMEDIA_TYPE_SUBTITLE) { ret = sub2video_prepare(ist, ifilter); diff --git a/fftools/ffmpeg_opt.c b/fftools/ffmpeg_opt.c index a505c7b26f..0810bd0b9e 100644 --- a/fftools/ffmpeg_opt.c +++ b/fftools/ffmpeg_opt.c @@ -1074,6 +1074,8 @@ static void add_input_streams(OptionsContext *o, AVFormatContext *ic) exit_program(1); } + ist->framerate_guessed = av_guess_frame_rate(ic, st, NULL); + break; case AVMEDIA_TYPE_AUDIO: ist->guess_layout_max = INT_MAX;