diff options
-rw-r--r-- | xbmc/cores/VideoRenderers/LinuxRendererGL.cpp | 6 | ||||
-rw-r--r-- | xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp | 3 | ||||
-rw-r--r-- | xbmc/cores/dvdplayer/DVDPlayerVideo.cpp | 10 | ||||
-rw-r--r-- | xbmc/cores/dvdplayer/DVDPlayerVideo.h | 2 |
4 files changed, 14 insertions, 7 deletions
diff --git a/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp b/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp index cf0b7d4156..468c51b2a0 100644 --- a/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp +++ b/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp @@ -3350,9 +3350,9 @@ bool CLinuxRendererGL::Supports(EINTERLACEMETHOD method) return false; } -#ifdef TARGET_DARWIN - // YADIF too slow for HD but we have no methods to fall back - // to something that works so just turn it off. +#ifdef TARGET_DARWIN_IOS + // iOS has not the power for YADIF - TODO evaluate if its + // enough to disable it for TARGET_DARWIN_IOS_ATV2 if(method == VS_INTERLACEMETHOD_DEINTERLACE) return false; #endif diff --git a/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp b/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp index 20a464fa71..81fe19b063 100644 --- a/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp +++ b/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp @@ -1031,6 +1031,7 @@ void CLinuxRendererGLES::Render(DWORD flags, int index) else if (m_renderMethod & RENDER_IMXMAP) { RenderIMXMAPTexture(index, m_currentField); + VerifyGLState(); } else { @@ -2770,7 +2771,7 @@ bool CLinuxRendererGLES::CreateIMXMAPTexture(int index) YUVFIELDS &fields = m_buffers[index].fields; YUVPLANE &plane = fields[0][0]; - DeleteEGLIMGTexture(index); + DeleteIMXMAPTexture(index); memset(&im , 0, sizeof(im)); memset(&fields, 0, sizeof(fields)); diff --git a/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp b/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp index e47f85c773..f030e37282 100644 --- a/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp +++ b/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp @@ -512,7 +512,7 @@ void CDVDPlayerVideo::Process() } bRequestDrop = false; - iDropDirective = CalcDropRequirement(pts); + iDropDirective = CalcDropRequirement(pts, false); if (iDropDirective & EOS_VERYLATE) { if (m_bAllowDrop) @@ -748,6 +748,9 @@ void CDVDPlayerVideo::Process() if (iDecoderState & VC_BUFFER) break; + // update dropping stats + CalcDropRequirement(pts, true); + // the decoder didn't need more data, flush the remaning buffer iDecoderState = m_pVideoCodec->Decode(NULL, 0, DVD_NOPTS_VALUE, DVD_NOPTS_VALUE); } @@ -1554,7 +1557,7 @@ void CDVDPlayerVideo::CalcFrameRate() } } -int CDVDPlayerVideo::CalcDropRequirement(double pts) +int CDVDPlayerVideo::CalcDropRequirement(double pts, bool updateOnly) { int result = 0; double iSleepTime; @@ -1622,6 +1625,9 @@ int CDVDPlayerVideo::CalcDropRequirement(double pts) } m_droppingStats.m_lastDecoderPts = iDecoderPts; + if (updateOnly) + return result; + // subtract gains while (!m_droppingStats.m_gain.empty() && iRenderPts >= m_droppingStats.m_gain.front().pts) diff --git a/xbmc/cores/dvdplayer/DVDPlayerVideo.h b/xbmc/cores/dvdplayer/DVDPlayerVideo.h index 4e1b3d6d36..489ebfc95a 100644 --- a/xbmc/cores/dvdplayer/DVDPlayerVideo.h +++ b/xbmc/cores/dvdplayer/DVDPlayerVideo.h @@ -149,7 +149,7 @@ protected: void ResetFrameRateCalc(); void CalcFrameRate(); - int CalcDropRequirement(double pts); + int CalcDropRequirement(double pts, bool updateOnly); double m_fFrameRate; //framerate of the video currently playing bool m_bCalcFrameRate; //if we should calculate the framerate from the timestamps |