From a72b579a7205e16b0877c33097143ca97ea05a2a Mon Sep 17 00:00:00 2001 From: Alexis Ballier <aballier@gentoo.org> Date: Thu, 25 Jul 2013 07:40:31 -0400 Subject: [PATCH 1/3] DVDAudioCodecPcm: Do not use AVCODEC_MAX_AUDIO_FRAME_SIZE since it is gone in FFmpeg 2.0 and dynamically allocate buffers as needed. (cherry picked from commit 95f0fa3779b6d89c30e8a56ae07d50e6de5f5425) diff -up xbmc-12.2/xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecPcm.cpp.orig xbmc-12.2/xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecPcm.cpp --- xbmc-12.2/xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecPcm.cpp.orig 2013-09-11 22:03:30.401441524 +0300 +++ xbmc-12.2/xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecPcm.cpp 2013-09-11 22:03:30.432441905 +0300 @@ -116,13 +116,15 @@ CDVDAudioCodecPcm::CDVDAudioCodecPcm() : m_codecID = AV_CODEC_ID_NONE; m_iOutputChannels = 0; - memset(m_decodedData, 0, sizeof(m_decodedData)); + m_decodedData = NULL; + m_decodedDataBufSize = 0; memset(table, 0, sizeof(table)); } CDVDAudioCodecPcm::~CDVDAudioCodecPcm() { Dispose(); + delete m_decodedData; } bool CDVDAudioCodecPcm::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options) @@ -172,8 +174,14 @@ int CDVDAudioCodecPcm::Decode(BYTE* pDat src = pData; int buf_size = iSize; - if (iSize > AVCODEC_MAX_AUDIO_FRAME_SIZE / 2) - iSize = AVCODEC_MAX_AUDIO_FRAME_SIZE / 2; + if (iSize > m_decodedDataBufSize) + { + delete m_decodedData; + samples = m_decodedData = new short[iSize]; + if(!m_decodedData) + return -1; + m_decodedDataBufSize = iSize; + } switch (m_codecID) { diff -up xbmc-12.2/xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecPcm.h.orig xbmc-12.2/xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecPcm.h --- xbmc-12.2/xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecPcm.h.orig 2013-09-11 22:03:30.401441524 +0300 +++ xbmc-12.2/xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecPcm.h 2013-09-11 22:03:30.432441905 +0300 @@ -41,7 +41,8 @@ public: protected: virtual void SetDefault(); - short m_decodedData[131072]; // could be a bit to big + short* m_decodedData; + int m_decodedDataBufSize; int m_decodedDataSize; AVCodecID m_codecID;