ffmpeg / libavformat / pcmdec.c @ 6cc7f139
History | View | Annotate | Download (3.47 KB)
1 | e94204df | Aurelien Jacobs | /*
|
---|---|---|---|
2 | * RAW PCM demuxers
|
||
3 | * Copyright (c) 2002 Fabrice Bellard
|
||
4 | *
|
||
5 | 2912e87a | Mans Rullgard | * This file is part of Libav.
|
6 | e94204df | Aurelien Jacobs | *
|
7 | 2912e87a | Mans Rullgard | * Libav is free software; you can redistribute it and/or
|
8 | e94204df | Aurelien Jacobs | * modify it under the terms of the GNU Lesser General Public
|
9 | * License as published by the Free Software Foundation; either
|
||
10 | * version 2.1 of the License, or (at your option) any later version.
|
||
11 | *
|
||
12 | 2912e87a | Mans Rullgard | * Libav is distributed in the hope that it will be useful,
|
13 | e94204df | Aurelien Jacobs | * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||
15 | * Lesser General Public License for more details.
|
||
16 | *
|
||
17 | * You should have received a copy of the GNU Lesser General Public
|
||
18 | 2912e87a | Mans Rullgard | * License along with Libav; if not, write to the Free Software
|
19 | e94204df | Aurelien Jacobs | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
20 | */
|
||
21 | |||
22 | #include "avformat.h" |
||
23 | 4ca31edc | Aurelien Jacobs | #include "rawdec.h" |
24 | e94204df | Aurelien Jacobs | #include "pcm.h" |
25 | |||
26 | #define RAW_SAMPLES 1024 |
||
27 | |||
28 | static int raw_read_packet(AVFormatContext *s, AVPacket *pkt) |
||
29 | { |
||
30 | int ret, size, bps;
|
||
31 | // AVStream *st = s->streams[0];
|
||
32 | |||
33 | size= RAW_SAMPLES*s->streams[0]->codec->block_align;
|
||
34 | |||
35 | ret= av_get_packet(s->pb, pkt, size); |
||
36 | |||
37 | pkt->stream_index = 0;
|
||
38 | if (ret < 0) |
||
39 | return ret;
|
||
40 | |||
41 | bps= av_get_bits_per_sample(s->streams[0]->codec->codec_id);
|
||
42 | assert(bps); // if false there IS a bug elsewhere (NOT in this function)
|
||
43 | pkt->dts= |
||
44 | pkt->pts= pkt->pos*8 / (bps * s->streams[0]->codec->channels); |
||
45 | |||
46 | return ret;
|
||
47 | } |
||
48 | |||
49 | #define PCMDEF(name, long_name, ext, codec) \
|
||
50 | c6610a21 | Diego Elio Pettenò | AVInputFormat ff_pcm_ ## name ## _demuxer = {\ |
51 | e94204df | Aurelien Jacobs | #name,\
|
52 | NULL_IF_CONFIG_SMALL(long_name),\ |
||
53 | 0,\
|
||
54 | NULL,\
|
||
55 | ff_raw_read_header,\ |
||
56 | raw_read_packet,\ |
||
57 | NULL,\
|
||
58 | pcm_read_seek,\ |
||
59 | .flags= AVFMT_GENERIC_INDEX,\ |
||
60 | .extensions = ext,\ |
||
61 | .value = codec,\ |
||
62 | }; |
||
63 | |||
64 | PCMDEF(f64be, "PCM 64 bit floating-point big-endian format",
|
||
65 | NULL, CODEC_ID_PCM_F64BE)
|
||
66 | |||
67 | PCMDEF(f64le, "PCM 64 bit floating-point little-endian format",
|
||
68 | NULL, CODEC_ID_PCM_F64LE)
|
||
69 | |||
70 | PCMDEF(f32be, "PCM 32 bit floating-point big-endian format",
|
||
71 | NULL, CODEC_ID_PCM_F32BE)
|
||
72 | |||
73 | PCMDEF(f32le, "PCM 32 bit floating-point little-endian format",
|
||
74 | NULL, CODEC_ID_PCM_F32LE)
|
||
75 | |||
76 | PCMDEF(s32be, "PCM signed 32 bit big-endian format",
|
||
77 | NULL, CODEC_ID_PCM_S32BE)
|
||
78 | |||
79 | PCMDEF(s32le, "PCM signed 32 bit little-endian format",
|
||
80 | NULL, CODEC_ID_PCM_S32LE)
|
||
81 | |||
82 | PCMDEF(s24be, "PCM signed 24 bit big-endian format",
|
||
83 | NULL, CODEC_ID_PCM_S24BE)
|
||
84 | |||
85 | PCMDEF(s24le, "PCM signed 24 bit little-endian format",
|
||
86 | NULL, CODEC_ID_PCM_S24LE)
|
||
87 | |||
88 | PCMDEF(s16be, "PCM signed 16 bit big-endian format",
|
||
89 | AV_NE("sw", NULL), CODEC_ID_PCM_S16BE) |
||
90 | |||
91 | PCMDEF(s16le, "PCM signed 16 bit little-endian format",
|
||
92 | AV_NE(NULL, "sw"), CODEC_ID_PCM_S16LE) |
||
93 | |||
94 | PCMDEF(s8, "PCM signed 8 bit format",
|
||
95 | "sb", CODEC_ID_PCM_S8)
|
||
96 | |||
97 | PCMDEF(u32be, "PCM unsigned 32 bit big-endian format",
|
||
98 | NULL, CODEC_ID_PCM_U32BE)
|
||
99 | |||
100 | PCMDEF(u32le, "PCM unsigned 32 bit little-endian format",
|
||
101 | NULL, CODEC_ID_PCM_U32LE)
|
||
102 | |||
103 | PCMDEF(u24be, "PCM unsigned 24 bit big-endian format",
|
||
104 | NULL, CODEC_ID_PCM_U24BE)
|
||
105 | |||
106 | PCMDEF(u24le, "PCM unsigned 24 bit little-endian format",
|
||
107 | NULL, CODEC_ID_PCM_U24LE)
|
||
108 | |||
109 | PCMDEF(u16be, "PCM unsigned 16 bit big-endian format",
|
||
110 | AV_NE("uw", NULL), CODEC_ID_PCM_U16BE) |
||
111 | |||
112 | PCMDEF(u16le, "PCM unsigned 16 bit little-endian format",
|
||
113 | AV_NE(NULL, "uw"), CODEC_ID_PCM_U16LE) |
||
114 | |||
115 | PCMDEF(u8, "PCM unsigned 8 bit format",
|
||
116 | "ub", CODEC_ID_PCM_U8)
|
||
117 | |||
118 | PCMDEF(alaw, "PCM A-law format",
|
||
119 | "al", CODEC_ID_PCM_ALAW)
|
||
120 | |||
121 | PCMDEF(mulaw, "PCM mu-law format",
|
||
122 | "ul", CODEC_ID_PCM_MULAW) |