Libav
Main Page
Related Pages
Modules
Data Structures
Files
Examples
File List
Globals
libavcodec
dca.c
Go to the documentation of this file.
1
/*
2
* DCA compatible decoder data
3
*
4
* This file is part of Libav.
5
*
6
* Libav is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU Lesser General Public
8
* License as published by the Free Software Foundation; either
9
* version 2.1 of the License, or (at your option) any later version.
10
*
11
* Libav is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
* Lesser General Public License for more details.
15
*
16
* You should have received a copy of the GNU Lesser General Public
17
* License along with Libav; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
*/
20
21
#include <stdint.h>
22
#include <string.h>
23
24
#include "
put_bits.h
"
25
#include "
dca.h
"
26
27
const
uint32_t
avpriv_dca_sample_rates
[16] =
28
{
29
0, 8000, 16000, 32000, 0, 0, 11025, 22050, 44100, 0, 0,
30
12000, 24000, 48000, 96000, 192000
31
};
32
33
int
ff_dca_convert_bitstream
(
const
uint8_t
*src,
int
src_size,
uint8_t
*dst,
34
int
max_size)
35
{
36
uint32_t mrk;
37
int
i, tmp;
38
const
uint16_t *ssrc = (
const
uint16_t *) src;
39
uint16_t *sdst = (uint16_t *) dst;
40
PutBitContext
pb;
41
42
if
((
unsigned
) src_size > (unsigned) max_size)
43
src_size = max_size;
44
45
mrk =
AV_RB32
(src);
46
switch
(mrk) {
47
case
DCA_MARKER_RAW_BE
:
48
memcpy(dst, src, src_size);
49
return
src_size;
50
case
DCA_MARKER_RAW_LE
:
51
for
(i = 0; i < (src_size + 1) >> 1; i++)
52
*sdst++ =
av_bswap16
(*ssrc++);
53
return
src_size;
54
case
DCA_MARKER_14B_BE
:
55
case
DCA_MARKER_14B_LE
:
56
init_put_bits
(&pb, dst, max_size);
57
for
(i = 0; i < (src_size + 1) >> 1; i++, src += 2) {
58
tmp = ((mrk ==
DCA_MARKER_14B_BE
) ?
AV_RB16
(src) :
AV_RL16
(src)) & 0x3FFF;
59
put_bits
(&pb, 14, tmp);
60
}
61
flush_put_bits
(&pb);
62
return
(
put_bits_count
(&pb) + 7) >> 3;
63
default
:
64
return
AVERROR_INVALIDDATA
;
65
}
66
}
Generated on Tue Mar 1 2016 21:14:25 for Libav by
1.8.4