[FFmpeg-cvslog] r16728 - in trunk: libavcodec/mpegaudio.h libavcodec/mpegaudio_parser.c libavcodec/mpegaudiodec.c libavcodec/mpegaudiodecheader.c libavcodec/mpegaudiodecheader.h libavformat/mp3.c
andoma
subversion
Fri Jan 23 13:09:33 CET 2009
Author: andoma
Date: Fri Jan 23 13:09:32 2009
New Revision: 16728
Log:
Avoid allocating MPADecodeContext on stack.
Instead move relevant fields into MPADecodeHeader and use it
where appropriate.
Modified:
trunk/libavcodec/mpegaudio.h
trunk/libavcodec/mpegaudio_parser.c
trunk/libavcodec/mpegaudiodec.c
trunk/libavcodec/mpegaudiodecheader.c
trunk/libavcodec/mpegaudiodecheader.h
trunk/libavformat/mp3.c
Modified: trunk/libavcodec/mpegaudio.h
==============================================================================
--- trunk/libavcodec/mpegaudio.h Fri Jan 23 10:47:22 2009 (r16727)
+++ trunk/libavcodec/mpegaudio.h Fri Jan 23 13:09:32 2009 (r16728)
@@ -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]);
Modified: trunk/libavcodec/mpegaudio_parser.c
==============================================================================
--- trunk/libavcodec/mpegaudio_parser.c Fri Jan 23 10:47:22 2009 (r16727)
+++ trunk/libavcodec/mpegaudio_parser.c Fri Jan 23 13:09:32 2009 (r16728)
@@ -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(AVCodecParser
#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(AVCodecParser
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++;
Modified: trunk/libavcodec/mpegaudiodec.c
==============================================================================
--- trunk/libavcodec/mpegaudiodec.c Fri Jan 23 10:47:22 2009 (r16727)
+++ trunk/libavcodec/mpegaudiodec.c Fri Jan 23 13:09:32 2009 (r16728)
@@ -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(AVCodecConte
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(AVCodecCo
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;
Modified: trunk/libavcodec/mpegaudiodecheader.c
==============================================================================
--- trunk/libavcodec/mpegaudiodecheader.c Fri Jan 23 10:47:22 2009 (r16727)
+++ trunk/libavcodec/mpegaudiodecheader.c Fri Jan 23 13:09:32 2009 (r16728)
@@ -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;
Modified: trunk/libavcodec/mpegaudiodecheader.h
==============================================================================
--- trunk/libavcodec/mpegaudiodecheader.h Fri Jan 23 10:47:22 2009 (r16727)
+++ trunk/libavcodec/mpegaudiodecheader.h Fri Jan 23 13:09:32 2009 (r16728)
@@ -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 */
Modified: trunk/libavformat/mp3.c
==============================================================================
--- trunk/libavformat/mp3.c Fri Jan 23 10:47:22 2009 (r16727)
+++ trunk/libavformat/mp3.c Fri Jan 23 13:09:32 2009 (r16728)
@@ -395,7 +395,7 @@ static int mp3_parse_vbr_tags(AVFormatCo
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);
More information about the ffmpeg-cvslog
mailing list