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 "
libavutil/error.h
"
29
30
#include "
dca.h
"
31
#include "
dca_syncwords.h
"
32
#include "
put_bits.h
"
33
34
const
uint32_t
avpriv_dca_sample_rates
[16] = {
35
0, 8000, 16000, 32000, 0, 0, 11025, 22050, 44100, 0, 0,
36
12000, 24000, 48000, 96000, 192000
37
};
38
39
int
avpriv_dca_convert_bitstream
(
const
uint8_t
*
src
,
int
src_size,
uint8_t
*dst,
40
int
max_size)
41
{
42
uint32_t mrk;
43
int
i, tmp;
44
const
uint16_t *ssrc = (
const
uint16_t *) src;
45
uint16_t *sdst = (uint16_t *) dst;
46
PutBitContext
pb;
47
48
if
((
unsigned
) src_size > (unsigned) max_size)
49
src_size = max_size;
50
51
mrk =
AV_RB32
(src);
52
switch
(mrk) {
53
case
DCA_SYNCWORD_CORE_BE
:
54
memcpy(dst, src, src_size);
55
return
src_size;
56
case
DCA_SYNCWORD_CORE_LE
:
57
for
(i = 0; i < (src_size + 1) >> 1; i++)
58
*sdst++ =
av_bswap16
(*ssrc++);
59
return
src_size;
60
case
DCA_SYNCWORD_CORE_14B_BE
:
61
case
DCA_SYNCWORD_CORE_14B_LE
:
62
init_put_bits
(&pb, dst, max_size);
63
for
(i = 0; i < (src_size + 1) >> 1; i++, src += 2) {
64
tmp = ((mrk ==
DCA_SYNCWORD_CORE_14B_BE
) ?
AV_RB16
(src) :
AV_RL16
(src)) & 0x3FFF;
65
put_bits
(&pb, 14, tmp);
66
}
67
flush_put_bits
(&pb);
68
return
(
put_bits_count
(&pb) + 7) >> 3;
69
default
:
70
return
AVERROR_INVALIDDATA
;
71
}
72
}
Generated on Sun Mar 8 2015 02:34:49 for FFmpeg by
1.8.2