@ -86,7 +86,7 @@ typedef struct MPADecodeContext {
AVCodecContext * avctx ;
MPADSPContext mpadsp ;
AVFloatDSPContext fdsp ;
AVFrame frame ;
AVFrame * frame ;
} MPADecodeContext ;
# if CONFIG_FLOAT
@ -455,9 +455,6 @@ static av_cold int decode_init(AVCodecContext * avctx)
if ( avctx - > codec_id = = AV_CODEC_ID_MP3ADU )
s - > adu_mode = 1 ;
avcodec_get_frame_defaults ( & s - > frame ) ;
avctx - > coded_frame = & s - > frame ;
return 0 ;
}
@ -1630,12 +1627,13 @@ static int mp_decode_frame(MPADecodeContext *s, OUT_INT **samples,
/* get output buffer */
if ( ! samples ) {
s - > frame . nb_samples = s - > avctx - > frame_size ;
if ( ( ret = ff_get_buffer ( s - > avctx , & s - > frame ) ) < 0 ) {
av_assert0 ( s - > frame ! = NULL ) ;
s - > frame - > nb_samples = s - > avctx - > frame_size ;
if ( ( ret = ff_get_buffer ( s - > avctx , s - > frame ) ) < 0 ) {
av_log ( s - > avctx , AV_LOG_ERROR , " get_buffer() failed \n " ) ;
return ret ;
}
samples = ( OUT_INT * * ) s - > frame . extended_data ;
samples = ( OUT_INT * * ) s - > frame - > extended_data ;
}
/* apply the synthesis filter */
@ -1707,11 +1705,13 @@ static int decode_frame(AVCodecContext * avctx, void *data, int *got_frame_ptr,
buf_size = s - > frame_size ;
}
s - > frame = data ;
ret = mp_decode_frame ( s , NULL , buf , buf_size ) ;
if ( ret > = 0 ) {
* got_frame_ptr = 1 ;
* ( AVFrame * ) data = s - > frame ;
avctx - > sample_rate = s - > sample_rate ;
s - > frame - > nb_samples = avctx - > frame_size ;
* got_frame_ptr = 1 ;
avctx - > sample_rate = s - > sample_rate ;
//FIXME maybe move the other codec info stuff from above here too
} else {
av_log ( avctx , AV_LOG_ERROR , " Error while decoding MPEG audio frame. \n " ) ;
@ -1779,14 +1779,15 @@ static int decode_frame_adu(AVCodecContext *avctx, void *data,
s - > frame_size = len ;
s - > frame = data ;
ret = mp_decode_frame ( s , NULL , buf , buf_size ) ;
if ( ret < 0 ) {
av_log ( avctx , AV_LOG_ERROR , " Error while decoding MPEG audio frame. \n " ) ;
return ret ;
}
* got_frame_ptr = 1 ;
* ( AVFrame * ) data = s - > frame ;
* got_frame_ptr = 1 ;
return buf_size ;
}
@ -1798,7 +1799,6 @@ static int decode_frame_adu(AVCodecContext *avctx, void *data,
* Context for MP3On4 decoder
*/
typedef struct MP3On4DecodeContext {
AVFrame * frame ;
int frames ; ///< number of mp3 frames per block (number of mp3 decoder instances)
int syncword ; ///< syncword patch
const uint8_t * coff ; ///< channel offsets in output buffer
@ -1887,7 +1887,6 @@ static int decode_init_mp3on4(AVCodecContext * avctx)
// Put decoder context in place to make init_decode() happy
avctx - > priv_data = s - > mp3decctx [ 0 ] ;
decode_init ( avctx ) ;
s - > frame = avctx - > coded_frame ;
// Restore mp3on4 context pointer
avctx - > priv_data = s ;
s - > mp3decctx [ 0 ] - > adu_mode = 1 ; // Set adu mode
@ -1924,6 +1923,7 @@ static void flush_mp3on4(AVCodecContext *avctx)
static int decode_frame_mp3on4 ( AVCodecContext * avctx , void * data ,
int * got_frame_ptr , AVPacket * avpkt )
{
AVFrame * frame = data ;
const uint8_t * buf = avpkt - > data ;
int buf_size = avpkt - > size ;
MP3On4DecodeContext * s = avctx - > priv_data ;
@ -1935,12 +1935,12 @@ static int decode_frame_mp3on4(AVCodecContext *avctx, void *data,
int fr , ch , ret ;
/* get output buffer */
s - > frame - > nb_samples = MPA_FRAME_SIZE ;
if ( ( ret = ff_get_buffer ( avctx , s - > frame ) ) < 0 ) {
frame - > nb_samples = MPA_FRAME_SIZE ;
if ( ( ret = ff_get_buffer ( avctx , frame ) ) < 0 ) {
av_log ( avctx , AV_LOG_ERROR , " get_buffer() failed \n " ) ;
return ret ;
}
out_samples = ( OUT_INT * * ) s - > frame - > extended_data ;
out_samples = ( OUT_INT * * ) frame - > extended_data ;
// Discard too short frames
if ( buf_size < HEADER_SIZE )
@ -1990,9 +1990,8 @@ static int decode_frame_mp3on4(AVCodecContext *avctx, void *data,
/* update codec info */
avctx - > sample_rate = s - > mp3decctx [ 0 ] - > sample_rate ;
s - > frame - > nb_samples = out_size / ( avctx - > channels * sizeof ( OUT_INT ) ) ;
* got_frame_ptr = 1 ;
* ( AVFrame * ) data = * s - > frame ;
frame - > nb_samples = out_size / ( avctx - > channels * sizeof ( OUT_INT ) ) ;
* got_frame_ptr = 1 ;
return buf_size ;
}