mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
Avoid allocating MPADecodeContext on stack.
Instead move relevant fields into MPADecodeHeader and use it where appropriate. Originally committed as revision 16728 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
2d4eeaadc4
commit
cf92cec7d8
@ -90,23 +90,30 @@ typedef int32_t MPA_INT;
|
||||
|
||||
struct GranuleDef;
|
||||
|
||||
#define MPA_DECODE_HEADER \
|
||||
int frame_size; \
|
||||
int error_protection; \
|
||||
int layer; \
|
||||
int sample_rate; \
|
||||
int sample_rate_index; /* between 0 and 8 */ \
|
||||
int bit_rate; \
|
||||
int nb_channels; \
|
||||
int mode; \
|
||||
int mode_ext; \
|
||||
int lsf;
|
||||
|
||||
typedef struct MPADecodeHeader {
|
||||
MPA_DECODE_HEADER
|
||||
} MPADecodeHeader;
|
||||
|
||||
typedef struct MPADecodeContext {
|
||||
MPA_DECODE_HEADER
|
||||
DECLARE_ALIGNED_8(uint8_t, last_buf[2*BACKSTEP_SIZE + EXTRABYTES]);
|
||||
int last_buf_size;
|
||||
int frame_size;
|
||||
/* next header (used in free format parsing) */
|
||||
uint32_t free_format_next_header;
|
||||
int error_protection;
|
||||
int layer;
|
||||
int sample_rate;
|
||||
int sample_rate_index; /* between 0 and 8 */
|
||||
int bit_rate;
|
||||
GetBitContext gb;
|
||||
GetBitContext in_gb;
|
||||
int nb_channels;
|
||||
int mode;
|
||||
int mode_ext;
|
||||
int lsf;
|
||||
DECLARE_ALIGNED_16(MPA_INT, synth_buf[MPA_MAX_CHANNELS][512 * 2]);
|
||||
int synth_buf_offset[MPA_MAX_CHANNELS];
|
||||
DECLARE_ALIGNED_16(int32_t, sb_samples[MPA_MAX_CHANNELS][36][SBLIMIT]);
|
||||
|
@ -46,8 +46,7 @@ typedef struct MpegAudioParseContext {
|
||||
header, otherwise the coded frame size in bytes */
|
||||
int ff_mpa_decode_header(AVCodecContext *avctx, uint32_t head, int *sample_rate, int *channels, int *frame_size, int *bit_rate)
|
||||
{
|
||||
MPADecodeContext s1, *s = &s1;
|
||||
s1.avctx = avctx;
|
||||
MPADecodeHeader s1, *s = &s1;
|
||||
|
||||
if (ff_mpa_check_header(head) != 0)
|
||||
return -1;
|
||||
@ -145,7 +144,7 @@ static int mpegaudio_parse(AVCodecParserContext *s1,
|
||||
|
||||
#if 0
|
||||
/* free format: prepare to compute frame size */
|
||||
if (ff_mpegaudio_decode_header(s, header) == 1) {
|
||||
if (ff_mpegaudio_decode_header((MPADecodeHeader *)s, header) == 1) {
|
||||
s->frame_size = -1;
|
||||
}
|
||||
#endif
|
||||
@ -200,7 +199,7 @@ static int mpegaudio_parse(AVCodecParserContext *s1,
|
||||
s->free_format_frame_size -= padding;
|
||||
dprintf(avctx, "free frame size=%d padding=%d\n",
|
||||
s->free_format_frame_size, padding);
|
||||
ff_mpegaudio_decode_header(s, header1);
|
||||
ff_mpegaudio_decode_header((MPADecodeHeader *)s, header1);
|
||||
goto next_data;
|
||||
}
|
||||
p++;
|
||||
|
@ -2277,7 +2277,7 @@ retry:
|
||||
goto retry;
|
||||
}
|
||||
|
||||
if (ff_mpegaudio_decode_header(s, header) == 1) {
|
||||
if (ff_mpegaudio_decode_header((MPADecodeHeader *)s, header) == 1) {
|
||||
/* free format: prepare to compute frame size */
|
||||
s->frame_size = -1;
|
||||
return -1;
|
||||
@ -2342,7 +2342,7 @@ static int decode_frame_adu(AVCodecContext * avctx,
|
||||
return buf_size;
|
||||
}
|
||||
|
||||
ff_mpegaudio_decode_header(s, header);
|
||||
ff_mpegaudio_decode_header((MPADecodeHeader *)s, header);
|
||||
/* update codec info */
|
||||
avctx->sample_rate = s->sample_rate;
|
||||
avctx->channels = s->nb_channels;
|
||||
@ -2491,7 +2491,7 @@ static int decode_frame_mp3on4(AVCodecContext * avctx,
|
||||
if (ff_mpa_check_header(header) < 0) // Bad header, discard block
|
||||
break;
|
||||
|
||||
ff_mpegaudio_decode_header(m, header);
|
||||
ff_mpegaudio_decode_header((MPADecodeHeader *)m, header);
|
||||
out_size += mp_decode_frame(m, outptr, buf, fsize);
|
||||
buf += fsize;
|
||||
len -= fsize;
|
||||
|
@ -30,7 +30,7 @@
|
||||
#include "mpegaudiodata.h"
|
||||
|
||||
|
||||
int ff_mpegaudio_decode_header(MPADecodeContext *s, uint32_t header)
|
||||
int ff_mpegaudio_decode_header(MPADecodeHeader *s, uint32_t header)
|
||||
{
|
||||
int sample_rate, frame_size, mpeg25, padding;
|
||||
int sample_rate_index, bitrate_index;
|
||||
|
@ -34,6 +34,6 @@
|
||||
/* header decoding. MUST check the header before because no
|
||||
consistency check is done there. Return 1 if free format found and
|
||||
that the frame size must be computed externally */
|
||||
int ff_mpegaudio_decode_header(MPADecodeContext *s, uint32_t header);
|
||||
int ff_mpegaudio_decode_header(MPADecodeHeader *s, uint32_t header);
|
||||
|
||||
#endif /* AVCODEC_MPEGAUDIODECHEADER_H */
|
||||
|
@ -395,7 +395,7 @@ static int mp3_parse_vbr_tags(AVFormatContext *s, AVStream *st, int64_t base)
|
||||
uint32_t v, spf;
|
||||
int frames = -1; /* Total number of frames in file */
|
||||
const int64_t xing_offtbl[2][2] = {{32, 17}, {17,9}};
|
||||
MPADecodeContext c;
|
||||
MPADecodeHeader c;
|
||||
int vbrtag_size = 0;
|
||||
|
||||
v = get_be32(s->pb);
|
||||
|
Loading…
Reference in New Issue
Block a user