ffmpeg / libavformat / img2.c @ da9e6c42
History | View | Annotate | Download (12.8 KB)
1 | 03cfe134 | Michael Niedermayer | /*
|
---|---|---|---|
2 | * Image format
|
||
3 | 406792e7 | Diego Biurrun | * Copyright (c) 2000, 2001, 2002 Fabrice Bellard
|
4 | 03cfe134 | Michael Niedermayer | * Copyright (c) 2004 Michael Niedermayer
|
5 | *
|
||
6 | b78e7197 | Diego Biurrun | * This file is part of FFmpeg.
|
7 | *
|
||
8 | * FFmpeg is free software; you can redistribute it and/or
|
||
9 | 03cfe134 | Michael Niedermayer | * modify it under the terms of the GNU Lesser General Public
|
10 | * License as published by the Free Software Foundation; either
|
||
11 | b78e7197 | Diego Biurrun | * version 2.1 of the License, or (at your option) any later version.
|
12 | 03cfe134 | Michael Niedermayer | *
|
13 | b78e7197 | Diego Biurrun | * FFmpeg is distributed in the hope that it will be useful,
|
14 | 03cfe134 | Michael Niedermayer | * 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
|
||
19 | b78e7197 | Diego Biurrun | * License along with FFmpeg; if not, write to the Free Software
|
20 | 5509bffa | Diego Biurrun | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
21 | 03cfe134 | Michael Niedermayer | */
|
22 | 245976da | Diego Biurrun | |
23 | c91662ce | Baptiste Coudurier | #include "libavutil/intreadwrite.h" |
24 | 245976da | Diego Biurrun | #include "libavutil/avstring.h" |
25 | 03cfe134 | Michael Niedermayer | #include "avformat.h" |
26 | 3375a6a5 | Diego Pettenò | #include <strings.h> |
27 | 03cfe134 | Michael Niedermayer | |
28 | typedef struct { |
||
29 | int img_first;
|
||
30 | int img_last;
|
||
31 | int img_number;
|
||
32 | int img_count;
|
||
33 | int is_pipe;
|
||
34 | char path[1024]; |
||
35 | } VideoData; |
||
36 | |||
37 | typedef struct { |
||
38 | enum CodecID id;
|
||
39 | const char *str; |
||
40 | } IdStrMap; |
||
41 | |||
42 | static const IdStrMap img_tags[] = { |
||
43 | { CODEC_ID_MJPEG , "jpeg"},
|
||
44 | { CODEC_ID_MJPEG , "jpg"},
|
||
45 | a481293f | Carl Eugen Hoyos | { CODEC_ID_LJPEG , "ljpg"},
|
46 | 4eff7cf4 | Michael Niedermayer | { CODEC_ID_PNG , "png"},
|
47 | 042e0add | Loren Merritt | { CODEC_ID_PNG , "mng"},
|
48 | 5b6d5596 | Michael Niedermayer | { CODEC_ID_PPM , "ppm"},
|
49 | 485cfbe8 | Carl Eugen Hoyos | { CODEC_ID_PPM , "pnm"},
|
50 | 5b6d5596 | Michael Niedermayer | { CODEC_ID_PGM , "pgm"},
|
51 | { CODEC_ID_PGMYUV , "pgmyuv"},
|
||
52 | { CODEC_ID_PBM , "pbm"},
|
||
53 | { CODEC_ID_PAM , "pam"},
|
||
54 | 03cfe134 | Michael Niedermayer | { CODEC_ID_MPEG1VIDEO, "mpg1-img"},
|
55 | { CODEC_ID_MPEG2VIDEO, "mpg2-img"},
|
||
56 | { CODEC_ID_MPEG4 , "mpg4-img"},
|
||
57 | { CODEC_ID_FFV1 , "ffv1-img"},
|
||
58 | 55cf1959 | Michael Niedermayer | { CODEC_ID_RAWVIDEO , "y"},
|
59 | 9fa62f2a | Måns Rullgård | { CODEC_ID_BMP , "bmp"},
|
60 | 6f9e492a | Baptiste Coudurier | { CODEC_ID_GIF , "gif"},
|
61 | 79f7c32f | Kostya Shishkov | { CODEC_ID_TARGA , "tga"},
|
62 | { CODEC_ID_TIFF , "tiff"},
|
||
63 | dd0f776c | Quoc Cuong Pham | { CODEC_ID_TIFF , "tif"},
|
64 | 2d99eed1 | Xiaohui Sun | { CODEC_ID_SGI , "sgi"},
|
65 | 8d2fb333 | Ivo van Poorten | { CODEC_ID_PTX , "ptx"},
|
66 | b4abe1d1 | Ivo van Poorten | { CODEC_ID_PCX , "pcx"},
|
67 | d43df959 | Ivo van Poorten | { CODEC_ID_SUNRAST , "sun"},
|
68 | { CODEC_ID_SUNRAST , "ras"},
|
||
69 | { CODEC_ID_SUNRAST , "rs"},
|
||
70 | { CODEC_ID_SUNRAST , "im1"},
|
||
71 | { CODEC_ID_SUNRAST , "im8"},
|
||
72 | { CODEC_ID_SUNRAST , "im24"},
|
||
73 | { CODEC_ID_SUNRAST , "sunras"},
|
||
74 | 8b2386dc | Benoit Fouet | { CODEC_ID_JPEG2000 , "jp2"},
|
75 | 94d3d6a4 | Jimmy Christensen | { CODEC_ID_DPX , "dpx"},
|
76 | d9133126 | Carl Eugen Hoyos | { CODEC_ID_NONE , NULL}
|
77 | 03cfe134 | Michael Niedermayer | }; |
78 | |||
79 | aecf157e | Reimar Döffinger | static const int sizes[][2] = { |
80 | 55cf1959 | Michael Niedermayer | { 640, 480 }, |
81 | { 720, 480 }, |
||
82 | { 720, 576 }, |
||
83 | { 352, 288 }, |
||
84 | { 352, 240 }, |
||
85 | { 160, 128 }, |
||
86 | { 512, 384 }, |
||
87 | { 640, 352 }, |
||
88 | { 640, 240 }, |
||
89 | }; |
||
90 | |||
91 | static int infer_size(int *width_ptr, int *height_ptr, int size) |
||
92 | { |
||
93 | int i;
|
||
94 | |||
95 | 37d3e066 | Aurelien Jacobs | for(i=0;i<FF_ARRAY_ELEMS(sizes);i++) { |
96 | 55cf1959 | Michael Niedermayer | if ((sizes[i][0] * sizes[i][1]) == size) { |
97 | *width_ptr = sizes[i][0];
|
||
98 | *height_ptr = sizes[i][1];
|
||
99 | return 0; |
||
100 | } |
||
101 | } |
||
102 | return -1; |
||
103 | } |
||
104 | 03cfe134 | Michael Niedermayer | static enum CodecID av_str2id(const IdStrMap *tags, const char *str) |
105 | { |
||
106 | 3ed02129 | Michael Niedermayer | str= strrchr(str, '.');
|
107 | if(!str) return CODEC_ID_NONE; |
||
108 | str++; |
||
109 | 03cfe134 | Michael Niedermayer | |
110 | while (tags->id) {
|
||
111 | 3375a6a5 | Diego Pettenò | if (!strcasecmp(str, tags->str))
|
112 | return tags->id;
|
||
113 | 03cfe134 | Michael Niedermayer | |
114 | tags++; |
||
115 | } |
||
116 | return CODEC_ID_NONE;
|
||
117 | } |
||
118 | |||
119 | /* return -1 if no image found */
|
||
120 | 115329f1 | Diego Biurrun | static int find_image_range(int *pfirst_index, int *plast_index, |
121 | 03cfe134 | Michael Niedermayer | const char *path) |
122 | { |
||
123 | char buf[1024]; |
||
124 | int range, last_index, range1, first_index;
|
||
125 | |||
126 | /* find the first image */
|
||
127 | for(first_index = 0; first_index < 5; first_index++) { |
||
128 | 5c07cf53 | Michel Bardiaux | if (av_get_frame_filename(buf, sizeof(buf), path, first_index) < 0){ |
129 | 115329f1 | Diego Biurrun | *pfirst_index = |
130 | 61fb3183 | Michael Niedermayer | *plast_index = 1;
|
131 | c671ac40 | Samuli Valo | if(url_exist(buf))
|
132 | return 0; |
||
133 | return -1; |
||
134 | 61fb3183 | Michael Niedermayer | } |
135 | 03cfe134 | Michael Niedermayer | if (url_exist(buf))
|
136 | break;
|
||
137 | } |
||
138 | if (first_index == 5) |
||
139 | goto fail;
|
||
140 | 115329f1 | Diego Biurrun | |
141 | 03cfe134 | Michael Niedermayer | /* find the last image */
|
142 | last_index = first_index; |
||
143 | for(;;) {
|
||
144 | range = 0;
|
||
145 | for(;;) {
|
||
146 | if (!range)
|
||
147 | range1 = 1;
|
||
148 | else
|
||
149 | range1 = 2 * range;
|
||
150 | 5c07cf53 | Michel Bardiaux | if (av_get_frame_filename(buf, sizeof(buf), path, |
151 | last_index + range1) < 0)
|
||
152 | 03cfe134 | Michael Niedermayer | goto fail;
|
153 | if (!url_exist(buf))
|
||
154 | break;
|
||
155 | range = range1; |
||
156 | /* just in case... */
|
||
157 | if (range >= (1 << 30)) |
||
158 | goto fail;
|
||
159 | } |
||
160 | /* we are sure than image last_index + range exists */
|
||
161 | if (!range)
|
||
162 | break;
|
||
163 | last_index += range; |
||
164 | } |
||
165 | *pfirst_index = first_index; |
||
166 | *plast_index = last_index; |
||
167 | return 0; |
||
168 | fail:
|
||
169 | return -1; |
||
170 | } |
||
171 | |||
172 | |||
173 | static int image_probe(AVProbeData *p) |
||
174 | { |
||
175 | e825b500 | Joakim Plate | if (p->filename && av_str2id(img_tags, p->filename)) {
|
176 | d1e8675c | Baptiste Coudurier | if (av_filename_number_test(p->filename))
|
177 | return AVPROBE_SCORE_MAX;
|
||
178 | else
|
||
179 | return AVPROBE_SCORE_MAX/2; |
||
180 | } |
||
181 | return 0; |
||
182 | 03cfe134 | Michael Niedermayer | } |
183 | |||
184 | 5b6d5596 | Michael Niedermayer | enum CodecID av_guess_image2_codec(const char *filename){ |
185 | return av_str2id(img_tags, filename);
|
||
186 | } |
||
187 | |||
188 | 03cfe134 | Michael Niedermayer | static int img_read_header(AVFormatContext *s1, AVFormatParameters *ap) |
189 | { |
||
190 | VideoData *s = s1->priv_data; |
||
191 | int first_index, last_index;
|
||
192 | AVStream *st; |
||
193 | |||
194 | s1->ctx_flags |= AVFMTCTX_NOHEADER; |
||
195 | |||
196 | st = av_new_stream(s1, 0);
|
||
197 | if (!st) {
|
||
198 | 8fa36ae0 | François Revol | return AVERROR(ENOMEM);
|
199 | 03cfe134 | Michael Niedermayer | } |
200 | |||
201 | 75e61b0e | Måns Rullgård | av_strlcpy(s->path, s1->filename, sizeof(s->path));
|
202 | 03cfe134 | Michael Niedermayer | s->img_number = 0;
|
203 | s->img_count = 0;
|
||
204 | 115329f1 | Diego Biurrun | |
205 | 03cfe134 | Michael Niedermayer | /* find format */
|
206 | if (s1->iformat->flags & AVFMT_NOFILE)
|
||
207 | s->is_pipe = 0;
|
||
208 | 146210ca | Michael Niedermayer | else{
|
209 | 03cfe134 | Michael Niedermayer | s->is_pipe = 1;
|
210 | 57004ff1 | Aurelien Jacobs | st->need_parsing = AVSTREAM_PARSE_FULL; |
211 | 146210ca | Michael Niedermayer | } |
212 | 115329f1 | Diego Biurrun | |
213 | c04c3282 | Michael Niedermayer | if (!ap->time_base.num) {
|
214 | c0df9d75 | Michael Niedermayer | av_set_pts_info(st, 60, 1, 25); |
215 | 03cfe134 | Michael Niedermayer | } else {
|
216 | c0df9d75 | Michael Niedermayer | av_set_pts_info(st, 60, ap->time_base.num, ap->time_base.den);
|
217 | 03cfe134 | Michael Niedermayer | } |
218 | 115329f1 | Diego Biurrun | |
219 | c04c3282 | Michael Niedermayer | if(ap->width && ap->height){
|
220 | 01f4895c | Michael Niedermayer | st->codec->width = ap->width; |
221 | st->codec->height= ap->height; |
||
222 | 55cf1959 | Michael Niedermayer | } |
223 | 115329f1 | Diego Biurrun | |
224 | 03cfe134 | Michael Niedermayer | if (!s->is_pipe) {
|
225 | if (find_image_range(&first_index, &last_index, s->path) < 0) |
||
226 | c671ac40 | Samuli Valo | return AVERROR(ENOENT);
|
227 | 03cfe134 | Michael Niedermayer | s->img_first = first_index; |
228 | s->img_last = last_index; |
||
229 | s->img_number = first_index; |
||
230 | /* compute duration */
|
||
231 | st->start_time = 0;
|
||
232 | c0df9d75 | Michael Niedermayer | st->duration = last_index - first_index + 1;
|
233 | 03cfe134 | Michael Niedermayer | } |
234 | 115329f1 | Diego Biurrun | |
235 | 90d0379f | Jai Menon | if(s1->video_codec_id){
|
236 | 72415b2a | Stefano Sabatini | st->codec->codec_type = AVMEDIA_TYPE_VIDEO; |
237 | 90d0379f | Jai Menon | st->codec->codec_id = s1->video_codec_id; |
238 | }else if(s1->audio_codec_id){ |
||
239 | 72415b2a | Stefano Sabatini | st->codec->codec_type = AVMEDIA_TYPE_AUDIO; |
240 | 90d0379f | Jai Menon | st->codec->codec_id = s1->audio_codec_id; |
241 | 5b6d5596 | Michael Niedermayer | }else{
|
242 | 72415b2a | Stefano Sabatini | st->codec->codec_type = AVMEDIA_TYPE_VIDEO; |
243 | 01f4895c | Michael Niedermayer | st->codec->codec_id = av_str2id(img_tags, s->path); |
244 | 5b6d5596 | Michael Niedermayer | } |
245 | 72415b2a | Stefano Sabatini | if(st->codec->codec_type == AVMEDIA_TYPE_VIDEO && ap->pix_fmt != PIX_FMT_NONE)
|
246 | 01f4895c | Michael Niedermayer | st->codec->pix_fmt = ap->pix_fmt; |
247 | 03cfe134 | Michael Niedermayer | |
248 | return 0; |
||
249 | } |
||
250 | |||
251 | static int img_read_packet(AVFormatContext *s1, AVPacket *pkt) |
||
252 | { |
||
253 | VideoData *s = s1->priv_data; |
||
254 | char filename[1024]; |
||
255 | 55cf1959 | Michael Niedermayer | int i;
|
256 | int size[3]={0}, ret[3]={0}; |
||
257 | 899681cd | Björn Axelsson | ByteIOContext *f[3];
|
258 | 01f4895c | Michael Niedermayer | AVCodecContext *codec= s1->streams[0]->codec;
|
259 | 03cfe134 | Michael Niedermayer | |
260 | if (!s->is_pipe) {
|
||
261 | /* loop over input */
|
||
262 | 5894e1bb | Víctor Paesa | if (s1->loop_input && s->img_number > s->img_last) {
|
263 | 03cfe134 | Michael Niedermayer | s->img_number = s->img_first; |
264 | b339fb00 | Michael Niedermayer | } |
265 | e4b8d05d | Baptiste Coudurier | if (s->img_number > s->img_last)
|
266 | return AVERROR_EOF;
|
||
267 | 5c07cf53 | Michel Bardiaux | if (av_get_frame_filename(filename, sizeof(filename), |
268 | s->path, s->img_number)<0 && s->img_number > 1) |
||
269 | 6f3e0b21 | Panagiotis Issaris | return AVERROR(EIO);
|
270 | 55cf1959 | Michael Niedermayer | for(i=0; i<3; i++){ |
271 | 9ed3afcb | Jai Menon | if (url_fopen(&f[i], filename, URL_RDONLY) < 0) { |
272 | c5113129 | Michael Niedermayer | if(i==1) |
273 | break;
|
||
274 | 9ed3afcb | Jai Menon | av_log(s1, AV_LOG_ERROR, "Could not open file : %s\n",filename);
|
275 | 6f3e0b21 | Panagiotis Issaris | return AVERROR(EIO);
|
276 | 9ed3afcb | Jai Menon | } |
277 | a965c478 | Aurelien Jacobs | size[i]= url_fsize(f[i]); |
278 | 115329f1 | Diego Biurrun | |
279 | 55cf1959 | Michael Niedermayer | if(codec->codec_id != CODEC_ID_RAWVIDEO)
|
280 | break;
|
||
281 | filename[ strlen(filename) - 1 ]= 'U' + i; |
||
282 | } |
||
283 | 115329f1 | Diego Biurrun | |
284 | 55cf1959 | Michael Niedermayer | if(codec->codec_id == CODEC_ID_RAWVIDEO && !codec->width)
|
285 | infer_size(&codec->width, &codec->height, size[0]);
|
||
286 | 03cfe134 | Michael Niedermayer | } else {
|
287 | 899681cd | Björn Axelsson | f[0] = s1->pb;
|
288 | 55cf1959 | Michael Niedermayer | if (url_feof(f[0])) |
289 | 6f3e0b21 | Panagiotis Issaris | return AVERROR(EIO);
|
290 | 55cf1959 | Michael Niedermayer | size[0]= 4096; |
291 | 03cfe134 | Michael Niedermayer | } |
292 | |||
293 | 55cf1959 | Michael Niedermayer | av_new_packet(pkt, size[0] + size[1] + size[2]); |
294 | 03cfe134 | Michael Niedermayer | pkt->stream_index = 0;
|
295 | cc947f04 | Jean-Daniel Dupas | pkt->flags |= AV_PKT_FLAG_KEY; |
296 | 03cfe134 | Michael Niedermayer | |
297 | 55cf1959 | Michael Niedermayer | pkt->size= 0;
|
298 | for(i=0; i<3; i++){ |
||
299 | if(size[i]){
|
||
300 | ret[i]= get_buffer(f[i], pkt->data + pkt->size, size[i]); |
||
301 | if (!s->is_pipe)
|
||
302 | url_fclose(f[i]); |
||
303 | if(ret[i]>0) |
||
304 | pkt->size += ret[i]; |
||
305 | } |
||
306 | 03cfe134 | Michael Niedermayer | } |
307 | |||
308 | 55cf1959 | Michael Niedermayer | if (ret[0] <= 0 || ret[1]<0 || ret[2]<0) { |
309 | 03cfe134 | Michael Niedermayer | av_free_packet(pkt); |
310 | 6f3e0b21 | Panagiotis Issaris | return AVERROR(EIO); /* signal EOF */ |
311 | 03cfe134 | Michael Niedermayer | } else {
|
312 | s->img_count++; |
||
313 | s->img_number++; |
||
314 | return 0; |
||
315 | } |
||
316 | } |
||
317 | |||
318 | b250f9c6 | Aurelien Jacobs | #if CONFIG_IMAGE2_MUXER || CONFIG_IMAGE2PIPE_MUXER
|
319 | 03cfe134 | Michael Niedermayer | /******************************************************/
|
320 | /* image output */
|
||
321 | |||
322 | static int img_write_header(AVFormatContext *s) |
||
323 | { |
||
324 | VideoData *img = s->priv_data; |
||
325 | |||
326 | img->img_number = 1;
|
||
327 | 75e61b0e | Måns Rullgård | av_strlcpy(img->path, s->filename, sizeof(img->path));
|
328 | 03cfe134 | Michael Niedermayer | |
329 | /* find format */
|
||
330 | if (s->oformat->flags & AVFMT_NOFILE)
|
||
331 | img->is_pipe = 0;
|
||
332 | else
|
||
333 | img->is_pipe = 1;
|
||
334 | 115329f1 | Diego Biurrun | |
335 | 03cfe134 | Michael Niedermayer | return 0; |
336 | } |
||
337 | |||
338 | static int img_write_packet(AVFormatContext *s, AVPacket *pkt) |
||
339 | { |
||
340 | VideoData *img = s->priv_data; |
||
341 | 899681cd | Björn Axelsson | ByteIOContext *pb[3];
|
342 | 03cfe134 | Michael Niedermayer | char filename[1024]; |
343 | 01f4895c | Michael Niedermayer | AVCodecContext *codec= s->streams[ pkt->stream_index ]->codec; |
344 | 55cf1959 | Michael Niedermayer | int i;
|
345 | 03cfe134 | Michael Niedermayer | |
346 | if (!img->is_pipe) {
|
||
347 | 5c07cf53 | Michel Bardiaux | if (av_get_frame_filename(filename, sizeof(filename), |
348 | 77df894a | Baptiste Coudurier | img->path, img->img_number) < 0 && img->img_number>1) { |
349 | av_log(s, AV_LOG_ERROR, "Could not get frame filename from pattern\n");
|
||
350 | 6f3e0b21 | Panagiotis Issaris | return AVERROR(EIO);
|
351 | 77df894a | Baptiste Coudurier | } |
352 | 55cf1959 | Michael Niedermayer | for(i=0; i<3; i++){ |
353 | 9ed3afcb | Jai Menon | if (url_fopen(&pb[i], filename, URL_WRONLY) < 0) { |
354 | av_log(s, AV_LOG_ERROR, "Could not open file : %s\n",filename);
|
||
355 | 6f3e0b21 | Panagiotis Issaris | return AVERROR(EIO);
|
356 | 9ed3afcb | Jai Menon | } |
357 | 115329f1 | Diego Biurrun | |
358 | 55cf1959 | Michael Niedermayer | if(codec->codec_id != CODEC_ID_RAWVIDEO)
|
359 | break;
|
||
360 | filename[ strlen(filename) - 1 ]= 'U' + i; |
||
361 | } |
||
362 | 03cfe134 | Michael Niedermayer | } else {
|
363 | 899681cd | Björn Axelsson | pb[0] = s->pb;
|
364 | 03cfe134 | Michael Niedermayer | } |
365 | 115329f1 | Diego Biurrun | |
366 | 55cf1959 | Michael Niedermayer | if(codec->codec_id == CODEC_ID_RAWVIDEO){
|
367 | 2c34596f | Michael Niedermayer | int ysize = codec->width * codec->height;
|
368 | put_buffer(pb[0], pkt->data , ysize);
|
||
369 | put_buffer(pb[1], pkt->data + ysize, (pkt->size - ysize)/2); |
||
370 | put_buffer(pb[2], pkt->data + ysize +(pkt->size - ysize)/2, (pkt->size - ysize)/2); |
||
371 | 55cf1959 | Michael Niedermayer | put_flush_packet(pb[1]);
|
372 | put_flush_packet(pb[2]);
|
||
373 | url_fclose(pb[1]);
|
||
374 | url_fclose(pb[2]);
|
||
375 | }else{
|
||
376 | b4097b13 | Baptiste Coudurier | if(av_str2id(img_tags, s->filename) == CODEC_ID_JPEG2000){
|
377 | AVStream *st = s->streams[0];
|
||
378 | if(st->codec->extradata_size > 8 && |
||
379 | AV_RL32(st->codec->extradata+4) == MKTAG('j','p','2','h')){ |
||
380 | if(pkt->size < 8 || AV_RL32(pkt->data+4) != MKTAG('j','p','2','c')) |
||
381 | goto error;
|
||
382 | put_be32(pb[0], 12); |
||
383 | put_tag (pb[0], "jP "); |
||
384 | put_be32(pb[0], 0x0D0A870A); // signature |
||
385 | put_be32(pb[0], 20); |
||
386 | put_tag (pb[0], "ftyp"); |
||
387 | put_tag (pb[0], "jp2 "); |
||
388 | put_be32(pb[0], 0); |
||
389 | put_tag (pb[0], "jp2 "); |
||
390 | put_buffer(pb[0], st->codec->extradata, st->codec->extradata_size);
|
||
391 | }else if(pkt->size < 8 || |
||
392 | (!st->codec->extradata_size && |
||
393 | AV_RL32(pkt->data+4) != MKTAG('j','P',' ',' '))){ // signature |
||
394 | error:
|
||
395 | av_log(s, AV_LOG_ERROR, "malformated jpeg2000 codestream\n");
|
||
396 | return -1; |
||
397 | } |
||
398 | } |
||
399 | 55cf1959 | Michael Niedermayer | put_buffer(pb[0], pkt->data, pkt->size);
|
400 | } |
||
401 | put_flush_packet(pb[0]);
|
||
402 | 03cfe134 | Michael Niedermayer | if (!img->is_pipe) {
|
403 | 55cf1959 | Michael Niedermayer | url_fclose(pb[0]);
|
404 | 03cfe134 | Michael Niedermayer | } |
405 | |||
406 | img->img_number++; |
||
407 | return 0; |
||
408 | } |
||
409 | |||
410 | b250f9c6 | Aurelien Jacobs | #endif /* CONFIG_IMAGE2_MUXER || CONFIG_IMAGE2PIPE_MUXER */ |
411 | 8228bff5 | Diego Biurrun | |
412 | 03cfe134 | Michael Niedermayer | /* input */
|
413 | b250f9c6 | Aurelien Jacobs | #if CONFIG_IMAGE2_DEMUXER
|
414 | ff70e601 | Måns Rullgård | AVInputFormat image2_demuxer = { |
415 | 03cfe134 | Michael Niedermayer | "image2",
|
416 | bde15e74 | Stefano Sabatini | NULL_IF_CONFIG_SMALL("image2 sequence"),
|
417 | 03cfe134 | Michael Niedermayer | sizeof(VideoData),
|
418 | image_probe, |
||
419 | img_read_header, |
||
420 | img_read_packet, |
||
421 | bea91b8c | Ramiro Polla | NULL,
|
422 | 03cfe134 | Michael Niedermayer | NULL,
|
423 | NULL,
|
||
424 | 61fb3183 | Michael Niedermayer | AVFMT_NOFILE, |
425 | 03cfe134 | Michael Niedermayer | }; |
426 | ff70e601 | Måns Rullgård | #endif
|
427 | b250f9c6 | Aurelien Jacobs | #if CONFIG_IMAGE2PIPE_DEMUXER
|
428 | ff70e601 | Måns Rullgård | AVInputFormat image2pipe_demuxer = { |
429 | 03cfe134 | Michael Niedermayer | "image2pipe",
|
430 | bde15e74 | Stefano Sabatini | NULL_IF_CONFIG_SMALL("piped image2 sequence"),
|
431 | 03cfe134 | Michael Niedermayer | sizeof(VideoData),
|
432 | NULL, /* no probe */ |
||
433 | img_read_header, |
||
434 | img_read_packet, |
||
435 | }; |
||
436 | ff70e601 | Måns Rullgård | #endif
|
437 | 03cfe134 | Michael Niedermayer | |
438 | /* output */
|
||
439 | b250f9c6 | Aurelien Jacobs | #if CONFIG_IMAGE2_MUXER
|
440 | ff70e601 | Måns Rullgård | AVOutputFormat image2_muxer = { |
441 | 03cfe134 | Michael Niedermayer | "image2",
|
442 | bde15e74 | Stefano Sabatini | NULL_IF_CONFIG_SMALL("image2 sequence"),
|
443 | 03cfe134 | Michael Niedermayer | "",
|
444 | effcedf7 | Daniel Verkamp | "bmp,jpeg,jpg,ljpg,pam,pbm,pcx,pgm,pgmyuv,png,ppm,sgi,tif,tiff,jp2",
|
445 | 03cfe134 | Michael Niedermayer | sizeof(VideoData),
|
446 | CODEC_ID_NONE, |
||
447 | CODEC_ID_MJPEG, |
||
448 | img_write_header, |
||
449 | img_write_packet, |
||
450 | 82213f68 | Baptiste Coudurier | NULL,
|
451 | ab5a0175 | Michael Niedermayer | .flags= AVFMT_NOTIMESTAMPS | AVFMT_NODIMENSIONS | AVFMT_NOFILE |
452 | 03cfe134 | Michael Niedermayer | }; |
453 | ff70e601 | Måns Rullgård | #endif
|
454 | b250f9c6 | Aurelien Jacobs | #if CONFIG_IMAGE2PIPE_MUXER
|
455 | ff70e601 | Måns Rullgård | AVOutputFormat image2pipe_muxer = { |
456 | 03cfe134 | Michael Niedermayer | "image2pipe",
|
457 | bde15e74 | Stefano Sabatini | NULL_IF_CONFIG_SMALL("piped image2 sequence"),
|
458 | 03cfe134 | Michael Niedermayer | "",
|
459 | "",
|
||
460 | sizeof(VideoData),
|
||
461 | CODEC_ID_NONE, |
||
462 | CODEC_ID_MJPEG, |
||
463 | img_write_header, |
||
464 | img_write_packet, |
||
465 | ab5a0175 | Michael Niedermayer | .flags= AVFMT_NOTIMESTAMPS | AVFMT_NODIMENSIONS |
466 | 03cfe134 | Michael Niedermayer | }; |
467 | 8228bff5 | Diego Biurrun | #endif |