Browse code

Force one stream for raw muxers.

Based on eeb975f5
Fixes ticket #3217.

Reviewed-by: Nicolas George

Carl Eugen Hoyos authored on 2013/12/11 21:15:49
Showing 1 changed files
... ...
@@ -29,6 +29,16 @@ int ff_raw_write_packet(AVFormatContext *s, AVPacket *pkt)
29 29
     return 0;
30 30
 }
31 31
 
32
+static int force_one_stream(AVFormatContext *s)
33
+{
34
+    if (s->nb_streams != 1) {
35
+        av_log(s, AV_LOG_ERROR, "%s files have exactly one stream\n",
36
+               s->oformat->name);
37
+        return AVERROR(EINVAL);
38
+    }
39
+    return 0;
40
+}
41
+
32 42
 /* Note: Do not forget to add new entries to the Makefile as well. */
33 43
 
34 44
 #if CONFIG_AC3_MUXER
... ...
@@ -39,6 +49,7 @@ AVOutputFormat ff_ac3_muxer = {
39 39
     .extensions        = "ac3",
40 40
     .audio_codec       = AV_CODEC_ID_AC3,
41 41
     .video_codec       = AV_CODEC_ID_NONE,
42
+    .write_header      = force_one_stream,
42 43
     .write_packet      = ff_raw_write_packet,
43 44
     .flags             = AVFMT_NOTIMESTAMPS,
44 45
 };
... ...
@@ -51,6 +62,7 @@ AVOutputFormat ff_adx_muxer = {
51 51
     .extensions        = "adx",
52 52
     .audio_codec       = AV_CODEC_ID_ADPCM_ADX,
53 53
     .video_codec       = AV_CODEC_ID_NONE,
54
+    .write_header      = force_one_stream,
54 55
     .write_packet      = ff_raw_write_packet,
55 56
     .flags             = AVFMT_NOTIMESTAMPS,
56 57
 };
... ...
@@ -63,6 +75,7 @@ AVOutputFormat ff_cavsvideo_muxer = {
63 63
     .extensions        = "cavs",
64 64
     .audio_codec       = AV_CODEC_ID_NONE,
65 65
     .video_codec       = AV_CODEC_ID_CAVS,
66
+    .write_header      = force_one_stream,
66 67
     .write_packet      = ff_raw_write_packet,
67 68
     .flags             = AVFMT_NOTIMESTAMPS,
68 69
 };
