Based on eeb975f5
Fixes ticket #3217.
Reviewed-by: Nicolas George
... | ... |
@@ -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 |
}; |