libavformat/raw.c
115329f1
 /*
7fbde343
  * RAW muxer and demuxer
406792e7
  * Copyright (c) 2001 Fabrice Bellard
84c63c01
  * Copyright (c) 2005 Alex Beregszaszi
de6d9b64
  *
b78e7197
  * This file is part of FFmpeg.
  *
  * FFmpeg is free software; you can redistribute it and/or
19720f15
  * modify it under the terms of the GNU Lesser General Public
  * License as published by the Free Software Foundation; either
b78e7197
  * version 2.1 of the License, or (at your option) any later version.
de6d9b64
  *
b78e7197
  * FFmpeg is distributed in the hope that it will be useful,
de6d9b64
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
19720f15
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
de6d9b64
  *
19720f15
  * You should have received a copy of the GNU Lesser General Public
b78e7197
  * License along with FFmpeg; if not, write to the Free Software
5509bffa
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
de6d9b64
  */
245976da
 
 #include "libavutil/crc.h"
 #include "libavcodec/ac3_parser.h"
 #include "libavcodec/bitstream.h"
 #include "libavcodec/bytestream.h"
de6d9b64
 #include "avformat.h"
7241a6bb
 #include "raw.h"
ac3ef4a4
 #include "id3v2.h"
de6d9b64
 
 /* simple formats */
ce1d2a95
 
b250f9c6
 #if CONFIG_ROQ_MUXER
13dec857
 static int roq_write_header(struct AVFormatContext *s)
 {
     static const uint8_t header[] = {
         0x84, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0x1E, 0x00
     };
 
899681cd
     put_buffer(s->pb, header, 8);
     put_flush_packet(s->pb);
13dec857
 
     return 0;
 }
96445426
 #endif
13dec857
 
b250f9c6
 #if CONFIG_NULL_MUXER
76d32428
 static int null_write_packet(struct AVFormatContext *s, AVPacket *pkt)
 {
     return 0;
 }
96445426
 #endif
76d32428
 
b250f9c6
 #if CONFIG_MUXERS
e928649b
 static int raw_write_packet(struct AVFormatContext *s, AVPacket *pkt)
de6d9b64
 {
899681cd
     put_buffer(s->pb, pkt->data, pkt->size);
     put_flush_packet(s->pb);
de6d9b64
     return 0;
 }
082f7acf
 #endif
de6d9b64
 
b250f9c6
 #if CONFIG_DEMUXERS
de6d9b64
 /* raw input */
0c1a9eda
 static int raw_read_header(AVFormatContext *s, AVFormatParameters *ap)
de6d9b64
 {
     AVStream *st;
c9a65ca8
     int id;
de6d9b64
 
c9a65ca8
     st = av_new_stream(s, 0);
de6d9b64
     if (!st)
769e10f0
         return AVERROR(ENOMEM);
c04c3282
 
c9a65ca8
         id = s->iformat->value;
         if (id == CODEC_ID_RAWVIDEO) {
01f4895c
             st->codec->codec_type = CODEC_TYPE_VIDEO;
de6d9b64
         } else {
01f4895c
             st->codec->codec_type = CODEC_TYPE_AUDIO;
de6d9b64
         }
01f4895c
         st->codec->codec_id = id;
c9a65ca8
 
01f4895c
         switch(st->codec->codec_type) {
de6d9b64
         case CODEC_TYPE_AUDIO:
01f4895c
             st->codec->sample_rate = ap->sample_rate;
bf9067cf
             if(ap->channels) st->codec->channels = ap->channels;
             else             st->codec->channels = 1;
01f4895c
             av_set_pts_info(st, 64, 1, st->codec->sample_rate);
de6d9b64
             break;
         case CODEC_TYPE_VIDEO:
9de0be61
             if(ap->time_base.num)
                 av_set_pts_info(st, 64, ap->time_base.num, ap->time_base.den);
             else
                 av_set_pts_info(st, 64, 1, 25);
01f4895c
             st->codec->width = ap->width;
             st->codec->height = ap->height;
             st->codec->pix_fmt = ap->pix_fmt;
             if(st->codec->pix_fmt == PIX_FMT_NONE)
                 st->codec->pix_fmt= PIX_FMT_YUV420P;
de6d9b64
             break;
         default:
27e084bd
             return -1;
de6d9b64
         }
     return 0;
 }
 
2e93e3aa
 #define RAW_PACKET_SIZE 1024
de6d9b64
 
5c91a675
 static int raw_read_packet(AVFormatContext *s, AVPacket *pkt)
de6d9b64
 {
f5b41031
     int ret, size, bps;
2a6874fd
     //    AVStream *st = s->streams[0];
115329f1
 
231dd3f3
     size= RAW_PACKET_SIZE;
de6d9b64
 
899681cd
     ret= av_get_packet(s->pb, pkt, size);
de6d9b64
 
     pkt->stream_index = 0;
2e93e3aa
     if (ret <= 0) {
6f3e0b21
         return AVERROR(EIO);
2e93e3aa
     }
     /* note: we need to modify the packet size here to handle the last
        packet */
     pkt->size = ret;
f5b41031
 
     bps= av_get_bits_per_sample(s->streams[0]->codec->codec_id);
     assert(bps); // if false there IS a bug elsewhere (NOT in this function)
     pkt->dts=
     pkt->pts= pkt->pos*8 / (bps * s->streams[0]->codec->channels);
 
de6d9b64
     return ret;
 }
 
81f052cb
 int ff_raw_read_partial_packet(AVFormatContext *s, AVPacket *pkt)
e15dec10
 {
     int ret, size;
 
     size = RAW_PACKET_SIZE;
 
     if (av_new_packet(pkt, size) < 0)
6f3e0b21
         return AVERROR(EIO);
115329f1
 
899681cd
     pkt->pos= url_ftell(s->pb);
e15dec10
     pkt->stream_index = 0;
899681cd
     ret = get_partial_buffer(s->pb, pkt->data, size);
e15dec10
     if (ret <= 0) {
         av_free_packet(pkt);
6f3e0b21
         return AVERROR(EIO);
e15dec10
     }
     pkt->size = ret;
     return ret;
 }
4c00864f
 #endif
e15dec10
 
b250f9c6
 #if CONFIG_RAWVIDEO_DEMUXER
