commit
d26c9e3ba0
@ -43,12 +43,22 @@
|
|||||||
#define AVMEDIA_TYPE_AUDIO 1
|
#define AVMEDIA_TYPE_AUDIO 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if LIBAVCODEC_VERSION_MAJOR < 54
|
||||||
|
#define MAX_AUDIO_FRAME_SIZE AVCODEC_MAX_AUDIO_FRAME_SIZE
|
||||||
|
#else
|
||||||
|
#define MAX_AUDIO_FRAME_SIZE 192000
|
||||||
|
#endif
|
||||||
|
|
||||||
typedef struct _TSMFFFmpegDecoder
|
typedef struct _TSMFFFmpegDecoder
|
||||||
{
|
{
|
||||||
ITSMFDecoder iface;
|
ITSMFDecoder iface;
|
||||||
|
|
||||||
int media_type;
|
int media_type;
|
||||||
|
#if LIBAVCODEC_VERSION_MAJOR < 55
|
||||||
enum CodecID codec_id;
|
enum CodecID codec_id;
|
||||||
|
#else
|
||||||
|
enum AVCodecID codec_id;
|
||||||
|
#endif
|
||||||
AVCodecContext* codec_context;
|
AVCodecContext* codec_context;
|
||||||
AVCodec* codec;
|
AVCodec* codec;
|
||||||
AVFrame* frame;
|
AVFrame* frame;
|
||||||
@ -98,6 +108,7 @@ static BOOL tsmf_ffmpeg_init_audio_stream(ITSMFDecoder* decoder, const TS_AM_MED
|
|||||||
mdecoder->codec_context->channels = media_type->Channels;
|
mdecoder->codec_context->channels = media_type->Channels;
|
||||||
mdecoder->codec_context->block_align = media_type->BlockAlign;
|
mdecoder->codec_context->block_align = media_type->BlockAlign;
|
||||||
|
|
||||||
|
#if LIBAVCODEC_VERSION_MAJOR < 55
|
||||||
#ifdef AV_CPU_FLAG_SSE2
|
#ifdef AV_CPU_FLAG_SSE2
|
||||||
mdecoder->codec_context->dsp_mask = AV_CPU_FLAG_SSE2 | AV_CPU_FLAG_MMX2;
|
mdecoder->codec_context->dsp_mask = AV_CPU_FLAG_SSE2 | AV_CPU_FLAG_MMX2;
|
||||||
#else
|
#else
|
||||||
@ -107,6 +118,13 @@ static BOOL tsmf_ffmpeg_init_audio_stream(ITSMFDecoder* decoder, const TS_AM_MED
|
|||||||
mdecoder->codec_context->dsp_mask = FF_MM_SSE2 | FF_MM_MMX2;
|
mdecoder->codec_context->dsp_mask = FF_MM_SSE2 | FF_MM_MMX2;
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
#else /* LIBAVCODEC_VERSION_MAJOR < 55 */
|
||||||
|
#ifdef AV_CPU_FLAG_SSE2
|
||||||
|
av_set_cpu_flags_mask(AV_CPU_FLAG_SSE2 | AV_CPU_FLAG_MMX2);
|
||||||
|
#else
|
||||||
|
av_set_cpu_flags_mask(FF_MM_SSE2 | FF_MM_MMX2);
|
||||||
|
#endif
|
||||||
|
#endif /* LIBAVCODEC_VERSION_MAJOR < 55 */
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@ -351,7 +369,7 @@ static BOOL tsmf_ffmpeg_decode_audio(ITSMFDecoder* decoder, const BYTE* data, UI
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (mdecoder->decoded_size_max == 0)
|
if (mdecoder->decoded_size_max == 0)
|
||||||
mdecoder->decoded_size_max = AVCODEC_MAX_AUDIO_FRAME_SIZE + 16;
|
mdecoder->decoded_size_max = MAX_AUDIO_FRAME_SIZE + 16;
|
||||||
mdecoder->decoded_data = malloc(mdecoder->decoded_size_max);
|
mdecoder->decoded_data = malloc(mdecoder->decoded_size_max);
|
||||||
ZeroMemory(mdecoder->decoded_data, mdecoder->decoded_size_max);
|
ZeroMemory(mdecoder->decoded_data, mdecoder->decoded_size_max);
|
||||||
/* align the memory for SSE2 needs */
|
/* align the memory for SSE2 needs */
|
||||||
@ -363,7 +381,7 @@ static BOOL tsmf_ffmpeg_decode_audio(ITSMFDecoder* decoder, const BYTE* data, UI
|
|||||||
while (src_size > 0)
|
while (src_size > 0)
|
||||||
{
|
{
|
||||||
/* Ensure enough space for decoding */
|
/* Ensure enough space for decoding */
|
||||||
if (mdecoder->decoded_size_max - mdecoder->decoded_size < AVCODEC_MAX_AUDIO_FRAME_SIZE)
|
if (mdecoder->decoded_size_max - mdecoder->decoded_size < MAX_AUDIO_FRAME_SIZE)
|
||||||
{
|
{
|
||||||
mdecoder->decoded_size_max = mdecoder->decoded_size_max * 2 + 16;
|
mdecoder->decoded_size_max = mdecoder->decoded_size_max * 2 + 16;
|
||||||
mdecoder->decoded_data = realloc(mdecoder->decoded_data, mdecoder->decoded_size_max);
|
mdecoder->decoded_data = realloc(mdecoder->decoded_data, mdecoder->decoded_size_max);
|
||||||
|
Loading…
Reference in New Issue
Block a user