From 01face58cca136a9e21bdc64f97591c5fb0bcfa2 Mon Sep 17 00:00:00 2001 From: Gujs Date: Mon, 18 Jul 2011 23:06:59 +0200 Subject: [PATCH] xbmc-pvr: add patch for fix vdpau de-interalcing if interlace flag togles (inspired by FernetMenta) --- ...au_fix_deinterlacing_if_flag_toggles.patch | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-b485416-902-vdpau_fix_deinterlacing_if_flag_toggles.patch diff --git a/packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-b485416-902-vdpau_fix_deinterlacing_if_flag_toggles.patch b/packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-b485416-902-vdpau_fix_deinterlacing_if_flag_toggles.patch new file mode 100644 index 0000000000..884ada87e8 --- /dev/null +++ b/packages/mediacenter/xbmc-pvr/patches/xbmc-pvr-b485416-902-vdpau_fix_deinterlacing_if_flag_toggles.patch @@ -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;