diff --git a/xbmc/cores/VideoPlayer/VideoPlayerVideo.cpp b/xbmc/cores/VideoPlayer/VideoPlayerVideo.cpp index 2d82e164877f3..a976e4fa8a1d6 100644 --- a/xbmc/cores/VideoPlayer/VideoPlayerVideo.cpp +++ b/xbmc/cores/VideoPlayer/VideoPlayerVideo.cpp @@ -14,6 +14,7 @@ #include "ServiceBroker.h" #include "cores/VideoPlayer/Interface/Addon/DemuxPacket.h" #include "cores/VideoPlayer/Interface/Addon/TimingConstants.h" +#include "cores/VideoPlayer/VideoRenderers/RenderFlags.h" #include "settings/AdvancedSettings.h" #include "settings/SettingsComponent.h" #include "utils/MathUtils.h" @@ -700,6 +701,8 @@ bool CVideoPlayerVideo::ProcessDecoderOutput(double &frametime, double &pts) break; default: stereoMode = m_hints.stereo_mode; + if (m_processInfo.GetVideoSettings().m_StereoInvert) + stereoMode = InvertStereoMode(stereoMode); break; } if (!stereoMode.empty()) diff --git a/xbmc/cores/VideoPlayer/VideoRenderers/RenderFlags.cpp b/xbmc/cores/VideoPlayer/VideoRenderers/RenderFlags.cpp index 45f500dcc58f8..7bd4b9d54218d 100644 --- a/xbmc/cores/VideoPlayer/VideoRenderers/RenderFlags.cpp +++ b/xbmc/cores/VideoPlayer/VideoRenderers/RenderFlags.cpp @@ -87,3 +87,28 @@ unsigned int GetFlagsStereoMode(const std::string& mode) return convert[mode]; } +std::string InvertStereoMode(const std::string& mode) +{ + static std::map convert; + if(convert.empty()) + { + convert[""] = ""; + convert["left_right"] = "right_left"; + convert["bottom_top"] = "top_bottom"; + convert["top_bottom"] = "bottom_top"; + convert["checkerboard_rl"] = "checkerboard_lr"; + convert["checkerboard_lr"] = "checkerboard_rl"; + convert["row_interleaved_rl"] = "row_interleaved_lr"; + convert["row_interleaved_lr"] = "row_interleaved_rl"; + convert["col_interleaved_rl"] = "col_interleaved_lr"; + convert["col_interleaved_lr"] = "col_interleaved_rl"; + convert["right_left"] = "left_right"; + convert["block_lr"] = "block_rl"; + convert["block_rl"] = "block_lr"; + } + // if the format is not known then leave it as it is + if (convert.count(mode) == 0) + return mode; + return convert[mode]; +} + diff --git a/xbmc/cores/VideoPlayer/VideoRenderers/RenderFlags.h b/xbmc/cores/VideoPlayer/VideoRenderers/RenderFlags.h index 54f0524848f7a..aa08238614628 100644 --- a/xbmc/cores/VideoPlayer/VideoRenderers/RenderFlags.h +++ b/xbmc/cores/VideoPlayer/VideoRenderers/RenderFlags.h @@ -66,3 +66,4 @@ unsigned int GetFlagsColorMatrix(unsigned int color_matrix, unsigned width, unsi unsigned int GetFlagsChromaPosition(unsigned int chroma_position); unsigned int GetFlagsColorPrimaries(unsigned int color_primaries); unsigned int GetFlagsStereoMode(const std::string& mode); +std::string InvertStereoMode(const std::string& mode);