76d32428
 static int rawvideo_read_packet(AVFormatContext *s, AVPacket *pkt)
 {
     int packet_size, ret, width, height;
     AVStream *st = s->streams[0];
 
     width = st->codec->width;
     height = st->codec->height;
 
     packet_size = avpicture_get_size(st->codec->pix_fmt, width, height);
     if (packet_size < 0)
         return -1;
 
     ret= av_get_packet(s->pb, pkt, packet_size);
     pkt->pts=
     pkt->dts= pkt->pos / packet_size;
 
     pkt->stream_index = 0;
     if (ret != packet_size) {
         return AVERROR(EIO);
     } else {
         return 0;
     }
 }
4c00864f
 #endif
76d32428
 
b250f9c6
 #if CONFIG_INGENIENT_DEMUXER
84c63c01
 // http://www.artificis.hu/files/texts/ingenient.txt
 static int ingenient_read_packet(AVFormatContext *s, AVPacket *pkt)
 {
     int ret, size, w, h, unk1, unk2;
115329f1
 
899681cd
     if (get_le32(s->pb) != MKTAG('M', 'J', 'P', 'G'))
6f3e0b21
         return AVERROR(EIO); // FIXME
84c63c01
 
899681cd
     size = get_le32(s->pb);
115329f1
 
899681cd
     w = get_le16(s->pb);
     h = get_le16(s->pb);
115329f1
 
899681cd
     url_fskip(s->pb, 8); // zero + size (padded?)
     url_fskip(s->pb, 2);
     unk1 = get_le16(s->pb);
     unk2 = get_le16(s->pb);
fb9f1117
     url_fskip(s->pb, 22); // ASCII timestamp
115329f1
 
ff9843ca
     av_log(s, AV_LOG_DEBUG, "Ingenient packet: size=%d, width=%d, height=%d, unk1=%d unk2=%d\n",
bb270c08
         size, w, h, unk1, unk2);
84c63c01
 
     if (av_new_packet(pkt, size) < 0)
6f3e0b21
         return AVERROR(EIO);
84c63c01
 
899681cd
     pkt->pos = url_ftell(s->pb);
84c63c01
     pkt->stream_index = 0;
899681cd
     ret = get_buffer(s->pb, pkt->data, size);
84c63c01
     if (ret <= 0) {
         av_free_packet(pkt);
6f3e0b21
         return AVERROR(EIO);
84c63c01
     }
     pkt->size = ret;
     return ret;
 }
4c00864f
 #endif
84c63c01
 
b250f9c6
 #if CONFIG_DEMUXERS
115329f1
 int pcm_read_seek(AVFormatContext *s,
7b3c1382
                   int stream_index, int64_t timestamp, int flags)
4986a429
 {
     AVStream *st;
d701934b
     int block_align, byte_rate, ret;
4986a429
     int64_t pos;
 
     st = s->streams[0];
708e3e7d
 
     block_align = st->codec->block_align ? st->codec->block_align :
         (av_get_bits_per_sample(st->codec->codec_id) * st->codec->channels) >> 3;
     byte_rate = st->codec->bit_rate ? st->codec->bit_rate >> 3 :
         block_align * st->codec->sample_rate;
115329f1
 
4986a429
     if (block_align <= 0 || byte_rate <= 0)
         return -1;
 
     /* compute the position by aligning it to block_align */
115329f1
     pos = av_rescale_rnd(timestamp * byte_rate,
                          st->time_base.num,
7b3c1382
                          st->time_base.den * (int64_t)block_align,
                          (flags & AVSEEK_FLAG_BACKWARD) ? AV_ROUND_DOWN : AV_ROUND_UP);
     pos *= block_align;
4986a429
 
     /* recompute exact position */
77405fc8
     st->cur_dts = av_rescale(pos, st->time_base.den, byte_rate * (int64_t)st->time_base.num);
d701934b
     if ((ret = url_fseek(s->pb, pos + s->data_offset, SEEK_SET)) < 0)
         return ret;
4986a429
     return 0;
 }
 
a0af2fa4
 static int audio_read_header(AVFormatContext *s,
                              AVFormatParameters *ap)
fda885c7
 {
a0af2fa4
     AVStream *st = av_new_stream(s, 0);
fda885c7
     if (!st)
769e10f0
         return AVERROR(ENOMEM);
fda885c7
     st->codec->codec_type = CODEC_TYPE_AUDIO;
a0af2fa4
     st->codec->codec_id = s->iformat->value;
57004ff1
     st->need_parsing = AVSTREAM_PARSE_FULL;
fda885c7
     /* the parameters will be extracted from the compressed bitstream */
6cde949a
 
fda885c7
     return 0;
 }
 
fb9f1117
 /* MPEG-1/H.263 input */
de6d9b64
 static int video_read_header(AVFormatContext *s,
                              AVFormatParameters *ap)
 {
     AVStream *st;
 
c9a65ca8
     st = av_new_stream(s, 0);
de6d9b64
     if (!st)
769e10f0
         return AVERROR(ENOMEM);
de6d9b64
 
01f4895c
     st->codec->codec_type = CODEC_TYPE_VIDEO;
     st->codec->codec_id = s->iformat->value;
57004ff1
     st->need_parsing = AVSTREAM_PARSE_FULL;
4986a429
 
fb9f1117
     /* for MJPEG, specify frame rate */
     /* for MPEG-4 specify it, too (most MPEG-4 streams do not have the fixed_vop_rate set ...)*/
c04c3282
     if (ap->time_base.num) {
4022fe01
         st->codec->time_base= ap->time_base;
115329f1
     } else if ( st->codec->codec_id == CODEC_ID_MJPEG ||
01f4895c
                 st->codec->codec_id == CODEC_ID_MPEG4 ||
17ac9f1c
                 st->codec->codec_id == CODEC_ID_DIRAC ||
01f4895c
                 st->codec->codec_id == CODEC_ID_H264) {
4022fe01
         st->codec->time_base= (AVRational){1,25};
27e084bd
     }
4022fe01
     av_set_pts_info(st, 64, 1, 1200000);
80ce3254
 
de6d9b64
     return 0;
 }
4c00864f
 #endif
de6d9b64
 
b250f9c6
 #if CONFIG_MPEGVIDEO_DEMUXER
bb270c08
 #define SEQ_START_CODE          0x000001b3
 #define GOP_START_CODE          0x000001b8
 #define PICTURE_START_CODE      0x00000100
93d3e278
 #define SLICE_START_CODE        0x00000101
 #define PACK_START_CODE         0x000001ba
e01dc227
 #define VIDEO_ID                0x000001e0
 #define AUDIO_ID                0x000001c0