... ...
@@ -72,6 +85,7 @@ AVOutputFormat ff_cavsvideo_muxer = {
72 72
 AVOutputFormat ff_data_muxer = {
73 73
     .name              = "data",
74 74
     .long_name         = NULL_IF_CONFIG_SMALL("raw data"),
75
+    .write_header      = force_one_stream,
75 76
     .write_packet      = ff_raw_write_packet,
76 77
     .flags             = AVFMT_NOTIMESTAMPS,
77 78
 };
... ...
@@ -84,6 +98,7 @@ AVOutputFormat ff_dirac_muxer = {
84 84
     .extensions        = "drc",
85 85
     .audio_codec       = AV_CODEC_ID_NONE,
86 86
     .video_codec       = AV_CODEC_ID_DIRAC,
87
+    .write_header      = force_one_stream,
87 88
     .write_packet      = ff_raw_write_packet,
88 89
     .flags             = AVFMT_NOTIMESTAMPS,
89 90
 };
... ...
@@ -96,6 +111,7 @@ AVOutputFormat ff_dnxhd_muxer = {
96 96
     .extensions        = "dnxhd",
97 97
     .audio_codec       = AV_CODEC_ID_NONE,
98 98
     .video_codec       = AV_CODEC_ID_DNXHD,
99
+    .write_header      = force_one_stream,
99 100
     .write_packet      = ff_raw_write_packet,
100 101
     .flags             = AVFMT_NOTIMESTAMPS,
101 102
 };
... ...
@@ -109,6 +125,7 @@ AVOutputFormat ff_dts_muxer = {
109 109
     .extensions        = "dts",
110 110
     .audio_codec       = AV_CODEC_ID_DTS,
111 111
     .video_codec       = AV_CODEC_ID_NONE,
112
+    .write_header      = force_one_stream,
112 113
     .write_packet      = ff_raw_write_packet,
113 114
     .flags             = AVFMT_NOTIMESTAMPS,
114 115
 };
... ...
@@ -122,6 +139,7 @@ AVOutputFormat ff_eac3_muxer = {
122 122
     .extensions        = "eac3",
123 123
     .audio_codec       = AV_CODEC_ID_EAC3,
124 124
     .video_codec       = AV_CODEC_ID_NONE,
125
+    .write_header      = force_one_stream,
125 126
     .write_packet      = ff_raw_write_packet,
126 127
     .flags             = AVFMT_NOTIMESTAMPS,
127 128
 };
... ...
@@ -135,6 +153,7 @@ AVOutputFormat ff_g722_muxer = {
135 135
     .extensions        = "g722",
136 136
     .audio_codec       = AV_CODEC_ID_ADPCM_G722,
137 137
     .video_codec       = AV_CODEC_ID_NONE,
138
+    .write_header      = force_one_stream,
138 139
     .write_packet      = ff_raw_write_packet,
139 140
     .flags             = AVFMT_NOTIMESTAMPS,
140 141
 };
... ...
@@ -148,6 +167,7 @@ AVOutputFormat ff_g723_1_muxer = {
148 148
     .extensions        = "tco,rco",
149 149
     .audio_codec       = AV_CODEC_ID_G723_1,
150 150
     .video_codec       = AV_CODEC_ID_NONE,
151
+    .write_header      = force_one_stream,
151 152
     .write_packet      = ff_raw_write_packet,
152 153
     .flags             = AVFMT_NOTIMESTAMPS,
153 154
 };
... ...
@@ -161,6 +181,7 @@ AVOutputFormat ff_h261_muxer = {
161 161
     .extensions        = "h261",
162 162
     .audio_codec       = AV_CODEC_ID_NONE,
163 163
     .video_codec       = AV_CODEC_ID_H261,
164
+    .write_header      = force_one_stream,
164 165
     .write_packet      = ff_raw_write_packet,
165 166
     .flags             = AVFMT_NOTIMESTAMPS,
166 167
 };
... ...
@@ -174,6 +195,7 @@ AVOutputFormat ff_h263_muxer = {
174 174
     .extensions        = "h263",
175 175
     .audio_codec       = AV_CODEC_ID_NONE,
176 176
     .video_codec       = AV_CODEC_ID_H263,
177
+    .write_header      = force_one_stream,
177 178
     .write_packet      = ff_raw_write_packet,
178 179
     .flags             = AVFMT_NOTIMESTAMPS,
179 180
 };
... ...
@@ -186,6 +208,7 @@ AVOutputFormat ff_h264_muxer = {
186 186
     .extensions        = "h264",
187 187
     .audio_codec       = AV_CODEC_ID_NONE,
188 188
     .video_codec       = AV_CODEC_ID_H264,
189
+    .write_header      = force_one_stream,
189 190
     .write_packet      = ff_raw_write_packet,
190 191
     .flags             = AVFMT_NOTIMESTAMPS,
191 192
 };
... ...
@@ -211,6 +234,7 @@ AVOutputFormat ff_mjpeg_muxer = {
211 211
     .extensions        = "mjpg,mjpeg",
212 212
     .audio_codec       = AV_CODEC_ID_NONE,
213 213
     .video_codec       = AV_CODEC_ID_MJPEG,
214
+    .write_header      = force_one_stream,
214 215
     .write_packet      = ff_raw_write_packet,
215 216
     .flags             = AVFMT_NOTIMESTAMPS,
216 217
 };
... ...
@@ -223,6 +247,7 @@ AVOutputFormat ff_mlp_muxer = {
223 223
     .extensions        = "mlp",
224 224
     .audio_codec       = AV_CODEC_ID_MLP,
225 225
     .video_codec       = AV_CODEC_ID_NONE,
226
+    .write_header      = force_one_stream,
226 227
     .write_packet      = ff_raw_write_packet,
227 228
     .flags             = AVFMT_NOTIMESTAMPS,
228 229
 };
... ...
@@ -236,6 +261,7 @@ AVOutputFormat ff_mpeg1video_muxer = {
236 236
     .extensions        = "mpg,mpeg,m1v",
237 237
     .audio_codec       = AV_CODEC_ID_NONE,
238 238
     .video_codec       = AV_CODEC_ID_MPEG1VIDEO,
239
+    .write_header      = force_one_stream,
239 240
     .write_packet      = ff_raw_write_packet,
240 241
     .flags             = AVFMT_NOTIMESTAMPS,
241 242
 };
... ...
@@ -248,6 +274,7 @@ AVOutputFormat ff_mpeg2video_muxer = {
248 248
     .extensions        = "m2v",
249 249
     .audio_codec       = AV_CODEC_ID_NONE,
250 250
     .video_codec       = AV_CODEC_ID_MPEG2VIDEO,
251
+    .write_header      = force_one_stream,
251 252
     .write_packet      = ff_raw_write_packet,
252 253
     .flags             = AVFMT_NOTIMESTAMPS,
253 254
 };
... ...
@@ -272,6 +299,7 @@ AVOutputFormat ff_truehd_muxer = {
272 272
     .extensions        = "thd",
273 273
     .audio_codec       = AV_CODEC_ID_TRUEHD,
274 274
     .video_codec       = AV_CODEC_ID_NONE,
275
+    .write_header      = force_one_stream,
275 276
     .write_packet      = ff_raw_write_packet,
276 277
     .flags             = AVFMT_NOTIMESTAMPS,
277 278
 };
... ...
@@ -284,6 +312,7 @@ AVOutputFormat ff_vc1_muxer = {
284 284
     .extensions        = "vc1",
285 285
     .audio_codec       = AV_CODEC_ID_NONE,
286 286
     .video_codec       = AV_CODEC_ID_VC1,
287
+    .write_header      = force_one_stream,
287 288
     .write_packet      = ff_raw_write_packet,
288 289
     .flags             = AVFMT_NOTIMESTAMPS,
289 290
 };