~ubuntu-branches/ubuntu/trusty/gst-libav1.0/trusty-proposed

« back to all changes in this revision

Viewing changes to gst-libs/ext/libav/libavformat/pcmdec.c

  • Committer: Package Import Robot
  • Author(s): Sebastian Dröge
  • Date: 2013-09-24 17:07:00 UTC
  • mfrom: (1.1.17) (7.1.9 experimental)
  • Revision ID: package-import@ubuntu.com-20130924170700-4dg62s3pwl0pdakz
Tags: 1.2.0-1
* New upstream stable release:
  + debian/control:
    - Build depend on GStreamer and gst-plugins-base >= 1.2.0.

Show diffs side-by-side

added added

removed removed

Lines of Context:
20
20
 */
21
21
 
22
22
#include "avformat.h"
23
 
#include "rawdec.h"
 
23
#include "internal.h"
24
24
#include "pcm.h"
25
25
#include "libavutil/log.h"
26
26
#include "libavutil/opt.h"
27
27
 
28
28
#define RAW_SAMPLES     1024
29
29
 
30
 
static int raw_read_packet(AVFormatContext *s, AVPacket *pkt)
 
30
typedef struct PCMAudioDemuxerContext {
 
31
    AVClass *class;
 
32
    int sample_rate;
 
33
    int channels;
 
34
} PCMAudioDemuxerContext;
 
35
 
 
36
static int pcm_read_header(AVFormatContext *s)
 
37
{
 
38
    PCMAudioDemuxerContext *s1 = s->priv_data;
 
39
    AVStream *st;
 
40
 
 
41
    st = avformat_new_stream(s, NULL);
 
42
    if (!st)
 
43
        return AVERROR(ENOMEM);
 
44
 
 
45
 
 
46
    st->codec->codec_type  = AVMEDIA_TYPE_AUDIO;
 
47
    st->codec->codec_id    = s->iformat->raw_codec_id;
 
48
    st->codec->sample_rate = s1->sample_rate;
 
49
    st->codec->channels    = s1->channels;
 
50
 
 
51
    st->codec->bits_per_coded_sample =
 
52
        av_get_bits_per_sample(st->codec->codec_id);
 
53
 
 
54
    assert(st->codec->bits_per_coded_sample > 0);
 
55
 
 
56
    st->codec->block_align =
 
57
        st->codec->bits_per_coded_sample * st->codec->channels / 8;
 
58
 
 
59
    avpriv_set_pts_info(st, 64, 1, st->codec->sample_rate);
 
60
    return 0;
 
61
}
 
62
 
 
63
static int pcm_read_packet(AVFormatContext *s, AVPacket *pkt)
31
64
{
32
65
    int ret, size, bps;
33
66
    //    AVStream *st = s->streams[0];
49
82
}
50
83
 
51
84
static const AVOption pcm_options[] = {
52
 
    { "sample_rate", "", offsetof(RawAudioDemuxerContext, sample_rate), AV_OPT_TYPE_INT, {.dbl = 0}, 0, INT_MAX, AV_OPT_FLAG_DECODING_PARAM },
53
 
    { "channels",    "", offsetof(RawAudioDemuxerContext, channels),    AV_OPT_TYPE_INT, {.dbl = 0}, 0, INT_MAX, AV_OPT_FLAG_DECODING_PARAM },
 
85
    { "sample_rate", "", offsetof(PCMAudioDemuxerContext, sample_rate), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, AV_OPT_FLAG_DECODING_PARAM },
 
86
    { "channels",    "", offsetof(PCMAudioDemuxerContext, channels),    AV_OPT_TYPE_INT, {.i64 = 1}, 0, INT_MAX, AV_OPT_FLAG_DECODING_PARAM },
54
87
    { NULL },
55
88
};
56
89
 
64
97
AVInputFormat ff_pcm_ ## name_ ## _demuxer = {              \
65
98
    .name           = #name_,                               \
