annotate img2.c @ 1942:70b741fa63eb libavformat

The NSV demuxer assumes that a video frame's timestamp increases by one on each frame, but some low-bitrate NSV files omit video frames for some NSV frames, and expect the timestamp to increase by one every NSV frame. This is noticeable in 64vp3.nsv where the video runs several times faster than the audio. Fix this by unconditionally incrementing the video's timestamp with each NSV frame. patch by David Conrad, umovimus gmail com
author diego
date Wed, 21 Mar 2007 11:05:35 +0000
parents eb16c64144ee
children b5e15030d788
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
1 /*
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
2 * Image format
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
3 * Copyright (c) 2000, 2001, 2002 Fabrice Bellard.
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
4 * Copyright (c) 2004 Michael Niedermayer
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
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
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
9 * modify it under the terms of the GNU Lesser General Public
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
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
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
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
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
16 * Lesser General Public License for more details.
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
17 *
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
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
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
21 */
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
22 #include "avformat.h"
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
23
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
24 typedef struct {
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
25 int img_first;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
26 int img_last;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
27 int img_number;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
28 int img_count;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
29 int is_pipe;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
30 char path[1024];
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
31 } VideoData;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
32
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
33 typedef struct {
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
34 enum CodecID id;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
35 const char *str;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
36 } IdStrMap;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
37
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
38 static const IdStrMap img_tags[] = {
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
39 { CODEC_ID_MJPEG , "jpeg"},
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
40 { CODEC_ID_MJPEG , "jpg"},
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
41 { CODEC_ID_LJPEG , "ljpg"},
581
03377d4de76a porting png support from -f image to -f image2
michael
parents: 574
diff changeset
42 { CODEC_ID_PNG , "png"},
583
7793767ffe35 move p*m from image/lavf -> image2/lavc
michael
parents: 581
diff changeset
43 { CODEC_ID_PPM , "ppm"},
7793767ffe35 move p*m from image/lavf -> image2/lavc
michael
parents: 581
diff changeset
44 { CODEC_ID_PGM , "pgm"},
7793767ffe35 move p*m from image/lavf -> image2/lavc
michael
parents: 581
diff changeset
45 { CODEC_ID_PGMYUV , "pgmyuv"},
7793767ffe35 move p*m from image/lavf -> image2/lavc
michael
parents: 581
diff changeset
46 { CODEC_ID_PBM , "pbm"},
7793767ffe35 move p*m from image/lavf -> image2/lavc
michael
parents: 581
diff changeset
47 { CODEC_ID_PAM , "pam"},
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
48 { CODEC_ID_MPEG1VIDEO, "mpg1-img"},
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
49 { CODEC_ID_MPEG2VIDEO, "mpg2-img"},
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
50 { CODEC_ID_MPEG4 , "mpg4-img"},
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
51 { CODEC_ID_FFV1 , "ffv1-img"},
635
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
52 { CODEC_ID_RAWVIDEO , "y"},
875
0152b49ef2a5 BMP image decoder
mru
parents: 820
diff changeset
53 { CODEC_ID_BMP , "bmp"},
1409
403621d48275 add gif support
bcoudurier
parents: 1358
diff changeset
54 { CODEC_ID_GIF , "gif"},
1416
3e109676d788 Register .tga and .tiff image extensions
kostya
parents: 1409
diff changeset
55 { CODEC_ID_TARGA , "tga"},
3e109676d788 Register .tga and .tiff image extensions
kostya
parents: 1409
diff changeset
56 { CODEC_ID_TIFF , "tiff"},
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
57 {0, NULL}
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
58 };
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
59
635
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
60 static int sizes[][2] = {
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
61 { 640, 480 },
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
62 { 720, 480 },
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
63 { 720, 576 },
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
64 { 352, 288 },
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
65 { 352, 240 },
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
66 { 160, 128 },
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
67 { 512, 384 },
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
68 { 640, 352 },
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
69 { 640, 240 },
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
70 };
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
71
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
72 static int infer_size(int *width_ptr, int *height_ptr, int size)
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
73 {
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
74 int i;
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
75
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
76 for(i=0;i<sizeof(sizes)/sizeof(sizes[0]);i++) {
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
77 if ((sizes[i][0] * sizes[i][1]) == size) {
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
78 *width_ptr = sizes[i][0];
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
79 *height_ptr = sizes[i][1];
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
80 return 0;
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
81 }
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
82 }
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
83 return -1;
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
84 }
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
85 static enum CodecID av_str2id(const IdStrMap *tags, const char *str)
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
86 {
530
michael
parents: 498
diff changeset
87 str= strrchr(str, '.');
michael
parents: 498
diff changeset
88 if(!str) return CODEC_ID_NONE;
michael
parents: 498
diff changeset
89 str++;
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
90
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
91 while (tags->id) {
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
92 int i;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
93 for(i=0; toupper(tags->str[i]) == toupper(str[i]); i++){
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
94 if(tags->str[i]==0 && str[i]==0)
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
95 return tags->id;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
96 }
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
97
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
98 tags++;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
99 }
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
100 return CODEC_ID_NONE;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
101 }
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
102
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
103 /* return -1 if no image found */
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 875
diff changeset
104 static int find_image_range(int *pfirst_index, int *plast_index,
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
105 const char *path)
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
106 {
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
107 char buf[1024];
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
108 int range, last_index, range1, first_index;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
109
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
110 /* find the first image */
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
111 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
112 if (av_get_frame_filename(buf, sizeof(buf), path, first_index) < 0){
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 875
diff changeset
113 *pfirst_index =
498
7c8687cb7f27 support single images, remove copy/paste junk
michael
parents: 497
diff changeset
114 *plast_index = 1;
7c8687cb7f27 support single images, remove copy/paste junk
michael
parents: 497
diff changeset
115 return 0;
7c8687cb7f27 support single images, remove copy/paste junk
michael
parents: 497
diff changeset
116 }
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
117 if (url_exist(buf))
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
118 break;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
119 }
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
120 if (first_index == 5)
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
121 goto fail;
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 875
diff changeset
122
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
123 /* find the last image */
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
124 last_index = first_index;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
125 for(;;) {
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
126 range = 0;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
127 for(;;) {
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
128 if (!range)
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
129 range1 = 1;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
130 else
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
131 range1 = 2 * range;
1291
185190bdc185 Clarified API for numbered sequences, patch by Michel Bardiaux % mbardiaux A mediaxim P be %
gpoirier
parents: 1175
diff changeset
132 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
133 last_index + range1) < 0)
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
134 goto fail;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
135 if (!url_exist(buf))
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
136 break;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
137 range = range1;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
138 /* just in case... */
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
139 if (range >= (1 << 30))
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
140 goto fail;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
141 }
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
142 /* we are sure than image last_index + range exists */
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
143 if (!range)
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
144 break;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
145 last_index += range;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
146 }
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
147 *pfirst_index = first_index;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
148 *plast_index = last_index;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
149 return 0;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
150 fail:
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
151 return -1;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
152 }
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
153
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
154
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
155 static int image_probe(AVProbeData *p)
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
156 {
1594
ffb64cb62cc9 Fix a crash when probing img2 format with a NULL filename.
aurel
parents: 1551
diff changeset
157 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
158 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
159 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
160 else
ee4ef413497e probe with some success image files not containing number pattern but having recognized image extension
bcoudurier
parents: 1416
diff changeset
161 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
162 }
ee4ef413497e probe with some success image files not containing number pattern but having recognized image extension
bcoudurier
parents: 1416
diff changeset
163 return 0;
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
164 }
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
165
583
7793767ffe35 move p*m from image/lavf -> image2/lavc
michael
parents: 581
diff changeset
166 enum CodecID av_guess_image2_codec(const char *filename){
7793767ffe35 move p*m from image/lavf -> image2/lavc
michael
parents: 581
diff changeset
167 return av_str2id(img_tags, filename);
7793767ffe35 move p*m from image/lavf -> image2/lavc
michael
parents: 581
diff changeset
168 }
7793767ffe35 move p*m from image/lavf -> image2/lavc
michael
parents: 581
diff changeset
169
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
170 static int img_read_header(AVFormatContext *s1, AVFormatParameters *ap)
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
171 {
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
172 VideoData *s = s1->priv_data;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
173 int first_index, last_index;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
174 AVStream *st;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
175
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
176 s1->ctx_flags |= AVFMTCTX_NOHEADER;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
177
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
178 st = av_new_stream(s1, 0);
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
179 if (!st) {
1787
eb16c64144ee This fixes error handling for BeOS, removing the need for some ifdefs.
mmu_man
parents: 1594
diff changeset
180 return AVERROR(ENOMEM);
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
181 }
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
182
639
0b52743104ac integer overflows, heap corruption
michael
parents: 635
diff changeset
183 pstrcpy(s->path, sizeof(s->path), s1->filename);
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
184 s->img_number = 0;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
185 s->img_count = 0;
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 875
diff changeset
186
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
187 /* find format */
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
188 if (s1->iformat->flags & AVFMT_NOFILE)
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
189 s->is_pipe = 0;
574
955ca987adbd image2pipe fix
michael
parents: 530
diff changeset
190 else{
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
191 s->is_pipe = 1;
574
955ca987adbd image2pipe fix
michael
parents: 530
diff changeset
192 st->need_parsing= 1;
955ca987adbd image2pipe fix
michael
parents: 530
diff changeset
193 }
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 875
diff changeset
194
1003
2d57ce58f576 simplify AVFormatParameters NULL checks
michael
parents: 903
diff changeset
195 if (!ap->time_base.num) {
743
af4e24d6310c switch to native time bases
michael
parents: 737
diff changeset
196 av_set_pts_info(st, 60, 1, 25);
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
197 } else {
743
af4e24d6310c switch to native time bases
michael
parents: 737
diff changeset
198 av_set_pts_info(st, 60, ap->time_base.num, ap->time_base.den);
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
199 }
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 875
diff changeset
200
1003
2d57ce58f576 simplify AVFormatParameters NULL checks
michael
parents: 903
diff changeset
201 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
202 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
203 st->codec->height= ap->height;
635
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
204 }
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 875
diff changeset
205
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
206 if (!s->is_pipe) {
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
207 if (find_image_range(&first_index, &last_index, s->path) < 0)
622
d4f80b13d981 10l (double free)
michael
parents: 590
diff changeset
208 return AVERROR_IO;
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
209 s->img_first = first_index;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
210 s->img_last = last_index;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
211 s->img_number = first_index;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
212 /* compute duration */
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
213 st->start_time = 0;
743
af4e24d6310c switch to native time bases
michael
parents: 737
diff changeset
214 st->duration = last_index - first_index + 1;
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
215 }
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 875
diff changeset
216
583
7793767ffe35 move p*m from image/lavf -> image2/lavc
michael
parents: 581
diff changeset
217 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
218 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
219 st->codec->codec_id = ap->video_codec_id;
583
7793767ffe35 move p*m from image/lavf -> image2/lavc
michael
parents: 581
diff changeset
220 }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
221 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
222 st->codec->codec_id = ap->audio_codec_id;
583
7793767ffe35 move p*m from image/lavf -> image2/lavc
michael
parents: 581
diff changeset
223 }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
224 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
225 st->codec->codec_id = av_str2id(img_tags, s->path);
583
7793767ffe35 move p*m from image/lavf -> image2/lavc
michael
parents: 581
diff changeset
226 }
820
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 764
diff changeset
227 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
228 st->codec->pix_fmt = ap->pix_fmt;
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
229
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
230 return 0;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
231 }
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
232
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
233 static int img_read_packet(AVFormatContext *s1, AVPacket *pkt)
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
234 {
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
235 VideoData *s = s1->priv_data;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
236 char filename[1024];
635
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
237 int i;
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
238 int size[3]={0}, ret[3]={0};
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
239 ByteIOContext f1[3], *f[3]= {&f1[0], &f1[1], &f1[2]};
820
feca73904e67 changing AVCodecContext codec -> *codec in AVStream so additions to AVCodecContext dont randomize AVStream and break binary compatibility
michael
parents: 764
diff changeset
240 AVCodecContext *codec= s1->streams[0]->codec;
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
241
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
242 if (!s->is_pipe) {
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
243 /* loop over input */
1175
8b53c0f3e7ad add loop_input to AVFormatContext, getting rid of old hack
mru
parents: 1169
diff changeset
244 if (s1->loop_input && s->img_number > s->img_last) {
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
245 s->img_number = s->img_first;
590
a6945dfb69ab loop hack
michael
parents: 585
diff changeset
246 }
1291
185190bdc185 Clarified API for numbered sequences, patch by Michel Bardiaux % mbardiaux A mediaxim P be %
gpoirier
parents: 1175
diff changeset
247 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
248 s->path, s->img_number)<0 && s->img_number > 1)
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
249 return AVERROR_IO;
635
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
250 for(i=0; i<3; i++){
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
251 if (url_fopen(f[i], filename, URL_RDONLY) < 0)
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
252 return AVERROR_IO;
764
cdb845a57ae4 drop most url_fileno() calls (allows to use ByteIOContext directly in caller apps instead of URLProtocol)
aurel
parents: 743
diff changeset
253 size[i]= url_fsize(f[i]);
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 875
diff changeset
254
635
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
255 if(codec->codec_id != CODEC_ID_RAWVIDEO)
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
256 break;
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
257 filename[ strlen(filename) - 1 ]= 'U' + i;
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
258 }
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 875
diff changeset
259
635
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
260 if(codec->codec_id == CODEC_ID_RAWVIDEO && !codec->width)
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
261 infer_size(&codec->width, &codec->height, size[0]);
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
262 } else {
635
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
263 f[0] = &s1->pb;
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
264 if (url_feof(f[0]))
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
265 return AVERROR_IO;
635
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
266 size[0]= 4096;
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
267 }
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
268
635
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
269 av_new_packet(pkt, size[0] + size[1] + size[2]);
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
270 pkt->stream_index = 0;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
271 pkt->flags |= PKT_FLAG_KEY;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
272
635
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
273 pkt->size= 0;
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
274 for(i=0; i<3; i++){
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
275 if(size[i]){
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
276 ret[i]= get_buffer(f[i], pkt->data + pkt->size, size[i]);
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
277 if (!s->is_pipe)
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
278 url_fclose(f[i]);
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
279 if(ret[i]>0)
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
280 pkt->size += ret[i];
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
281 }
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
282 }
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
283
635
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
284 if (ret[0] <= 0 || ret[1]<0 || ret[2]<0) {
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
285 av_free_packet(pkt);
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
286 return AVERROR_IO; /* signal EOF */
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
287 } else {
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
288 s->img_count++;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
289 s->img_number++;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
290 return 0;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
291 }
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
292 }
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
293
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
294 static int img_read_close(AVFormatContext *s1)
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
295 {
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
296 return 0;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
297 }
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
298
903
68bc3ca12e79 Put muxer-specific code parts in #ifdef CONFIG_MUXERS.
diego
parents: 896
diff changeset
299 #ifdef CONFIG_MUXERS
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
300 /******************************************************/
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
301 /* image output */
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
302
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
303 static int img_write_header(AVFormatContext *s)
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
304 {
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
305 VideoData *img = s->priv_data;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
306
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
307 img->img_number = 1;
639
0b52743104ac integer overflows, heap corruption
michael
parents: 635
diff changeset
308 pstrcpy(img->path, sizeof(img->path), s->filename);
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
309
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
310 /* find format */
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
311 if (s->oformat->flags & AVFMT_NOFILE)
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
312 img->is_pipe = 0;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
313 else
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
314 img->is_pipe = 1;
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 875
diff changeset
315
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
316 return 0;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
317 }
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
318
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
319 static int img_write_packet(AVFormatContext *s, AVPacket *pkt)
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
320 {
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
321 VideoData *img = s->priv_data;
635
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
322 ByteIOContext pb1[3], *pb[3]= {&pb1[0], &pb1[1], &pb1[2]};
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
323 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
324 AVCodecContext *codec= s->streams[ pkt->stream_index ]->codec;
635
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
325 int i;
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
326
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
327 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
328 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
329 img->path, img->img_number) < 0 && img->img_number>1)
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
330 return AVERROR_IO;
635
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
331 for(i=0; i<3; i++){
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
332 if (url_fopen(pb[i], filename, URL_WRONLY) < 0)
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
333 return AVERROR_IO;
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 875
diff changeset
334
635
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
335 if(codec->codec_id != CODEC_ID_RAWVIDEO)
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
336 break;
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
337 filename[ strlen(filename) - 1 ]= 'U' + i;
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
338 }
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
339 } else {
635
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
340 pb[0] = &s->pb;
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
341 }
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 875
diff changeset
342
635
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
343 if(codec->codec_id == CODEC_ID_RAWVIDEO){
731
12f78073e925 non 4:2:0 foobar.{Y,U,V} support
michael
parents: 683
diff changeset
344 int ysize = codec->width * codec->height;
12f78073e925 non 4:2:0 foobar.{Y,U,V} support
michael
parents: 683
diff changeset
345 put_buffer(pb[0], pkt->data , ysize);
12f78073e925 non 4:2:0 foobar.{Y,U,V} support
michael
parents: 683
diff changeset
346 put_buffer(pb[1], pkt->data + ysize, (pkt->size - ysize)/2);
12f78073e925 non 4:2:0 foobar.{Y,U,V} support
michael
parents: 683
diff changeset
347 put_buffer(pb[2], pkt->data + ysize +(pkt->size - ysize)/2, (pkt->size - ysize)/2);
635
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
348 put_flush_packet(pb[1]);
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
349 put_flush_packet(pb[2]);
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
350 url_fclose(pb[1]);
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
351 url_fclose(pb[2]);
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
352 }else{
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
353 put_buffer(pb[0], pkt->data, pkt->size);
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
354 }
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
355 put_flush_packet(pb[0]);
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
356 if (!img->is_pipe) {
635
55ff71c8180a .{Y,U,V} image2 support
michael
parents: 622
diff changeset
357 url_fclose(pb[0]);
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
358 }
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
359
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
360 img->img_number++;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
361 return 0;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
362 }
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
363
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
364 static int img_write_trailer(AVFormatContext *s)
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
365 {
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
366 return 0;
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
367 }
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
368
903
68bc3ca12e79 Put muxer-specific code parts in #ifdef CONFIG_MUXERS.
diego
parents: 896
diff changeset
369 #endif /* CONFIG_MUXERS */
68bc3ca12e79 Put muxer-specific code parts in #ifdef CONFIG_MUXERS.
diego
parents: 896
diff changeset
370
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
371 /* input */
1169
d18cc9a1fd02 allow individual selection of muxers and demuxers
mru
parents: 1167
diff changeset
372 #ifdef CONFIG_IMAGE2_DEMUXER
d18cc9a1fd02 allow individual selection of muxers and demuxers
mru
parents: 1167
diff changeset
373 AVInputFormat image2_demuxer = {
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
374 "image2",
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
375 "image2 sequence",
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
376 sizeof(VideoData),
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
377 image_probe,
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
378 img_read_header,
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
379 img_read_packet,
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
380 img_read_close,
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
381 NULL,
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
382 NULL,
498
7c8687cb7f27 support single images, remove copy/paste junk
michael
parents: 497
diff changeset
383 AVFMT_NOFILE,
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
384 };
1169
d18cc9a1fd02 allow individual selection of muxers and demuxers
mru
parents: 1167
diff changeset
385 #endif
d18cc9a1fd02 allow individual selection of muxers and demuxers
mru
parents: 1167
diff changeset
386 #ifdef CONFIG_IMAGE2PIPE_DEMUXER
d18cc9a1fd02 allow individual selection of muxers and demuxers
mru
parents: 1167
diff changeset
387 AVInputFormat image2pipe_demuxer = {
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
388 "image2pipe",
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
389 "piped image2 sequence",
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
390 sizeof(VideoData),
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
391 NULL, /* no probe */
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
392 img_read_header,
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
393 img_read_packet,
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
394 img_read_close,
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
395 NULL,
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
396 };
1169
d18cc9a1fd02 allow individual selection of muxers and demuxers
mru
parents: 1167
diff changeset
397 #endif
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
398
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
399 /* output */
1169
d18cc9a1fd02 allow individual selection of muxers and demuxers
mru
parents: 1167
diff changeset
400 #ifdef CONFIG_IMAGE2_MUXER
d18cc9a1fd02 allow individual selection of muxers and demuxers
mru
parents: 1167
diff changeset
401 AVOutputFormat image2_muxer = {
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
402 "image2",
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
403 "image2 sequence",
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
404 "",
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
405 "",
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
406 sizeof(VideoData),
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
407 CODEC_ID_NONE,
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
408 CODEC_ID_MJPEG,
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
409 img_write_header,
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
410 img_write_packet,
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
411 img_write_trailer,
498
7c8687cb7f27 support single images, remove copy/paste junk
michael
parents: 497
diff changeset
412 AVFMT_NOFILE,
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
413 };
1169
d18cc9a1fd02 allow individual selection of muxers and demuxers
mru
parents: 1167
diff changeset
414 #endif
d18cc9a1fd02 allow individual selection of muxers and demuxers
mru
parents: 1167
diff changeset
415 #ifdef CONFIG_IMAGE2PIPE_MUXER
d18cc9a1fd02 allow individual selection of muxers and demuxers
mru
parents: 1167
diff changeset
416 AVOutputFormat image2pipe_muxer = {
497
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
417 "image2pipe",
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
418 "piped image2 sequence",
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
419 "",
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
420 "",
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
421 sizeof(VideoData),
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
422 CODEC_ID_NONE,
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
423 CODEC_ID_MJPEG,
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
424 img_write_header,
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
425 img_write_packet,
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
426 img_write_trailer,
d95e74ef39e0 image2 / image API cleanup phase-1
michael
parents:
diff changeset
427 };
903
68bc3ca12e79 Put muxer-specific code parts in #ifdef CONFIG_MUXERS.
diego
parents: 896
diff changeset
428 #endif