Commit | Line | Data |
---|---|---|
2ba45a60 DM |
1 | /* |
2 | * Float MPEG Audio decoder | |
3 | * Copyright (c) 2010 Michael Niedermayer | |
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 "config.h" | |
23 | #include "libavutil/samplefmt.h" | |
24 | ||
25 | #define USE_FLOATS 1 | |
26 | ||
27 | #include "mpegaudio.h" | |
28 | ||
29 | #define SHR(a,b) ((a)*(1.0f/(1<<(b)))) | |
30 | #define FIXR_OLD(a) ((int)((a) * FRAC_ONE + 0.5)) | |
31 | #define FIXR(x) ((float)(x)) | |
32 | #define FIXHR(x) ((float)(x)) | |
33 | #define MULH3(x, y, s) ((s)*(y)*(x)) | |
34 | #define MULLx(x, y, s) ((y)*(x)) | |
35 | #define RENAME(a) a ## _float | |
36 | #define OUT_FMT AV_SAMPLE_FMT_FLT | |
37 | #define OUT_FMT_P AV_SAMPLE_FMT_FLTP | |
38 | ||
39 | #include "mpegaudiodec_template.c" | |
40 | ||
41 | #if CONFIG_MP1FLOAT_DECODER | |
42 | AVCodec ff_mp1float_decoder = { | |
43 | .name = "mp1float", | |
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, | |
f6fa7814 | 49 | .close = decode_close, |
2ba45a60 DM |
50 | .decode = decode_frame, |
51 | .capabilities = CODEC_CAP_DR1, | |
52 | .flush = flush, | |
53 | .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP, | |
54 | AV_SAMPLE_FMT_FLT, | |
55 | AV_SAMPLE_FMT_NONE }, | |
56 | }; | |
57 | #endif | |
58 | #if CONFIG_MP2FLOAT_DECODER | |
59 | AVCodec ff_mp2float_decoder = { | |
60 | .name = "mp2float", | |
61 | .long_name = NULL_IF_CONFIG_SMALL("MP2 (MPEG audio layer 2)"), | |
62 | .type = AVMEDIA_TYPE_AUDIO, | |
63 | .id = AV_CODEC_ID_MP2, | |
64 | .priv_data_size = sizeof(MPADecodeContext), | |
65 | .init = decode_init, | |
66 | .decode = decode_frame, | |
f6fa7814 | 67 | .close = decode_close, |
2ba45a60 DM |
68 | .capabilities = CODEC_CAP_DR1, |
69 | .flush = flush, | |
70 | .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP, | |
71 | AV_SAMPLE_FMT_FLT, | |
72 | AV_SAMPLE_FMT_NONE }, | |
73 | }; | |
74 | #endif | |
75 | #if CONFIG_MP3FLOAT_DECODER | |
76 | AVCodec ff_mp3float_decoder = { | |
77 | .name = "mp3float", | |
78 | .long_name = NULL_IF_CONFIG_SMALL("MP3 (MPEG audio layer 3)"), | |
79 | .type = AVMEDIA_TYPE_AUDIO, | |
80 | .id = AV_CODEC_ID_MP3, | |
81 | .priv_data_size = sizeof(MPADecodeContext), | |
82 | .init = decode_init, | |
f6fa7814 | 83 | .close = decode_close, |
2ba45a60 DM |
84 | .decode = decode_frame, |
85 | .capabilities = CODEC_CAP_DR1, | |
86 | .flush = flush, | |
87 | .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP, | |
88 | AV_SAMPLE_FMT_FLT, | |
89 | AV_SAMPLE_FMT_NONE }, | |
90 | }; | |
91 | #endif | |
92 | #if CONFIG_MP3ADUFLOAT_DECODER | |
93 | AVCodec ff_mp3adufloat_decoder = { | |
94 | .name = "mp3adufloat", | |
95 | .long_name = NULL_IF_CONFIG_SMALL("ADU (Application Data Unit) MP3 (MPEG audio layer 3)"), | |
96 | .type = AVMEDIA_TYPE_AUDIO, | |
97 | .id = AV_CODEC_ID_MP3ADU, | |
98 | .priv_data_size = sizeof(MPADecodeContext), | |
99 | .init = decode_init, | |
f6fa7814 | 100 | .close = decode_close, |
2ba45a60 DM |
101 | .decode = decode_frame_adu, |
102 | .capabilities = CODEC_CAP_DR1, | |
103 | .flush = flush, | |
104 | .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP, | |
105 | AV_SAMPLE_FMT_FLT, | |
106 | AV_SAMPLE_FMT_NONE }, | |
107 | }; | |
108 | #endif | |
109 | #if CONFIG_MP3ON4FLOAT_DECODER | |
110 | AVCodec ff_mp3on4float_decoder = { | |
111 | .name = "mp3on4float", | |
112 | .long_name = NULL_IF_CONFIG_SMALL("MP3onMP4"), | |
113 | .type = AVMEDIA_TYPE_AUDIO, | |
114 | .id = AV_CODEC_ID_MP3ON4, | |
115 | .priv_data_size = sizeof(MP3On4DecodeContext), | |
116 | .init = decode_init_mp3on4, | |
117 | .close = decode_close_mp3on4, | |
118 | .decode = decode_frame_mp3on4, | |
119 | .capabilities = CODEC_CAP_DR1, | |
120 | .flush = flush_mp3on4, | |
121 | .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP, | |
122 | AV_SAMPLE_FMT_NONE }, | |
123 | }; | |
124 | #endif |