From patchwork Sat May 7 11:27:52 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 35640 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:a885:b0:7f:4be2:bd17 with SMTP id ca5csp2121062pzb; Sat, 7 May 2022 04:29:34 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx5dCqB5FsHEuBqAp8XnuI04OpPggxgIybmDt6PzpiomUjFfVxdVwH+NvKzEBGuHGQiluMz X-Received: by 2002:a05:6402:90e:b0:425:a4bc:db86 with SMTP id g14-20020a056402090e00b00425a4bcdb86mr8215036edz.98.1651922974581; Sat, 07 May 2022 04:29:34 -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 gy25-20020a170906f25900b006f457f90cd9si7204499ejb.300.2022.05.07.04.29.34; Sat, 07 May 2022 04:29:34 -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="H/c1qpJI"; 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 A044568B3D6; Sat, 7 May 2022 14:29:13 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05olkn2020.outbound.protection.outlook.com [40.92.91.20]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5017268B3B4 for ; Sat, 7 May 2022 14:29:07 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fYMg7ZY5hJptKwuJR0rQ1iNX1DedMZNExeQzLSAdbJWL1FYg6w+EwY7oSN8qOt7OjP8eeKybE1oKymapTUhcrLDU4AGBk+dDYYYmpiFdCvDRUFwKWiblS5qVW76RTE9FL8aje2ij+UVsju2Ik6UcNarUrUK2azvocMgwJ6+xQOGqsHCW9d4XuMbMueqlbKQMS5UyurVmmHZ9XbqDchruAFu610VwAUeVcdOpkNgGw5Z8QkRru2EJO1vweBeyaou3utNGLK0Kz/jwwla9oq+703BHFr/Lv0XlOik/dI6pCkFApfmOU7X7JvN3ZuvpfZAyzQoetYhG7RBYWQiRM8mvEw== 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=w7/hY9N4rKbDA224etZk7vY3cfy1qTyqGJO0m310tms=; b=l68FRLXvu3yoE+CDOdAaJ7dwAvKvEBqrQe7Zy9oQ1NBvK/icsAAJy65M1XeETAPzTNDLiwE8P1kqTzgi7jH3etz2A8Oc0Yb6/yBe5i7K5yHHJKla7BvnrnuA/ACZJmgXYmNPJXaatLoe2zEGLBnXrMW4/RykMx0We1ctmnAuUgU53eJG5MfzoFGQoNzr3pIUgOL1/8zTI1LZdkLrL52ShikO3UbIwFqWfmOlSZupjESidRLdjHmxLoGvj8/ejDbvsA7PhCoUNrTsbnhwvN8XNQ60TOVl59+vr3F48cpUOAXB/YHkKmWOk1vETXuZkmaJzT3cKgbtgB/2Aa0gs9zO2g== 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=w7/hY9N4rKbDA224etZk7vY3cfy1qTyqGJO0m310tms=; b=H/c1qpJIkNxf8yOJ0g6g4Lt0I9SMZdf26gxgGhqNgfNHTbCZFSons+YLmD4Ms/GJW+86+DyV+wYZUKn21K2aS8UrWrnibTD+8kM9XuEgMjPPH84x9BIffvMe+mKwcg7JM/1u1TkK9xSH9iNwtApScdTwN+MAf7IAeOKRvBYQOoFE+l7F9iMEcFa5S2Weaqv5VeY/EYhwikKIj4QUQKWKq592OKM/psiUg/B7Y9JYb+sT5XBwpjbFbHEIBKTBJb0xT/C7sW3gY1LOCW/dG1srKRGUGjsx258Db+K0mKBRf4Ol1NLO1qhgC+4l/g1+BeotuCEed4mTPkycTgWlvjMziA== Received: from AS8PR01MB7944.eurprd01.prod.exchangelabs.com (2603:10a6:20b:373::5) by DB6PR0102MB2663.eurprd01.prod.exchangelabs.com (2603:10a6:6:e::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5227.21; Sat, 7 May 2022 11:28:58 +0000 Received: from AS8PR01MB7944.eurprd01.prod.exchangelabs.com ([fe80::1854:2c30:7ba1:c431]) by AS8PR01MB7944.eurprd01.prod.exchangelabs.com ([fe80::1854:2c30:7ba1:c431%6]) with mapi id 15.20.5206.024; Sat, 7 May 2022 11:28:58 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sat, 7 May 2022 13:27:52 +0200 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [o63sqdpcEcxq36VrK7ctPccqJMhIG56N] X-ClientProxiedBy: ZRAP278CA0004.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:10::14) To AS8PR01MB7944.eurprd01.prod.exchangelabs.com (2603:10a6:20b:373::5) X-Microsoft-Original-Message-ID: <20220507112830.406162-5-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 022eb0d9-5a30-4cb9-01e1-08da301cc6eb X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiRIovyFjHwHllp74iOQFItwBd0ovWX5IIHexDTVvqG6XLV6qF4FWGWTBDu0omOmoq2P+Sh5g2tz2NKRBCeC6u2yXlLo4yDN/yxvjZI+acuYv+COPmicusDoYmV+Bysedve1zrwLN8PUbX5BlnbKyY8ZLRQCk5ohQ3RnLPgkI0sivEpM0/aHy+9wTosfL5QPa4ppGD/b0Vhd47TikS2BlUQR8PfrYF3AT3ij9hXsjXJB5x4WYoCTJHGfEGc/WN/Kh8vZ8CiOdYUSFT3Zs316xA0qqQF8vAIS0qWn2OR0LWnu/fWMwx1CZCx9vG5RMRdkVLgJQdyXjfSFK5vI5lRdu6KEIexO0WbttutQAxvcemCFE071cmy+DB8lbctXscOpF1XFbuDjlhNC45mIzMaJJc7B8DuN70PULohgo83mkyZt6EdTwoQayRrxMavmBH7DqNwRpJrKvGlXi+DQ3zxritOo+UfhF47ICnM0U8JlfRTOyUN6yvlKcI6XxGH5UCHmUxLe13PgnpOuZS+ej6/HMtvYyf44+b96AEA4+5TM1kN8HBXoQ8F901yWFfSkpq8RKR0VO+WOCr3vVYl7qkhuVkTb+Nl1lqMVLamdpeLxVH5hqolzXLe2oL9yqmGXbNXWzuUWg7vF+CWoCISzPTZcKgyt4qoy2nGKsQfVKeCC9C4k1biqABLDQ2oSl9Wnm9AueBu9EU/3/1kivPFTEMWTenFFZuUIO+oz9ZUQSU6zn2rfDvQuve2RjdG+Vx+MND6iLUc= X-MS-TrafficTypeDiagnostic: DB6PR0102MB2663:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: zVeviuLJcu9patUkaywpqwn1V44xnb1Dre1gI6naOW2LS8Lazw4oJPpxAABBEiTHkV/mZUplIxSJMCmU/aQTGru7OxDs8jN1hPavtHNSQn/QsBmHZfqTH2pzTXOTMuFxANNF8oAX0diyerNkn+MW5ZfeOk3ANiiYlF1ykZCY73/NVBCYfqxbZjRQA6n9funcGZ/RqkAjzG/ck2+9f7mo8FpNDZBCBP+sAgpWaazgymC95s1XXhtKKyMSYhzWQmRecH826h18BrV+awuZ6VMGuYnhVj+m7+2nPM1C8CqIWe2tXwoTm0Yf5kRschWSyusV7WvCKvn9gBgfz2n7DwnImBDAgqJMoo3Ylz5n3D9s6Ie/Z8VY3zpkp/E6ovBW35fSzZ7Zqg4k+rzTg3GoBF8qmaUCGG+JoTuj4mul9TV7hNfCyo6np6Qt0zqM6mGXs7o5yhcv/ixXLAOVPFEdvHiE3SXi1Z3qFiErRT/kv4dnBB+/mLYPYhqMCyXF/EdGtRx0gXaOcEZePM0scel6MA8py8jr/6uDGMxNyo5SUv2IsyMjDQATSPGVQmoSkcgQcaKR7qjkt6KK/2PZ5dq1bxZai63gQdnsX29ivjyKHxuZmEp1DOFN7zrBiyXt8n8kdzhym79C1IVfz5XYhdW57QrbyA== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: ZBzSQKKiPmhu0S+zy69nM9vZNjCVZDa4vho9RwsnJWMrqgUBr8ho6BSXBGje6sYNhmIWqzJ0MraOGRiWS+RUp/Z7LtSq0LkdhYiqXltiMDlGYc6Wc6F1QYGwQGU3FIcPb/5N//DY0Z4Qw1B3mYn8YCwGw6vUsGiy0VJBP1bEhzsyQ4qHV1oFomjLN3LBQaqDJlzHuEaGfd2wkEugYlq8zO5lwxpw3tp0oimq+D0amAn08JUWKFDe97GC0on7TCWDZqh6RXUFNUIJWoOC/p++abfWxEEyr3Qtg6RcceJgCKl5Zoh+eIinbuzRpNSWIav/2fCGE+2D8ZakxwYKkkf7SCo7d8kjGrJny2iq1jRnjMcO2STiYxccnRKO0XDkvuW+63LGeMiNAKOZxhwePJcUqP1vinQFSNUDRwwlIa4lsG/RRqJaBlr/UZ0ymlWNgSot4Z0ps5GNIhkaF/tjbeq+OIgc/92TrdzCVPkoA+w8tS1vwA7eYwzbAyxLE6H4TPP2YG7LQg0y+r+ent5erqW4vA9Nfzy2L9F2aUDVgxLo65QqmjKp/pU5wGAcJfyYefQgvz0Kukt2pT6njB1+DGq1z0+b5OePOuVELBsLDurjyY9VJfpuZx7dGT+jS+pEzUA0e7szcLUjLrpaxk/qLyr23Y3MJepigW/6leXE3g5jf+q1A1G2oeinj3sYY1rwpVYRJYmrKXq9HkgP/+P4sHJN+GjjGjw5N9n3VYYlaaUHoOYSLsdjKuQZRJHG9mJxnaoowymGcHfb41bCAWkc7A++MyDpR5o0NGbzLnOX/bTDmeWPyNgrJ6+E+RxBIOJO0sJx5hTvl0kqzqzzlzVAtVi2IJN4oSnxM4CR/03HkXvGaR5KThP2ev/lAChGOou0VoE/z8NO6OU+e2ME1pdZlC+IC55snAfzZ1GH9DtviFmd+YgbyuILrmMW4G7cmO0VMw56yoNwxLl/RNNspzzIO3YPu0jI24IjdV1nViLP7mH1f3bm+paDdtZy5pj8DC8Xg8594wc1gdpjFvpg880csRbPahDWhS2OkJld5v7dn43ZIKNSXnmdqyFezGw3aOedWv7wUBE6jTBEnzFMNRV/zFSRIpFa9qW5iwA0/SiWoOALJ5EoIvJEJ1LqDc5o0+I6DwBy6nWDmZXu+TanBmyuHXJAEG6U07CeVPwvf/k4hKIfWO4jq5z3aZscqP5OUOT4OFIZq7Mbb71Z2OJ+nVEt2HZtj405/ZyYJ2Iew8wr88WTiSPlxam1Q4B7iZ6p1ICrSdyQqD+Z7vdDiYl64L1DpTxe1/aV9tUp6Da9E449+N+fXBXUivhIaXKAtxHYsRFzEwVIJyBOpiWA83KrHgOijKWS0jRu7/c4kqV1R6uFd/97ZUd4KisAKGUDJhO1+DGoqVbXycVhR2BoD+pVo0YwOaeYirx67RQUZqHNFFRyQq+43Jwsj1CWY8D+4MhooEGo87t7zP4hwVmlB8f8tCVDVaLPDQ== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 022eb0d9-5a30-4cb9-01e1-08da301cc6eb X-MS-Exchange-CrossTenant-AuthSource: AS8PR01MB7944.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 May 2022 11:28:58.3041 (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: DB6PR0102MB2663 Subject: [FFmpeg-devel] [PATCH 06/44] avformat/utils: Move ff_stream_add_bitstream_filter to mux.c 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: rL06ocQmwfeu It is muxing-only; in fact, it should be considered part of the core muxing code. Signed-off-by: Andreas Rheinhardt --- libavformat/flvenc.c | 3 +-- libavformat/internal.h | 11 ---------- libavformat/ivfenc.c | 1 + libavformat/latmenc.c | 1 + libavformat/matroskaenc.c | 2 +- libavformat/mpegtsenc.c | 1 + libavformat/mux.c | 43 +++++++++++++++++++++++++++++++++++++++ libavformat/mux.h | 11 ++++++++++ libavformat/rawenc.c | 2 +- libavformat/utils.c | 43 --------------------------------------- 10 files changed, 60 insertions(+), 58 deletions(-) diff --git a/libavformat/flvenc.c b/libavformat/flvenc.c index 429732297d..4e65ba4066 100644 --- a/libavformat/flvenc.c +++ b/libavformat/flvenc.c @@ -25,13 +25,12 @@ #include "libavutil/avassert.h" #include "libavutil/mathematics.h" #include "libavcodec/mpeg4audio.h" -#include "avio_internal.h" #include "avio.h" #include "avc.h" #include "avformat.h" #include "flv.h" #include "internal.h" -#include "metadata.h" +#include "mux.h" #include "libavutil/opt.h" #include "libavcodec/put_bits.h" diff --git a/libavformat/internal.h b/libavformat/internal.h index 5e84942fb9..a40a29c5c0 100644 --- a/libavformat/internal.h +++ b/libavformat/internal.h @@ -771,17 +771,6 @@ enum AVCodecID ff_get_pcm_codec_id(int bps, int flt, int be, int sflags); */ int ff_generate_avci_extradata(AVStream *st); -/** - * Add a bitstream filter to a stream. - * - * @param st output stream to add a filter to - * @param name the name of the filter to add - * @param args filter-specific argument string - * @return >0 on success; - * AVERROR code on failure - */ -int ff_stream_add_bitstream_filter(AVStream *st, const char *name, const char *args); - /** * Copy encoding parameters from source to destination stream * diff --git a/libavformat/ivfenc.c b/libavformat/ivfenc.c index 5aa8bd1257..ed5ec90ce9 100644 --- a/libavformat/ivfenc.c +++ b/libavformat/ivfenc.c @@ -19,6 +19,7 @@ */ #include "avformat.h" #include "internal.h" +#include "mux.h" #include "libavutil/intreadwrite.h" typedef struct IVFEncContext { diff --git a/libavformat/latmenc.c b/libavformat/latmenc.c index 72865c9565..6553c28d9f 100644 --- a/libavformat/latmenc.c +++ b/libavformat/latmenc.c @@ -28,6 +28,7 @@ #include "libavutil/opt.h" #include "avformat.h" #include "internal.h" +#include "mux.h" #include "rawenc.h" #define MAX_EXTRADATA_SIZE 1024 diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index 3b8ca11f28..4f9e283940 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -21,7 +21,6 @@ #include -#include "config.h" #include "config_components.h" #include "av1.h" @@ -35,6 +34,7 @@ #include "internal.h" #include "isom.h" #include "matroska.h" +#include "mux.h" #include "riff.h" #include "version.h" #include "vorbiscomment.h" diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c index ead2ca25db..18e8f7e45f 100644 --- a/libavformat/mpegtsenc.c +++ b/libavformat/mpegtsenc.c @@ -34,6 +34,7 @@ #include "avio_internal.h" #include "internal.h" #include "mpegts.h" +#include "mux.h" #define PCR_TIME_BASE 27000000 diff --git a/libavformat/mux.c b/libavformat/mux.c index 11b0cb1307..31361f9b46 100644 --- a/libavformat/mux.c +++ b/libavformat/mux.c @@ -1304,6 +1304,49 @@ int av_get_output_timestamp(struct AVFormatContext *s, int stream, return 0; } +int ff_stream_add_bitstream_filter(AVStream *st, const char *name, const char *args) +{ + int ret; + const AVBitStreamFilter *bsf; + FFStream *const sti = ffstream(st); + AVBSFContext *bsfc; + + av_assert0(!sti->bsfc); + + if (!(bsf = av_bsf_get_by_name(name))) { + av_log(NULL, AV_LOG_ERROR, "Unknown bitstream filter '%s'\n", name); + return AVERROR_BSF_NOT_FOUND; + } + + if ((ret = av_bsf_alloc(bsf, &bsfc)) < 0) + return ret; + + bsfc->time_base_in = st->time_base; + if ((ret = avcodec_parameters_copy(bsfc->par_in, st->codecpar)) < 0) { + av_bsf_free(&bsfc); + return ret; + } + + if (args && bsfc->filter->priv_class) { + if ((ret = av_set_options_string(bsfc->priv_data, args, "=", ":")) < 0) { + av_bsf_free(&bsfc); + return ret; + } + } + + if ((ret = av_bsf_init(bsfc)) < 0) { + av_bsf_free(&bsfc); + return ret; + } + + sti->bsfc = bsfc; + + av_log(NULL, AV_LOG_VERBOSE, + "Automatically inserted bitstream filter '%s'; args='%s'\n", + name, args ? args : ""); + return 1; +} + int ff_write_chained(AVFormatContext *dst, int dst_stream, AVPacket *pkt, AVFormatContext *src, int interleave) { diff --git a/libavformat/mux.h b/libavformat/mux.h index d1dc2fa2cb..4f6e8a50e5 100644 --- a/libavformat/mux.h +++ b/libavformat/mux.h @@ -56,6 +56,17 @@ const AVPacket *ff_interleaved_peek(AVFormatContext *s, int stream); int ff_get_muxer_ts_offset(AVFormatContext *s, int stream_index, int64_t *offset); +/** + * Add a bitstream filter to a stream. + * + * @param st output stream to add a filter to + * @param name the name of the filter to add + * @param args filter-specific argument string + * @return >0 on success; + * AVERROR code on failure + */ +int ff_stream_add_bitstream_filter(AVStream *st, const char *name, const char *args); + /** * Write a packet to another muxer than the one the user originally * intended. Useful when chaining muxers, where one muxer internally diff --git a/libavformat/rawenc.c b/libavformat/rawenc.c index efdfd0b0aa..26099cb1c1 100644 --- a/libavformat/rawenc.c +++ b/libavformat/rawenc.c @@ -26,7 +26,7 @@ #include "avformat.h" #include "rawenc.h" -#include "internal.h" +#include "mux.h" int ff_raw_write_packet(AVFormatContext *s, AVPacket *pkt) { diff --git a/libavformat/utils.c b/libavformat/utils.c index a905838468..fcee417c4e 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -1776,49 +1776,6 @@ uint8_t *av_stream_new_side_data(AVStream *st, enum AVPacketSideDataType type, return data; } -int ff_stream_add_bitstream_filter(AVStream *st, const char *name, const char *args) -{ - int ret; - const AVBitStreamFilter *bsf; - FFStream *const sti = ffstream(st); - AVBSFContext *bsfc; - - av_assert0(!sti->bsfc); - - if (!(bsf = av_bsf_get_by_name(name))) { - av_log(NULL, AV_LOG_ERROR, "Unknown bitstream filter '%s'\n", name); - return AVERROR_BSF_NOT_FOUND; - } - - if ((ret = av_bsf_alloc(bsf, &bsfc)) < 0) - return ret; - - bsfc->time_base_in = st->time_base; - if ((ret = avcodec_parameters_copy(bsfc->par_in, st->codecpar)) < 0) { - av_bsf_free(&bsfc); - return ret; - } - - if (args && bsfc->filter->priv_class) { - if ((ret = av_set_options_string(bsfc->priv_data, args, "=", ":")) < 0) { - av_bsf_free(&bsfc); - return ret; - } - } - - if ((ret = av_bsf_init(bsfc)) < 0) { - av_bsf_free(&bsfc); - return ret; - } - - sti->bsfc = bsfc; - - av_log(NULL, AV_LOG_VERBOSE, - "Automatically inserted bitstream filter '%s'; args='%s'\n", - name, args ? args : ""); - return 1; -} - int ff_format_output_open(AVFormatContext *s, const char *url, AVDictionary **options) { if (!s->oformat)