Mercurial > libavformat.hg
annotate img2.c @ 4040:b22f5462903e libavformat
Read optional components of the RDT packet header, such as extended setID
and streamID and the length. of the packet in case of packet concatenation.
Discussed in ML thread "[PATCH] RDT/Realmedia patches #2".
author | rbultje |
---|---|
date | Mon, 17 Nov 2008 14:32:01 +0000 |
parents | fcb9de59245f |
children | 208d63d8ee42 |
rev | line source |
---|---|
497 | 1 /* |
2 * Image format | |
3 * Copyright (c) 2000, 2001, 2002 Fabrice Bellard. | |
4 * Copyright (c) 2004 Michael Niedermayer | |
5 * | |
1358
0899bfe4105c
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
1291
diff
changeset
|
6 * This file is part of FFmpeg. |
0899bfe4105c
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
1291
diff
changeset
|
7 * |
0899bfe4105c
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
1291
diff
changeset
|
8 * FFmpeg is free software; you can redistribute it and/or |
497 | 9 * modify it under the terms of the GNU Lesser General Public |
10 * License as published by the Free Software Foundation; either | |
1358
0899bfe4105c
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
1291
diff
changeset
|
11 * version 2.1 of the License, or (at your option) any later version. |
497 | 12 * |
1358
0899bfe4105c
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
1291
diff
changeset
|
13 * FFmpeg is distributed in the hope that it will be useful, |
497 | 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
16 * Lesser General Public License for more details. | |
17 * | |
18 * You should have received a copy of the GNU Lesser General Public | |
1358
0899bfe4105c
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
1291
diff
changeset
|
19 * License along with FFmpeg; if not, write to the Free Software |
896
edbe5c3717f9
Update licensing information: The FSF changed postal address.
diego
parents:
885
diff
changeset
|
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
497 | 21 */ |
3286 | 22 |
23 #include "libavutil/avstring.h" | |
497 | 24 #include "avformat.h" |
3288 | 25 #include <strings.h> |
497 | 26 |
27 typedef struct { | |
28 int img_first; | |
29 int img_last; | |
30 int img_number; | |
31 int img_count; | |
32 int is_pipe; | |
33 char path[1024]; | |
34 } VideoData; | |
35 | |
36 typedef struct { | |
37 enum CodecID id; | |
38 const char *str; | |
39 } IdStrMap; | |
40 | |
41 static const IdStrMap img_tags[] = { | |
42 { CODEC_ID_MJPEG , "jpeg"}, | |
43 { CODEC_ID_MJPEG , "jpg"}, | |
44 { CODEC_ID_LJPEG , "ljpg"}, | |
581 | 45 { CODEC_ID_PNG , "png"}, |
3080 | 46 { CODEC_ID_PNG , "mng"}, |
583 | 47 { CODEC_ID_PPM , "ppm"}, |
48 { CODEC_ID_PGM , "pgm"}, | |
49 { CODEC_ID_PGMYUV , "pgmyuv"}, | |
50 { CODEC_ID_PBM , "pbm"}, | |
51 { CODEC_ID_PAM , "pam"}, | |
497 | 52 { CODEC_ID_MPEG1VIDEO, "mpg1-img"}, |
53 { CODEC_ID_MPEG2VIDEO, "mpg2-img"}, | |
54 { CODEC_ID_MPEG4 , "mpg4-img"}, | |
55 { CODEC_ID_FFV1 , "ffv1-img"}, | |
635 | 56 { CODEC_ID_RAWVIDEO , "y"}, |
875 | 57 { CODEC_ID_BMP , "bmp"}, |
1409 | 58 { CODEC_ID_GIF , "gif"}, |
1416 | 59 { CODEC_ID_TARGA , "tga"}, |
60 { CODEC_ID_TIFF , "tiff"}, | |
3404 | 61 { CODEC_ID_TIFF , "tif"}, |
1985 | 62 { CODEC_ID_SGI , "sgi"}, |
2074 | 63 { CODEC_ID_PTX , "ptx"}, |
2859 | 64 { CODEC_ID_PCX , "pcx"}, |
2867 | 65 { CODEC_ID_SUNRAST , "sun"}, |
66 { CODEC_ID_SUNRAST , "ras"}, | |
67 { CODEC_ID_SUNRAST , "rs"}, | |
68 { CODEC_ID_SUNRAST , "im1"}, | |
69 { CODEC_ID_SUNRAST , "im8"}, | |
70 { CODEC_ID_SUNRAST , "im24"}, | |
71 { CODEC_ID_SUNRAST , "sunras"}, | |
3289 | 72 { CODEC_ID_NONE , NULL} |
497 | 73 }; |
74 | |
3769 | 75 static const int sizes[][2] = { |
635 | 76 { 640, 480 }, |
77 { 720, 480 }, | |
78 { 720, 576 }, | |
79 { 352, 288 }, | |
80 { 352, 240 }, | |
81 { 160, 128 }, | |
82 { 512, 384 }, | |
83 { 640, 352 }, | |
84 { 640, 240 }, | |
85 }; | |
86 | |
87 static int infer_size(int *width_ptr, int *height_ptr, int size) | |
88 { | |
89 int i; | |
90 | |
4001 | 91 for(i=0;i<FF_ARRAY_ELEMS(sizes);i++) { |
635 | 92 if ((sizes[i][0] * sizes[i][1]) == size) { |
93 *width_ptr = sizes[i][0]; | |
94 *height_ptr = sizes[i][1]; | |
95 return 0; | |
96 } | |
97 } | |
98 return -1; | |
99 } | |
497 | 100 static enum CodecID av_str2id(const IdStrMap *tags, const char *str) |
101 { | |
530 | 102 str= strrchr(str, '.'); |
103 if(!str) return CODEC_ID_NONE; | |
104 str++; | |
497 | 105 |
106 while (tags->id) { | |
3288 | 107 if (!strcasecmp(str, tags->str)) |
108 return tags->id; | |
497 | 109 |
110 tags++; | |
111 } | |
112 return CODEC_ID_NONE; | |
113 } | |
114 | |
115 /* return -1 if no image found */ | |
885 | 116 static int find_image_range(int *pfirst_index, int *plast_index, |
497 | 117 const char *path) |
118 { | |
119 char buf[1024]; | |
120 int range, last_index, range1, first_index; | |
121 | |
122 /* find the first image */ | |
123 for(first_index = 0; first_index < 5; first_index++) { | |
1291
185190bdc185
Clarified API for numbered sequences, patch by Michel Bardiaux % mbardiaux A mediaxim P be %
gpoirier
parents:
1175
diff
changeset
|
124 if (av_get_frame_filename(buf, sizeof(buf), path, first_index) < 0){ |
885 | 125 *pfirst_index = |
498 | 126 *plast_index = 1; |
127 return 0; | |
128 } | |
497 | 129 if (url_exist(buf)) |
130 break; | |
131 } | |
132 if (first_index == 5) | |
133 goto fail; | |
885 | 134 |
497 | 135 /* find the last image */ |
136 last_index = first_index; | |
137 for(;;) { | |
138 range = 0; | |
139 for(;;) { | |
140 if (!range) | |
141 range1 = 1; | |
142 else | |
143 range1 = 2 * range; | |
1291
185190bdc185
Clarified API for numbered sequences, patch by Michel Bardiaux % mbardiaux A mediaxim P be %
gpoirier
parents:
1175
diff
changeset
|
144 if (av_get_frame_filename(buf, sizeof(buf), path, |
185190bdc185
Clarified API for numbered sequences, patch by Michel Bardiaux % mbardiaux A mediaxim P be %
gpoirier
parents:
1175
diff
changeset
|
145 last_index + range1) < 0) |
497 | 146 goto fail; |
147 if (!url_exist(buf)) | |
148 break; | |
149 range = range1; | |
150 /* just in case... */ | |
151 if (range >= (1 << 30)) | |
152 goto fail; | |
153 } | |
154 /* we are sure than image last_index + range exists */ | |
155 if (!range) | |
156 break; | |
157 last_index += range; | |
158 } | |
159 *pfirst_index = first_index; | |
160 *plast_index = last_index; | |
161 return 0; | |
162 fail: | |
163 return -1; | |
164 } | |
165 | |
166 | |
167 static int image_probe(AVProbeData *p) | |
168 { | |
1594
ffb64cb62cc9
Fix a crash when probing img2 format with a NULL filename.
aurel
parents:
1551
diff
changeset
|
169 if (p->filename && av_str2id(img_tags, p->filename)) { |
1551
ee4ef413497e
probe with some success image files not containing number pattern but having recognized image extension
bcoudurier
parents:
1416
diff
changeset
|
170 if (av_filename_number_test(p->filename)) |
ee4ef413497e
probe with some success image files not containing number pattern but having recognized image extension
bcoudurier
parents:
1416
diff
changeset
|
171 return AVPROBE_SCORE_MAX; |
ee4ef413497e
probe with some success image files not containing number pattern but having recognized image extension
bcoudurier
parents:
1416
diff
changeset
|
172 else |
ee4ef413497e
probe with some success image files not containing number pattern but having recognized image extension
bcoudurier
parents:
1416
diff
changeset
|
173 return AVPROBE_SCORE_MAX/2; |
ee4ef413497e
probe with some success image files not containing number pattern but having recognized image extension
bcoudurier
parents:
1416
diff
changeset
|
174 } |
ee4ef413497e
probe with some success image files not containing number pattern but having recognized image extension
bcoudurier
parents:
1416
diff
changeset
|
175 return 0; |
497 | 176 } |
177 | |
583 | 178 enum CodecID av_guess_image2_codec(const char *filename){ |
179 return av_str2id(img_tags, filename); | |
180 } | |
181 | |
497 | 182 static int img_read_header(AVFormatContext *s1, AVFormatParameters *ap) |
183 { | |
184 VideoData *s = s1->priv_data; | |
185 int first_index, last_index; | |
186 AVStream *st; | |
187 | |
188 s1->ctx_flags |= AVFMTCTX_NOHEADER; | |
189 | |
190 st = av_new_stream(s1, 0); | |
191 if (!st) { | |
1787
eb16c64144ee
This fixes error handling for BeOS, removing the need for some ifdefs.
mmu_man
parents:
1594
diff
changeset
|
192 return AVERROR(ENOMEM); |
497 | 193 } |
194 | |
2189 | 195 av_strlcpy(s->path, s1->filename, sizeof(s->path)); |
497 | 196 s->img_number = 0; |
197 s->img_count = 0; | |
885 | 198 |
497 | 199 /* find format */ |
200 if (s1->iformat->flags & AVFMT_NOFILE) | |
201 s->is_pipe = 0; | |
574 | 202 else{ |
497 | 203 s->is_pipe = 1; |
2023 | 204 st->need_parsing = AVSTREAM_PARSE_FULL; |
574 | 205 } |
885 | 206 |
1003 | 207 if (!ap->time_base.num) { |
743 | 208 av_set_pts_info(st, 60, 1, 25); |
497 | 209 } else { |
743 | 210 av_set_pts_info(st, 60, ap->time_base.num, ap->time_base.den); |
497 | 211 } |
885 | 212 |
1003 | 213 if(ap->width && ap->height){ |
820
feca73904e67
changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents:
764
diff
changeset
|
214 st->codec->width = ap->width; |
feca73904e67
changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents:
764
diff
changeset
|
215 st->codec->height= ap->height; |
635 | 216 } |
885 | 217 |
497 | 218 if (!s->is_pipe) { |
219 if (find_image_range(&first_index, &last_index, s->path) < 0) | |
2274
b21c2af60bc9
Replace all occurrences of AVERROR_IO with AVERROR(EIO).
takis
parents:
2189
diff
changeset
|
220 return AVERROR(EIO); |
497 | 221 s->img_first = first_index; |
222 s->img_last = last_index; | |
223 s->img_number = first_index; | |
224 /* compute duration */ | |
225 st->start_time = 0; | |
743 | 226 st->duration = last_index - first_index + 1; |
497 | 227 } |
885 | 228 |
583 | 229 if(ap->video_codec_id){ |
820
feca73904e67
changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents:
764
diff
changeset
|
230 st->codec->codec_type = CODEC_TYPE_VIDEO; |
feca73904e67
changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents:
764
diff
changeset
|
231 st->codec->codec_id = ap->video_codec_id; |
583 | 232 }else if(ap->audio_codec_id){ |
820
feca73904e67
changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents:
764
diff
changeset
|
233 st->codec->codec_type = CODEC_TYPE_AUDIO; |
feca73904e67
changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents:
764
diff
changeset
|
234 st->codec->codec_id = ap->audio_codec_id; |
583 | 235 }else{ |
820
feca73904e67
changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents:
764
diff
changeset
|
236 st->codec->codec_type = CODEC_TYPE_VIDEO; |
feca73904e67
changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents:
764
diff
changeset
|
237 st->codec->codec_id = av_str2id(img_tags, s->path); |
583 | 238 } |
820
feca73904e67
changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents:
764
diff
changeset
|
239 if(st->codec->codec_type == CODEC_TYPE_VIDEO && ap->pix_fmt != PIX_FMT_NONE) |
feca73904e67
changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents:
764
diff
changeset
|
240 st->codec->pix_fmt = ap->pix_fmt; |
497 | 241 |
242 return 0; | |
243 } | |
244 | |
245 static int img_read_packet(AVFormatContext *s1, AVPacket *pkt) | |
246 { | |
247 VideoData *s = s1->priv_data; | |
248 char filename[1024]; | |
635 | 249 int i; |
250 int size[3]={0}, ret[3]={0}; | |
2771
d52c718e83f9
Use dynamically allocated ByteIOContext in AVFormatContext
andoma
parents:
2274
diff
changeset
|
251 ByteIOContext *f[3]; |
820
feca73904e67
changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents:
764
diff
changeset
|
252 AVCodecContext *codec= s1->streams[0]->codec; |
497 | 253 |
254 if (!s->is_pipe) { | |
255 /* loop over input */ | |
1175
8b53c0f3e7ad
add loop_input to AVFormatContext, getting rid of old hack
mru
parents:
1169
diff
changeset
|
256 if (s1->loop_input && s->img_number > s->img_last) { |
497 | 257 s->img_number = s->img_first; |
590 | 258 } |
1291
185190bdc185
Clarified API for numbered sequences, patch by Michel Bardiaux % mbardiaux A mediaxim P be %
gpoirier
parents:
1175
diff
changeset
|
259 if (av_get_frame_filename(filename, sizeof(filename), |
185190bdc185
Clarified API for numbered sequences, patch by Michel Bardiaux % mbardiaux A mediaxim P be %
gpoirier
parents:
1175
diff
changeset
|
260 s->path, s->img_number)<0 && s->img_number > 1) |
2274
b21c2af60bc9
Replace all occurrences of AVERROR_IO with AVERROR(EIO).
takis
parents:
2189
diff
changeset
|
261 return AVERROR(EIO); |
635 | 262 for(i=0; i<3; i++){ |
2771
d52c718e83f9
Use dynamically allocated ByteIOContext in AVFormatContext
andoma
parents:
2274
diff
changeset
|
263 if (url_fopen(&f[i], filename, URL_RDONLY) < 0) |
2274
b21c2af60bc9
Replace all occurrences of AVERROR_IO with AVERROR(EIO).
takis
parents:
2189
diff
changeset
|
264 return AVERROR(EIO); |
764
cdb845a57ae4
drop most url_fileno() calls (allows to use ByteIOContext directly in caller apps instead of URLProtocol)
aurel
parents:
743
diff
changeset
|
265 size[i]= url_fsize(f[i]); |
885 | 266 |
635 | 267 if(codec->codec_id != CODEC_ID_RAWVIDEO) |
268 break; | |
269 filename[ strlen(filename) - 1 ]= 'U' + i; | |
270 } | |
885 | 271 |
635 | 272 if(codec->codec_id == CODEC_ID_RAWVIDEO && !codec->width) |
273 infer_size(&codec->width, &codec->height, size[0]); | |
497 | 274 } else { |
2771
d52c718e83f9
Use dynamically allocated ByteIOContext in AVFormatContext
andoma
parents:
2274
diff
changeset
|
275 f[0] = s1->pb; |
635 | 276 if (url_feof(f[0])) |
2274
b21c2af60bc9
Replace all occurrences of AVERROR_IO with AVERROR(EIO).
takis
parents:
2189
diff
changeset
|
277 return AVERROR(EIO); |
635 | 278 size[0]= 4096; |
497 | 279 } |
280 | |
635 | 281 av_new_packet(pkt, size[0] + size[1] + size[2]); |
497 | 282 pkt->stream_index = 0; |
283 pkt->flags |= PKT_FLAG_KEY; | |
284 | |
635 | 285 pkt->size= 0; |
286 for(i=0; i<3; i++){ | |
287 if(size[i]){ | |
288 ret[i]= get_buffer(f[i], pkt->data + pkt->size, size[i]); | |
289 if (!s->is_pipe) | |
290 url_fclose(f[i]); | |
291 if(ret[i]>0) | |
292 pkt->size += ret[i]; | |
293 } | |
497 | 294 } |
295 | |
635 | 296 if (ret[0] <= 0 || ret[1]<0 || ret[2]<0) { |
497 | 297 av_free_packet(pkt); |
2274
b21c2af60bc9
Replace all occurrences of AVERROR_IO with AVERROR(EIO).
takis
parents:
2189
diff
changeset
|
298 return AVERROR(EIO); /* signal EOF */ |
497 | 299 } else { |
300 s->img_count++; | |
301 s->img_number++; | |
302 return 0; | |
303 } | |
304 } | |
305 | |
3871
e6aeb2733e34
Replace generic CONFIG_MUXERS preprocessor conditionals by more specific
diego
parents:
3769
diff
changeset
|
306 #if defined(CONFIG_IMAGE2_MUXER) || defined(CONFIG_IMAGE2PIPE_MUXER) |
497 | 307 /******************************************************/ |
308 /* image output */ | |
309 | |
310 static int img_write_header(AVFormatContext *s) | |
311 { | |
312 VideoData *img = s->priv_data; | |
313 | |
314 img->img_number = 1; | |
2189 | 315 av_strlcpy(img->path, s->filename, sizeof(img->path)); |
497 | 316 |
317 /* find format */ | |
318 if (s->oformat->flags & AVFMT_NOFILE) | |
319 img->is_pipe = 0; | |
320 else | |
321 img->is_pipe = 1; | |
885 | 322 |
497 | 323 return 0; |
324 } | |
325 | |
326 static int img_write_packet(AVFormatContext *s, AVPacket *pkt) | |
327 { | |
328 VideoData *img = s->priv_data; | |
2771
d52c718e83f9
Use dynamically allocated ByteIOContext in AVFormatContext
andoma
parents:
2274
diff
changeset
|
329 ByteIOContext *pb[3]; |
497 | 330 char filename[1024]; |
820
feca73904e67
changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents:
764
diff
changeset
|
331 AVCodecContext *codec= s->streams[ pkt->stream_index ]->codec; |
635 | 332 int i; |
497 | 333 |
334 if (!img->is_pipe) { | |
1291
185190bdc185
Clarified API for numbered sequences, patch by Michel Bardiaux % mbardiaux A mediaxim P be %
gpoirier
parents:
1175
diff
changeset
|
335 if (av_get_frame_filename(filename, sizeof(filename), |
185190bdc185
Clarified API for numbered sequences, patch by Michel Bardiaux % mbardiaux A mediaxim P be %
gpoirier
parents:
1175
diff
changeset
|
336 img->path, img->img_number) < 0 && img->img_number>1) |
2274
b21c2af60bc9
Replace all occurrences of AVERROR_IO with AVERROR(EIO).
takis
parents:
2189
diff
changeset
|
337 return AVERROR(EIO); |
635 | 338 for(i=0; i<3; i++){ |
2771
d52c718e83f9
Use dynamically allocated ByteIOContext in AVFormatContext
andoma
parents:
2274
diff
changeset
|
339 if (url_fopen(&pb[i], filename, URL_WRONLY) < 0) |
2274
b21c2af60bc9
Replace all occurrences of AVERROR_IO with AVERROR(EIO).
takis
parents:
2189
diff
changeset
|
340 return AVERROR(EIO); |
885 | 341 |
635 | 342 if(codec->codec_id != CODEC_ID_RAWVIDEO) |
343 break; | |
344 filename[ strlen(filename) - 1 ]= 'U' + i; | |
345 } | |
497 | 346 } else { |
2771
d52c718e83f9
Use dynamically allocated ByteIOContext in AVFormatContext
andoma
parents:
2274
diff
changeset
|
347 pb[0] = s->pb; |
497 | 348 } |
885 | 349 |
635 | 350 if(codec->codec_id == CODEC_ID_RAWVIDEO){ |
731 | 351 int ysize = codec->width * codec->height; |
352 put_buffer(pb[0], pkt->data , ysize); | |
353 put_buffer(pb[1], pkt->data + ysize, (pkt->size - ysize)/2); | |
354 put_buffer(pb[2], pkt->data + ysize +(pkt->size - ysize)/2, (pkt->size - ysize)/2); | |
635 | 355 put_flush_packet(pb[1]); |
356 put_flush_packet(pb[2]); | |
357 url_fclose(pb[1]); | |
358 url_fclose(pb[2]); | |
359 }else{ | |
360 put_buffer(pb[0], pkt->data, pkt->size); | |
361 } | |
362 put_flush_packet(pb[0]); | |
497 | 363 if (!img->is_pipe) { |
635 | 364 url_fclose(pb[0]); |
497 | 365 } |
366 | |
367 img->img_number++; | |
368 return 0; | |
369 } | |
370 | |
3871
e6aeb2733e34
Replace generic CONFIG_MUXERS preprocessor conditionals by more specific
diego
parents:
3769
diff
changeset
|
371 #endif /* defined(CONFIG_IMAGE2_MUXER) || defined(CONFIG_IMAGE2PIPE_MUXER) */ |
903
68bc3ca12e79
Put muxer-specific code parts in #ifdef CONFIG_MUXERS.
diego
parents:
896
diff
changeset
|
372 |
497 | 373 /* input */ |
1169 | 374 #ifdef CONFIG_IMAGE2_DEMUXER |
375 AVInputFormat image2_demuxer = { | |
497 | 376 "image2", |
3424
7a0230981402
Make long_names in lavf/lavdev optional depending on CONFIG_SMALL.
diego
parents:
3404
diff
changeset
|
377 NULL_IF_CONFIG_SMALL("image2 sequence"), |
497 | 378 sizeof(VideoData), |
379 image_probe, | |
380 img_read_header, | |
381 img_read_packet, | |
3431 | 382 NULL, |
497 | 383 NULL, |
384 NULL, | |
498 | 385 AVFMT_NOFILE, |
497 | 386 }; |
1169 | 387 #endif |
388 #ifdef CONFIG_IMAGE2PIPE_DEMUXER | |
389 AVInputFormat image2pipe_demuxer = { | |
497 | 390 "image2pipe", |
3424
7a0230981402
Make long_names in lavf/lavdev optional depending on CONFIG_SMALL.
diego
parents:
3404
diff
changeset
|
391 NULL_IF_CONFIG_SMALL("piped image2 sequence"), |
497 | 392 sizeof(VideoData), |
393 NULL, /* no probe */ | |
394 img_read_header, | |
395 img_read_packet, | |
396 }; | |
1169 | 397 #endif |
497 | 398 |
399 /* output */ | |
1169 | 400 #ifdef CONFIG_IMAGE2_MUXER |
401 AVOutputFormat image2_muxer = { | |
497 | 402 "image2", |
3424
7a0230981402
Make long_names in lavf/lavdev optional depending on CONFIG_SMALL.
diego
parents:
3404
diff
changeset
|
403 NULL_IF_CONFIG_SMALL("image2 sequence"), |
497 | 404 "", |
405 "", | |
406 sizeof(VideoData), | |
407 CODEC_ID_NONE, | |
408 CODEC_ID_MJPEG, | |
409 img_write_header, | |
410 img_write_packet, | |
3140 | 411 NULL, |
3940
77f3d0224ee9
Prevent image2 from complaining about non monotone timestamps as
michael
parents:
3871
diff
changeset
|
412 .flags= AVFMT_NOTIMESTAMPS | AVFMT_NOFILE |
497 | 413 }; |
1169 | 414 #endif |
415 #ifdef CONFIG_IMAGE2PIPE_MUXER | |
416 AVOutputFormat image2pipe_muxer = { | |
497 | 417 "image2pipe", |
3424
7a0230981402
Make long_names in lavf/lavdev optional depending on CONFIG_SMALL.
diego
parents:
3404
diff
changeset
|
418 NULL_IF_CONFIG_SMALL("piped image2 sequence"), |
497 | 419 "", |
420 "", | |
421 sizeof(VideoData), | |
422 CODEC_ID_NONE, | |
423 CODEC_ID_MJPEG, | |
424 img_write_header, | |
425 img_write_packet, | |
3940
77f3d0224ee9
Prevent image2 from complaining about non monotone timestamps as
michael
parents:
3871
diff
changeset
|
426 .flags= AVFMT_NOTIMESTAMPS |
497 | 427 }; |
903
68bc3ca12e79
Put muxer-specific code parts in #ifdef CONFIG_MUXERS.
diego
parents:
896
diff
changeset
|
428 #endif |