xbmc-pvr: add patch for fix vdpau de-interalcing if interlace flag togles (inspired by FernetMenta)

This commit is contained in:
Gujs 2011-07-18 23:06:59 +02:00
parent 18f1f55912
commit 01face58cc

View File

@ -0,0 +1,44 @@
diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp
index 8735db8..8851279 100644
--- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp
+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp
@@ -918,6 +918,7 @@ bool CVDPAU::ConfigVDPAU(AVCodecContext* avctx, int ref_frames)
outputSurface = outputSurfaces[surfaceNum];
vdpauConfigured = true;
+ m_binterlacedFrame = false;
return true;
}
@@ -1175,10 +1176,16 @@ int CVDPAU::Decode(AVCodecContext *avctx, AVFrame *pFrame)
m_DVDVideoPics.pop();
}
+ if (!m_binterlacedFrame && m_DVDVideoPics.front().iFlags & DVP_FLAG_INTERLACED)
+ {
+ m_binterlacedFrame = m_DVDVideoPics.front().iFlags & DVP_FLAG_INTERLACED;
+ CLog::Log(LOGNOTICE, "CVDPAU::ConfigOutputMethod: detected interlaced frame");
+ }
+
if((method == VS_INTERLACEMETHOD_AUTO &&
- m_DVDVideoPics.front().iFlags & DVP_FLAG_INTERLACED)
+ m_binterlacedFrame)
|| (method == VS_INTERLACEMETHOD_AUTO_ION &&
- m_DVDVideoPics.front().iFlags & DVP_FLAG_INTERLACED)
+ m_binterlacedFrame)
|| method == VS_INTERLACEMETHOD_VDPAU_BOB
|| method == VS_INTERLACEMETHOD_VDPAU_TEMPORAL
|| method == VS_INTERLACEMETHOD_VDPAU_TEMPORAL_HALF
diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h
index 6e8468b..92a05d1 100644
--- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h
+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h
@@ -209,7 +209,7 @@ public:
uint32_t max_references;
Display* m_Display;
bool vdpauConfigured;
-
+ bool m_binterlacedFrame;
VdpVideoMixerPictureStructure m_mixerfield;
int m_mixerstep;