diff -N'urpax*~' -x'*.orig' -x'*.rej' xbmc-pvr-testing2-29467/xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecFFmpeg.cpp xbmc-pvr-testing2-29467-ac3-wrk/xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecFFmpeg.cpp --- xbmc-pvr-testing2-29467/xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecFFmpeg.cpp 2010-04-24 05:06:25.000000000 +0300 +++ xbmc-pvr-testing2-29467-ac3-wrk/xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecFFmpeg.cpp 2010-04-25 22:11:57.499963214 +0300 @@ -158,15 +158,12 @@ int CDVDAudioCodecFFmpeg::Decode(BYTE* p , pData , iSize); -#if (LIBAVCODEC_VERSION_INT > AV_VERSION_INT(52, 59, 0)) - #error Make sure upstream version still needs this workaround (ffmpeg issue #1709) -#endif - /* upstream ac3dec is bugged, returns the packet size, not a negative value on error */ +#if LIBAVCODEC_VERSION_INT <= AV_VERSION_INT(52, 66, 0) + /* upstream ac3dec was bugged, returning the packet size on error */ + /* this was fixed between libavcodec 52.66 and 52.67 */ if (m_pCodecContext->codec_id == CODEC_ID_AC3 && iBytesUsed > iSize) - { - m_iBufferSize1 = 0; - return iSize; - } + iBytesUsed = iSize; +#endif if(m_iBufferSize1 == 0 && iBytesUsed >= 0) m_iBuffered += iBytesUsed;