diff -rupN a/channels/drdynvc/tsmf/ffmpeg/tsmf_ffmpeg.c b/channels/drdynvc/tsmf/ffmpeg/tsmf_ffmpeg.c --- a/channels/drdynvc/tsmf/ffmpeg/tsmf_ffmpeg.c 2013-01-02 22:46:59.000000000 +0100 +++ b/channels/drdynvc/tsmf/ffmpeg/tsmf_ffmpeg.c 2013-07-22 18:12:18.001576713 +0200 @@ -28,6 +28,8 @@ #include "tsmf_constants.h" #include "tsmf_decoder.h" +#define AVCODEC_MAX_AUDIO_FRAME_SIZE 192000 + /* Compatibility with older FFmpeg */ #if LIBAVUTIL_VERSION_MAJOR < 50 #define AVMEDIA_TYPE_VIDEO 0 @@ -39,7 +41,7 @@ typedef struct _TSMFFFmpegDecoder ITSMFDecoder iface; int media_type; - enum CodecID codec_id; + enum AVCodecID codec_id; AVCodecContext* codec_context; AVCodec* codec; AVFrame* frame; @@ -54,7 +56,7 @@ static boolean tsmf_ffmpeg_init_context( { TSMFFFmpegDecoder* mdecoder = (TSMFFFmpegDecoder*) decoder; - mdecoder->codec_context = avcodec_alloc_context(); + mdecoder->codec_context = avcodec_alloc_context3(NULL); if (!mdecoder->codec_context) { DEBUG_WARN("avcodec_alloc_context failed."); @@ -88,16 +90,6 @@ static boolean tsmf_ffmpeg_init_audio_st mdecoder->codec_context->channels = media_type->Channels; mdecoder->codec_context->block_align = media_type->BlockAlign; -#ifdef AV_CPU_FLAG_SSE2 - mdecoder->codec_context->dsp_mask = AV_CPU_FLAG_SSE2 | AV_CPU_FLAG_MMX2; -#else -#if LIBAVCODEC_VERSION_MAJOR < 53 - mdecoder->codec_context->dsp_mask = FF_MM_SSE2 | FF_MM_MMXEXT; -#else - mdecoder->codec_context->dsp_mask = FF_MM_SSE2 | FF_MM_MMX2; -#endif -#endif - return true; } @@ -174,7 +166,7 @@ static boolean tsmf_ffmpeg_prepare(ITSMF { TSMFFFmpegDecoder* mdecoder = (TSMFFFmpegDecoder*) decoder; - if (avcodec_open(mdecoder->codec_context, mdecoder->codec) < 0) + if (avcodec_open2(mdecoder->codec_context, mdecoder->codec, NULL) < 0) { DEBUG_WARN("avcodec_open failed."); return false; @@ -372,8 +364,9 @@ static boolean tsmf_ffmpeg_decode_audio( av_init_packet(&pkt); pkt.data = (uint8*) src; pkt.size = src_size; - len = avcodec_decode_audio3(mdecoder->codec_context, - (int16_t*) dst, &frame_size, &pkt); + AVFrame * frame = avcodec_alloc_frame (); + len = avcodec_decode_audio4(mdecoder->codec_context, + frame, &frame_size, &pkt); } #endif if (len <= 0 || frame_size <= 0) @@ -499,7 +492,6 @@ TSMFDecoderEntry(void) if (!initialized) { - avcodec_init(); avcodec_register_all(); initialized = true; }