|
|
|
@@ -918,22 +918,44 @@ int avcodec_decode_video(AVCodecContext *avctx, AVFrame *picture, |
|
|
|
*number of bytes used. If no frame could be decompressed, |
|
|
|
*frame_size_ptr is zero. Otherwise, it is the decompressed frame |
|
|
|
*size in BYTES. */ |
|
|
|
int avcodec_decode_audio(AVCodecContext *avctx, int16_t *samples, |
|
|
|
int avcodec_decode_audio2(AVCodecContext *avctx, int16_t *samples, |
|
|
|
int *frame_size_ptr, |
|
|
|
uint8_t *buf, int buf_size) |
|
|
|
{ |
|
|
|
int ret; |
|
|
|
|
|
|
|
*frame_size_ptr= 0; |
|
|
|
//FIXME remove the check below _after_ ensuring that all audio check that the available space is enough |
|
|
|
if(*frame_size_ptr < AVCODEC_MAX_AUDIO_FRAME_SIZE){ |
|
|
|
av_log(avctx, AV_LOG_ERROR, "buffer smaller then AVCODEC_MAX_AUDIO_FRAME_SIZE\n"); |
|
|
|
return -1; |
|
|
|
} |
|
|
|
if(*frame_size_ptr < FF_MIN_BUFFER_SIZE || |
|
|
|
*frame_size_ptr < avctx->channels * avctx->frame_size * sizeof(int16_t) || |
|
|
|
*frame_size_ptr < buf_size){ |
|
|
|
av_log(avctx, AV_LOG_ERROR, "buffer too small\n"); |
|
|
|
return -1; |
|
|
|
} |
|
|
|
if((avctx->codec->capabilities & CODEC_CAP_DELAY) || buf_size){ |
|
|
|
ret = avctx->codec->decode(avctx, samples, frame_size_ptr, |
|
|
|
buf, buf_size); |
|
|
|
avctx->frame_number++; |
|
|
|
}else |
|
|
|
}else{ |
|
|
|
ret= 0; |
|
|
|
*frame_size_ptr=0; |
|
|
|
} |
|
|
|
return ret; |
|
|
|
} |
|
|
|
|
|
|
|
#if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0) |
|
|
|
int avcodec_decode_audio(AVCodecContext *avctx, int16_t *samples, |
|
|
|
int *frame_size_ptr, |
|
|
|
uint8_t *buf, int buf_size){ |
|
|
|
*frame_size_ptr= AVCODEC_MAX_AUDIO_FRAME_SIZE; |
|
|
|
return avcodec_decode_audio2(avctx, samples, frame_size_ptr, buf, buf_size); |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
/* decode a subtitle message. return -1 if error, otherwise return the |
|
|
|
*number of bytes used. If no subtitle could be decompressed, |
|
|
|
*got_sub_ptr is zero. Otherwise, the subtitle is stored in *sub. */ |
|
|
|
|