c9a65ca8
 
 static int mpegvideo_probe(AVProbeData *p)
 {
93d3e278
     uint32_t code= -1;
e01dc227
     int pic=0, seq=0, slice=0, pspack=0, pes=0;
93d3e278
     int i;
 
     for(i=0; i<p->buf_size; i++){
         code = (code<<8) + p->buf[i];
         if ((code & 0xffffff00) == 0x100) {
             switch(code){
             case     SEQ_START_CODE:   seq++; break;
             case PICTURE_START_CODE:   pic++; break;
             case   SLICE_START_CODE: slice++; break;
             case    PACK_START_CODE: pspack++; break;
             }
e9f6c8ea
             if     ((code & 0x1f0) == VIDEO_ID)   pes++;
             else if((code & 0x1e0) == AUDIO_ID)   pes++;
93d3e278
         }
c9a65ca8
     }
e01dc227
     if(seq && seq*9<=pic*10 && pic*9<=slice*10 && !pspack && !pes)
93d3e278
         return AVPROBE_SCORE_MAX/2+1; // +1 for .mpg
c9a65ca8
     return 0;
 }
9f2fc126
 
 #define CAVS_SEQ_START_CODE       0x000001b0
 #define CAVS_PIC_I_START_CODE     0x000001b3
 #define CAVS_UNDEF_START_CODE     0x000001b4
 #define CAVS_PIC_PB_START_CODE    0x000001b6
 #define CAVS_VIDEO_EDIT_CODE      0x000001b7
 #define CAVS_PROFILE_JIZHUN       0x20
 
 static int cavsvideo_probe(AVProbeData *p)
 {
     uint32_t code= -1;
     int pic=0, seq=0, slice_pos = 0;
     int i;
 
     for(i=0; i<p->buf_size; i++){
         code = (code<<8) + p->buf[i];
         if ((code & 0xffffff00) == 0x100) {
             if(code < CAVS_SEQ_START_CODE) {
                 /* slices have to be consecutive */
                 if(code < slice_pos)
                     return 0;
                 slice_pos = code;
             } else {
                 slice_pos = 0;
             }
             if (code == CAVS_SEQ_START_CODE) {
                 seq++;
                 /* check for the only currently supported profile */
                 if(p->buf[i+1] != CAVS_PROFILE_JIZHUN)
                     return 0;
             } else if ((code == CAVS_PIC_I_START_CODE) ||
                        (code == CAVS_PIC_PB_START_CODE)) {
                 pic++;
             } else if ((code == CAVS_UNDEF_START_CODE) ||
                        (code >  CAVS_VIDEO_EDIT_CODE)) {
                 return 0;
             }
         }
     }
     if(seq && seq*9<=pic*10)
         return AVPROBE_SCORE_MAX/2;
     return 0;
 }
4c00864f
 #endif
c9a65ca8
 
b250f9c6
 #if CONFIG_M4V_DEMUXER
8f57cc5a
 #define VISUAL_OBJECT_START_CODE       0x000001b5
 #define VOP_START_CODE                 0x000001b6
 
 static int mpeg4video_probe(AVProbeData *probe_packet)
 {
     uint32_t temp_buffer= -1;
5fd5d0ef
     int VO=0, VOL=0, VOP = 0, VISO = 0, res=0;
8f57cc5a
     int i;
 
     for(i=0; i<probe_packet->buf_size; i++){
         temp_buffer = (temp_buffer<<8) + probe_packet->buf[i];
c21f308e
         if ((temp_buffer & 0xffffff00) != 0x100)
             continue;
 
         if (temp_buffer == VOP_START_CODE)                         VOP++;
         else if (temp_buffer == VISUAL_OBJECT_START_CODE)          VISO++;
         else if (temp_buffer < 0x120)                              VO++;
         else if (temp_buffer < 0x130)                              VOL++;
         else if (   !(0x1AF < temp_buffer && temp_buffer < 0x1B7)
                  && !(0x1B9 < temp_buffer && temp_buffer < 0x1C4)) res++;
8f57cc5a
     }
 
5fd5d0ef
     if ( VOP >= VISO && VOP >= VOL && VO >= VOL && VOL > 0 && res==0)
8f57cc5a
         return AVPROBE_SCORE_MAX/2;
     return 0;
 }
4c00864f
 #endif
8f57cc5a
 
b250f9c6
 #if CONFIG_H264_DEMUXER
010acd8e
 static int h264_probe(AVProbeData *p)
 {
     uint32_t code= -1;
01037451
     int sps=0, pps=0, idr=0, res=0, sli=0;
010acd8e
     int i;
 
     for(i=0; i<p->buf_size; i++){
         code = (code<<8) + p->buf[i];
         if ((code & 0xffffff00) == 0x100) {
             int ref_idc= (code>>5)&3;
             int type   = code & 0x1F;
             static const int8_t ref_zero[32]={
                 2, 0, 0, 0, 0,-1, 1,-1,
                -1, 1, 1, 1, 1,-1, 2, 2,
                 2, 2, 2, 0, 2, 2, 2, 2,
                 2, 2, 2, 2, 2, 2, 2, 2
             };
 
             if(code & 0x80) //forbidden bit
                 return 0;
 
             if(ref_zero[type] == 1 && ref_idc)
                 return 0;
             if(ref_zero[type] ==-1 && !ref_idc)
                 return 0;
             if(ref_zero[type] == 2)
                 res++;
 
             switch(type){
01037451
             case     1:   sli++; break;
010acd8e
             case     5:   idr++; break;
             case     7:
                 if(p->buf[i+2]&0x0F)
                     return 0;
                 sps++;
                 break;
             case     8:   pps++; break;
             }
         }
     }
01037451
     if(sps && pps && (idr||sli>3) && res<(sps+pps+idr))
010acd8e
         return AVPROBE_SCORE_MAX/2+1; // +1 for .mpg
     return 0;
 }
4c00864f
 #endif
010acd8e
 
b250f9c6
 #if CONFIG_H263_DEMUXER
d07f9043
 static int h263_probe(AVProbeData *p)
 {
     int code;
     const uint8_t *d;
 
     d = p->buf;
     code = (d[0] << 14) | (d[1] << 6) | (d[2] >> 2);
     if (code == 0x20) {
         return 50;
     }
     return 0;
 }
4c00864f
 #endif
d07f9043
 
b250f9c6
 #if CONFIG_H261_DEMUXER
c6148de2
 static int h261_probe(AVProbeData *p)
 {
     int code;
     const uint8_t *d;
 
     d = p->buf;
     code = (d[0] << 12) | (d[1] << 4) | (d[2] >> 4);
     if (code == 0x10) {
         return 50;
     }
     return 0;
 }
