Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
F
ffmpeg
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
ffmpeg
Commits
3ffed68c
Commit
3ffed68c
authored
Aug 27, 2012
by
Justin Ruggles
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
mpegaudiodec: use planar sample format for output unless packed is requested
parent
2d3993ce
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
61 additions
and
48 deletions
+61
-48
mpegaudiodec.c
libavcodec/mpegaudiodec.c
+47
-48
mpegaudiodec_float.c
libavcodec/mpegaudiodec_float.c
+14
-0
No files found.
libavcodec/mpegaudiodec.c
View file @
3ffed68c
...
...
@@ -93,7 +93,8 @@ typedef struct MPADecodeContext {
# define MULH3(x, y, s) ((s)*(y)*(x))
# define MULLx(x, y, s) ((y)*(x))
# define RENAME(a) a ## _float
# define OUT_FMT AV_SAMPLE_FMT_FLT
# define OUT_FMT AV_SAMPLE_FMT_FLT
# define OUT_FMT_P AV_SAMPLE_FMT_FLTP
#else
# define SHR(a,b) ((a)>>(b))
/* WARNING: only correct for positive numbers */
...
...
@@ -103,7 +104,8 @@ typedef struct MPADecodeContext {
# define MULH3(x, y, s) MULH((s)*(x), y)
# define MULLx(x, y, s) MULL(x,y,s)
# define RENAME(a) a ## _fixed
# define OUT_FMT AV_SAMPLE_FMT_S16
# define OUT_FMT AV_SAMPLE_FMT_S16
# define OUT_FMT_P AV_SAMPLE_FMT_S16P
#endif
/****************/
...
...
@@ -434,7 +436,11 @@ static av_cold int decode_init(AVCodecContext * avctx)
ff_mpadsp_init
(
&
s
->
mpadsp
);
ff_dsputil_init
(
&
s
->
dsp
,
avctx
);
avctx
->
sample_fmt
=
OUT_FMT
;
if
(
avctx
->
request_sample_fmt
==
OUT_FMT
&&
avctx
->
codec_id
!=
AV_CODEC_ID_MP3ON4
)
avctx
->
sample_fmt
=
OUT_FMT
;
else
avctx
->
sample_fmt
=
OUT_FMT_P
;
s
->
err_recognition
=
avctx
->
err_recognition
;
if
(
avctx
->
codec_id
==
AV_CODEC_ID_MP3ADU
)
...
...
@@ -1546,7 +1552,7 @@ static int mp_decode_layer3(MPADecodeContext *s)
return
nb_granules
*
18
;
}
static
int
mp_decode_frame
(
MPADecodeContext
*
s
,
OUT_INT
*
samples
,
static
int
mp_decode_frame
(
MPADecodeContext
*
s
,
OUT_INT
*
*
samples
,
const
uint8_t
*
buf
,
int
buf_size
)
{
int
i
,
nb_frames
,
ch
,
ret
;
...
...
@@ -1609,20 +1615,26 @@ static int mp_decode_frame(MPADecodeContext *s, OUT_INT *samples,
av_log
(
s
->
avctx
,
AV_LOG_ERROR
,
"get_buffer() failed
\n
"
);
return
ret
;
}
samples
=
(
OUT_INT
*
)
s
->
frame
.
data
[
0
]
;
samples
=
(
OUT_INT
*
*
)
s
->
frame
.
extended_data
;
}
/* apply the synthesis filter */
for
(
ch
=
0
;
ch
<
s
->
nb_channels
;
ch
++
)
{
samples_ptr
=
samples
+
ch
;
int
sample_stride
;
if
(
s
->
avctx
->
sample_fmt
==
OUT_FMT_P
)
{
samples_ptr
=
samples
[
ch
];
sample_stride
=
1
;
}
else
{
samples_ptr
=
samples
[
0
]
+
ch
;
sample_stride
=
s
->
nb_channels
;
}
for
(
i
=
0
;
i
<
nb_frames
;
i
++
)
{
RENAME
(
ff_mpa_synth_filter
)(
&
s
->
mpadsp
,
s
->
synth_buf
[
ch
],
&
(
s
->
synth_buf_offset
[
ch
]),
RENAME
(
ff_mpa_synth_window
),
&
s
->
dither_state
,
samples_ptr
,
s
->
nb_channels
,
s
->
sb_samples
[
ch
][
i
]);
samples_ptr
+=
32
*
s
->
nb_channels
;
RENAME
(
ff_mpa_synth_filter
)(
&
s
->
mpadsp
,
s
->
synth_buf
[
ch
],
&
(
s
->
synth_buf_offset
[
ch
]),
RENAME
(
ff_mpa_synth_window
),
&
s
->
dither_state
,
samples_ptr
,
sample_stride
,
s
->
sb_samples
[
ch
][
i
]);
samples_ptr
+=
32
*
sample_stride
;
}
}
...
...
@@ -1760,7 +1772,6 @@ typedef struct MP3On4DecodeContext {
int
syncword
;
///< syncword patch
const
uint8_t
*
coff
;
///< channel offsets in output buffer
MPADecodeContext
*
mp3decctx
[
5
];
///< MPADecodeContext for every decoder instance
OUT_INT
*
decoded_buf
;
///< output buffer for decoded samples
}
MP3On4DecodeContext
;
#include "mpeg4audio.h"
...
...
@@ -1802,8 +1813,6 @@ static av_cold int decode_close_mp3on4(AVCodecContext * avctx)
for
(
i
=
0
;
i
<
s
->
frames
;
i
++
)
av_free
(
s
->
mp3decctx
[
i
]);
av_freep
(
&
s
->
decoded_buf
);
return
0
;
}
...
...
@@ -1864,14 +1873,6 @@ static int decode_init_mp3on4(AVCodecContext * avctx)
s
->
mp3decctx
[
i
]
->
mpadsp
=
s
->
mp3decctx
[
0
]
->
mpadsp
;
}
/* Allocate buffer for multi-channel output if needed */
if
(
s
->
frames
>
1
)
{
s
->
decoded_buf
=
av_malloc
(
MPA_FRAME_SIZE
*
MPA_MAX_CHANNELS
*
sizeof
(
*
s
->
decoded_buf
));
if
(
!
s
->
decoded_buf
)
goto
alloc_fail
;
}
return
0
;
alloc_fail:
decode_close_mp3on4
(
avctx
);
...
...
@@ -1898,9 +1899,9 @@ static int decode_frame_mp3on4(AVCodecContext *avctx, void *data,
MPADecodeContext
*
m
;
int
fsize
,
len
=
buf_size
,
out_size
=
0
;
uint32_t
header
;
OUT_INT
*
out_samples
;
OUT_INT
*
outptr
,
*
bp
;
int
fr
,
j
,
n
,
ch
,
ret
;
OUT_INT
*
*
out_samples
;
OUT_INT
*
outptr
[
2
]
;
int
fr
,
ch
,
ret
;
/* get output buffer */
s
->
frame
->
nb_samples
=
MPA_FRAME_SIZE
;
...
...
@@ -1908,15 +1909,12 @@ static int decode_frame_mp3on4(AVCodecContext *avctx, void *data,
av_log
(
avctx
,
AV_LOG_ERROR
,
"get_buffer() failed
\n
"
);
return
ret
;
}
out_samples
=
(
OUT_INT
*
)
s
->
frame
->
data
[
0
]
;
out_samples
=
(
OUT_INT
*
*
)
s
->
frame
->
extended_data
;
// Discard too short frames
if
(
buf_size
<
HEADER_SIZE
)
return
AVERROR_INVALIDDATA
;
// If only one decoder interleave is not needed
outptr
=
s
->
frames
==
1
?
out_samples
:
s
->
decoded_buf
;
avctx
->
bit_rate
=
0
;
ch
=
0
;
...
...
@@ -1944,6 +1942,10 @@ static int decode_frame_mp3on4(AVCodecContext *avctx, void *data,
}
ch
+=
m
->
nb_channels
;
outptr
[
0
]
=
out_samples
[
s
->
coff
[
fr
]];
if
(
m
->
nb_channels
>
1
)
outptr
[
1
]
=
out_samples
[
s
->
coff
[
fr
]
+
1
];
if
((
ret
=
mp_decode_frame
(
m
,
outptr
,
buf
,
fsize
))
<
0
)
return
ret
;
...
...
@@ -1951,23 +1953,6 @@ static int decode_frame_mp3on4(AVCodecContext *avctx, void *data,
buf
+=
fsize
;
len
-=
fsize
;
if
(
s
->
frames
>
1
)
{
n
=
m
->
avctx
->
frame_size
*
m
->
nb_channels
;
/* interleave output data */
bp
=
out_samples
+
s
->
coff
[
fr
];
if
(
m
->
nb_channels
==
1
)
{
for
(
j
=
0
;
j
<
n
;
j
++
)
{
*
bp
=
s
->
decoded_buf
[
j
];
bp
+=
avctx
->
channels
;
}
}
else
{
for
(
j
=
0
;
j
<
n
;
j
++
)
{
bp
[
0
]
=
s
->
decoded_buf
[
j
++
];
bp
[
1
]
=
s
->
decoded_buf
[
j
];
bp
+=
avctx
->
channels
;
}
}
}
avctx
->
bit_rate
+=
m
->
bit_rate
;
}
...
...
@@ -1994,6 +1979,9 @@ AVCodec ff_mp1_decoder = {
.
capabilities
=
CODEC_CAP_DR1
,
.
flush
=
flush
,
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"MP1 (MPEG audio layer 1)"
),
.
sample_fmts
=
(
const
enum
AVSampleFormat
[])
{
AV_SAMPLE_FMT_S16P
,
AV_SAMPLE_FMT_S16
,
AV_SAMPLE_FMT_NONE
},
};
#endif
#if CONFIG_MP2_DECODER
...
...
@@ -2007,6 +1995,9 @@ AVCodec ff_mp2_decoder = {
.
capabilities
=
CODEC_CAP_DR1
,
.
flush
=
flush
,
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"MP2 (MPEG audio layer 2)"
),
.
sample_fmts
=
(
const
enum
AVSampleFormat
[])
{
AV_SAMPLE_FMT_S16P
,
AV_SAMPLE_FMT_S16
,
AV_SAMPLE_FMT_NONE
},
};
#endif
#if CONFIG_MP3_DECODER
...
...
@@ -2020,6 +2011,9 @@ AVCodec ff_mp3_decoder = {
.
capabilities
=
CODEC_CAP_DR1
,
.
flush
=
flush
,
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"MP3 (MPEG audio layer 3)"
),
.
sample_fmts
=
(
const
enum
AVSampleFormat
[])
{
AV_SAMPLE_FMT_S16P
,
AV_SAMPLE_FMT_S16
,
AV_SAMPLE_FMT_NONE
},
};
#endif
#if CONFIG_MP3ADU_DECODER
...
...
@@ -2033,6 +2027,9 @@ AVCodec ff_mp3adu_decoder = {
.
capabilities
=
CODEC_CAP_DR1
,
.
flush
=
flush
,
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"ADU (Application Data Unit) MP3 (MPEG audio layer 3)"
),
.
sample_fmts
=
(
const
enum
AVSampleFormat
[])
{
AV_SAMPLE_FMT_S16P
,
AV_SAMPLE_FMT_S16
,
AV_SAMPLE_FMT_NONE
},
};
#endif
#if CONFIG_MP3ON4_DECODER
...
...
@@ -2047,6 +2044,8 @@ AVCodec ff_mp3on4_decoder = {
.
capabilities
=
CODEC_CAP_DR1
,
.
flush
=
flush_mp3on4
,
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"MP3onMP4"
),
.
sample_fmts
=
(
const
enum
AVSampleFormat
[])
{
AV_SAMPLE_FMT_S16P
,
AV_SAMPLE_FMT_NONE
},
};
#endif
#endif
libavcodec/mpegaudiodec_float.c
View file @
3ffed68c
...
...
@@ -33,6 +33,9 @@ AVCodec ff_mp1float_decoder = {
.
capabilities
=
CODEC_CAP_DR1
,
.
flush
=
flush
,
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"MP1 (MPEG audio layer 1)"
),
.
sample_fmts
=
(
const
enum
AVSampleFormat
[])
{
AV_SAMPLE_FMT_FLTP
,
AV_SAMPLE_FMT_FLT
,
AV_SAMPLE_FMT_NONE
},
};
#endif
#if CONFIG_MP2FLOAT_DECODER
...
...
@@ -46,6 +49,9 @@ AVCodec ff_mp2float_decoder = {
.
capabilities
=
CODEC_CAP_DR1
,
.
flush
=
flush
,
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"MP2 (MPEG audio layer 2)"
),
.
sample_fmts
=
(
const
enum
AVSampleFormat
[])
{
AV_SAMPLE_FMT_FLTP
,
AV_SAMPLE_FMT_FLT
,
AV_SAMPLE_FMT_NONE
},
};
#endif
#if CONFIG_MP3FLOAT_DECODER
...
...
@@ -59,6 +65,9 @@ AVCodec ff_mp3float_decoder = {
.
capabilities
=
CODEC_CAP_DR1
,
.
flush
=
flush
,
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"MP3 (MPEG audio layer 3)"
),
.
sample_fmts
=
(
const
enum
AVSampleFormat
[])
{
AV_SAMPLE_FMT_FLTP
,
AV_SAMPLE_FMT_FLT
,
AV_SAMPLE_FMT_NONE
},
};
#endif
#if CONFIG_MP3ADUFLOAT_DECODER
...
...
@@ -72,6 +81,9 @@ AVCodec ff_mp3adufloat_decoder = {
.
capabilities
=
CODEC_CAP_DR1
,
.
flush
=
flush
,
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"ADU (Application Data Unit) MP3 (MPEG audio layer 3)"
),
.
sample_fmts
=
(
const
enum
AVSampleFormat
[])
{
AV_SAMPLE_FMT_FLTP
,
AV_SAMPLE_FMT_FLT
,
AV_SAMPLE_FMT_NONE
},
};
#endif
#if CONFIG_MP3ON4FLOAT_DECODER
...
...
@@ -86,5 +98,7 @@ AVCodec ff_mp3on4float_decoder = {
.
capabilities
=
CODEC_CAP_DR1
,
.
flush
=
flush_mp3on4
,
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"MP3onMP4"
),
.
sample_fmts
=
(
const
enum
AVSampleFormat
[])
{
AV_SAMPLE_FMT_FLTP
,
AV_SAMPLE_FMT_NONE
},
};
#endif
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment