]> rtime.felk.cvut.cz Git - frescor/ffmpeg.git/blob - libavformat/raw.c
6c6ea27ddfa3735531abb09a576dcca929187327
[frescor/ffmpeg.git] / libavformat / raw.c
1 /*
2  * RAW muxer and demuxer
3  * Copyright (c) 2001 Fabrice Bellard.
4  * Copyright (c) 2005 Alex Beregszaszi
5  *
6  * This file is part of FFmpeg.
7  *
8  * FFmpeg is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * FFmpeg is distributed in the hope that it will be useful,
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
19  * License along with FFmpeg; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21  */
22
23 #include "libavutil/crc.h"
24 #include "libavcodec/ac3_parser.h"
25 #include "libavcodec/bitstream.h"
26 #include "libavcodec/bytestream.h"
27 #include "avformat.h"
28 #include "raw.h"
29
30 /* simple formats */
31 #ifdef CONFIG_FLAC_MUXER
32 static int flac_write_header(struct AVFormatContext *s)
33 {
34     static const uint8_t header[8] = {
35         0x66, 0x4C, 0x61, 0x43, 0x80, 0x00, 0x00, 0x22
36     };
37     uint8_t *streaminfo = s->streams[0]->codec->extradata;
38     int len = s->streams[0]->codec->extradata_size;
39     if(streaminfo != NULL && len > 0) {
40         put_buffer(s->pb, header, 8);
41         put_buffer(s->pb, streaminfo, len);
42     }
43     return 0;
44 }
45
46 static int flac_write_trailer(struct AVFormatContext *s)
47 {
48     ByteIOContext *pb = s->pb;
49     uint8_t *streaminfo = s->streams[0]->codec->extradata;
50     int len = s->streams[0]->codec->extradata_size;
51     int64_t file_size;
52
53     if (streaminfo && len > 0 && !url_is_streamed(s->pb)) {
54         file_size = url_ftell(pb);
55         url_fseek(pb, 8, SEEK_SET);
56         put_buffer(pb, streaminfo, len);
57         url_fseek(pb, file_size, SEEK_SET);
58         put_flush_packet(pb);
59     }
60     return 0;
61 }
62 #endif
63
64 #ifdef CONFIG_ROQ_MUXER
65 static int roq_write_header(struct AVFormatContext *s)
66 {
67     static const uint8_t header[] = {
68         0x84, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0x1E, 0x00
69     };
70
71     put_buffer(s->pb, header, 8);
72     put_flush_packet(s->pb);
73
74     return 0;
75 }
76 #endif
77
78 #ifdef CONFIG_NULL_MUXER
79 static int null_write_packet(struct AVFormatContext *s, AVPacket *pkt)
80 {
81     return 0;
82 }
83 #endif
84
85 #ifdef CONFIG_MUXERS
86 static int raw_write_packet(struct AVFormatContext *s, AVPacket *pkt)
87 {
88     put_buffer(s->pb, pkt->data, pkt->size);
89     put_flush_packet(s->pb);
90     return 0;
91 }
92 #endif
93
94 #ifdef CONFIG_DEMUXERS
95 /* raw input */
96 static int raw_read_header(AVFormatContext *s, AVFormatParameters *ap)
97 {
98     AVStream *st;
99     int id;
100
101     st = av_new_stream(s, 0);
102     if (!st)
103         return AVERROR(ENOMEM);
104
105         id = s->iformat->value;
106         if (id == CODEC_ID_RAWVIDEO) {
107             st->codec->codec_type = CODEC_TYPE_VIDEO;
108         } else {
109             st->codec->codec_type = CODEC_TYPE_AUDIO;
110         }
111         st->codec->codec_id = id;
112
113         switch(st->codec->codec_type) {
114         case CODEC_TYPE_AUDIO:
115             st->codec->sample_rate = ap->sample_rate;
116             if(ap->channels) st->codec->channels = ap->channels;
117             else             st->codec->channels = 1;
118             av_set_pts_info(st, 64, 1, st->codec->sample_rate);
119             break;
120         case CODEC_TYPE_VIDEO:
121             if(ap->time_base.num)
122                 av_set_pts_info(st, 64, ap->time_base.num, ap->time_base.den);
123             else
124                 av_set_pts_info(st, 64, 1, 25);
125             st->codec->width = ap->width;
126             st->codec->height = ap->height;
127             st->codec->pix_fmt = ap->pix_fmt;
128             if(st->codec->pix_fmt == PIX_FMT_NONE)
129                 st->codec->pix_fmt= PIX_FMT_YUV420P;
130             break;
131         default:
132             return -1;
133         }
134     return 0;
135 }
136
137 #define RAW_PACKET_SIZE 1024
138
139 static int raw_read_packet(AVFormatContext *s, AVPacket *pkt)
140 {
141     int ret, size, bps;
142     //    AVStream *st = s->streams[0];
143
144     size= RAW_PACKET_SIZE;
145
146     ret= av_get_packet(s->pb, pkt, size);
147
148     pkt->stream_index = 0;
149     if (ret <= 0) {
150         return AVERROR(EIO);
151     }
152     /* note: we need to modify the packet size here to handle the last
153        packet */
154     pkt->size = ret;
155
156     bps= av_get_bits_per_sample(s->streams[0]->codec->codec_id);
157     assert(bps); // if false there IS a bug elsewhere (NOT in this function)
158     pkt->dts=
159     pkt->pts= pkt->pos*8 / (bps * s->streams[0]->codec->channels);
160
161     return ret;
162 }
163
164 static int raw_read_partial_packet(AVFormatContext *s, AVPacket *pkt)
165 {
166     int ret, size;
167
168     size = RAW_PACKET_SIZE;
169
170     if (av_new_packet(pkt, size) < 0)
171         return AVERROR(EIO);
172
173     pkt->pos= url_ftell(s->pb);
174     pkt->stream_index = 0;
175     ret = get_partial_buffer(s->pb, pkt->data, size);
176     if (ret <= 0) {
177         av_free_packet(pkt);
178         return AVERROR(EIO);
179     }
180     pkt->size = ret;
181     return ret;
182 }
183 #endif
184
185 #ifdef CONFIG_RAWVIDEO_DEMUXER
186 static int rawvideo_read_packet(AVFormatContext *s, AVPacket *pkt)
187 {
188     int packet_size, ret, width, height;
189     AVStream *st = s->streams[0];
190
191     width = st->codec->width;
192     height = st->codec->height;
193
194     packet_size = avpicture_get_size(st->codec->pix_fmt, width, height);
195     if (packet_size < 0)
196         return -1;
197
198     ret= av_get_packet(s->pb, pkt, packet_size);
199     pkt->pts=
200     pkt->dts= pkt->pos / packet_size;
201
202     pkt->stream_index = 0;
203     if (ret != packet_size) {
204         return AVERROR(EIO);
205     } else {
206         return 0;
207     }
208 }
209 #endif
210
211 #ifdef CONFIG_INGENIENT_DEMUXER
212 // http://www.artificis.hu/files/texts/ingenient.txt
213 static int ingenient_read_packet(AVFormatContext *s, AVPacket *pkt)
214 {
215     int ret, size, w, h, unk1, unk2;
216
217     if (get_le32(s->pb) != MKTAG('M', 'J', 'P', 'G'))
218         return AVERROR(EIO); // FIXME
219
220     size = get_le32(s->pb);
221
222     w = get_le16(s->pb);
223     h = get_le16(s->pb);
224
225     url_fskip(s->pb, 8); // zero + size (padded?)
226     url_fskip(s->pb, 2);
227     unk1 = get_le16(s->pb);
228     unk2 = get_le16(s->pb);
229     url_fskip(s->pb, 22); // ASCII timestamp
230
231     av_log(NULL, AV_LOG_DEBUG, "Ingenient packet: size=%d, width=%d, height=%d, unk1=%d unk2=%d\n",
232         size, w, h, unk1, unk2);
233
234     if (av_new_packet(pkt, size) < 0)
235         return AVERROR(EIO);
236
237     pkt->pos = url_ftell(s->pb);
238     pkt->stream_index = 0;
239     ret = get_buffer(s->pb, pkt->data, size);
240     if (ret <= 0) {
241         av_free_packet(pkt);
242         return AVERROR(EIO);
243     }
244     pkt->size = ret;
245     return ret;
246 }
247 #endif
248
249 #ifdef CONFIG_DEMUXERS
250 int pcm_read_seek(AVFormatContext *s,
251                   int stream_index, int64_t timestamp, int flags)
252 {
253     AVStream *st;
254     int block_align, byte_rate, ret;
255     int64_t pos;
256
257     st = s->streams[0];
258
259     block_align = st->codec->block_align ? st->codec->block_align :
260         (av_get_bits_per_sample(st->codec->codec_id) * st->codec->channels) >> 3;
261     byte_rate = st->codec->bit_rate ? st->codec->bit_rate >> 3 :
262         block_align * st->codec->sample_rate;
263
264     if (block_align <= 0 || byte_rate <= 0)
265         return -1;
266
267     /* compute the position by aligning it to block_align */
268     pos = av_rescale_rnd(timestamp * byte_rate,
269                          st->time_base.num,
270                          st->time_base.den * (int64_t)block_align,
271                          (flags & AVSEEK_FLAG_BACKWARD) ? AV_ROUND_DOWN : AV_ROUND_UP);
272     pos *= block_align;
273
274     /* recompute exact position */
275     st->cur_dts = av_rescale(pos, st->time_base.den, byte_rate * (int64_t)st->time_base.num);
276     if ((ret = url_fseek(s->pb, pos + s->data_offset, SEEK_SET)) < 0)
277         return ret;
278     return 0;
279 }
280
281 static int audio_read_header(AVFormatContext *s,
282                              AVFormatParameters *ap)
283 {
284     AVStream *st = av_new_stream(s, 0);
285     if (!st)
286         return AVERROR(ENOMEM);
287     st->codec->codec_type = CODEC_TYPE_AUDIO;
288     st->codec->codec_id = s->iformat->value;
289     st->need_parsing = AVSTREAM_PARSE_FULL;
290     /* the parameters will be extracted from the compressed bitstream */
291     return 0;
292 }
293
294 /* MPEG-1/H.263 input */
295 static int video_read_header(AVFormatContext *s,
296                              AVFormatParameters *ap)
297 {
298     AVStream *st;
299
300     st = av_new_stream(s, 0);
301     if (!st)
302         return AVERROR(ENOMEM);
303
304     st->codec->codec_type = CODEC_TYPE_VIDEO;
305     st->codec->codec_id = s->iformat->value;
306     st->need_parsing = AVSTREAM_PARSE_FULL;
307
308     /* for MJPEG, specify frame rate */
309     /* for MPEG-4 specify it, too (most MPEG-4 streams do not have the fixed_vop_rate set ...)*/
310     if (ap->time_base.num) {
311         av_set_pts_info(st, 64, ap->time_base.num, ap->time_base.den);
312     } else if ( st->codec->codec_id == CODEC_ID_MJPEG ||
313                 st->codec->codec_id == CODEC_ID_MPEG4 ||
314                 st->codec->codec_id == CODEC_ID_DIRAC ||
315                 st->codec->codec_id == CODEC_ID_H264) {
316         av_set_pts_info(st, 64, 1, 25);
317     }
318
319     return 0;
320 }
321 #endif
322
323 #ifdef CONFIG_MPEGVIDEO_DEMUXER
324 #define SEQ_START_CODE          0x000001b3
325 #define GOP_START_CODE          0x000001b8
326 #define PICTURE_START_CODE      0x00000100
327 #define SLICE_START_CODE        0x00000101
328 #define PACK_START_CODE         0x000001ba
329 #define VIDEO_ID                0x000001e0
330 #define AUDIO_ID                0x000001c0
331
332 static int mpegvideo_probe(AVProbeData *p)
333 {
334     uint32_t code= -1;
335     int pic=0, seq=0, slice=0, pspack=0, pes=0;
336     int i;
337
338     for(i=0; i<p->buf_size; i++){
339         code = (code<<8) + p->buf[i];
340         if ((code & 0xffffff00) == 0x100) {
341             switch(code){
342             case     SEQ_START_CODE:   seq++; break;
343             case PICTURE_START_CODE:   pic++; break;
344             case   SLICE_START_CODE: slice++; break;
345             case    PACK_START_CODE: pspack++; break;
346             }
347             if     ((code & 0x1f0) == VIDEO_ID)   pes++;
348             else if((code & 0x1e0) == AUDIO_ID)   pes++;
349         }
350     }
351     if(seq && seq*9<=pic*10 && pic*9<=slice*10 && !pspack && !pes)
352         return AVPROBE_SCORE_MAX/2+1; // +1 for .mpg
353     return 0;
354 }
355 #endif
356
357 #ifdef CONFIG_M4V_DEMUXER
358 #define VISUAL_OBJECT_START_CODE       0x000001b5
359 #define VOP_START_CODE                 0x000001b6
360
361 static int mpeg4video_probe(AVProbeData *probe_packet)
362 {
363     uint32_t temp_buffer= -1;
364     int VO=0, VOL=0, VOP = 0, VISO = 0, res=0;
365     int i;
366
367     for(i=0; i<probe_packet->buf_size; i++){
368         temp_buffer = (temp_buffer<<8) + probe_packet->buf[i];
369         if ((temp_buffer & 0xffffff00) != 0x100)
370             continue;
371
372         if (temp_buffer == VOP_START_CODE)                         VOP++;
373         else if (temp_buffer == VISUAL_OBJECT_START_CODE)          VISO++;
374         else if (temp_buffer < 0x120)                              VO++;
375         else if (temp_buffer < 0x130)                              VOL++;
376         else if (   !(0x1AF < temp_buffer && temp_buffer < 0x1B7)
377                  && !(0x1B9 < temp_buffer && temp_buffer < 0x1C4)) res++;
378     }
379
380     if ( VOP >= VISO && VOP >= VOL && VO >= VOL && VOL > 0 && res==0)
381         return AVPROBE_SCORE_MAX/2;
382     return 0;
383 }
384 #endif
385
386 #ifdef CONFIG_H264_DEMUXER
387 static int h264_probe(AVProbeData *p)
388 {
389     uint32_t code= -1;
390     int sps=0, pps=0, idr=0, res=0, sli=0;
391     int i;
392
393     for(i=0; i<p->buf_size; i++){
394         code = (code<<8) + p->buf[i];
395         if ((code & 0xffffff00) == 0x100) {
396             int ref_idc= (code>>5)&3;
397             int type   = code & 0x1F;
398             static const int8_t ref_zero[32]={
399                 2, 0, 0, 0, 0,-1, 1,-1,
400                -1, 1, 1, 1, 1,-1, 2, 2,
401                 2, 2, 2, 0, 2, 2, 2, 2,
402                 2, 2, 2, 2, 2, 2, 2, 2
403             };
404
405             if(code & 0x80) //forbidden bit
406                 return 0;
407
408             if(ref_zero[type] == 1 && ref_idc)
409                 return 0;
410             if(ref_zero[type] ==-1 && !ref_idc)
411                 return 0;
412             if(ref_zero[type] == 2)
413                 res++;
414
415             switch(type){
416             case     1:   sli++; break;
417             case     5:   idr++; break;
418             case     7:
419                 if(p->buf[i+2]&0x0F)
420                     return 0;
421                 sps++;
422                 break;
423             case     8:   pps++; break;
424             }
425         }
426     }
427     if(sps && pps && (idr||sli>3) && res<(sps+pps+idr))
428         return AVPROBE_SCORE_MAX/2+1; // +1 for .mpg
429     return 0;
430 }
431 #endif
432
433 #ifdef CONFIG_H263_DEMUXER
434 static int h263_probe(AVProbeData *p)
435 {
436     int code;
437     const uint8_t *d;
438
439     d = p->buf;
440     code = (d[0] << 14) | (d[1] << 6) | (d[2] >> 2);
441     if (code == 0x20) {
442         return 50;
443     }
444     return 0;
445 }
446 #endif
447
448 #ifdef CONFIG_H261_DEMUXER
449 static int h261_probe(AVProbeData *p)
450 {
451     int code;
452     const uint8_t *d;
453
454     d = p->buf;
455     code = (d[0] << 12) | (d[1] << 4) | (d[2] >> 4);
456     if (code == 0x10) {
457         return 50;
458     }
459     return 0;
460 }
461 #endif
462
463 #ifdef CONFIG_DTS_DEMUXER
464 #define DCA_MARKER_14B_BE 0x1FFFE800
465 #define DCA_MARKER_14B_LE 0xFF1F00E8
466 #define DCA_MARKER_RAW_BE 0x7FFE8001
467 #define DCA_MARKER_RAW_LE 0xFE7F0180
468 static int dts_probe(AVProbeData *p)
469 {
470     const uint8_t *buf, *bufp;
471     uint32_t state = -1;
472
473     buf = p->buf;
474
475     for(; buf < (p->buf+p->buf_size)-2; buf+=2) {
476         bufp = buf;
477         state = (state << 16) | bytestream_get_be16(&bufp);
478
479         /* regular bitstream */
480         if (state == DCA_MARKER_RAW_BE || state == DCA_MARKER_RAW_LE)
481             return AVPROBE_SCORE_MAX/2+1;
482
483         /* 14 bits big-endian bitstream */
484         if (state == DCA_MARKER_14B_BE)
485             if ((bytestream_get_be16(&bufp) & 0xFFF0) == 0x07F0)
486                 return AVPROBE_SCORE_MAX/2+1;
487
488         /* 14 bits little-endian bitstream */
489         if (state == DCA_MARKER_14B_LE)
490             if ((bytestream_get_be16(&bufp) & 0xF0FF) == 0xF007)
491                 return AVPROBE_SCORE_MAX/2+1;
492     }
493
494     return 0;
495 }
496 #endif
497
498 #ifdef CONFIG_DIRAC_DEMUXER
499 static int dirac_probe(AVProbeData *p)
500 {
501     if (AV_RL32(p->buf) == MKTAG('B', 'B', 'C', 'D'))
502         return AVPROBE_SCORE_MAX;
503     else
504         return 0;
505 }
506 #endif
507
508 #if defined(CONFIG_AC3_DEMUXER) || defined(CONFIG_EAC3_DEMUXER)
509 static int ac3_eac3_probe(AVProbeData *p, enum CodecID expected_codec_id)
510 {
511     int max_frames, first_frames = 0, frames;
512     uint8_t *buf, *buf2, *end;
513     AC3HeaderInfo hdr;
514     GetBitContext gbc;
515     enum CodecID codec_id = CODEC_ID_AC3;
516
517     max_frames = 0;
518     buf = p->buf;
519     end = buf + p->buf_size;
520
521     for(; buf < end; buf++) {
522         buf2 = buf;
523
524         for(frames = 0; buf2 < end; frames++) {
525             init_get_bits(&gbc, buf2, 54);
526             if(ff_ac3_parse_header(&gbc, &hdr) < 0)
527                 break;
528             if(buf2 + hdr.frame_size > end ||
529                av_crc(av_crc_get_table(AV_CRC_16_ANSI), 0, buf2 + 2, hdr.frame_size - 2))
530                 break;
531             if (hdr.bitstream_id > 10)
532                 codec_id = CODEC_ID_EAC3;
533             buf2 += hdr.frame_size;
534         }
535         max_frames = FFMAX(max_frames, frames);
536         if(buf == p->buf)
537             first_frames = frames;
538     }
539     if(codec_id != expected_codec_id) return 0;
540     if   (first_frames>=3) return AVPROBE_SCORE_MAX * 3 / 4;
541     else if(max_frames>=3) return AVPROBE_SCORE_MAX / 2;
542     else if(max_frames>=1) return 1;
543     else                   return 0;
544 }
545 #endif
546
547 #ifdef CONFIG_AC3_DEMUXER
548 static int ac3_probe(AVProbeData *p)
549 {
550     return ac3_eac3_probe(p, CODEC_ID_AC3);
551 }
552 #endif
553
554 #ifdef CONFIG_EAC3_DEMUXER
555 static int eac3_probe(AVProbeData *p)
556 {
557     return ac3_eac3_probe(p, CODEC_ID_EAC3);
558 }
559 #endif
560
561 #ifdef CONFIG_FLAC_DEMUXER
562 static int flac_probe(AVProbeData *p)
563 {
564     if(memcmp(p->buf, "fLaC", 4)) return 0;
565     else                          return AVPROBE_SCORE_MAX / 2;
566 }
567 #endif
568
569
570 /* Note: Do not forget to add new entries to the Makefile as well. */
571
572 #ifdef CONFIG_AAC_DEMUXER
573 AVInputFormat aac_demuxer = {
574     "aac",
575     NULL_IF_CONFIG_SMALL("ADTS AAC"),
576     0,
577     NULL,
578     audio_read_header,
579     raw_read_partial_packet,
580     .flags= AVFMT_GENERIC_INDEX,
581     .extensions = "aac",
582     .value = CODEC_ID_AAC,
583 };
584 #endif
585
586 #ifdef CONFIG_AC3_DEMUXER
587 AVInputFormat ac3_demuxer = {
588     "ac3",
589     NULL_IF_CONFIG_SMALL("raw AC-3"),
590     0,
591     ac3_probe,
592     audio_read_header,
593     raw_read_partial_packet,
594     .flags= AVFMT_GENERIC_INDEX,
595     .extensions = "ac3",
596     .value = CODEC_ID_AC3,
597 };
598 #endif
599
600 #ifdef CONFIG_AC3_MUXER
601 AVOutputFormat ac3_muxer = {
602     "ac3",
603     NULL_IF_CONFIG_SMALL("raw AC-3"),
604     "audio/x-ac3",
605     "ac3",
606     0,
607     CODEC_ID_AC3,
608     CODEC_ID_NONE,
609     NULL,
610     raw_write_packet,
611     .flags= AVFMT_NOTIMESTAMPS,
612 };
613 #endif
614
615 #ifdef CONFIG_DIRAC_DEMUXER
616 AVInputFormat dirac_demuxer = {
617     "dirac",
618     NULL_IF_CONFIG_SMALL("raw Dirac"),
619     0,
620     dirac_probe,
621     video_read_header,
622     raw_read_partial_packet,
623     .flags= AVFMT_GENERIC_INDEX,
624     .value = CODEC_ID_DIRAC,
625 };
626 #endif
627
628 #ifdef CONFIG_DIRAC_MUXER
629 AVOutputFormat dirac_muxer = {
630     "dirac",
631     NULL_IF_CONFIG_SMALL("raw Dirac"),
632     NULL,
633     "drc",
634     0,
635     CODEC_ID_NONE,
636     CODEC_ID_DIRAC,
637     NULL,
638     raw_write_packet,
639     .flags= AVFMT_NOTIMESTAMPS,
640 };
641 #endif
642
643 #ifdef CONFIG_DTS_DEMUXER
644 AVInputFormat dts_demuxer = {
645     "dts",
646     NULL_IF_CONFIG_SMALL("raw DTS"),
647     0,
648     dts_probe,
649     audio_read_header,
650     raw_read_partial_packet,
651     .flags= AVFMT_GENERIC_INDEX,
652     .extensions = "dts",
653     .value = CODEC_ID_DTS,
654 };
655 #endif
656
657 #ifdef CONFIG_DTS_MUXER
658 AVOutputFormat dts_muxer = {
659     "dts",
660     NULL_IF_CONFIG_SMALL("raw DTS"),
661     "audio/x-dca",
662     "dts",
663     0,
664     CODEC_ID_DTS,
665     CODEC_ID_NONE,
666     NULL,
667     raw_write_packet,
668     .flags= AVFMT_NOTIMESTAMPS,
669 };
670 #endif
671
672 #ifdef CONFIG_EAC3_DEMUXER
673 AVInputFormat eac3_demuxer = {
674     "eac3",
675     NULL_IF_CONFIG_SMALL("raw E-AC-3"),
676     0,
677     eac3_probe,
678     audio_read_header,
679     raw_read_partial_packet,
680     .flags= AVFMT_GENERIC_INDEX,
681     .extensions = "eac3",
682     .value = CODEC_ID_EAC3,
683 };
684 #endif
685
686 #ifdef CONFIG_EAC3_MUXER
687 AVOutputFormat eac3_muxer = {
688     "eac3",
689     NULL_IF_CONFIG_SMALL("raw E-AC-3"),
690     "audio/x-eac3",
691     "eac3",
692     0,
693     CODEC_ID_EAC3,
694     CODEC_ID_NONE,
695     NULL,
696     raw_write_packet,
697     .flags= AVFMT_NOTIMESTAMPS,
698 };
699 #endif
700
701 #ifdef CONFIG_FLAC_DEMUXER
702 AVInputFormat flac_demuxer = {
703     "flac",
704     NULL_IF_CONFIG_SMALL("raw FLAC"),
705     0,
706     flac_probe,
707     audio_read_header,
708     raw_read_partial_packet,
709     .flags= AVFMT_GENERIC_INDEX,
710     .extensions = "flac",
711     .value = CODEC_ID_FLAC,
712 };
713 #endif
714
715 #ifdef CONFIG_FLAC_MUXER
716 AVOutputFormat flac_muxer = {
717     "flac",
718     NULL_IF_CONFIG_SMALL("raw FLAC"),
719     "audio/x-flac",
720     "flac",
721     0,
722     CODEC_ID_FLAC,
723     CODEC_ID_NONE,
724     flac_write_header,
725     raw_write_packet,
726     flac_write_trailer,
727     .flags= AVFMT_NOTIMESTAMPS,
728 };
729 #endif
730
731 #ifdef CONFIG_GSM_DEMUXER
732 AVInputFormat gsm_demuxer = {
733     "gsm",
734     NULL_IF_CONFIG_SMALL("GSM"),
735     0,
736     NULL,
737     audio_read_header,
738     raw_read_partial_packet,
739     .flags= AVFMT_GENERIC_INDEX,
740     .extensions = "gsm",
741     .value = CODEC_ID_GSM,
742 };
743 #endif
744
745 #ifdef CONFIG_H261_DEMUXER
746 AVInputFormat h261_demuxer = {
747     "h261",
748     NULL_IF_CONFIG_SMALL("raw H.261"),
749     0,
750     h261_probe,
751     video_read_header,
752     raw_read_partial_packet,
753     .flags= AVFMT_GENERIC_INDEX,
754     .extensions = "h261",
755     .value = CODEC_ID_H261,
756 };
757 #endif
758
759 #ifdef CONFIG_H261_MUXER
760 AVOutputFormat h261_muxer = {
761     "h261",
762     NULL_IF_CONFIG_SMALL("raw H.261"),
763     "video/x-h261",
764     "h261",
765     0,
766     CODEC_ID_NONE,
767     CODEC_ID_H261,
768     NULL,
769     raw_write_packet,
770     .flags= AVFMT_NOTIMESTAMPS,
771 };
772 #endif
773
774 #ifdef CONFIG_H263_DEMUXER
775 AVInputFormat h263_demuxer = {
776     "h263",
777     NULL_IF_CONFIG_SMALL("raw H.263"),
778     0,
779     h263_probe,
780     video_read_header,
781     raw_read_partial_packet,
782     .flags= AVFMT_GENERIC_INDEX,
783 //    .extensions = "h263", //FIXME remove after writing mpeg4_probe
784     .value = CODEC_ID_H263,
785 };
786 #endif
787
788 #ifdef CONFIG_H263_MUXER
789 AVOutputFormat h263_muxer = {
790     "h263",
791     NULL_IF_CONFIG_SMALL("raw H.263"),
792     "video/x-h263",
793     "h263",
794     0,
795     CODEC_ID_NONE,
796     CODEC_ID_H263,
797     NULL,
798     raw_write_packet,
799     .flags= AVFMT_NOTIMESTAMPS,
800 };
801 #endif
802
803 #ifdef CONFIG_H264_DEMUXER
804 AVInputFormat h264_demuxer = {
805     "h264",
806     NULL_IF_CONFIG_SMALL("raw H.264 video format"),
807     0,
808     h264_probe,
809     video_read_header,
810     raw_read_partial_packet,
811     .flags= AVFMT_GENERIC_INDEX,
812     .extensions = "h26l,h264,264", //FIXME remove after writing mpeg4_probe
813     .value = CODEC_ID_H264,
814 };
815 #endif
816
817 #ifdef CONFIG_H264_MUXER
818 AVOutputFormat h264_muxer = {
819     "h264",
820     NULL_IF_CONFIG_SMALL("raw H.264 video format"),
821     NULL,
822     "h264",
823     0,
824     CODEC_ID_NONE,
825     CODEC_ID_H264,
826     NULL,
827     raw_write_packet,
828     .flags= AVFMT_NOTIMESTAMPS,
829 };
830 #endif
831
832 #ifdef CONFIG_INGENIENT_DEMUXER
833 AVInputFormat ingenient_demuxer = {
834     "ingenient",
835     NULL_IF_CONFIG_SMALL("Ingenient MJPEG"),
836     0,
837     NULL,
838     video_read_header,
839     ingenient_read_packet,
840     .flags= AVFMT_GENERIC_INDEX,
841     .extensions = "cgi", // FIXME
842     .value = CODEC_ID_MJPEG,
843 };
844 #endif
845
846 #ifdef CONFIG_M4V_DEMUXER
847 AVInputFormat m4v_demuxer = {
848     "m4v",
849     NULL_IF_CONFIG_SMALL("raw MPEG-4 video format"),
850     0,
851     mpeg4video_probe, /** probing for MPEG-4 data */
852     video_read_header,
853     raw_read_partial_packet,
854     .flags= AVFMT_GENERIC_INDEX,
855     .extensions = "m4v", //FIXME remove after writing mpeg4_probe
856     .value = CODEC_ID_MPEG4,
857 };
858 #endif
859
860 #ifdef CONFIG_M4V_MUXER
861 AVOutputFormat m4v_muxer = {
862     "m4v",
863     NULL_IF_CONFIG_SMALL("raw MPEG-4 video format"),
864     NULL,
865     "m4v",
866     0,
867     CODEC_ID_NONE,
868     CODEC_ID_MPEG4,
869     NULL,
870     raw_write_packet,
871     .flags= AVFMT_NOTIMESTAMPS,
872 };
873 #endif
874
875 #ifdef CONFIG_MJPEG_DEMUXER
876 AVInputFormat mjpeg_demuxer = {
877     "mjpeg",
878     NULL_IF_CONFIG_SMALL("MJPEG video"),
879     0,
880     NULL,
881     video_read_header,
882     raw_read_partial_packet,
883     .flags= AVFMT_GENERIC_INDEX,
884     .extensions = "mjpg,mjpeg",
885     .value = CODEC_ID_MJPEG,
886 };
887 #endif
888
889 #ifdef CONFIG_MJPEG_MUXER
890 AVOutputFormat mjpeg_muxer = {
891     "mjpeg",
892     NULL_IF_CONFIG_SMALL("MJPEG video"),
893     "video/x-mjpeg",
894     "mjpg,mjpeg",
895     0,
896     CODEC_ID_NONE,
897     CODEC_ID_MJPEG,
898     NULL,
899     raw_write_packet,
900     .flags= AVFMT_NOTIMESTAMPS,
901 };
902 #endif
903
904 #ifdef CONFIG_MLP_DEMUXER
905 AVInputFormat mlp_demuxer = {
906     "mlp",
907     NULL_IF_CONFIG_SMALL("raw MLP"),
908     0,
909     NULL,
910     audio_read_header,
911     raw_read_partial_packet,
912     .flags= AVFMT_GENERIC_INDEX,
913     .extensions = "mlp",
914     .value = CODEC_ID_MLP,
915 };
916 #endif
917
918 #ifdef CONFIG_MPEG1VIDEO_MUXER
919 AVOutputFormat mpeg1video_muxer = {
920     "mpeg1video",
921     NULL_IF_CONFIG_SMALL("MPEG video"),
922     "video/x-mpeg",
923     "mpg,mpeg,m1v",
924     0,
925     CODEC_ID_NONE,
926     CODEC_ID_MPEG1VIDEO,
927     NULL,
928     raw_write_packet,
929     .flags= AVFMT_NOTIMESTAMPS,
930 };
931 #endif
932
933 #ifdef CONFIG_MPEG2VIDEO_MUXER
934 AVOutputFormat mpeg2video_muxer = {
935     "mpeg2video",
936     NULL_IF_CONFIG_SMALL("MPEG-2 video"),
937     NULL,
938     "m2v",
939     0,
940     CODEC_ID_NONE,
941     CODEC_ID_MPEG2VIDEO,
942     NULL,
943     raw_write_packet,
944     .flags= AVFMT_NOTIMESTAMPS,
945 };
946 #endif
947
948 #ifdef CONFIG_MPEGVIDEO_DEMUXER
949 AVInputFormat mpegvideo_demuxer = {
950     "mpegvideo",
951     NULL_IF_CONFIG_SMALL("MPEG video"),
952     0,
953     mpegvideo_probe,
954     video_read_header,
955     raw_read_partial_packet,
956     .flags= AVFMT_GENERIC_INDEX,
957     .value = CODEC_ID_MPEG1VIDEO,
958 };
959 #endif
960
961 #ifdef CONFIG_NULL_MUXER
962 AVOutputFormat null_muxer = {
963     "null",
964     NULL_IF_CONFIG_SMALL("null video format"),
965     NULL,
966     NULL,
967     0,
968 #ifdef WORDS_BIGENDIAN
969     CODEC_ID_PCM_S16BE,
970 #else
971     CODEC_ID_PCM_S16LE,
972 #endif
973     CODEC_ID_RAWVIDEO,
974     NULL,
975     null_write_packet,
976     .flags = AVFMT_NOFILE | AVFMT_RAWPICTURE | AVFMT_NOTIMESTAMPS,
977 };
978 #endif
979
980 #ifdef CONFIG_RAWVIDEO_DEMUXER
981 AVInputFormat rawvideo_demuxer = {
982     "rawvideo",
983     NULL_IF_CONFIG_SMALL("raw video format"),
984     0,
985     NULL,
986     raw_read_header,
987     rawvideo_read_packet,
988     .flags= AVFMT_GENERIC_INDEX,
989     .extensions = "yuv,cif,qcif,rgb",
990     .value = CODEC_ID_RAWVIDEO,
991 };
992 #endif
993
994 #ifdef CONFIG_RAWVIDEO_MUXER
995 AVOutputFormat rawvideo_muxer = {
996     "rawvideo",
997     NULL_IF_CONFIG_SMALL("raw video format"),
998     NULL,
999     "yuv,rgb",
1000     0,
1001     CODEC_ID_NONE,
1002     CODEC_ID_RAWVIDEO,
1003     NULL,
1004     raw_write_packet,
1005     .flags= AVFMT_NOTIMESTAMPS,
1006 };
1007 #endif
1008
1009 #ifdef CONFIG_ROQ_MUXER
1010 AVOutputFormat roq_muxer =
1011 {
1012     "RoQ",
1013     NULL_IF_CONFIG_SMALL("id RoQ format"),
1014     NULL,
1015     "roq",
1016     0,
1017     CODEC_ID_ROQ_DPCM,
1018     CODEC_ID_ROQ,
1019     roq_write_header,
1020     raw_write_packet,
1021 };
1022 #endif
1023
1024 #ifdef CONFIG_SHORTEN_DEMUXER
1025 AVInputFormat shorten_demuxer = {
1026     "shn",
1027     NULL_IF_CONFIG_SMALL("raw Shorten"),
1028     0,
1029     NULL,
1030     audio_read_header,
1031     raw_read_partial_packet,
1032     .flags= AVFMT_GENERIC_INDEX,
1033     .extensions = "shn",
1034     .value = CODEC_ID_SHORTEN,
1035 };
1036 #endif
1037
1038 #ifdef CONFIG_VC1_DEMUXER
1039 AVInputFormat vc1_demuxer = {
1040     "vc1",
1041     NULL_IF_CONFIG_SMALL("raw VC-1"),
1042     0,
1043     NULL /* vc1_probe */,
1044     video_read_header,
1045     raw_read_partial_packet,
1046     .extensions = "vc1",
1047     .value = CODEC_ID_VC1,
1048 };
1049 #endif
1050
1051 /* PCM formats */
1052
1053 #define PCMINPUTDEF(name, long_name, ext, codec) \
1054 AVInputFormat pcm_ ## name ## _demuxer = {\
1055     #name,\
1056     NULL_IF_CONFIG_SMALL(long_name),\
1057     0,\
1058     NULL,\
1059     raw_read_header,\
1060     raw_read_packet,\
1061     NULL,\
1062     pcm_read_seek,\
1063     .flags= AVFMT_GENERIC_INDEX,\
1064     .extensions = ext,\
1065     .value = codec,\
1066 };
1067
1068 #define PCMOUTPUTDEF(name, long_name, ext, codec) \
1069 AVOutputFormat pcm_ ## name ## _muxer = {\
1070     #name,\
1071     NULL_IF_CONFIG_SMALL(long_name),\
1072     NULL,\
1073     ext,\
1074     0,\
1075     codec,\
1076     CODEC_ID_NONE,\
1077     NULL,\
1078     raw_write_packet,\
1079     .flags= AVFMT_NOTIMESTAMPS,\
1080 };
1081
1082
1083 #if !defined(CONFIG_MUXERS) && defined(CONFIG_DEMUXERS)
1084 #define PCMDEF(name, long_name, ext, codec) \
1085         PCMINPUTDEF(name, long_name, ext, codec)
1086 #elif defined(CONFIG_MUXERS) && !defined(CONFIG_DEMUXERS)
1087 #define PCMDEF(name, long_name, ext, codec) \
1088         PCMOUTPUTDEF(name, long_name, ext, codec)
1089 #elif defined(CONFIG_MUXERS) && defined(CONFIG_DEMUXERS)
1090 #define PCMDEF(name, long_name, ext, codec) \
1091         PCMINPUTDEF(name, long_name, ext, codec)\
1092         PCMOUTPUTDEF(name, long_name, ext, codec)
1093 #else
1094 #define PCMDEF(name, long_name, ext, codec)
1095 #endif
1096
1097 #ifdef WORDS_BIGENDIAN
1098 #define BE_DEF(s) s
1099 #define LE_DEF(s) NULL
1100 #else
1101 #define BE_DEF(s) NULL
1102 #define LE_DEF(s) s
1103 #endif
1104
1105 PCMDEF(f64be, "PCM 64 bit floating-point big-endian format",
1106        NULL, CODEC_ID_PCM_F64BE)
1107
1108 PCMDEF(f64le, "PCM 64 bit floating-point little-endian format",
1109        NULL, CODEC_ID_PCM_F64LE)
1110
1111 PCMDEF(f32be, "PCM 32 bit floating-point big-endian format",
1112        NULL, CODEC_ID_PCM_F32BE)
1113
1114 PCMDEF(f32le, "PCM 32 bit floating-point little-endian format",
1115        NULL, CODEC_ID_PCM_F32LE)
1116
1117 PCMDEF(s32be, "PCM signed 32 bit big-endian format",
1118        NULL, CODEC_ID_PCM_S32BE)
1119
1120 PCMDEF(s32le, "PCM signed 32 bit little-endian format",
1121        NULL, CODEC_ID_PCM_S32LE)
1122
1123 PCMDEF(s24be, "PCM signed 24 bit big-endian format",
1124        NULL, CODEC_ID_PCM_S24BE)
1125
1126 PCMDEF(s24le, "PCM signed 24 bit little-endian format",
1127        NULL, CODEC_ID_PCM_S24LE)
1128
1129 PCMDEF(s16be, "PCM signed 16 bit big-endian format",
1130        BE_DEF("sw"), CODEC_ID_PCM_S16BE)
1131
1132 PCMDEF(s16le, "PCM signed 16 bit little-endian format",
1133        LE_DEF("sw"), CODEC_ID_PCM_S16LE)
1134
1135 PCMDEF(s8, "PCM signed 8 bit format",
1136        "sb", CODEC_ID_PCM_S8)
1137
1138 PCMDEF(u32be, "PCM unsigned 32 bit big-endian format",
1139        NULL, CODEC_ID_PCM_U32BE)
1140
1141 PCMDEF(u32le, "PCM unsigned 32 bit little-endian format",
1142        NULL, CODEC_ID_PCM_U32LE)
1143
1144 PCMDEF(u24be, "PCM unsigned 24 bit big-endian format",
1145        NULL, CODEC_ID_PCM_U24BE)
1146
1147 PCMDEF(u24le, "PCM unsigned 24 bit little-endian format",
1148        NULL, CODEC_ID_PCM_U24LE)
1149
1150 PCMDEF(u16be, "PCM unsigned 16 bit big-endian format",
1151        BE_DEF("uw"), CODEC_ID_PCM_U16BE)
1152
1153 PCMDEF(u16le, "PCM unsigned 16 bit little-endian format",
1154        LE_DEF("uw"), CODEC_ID_PCM_U16LE)
1155
1156 PCMDEF(u8, "PCM unsigned 8 bit format",
1157        "ub", CODEC_ID_PCM_U8)
1158
1159 PCMDEF(alaw, "PCM A-law format",
1160        "al", CODEC_ID_PCM_ALAW)
1161
1162 PCMDEF(mulaw, "PCM mu-law format",
1163        "ul", CODEC_ID_PCM_MULAW)