00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "avformat.h"
00023 #include "rawdec.h"
00024 #include "pcm.h"
00025
00026 #define RAW_SAMPLES 1024
00027
00028 static int raw_read_packet(AVFormatContext *s, AVPacket *pkt)
00029 {
00030 int ret, size, bps;
00031
00032
00033 size= RAW_SAMPLES*s->streams[0]->codec->block_align;
00034
00035 ret= av_get_packet(s->pb, pkt, size);
00036
00037 pkt->stream_index = 0;
00038 if (ret < 0)
00039 return ret;
00040
00041 bps= av_get_bits_per_sample(s->streams[0]->codec->codec_id);
00042 assert(bps);
00043 pkt->dts=
00044 pkt->pts= pkt->pos*8 / (bps * s->streams[0]->codec->channels);
00045
00046 return ret;
00047 }
00048
00049 #define PCMDEF(name, long_name, ext, codec) \
00050 AVInputFormat ff_pcm_ ## name ## _demuxer = {\
00051 #name,\
00052 NULL_IF_CONFIG_SMALL(long_name),\
00053 0,\
00054 NULL,\
00055 ff_raw_read_header,\
00056 raw_read_packet,\
00057 NULL,\
00058 pcm_read_seek,\
00059 .flags= AVFMT_GENERIC_INDEX,\
00060 .extensions = ext,\
00061 .value = codec,\
00062 };
00063
00064 PCMDEF(f64be, "PCM 64 bit floating-point big-endian format",
00065 NULL, CODEC_ID_PCM_F64BE)
00066
00067 PCMDEF(f64le, "PCM 64 bit floating-point little-endian format",
00068 NULL, CODEC_ID_PCM_F64LE)
00069
00070 PCMDEF(f32be, "PCM 32 bit floating-point big-endian format",
00071 NULL, CODEC_ID_PCM_F32BE)
00072
00073 PCMDEF(f32le, "PCM 32 bit floating-point little-endian format",
00074 NULL, CODEC_ID_PCM_F32LE)
00075
00076 PCMDEF(s32be, "PCM signed 32 bit big-endian format",
00077 NULL, CODEC_ID_PCM_S32BE)
00078
00079 PCMDEF(s32le, "PCM signed 32 bit little-endian format",
00080 NULL, CODEC_ID_PCM_S32LE)
00081
00082 PCMDEF(s24be, "PCM signed 24 bit big-endian format",
00083 NULL, CODEC_ID_PCM_S24BE)
00084
00085 PCMDEF(s24le, "PCM signed 24 bit little-endian format",
00086 NULL, CODEC_ID_PCM_S24LE)
00087
00088 PCMDEF(s16be, "PCM signed 16 bit big-endian format",
00089 AV_NE("sw", NULL), CODEC_ID_PCM_S16BE)
00090
00091 PCMDEF(s16le, "PCM signed 16 bit little-endian format",
00092 AV_NE(NULL, "sw"), CODEC_ID_PCM_S16LE)
00093
00094 PCMDEF(s8, "PCM signed 8 bit format",
00095 "sb", CODEC_ID_PCM_S8)
00096
00097 PCMDEF(u32be, "PCM unsigned 32 bit big-endian format",
00098 NULL, CODEC_ID_PCM_U32BE)
00099
00100 PCMDEF(u32le, "PCM unsigned 32 bit little-endian format",
00101 NULL, CODEC_ID_PCM_U32LE)
00102
00103 PCMDEF(u24be, "PCM unsigned 24 bit big-endian format",
00104 NULL, CODEC_ID_PCM_U24BE)
00105
00106 PCMDEF(u24le, "PCM unsigned 24 bit little-endian format",
00107 NULL, CODEC_ID_PCM_U24LE)
00108
00109 PCMDEF(u16be, "PCM unsigned 16 bit big-endian format",
00110 AV_NE("uw", NULL), CODEC_ID_PCM_U16BE)
00111
00112 PCMDEF(u16le, "PCM unsigned 16 bit little-endian format",
00113 AV_NE(NULL, "uw"), CODEC_ID_PCM_U16LE)
00114
00115 PCMDEF(u8, "PCM unsigned 8 bit format",
00116 "ub", CODEC_ID_PCM_U8)
00117
00118 PCMDEF(alaw, "PCM A-law format",
00119 "al", CODEC_ID_PCM_ALAW)
00120
00121 PCMDEF(mulaw, "PCM mu-law format",
00122 "ul", CODEC_ID_PCM_MULAW)