66
99
    .long_name      = NULL_IF_CONFIG_SMALL(long_name_),     \
67
 
    .priv_data_size = sizeof(RawAudioDemuxerContext),       \
68
 
    .read_header    = ff_raw_read_header,                   \
69
 
    .read_packet    = raw_read_packet,                      \
70
 
    .read_seek      = pcm_read_seek,                        \
 
100
    .priv_data_size = sizeof(PCMAudioDemuxerContext),       \
 
101
    .read_header    = pcm_read_header,                      \
 
102
    .read_packet    = pcm_read_packet,                      \
 
103
    .read_seek      = ff_pcm_read_seek,                     \
71
104
    .flags          = AVFMT_GENERIC_INDEX,                  \
72
105
    .extensions     = ext,                                  \
73
 
    .value          = codec,                                \
 
106
    .raw_codec_id   = codec,                                \
74
107
    .priv_class     = &name_ ## _demuxer_class,             \
75
108
};
76
109
 
77
 
PCMDEF(f64be, "PCM 64 bit floating-point big-endian format",
78
 
       NULL, CODEC_ID_PCM_F64BE)
79
 
 
80
 
PCMDEF(f64le, "PCM 64 bit floating-point little-endian format",
81
 
       NULL, CODEC_ID_PCM_F64LE)
82
 
 
83
 
PCMDEF(f32be, "PCM 32 bit floating-point big-endian format",
84
 
       NULL, CODEC_ID_PCM_F32BE)
85
 
 
86
 
PCMDEF(f32le, "PCM 32 bit floating-point little-endian format",
87
 
       NULL, CODEC_ID_PCM_F32LE)
88
 
 
89
 
PCMDEF(s32be, "PCM signed 32 bit big-endian format",
90
 
       NULL, CODEC_ID_PCM_S32BE)
91
 
 
92
 
PCMDEF(s32le, "PCM signed 32 bit little-endian format",
93
 
       NULL, CODEC_ID_PCM_S32LE)
94
 
 
95
 
PCMDEF(s24be, "PCM signed 24 bit big-endian format",
96
 
       NULL, CODEC_ID_PCM_S24BE)
97
 
 
98
 
PCMDEF(s24le, "PCM signed 24 bit little-endian format",
99
 
       NULL, CODEC_ID_PCM_S24LE)
100
 
 
101
 
PCMDEF(s16be, "PCM signed 16 bit big-endian format",
102
 
       AV_NE("sw", NULL), CODEC_ID_PCM_S16BE)
103
 
 
104
 
PCMDEF(s16le, "PCM signed 16 bit little-endian format",
105
 
       AV_NE(NULL, "sw"), CODEC_ID_PCM_S16LE)
106
 
 
107
 
PCMDEF(s8, "PCM signed 8 bit format",
108
 
       "sb", CODEC_ID_PCM_S8)
109
 
 
110
 
PCMDEF(u32be, "PCM unsigned 32 bit big-endian format",
111
 
       NULL, CODEC_ID_PCM_U32BE)
112
 
 
113
 
PCMDEF(u32le, "PCM unsigned 32 bit little-endian format",
114
 
       NULL, CODEC_ID_PCM_U32LE)
115
 
 
116
 
PCMDEF(u24be, "PCM unsigned 24 bit big-endian format",
117
 
       NULL, CODEC_ID_PCM_U24BE)
118
 
 
119
 
PCMDEF(u24le, "PCM unsigned 24 bit little-endian format",
120
 
       NULL, CODEC_ID_PCM_U24LE)
121
 
 
122
 
PCMDEF(u16be, "PCM unsigned 16 bit big-endian format",
123
 
       AV_NE("uw", NULL), CODEC_ID_PCM_U16BE)
124
 
 
125
 
PCMDEF(u16le, "PCM unsigned 16 bit little-endian format",
126
 
       AV_NE(NULL, "uw"), CODEC_ID_PCM_U16LE)
127
 
 
128
 
