FFmpeg
mpegaudiodec_fixed.c
Go to the documentation of this file.
1 /*
2  * Fixed-point MPEG audio decoder
3  *
4  * This file is part of FFmpeg.
5  *
6  * FFmpeg 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  * FFmpeg 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 FFmpeg; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20 
21 #include "config.h"
22 #include "libavutil/samplefmt.h"
23 
24 #define USE_FLOATS 0
25 
26 #include "mpegaudio.h"
27 
28 #define SHR(a,b) (((int)(a))>>(b))
29 /* WARNING: only correct for positive numbers */
30 #define FIXR_OLD(a) ((int)((a) * FRAC_ONE + 0.5))
31 #define FIXR(a) ((int)((a) * FRAC_ONE + 0.5))
32 #define FIXHR(a) ((int)((a) * (1LL<<32) + 0.5))
33 #define MULH3(x, y, s) MULH((s)*(x), y)
34 #define MULLx(x, y, s) MULL((int)(x),(y),s)
35 #define RENAME(a) a ## _fixed
36 #define OUT_FMT AV_SAMPLE_FMT_S16
37 #define OUT_FMT_P AV_SAMPLE_FMT_S16P
38 
39 #include "mpegaudiodec_template.c"
40 
41 #if CONFIG_MP1_DECODER
43  .name = "mp1",
44  .long_name = NULL_IF_CONFIG_SMALL("MP1 (MPEG audio layer 1)"),
45  .type = AVMEDIA_TYPE_AUDIO,
46  .id = AV_CODEC_ID_MP1,
47  .priv_data_size = sizeof(MPADecodeContext),
48  .init = decode_init,
50  .capabilities = AV_CODEC_CAP_DR1,
51  .flush = flush,
52  .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16P,
55 };
56 #endif
57 #if CONFIG_MP2_DECODER
59  .name = "mp2",
60  .long_name = NULL_IF_CONFIG_SMALL("MP2 (MPEG audio layer 2)"),
61  .type = AVMEDIA_TYPE_AUDIO,
62  .id = AV_CODEC_ID_MP2,
63  .priv_data_size = sizeof(MPADecodeContext),
64  .init = decode_init,
66  .capabilities = AV_CODEC_CAP_DR1,
67  .flush = flush,
68  .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16P,
71 };
72 #endif
73 #if CONFIG_MP3_DECODER
75  .name = "mp3",
76  .long_name = NULL_IF_CONFIG_SMALL("MP3 (MPEG audio layer 3)"),
77  .type = AVMEDIA_TYPE_AUDIO,
78  .id = AV_CODEC_ID_MP3,
79  .priv_data_size = sizeof(MPADecodeContext),
80  .init = decode_init,
82  .capabilities = AV_CODEC_CAP_DR1,
83  .flush = flush,
84  .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16P,
87 };
88 #endif
89 #if CONFIG_MP3ADU_DECODER
91  .name = "mp3adu",
92  .long_name = NULL_IF_CONFIG_SMALL("ADU (Application Data Unit) MP3 (MPEG audio layer 3)"),
93  .type = AVMEDIA_TYPE_AUDIO,
94  .id = AV_CODEC_ID_MP3ADU,
95  .priv_data_size = sizeof(MPADecodeContext),
96  .init = decode_init,
97  .decode = decode_frame_adu,
98  .capabilities = AV_CODEC_CAP_DR1,
99  .flush = flush,
100  .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16P,
103 };
104 #endif
105 #if CONFIG_MP3ON4_DECODER
107  .name = "mp3on4",
108  .long_name = NULL_IF_CONFIG_SMALL("MP3onMP4"),
109  .type = AVMEDIA_TYPE_AUDIO,
110  .id = AV_CODEC_ID_MP3ON4,
111  .priv_data_size = sizeof(MP3On4DecodeContext),
112  .init = decode_init_mp3on4,
113  .close = decode_close_mp3on4,
114  .decode = decode_frame_mp3on4,
115  .capabilities = AV_CODEC_CAP_DR1,
116  .flush = flush_mp3on4,
117  .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16P,
119 };
120 #endif
AVCodec
AVCodec.
Definition: avcodec.h:3481
init
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
sample_fmts
static enum AVSampleFormat sample_fmts[]
Definition: adpcmenc.c:686
ff_mp3adu_decoder
AVCodec ff_mp3adu_decoder
AV_CODEC_ID_MP3ON4
@ AV_CODEC_ID_MP3ON4
Definition: avcodec.h:578
ff_mp3_decoder
AVCodec ff_mp3_decoder
MPADecodeContext
Definition: mpegaudiodec_template.c:70
AV_CODEC_ID_MP3ADU
@ AV_CODEC_ID_MP3ADU
Definition: avcodec.h:577
samplefmt.h
AV_CODEC_ID_MP3
@ AV_CODEC_ID_MP3
preferred ID for decoding MPEG audio layer 1, 2 or 3
Definition: avcodec.h:565
decode
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
Definition: decode_audio.c:42
mpegaudiodec_template.c
AVMEDIA_TYPE_AUDIO
@ AVMEDIA_TYPE_AUDIO
Definition: avutil.h:202
AV_CODEC_ID_MP2
@ AV_CODEC_ID_MP2
Definition: avcodec.h:564
flush
static void flush(AVCodecContext *avctx)
Definition: aacdec_template.c:500
AV_CODEC_CAP_DR1
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
Definition: avcodec.h:981
NULL_IF_CONFIG_SMALL
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition: internal.h:188
ff_mp2_decoder
AVCodec ff_mp2_decoder
AV_SAMPLE_FMT_NONE
@ AV_SAMPLE_FMT_NONE
Definition: samplefmt.h:59
AV_SAMPLE_FMT_S16P
@ AV_SAMPLE_FMT_S16P
signed 16 bits, planar
Definition: samplefmt.h:67
AVSampleFormat
AVSampleFormat
Audio sample formats.
Definition: samplefmt.h:58
decode_init
static av_cold int decode_init(AVCodecContext *avctx)
Definition: 4xm.c:988
AV_SAMPLE_FMT_S16
@ AV_SAMPLE_FMT_S16
signed 16 bits
Definition: samplefmt.h:61
AVCodec::name
const char * name
Name of the codec implementation.
Definition: avcodec.h:3488
mpegaudio.h
config.h
decode_frame
static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
Definition: 4xm.c:834
ff_mp1_decoder
AVCodec ff_mp1_decoder
ff_mp3on4_decoder
AVCodec ff_mp3on4_decoder
AV_CODEC_ID_MP1
@ AV_CODEC_ID_MP1
Definition: avcodec.h:606