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