4c00864f
 #endif
c6148de2
 
b250f9c6
 #if CONFIG_DTS_DEMUXER
fde8052e
 #define DCA_MARKER_14B_BE 0x1FFFE800
 #define DCA_MARKER_14B_LE 0xFF1F00E8
 #define DCA_MARKER_RAW_BE 0x7FFE8001
 #define DCA_MARKER_RAW_LE 0xFE7F0180
 static int dts_probe(AVProbeData *p)
 {
     const uint8_t *buf, *bufp;
     uint32_t state = -1;
 
     buf = p->buf;
 
     for(; buf < (p->buf+p->buf_size)-2; buf+=2) {
         bufp = buf;
         state = (state << 16) | bytestream_get_be16(&bufp);
 
fb9f1117
         /* regular bitstream */
fde8052e
         if (state == DCA_MARKER_RAW_BE || state == DCA_MARKER_RAW_LE)
             return AVPROBE_SCORE_MAX/2+1;
 
fb9f1117
         /* 14 bits big-endian bitstream */
fde8052e
         if (state == DCA_MARKER_14B_BE)
             if ((bytestream_get_be16(&bufp) & 0xFFF0) == 0x07F0)
                 return AVPROBE_SCORE_MAX/2+1;
 
fb9f1117
         /* 14 bits little-endian bitstream */
fde8052e
         if (state == DCA_MARKER_14B_LE)
             if ((bytestream_get_be16(&bufp) & 0xF0FF) == 0xF007)
                 return AVPROBE_SCORE_MAX/2+1;
     }
 
     return 0;
 }
4c00864f
 #endif
fde8052e
 
b250f9c6
 #if CONFIG_DIRAC_DEMUXER
17ac9f1c
 static int dirac_probe(AVProbeData *p)
 {
     if (AV_RL32(p->buf) == MKTAG('B', 'B', 'C', 'D'))
         return AVPROBE_SCORE_MAX;
     else
         return 0;
 }
4c00864f
 #endif
17ac9f1c
 
b250f9c6
 #if CONFIG_DNXHD_DEMUXER
bd09e8a7
 static int dnxhd_probe(AVProbeData *p)
 {
     static const uint8_t header[] = {0x00,0x00,0x02,0x80,0x01};
     if (!memcmp(p->buf, header, 5))
         return AVPROBE_SCORE_MAX;
     else
         return 0;
 }
 #endif
 
b250f9c6
 #if CONFIG_AC3_DEMUXER || CONFIG_EAC3_DEMUXER
75198e7a
 static int ac3_eac3_probe(AVProbeData *p, enum CodecID expected_codec_id)
7156aeb9
 {
8c222bb4
     int max_frames, first_frames = 0, frames;
f8b9830b
     uint8_t *buf, *buf2, *end;
     AC3HeaderInfo hdr;
55736cfb
     GetBitContext gbc;
75198e7a
     enum CodecID codec_id = CODEC_ID_AC3;
7156aeb9
 
f8b9830b
     max_frames = 0;
     buf = p->buf;
ecc8fc11
     end = buf + p->buf_size;
f8b9830b
 
     for(; buf < end; buf++) {
         buf2 = buf;
7156aeb9
 
f8b9830b
         for(frames = 0; buf2 < end; frames++) {
55736cfb
             init_get_bits(&gbc, buf2, 54);
             if(ff_ac3_parse_header(&gbc, &hdr) < 0)
f8b9830b
                 break;
c675ef70
             if(buf2 + hdr.frame_size > end ||
                av_crc(av_crc_get_table(AV_CRC_16_ANSI), 0, buf2 + 2, hdr.frame_size - 2))
                 break;
2988c93d
             if (hdr.bitstream_id > 10)
75198e7a
                 codec_id = CODEC_ID_EAC3;
f8b9830b
             buf2 += hdr.frame_size;
         }
         max_frames = FFMAX(max_frames, frames);
         if(buf == p->buf)
             first_frames = frames;
     }
75198e7a
     if(codec_id != expected_codec_id) return 0;
f8b9830b
     if   (first_frames>=3) return AVPROBE_SCORE_MAX * 3 / 4;
2477ce23
     else if(max_frames>=3) return AVPROBE_SCORE_MAX / 2;
f8b9830b
     else if(max_frames>=1) return 1;
     else                   return 0;
7156aeb9
 }
4c00864f
 #endif
7156aeb9
 
b250f9c6
 #if CONFIG_AC3_DEMUXER
2988c93d
 static int ac3_probe(AVProbeData *p)
 {
75198e7a
     return ac3_eac3_probe(p, CODEC_ID_AC3);
2988c93d
 }
 #endif
 
b250f9c6
 #if CONFIG_EAC3_DEMUXER
2988c93d
 static int eac3_probe(AVProbeData *p)
 {
75198e7a
     return ac3_eac3_probe(p, CODEC_ID_EAC3);
2988c93d
 }
 #endif
 
b250f9c6
 #if CONFIG_AAC_DEMUXER
2ba0cdd5
 static int adts_aac_probe(AVProbeData *p)
 {
     int max_frames = 0, first_frames = 0;
     int fsize, frames;
ac3ef4a4
     uint8_t *buf0 = p->buf;
2ba0cdd5
     uint8_t *buf2;
ac3ef4a4
     uint8_t *buf;
     uint8_t *end = buf0 + p->buf_size - 7;
 
     if (ff_id3v2_match(buf0)) {
         buf0 += ff_id3v2_tag_len(buf0);
     }
     buf = buf0;
2ba0cdd5
 
     for(; buf < end; buf= buf2+1) {
         buf2 = buf;
 
         for(frames = 0; buf2 < end; frames++) {
             uint32_t header = AV_RB16(buf2);
             if((header&0xFFF6) != 0xFFF0)
                 break;
             fsize = (AV_RB32(buf2+3)>>13) & 0x8FFF;
             if(fsize < 7)
                 break;
             buf2 += fsize;
         }
         max_frames = FFMAX(max_frames, frames);
ac3ef4a4
         if(buf == buf0)
2ba0cdd5
             first_frames= frames;
     }
     if   (first_frames>=3) return AVPROBE_SCORE_MAX/2+1;
     else if(max_frames>500)return AVPROBE_SCORE_MAX/2;
     else if(max_frames>=3) return AVPROBE_SCORE_MAX/4;
     else if(max_frames>=1) return 1;
     else                   return 0;
 }
 #endif
