1cabdff1aSopenharmony_ci/*
2cabdff1aSopenharmony_ci * RAW muxers
3cabdff1aSopenharmony_ci * Copyright (c) 2001 Fabrice Bellard
4cabdff1aSopenharmony_ci * Copyright (c) 2005 Alex Beregszaszi
5cabdff1aSopenharmony_ci *
6cabdff1aSopenharmony_ci * This file is part of FFmpeg.
7cabdff1aSopenharmony_ci *
8cabdff1aSopenharmony_ci * FFmpeg is free software; you can redistribute it and/or
9cabdff1aSopenharmony_ci * modify it under the terms of the GNU Lesser General Public
10cabdff1aSopenharmony_ci * License as published by the Free Software Foundation; either
11cabdff1aSopenharmony_ci * version 2.1 of the License, or (at your option) any later version.
12cabdff1aSopenharmony_ci *
13cabdff1aSopenharmony_ci * FFmpeg is distributed in the hope that it will be useful,
14cabdff1aSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of
15cabdff1aSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16cabdff1aSopenharmony_ci * Lesser General Public License for more details.
17cabdff1aSopenharmony_ci *
18cabdff1aSopenharmony_ci * You should have received a copy of the GNU Lesser General Public
19cabdff1aSopenharmony_ci * License along with FFmpeg; if not, write to the Free Software
20cabdff1aSopenharmony_ci * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21cabdff1aSopenharmony_ci */
22cabdff1aSopenharmony_ci
23cabdff1aSopenharmony_ci#include "config_components.h"
24cabdff1aSopenharmony_ci
25cabdff1aSopenharmony_ci#include "libavutil/intreadwrite.h"
26cabdff1aSopenharmony_ci
27cabdff1aSopenharmony_ci#include "avformat.h"
28cabdff1aSopenharmony_ci#include "rawenc.h"
29cabdff1aSopenharmony_ci#include "mux.h"
30cabdff1aSopenharmony_ci
31cabdff1aSopenharmony_ciint ff_raw_write_packet(AVFormatContext *s, AVPacket *pkt)
32cabdff1aSopenharmony_ci{
33cabdff1aSopenharmony_ci    avio_write(s->pb, pkt->data, pkt->size);
34cabdff1aSopenharmony_ci    return 0;
35cabdff1aSopenharmony_ci}
36cabdff1aSopenharmony_ci
37cabdff1aSopenharmony_cistatic int force_one_stream(AVFormatContext *s)
38cabdff1aSopenharmony_ci{
39cabdff1aSopenharmony_ci    if (s->nb_streams != 1) {
40cabdff1aSopenharmony_ci        av_log(s, AV_LOG_ERROR, "%s files have exactly one stream\n",
41cabdff1aSopenharmony_ci               s->oformat->name);
42cabdff1aSopenharmony_ci        return AVERROR(EINVAL);
43cabdff1aSopenharmony_ci    }
44cabdff1aSopenharmony_ci    if (   s->oformat->audio_codec != AV_CODEC_ID_NONE
45cabdff1aSopenharmony_ci        && s->streams[0]->codecpar->codec_type != AVMEDIA_TYPE_AUDIO) {
46cabdff1aSopenharmony_ci        av_log(s, AV_LOG_ERROR, "%s files have exactly one audio stream\n",
47cabdff1aSopenharmony_ci               s->oformat->name);
48cabdff1aSopenharmony_ci        return AVERROR(EINVAL);
49cabdff1aSopenharmony_ci    }
50cabdff1aSopenharmony_ci    if (   s->oformat->video_codec != AV_CODEC_ID_NONE
51cabdff1aSopenharmony_ci        && s->streams[0]->codecpar->codec_type != AVMEDIA_TYPE_VIDEO) {
52cabdff1aSopenharmony_ci        av_log(s, AV_LOG_ERROR, "%s files have exactly one video stream\n",
53cabdff1aSopenharmony_ci               s->oformat->name);
54cabdff1aSopenharmony_ci        return AVERROR(EINVAL);
55cabdff1aSopenharmony_ci    }
56cabdff1aSopenharmony_ci    return 0;
57cabdff1aSopenharmony_ci}
58cabdff1aSopenharmony_ci
59cabdff1aSopenharmony_ci/* Note: Do not forget to add new entries to the Makefile as well. */
60cabdff1aSopenharmony_ci
61cabdff1aSopenharmony_ci#if CONFIG_AC3_MUXER
62cabdff1aSopenharmony_ciconst AVOutputFormat ff_ac3_muxer = {
63cabdff1aSopenharmony_ci    .name              = "ac3",
64cabdff1aSopenharmony_ci    .long_name         = NULL_IF_CONFIG_SMALL("raw AC-3"),
65cabdff1aSopenharmony_ci    .mime_type         = "audio/x-ac3",
66cabdff1aSopenharmony_ci    .extensions        = "ac3",
67cabdff1aSopenharmony_ci    .audio_codec       = AV_CODEC_ID_AC3,
68cabdff1aSopenharmony_ci    .video_codec       = AV_CODEC_ID_NONE,
69cabdff1aSopenharmony_ci    .init              = force_one_stream,
70cabdff1aSopenharmony_ci    .write_packet      = ff_raw_write_packet,
71cabdff1aSopenharmony_ci    .flags             = AVFMT_NOTIMESTAMPS,
72cabdff1aSopenharmony_ci};
73cabdff1aSopenharmony_ci#endif
74cabdff1aSopenharmony_ci
75cabdff1aSopenharmony_ci#if CONFIG_ADX_MUXER
76cabdff1aSopenharmony_ci
77cabdff1aSopenharmony_cistatic int adx_write_trailer(AVFormatContext *s)
78cabdff1aSopenharmony_ci{
79cabdff1aSopenharmony_ci    AVIOContext *pb = s->pb;
80cabdff1aSopenharmony_ci    AVCodecParameters *par = s->streams[0]->codecpar;
81cabdff1aSopenharmony_ci
82cabdff1aSopenharmony_ci    if (pb->seekable & AVIO_SEEKABLE_NORMAL) {
83cabdff1aSopenharmony_ci        int64_t file_size = avio_tell(pb);
84cabdff1aSopenharmony_ci        uint64_t sample_count = (file_size - 36) / par->ch_layout.nb_channels / 18 * 32;
85cabdff1aSopenharmony_ci        if (sample_count <= UINT32_MAX) {
86cabdff1aSopenharmony_ci            avio_seek(pb, 12, SEEK_SET);
87cabdff1aSopenharmony_ci            avio_wb32(pb, sample_count);
88cabdff1aSopenharmony_ci            avio_seek(pb, file_size, SEEK_SET);
89cabdff1aSopenharmony_ci        }
90cabdff1aSopenharmony_ci    }
91cabdff1aSopenharmony_ci
92cabdff1aSopenharmony_ci    return 0;
93cabdff1aSopenharmony_ci}
94cabdff1aSopenharmony_ci
95cabdff1aSopenharmony_ciconst AVOutputFormat ff_adx_muxer = {
96cabdff1aSopenharmony_ci    .name              = "adx",
97cabdff1aSopenharmony_ci    .long_name         = NULL_IF_CONFIG_SMALL("CRI ADX"),
98cabdff1aSopenharmony_ci    .extensions        = "adx",
99cabdff1aSopenharmony_ci    .audio_codec       = AV_CODEC_ID_ADPCM_ADX,
100cabdff1aSopenharmony_ci    .video_codec       = AV_CODEC_ID_NONE,
101cabdff1aSopenharmony_ci    .init              = force_one_stream,
102cabdff1aSopenharmony_ci    .write_packet      = ff_raw_write_packet,
103cabdff1aSopenharmony_ci    .write_trailer     = adx_write_trailer,
104cabdff1aSopenharmony_ci    .flags             = AVFMT_NOTIMESTAMPS,
105cabdff1aSopenharmony_ci};
106cabdff1aSopenharmony_ci#endif
107cabdff1aSopenharmony_ci
108cabdff1aSopenharmony_ci#if CONFIG_APTX_MUXER
109cabdff1aSopenharmony_ciconst AVOutputFormat ff_aptx_muxer = {
110cabdff1aSopenharmony_ci    .name              = "aptx",
111cabdff1aSopenharmony_ci    .long_name         = NULL_IF_CONFIG_SMALL("raw aptX (Audio Processing Technology for Bluetooth)"),
112cabdff1aSopenharmony_ci    .extensions        = "aptx",
113cabdff1aSopenharmony_ci    .audio_codec       = AV_CODEC_ID_APTX,
114cabdff1aSopenharmony_ci    .video_codec       = AV_CODEC_ID_NONE,
115cabdff1aSopenharmony_ci    .init              = force_one_stream,
116cabdff1aSopenharmony_ci    .write_packet      = ff_raw_write_packet,
117cabdff1aSopenharmony_ci    .flags             = AVFMT_NOTIMESTAMPS,
118cabdff1aSopenharmony_ci};
119cabdff1aSopenharmony_ci#endif
120cabdff1aSopenharmony_ci
121cabdff1aSopenharmony_ci#if CONFIG_APTX_HD_MUXER
122cabdff1aSopenharmony_ciconst AVOutputFormat ff_aptx_hd_muxer = {
123cabdff1aSopenharmony_ci    .name              = "aptx_hd",
124cabdff1aSopenharmony_ci    .long_name         = NULL_IF_CONFIG_SMALL("raw aptX HD (Audio Processing Technology for Bluetooth)"),
125cabdff1aSopenharmony_ci    .extensions        = "aptxhd",
126cabdff1aSopenharmony_ci    .audio_codec       = AV_CODEC_ID_APTX_HD,
127cabdff1aSopenharmony_ci    .video_codec       = AV_CODEC_ID_NONE,
128cabdff1aSopenharmony_ci    .init              = force_one_stream,
129cabdff1aSopenharmony_ci    .write_packet      = ff_raw_write_packet,
130cabdff1aSopenharmony_ci    .flags             = AVFMT_NOTIMESTAMPS,
131cabdff1aSopenharmony_ci};
132cabdff1aSopenharmony_ci#endif
133cabdff1aSopenharmony_ci
134cabdff1aSopenharmony_ci#if CONFIG_AVS2_MUXER
135cabdff1aSopenharmony_ciconst AVOutputFormat ff_avs2_muxer = {
136cabdff1aSopenharmony_ci    .name              = "avs2",
137cabdff1aSopenharmony_ci    .long_name         = NULL_IF_CONFIG_SMALL("raw AVS2-P2/IEEE1857.4 video"),
138cabdff1aSopenharmony_ci    .extensions        = "avs,avs2",
139cabdff1aSopenharmony_ci    .audio_codec       = AV_CODEC_ID_NONE,
140cabdff1aSopenharmony_ci    .video_codec       = AV_CODEC_ID_AVS2,
141cabdff1aSopenharmony_ci    .init              = force_one_stream,
142cabdff1aSopenharmony_ci    .write_packet      = ff_raw_write_packet,
143cabdff1aSopenharmony_ci    .flags             = AVFMT_NOTIMESTAMPS,
144cabdff1aSopenharmony_ci};
145cabdff1aSopenharmony_ci#endif
146cabdff1aSopenharmony_ci
147cabdff1aSopenharmony_ci#if CONFIG_AVS3_MUXER
148cabdff1aSopenharmony_ciconst AVOutputFormat ff_avs3_muxer = {
149cabdff1aSopenharmony_ci    .name              = "avs3",
150cabdff1aSopenharmony_ci    .long_name         = NULL_IF_CONFIG_SMALL("AVS3-P2/IEEE1857.10"),
151cabdff1aSopenharmony_ci    .extensions        = "avs3",
152cabdff1aSopenharmony_ci    .audio_codec       = AV_CODEC_ID_NONE,
153cabdff1aSopenharmony_ci    .video_codec       = AV_CODEC_ID_AVS3,
154cabdff1aSopenharmony_ci    .init              = force_one_stream,
155cabdff1aSopenharmony_ci    .write_packet      = ff_raw_write_packet,
156cabdff1aSopenharmony_ci    .flags             = AVFMT_NOTIMESTAMPS,
157cabdff1aSopenharmony_ci};
158cabdff1aSopenharmony_ci#endif
159cabdff1aSopenharmony_ci
160cabdff1aSopenharmony_ci
161cabdff1aSopenharmony_ci#if CONFIG_CAVSVIDEO_MUXER
162cabdff1aSopenharmony_ciconst AVOutputFormat ff_cavsvideo_muxer = {
163cabdff1aSopenharmony_ci    .name              = "cavsvideo",
164cabdff1aSopenharmony_ci    .long_name         = NULL_IF_CONFIG_SMALL("raw Chinese AVS (Audio Video Standard) video"),
165cabdff1aSopenharmony_ci    .extensions        = "cavs",
166cabdff1aSopenharmony_ci    .audio_codec       = AV_CODEC_ID_NONE,
167cabdff1aSopenharmony_ci    .video_codec       = AV_CODEC_ID_CAVS,
168cabdff1aSopenharmony_ci    .init              = force_one_stream,
169cabdff1aSopenharmony_ci    .write_packet      = ff_raw_write_packet,
170cabdff1aSopenharmony_ci    .flags             = AVFMT_NOTIMESTAMPS,
171cabdff1aSopenharmony_ci};
172cabdff1aSopenharmony_ci#endif
173cabdff1aSopenharmony_ci
174cabdff1aSopenharmony_ci#if CONFIG_CODEC2RAW_MUXER
175cabdff1aSopenharmony_ciconst AVOutputFormat ff_codec2raw_muxer = {
176cabdff1aSopenharmony_ci    .name              = "codec2raw",
177cabdff1aSopenharmony_ci    .long_name         = NULL_IF_CONFIG_SMALL("raw codec2 muxer"),
178cabdff1aSopenharmony_ci    .audio_codec       = AV_CODEC_ID_CODEC2,
179cabdff1aSopenharmony_ci    .video_codec       = AV_CODEC_ID_NONE,
180cabdff1aSopenharmony_ci    .init              = force_one_stream,
181cabdff1aSopenharmony_ci    .write_packet      = ff_raw_write_packet,
182cabdff1aSopenharmony_ci    .flags             = AVFMT_NOTIMESTAMPS,
183cabdff1aSopenharmony_ci};
184cabdff1aSopenharmony_ci#endif
185cabdff1aSopenharmony_ci
186cabdff1aSopenharmony_ci
187cabdff1aSopenharmony_ci#if CONFIG_DATA_MUXER
188cabdff1aSopenharmony_ciconst AVOutputFormat ff_data_muxer = {
189cabdff1aSopenharmony_ci    .name              = "data",
190cabdff1aSopenharmony_ci    .long_name         = NULL_IF_CONFIG_SMALL("raw data"),
191cabdff1aSopenharmony_ci    .init              = force_one_stream,
192cabdff1aSopenharmony_ci    .write_packet      = ff_raw_write_packet,
193cabdff1aSopenharmony_ci    .flags             = AVFMT_NOTIMESTAMPS,
194cabdff1aSopenharmony_ci};
195cabdff1aSopenharmony_ci#endif
196cabdff1aSopenharmony_ci
197cabdff1aSopenharmony_ci#if CONFIG_DFPWM_MUXER
198cabdff1aSopenharmony_ciconst AVOutputFormat ff_dfpwm_muxer = {
199cabdff1aSopenharmony_ci    .name              = "dfpwm",
200cabdff1aSopenharmony_ci    .long_name         = NULL_IF_CONFIG_SMALL("raw DFPWM1a"),
201cabdff1aSopenharmony_ci    .extensions        = "dfpwm",
202cabdff1aSopenharmony_ci    .audio_codec       = AV_CODEC_ID_DFPWM,
203cabdff1aSopenharmony_ci    .video_codec       = AV_CODEC_ID_NONE,
204cabdff1aSopenharmony_ci    .init              = force_one_stream,
205cabdff1aSopenharmony_ci    .write_packet      = ff_raw_write_packet,
206cabdff1aSopenharmony_ci    .flags             = AVFMT_NOTIMESTAMPS,
207cabdff1aSopenharmony_ci};
208cabdff1aSopenharmony_ci#endif
209cabdff1aSopenharmony_ci
210cabdff1aSopenharmony_ci#if CONFIG_DIRAC_MUXER
211cabdff1aSopenharmony_ciconst AVOutputFormat ff_dirac_muxer = {
212cabdff1aSopenharmony_ci    .name              = "dirac",
213cabdff1aSopenharmony_ci    .long_name         = NULL_IF_CONFIG_SMALL("raw Dirac"),
214cabdff1aSopenharmony_ci    .extensions        = "drc,vc2",
215cabdff1aSopenharmony_ci    .audio_codec       = AV_CODEC_ID_NONE,
216cabdff1aSopenharmony_ci    .video_codec       = AV_CODEC_ID_DIRAC,
217cabdff1aSopenharmony_ci    .init              = force_one_stream,
218cabdff1aSopenharmony_ci    .write_packet      = ff_raw_write_packet,
219cabdff1aSopenharmony_ci    .flags             = AVFMT_NOTIMESTAMPS,
220cabdff1aSopenharmony_ci};
221cabdff1aSopenharmony_ci#endif
222cabdff1aSopenharmony_ci
223cabdff1aSopenharmony_ci#if CONFIG_DNXHD_MUXER
224cabdff1aSopenharmony_ciconst AVOutputFormat ff_dnxhd_muxer = {
225cabdff1aSopenharmony_ci    .name              = "dnxhd",
226cabdff1aSopenharmony_ci    .long_name         = NULL_IF_CONFIG_SMALL("raw DNxHD (SMPTE VC-3)"),
227cabdff1aSopenharmony_ci    .extensions        = "dnxhd,dnxhr",
228cabdff1aSopenharmony_ci    .audio_codec       = AV_CODEC_ID_NONE,
229cabdff1aSopenharmony_ci    .video_codec       = AV_CODEC_ID_DNXHD,
230cabdff1aSopenharmony_ci    .init              = force_one_stream,
231cabdff1aSopenharmony_ci    .write_packet      = ff_raw_write_packet,
232cabdff1aSopenharmony_ci    .flags             = AVFMT_NOTIMESTAMPS,
233cabdff1aSopenharmony_ci};
234cabdff1aSopenharmony_ci#endif
235cabdff1aSopenharmony_ci
236cabdff1aSopenharmony_ci#if CONFIG_DTS_MUXER
237cabdff1aSopenharmony_ciconst AVOutputFormat ff_dts_muxer = {
238cabdff1aSopenharmony_ci    .name              = "dts",
239cabdff1aSopenharmony_ci    .long_name         = NULL_IF_CONFIG_SMALL("raw DTS"),
240cabdff1aSopenharmony_ci    .mime_type         = "audio/x-dca",
241cabdff1aSopenharmony_ci    .extensions        = "dts",
242cabdff1aSopenharmony_ci    .audio_codec       = AV_CODEC_ID_DTS,
243cabdff1aSopenharmony_ci    .video_codec       = AV_CODEC_ID_NONE,
244cabdff1aSopenharmony_ci    .init              = force_one_stream,
245cabdff1aSopenharmony_ci    .write_packet      = ff_raw_write_packet,
246cabdff1aSopenharmony_ci    .flags             = AVFMT_NOTIMESTAMPS,
247cabdff1aSopenharmony_ci};
248cabdff1aSopenharmony_ci#endif
249cabdff1aSopenharmony_ci
250cabdff1aSopenharmony_ci#if CONFIG_EAC3_MUXER
251cabdff1aSopenharmony_ciconst AVOutputFormat ff_eac3_muxer = {
252cabdff1aSopenharmony_ci    .name              = "eac3",
253cabdff1aSopenharmony_ci    .long_name         = NULL_IF_CONFIG_SMALL("raw E-AC-3"),
254cabdff1aSopenharmony_ci    .mime_type         = "audio/x-eac3",
255cabdff1aSopenharmony_ci    .extensions        = "eac3",
256cabdff1aSopenharmony_ci    .audio_codec       = AV_CODEC_ID_EAC3,
257cabdff1aSopenharmony_ci    .video_codec       = AV_CODEC_ID_NONE,
258cabdff1aSopenharmony_ci    .init              = force_one_stream,
259cabdff1aSopenharmony_ci    .write_packet      = ff_raw_write_packet,
260cabdff1aSopenharmony_ci    .flags             = AVFMT_NOTIMESTAMPS,
261cabdff1aSopenharmony_ci};
262cabdff1aSopenharmony_ci#endif
263cabdff1aSopenharmony_ci
264cabdff1aSopenharmony_ci#if CONFIG_G722_MUXER
265cabdff1aSopenharmony_ciconst AVOutputFormat ff_g722_muxer = {
266cabdff1aSopenharmony_ci    .name              = "g722",
267cabdff1aSopenharmony_ci    .long_name         = NULL_IF_CONFIG_SMALL("raw G.722"),
268cabdff1aSopenharmony_ci    .mime_type         = "audio/G722",
269cabdff1aSopenharmony_ci    .extensions        = "g722",
270cabdff1aSopenharmony_ci    .audio_codec       = AV_CODEC_ID_ADPCM_G722,
271cabdff1aSopenharmony_ci    .video_codec       = AV_CODEC_ID_NONE,
272cabdff1aSopenharmony_ci    .init              = force_one_stream,
273cabdff1aSopenharmony_ci    .write_packet      = ff_raw_write_packet,
274cabdff1aSopenharmony_ci    .flags             = AVFMT_NOTIMESTAMPS,
275cabdff1aSopenharmony_ci};
276cabdff1aSopenharmony_ci#endif
277cabdff1aSopenharmony_ci
278cabdff1aSopenharmony_ci#if CONFIG_G723_1_MUXER
279cabdff1aSopenharmony_ciconst AVOutputFormat ff_g723_1_muxer = {
280cabdff1aSopenharmony_ci    .name              = "g723_1",
281cabdff1aSopenharmony_ci    .long_name         = NULL_IF_CONFIG_SMALL("raw G.723.1"),
282cabdff1aSopenharmony_ci    .mime_type         = "audio/g723",
283cabdff1aSopenharmony_ci    .extensions        = "tco,rco",
284cabdff1aSopenharmony_ci    .audio_codec       = AV_CODEC_ID_G723_1,
285cabdff1aSopenharmony_ci    .video_codec       = AV_CODEC_ID_NONE,
286cabdff1aSopenharmony_ci    .init              = force_one_stream,
287cabdff1aSopenharmony_ci    .write_packet      = ff_raw_write_packet,
288cabdff1aSopenharmony_ci    .flags             = AVFMT_NOTIMESTAMPS,
289cabdff1aSopenharmony_ci};
290cabdff1aSopenharmony_ci#endif
291cabdff1aSopenharmony_ci
292cabdff1aSopenharmony_ci#if CONFIG_G726_MUXER
293cabdff1aSopenharmony_ciconst AVOutputFormat ff_g726_muxer = {
294cabdff1aSopenharmony_ci    .name              = "g726",
295cabdff1aSopenharmony_ci    .long_name         = NULL_IF_CONFIG_SMALL("raw big-endian G.726 (\"left-justified\")"),
296cabdff1aSopenharmony_ci    .audio_codec       = AV_CODEC_ID_ADPCM_G726,
297cabdff1aSopenharmony_ci    .video_codec       = AV_CODEC_ID_NONE,
298cabdff1aSopenharmony_ci    .init              = force_one_stream,
299cabdff1aSopenharmony_ci    .write_packet      = ff_raw_write_packet,
300cabdff1aSopenharmony_ci    .flags             = AVFMT_NOTIMESTAMPS,
301cabdff1aSopenharmony_ci};
302cabdff1aSopenharmony_ci#endif
303cabdff1aSopenharmony_ci
304cabdff1aSopenharmony_ci#if CONFIG_G726LE_MUXER
305cabdff1aSopenharmony_ciconst AVOutputFormat ff_g726le_muxer = {
306cabdff1aSopenharmony_ci    .name              = "g726le",
307cabdff1aSopenharmony_ci    .long_name         = NULL_IF_CONFIG_SMALL("raw little-endian G.726 (\"right-justified\")"),
308cabdff1aSopenharmony_ci    .audio_codec       = AV_CODEC_ID_ADPCM_G726LE,
309cabdff1aSopenharmony_ci    .video_codec       = AV_CODEC_ID_NONE,
310cabdff1aSopenharmony_ci    .init              = force_one_stream,
311cabdff1aSopenharmony_ci    .write_packet      = ff_raw_write_packet,
312cabdff1aSopenharmony_ci    .flags             = AVFMT_NOTIMESTAMPS,
313cabdff1aSopenharmony_ci};
314cabdff1aSopenharmony_ci#endif
315cabdff1aSopenharmony_ci
316cabdff1aSopenharmony_ci#if CONFIG_GSM_MUXER
317cabdff1aSopenharmony_ciconst AVOutputFormat ff_gsm_muxer = {
318cabdff1aSopenharmony_ci    .name              = "gsm",
319cabdff1aSopenharmony_ci    .long_name         = NULL_IF_CONFIG_SMALL("raw GSM"),
320cabdff1aSopenharmony_ci    .mime_type         = "audio/x-gsm",
321cabdff1aSopenharmony_ci    .extensions        = "gsm",
322cabdff1aSopenharmony_ci    .audio_codec       = AV_CODEC_ID_GSM,
323cabdff1aSopenharmony_ci    .video_codec       = AV_CODEC_ID_NONE,
324cabdff1aSopenharmony_ci    .init              = force_one_stream,
325cabdff1aSopenharmony_ci    .write_packet      = ff_raw_write_packet,
326cabdff1aSopenharmony_ci    .flags             = AVFMT_NOTIMESTAMPS,
327cabdff1aSopenharmony_ci};
328cabdff1aSopenharmony_ci#endif
329cabdff1aSopenharmony_ci
330cabdff1aSopenharmony_ci#if CONFIG_H261_MUXER
331cabdff1aSopenharmony_ciconst AVOutputFormat ff_h261_muxer = {
332cabdff1aSopenharmony_ci    .name              = "h261",
333cabdff1aSopenharmony_ci    .long_name         = NULL_IF_CONFIG_SMALL("raw H.261"),
334cabdff1aSopenharmony_ci    .mime_type         = "video/x-h261",
335cabdff1aSopenharmony_ci    .extensions        = "h261",
336cabdff1aSopenharmony_ci    .audio_codec       = AV_CODEC_ID_NONE,
337cabdff1aSopenharmony_ci    .video_codec       = AV_CODEC_ID_H261,
338cabdff1aSopenharmony_ci    .init              = force_one_stream,
339cabdff1aSopenharmony_ci    .write_packet      = ff_raw_write_packet,
340cabdff1aSopenharmony_ci    .flags             = AVFMT_NOTIMESTAMPS,
341cabdff1aSopenharmony_ci};
342cabdff1aSopenharmony_ci#endif
343cabdff1aSopenharmony_ci
344cabdff1aSopenharmony_ci#if CONFIG_H263_MUXER
345cabdff1aSopenharmony_ciconst AVOutputFormat ff_h263_muxer = {
346cabdff1aSopenharmony_ci    .name              = "h263",
347cabdff1aSopenharmony_ci    .long_name         = NULL_IF_CONFIG_SMALL("raw H.263"),
348cabdff1aSopenharmony_ci    .mime_type         = "video/x-h263",
349cabdff1aSopenharmony_ci    .extensions        = "h263",
350cabdff1aSopenharmony_ci    .audio_codec       = AV_CODEC_ID_NONE,
351cabdff1aSopenharmony_ci    .video_codec       = AV_CODEC_ID_H263,
352cabdff1aSopenharmony_ci    .init              = force_one_stream,
353cabdff1aSopenharmony_ci    .write_packet      = ff_raw_write_packet,
354cabdff1aSopenharmony_ci    .flags             = AVFMT_NOTIMESTAMPS,
355cabdff1aSopenharmony_ci};
356cabdff1aSopenharmony_ci#endif
357cabdff1aSopenharmony_ci
358cabdff1aSopenharmony_ci#if CONFIG_H264_MUXER
359cabdff1aSopenharmony_cistatic int h264_check_bitstream(AVFormatContext *s, AVStream *st,
360cabdff1aSopenharmony_ci                                const AVPacket *pkt)
361cabdff1aSopenharmony_ci{
362cabdff1aSopenharmony_ci    if (pkt->size >= 5 && AV_RB32(pkt->data) != 0x0000001 &&
363cabdff1aSopenharmony_ci                          AV_RB24(pkt->data) != 0x000001)
364cabdff1aSopenharmony_ci        return ff_stream_add_bitstream_filter(st, "h264_mp4toannexb", NULL);
365cabdff1aSopenharmony_ci    return 1;
366cabdff1aSopenharmony_ci}
367cabdff1aSopenharmony_ci
368cabdff1aSopenharmony_ciconst AVOutputFormat ff_h264_muxer = {
369cabdff1aSopenharmony_ci    .name              = "h264",
370cabdff1aSopenharmony_ci    .long_name         = NULL_IF_CONFIG_SMALL("raw H.264 video"),
371cabdff1aSopenharmony_ci    .extensions        = "h264,264",
372cabdff1aSopenharmony_ci    .audio_codec       = AV_CODEC_ID_NONE,
373cabdff1aSopenharmony_ci    .video_codec       = AV_CODEC_ID_H264,
374cabdff1aSopenharmony_ci    .init              = force_one_stream,
375cabdff1aSopenharmony_ci    .write_packet      = ff_raw_write_packet,
376cabdff1aSopenharmony_ci    .check_bitstream   = h264_check_bitstream,
377cabdff1aSopenharmony_ci    .flags             = AVFMT_NOTIMESTAMPS,
378cabdff1aSopenharmony_ci};
379cabdff1aSopenharmony_ci#endif
380cabdff1aSopenharmony_ci
381cabdff1aSopenharmony_ci#if CONFIG_HEVC_MUXER
382cabdff1aSopenharmony_cistatic int hevc_check_bitstream(AVFormatContext *s, AVStream *st,
383cabdff1aSopenharmony_ci                                const AVPacket *pkt)
384cabdff1aSopenharmony_ci{
385cabdff1aSopenharmony_ci    if (pkt->size >= 5 && AV_RB32(pkt->data) != 0x0000001 &&
386cabdff1aSopenharmony_ci                          AV_RB24(pkt->data) != 0x000001)
387cabdff1aSopenharmony_ci        return ff_stream_add_bitstream_filter(st, "hevc_mp4toannexb", NULL);
388cabdff1aSopenharmony_ci    return 1;
389cabdff1aSopenharmony_ci}
390cabdff1aSopenharmony_ci
391cabdff1aSopenharmony_ciconst AVOutputFormat ff_hevc_muxer = {
392cabdff1aSopenharmony_ci    .name              = "hevc",
393cabdff1aSopenharmony_ci    .long_name         = NULL_IF_CONFIG_SMALL("raw HEVC video"),
394cabdff1aSopenharmony_ci    .extensions        = "hevc,h265,265",
395cabdff1aSopenharmony_ci    .audio_codec       = AV_CODEC_ID_NONE,
396cabdff1aSopenharmony_ci    .video_codec       = AV_CODEC_ID_HEVC,
397cabdff1aSopenharmony_ci    .init              = force_one_stream,
398cabdff1aSopenharmony_ci    .write_packet      = ff_raw_write_packet,
399cabdff1aSopenharmony_ci    .check_bitstream   = hevc_check_bitstream,
400cabdff1aSopenharmony_ci    .flags             = AVFMT_NOTIMESTAMPS,
401cabdff1aSopenharmony_ci};
402cabdff1aSopenharmony_ci#endif
403cabdff1aSopenharmony_ci
404cabdff1aSopenharmony_ci#if CONFIG_M4V_MUXER
405cabdff1aSopenharmony_ciconst AVOutputFormat ff_m4v_muxer = {
406cabdff1aSopenharmony_ci    .name              = "m4v",
407cabdff1aSopenharmony_ci    .long_name         = NULL_IF_CONFIG_SMALL("raw MPEG-4 video"),
408cabdff1aSopenharmony_ci    .extensions        = "m4v",
409cabdff1aSopenharmony_ci    .audio_codec       = AV_CODEC_ID_NONE,
410cabdff1aSopenharmony_ci    .video_codec       = AV_CODEC_ID_MPEG4,
411cabdff1aSopenharmony_ci    .init              = force_one_stream,
412cabdff1aSopenharmony_ci    .write_packet      = ff_raw_write_packet,
413cabdff1aSopenharmony_ci    .flags             = AVFMT_NOTIMESTAMPS,
414cabdff1aSopenharmony_ci};
415cabdff1aSopenharmony_ci#endif
416cabdff1aSopenharmony_ci
417cabdff1aSopenharmony_ci#if CONFIG_MJPEG_MUXER
418cabdff1aSopenharmony_ciconst AVOutputFormat ff_mjpeg_muxer = {
419cabdff1aSopenharmony_ci    .name              = "mjpeg",
420cabdff1aSopenharmony_ci    .long_name         = NULL_IF_CONFIG_SMALL("raw MJPEG video"),
421cabdff1aSopenharmony_ci    .mime_type         = "video/x-mjpeg",
422cabdff1aSopenharmony_ci    .extensions        = "mjpg,mjpeg",
423cabdff1aSopenharmony_ci    .audio_codec       = AV_CODEC_ID_NONE,
424cabdff1aSopenharmony_ci    .video_codec       = AV_CODEC_ID_MJPEG,
425cabdff1aSopenharmony_ci    .init              = force_one_stream,
426cabdff1aSopenharmony_ci    .write_packet      = ff_raw_write_packet,
427cabdff1aSopenharmony_ci    .flags             = AVFMT_NOTIMESTAMPS,
428cabdff1aSopenharmony_ci};
429cabdff1aSopenharmony_ci#endif
430cabdff1aSopenharmony_ci
431cabdff1aSopenharmony_ci#if CONFIG_MLP_MUXER
432cabdff1aSopenharmony_ciconst AVOutputFormat ff_mlp_muxer = {
433cabdff1aSopenharmony_ci    .name              = "mlp",
434cabdff1aSopenharmony_ci    .long_name         = NULL_IF_CONFIG_SMALL("raw MLP"),
435cabdff1aSopenharmony_ci    .extensions        = "mlp",
436cabdff1aSopenharmony_ci    .audio_codec       = AV_CODEC_ID_MLP,
437cabdff1aSopenharmony_ci    .video_codec       = AV_CODEC_ID_NONE,
438cabdff1aSopenharmony_ci    .init              = force_one_stream,
439cabdff1aSopenharmony_ci    .write_packet      = ff_raw_write_packet,
440cabdff1aSopenharmony_ci    .flags             = AVFMT_NOTIMESTAMPS,
441cabdff1aSopenharmony_ci};
442cabdff1aSopenharmony_ci#endif
443cabdff1aSopenharmony_ci
444cabdff1aSopenharmony_ci#if CONFIG_MP2_MUXER
445cabdff1aSopenharmony_ciconst AVOutputFormat ff_mp2_muxer = {
446cabdff1aSopenharmony_ci    .name              = "mp2",
447cabdff1aSopenharmony_ci    .long_name         = NULL_IF_CONFIG_SMALL("MP2 (MPEG audio layer 2)"),
448cabdff1aSopenharmony_ci    .mime_type         = "audio/mpeg",
449cabdff1aSopenharmony_ci    .extensions        = "mp2,m2a,mpa",
450cabdff1aSopenharmony_ci    .audio_codec       = AV_CODEC_ID_MP2,
451cabdff1aSopenharmony_ci    .video_codec       = AV_CODEC_ID_NONE,
452cabdff1aSopenharmony_ci    .init              = force_one_stream,
453cabdff1aSopenharmony_ci    .write_packet      = ff_raw_write_packet,
454cabdff1aSopenharmony_ci    .flags             = AVFMT_NOTIMESTAMPS,
455cabdff1aSopenharmony_ci};
456cabdff1aSopenharmony_ci#endif
457cabdff1aSopenharmony_ci
458cabdff1aSopenharmony_ci#if CONFIG_MPEG1VIDEO_MUXER
459cabdff1aSopenharmony_ciconst AVOutputFormat ff_mpeg1video_muxer = {
460cabdff1aSopenharmony_ci    .name              = "mpeg1video",
461cabdff1aSopenharmony_ci    .long_name         = NULL_IF_CONFIG_SMALL("raw MPEG-1 video"),
462cabdff1aSopenharmony_ci    .mime_type         = "video/mpeg",
463cabdff1aSopenharmony_ci    .extensions        = "mpg,mpeg,m1v",
464cabdff1aSopenharmony_ci    .audio_codec       = AV_CODEC_ID_NONE,
465cabdff1aSopenharmony_ci    .video_codec       = AV_CODEC_ID_MPEG1VIDEO,
466cabdff1aSopenharmony_ci    .init              = force_one_stream,
467cabdff1aSopenharmony_ci    .write_packet      = ff_raw_write_packet,
468cabdff1aSopenharmony_ci    .flags             = AVFMT_NOTIMESTAMPS,
469cabdff1aSopenharmony_ci};
470cabdff1aSopenharmony_ci#endif
471cabdff1aSopenharmony_ci
472cabdff1aSopenharmony_ci#if CONFIG_MPEG2VIDEO_MUXER
473cabdff1aSopenharmony_ciconst AVOutputFormat ff_mpeg2video_muxer = {
474cabdff1aSopenharmony_ci    .name              = "mpeg2video",
475cabdff1aSopenharmony_ci    .long_name         = NULL_IF_CONFIG_SMALL("raw MPEG-2 video"),
476cabdff1aSopenharmony_ci    .extensions        = "m2v",
477cabdff1aSopenharmony_ci    .audio_codec       = AV_CODEC_ID_NONE,
478cabdff1aSopenharmony_ci    .video_codec       = AV_CODEC_ID_MPEG2VIDEO,
479cabdff1aSopenharmony_ci    .init              = force_one_stream,
480cabdff1aSopenharmony_ci    .write_packet      = ff_raw_write_packet,
481cabdff1aSopenharmony_ci    .flags             = AVFMT_NOTIMESTAMPS,
482cabdff1aSopenharmony_ci};
483cabdff1aSopenharmony_ci#endif
484cabdff1aSopenharmony_ci
485cabdff1aSopenharmony_ci#if CONFIG_OBU_MUXER
486cabdff1aSopenharmony_cistatic int obu_check_bitstream(AVFormatContext *s, AVStream *st,
487cabdff1aSopenharmony_ci                               const AVPacket *pkt)
488cabdff1aSopenharmony_ci{
489cabdff1aSopenharmony_ci    return ff_stream_add_bitstream_filter(st, "av1_metadata", "td=insert");
490cabdff1aSopenharmony_ci}
491cabdff1aSopenharmony_ci
492cabdff1aSopenharmony_ciconst AVOutputFormat ff_obu_muxer = {
493cabdff1aSopenharmony_ci    .name              = "obu",
494cabdff1aSopenharmony_ci    .long_name         = NULL_IF_CONFIG_SMALL("AV1 low overhead OBU"),
495cabdff1aSopenharmony_ci    .extensions        = "obu",
496cabdff1aSopenharmony_ci    .audio_codec       = AV_CODEC_ID_NONE,
497cabdff1aSopenharmony_ci    .video_codec       = AV_CODEC_ID_AV1,
498cabdff1aSopenharmony_ci    .init              = force_one_stream,
499cabdff1aSopenharmony_ci    .write_packet      = ff_raw_write_packet,
500cabdff1aSopenharmony_ci    .check_bitstream   = obu_check_bitstream,
501cabdff1aSopenharmony_ci    .flags             = AVFMT_NOTIMESTAMPS,
502cabdff1aSopenharmony_ci};
503cabdff1aSopenharmony_ci#endif
504cabdff1aSopenharmony_ci
505cabdff1aSopenharmony_ci#if CONFIG_RAWVIDEO_MUXER
506cabdff1aSopenharmony_ciconst AVOutputFormat ff_rawvideo_muxer = {
507cabdff1aSopenharmony_ci    .name              = "rawvideo",
508cabdff1aSopenharmony_ci    .long_name         = NULL_IF_CONFIG_SMALL("raw video"),
509cabdff1aSopenharmony_ci    .extensions        = "yuv,rgb",
510cabdff1aSopenharmony_ci    .audio_codec       = AV_CODEC_ID_NONE,
511cabdff1aSopenharmony_ci    .video_codec       = AV_CODEC_ID_RAWVIDEO,
512cabdff1aSopenharmony_ci    .write_packet      = ff_raw_write_packet,
513cabdff1aSopenharmony_ci    .flags             = AVFMT_NOTIMESTAMPS,
514cabdff1aSopenharmony_ci};
515cabdff1aSopenharmony_ci#endif
516cabdff1aSopenharmony_ci
517cabdff1aSopenharmony_ci#if CONFIG_SBC_MUXER
518cabdff1aSopenharmony_ciconst AVOutputFormat ff_sbc_muxer = {
519cabdff1aSopenharmony_ci    .name              = "sbc",
520cabdff1aSopenharmony_ci    .long_name         = NULL_IF_CONFIG_SMALL("raw SBC"),
521cabdff1aSopenharmony_ci    .mime_type         = "audio/x-sbc",
522cabdff1aSopenharmony_ci    .extensions        = "sbc,msbc",
523cabdff1aSopenharmony_ci    .audio_codec       = AV_CODEC_ID_SBC,
524cabdff1aSopenharmony_ci    .init              = force_one_stream,
525cabdff1aSopenharmony_ci    .write_packet      = ff_raw_write_packet,
526cabdff1aSopenharmony_ci    .flags             = AVFMT_NOTIMESTAMPS,
527cabdff1aSopenharmony_ci};
528cabdff1aSopenharmony_ci#endif
529cabdff1aSopenharmony_ci
530cabdff1aSopenharmony_ci#if CONFIG_TRUEHD_MUXER
531cabdff1aSopenharmony_ciconst AVOutputFormat ff_truehd_muxer = {
532cabdff1aSopenharmony_ci    .name              = "truehd",
533cabdff1aSopenharmony_ci    .long_name         = NULL_IF_CONFIG_SMALL("raw TrueHD"),
534cabdff1aSopenharmony_ci    .extensions        = "thd",
535cabdff1aSopenharmony_ci    .audio_codec       = AV_CODEC_ID_TRUEHD,
536cabdff1aSopenharmony_ci    .video_codec       = AV_CODEC_ID_NONE,
537cabdff1aSopenharmony_ci    .init              = force_one_stream,
538cabdff1aSopenharmony_ci    .write_packet      = ff_raw_write_packet,
539cabdff1aSopenharmony_ci    .flags             = AVFMT_NOTIMESTAMPS,
540cabdff1aSopenharmony_ci};
541cabdff1aSopenharmony_ci#endif
542cabdff1aSopenharmony_ci
543cabdff1aSopenharmony_ci#if CONFIG_VC1_MUXER
544cabdff1aSopenharmony_ciconst AVOutputFormat ff_vc1_muxer = {
545cabdff1aSopenharmony_ci    .name              = "vc1",
546cabdff1aSopenharmony_ci    .long_name         = NULL_IF_CONFIG_SMALL("raw VC-1 video"),
547cabdff1aSopenharmony_ci    .extensions        = "vc1",
548cabdff1aSopenharmony_ci    .audio_codec       = AV_CODEC_ID_NONE,
549cabdff1aSopenharmony_ci    .video_codec       = AV_CODEC_ID_VC1,
550cabdff1aSopenharmony_ci    .init              = force_one_stream,
551cabdff1aSopenharmony_ci    .write_packet      = ff_raw_write_packet,
552cabdff1aSopenharmony_ci    .flags             = AVFMT_NOTIMESTAMPS,
553cabdff1aSopenharmony_ci};
554cabdff1aSopenharmony_ci#endif
555