Sophie

Sophie

distrib > Mandriva > 2010.1 > i586 > media > contrib-updates-src > by-pkgid > f722e3fddb6bcd9335a8848a4b05a73c > files > 35

xbmc-10.1-1.pvr.2mdv2010.2.src.rpm

diff --git a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp
index b70f921..a031ef7 100644
--- a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp
+++ b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp
@@ -971,12 +971,23 @@ void CDVDDemuxFFmpeg::AddStream(int iId)
         if (m_bAVI && pStream->codec->codec_id == CODEC_ID_H264)
           st->bPTSInvalid = true;
 
+#if LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(52, 63, 0)
         //average fps is more accurate for mkv files
         if (m_bMatroska && pStream->avg_frame_rate.den && pStream->avg_frame_rate.num)
         {
           st->iFpsRate = pStream->avg_frame_rate.num;
           st->iFpsScale = pStream->avg_frame_rate.den;
         }
+#else
+        // libavformat older than 2010-05-17 gets the avg wrong, use time_base instead
+        // for H.264 (r_frame_rate is rounded up 23.976->24fps for H.264 by libavformat)
+        if (m_bMatroska && pStream->codec->codec_id == CODEC_ID_H264 &&
+            pStream->codec->time_base.den && pStream->codec->time_base.num)
+        {
+          st->iFpsRate = pStream->codec->time_base.den;
+          st->iFpsScale = pStream->codec->time_base.num * pStream->codec->ticks_per_frame;
+        }
+#endif
         else if(pStream->r_frame_rate.den && pStream->r_frame_rate.num)
         {
           st->iFpsRate = pStream->r_frame_rate.num;