900eb63d
 
 /* Note: Do not forget to add new entries to the Makefile as well. */
 
b250f9c6
 #if CONFIG_AAC_DEMUXER
76d32428
 AVInputFormat aac_demuxer = {
     "aac",
b4ee1d39
     NULL_IF_CONFIG_SMALL("raw ADTS AAC"),
16e861e3
     0,
2ba0cdd5
     adts_aac_probe,
16e861e3
     audio_read_header,
81f052cb
     ff_raw_read_partial_packet,
16e861e3
     .flags= AVFMT_GENERIC_INDEX,
76d32428
     .extensions = "aac",
     .value = CODEC_ID_AAC,
ce1d2a95
 };
7402ee23
 #endif
ce1d2a95
 
b250f9c6
 #if CONFIG_AC3_DEMUXER
d2a067d1
 AVInputFormat ac3_demuxer = {
c9a65ca8
     "ac3",
bde15e74
     NULL_IF_CONFIG_SMALL("raw AC-3"),
c9a65ca8
     0,
7156aeb9
     ac3_probe,
a0af2fa4
     audio_read_header,
81f052cb
     ff_raw_read_partial_packet,
e9b78eeb
     .flags= AVFMT_GENERIC_INDEX,
bb76a117
     .extensions = "ac3",
a0af2fa4
     .value = CODEC_ID_AC3,
de6d9b64
 };
cefd4907
 #endif
de6d9b64
 
b250f9c6
 #if CONFIG_AC3_MUXER
d2a067d1
 AVOutputFormat ac3_muxer = {
de6d9b64
     "ac3",
bde15e74
     NULL_IF_CONFIG_SMALL("raw AC-3"),
115329f1
     "audio/x-ac3",
de6d9b64
     "ac3",
c9a65ca8
     0,
de6d9b64
     CODEC_ID_AC3,
d9133126
     CODEC_ID_NONE,
7a97dd84
     NULL,
de6d9b64
     raw_write_packet,
494bbf58
     .flags= AVFMT_NOTIMESTAMPS,
de6d9b64
 };
082f7acf
 #endif
de6d9b64
 
b250f9c6
 #if CONFIG_DIRAC_DEMUXER
17ac9f1c
 AVInputFormat dirac_demuxer = {
     "dirac",
bde15e74
     NULL_IF_CONFIG_SMALL("raw Dirac"),
17ac9f1c
     0,
     dirac_probe,
     video_read_header,
81f052cb
     ff_raw_read_partial_packet,
17ac9f1c
     .flags= AVFMT_GENERIC_INDEX,
     .value = CODEC_ID_DIRAC,
 };
7402ee23
 #endif
17ac9f1c
 
b250f9c6
 #if CONFIG_DIRAC_MUXER
17ac9f1c
 AVOutputFormat dirac_muxer = {
     "dirac",
bde15e74
     NULL_IF_CONFIG_SMALL("raw Dirac"),
17ac9f1c
     NULL,
     "drc",
     0,
d9133126
     CODEC_ID_NONE,
17ac9f1c
     CODEC_ID_DIRAC,
     NULL,
     raw_write_packet,
     .flags= AVFMT_NOTIMESTAMPS,
 };
 #endif
 
b250f9c6
 #if CONFIG_DNXHD_DEMUXER
bd09e8a7
 AVInputFormat dnxhd_demuxer = {
     "dnxhd",
     NULL_IF_CONFIG_SMALL("raw DNxHD (SMPTE VC-3)"),
     0,
     dnxhd_probe,
     video_read_header,
81f052cb
     ff_raw_read_partial_packet,
bd09e8a7
     .flags= AVFMT_GENERIC_INDEX,
     .value = CODEC_ID_DNXHD,
 };
 #endif
 
b250f9c6
 #if CONFIG_DNXHD_MUXER
bd09e8a7
 AVOutputFormat dnxhd_muxer = {
     "dnxhd",
     NULL_IF_CONFIG_SMALL("raw DNxHD (SMPTE VC-3)"),
     NULL,
     "dnxhd",
     0,
     CODEC_ID_NONE,
     CODEC_ID_DNXHD,
     NULL,
     raw_write_packet,
     .flags= AVFMT_NOTIMESTAMPS,
 };
 #endif
 
b250f9c6
 #if CONFIG_DTS_DEMUXER
d2a067d1
 AVInputFormat dts_demuxer = {
23c99253
     "dts",
bde15e74
     NULL_IF_CONFIG_SMALL("raw DTS"),
23c99253
     0,
fde8052e
     dts_probe,
a0af2fa4
     audio_read_header,
81f052cb
     ff_raw_read_partial_packet,
e9b78eeb
     .flags= AVFMT_GENERIC_INDEX,
23c99253
     .extensions = "dts",
a0af2fa4
     .value = CODEC_ID_DTS,
23c99253
 };
7402ee23
 #endif
23c99253
 
b250f9c6
 #if CONFIG_DTS_MUXER
76d32428
 AVOutputFormat dts_muxer = {
     "dts",
     NULL_IF_CONFIG_SMALL("raw DTS"),
     "audio/x-dca",
     "dts",
fda885c7
     0,
76d32428
     CODEC_ID_DTS,
     CODEC_ID_NONE,
fda885c7
     NULL,
76d32428
     raw_write_packet,
     .flags= AVFMT_NOTIMESTAMPS,
 };
 #endif
 
b250f9c6
 #if CONFIG_EAC3_DEMUXER
2988c93d
 AVInputFormat eac3_demuxer = {
     "eac3",
     NULL_IF_CONFIG_SMALL("raw E-AC-3"),
     0,
     eac3_probe,
     audio_read_header,
81f052cb
     ff_raw_read_partial_packet,
2988c93d
     .flags= AVFMT_GENERIC_INDEX,
     .extensions = "eac3",
     .value = CODEC_ID_EAC3,
 };
 #endif
 
b250f9c6
 #if CONFIG_EAC3_MUXER
2988c93d
 AVOutputFormat eac3_muxer = {
     "eac3",
     NULL_IF_CONFIG_SMALL("raw E-AC-3"),
     "audio/x-eac3",
     "eac3",
     0,
     CODEC_ID_EAC3,
     CODEC_ID_NONE,
     NULL,
     raw_write_packet,
     .flags= AVFMT_NOTIMESTAMPS,
 };
 #endif
 
b250f9c6
 #if CONFIG_GSM_DEMUXER