PCMDEF(u8, "PCM unsigned 8 bit format",
129
 
       "ub", CODEC_ID_PCM_U8)
130
 
 
131
 
PCMDEF(alaw, "PCM A-law format",
132
 
       "al", CODEC_ID_PCM_ALAW)
133
 
 
134
 
PCMDEF(mulaw, "PCM mu-law format",
135
 
       "ul", CODEC_ID_PCM_MULAW)
 
110
PCMDEF(f64be, "PCM 64-bit floating-point big-endian",
 
111
       NULL, AV_CODEC_ID_PCM_F64BE)
 
112
 
 
113
PCMDEF(f64le, "PCM 64-bit floating-point little-endian",
 
114
       NULL, AV_CODEC_ID_PCM_F64LE)
 
115
 
 
116
PCMDEF(f32be, "PCM 32-bit floating-point big-endian",
 
117
       NULL, AV_CODEC_ID_PCM_F32BE)
 
118
 
 
119
PCMDEF(f32le, "PCM 32-bit floating-point little-endian",
 
120
       NULL, AV_CODEC_ID_PCM_F32LE)
 
121
 
 
122
PCMDEF(s32be, "PCM signed 32-bit big-endian",
 
123
       NULL, AV_CODEC_ID_PCM_S32BE)
 
124
 
 
125
PCMDEF(s32le, "PCM signed 32-bit little-endian",
 
126
       NULL, AV_CODEC_ID_PCM_S32LE)
 
127
 
 
128
PCMDEF(s24be, "PCM signed 24-bit big-endian",
 
129
       NULL, AV_CODEC_ID_PCM_S24BE)
 
130
 
 
131
PCMDEF(s24le, "PCM signed 24-bit little-endian",
 
132
       NULL, AV_CODEC_ID_PCM_S24LE)
 
133
 
 
134
PCMDEF(s16be, "PCM signed 16-bit big-endian",
 
135
       AV_NE("sw", NULL), AV_CODEC_ID_PCM_S16BE)
 
136
 
 
137
PCMDEF(s16le, "PCM signed 16-bit little-endian",
 
138
       AV_NE(NULL, "sw"), AV_CODEC_ID_PCM_S16LE)
 
139
 
 
140
PCMDEF(s8, "PCM signed 8-bit",
 
141
       "sb", AV_CODEC_ID_PCM_S8)
 
142
 
 
143
PCMDEF(u32be, "PCM unsigned 32-bit big-endian",
 
144
       NULL, AV_CODEC_ID_PCM_U32BE)
 
145
 
 
146
PCMDEF(u32le, "PCM unsigned 32-bit little-endian",
 
147
       NULL, AV_CODEC_ID_PCM_U32LE)
 
148
 
 
149
PCMDEF(u24be, "PCM unsigned 24-bit big-endian",
 
150
       NULL, AV_CODEC_ID_PCM_U24BE)
 
151
 
 
152
PCMDEF(u24le, "PCM unsigned 24-bit little-endian",
 
153
       NULL, AV_CODEC_ID_PCM_U24LE)
 
154
 
 
155
PCMDEF(u16be, "PCM unsigned 16-bit big-endian",
 
156
       AV_NE("uw", NULL), AV_CODEC_ID_PCM_U16BE)
 
157
 
 
158
PCMDEF(u16le, "PCM unsigned 16-bit little-endian",
 
159
       AV_NE(NULL, "uw"), AV_CODEC_ID_PCM_U16LE)
 
160
 
 
161
PCMDEF(u8, "PCM unsigned 8-bit",
 
162
       "ub", AV_CODEC_ID_PCM_U8)
 
163
 
 
164
PCMDEF(alaw, "PCM A-law",
 
165
       "al", AV_CODEC_ID_PCM_ALAW)
 
166
 
 
167
PCMDEF(mulaw, "PCM mu-law",
 
168
       "ul", AV_CODEC_ID_PCM_MULAW)