From patchwork Mon Sep 25 23:54:30 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 43910 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:2a18:b0:15d:8365:d4b8 with SMTP id e24csp1558517pzh; Mon, 25 Sep 2023 16:53:43 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEblAtSERTVwksq7BxO4sMg7yQ2s6ZZMinTOO0iTAZ/R5uYX2MRv1DdPGhDYHOsBsTycuJA X-Received: by 2002:a17:906:328a:b0:9ae:284:c93d with SMTP id 10-20020a170906328a00b009ae0284c93dmr7049214ejw.5.1695686022882; Mon, 25 Sep 2023 16:53:42 -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 he36-20020a1709073da400b009b274a57049si5991328ejc.828.2023.09.25.16.53.42; Mon, 25 Sep 2023 16:53:42 -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="WW/u+0BJ"; 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 70B1768C9EB; Tue, 26 Sep 2023 02:53:38 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR02-DB5-obe.outbound.protection.outlook.com (mail-db5eur02olkn2038.outbound.protection.outlook.com [40.92.50.38]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9816F68C734 for ; Tue, 26 Sep 2023 02:53:31 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=aKW7QR8pktnKghFas8HqZaZT+Dd4eGPir5WWJQERMBa/PS8QADyVD4rSeUF0fg1vG27mRbjtCHpIB3fc5N+c1EAy6Abi99kRQ6UyDXNH19MkmBokaxpFlVW0vGOepXQIpy/omdwCJfmciooUCt2AnJ2MGYITcCUlbq01bhzzZl/Gw7JvLcnwRpUBaP/W8amlaOqslhT1qri0oJGjGDLYH5vSmwBwOOhMlEq++ECQaYEHdfBK/FLcU44f6glOg5hOW2iEAEQPlqa9s5Wno/5KVtxYHyMM1AtzPGpqBfHsA4ZWyRAvamTiEpFnVEsT1ow4LF73l6uwCdI3xRbplzx7CA== 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=gLWuVZjO5ZRWEyQ16L9WnPEzXeSsPC7QVPwfNG/ZTfg=; b=QDzZQKywPq35gU21qT8iJ8zvRNkUpsL0lTb/sQrVN2EPocFEmx5WCWAmlUf4Y3eK1fU5DpTURHVueQ+6X18czedAIKOHYU0PzhnjdzpXUl/a71vyEko7OGKBN4SO8dCeFNj7KYn8Q7ksUgo1CBpcymEqL6mbl+TW4IsavRN94kfsJj5Vzk4FXIZ9oMkiDGJt52NJEiUIJ6D/Auqc47of+wpslAI7nHd0JLHf1oPbgpD4kgHle/rWXeS5LCIVUJJxtCQuVntXllD5p3pXnd3nFmfgTIFmWIAJ0Y5+/+oeUE8inn57GIfHMyUgkOiz+9uWebd1fRGz/eGKRO37AcMTXw== 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=gLWuVZjO5ZRWEyQ16L9WnPEzXeSsPC7QVPwfNG/ZTfg=; b=WW/u+0BJctLlyuvkxQC02vYddK/+ueUEQ7VKX4wSogVT48qm/9CEgi9owjITk4sZsBB7a3TWN4o3THqnb35hDZQO2x2O4BFBQ25AfhEydCgmrQX0B9XO32cFYyl9P24KC2koB3YzUbKKTBw1fSlQtTcOU0ZF+BqIlBNV6NxgU5daqHkEb6t8uKvyUCd6ppTH3HIWgP5l2jBLx3tGZqm8NX71K9Z9gqaRJRykNKGyoh4hA/NY5McxIj0n7W6kR9n8N+DfqO6dVd7z0NQcRHodIxh18u6TSFeCwMecGJQJ0KfhLUvq1fpdyRALRsi1XufZxOP94FzVoqSZs+R4Ysr+Eg== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by DU2P250MB0146.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:273::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6813.28; Mon, 25 Sep 2023 23:53:29 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::5e01:aea5:d3a8:cafa]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::5e01:aea5:d3a8:cafa%3]) with mapi id 15.20.6792.026; Mon, 25 Sep 2023 23:53:29 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 26 Sep 2023 01:54:30 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 X-TMN: [qNwfRiw+S0n+24vib3jxIJJU4FQeVRb+] X-ClientProxiedBy: ZR2P278CA0018.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:46::16) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: <20230925235432.2668309-1-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|DU2P250MB0146:EE_ X-MS-Office365-Filtering-Correlation-Id: eb8f815d-9b86-4ab6-7492-08dbbe229bb0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: lKnd00SndXXqtCNPeDTvLTK0M3z6UgyXldOP7n5rECy3i8pnA02iMaujMn7hUQDc82p0jFSw84hl7gLFhRSiD7eGybdzsNa/TzewruxDgB6n3ztxErOfEm7nAvC0Q0ezkVJSVJPK9wR8zffag0nwXWQV8PvzmwNW7TsGqvcgMRbEXSHamTgrQPC2Vrp0EL8FRYEqN70XiPvURohWV4C8WPG3v6XObKv0SaOMA8qpruayxRHIDZT1IKWiqwH171uVfHDPujDH5IHF0jU78SWjGmMGY00cjA8XII59VNOHp2dAAbRypHdrjCJdFfMGs/IK8wka/24gVFzmGKsWSfp2IykcAsNCSrkX3bJNPFzVu3II4J+AwL5THDs3wsGPl0vHt8IPNbHkT3ykjmVlZMc3D6uik9ryEIy334dVD2mH7EkQ72NkfgZh0aqNFwFOEmX0KSOzAYZfYBWg217+klU5xmaQDpJDHR5aoyQa26QHDQm27GnXYZCMRAKk9a9KT163KYNlG+tayKr6sv3BMteiap2gnOAyHbT3D15GVuZvI9YdtbrtkkFxregrvuIhMqz7tHpHHOmq/h1xRkdu7MTqUhRlr+57Mzjqsn8Xn+XFvaE5HTItrfh3NwOdEkEH697+ X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: HH5r4fd278w4L6Jd2WUhpLIUWA6fGAX4vO9ALsSIqEn0oFUURvph4e402++PPObl3LzlH5odU8AjClaJZEi4t4MI7fkjPTGzeqL94iCkSHnRldIpNXxpJ1BBbBRuHaqsjOUaryyhKlyJgBbu6jZVr+9rlhdSDxOVyMWID8k/WLTG0x6DgfVs4rnGpPRUxuVy+HHfszrCGzWgw+/OB/P+An+/TcK2SfxTDmzWDqXqzp/GxcU9d+IvZXrLUaVy1UBvkmXgUT5+/ycqV6PtZULLFB69LOxmuaDOMPUr4GUh7G+SozWiyRCTt63uPFHOMxa/8ObrtykfwCkZ4RtFQl1IGnMhxBkN14YiUHb/8xctOcGzWNazW1nPol/4sKS+ih6oIaJ+pLkN+IaQ9DSswAO9zvX+W3eWU/0jmP8SQMS54UUdbwtdjQCrnFZ68PVV8LW+QPmHY8yU6+3wTkJFE46ykyIOYNmxc0JTFnVQb3FZnxITKv/laJewKpBLcfaGN+0khxH1M5No2XV5lMy7Kw9ahJjaVJq9jn4XpHCuoClcld/zlNRfoQRajMsYIKoK2/z9eT+Tza23oz2zCHh/ItVrt+rg3NyL8Eb4/PnuKiFhbIZQISXxWiW8THVDmqtqs16d0HVWJ8jzZHZzfQpvozZ/9Ih2RPA1A2X+c8F7t2E4l/akgNjN4hKrhXEtVgnRg7YiI4vuWI6q7XJXy98B5Ge6/YqjpHJgGaO0bUZmrdjQIAiuOaObdqOQXob45eBm3jbI8DQrsxDCWT98uRadAyuOqSUzoU4IsLAu24sYUnISAG89O1oWKIwvKA5+2YH2TFHzXyb5U0hXq0DxO/L9QDlYk5hriXEIiLTUDyvZ6m9G8huCCBgKZUqMfFcz8wMKUNKXKlvaLDhVjrdBx//fIS1s29FVXIE88ZwDULxN2PJ3uiu8wnZnLSR9o/HQdcSdb1VcF4pzQ6H/EvHF0eu3OdySEt+4WrOYIEgjIWwf3QN3pZ+/w2ePi4t6OWVDMseqehm5au7LVxNFBk0hYPyx7V6ZpoRYwcmx8s4/n6nkqwgz/yQ9frQbl5twwBlR+ggcJrXhmRqqQ5oun2Y8H2cTpC6/w+y8Ta31CeygVgJ61EOpdfrK/vfLxyOvb621Q+tRGPgS+8asdMuUgQAqXE8qPmhVJZAgRvyepRc8eXIBpKGEMNVH7LrcO/L07xD1AlieclSuElMU81gig1b6dq0fM+z7q+XZvVlNHk0fmA1Gph5i4tfa9hBxAOSQjOltVyuAg5kv X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: eb8f815d-9b86-4ab6-7492-08dbbe229bb0 X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Sep 2023 23:53:29.1457 (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: DU2P250MB0146 Subject: [FFmpeg-devel] [PATCH v2 1/3] avformat/avformat: Deprecate AVFMT_ALLOW_FLUSH 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: James Almer , Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: om1v0eKews+l It is of no value to the user, because every muxer can always be flushed with a NULL packet. As its documentation shows ("If not set, the muxer will not receive a NULL packet in the write_packet function") it is actually an internal flag that has been publically exposed because there was no internal flags field for output formats for a long time. But now there is and so use it by replacing the public flag with a private one. Reviewed-by: James Almer Signed-off-by: Andreas Rheinhardt --- doc/APIchanges | 4 ++++ libavdevice/pulse_audio_enc.c | 5 ++++ libavformat/avformat.h | 6 +++-- libavformat/fifo.c | 5 ++++ libavformat/fifo_test.c | 5 ++++ libavformat/hlsenc.c | 5 ++++ libavformat/matroskaenc.c | 15 ++++++++++++ libavformat/movenc.c | 45 +++++++++++++++++++++++++++++++++++ libavformat/mpegtsenc.c | 5 ++++ libavformat/mux.c | 6 +++++ libavformat/mux.h | 6 +++-- libavformat/oggenc.c | 25 +++++++++++++++++++ libavformat/tee.c | 5 ++++ libavformat/version_major.h | 1 + 14 files changed, 134 insertions(+), 4 deletions(-) diff --git a/doc/APIchanges b/doc/APIchanges index f333ff5b24..ca7ffbb97e 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -2,6 +2,10 @@ The last version increases of all libraries were on 2023-02-09 API changes, most recent first: +2023-09-26 - xxxxxxxxxx - lavf 60.xx.100 - avformat.h + Deprecate AVFMT_ALLOW_FLUSH without replacement. Users can always + flush any muxer by sending a NULL packet. + 2023-09-19 - xxxxxxxxxx - lavu 58.25.100 - avutil.h Make AV_TIME_BASE_Q compatible with C++. diff --git a/libavdevice/pulse_audio_enc.c b/libavdevice/pulse_audio_enc.c index 9e594c6424..5acbf798ef 100644 --- a/libavdevice/pulse_audio_enc.c +++ b/libavdevice/pulse_audio_enc.c @@ -802,6 +802,11 @@ const FFOutputFormat ff_pulse_muxer = { .get_output_timestamp = pulse_get_output_timestamp, .get_device_list = pulse_get_device_list, .control_message = pulse_control_message, +#if FF_API_ALLOW_FLUSH .p.flags = AVFMT_NOFILE | AVFMT_ALLOW_FLUSH, +#else + .p.flags = AVFMT_NOFILE, +#endif .p.priv_class = &pulse_muxer_class, + .flags_internal = FF_FMT_ALLOW_FLUSH, }; diff --git a/libavformat/avformat.h b/libavformat/avformat.h index 43175ba332..a8e245000f 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -486,7 +486,9 @@ typedef struct AVProbeData { #define AVFMT_NOBINSEARCH 0x2000 /**< Format does not allow to fall back on binary search via read_timestamp */ #define AVFMT_NOGENSEARCH 0x4000 /**< Format does not allow to fall back on generic search */ #define AVFMT_NO_BYTE_SEEK 0x8000 /**< Format does not allow seeking by bytes */ -#define AVFMT_ALLOW_FLUSH 0x10000 /**< Format allows flushing. If not set, the muxer will not receive a NULL packet in the write_packet function. */ +#if FF_API_ALLOW_FLUSH +#define AVFMT_ALLOW_FLUSH 0x10000 /**< @deprecated: Just send a NULL packet if you want to flush a muxer. */ +#endif #define AVFMT_TS_NONSTRICT 0x20000 /**< Format does not require strictly increasing timestamps, but they must still be monotonic */ @@ -522,7 +524,7 @@ typedef struct AVOutputFormat { /** * can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, * AVFMT_GLOBALHEADER, AVFMT_NOTIMESTAMPS, AVFMT_VARIABLE_FPS, - * AVFMT_NODIMENSIONS, AVFMT_NOSTREAMS, AVFMT_ALLOW_FLUSH, + * AVFMT_NODIMENSIONS, AVFMT_NOSTREAMS, * AVFMT_TS_NONSTRICT, AVFMT_TS_NEGATIVE */ int flags; diff --git a/libavformat/fifo.c b/libavformat/fifo.c index 9a3a23729c..8fb4975a5c 100644 --- a/libavformat/fifo.c +++ b/libavformat/fifo.c @@ -715,11 +715,16 @@ const FFOutputFormat ff_fifo_muxer = { .p.name = "fifo", .p.long_name = NULL_IF_CONFIG_SMALL("FIFO queue pseudo-muxer"), .p.priv_class = &fifo_muxer_class, +#if FF_API_ALLOW_FLUSH .p.flags = AVFMT_NOFILE | AVFMT_ALLOW_FLUSH | AVFMT_TS_NEGATIVE, +#else + .p.flags = AVFMT_NOFILE | AVFMT_TS_NEGATIVE, +#endif .priv_data_size = sizeof(FifoContext), .init = fifo_init, .write_header = fifo_write_header, .write_packet = fifo_write_packet, .write_trailer = fifo_write_trailer, .deinit = fifo_deinit, + .flags_internal = FF_FMT_ALLOW_FLUSH, }; diff --git a/libavformat/fifo_test.c b/libavformat/fifo_test.c index 0f12d88b0f..3861c4aee4 100644 --- a/libavformat/fifo_test.c +++ b/libavformat/fifo_test.c @@ -147,6 +147,11 @@ const FFOutputFormat ff_fifo_test_muxer = { .write_trailer = failing_write_trailer, .deinit = failing_deinit, .p.priv_class = &failing_muxer_class, +#if FF_API_ALLOW_FLUSH .p.flags = AVFMT_NOFILE | AVFMT_ALLOW_FLUSH, +#else + .p.flags = AVFMT_NOFILE, +#endif + .flags_internal = FF_FMT_ALLOW_FLUSH, }; diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c index 08f3746ce7..999fc0de75 100644 --- a/libavformat/hlsenc.c +++ b/libavformat/hlsenc.c @@ -3184,8 +3184,13 @@ const FFOutputFormat ff_hls_muxer = { .p.audio_codec = AV_CODEC_ID_AAC, .p.video_codec = AV_CODEC_ID_H264, .p.subtitle_codec = AV_CODEC_ID_WEBVTT, +#if FF_API_ALLOW_FLUSH .p.flags = AVFMT_NOFILE | AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH | AVFMT_NODIMENSIONS, +#else + .p.flags = AVFMT_NOFILE | AVFMT_GLOBALHEADER | AVFMT_NODIMENSIONS, +#endif .p.priv_class = &hls_class, + .flags_internal = FF_FMT_ALLOW_FLUSH, .priv_data_size = sizeof(HLSContext), .init = hls_init, .write_header = hls_write_header, diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index ba54f5f98e..c1a4425eb7 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -3512,7 +3512,11 @@ const FFOutputFormat ff_matroska_muxer = { .write_packet = mkv_write_flush_packet, .write_trailer = mkv_write_trailer, .p.flags = AVFMT_GLOBALHEADER | AVFMT_VARIABLE_FPS | +#if FF_API_ALLOW_FLUSH AVFMT_TS_NONSTRICT | AVFMT_ALLOW_FLUSH, +#else + AVFMT_TS_NONSTRICT, +#endif .p.codec_tag = (const AVCodecTag* const []){ ff_codec_bmp_tags, ff_codec_wav_tags, additional_audio_tags, additional_subtitle_tags, 0 @@ -3521,6 +3525,7 @@ const FFOutputFormat ff_matroska_muxer = { .query_codec = mkv_query_codec, .check_bitstream = mkv_check_bitstream, .p.priv_class = &matroska_webm_class, + .flags_internal = FF_FMT_ALLOW_FLUSH, }; #endif @@ -3551,8 +3556,13 @@ const FFOutputFormat ff_webm_muxer = { .query_codec = webm_query_codec, .check_bitstream = mkv_check_bitstream, .p.flags = AVFMT_GLOBALHEADER | AVFMT_VARIABLE_FPS | +#if FF_API_ALLOW_FLUSH AVFMT_TS_NONSTRICT | AVFMT_ALLOW_FLUSH, +#else + AVFMT_TS_NONSTRICT, +#endif .p.priv_class = &matroska_webm_class, + .flags_internal = FF_FMT_ALLOW_FLUSH, }; #endif @@ -3572,11 +3582,16 @@ const FFOutputFormat ff_matroska_audio_muxer = { .write_packet = mkv_write_flush_packet, .write_trailer = mkv_write_trailer, .check_bitstream = mkv_check_bitstream, +#if FF_API_ALLOW_FLUSH .p.flags = AVFMT_GLOBALHEADER | AVFMT_TS_NONSTRICT | AVFMT_ALLOW_FLUSH, +#else + .p.flags = AVFMT_GLOBALHEADER | AVFMT_TS_NONSTRICT, +#endif .p.codec_tag = (const AVCodecTag* const []){ ff_codec_wav_tags, additional_audio_tags, 0 }, .p.priv_class = &matroska_webm_class, + .flags_internal = FF_FMT_ALLOW_FLUSH, }; #endif diff --git a/libavformat/movenc.c b/libavformat/movenc.c index 7e96e7435f..a394ff8ddf 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -7932,12 +7932,17 @@ const FFOutputFormat ff_mov_muxer = { .write_packet = mov_write_packet, .write_trailer = mov_write_trailer, .deinit = mov_free, +#if FF_API_ALLOW_FLUSH .p.flags = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH | AVFMT_TS_NEGATIVE, +#else + .p.flags = AVFMT_GLOBALHEADER | AVFMT_TS_NEGATIVE, +#endif .p.codec_tag = (const AVCodecTag* const []){ ff_codec_movvideo_tags, ff_codec_movaudio_tags, ff_codec_movsubtitle_tags, 0 }, .check_bitstream = mov_check_bitstream, .p.priv_class = &mov_isobmff_muxer_class, + .flags_internal = FF_FMT_ALLOW_FLUSH, }; #endif #if CONFIG_TGP_MUXER @@ -7953,10 +7958,15 @@ const FFOutputFormat ff_tgp_muxer = { .write_packet = mov_write_packet, .write_trailer = mov_write_trailer, .deinit = mov_free, +#if FF_API_ALLOW_FLUSH .p.flags = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH | AVFMT_TS_NEGATIVE, +#else + .p.flags = AVFMT_GLOBALHEADER | AVFMT_TS_NEGATIVE, +#endif .p.codec_tag = codec_3gp_tags_list, .check_bitstream = mov_check_bitstream, .p.priv_class = &mov_isobmff_muxer_class, + .flags_internal = FF_FMT_ALLOW_FLUSH, }; #endif #if CONFIG_MP4_MUXER @@ -7974,10 +7984,15 @@ const FFOutputFormat ff_mp4_muxer = { .write_packet = mov_write_packet, .write_trailer = mov_write_trailer, .deinit = mov_free, +#if FF_API_ALLOW_FLUSH .p.flags = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH | AVFMT_TS_NEGATIVE, +#else + .p.flags = AVFMT_GLOBALHEADER | AVFMT_TS_NEGATIVE, +#endif .p.codec_tag = mp4_codec_tags_list, .check_bitstream = mov_check_bitstream, .p.priv_class = &mov_isobmff_muxer_class, + .flags_internal = FF_FMT_ALLOW_FLUSH, }; #endif #if CONFIG_PSP_MUXER @@ -7994,10 +8009,15 @@ const FFOutputFormat ff_psp_muxer = { .write_packet = mov_write_packet, .write_trailer = mov_write_trailer, .deinit = mov_free, +#if FF_API_ALLOW_FLUSH .p.flags = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH | AVFMT_TS_NEGATIVE, +#else + .p.flags = AVFMT_GLOBALHEADER | AVFMT_TS_NEGATIVE, +#endif .p.codec_tag = mp4_codec_tags_list, .check_bitstream = mov_check_bitstream, .p.priv_class = &mov_isobmff_muxer_class, + .flags_internal = FF_FMT_ALLOW_FLUSH, }; #endif #if CONFIG_TG2_MUXER @@ -8013,10 +8033,15 @@ const FFOutputFormat ff_tg2_muxer = { .write_packet = mov_write_packet, .write_trailer = mov_write_trailer, .deinit = mov_free, +#if FF_API_ALLOW_FLUSH .p.flags = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH | AVFMT_TS_NEGATIVE, +#else + .p.flags = AVFMT_GLOBALHEADER | AVFMT_TS_NEGATIVE, +#endif .p.codec_tag = codec_3gp_tags_list, .check_bitstream = mov_check_bitstream, .p.priv_class = &mov_isobmff_muxer_class, + .flags_internal = FF_FMT_ALLOW_FLUSH, }; #endif #if CONFIG_IPOD_MUXER @@ -8033,10 +8058,15 @@ const FFOutputFormat ff_ipod_muxer = { .write_packet = mov_write_packet, .write_trailer = mov_write_trailer, .deinit = mov_free, +#if FF_API_ALLOW_FLUSH .p.flags = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH | AVFMT_TS_NEGATIVE, +#else + .p.flags = AVFMT_GLOBALHEADER | AVFMT_TS_NEGATIVE, +#endif .p.codec_tag = (const AVCodecTag* const []){ codec_ipod_tags, 0 }, .check_bitstream = mov_check_bitstream, .p.priv_class = &mov_isobmff_muxer_class, + .flags_internal = FF_FMT_ALLOW_FLUSH, }; #endif #if CONFIG_ISMV_MUXER @@ -8053,11 +8083,16 @@ const FFOutputFormat ff_ismv_muxer = { .write_packet = mov_write_packet, .write_trailer = mov_write_trailer, .deinit = mov_free, +#if FF_API_ALLOW_FLUSH .p.flags = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH | AVFMT_TS_NEGATIVE, +#else + .p.flags = AVFMT_GLOBALHEADER | AVFMT_TS_NEGATIVE, +#endif .p.codec_tag = (const AVCodecTag* const []){ codec_mp4_tags, codec_ism_tags, 0 }, .check_bitstream = mov_check_bitstream, .p.priv_class = &mov_isobmff_muxer_class, + .flags_internal = FF_FMT_ALLOW_FLUSH, }; #endif #if CONFIG_F4V_MUXER @@ -8074,10 +8109,15 @@ const FFOutputFormat ff_f4v_muxer = { .write_packet = mov_write_packet, .write_trailer = mov_write_trailer, .deinit = mov_free, +#if FF_API_ALLOW_FLUSH .p.flags = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH, +#else + .p.flags = AVFMT_GLOBALHEADER, +#endif .p.codec_tag = (const AVCodecTag* const []){ codec_f4v_tags, 0 }, .check_bitstream = mov_check_bitstream, .p.priv_class = &mov_isobmff_muxer_class, + .flags_internal = FF_FMT_ALLOW_FLUSH, }; #endif #if CONFIG_AVIF_MUXER @@ -8093,8 +8133,13 @@ const FFOutputFormat ff_avif_muxer = { .write_packet = mov_write_packet, .write_trailer = avif_write_trailer, .deinit = mov_free, +#if FF_API_ALLOW_FLUSH .p.flags = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH, +#else + .p.flags = AVFMT_GLOBALHEADER, +#endif .p.codec_tag = codec_avif_tags_list, .p.priv_class = &mov_avif_muxer_class, + .flags_internal = FF_FMT_ALLOW_FLUSH, }; #endif diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c index 46ed16985f..84edd418f0 100644 --- a/libavformat/mpegtsenc.c +++ b/libavformat/mpegtsenc.c @@ -2361,6 +2361,11 @@ const FFOutputFormat ff_mpegts_muxer = { .write_trailer = mpegts_write_end, .deinit = mpegts_deinit, .check_bitstream = mpegts_check_bitstream, +#if FF_API_ALLOW_FLUSH .p.flags = AVFMT_ALLOW_FLUSH | AVFMT_VARIABLE_FPS | AVFMT_NODIMENSIONS, +#else + .p.flags = AVFMT_VARIABLE_FPS | AVFMT_NODIMENSIONS, +#endif + .flags_internal = FF_FMT_ALLOW_FLUSH, .p.priv_class = &mpegts_muxer_class, }; diff --git a/libavformat/mux.c b/libavformat/mux.c index d3779202f0..5a1d6e41cb 100644 --- a/libavformat/mux.c +++ b/libavformat/mux.c @@ -1206,7 +1206,13 @@ int av_write_frame(AVFormatContext *s, AVPacket *in) int ret; if (!in) { +#if FF_API_ALLOW_FLUSH || LIBAVFORMAT_VERSION_MAJOR >= 61 + // Hint: The pulse audio output device has this set, + // so we can't switch the check to FF_FMT_ALLOW_FLUSH immediately. if (s->oformat->flags & AVFMT_ALLOW_FLUSH) { +#else + if (ffofmt(s->oformat)->flags_internal & FF_FMT_ALLOW_FLUSH) { +#endif ret = ffofmt(s->oformat)->write_packet(s, NULL); flush_if_needed(s); if (ret >= 0 && s->pb && s->pb->error < 0) diff --git a/libavformat/mux.h b/libavformat/mux.h index 9de5c2852a..b9ec75641d 100644 --- a/libavformat/mux.h +++ b/libavformat/mux.h @@ -27,6 +27,8 @@ struct AVDeviceInfoList; +#define FF_FMT_ALLOW_FLUSH (1 << 1) + typedef struct FFOutputFormat { /** * The public AVOutputFormat. See avformat.h for it. @@ -38,13 +40,13 @@ typedef struct FFOutputFormat { int priv_data_size; /** - * Internal flags. See FF_FMT_FLAG_* in internal.h. + * Internal flags. See FF_FMT_* in internal.h and mux.h. */ int flags_internal; int (*write_header)(AVFormatContext *); /** - * Write a packet. If AVFMT_ALLOW_FLUSH is set in flags, + * Write a packet. If FF_FMT_ALLOW_FLUSH is set in flags_internal, * pkt can be NULL in order to flush data buffered in the muxer. * When flushing, return 0 if there still is more data to flush, * or 1 if everything was flushed and there is no more buffered diff --git a/libavformat/oggenc.c b/libavformat/oggenc.c index c669aea25a..69a66f586d 100644 --- a/libavformat/oggenc.c +++ b/libavformat/oggenc.c @@ -771,8 +771,13 @@ const FFOutputFormat ff_ogg_muxer = { .write_packet = ogg_write_packet, .write_trailer = ogg_write_trailer, .deinit = ogg_free, +#if FF_API_ALLOW_FLUSH .p.flags = AVFMT_TS_NEGATIVE | AVFMT_TS_NONSTRICT | AVFMT_ALLOW_FLUSH, +#else + .p.flags = AVFMT_TS_NEGATIVE | AVFMT_TS_NONSTRICT, +#endif .p.priv_class = &ogg_muxer_class, + .flags_internal = FF_FMT_ALLOW_FLUSH, }; #endif @@ -789,8 +794,13 @@ const FFOutputFormat ff_oga_muxer = { .write_packet = ogg_write_packet, .write_trailer = ogg_write_trailer, .deinit = ogg_free, +#if FF_API_ALLOW_FLUSH .p.flags = AVFMT_TS_NEGATIVE | AVFMT_ALLOW_FLUSH, +#else + .p.flags = AVFMT_TS_NEGATIVE, +#endif .p.priv_class = &ogg_muxer_class, + .flags_internal = FF_FMT_ALLOW_FLUSH, }; #endif @@ -810,8 +820,13 @@ const FFOutputFormat ff_ogv_muxer = { .write_packet = ogg_write_packet, .write_trailer = ogg_write_trailer, .deinit = ogg_free, +#if FF_API_ALLOW_FLUSH .p.flags = AVFMT_TS_NEGATIVE | AVFMT_TS_NONSTRICT | AVFMT_ALLOW_FLUSH, +#else + .p.flags = AVFMT_TS_NEGATIVE | AVFMT_TS_NONSTRICT, +#endif .p.priv_class = &ogg_muxer_class, + .flags_internal = FF_FMT_ALLOW_FLUSH, }; #endif @@ -828,8 +843,13 @@ const FFOutputFormat ff_spx_muxer = { .write_packet = ogg_write_packet, .write_trailer = ogg_write_trailer, .deinit = ogg_free, +#if FF_API_ALLOW_FLUSH .p.flags = AVFMT_TS_NEGATIVE | AVFMT_ALLOW_FLUSH, +#else + .p.flags = AVFMT_TS_NEGATIVE, +#endif .p.priv_class = &ogg_muxer_class, + .flags_internal = FF_FMT_ALLOW_FLUSH, }; #endif @@ -846,7 +866,12 @@ const FFOutputFormat ff_opus_muxer = { .write_packet = ogg_write_packet, .write_trailer = ogg_write_trailer, .deinit = ogg_free, +#if FF_API_ALLOW_FLUSH .p.flags = AVFMT_TS_NEGATIVE | AVFMT_ALLOW_FLUSH, +#else + .p.flags = AVFMT_TS_NEGATIVE, +#endif .p.priv_class = &ogg_muxer_class, + .flags_internal = FF_FMT_ALLOW_FLUSH, }; #endif diff --git a/libavformat/tee.c b/libavformat/tee.c index cb555f52fd..cfa8346bc9 100644 --- a/libavformat/tee.c +++ b/libavformat/tee.c @@ -614,5 +614,10 @@ const FFOutputFormat ff_tee_muxer = { .write_trailer = tee_write_trailer, .write_packet = tee_write_packet, .p.priv_class = &tee_muxer_class, +#if FF_API_ALLOW_FLUSH .p.flags = AVFMT_NOFILE | AVFMT_ALLOW_FLUSH | AVFMT_TS_NEGATIVE, +#else + .p.flags = AVFMT_NOFILE | AVFMT_TS_NEGATIVE, +#endif + .flags_internal = FF_FMT_ALLOW_FLUSH, }; diff --git a/libavformat/version_major.h b/libavformat/version_major.h index d1d6f95b15..ca9dccc94d 100644 --- a/libavformat/version_major.h +++ b/libavformat/version_major.h @@ -47,6 +47,7 @@ #define FF_API_AVFORMAT_IO_CLOSE (LIBAVFORMAT_VERSION_MAJOR < 61) #define FF_API_AVIO_WRITE_NONCONST (LIBAVFORMAT_VERSION_MAJOR < 61) #define FF_API_LAVF_SHORTEST (LIBAVFORMAT_VERSION_MAJOR < 61) +#define FF_API_ALLOW_FLUSH (LIBAVFORMAT_VERSION_MAJOR < 61) #define FF_API_R_FRAME_RATE 1 From patchwork Mon Sep 25 23:55:25 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 43911 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:2a18:b0:15d:8365:d4b8 with SMTP id e24csp1558791pzh; Mon, 25 Sep 2023 16:54:30 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFXXTFLDzrEz/YMoTH0Lwqgv32RqQb4vsOrXa6/2CnWeUrYrEYKXzjDrtPNTD0uCm7decgf X-Received: by 2002:a17:907:7245:b0:9ae:793f:2010 with SMTP id ds5-20020a170907724500b009ae793f2010mr8185937ejc.42.1695686070055; Mon, 25 Sep 2023 16:54:30 -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 d8-20020a170906544800b00993a37afc87si10204922ejp.919.2023.09.25.16.54.29; Mon, 25 Sep 2023 16:54:30 -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=go7dt2BQ; 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 CFBA268C5CE; Tue, 26 Sep 2023 02:54:27 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR02-DB5-obe.outbound.protection.outlook.com (mail-db5eur02olkn2075.outbound.protection.outlook.com [40.92.50.75]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E633D68C5CE for ; Tue, 26 Sep 2023 02:54:20 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dIWD+0NFwPdmKLjLKEbXa4C9SYTLZIztHvmQK6Cck/u5luEjBXCG3tTpVCmraLPHSAGFfbfGu6kR1O0pkzG0SeStyNNz4I7WUFzi5nwkGgErINGAnV0gQyGj/iL2MO8zp/B3fY4j+yULSq42xYYbGCnVyL8+7gkWVBVKHipENfS4sQrchu0I4Pu+maEhEtILfAtytCA+YNxH3IBa70aj4G12NNHaik4QfzkmYYhOAkz2plEccQazFGPJF6GqbryNslRNkpVccgQ+7LglmFf/6x+WE63QH9mT8aQb1IPJ+FxXs11TIeXzioUIzdXYw9XH22JbYBbsWFTsBx0WFj3GNA== 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=vbLgRXplPHpV8OUcCmMNhmyshCxA7Vw0TjjYARgXef0=; b=YcDrjAMteRuRxTp4Ud4xqeFA2SFV11r86GX/As9bLWCsRTeEXnvo7HpYVRX8Tod2TbzZ5Bnyh9I2uaErmCEUQQAjf7ApjekkFoovK0K498tWnOvTU4Oze53fwqsKAfwNrcYQoKkNgzWtpaE8fg8ziBQ1OeMKbu/FJ4NmGdwfFnVAltg0gbw+SBL2QEmjh61/NcicmAcVzuBv7fLOIeBgacttXl3Yi6uGb1fJESsL2QEBhZ5PkyM1A7cL+PjsRmrpon6TmQzcNoaDsITg2rTlZ50x+gOEqv4XQBdGoo4KRReezVAq6aSPfUaVAje29nza2OLJbouajT0n9ccz0Y/AWg== 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=vbLgRXplPHpV8OUcCmMNhmyshCxA7Vw0TjjYARgXef0=; b=go7dt2BQugbs9XxT5JoUFIHvnUeGd3qJloyKfQguhMi9JXAT2omKzoidVoTzVGPQvPTXyW40Sd//YzcfBjj5i8lQiHYCWDlzXGmHFrSOuz6y3FmhDZ5u6LsZx8eRZBgKmjsXkmLpHTfV5MXpJjdidxv7z/wa7lJJ4nPgt6Rotml+AhAXC3lU7l4uHWTi59er1VnbLA6+6fiz4Cj3JQgSeCHSfqkGJTt4ySQI/Bq1rWWMP85IcZ82KAh0+FhlWrhEia6cmzxQ/bHx2YbdtBeABF+GpiDkGLK71mZ+bVypw47eTb7BbT4LQiO0vWCdO1VHVQUr8x+7yOGnOp+xoMBnQw== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by DU2P250MB0146.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:273::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6813.28; Mon, 25 Sep 2023 23:54:18 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::5e01:aea5:d3a8:cafa]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::5e01:aea5:d3a8:cafa%3]) with mapi id 15.20.6792.026; Mon, 25 Sep 2023 23:54:18 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 26 Sep 2023 01:55:25 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [ZqDpl6Hj41QHYJFdmjcMUlRfi44StnKu] X-ClientProxiedBy: ZR0P278CA0019.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:1c::6) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: <20230925235526.2668347-1-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|DU2P250MB0146:EE_ X-MS-Office365-Filtering-Correlation-Id: 92a63064-0e49-4ea6-9499-08dbbe22bafe X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: JNz/CAdL8tLxt7ApSxjkCee4PreB+GwMGKDTGh/SWjG+kBvD7TU9o7DTZL/b+3mchcVFsqj9rbQztKNwMXeQDTAxAYRM9ZihmGp1Qjz0VUkFDWhUCoki/wW4muccHiJeiUkX4bL4Ry6BpWRVX9rdVaJDgBNIZr66i/9X3tTIUllfp21IMT/+yfMLHhlIi+DcqzSvhHvY720f85qTtBwbbIuZOWIyo6zZxIX5tstyLueDpuyU8OHv0SE6JW/heHNotLtOnrPK4gi9S+7y/Ti3nNPLLdZxdJNdx+porCTLVcCFAbBkDGWf/ZlBjxb2j3LMXiTWuwWaQ1icJX2ys3vVJcXKPUdkD9f+6xKXCegd4PsP88WQDH+vRmEHkq0cgtKMf5rxafP01TrGLJ5yufs9c96hvaRa5WiQkGy5SyRoylW/qY8UeKYzwUgFaFynKTo8pwhjO8+hp7ujzdXVFHBlX9OPv/7m0Cb1gqkrm2m4DIkA59XW+H/KDNVM2hMLwUZEqZYApcPCuXFx9iXuLaFDe7xKMeWucvWUMzq5zJb0pZaUcae2OFeHTDUfOqPEjEVcxc2VwyAT3X6PYLWMROSIQ5Qiybej5H9UNlP18qmk4wOzMDwB3oV3s1OBM8rYU4B4 X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: d2TT3UoRbUO5iPaQWBuzBU2c3tPj72zazHf8xWAaSSuzS52kTEwxQlgvB8m+gYxMCIll8PGTaxnwOjo0Fx52q2I0ebtuQGzcDMlDkYfz2Hs0a+Hk89tXLpE0JwAMb0Ubkpv3K1eNppd1shTpdtRkGWiubezOkBOq9YJKC73L4jPLRcrXrawScKtKeujQkX9cZnSTY9az/nPElOKyNo8bbE+ljAVGsKILSU77lrrhLX10CFMDGVqP1d83lUBO9r76k1Pxmw41I5YdTpZr+w3V1T0+IScLk1Fg1Jh0OTji4hoXfJYkmOL5vtTvoyqKHlBJ/JCxxIUagHUiMrigwqZods0Mkfj29iJjSjFraTQBzz63w+/Q3yqOXwvi8V35vFZDMnYhzuUA3pxIcMIel5xqTGkb2fkCC+Xq9nRyQw80/uAZTsAkAbhSyK8Dck6NyYf3yOrNQrxS6GyF7MmiKHONu+FV79m3NFAK+YnmYr5Q6vyeBYdGb4G7RgGHVLS9xIX6KB+tlyloTIJk+aoqn8eQOTk2w3WOrMDEz1zLMV8H64pnSk/wKt04/FfrB4Q5ASM6eqzHRpcxV7D1YBpOjvOvFt5Wv6llVVUE1Sl1ivs9CvFHIY1uOgsck5wwPpq04mYIUr8Fx2eSPjk9vlekRzwYU/riNo65Ve3aB2wGRVX1jk8Jo0la1q2onWcpsc+7zO+OPbVyss4GXG/grXgYpsoLL5JL8aWc/zWVSPaJd3LXswxzLd/UR6E7wxiPtWtdAyKQmf7xlYSXjSA+tntn5uh8HIjujVMxJxgGUpnZkrhdFke61/TbfoYnd2xbqf2mzSlOq0UTzug2Ki4wR7pbYZkV0RsicGOh78CvQOmm/QanpjpUnT04Ew4XogXZhDnDO26PKtdV8tDoQgsNMensYi4QPu79npTsMOU2u3VtTQKK/FswMXa5pdGu1jahiAY1NzOK7e1qtDyVt0xzlta++ReC6sFOLuH4p/JkNMFp7ZRWUk6UwfdBPHEaoPQeSJyq/QALldWbkj8jRRd/0s4chbASyK05MHBwNiF4QBZm/mSCkFaPWAKRJs9pCxOGb2AcBlJwSAmtmg0TEF3G99Oh4fHGh8R4ei1WsUqDLIALJJPMsg2GNlHO5QJNMMh+kAoh+h4b1WPKXvf1MU6nF6DTgSXUE8T8obRdj4mJHGf0pTbfjVBkHOKiQTxWFRlvQKAtNSWzVNu0JPhYTGQqiUVo3FTfenFV4WtQ00VmoylDZIhxUSHri5ovbIsw45uZ9MqVmxKp X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 92a63064-0e49-4ea6-9499-08dbbe22bafe X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Sep 2023 23:54:18.0648 (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: DU2P250MB0146 Subject: [FFmpeg-devel] [PATCH 2/3] avcodec/codec_par: Move enum AVFieldOrder to defs.h 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: HKWQlX3Wnmdr It is also used by AVCodecContext. Signed-off-by: Andreas Rheinhardt --- doc/APIchanges | 3 +++ libavcodec/codec_par.h | 10 +--------- libavcodec/defs.h | 8 ++++++++ 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/doc/APIchanges b/doc/APIchanges index ca7ffbb97e..c1ea3b7dc1 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -2,6 +2,9 @@ The last version increases of all libraries were on 2023-02-09 API changes, most recent first: +2023-09-26 - xxxxxxxxxx - lavc 60.xx.100 - codec_par.h defs.h + Move the definition of enum AVFieldOrder from codec_par.h to defs.h. + 2023-09-26 - xxxxxxxxxx - lavf 60.xx.100 - avformat.h Deprecate AVFMT_ALLOW_FLUSH without replacement. Users can always flush any muxer by sending a NULL packet. diff --git a/libavcodec/codec_par.h b/libavcodec/codec_par.h index add90fdb1e..c1679ea042 100644 --- a/libavcodec/codec_par.h +++ b/libavcodec/codec_par.h @@ -29,21 +29,13 @@ #include "libavutil/pixfmt.h" #include "codec_id.h" +#include "defs.h" /** * @addtogroup lavc_core * @{ */ -enum AVFieldOrder { - AV_FIELD_UNKNOWN, - AV_FIELD_PROGRESSIVE, - AV_FIELD_TT, ///< Top coded_first, top displayed first - AV_FIELD_BB, ///< Bottom coded first, bottom displayed first - AV_FIELD_TB, ///< Top coded first, bottom displayed first - AV_FIELD_BT, ///< Bottom coded first, top displayed first -}; - /** * This struct describes the properties of an encoded stream. * diff --git a/libavcodec/defs.h b/libavcodec/defs.h index ceed8d5e16..00d840ec19 100644 --- a/libavcodec/defs.h +++ b/libavcodec/defs.h @@ -195,6 +195,14 @@ #define AV_LEVEL_UNKNOWN -99 +enum AVFieldOrder { + AV_FIELD_UNKNOWN, + AV_FIELD_PROGRESSIVE, + AV_FIELD_TT, ///< Top coded_first, top displayed first + AV_FIELD_BB, ///< Bottom coded first, bottom displayed first + AV_FIELD_TB, ///< Top coded first, bottom displayed first + AV_FIELD_BT, ///< Bottom coded first, top displayed first +}; /** * @ingroup lavc_decoding From patchwork Mon Sep 25 23:55:26 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 43912 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:2a18:b0:15d:8365:d4b8 with SMTP id e24csp1558823pzh; Mon, 25 Sep 2023 16:54:38 -0700 (PDT) X-Google-Smtp-Source: AGHT+IH1Ujb2PZc59c68rT/59YpN/TsXY5jUK+bFLKXsqho7LFpUMFUNp5QJEtwB2VrzbsAXmqwM X-Received: by 2002:a05:600c:2041:b0:401:cb45:3fb8 with SMTP id p1-20020a05600c204100b00401cb453fb8mr7109122wmg.38.1695686077730; Mon, 25 Sep 2023 16:54:37 -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 q11-20020aa7da8b000000b005309278af44si10220721eds.274.2023.09.25.16.54.37; Mon, 25 Sep 2023 16:54:37 -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="M2iunzc/"; 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 E765168C9F8; Tue, 26 Sep 2023 02:54:28 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR02-DB5-obe.outbound.protection.outlook.com (mail-db5eur02olkn2075.outbound.protection.outlook.com [40.92.50.75]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 209B668C5CE for ; Tue, 26 Sep 2023 02:54:26 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Tms7blQxiOwpiPhMNTINDDU0rlO8u2lXyzWYgKAR2Kh99r3N1KZFY0RPovtDejw2Y6BQqXSWP49V2FgDepztNdVgnB9dIIwUpq/YKRGONrv1NoXsrjWxx0XtHrEBph/cXVS2SSR/VJQxBr5DfcBqT3+Shep9MwR4XBA0ziSLMzkx7Ot5E1pc3zpM0WNeY0AyuCIlgD2dGkgByzUcR9T/WxBPssl4xopm5yzNLJigBukkwiAYp3K8KxVYrgGZNdEcwlaBYSOhMABRM8gRcVpU4HlnznlHa8E8r9JISoX1Xli5EvNjIrZG/pGVBJrV6qDRjkdgAIkjoMAsC1wMhjPv3A== 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=FSSHG4u78q8kQnfYEhjLrwo5mShild4dwWteq7TISc8=; b=lu1kd0E7VitwB8t5bfv6iJu4PfcN5vmV2b90eyfUzRjaI5kklN3Uw+WO7Y0UD65qsyGysmJdrIb796U/fWHIeb0WU2IJ8+51KN0b4gvQeHlK2coicjKQAJSsKI6qaVIIn7dRmaQ/kiHLrMWqcHqBCJcNhfz/yVt1BKzZSqeQEwesvDksPnKPHX8qfYh5scRPOiQqM9npjmThnQb3WVIp8+Q7gXkNGm8OTCP2Ycn8RGC1bXBhKnNs2U4DPW9zBxIPp3av3Ogs7kFI37fSfrQoQkRAndG4J7f0JD+fbW5W40q+xAst3KPuqu7O7S8P+3jHY5y0sLkcpysA7Sv8LqGNsQ== 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=FSSHG4u78q8kQnfYEhjLrwo5mShild4dwWteq7TISc8=; b=M2iunzc/SiK2s4vU+UhLqXxPoQLFHpGlCHcItODZ38Fn8hsTlGqiu7xMTNKQFtVWK2CQ3edgnUa7VhB0iY6v1Oa+1EgXwnem8oZb1uCgbIG97uox/iL8H70LZ1VEBJqzzuPOJXbhM1cJKT+wbccHaF7e2GliMBpGTwlpcQHqEc2hH4SyeymV/bkbyvIhUNfd2GfKqN9ebX868ZJT5XIReGnWyQ7k0vyARZ0WXJZ56VelzLCLMAjO7E8kWYRJvJPJQzTX51m0OEJ74gqL41/UInMFlBUtibhbCEPBoZbL4dk//wrT42sz04brFydyU9FAF5SDQiQUAwgGziyvspAJLA== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by DU2P250MB0146.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:273::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6813.28; Mon, 25 Sep 2023 23:54:19 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::5e01:aea5:d3a8:cafa]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::5e01:aea5:d3a8:cafa%3]) with mapi id 15.20.6792.026; Mon, 25 Sep 2023 23:54:19 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 26 Sep 2023 01:55:26 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [7zsB2/mNW1TGnMWUM2Zne1i2tJU9BnTt] X-ClientProxiedBy: ZR0P278CA0019.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:1c::6) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: <20230925235526.2668347-2-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|DU2P250MB0146:EE_ X-MS-Office365-Filtering-Correlation-Id: 5dbb4bc1-c3a5-44c6-9203-08dbbe22bbea X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: /WwIdRY1deCGhg7Q13p5siMbzfcT7xpRLI1ewDdSSgqXXLbBwA68LzLj7o3wzzdr8nU6lMlf3Czwu3qNBpVg29od3s0Ct26+xEZ/lIno90SCt0TyceM90ksxhuzeCD4KO2DkMlzme9Djx2E5wswhClOHJgGYA9CClcqb/8H2MEzKGkucSJhCIWl/E60mAb/VT7P+UWAziLbIz0o1VSMa710We2H8Jz0dkSFcganZMlntEYp+siYOSqliM9PCkchSbNC8+PF/7Z/Z2q0aUtHAzEJEu3hl5e/Fh7FVTWiTYbQ26KwP3NQG5z5fbWfOHw15U9UihnSu1G9KOay4Mpc7B1MpvGBVfndEPODlsGl/uVCjTAZd0VouMePJoCxnh98/ZxwcUJUaAfeYdrFoCzYWz6rqsF6J0sKnOJx4PDFdyi2AixO+WQ/NqS6kRptGFmcrfyJHxw0zsv6ZBomXtlm3kDzA6SAoV5S8rFP571w31j2t5DsLwfnzNeAOVWG/HE6V/94BCcIVxlOrtcPo1MNSNThvMzkQmr/uQpYI4JyuAJrWgycEhjgsUSq+j0UjvKa0r9m3guhF5gLVdcQcoHvOo5Cw/gshU0c6MSk4sQANW4s9V0RtFDhQPO1jTx9PFYcT X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: yMhNpbZmHvJlKy08XdzTjoz+emy7KQAuyZIYTOMyF7mMMOafyFrGp/6Qy5pTrR720I9JmyyGwi3l7EPPUqW4F7hcKZL8a4W4s9MYVtLHS5lEi+2BGg4Wxf5rD9Fyz8e2ZYJNIRPKOlU6bIwNoYUYgALRbkuprVB09TKFUuQaFfDh1iyoi7y+EV7qwzUkqvfTHYPMkbAudzC3H3mWxdW3hFrrpykWalHcj4HHbW6HX8ClmrXuOyes0wsxvyb8W49hJavGQUP6e8h7ZSgw+gqkGjyuoOvQSNPz1cnnJCBt5ee9eHE5l9hMDSZmpSbTyCvfnq4RfrcOUH9fcY3LGBmQItcuP4n67Yb22BawWae6wwbzzhiDV9Y08PaEqcz7edrW37PmNNMkVOOhF4s0IrZ9uV7ysiHsv3Typr+lXwTJf9wP1pTSv+sWVwckF3RTL8LS5xZQsyu7jMb/D1+/ELaiNL1TGu2/Cia7dB7ppcpTyKtjrS2Ms7L4fNUVBENe8JjDm4aFWqMOxF5wO6GH7KoXgkitJrBELNKbcEMknwMAYrcvxHJvL2aaiQyoI+I/xtnxMtuktm07rO/D1CBFBtV/Ljo5dVFVgIk1QTa4PPbyvA770Qa3rBwSNUjCDwuXgalMWXCvOy0ldPdjXAXhQeZgBmeDxx/piBnDUu0lCAq00053+2cYuvOBgpYKT7aW0hM/njlMcTGHJB6g4Dtk3SLc30J73HCPead8HVBeMnbvrU+ggcpW2cX2avFjxk6xXbhkzp0iYxYbYTPr+AHXcHL7KRIKelK9cXeAyVYjkHkVL/Ksl/n4sNDOXfYiuhJ62qQ1+hbP00JnGYlJKku1ZWMAkyXd+oVZa6FHM4eD7u9Jva/p7yA4iJVnqcF4H1O8IHHvG0O/t19DPpklp/UrygRisESGZ7munarfqMBcFeOzTrtoTRLPsfMRNWRI/xjV7LunUoozBRmW1pbLAas7dyS7dbv5cVkyliQQOVe6Q5yZQNIAaFoNkyJR9VDu+8rFOSNfclFbLIVLkcKkS3qbLNoKhFQVBD14yoljTQl6O41zdpFdMnP6ZYZUyKAWoHijjMUCtWANlSHJCNBftcAQwZzmnOE3XfLhQ1xkncfflFxPAYXUUMd8tmsEZWBoQBirTbiH3kUsNw6DtAQ5egyViCLLL4yq69csrpkerMOpbQVDLE7o6GViovlQLpdEOdr5dymufBktVk9FjQvVa/eclJ3cOurVHT9/Te20AzcLTZMqo3E7AJJLrym+tlzDc7mFtRj3 X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5dbb4bc1-c3a5-44c6-9203-08dbbe22bbea X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Sep 2023 23:54:19.6080 (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: DU2P250MB0146 Subject: [FFmpeg-devel] [PATCH 3/3] avcodec/avcodec: Avoid codec_desc.h, codec_par.h inclusions 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: W0b++nRaim8Y Instead, use forward declarations; and in order not to affect any user include these headers for them, but not internally. This has the advantage of removing implicit inclusions of these headers from almost all files providing codecs. Signed-off-by: Andreas Rheinhardt --- libavcodec/avcodec.c | 1 + libavcodec/avcodec.h | 14 +++++++++----- libavcodec/decode.c | 1 + libavcodec/encode.c | 1 + libavcodec/nvenc.c | 1 + libavcodec/tests/codec_desc.c | 2 +- libavcodec/utils.c | 2 ++ libavcodec/vaapi_decode.c | 1 + libavfilter/vf_subtitles.c | 1 + 9 files changed, 18 insertions(+), 6 deletions(-) diff --git a/libavcodec/avcodec.c b/libavcodec/avcodec.c index 131834b6de..f2dc7b0edd 100644 --- a/libavcodec/avcodec.c +++ b/libavcodec/avcodec.c @@ -37,6 +37,7 @@ #include "avcodec.h" #include "avcodec_internal.h" #include "bsf.h" +#include "codec_desc.h" #include "codec_internal.h" #include "decode.h" #include "encode.h" diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index da3c5234a0..09400b97b0 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -31,6 +31,7 @@ #include "libavutil/attributes.h" #include "libavutil/avutil.h" #include "libavutil/buffer.h" +#include "libavutil/channel_layout.h" #include "libavutil/dict.h" #include "libavutil/frame.h" #include "libavutil/log.h" @@ -38,8 +39,6 @@ #include "libavutil/rational.h" #include "codec.h" -#include "codec_desc.h" -#include "codec_par.h" #include "codec_id.h" #include "defs.h" #include "packet.h" @@ -49,8 +48,13 @@ * to avoid unnecessary rebuilds. When included externally, keep including * the full version information. */ #include "version.h" + +#include "codec_desc.h" +#include "codec_par.h" #endif +struct AVCodecParameters; + /** * @defgroup libavc libavcodec * Encoding/Decoding Library @@ -1815,7 +1819,7 @@ typedef struct AVCodecContext { * - encoding: unused. * - decoding: set by libavcodec. */ - const AVCodecDescriptor *codec_descriptor; + const struct AVCodecDescriptor *codec_descriptor; /** * Current statistics for PTS correction. @@ -2328,7 +2332,7 @@ const AVClass *avcodec_get_subtitle_rect_class(void); * * @return >= 0 on success, a negative AVERROR code on failure */ -int avcodec_parameters_from_context(AVCodecParameters *par, +int avcodec_parameters_from_context(struct AVCodecParameters *par, const AVCodecContext *codec); /** @@ -2340,7 +2344,7 @@ int avcodec_parameters_from_context(AVCodecParameters *par, * @return >= 0 on success, a negative AVERROR code on failure. */ int avcodec_parameters_to_context(AVCodecContext *codec, - const AVCodecParameters *par); + const struct AVCodecParameters *par); /** * Initialize the AVCodecContext to use the given AVCodec. Prior to using this diff --git a/libavcodec/decode.c b/libavcodec/decode.c index 466c393c1e..9b23a6717c 100644 --- a/libavcodec/decode.c +++ b/libavcodec/decode.c @@ -45,6 +45,7 @@ #include "avcodec_internal.h" #include "bytestream.h" #include "bsf.h" +#include "codec_desc.h" #include "codec_internal.h" #include "decode.h" #include "hwaccel_internal.h" diff --git a/libavcodec/encode.c b/libavcodec/encode.c index 7cd3213b73..a436be2657 100644 --- a/libavcodec/encode.c +++ b/libavcodec/encode.c @@ -30,6 +30,7 @@ #include "avcodec.h" #include "avcodec_internal.h" +#include "codec_desc.h" #include "codec_internal.h" #include "encode.h" #include "frame_thread_encoder.h" diff --git a/libavcodec/nvenc.c b/libavcodec/nvenc.c index 65b96d6cf6..02486c2043 100644 --- a/libavcodec/nvenc.c +++ b/libavcodec/nvenc.c @@ -36,6 +36,7 @@ #include "libavutil/pixdesc.h" #include "libavutil/mathematics.h" #include "atsc_a53.h" +#include "codec_desc.h" #include "encode.h" #include "internal.h" #include "packet_internal.h" diff --git a/libavcodec/tests/codec_desc.c b/libavcodec/tests/codec_desc.c index c9b3497343..bceb91a32a 100644 --- a/libavcodec/tests/codec_desc.c +++ b/libavcodec/tests/codec_desc.c @@ -16,7 +16,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "libavcodec/avcodec.h" +#include "libavcodec/codec_desc.h" int main(int argc, char **argv) { diff --git a/libavcodec/utils.c b/libavcodec/utils.c index 3cb3828228..8807a8c2b6 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -35,7 +35,9 @@ #include "libavutil/pixfmt.h" #include "avcodec.h" #include "codec.h" +#include "codec_desc.h" #include "codec_internal.h" +#include "codec_par.h" #include "decode.h" #include "hwconfig.h" #include "thread.h" diff --git a/libavcodec/vaapi_decode.c b/libavcodec/vaapi_decode.c index 10b4284db0..ceac769c52 100644 --- a/libavcodec/vaapi_decode.c +++ b/libavcodec/vaapi_decode.c @@ -23,6 +23,7 @@ #include "libavutil/pixdesc.h" #include "avcodec.h" +#include "codec_desc.h" #include "decode.h" #include "internal.h" #include "vaapi_decode.h" diff --git a/libavfilter/vf_subtitles.c b/libavfilter/vf_subtitles.c index e2857e90c0..ef5f9cd866 100644 --- a/libavfilter/vf_subtitles.c +++ b/libavfilter/vf_subtitles.c @@ -33,6 +33,7 @@ #include "config_components.h" #if CONFIG_SUBTITLES_FILTER # include "libavcodec/avcodec.h" +# include "libavcodec/codec_desc.h" # include "libavformat/avformat.h" #endif #include "libavutil/avstring.h"