60711e95
 AVInputFormat gsm_demuxer = {
     "gsm",
b4ee1d39
     NULL_IF_CONFIG_SMALL("raw GSM"),
60711e95
     0,
     NULL,
     audio_read_header,
81f052cb
     ff_raw_read_partial_packet,
60711e95
     .flags= AVFMT_GENERIC_INDEX,
     .extensions = "gsm",
     .value = CODEC_ID_GSM,
 };
7402ee23
 #endif
60711e95
 
b250f9c6
 #if CONFIG_H261_DEMUXER
d2a067d1
 AVInputFormat h261_demuxer = {
c6148de2
     "h261",
bde15e74
     NULL_IF_CONFIG_SMALL("raw H.261"),
c6148de2
     0,
     h261_probe,
     video_read_header,
81f052cb
     ff_raw_read_partial_packet,
e9b78eeb
     .flags= AVFMT_GENERIC_INDEX,
c6148de2
     .extensions = "h261",
     .value = CODEC_ID_H261,
 };
7402ee23
 #endif
c6148de2
 
b250f9c6
 #if CONFIG_H261_MUXER
d2a067d1
 AVOutputFormat h261_muxer = {
1c3990db
     "h261",
bde15e74
     NULL_IF_CONFIG_SMALL("raw H.261"),
1c3990db
     "video/x-h261",
     "h261",
     0,
d9133126
     CODEC_ID_NONE,
1c3990db
     CODEC_ID_H261,
7a97dd84
     NULL,
1c3990db
     raw_write_packet,
494bbf58
     .flags= AVFMT_NOTIMESTAMPS,
1c3990db
 };
082f7acf
 #endif
1c3990db
 
b250f9c6
 #if CONFIG_H263_DEMUXER
d2a067d1
 AVInputFormat h263_demuxer = {
d07f9043
     "h263",
bde15e74
     NULL_IF_CONFIG_SMALL("raw H.263"),
d07f9043
     0,
     h263_probe,
     video_read_header,
81f052cb
     ff_raw_read_partial_packet,
e9b78eeb
     .flags= AVFMT_GENERIC_INDEX,
d07f9043
 //    .extensions = "h263", //FIXME remove after writing mpeg4_probe
     .value = CODEC_ID_H263,
 };
7402ee23
 #endif
d07f9043
 
b250f9c6
 #if CONFIG_H263_MUXER
d2a067d1
 AVOutputFormat h263_muxer = {
de6d9b64
     "h263",
bde15e74
     NULL_IF_CONFIG_SMALL("raw H.263"),
de6d9b64
     "video/x-h263",
     "h263",
     0,
d9133126
     CODEC_ID_NONE,
de6d9b64
     CODEC_ID_H263,
7a97dd84
     NULL,
de6d9b64
     raw_write_packet,
494bbf58
     .flags= AVFMT_NOTIMESTAMPS,
c9a65ca8
 };
082f7acf
 #endif
c9a65ca8
 
b250f9c6
 #if CONFIG_H264_DEMUXER
76d32428
 AVInputFormat h264_demuxer = {
     "h264",
     NULL_IF_CONFIG_SMALL("raw H.264 video format"),
     0,
010acd8e
     h264_probe,
76d32428
     video_read_header,
81f052cb
     ff_raw_read_partial_packet,
76d32428
     .flags= AVFMT_GENERIC_INDEX,
     .extensions = "h26l,h264,264", //FIXME remove after writing mpeg4_probe
     .value = CODEC_ID_H264,
 };
7402ee23
 #endif
76d32428
 
b250f9c6
 #if CONFIG_H264_MUXER
76d32428
 AVOutputFormat h264_muxer = {
     "h264",
     NULL_IF_CONFIG_SMALL("raw H.264 video format"),
     NULL,
     "h264",
     0,
     CODEC_ID_NONE,
     CODEC_ID_H264,
     NULL,
     raw_write_packet,
     .flags= AVFMT_NOTIMESTAMPS,
 };
082f7acf
 #endif
76d32428
 
b250f9c6
 #if CONFIG_INGENIENT_DEMUXER
76d32428
 AVInputFormat ingenient_demuxer = {
     "ingenient",
b4ee1d39
     NULL_IF_CONFIG_SMALL("raw Ingenient MJPEG"),
76d32428
     0,
     NULL,
     video_read_header,
     ingenient_read_packet,
     .flags= AVFMT_GENERIC_INDEX,
     .extensions = "cgi", // FIXME
     .value = CODEC_ID_MJPEG,
 };
7402ee23
 #endif
76d32428
 
b250f9c6
 #if CONFIG_M4V_DEMUXER
d2a067d1
 AVInputFormat m4v_demuxer = {
7866eeff
     "m4v",
bde15e74
     NULL_IF_CONFIG_SMALL("raw MPEG-4 video format"),
7866eeff
     0,
fb9f1117
     mpeg4video_probe, /** probing for MPEG-4 data */
7866eeff
     video_read_header,
81f052cb
     ff_raw_read_partial_packet,
e9b78eeb
     .flags= AVFMT_GENERIC_INDEX,
492322fc
     .extensions = "m4v",
bb76a117
     .value = CODEC_ID_MPEG4,
7866eeff
 };
7402ee23
 #endif
7866eeff
 
b250f9c6
 #if CONFIG_M4V_MUXER
d2a067d1
 AVOutputFormat m4v_muxer = {
89b3d7c9
     "m4v",
bde15e74
     NULL_IF_CONFIG_SMALL("raw MPEG-4 video format"),
89b3d7c9
     NULL,
     "m4v",
     0,
     CODEC_ID_NONE,
     CODEC_ID_MPEG4,
7a97dd84
     NULL,
89b3d7c9
     raw_write_packet,
494bbf58
     .flags= AVFMT_NOTIMESTAMPS,
89b3d7c9
 };
082f7acf
 #endif
89b3d7c9
 
b250f9c6
 #if CONFIG_MJPEG_DEMUXER
76d32428
 AVInputFormat mjpeg_demuxer = {
     "mjpeg",
b4ee1d39
     NULL_IF_CONFIG_SMALL("raw MJPEG video"),
0da71265
     0,
76d32428
     NULL,
0da71265
     video_read_header,
81f052cb
     ff_raw_read_partial_packet,
e9b78eeb
     .flags= AVFMT_GENERIC_INDEX,
76d32428
     .extensions = "mjpg,mjpeg",
     .value = CODEC_ID_MJPEG,
0da71265
 };
7402ee23
 #endif
0da71265
 
b250f9c6
 #if CONFIG_MJPEG_MUXER
