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
pafaudio.c
Go to the documentation of this file.
1
/*
2
* Packed Animation File audio decoder
3
* Copyright (c) 2012 Paul B Mahol
4
*
5
* This file is part of FFmpeg.
6
*
7
* FFmpeg is free software; you can redistribute it and/or
8
* 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
* FFmpeg is distributed in the hope that it will be useful,
13
* 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
* License along with FFmpeg; if not, write to the Free Software
19
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
*/
21
22
#include "
libavutil/intreadwrite.h
"
23
24
#include "
avcodec.h
"
25
#include "
internal.h
"
26
#include "
mathops.h
"
27
#include "
paf.h
"
28
29
static
av_cold
int
paf_audio_init
(
AVCodecContext
*avctx)
30
{
31
if
(avctx->
channels
!= 2) {
32
av_log
(avctx,
AV_LOG_ERROR
,
"invalid number of channels\n"
);
33
return
AVERROR_INVALIDDATA
;
34
}
35
36
avctx->
channel_layout
=
AV_CH_LAYOUT_STEREO
;
37
avctx->
sample_fmt
=
AV_SAMPLE_FMT_S16
;
38
39
return
0;
40
}
41
42
static
int
paf_audio_decode
(
AVCodecContext
*avctx,
void
*
data
,
43
int
*got_frame,
AVPacket
*
pkt
)
44
{
45
AVFrame
*
frame
=
data
;
46
int16_t *output_samples;
47
const
uint8_t
*
src
= pkt->
data
;
48
int
frames,
ret
, i, j;
49
int16_t
cb
[256];
50
51
frames = pkt->
size
/
PAF_SOUND_FRAME_SIZE
;
52
if
(frames < 1)
53
return
AVERROR_INVALIDDATA
;
54
55
frame->
nb_samples
=
PAF_SOUND_SAMPLES
* frames;
56
if
((ret =
ff_get_buffer
(avctx, frame, 0)) < 0)
57
return
ret
;
58
59
output_samples = (int16_t *)frame->
data
[0];
60
// codebook of 256 16-bit samples and 8-bit indices to it
61
for
(j = 0; j < frames; j++) {
62
for
(i = 0; i < 256; i++)
63
cb[i] =
sign_extend
(
AV_RL16
(src + i * 2), 16);
64
src += 256 * 2;
65
// always 2 channels
66
for
(i = 0; i <
PAF_SOUND_SAMPLES
* 2; i++)
67
*output_samples++ = cb[*src++];
68
}
69
*got_frame = 1;
70
71
return
pkt->
size
;
72
}
73
74
AVCodec
ff_paf_audio_decoder
= {
75
.
name
=
"paf_audio"
,
76
.long_name =
NULL_IF_CONFIG_SMALL
(
"Amazing Studio Packed Animation File Audio"
),
77
.type =
AVMEDIA_TYPE_AUDIO
,
78
.id =
AV_CODEC_ID_PAF_AUDIO
,
79
.init =
paf_audio_init
,
80
.decode =
paf_audio_decode
,
81
.capabilities =
CODEC_CAP_DR1
,
82
};
Generated on Sun Mar 8 2015 02:34:58 for FFmpeg by
1.8.2