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) |