76d32428
 AVOutputFormat mjpeg_muxer = {
     "mjpeg",
b4ee1d39
     NULL_IF_CONFIG_SMALL("raw MJPEG video"),
76d32428
     "video/x-mjpeg",
     "mjpg,mjpeg",
0da71265
     0,
     CODEC_ID_NONE,
76d32428
     CODEC_ID_MJPEG,
7a97dd84
     NULL,
0da71265
     raw_write_packet,
494bbf58
     .flags= AVFMT_NOTIMESTAMPS,
0da71265
 };
082f7acf
 #endif
0da71265
 
b250f9c6
 #if CONFIG_MLP_DEMUXER
76d32428
 AVInputFormat mlp_demuxer = {
     "mlp",
     NULL_IF_CONFIG_SMALL("raw MLP"),
c9a65ca8
     0,
76d32428
     NULL,
     audio_read_header,
81f052cb
     ff_raw_read_partial_packet,
e9b78eeb
     .flags= AVFMT_GENERIC_INDEX,
76d32428
     .extensions = "mlp",
     .value = CODEC_ID_MLP,
de6d9b64
 };
7402ee23
 #endif
de6d9b64
 
b250f9c6
 #if CONFIG_MPEG1VIDEO_MUXER
d2a067d1
 AVOutputFormat mpeg1video_muxer = {
c9a65ca8
     "mpeg1video",
b4ee1d39
     NULL_IF_CONFIG_SMALL("raw MPEG-1 video"),
de6d9b64
     "video/x-mpeg",
e0827ba4
     "mpg,mpeg,m1v",
de6d9b64
     0,
d9133126
     CODEC_ID_NONE,
de6d9b64
     CODEC_ID_MPEG1VIDEO,
7a97dd84
     NULL,
de6d9b64
     raw_write_packet,
494bbf58
     .flags= AVFMT_NOTIMESTAMPS,
de6d9b64
 };
082f7acf
 #endif
de6d9b64
 
b250f9c6
 #if CONFIG_MPEG2VIDEO_MUXER
d2a067d1
 AVOutputFormat mpeg2video_muxer = {
6ec864da
     "mpeg2video",
b4ee1d39
     NULL_IF_CONFIG_SMALL("raw MPEG-2 video"),
6ec864da
     NULL,
     "m2v",
     0,
d9133126
     CODEC_ID_NONE,
6ec864da
     CODEC_ID_MPEG2VIDEO,
7a97dd84
     NULL,
6ec864da
     raw_write_packet,
494bbf58
     .flags= AVFMT_NOTIMESTAMPS,
6ec864da
 };
082f7acf
 #endif
6ec864da
 
b250f9c6
 #if CONFIG_MPEGVIDEO_DEMUXER
76d32428
 AVInputFormat mpegvideo_demuxer = {
     "mpegvideo",
b4ee1d39
     NULL_IF_CONFIG_SMALL("raw MPEG video"),
27e084bd
     0,
76d32428
     mpegvideo_probe,
27e084bd
     video_read_header,
81f052cb
     ff_raw_read_partial_packet,
e9b78eeb
     .flags= AVFMT_GENERIC_INDEX,
76d32428
     .value = CODEC_ID_MPEG1VIDEO,
27e084bd
 };
7402ee23
 #endif
27e084bd
 
9f2fc126
 #if CONFIG_CAVSVIDEO_DEMUXER
 AVInputFormat cavsvideo_demuxer = {
     "cavsvideo",
b81350a8
     NULL_IF_CONFIG_SMALL("raw Chinese AVS video"),
9f2fc126
     0,
     cavsvideo_probe,
     video_read_header,
81f052cb
     ff_raw_read_partial_packet,
9f2fc126
     .flags= AVFMT_GENERIC_INDEX,
     .value = CODEC_ID_CAVS,
 };
 #endif
 
b250f9c6
 #if CONFIG_NULL_MUXER
76d32428
 AVOutputFormat null_muxer = {
     "null",
b4ee1d39
     NULL_IF_CONFIG_SMALL("raw null video format"),
76d32428
     NULL,
     NULL,
84c63c01
     0,
76d32428
 #ifdef WORDS_BIGENDIAN
     CODEC_ID_PCM_S16BE,
 #else
     CODEC_ID_PCM_S16LE,
 #endif
     CODEC_ID_RAWVIDEO,
84c63c01
     NULL,
76d32428
     null_write_packet,
     .flags = AVFMT_NOFILE | AVFMT_RAWPICTURE | AVFMT_NOTIMESTAMPS,
 };
082f7acf
 #endif
76d32428
 
b250f9c6
 #if CONFIG_RAWVIDEO_DEMUXER
76d32428
 AVInputFormat rawvideo_demuxer = {
     "rawvideo",
     NULL_IF_CONFIG_SMALL("raw video format"),
     0,
     NULL,
     raw_read_header,
     rawvideo_read_packet,
e9b78eeb
     .flags= AVFMT_GENERIC_INDEX,
76d32428
     .extensions = "yuv,cif,qcif,rgb",
     .value = CODEC_ID_RAWVIDEO,
84c63c01
 };
7402ee23
 #endif
84c63c01
 
b250f9c6
 #if CONFIG_RAWVIDEO_MUXER
76d32428
 AVOutputFormat rawvideo_muxer = {
     "rawvideo",
     NULL_IF_CONFIG_SMALL("raw video format"),
     NULL,
     "yuv,rgb",
5ed8fafc
     0,
d9133126
     CODEC_ID_NONE,
76d32428
     CODEC_ID_RAWVIDEO,
7a97dd84
     NULL,
5ed8fafc
     raw_write_packet,
494bbf58
     .flags= AVFMT_NOTIMESTAMPS,
5ed8fafc
 };
082f7acf
 #endif
5ed8fafc
 
b250f9c6
 #if CONFIG_ROQ_MUXER
76d32428
 AVOutputFormat roq_muxer =
 {
     "RoQ",
b4ee1d39
     NULL_IF_CONFIG_SMALL("raw id RoQ format"),
76d32428
     NULL,
     "roq",
     0,
     CODEC_ID_ROQ_DPCM,
     CODEC_ID_ROQ,
     roq_write_header,
     raw_write_packet,
 };
082f7acf
 #endif
76d32428
 
b250f9c6
 #if CONFIG_SHORTEN_DEMUXER
76d32428
 AVInputFormat shorten_demuxer = {
     "shn",
     NULL_IF_CONFIG_SMALL("raw Shorten"),
     0,
     NULL,
     audio_read_header,
81f052cb
     ff_raw_read_partial_packet,
76d32428
     .flags= AVFMT_GENERIC_INDEX,
     .extensions = "shn",
     .value = CODEC_ID_SHORTEN,
 };
7402ee23
 #endif
76d32428
 
b250f9c6
 #if CONFIG_VC1_DEMUXER
7bb5c2a6
 AVInputFormat vc1_demuxer = {
     "vc1",
bde15e74
     NULL_IF_CONFIG_SMALL("raw VC-1"),
7bb5c2a6
     0,
     NULL /* vc1_probe */,
     video_read_header,
81f052cb
     ff_raw_read_partial_packet,
7bb5c2a6
     .extensions = "vc1",
     .value = CODEC_ID_VC1,
 };
7402ee23
 #endif
7bb5c2a6
 
fb9f1117
 /* PCM formats */
764ef400
 
4986a429
 #define PCMINPUTDEF(name, long_name, ext, codec) \
d2a067d1
 AVInputFormat pcm_ ## name ## _demuxer = {\
764ef400
     #name,\
bde15e74
     NULL_IF_CONFIG_SMALL(long_name),\
764ef400
     0,\
     NULL,\
     raw_read_header,\
     raw_read_packet,\
9b64a036
     NULL,\
4986a429
     pcm_read_seek,\
e9b78eeb
     .flags= AVFMT_GENERIC_INDEX,\
764ef400
     .extensions = ext,\
     .value = codec,\
 };
 
2c8e2014
 #define PCMOUTPUTDEF(name, long_name, ext, codec) \
d2a067d1
 AVOutputFormat pcm_ ## name ## _muxer = {\
c9a65ca8
     #name,\
bde15e74
     NULL_IF_CONFIG_SMALL(long_name),\
c9a65ca8
     NULL,\
     ext,\
     0,\
     codec,\
d9133126
     CODEC_ID_NONE,\
7a97dd84
     NULL,\
c9a65ca8
     raw_write_packet,\
494bbf58
     .flags= AVFMT_NOTIMESTAMPS,\
5ed8fafc
 };
2c8e2014
 
 
b250f9c6
 #if  !CONFIG_MUXERS && CONFIG_DEMUXERS
2c8e2014
 #define PCMDEF(name, long_name, ext, codec) \
         PCMINPUTDEF(name, long_name, ext, codec)
b250f9c6
 #elif CONFIG_MUXERS && !CONFIG_DEMUXERS
2c8e2014
 #define PCMDEF(name, long_name, ext, codec) \
         PCMOUTPUTDEF(name, long_name, ext, codec)
b250f9c6
 #elif CONFIG_MUXERS && CONFIG_DEMUXERS
2c8e2014
 #define PCMDEF(name, long_name, ext, codec) \
         PCMINPUTDEF(name, long_name, ext, codec)\
         PCMOUTPUTDEF(name, long_name, ext, codec)
 #else
 #define PCMDEF(name, long_name, ext, codec)
 #endif
5ed8fafc
 
 #ifdef WORDS_BIGENDIAN
c9a65ca8
 #define BE_DEF(s) s
 #define LE_DEF(s) NULL
5ed8fafc
 #else
c9a65ca8
 #define BE_DEF(s) NULL
 #define LE_DEF(s) s
5ed8fafc
 #endif
 
ee7948cb
 PCMDEF(f64be, "PCM 64 bit floating-point big-endian format",
        NULL, CODEC_ID_PCM_F64BE)
 
 PCMDEF(f64le, "PCM 64 bit floating-point little-endian format",
        NULL, CODEC_ID_PCM_F64LE)
 
 PCMDEF(f32be, "PCM 32 bit floating-point big-endian format",
        NULL, CODEC_ID_PCM_F32BE)
 
 PCMDEF(f32le, "PCM 32 bit floating-point little-endian format",
        NULL, CODEC_ID_PCM_F32LE)
 
 PCMDEF(s32be, "PCM signed 32 bit big-endian format",
        NULL, CODEC_ID_PCM_S32BE)
 
 PCMDEF(s32le, "PCM signed 32 bit little-endian format",
        NULL, CODEC_ID_PCM_S32LE)
 
 PCMDEF(s24be, "PCM signed 24 bit big-endian format",
        NULL, CODEC_ID_PCM_S24BE)
 
 PCMDEF(s24le, "PCM signed 24 bit little-endian format",
        NULL, CODEC_ID_PCM_S24LE)
5ed8fafc
 
ac1ea66e
 PCMDEF(s16be, "PCM signed 16 bit big-endian format",
c9a65ca8
        BE_DEF("sw"), CODEC_ID_PCM_S16BE)
5ed8fafc
 
76d32428
 PCMDEF(s16le, "PCM signed 16 bit little-endian format",
        LE_DEF("sw"), CODEC_ID_PCM_S16LE)
 
 PCMDEF(s8, "PCM signed 8 bit format",
        "sb", CODEC_ID_PCM_S8)
5ed8fafc
 
ee7948cb
 PCMDEF(u32be, "PCM unsigned 32 bit big-endian format",
        NULL, CODEC_ID_PCM_U32BE)
 
 PCMDEF(u32le, "PCM unsigned 32 bit little-endian format",
        NULL, CODEC_ID_PCM_U32LE)
 
 PCMDEF(u24be, "PCM unsigned 24 bit big-endian format",
        NULL, CODEC_ID_PCM_U24BE)
 
 PCMDEF(u24le, "PCM unsigned 24 bit little-endian format",
        NULL, CODEC_ID_PCM_U24LE)
 
ac1ea66e
 PCMDEF(u16be, "PCM unsigned 16 bit big-endian format",
c9a65ca8
        BE_DEF("uw"), CODEC_ID_PCM_U16BE)
5ed8fafc
 
76d32428
 PCMDEF(u16le, "PCM unsigned 16 bit little-endian format",
        LE_DEF("uw"), CODEC_ID_PCM_U16LE)
5ed8fafc
 
ac1ea66e
 PCMDEF(u8, "PCM unsigned 8 bit format",
c9a65ca8
        "ub", CODEC_ID_PCM_U8)
5ed8fafc
 
ac1ea66e
 PCMDEF(alaw, "PCM A-law format",
c9a65ca8
        "al", CODEC_ID_PCM_ALAW)
de6d9b64
 
76d32428
 PCMDEF(mulaw, "PCM mu-law format",
        "ul", CODEC_ID_PCM_MULAW)