diff --git a/language/English/strings.po b/language/English/strings.po index 4871e3b3e946f..04745d2fd31f8 100644 --- a/language/English/strings.po +++ b/language/English/strings.po @@ -15747,7 +15747,13 @@ msgctxt "#36509" msgid "Monoscopic (2D)" msgstr "" -#empty strings from id 36510 to 36519 +#. name of a stereoscopic mode +#: system/settings/settings.xml +msgctxt "#36510" +msgid "Anaglyph Yellow/Blue" +msgstr "" + +#empty strings from id 36511 to 36519 #end of reserved strings for 3d modes #. Name of a setting, asking the user for the default playback mode (2D, 3D, ask) of stereoscopic videos diff --git a/xbmc/cores/VideoRenderers/MMALRenderer.cpp b/xbmc/cores/VideoRenderers/MMALRenderer.cpp index 0bc5f4bc1bb84..5d4fdf2c896d2 100644 --- a/xbmc/cores/VideoRenderers/MMALRenderer.cpp +++ b/xbmc/cores/VideoRenderers/MMALRenderer.cpp @@ -592,7 +592,7 @@ void CMMALRenderer::SetVideoRect(const CRect& InSrcRect, const CRect& InDestRect video_stereo_mode = RENDER_STEREO_MODE_OFF; display_stereo_mode = RENDER_STEREO_MODE_OFF; } - else if (display_stereo_mode == RENDER_STEREO_MODE_ANAGLYPH_RED_CYAN || display_stereo_mode == RENDER_STEREO_MODE_ANAGLYPH_GREEN_MAGENTA) + else if (display_stereo_mode == RENDER_STEREO_MODE_ANAGLYPH_RED_CYAN || display_stereo_mode == RENDER_STEREO_MODE_ANAGLYPH_GREEN_MAGENTA || display_stereo_mode == RENDER_STEREO_MODE_ANAGLYPH_YELLOW_BLUE) { SrcRect.x2 *= 2.0f; } @@ -607,7 +607,7 @@ void CMMALRenderer::SetVideoRect(const CRect& InSrcRect, const CRect& InDestRect video_stereo_mode = RENDER_STEREO_MODE_OFF; display_stereo_mode = RENDER_STEREO_MODE_OFF; } - else if (display_stereo_mode == RENDER_STEREO_MODE_ANAGLYPH_RED_CYAN || display_stereo_mode == RENDER_STEREO_MODE_ANAGLYPH_GREEN_MAGENTA) + else if (display_stereo_mode == RENDER_STEREO_MODE_ANAGLYPH_RED_CYAN || display_stereo_mode == RENDER_STEREO_MODE_ANAGLYPH_GREEN_MAGENTA || display_stereo_mode == RENDER_STEREO_MODE_ANAGLYPH_YELLOW_BLUE) { SrcRect.y2 *= 2.0f; } diff --git a/xbmc/cores/VideoRenderers/RenderFlags.cpp b/xbmc/cores/VideoRenderers/RenderFlags.cpp index 167ae7d083a71..809766a64b028 100644 --- a/xbmc/cores/VideoRenderers/RenderFlags.cpp +++ b/xbmc/cores/VideoRenderers/RenderFlags.cpp @@ -101,6 +101,7 @@ namespace RenderManager { convert["anaglyph_cyan_red"] = 0u; convert["right_left"] = CONF_FLAGS_STEREO_MODE_SBS | CONF_FLAGS_STEREO_CADANCE_RIGHT_LEFT; convert["anaglyph_green_magenta"] = 0u; + convert["anaglyph_yellow_blue"] = 0u; convert["block_lr"] = 0u; convert["block_rl"] = 0u; } diff --git a/xbmc/cores/VideoRenderers/WinRenderer.cpp b/xbmc/cores/VideoRenderers/WinRenderer.cpp index 7c12f3f8e9f49..e21efa416f17a 100644 --- a/xbmc/cores/VideoRenderers/WinRenderer.cpp +++ b/xbmc/cores/VideoRenderers/WinRenderer.cpp @@ -1042,7 +1042,8 @@ void CWinRenderer::RenderProcessor(DWORD flags) IDirect3DSurface9* target; if ( m_bUseHQScaler || g_graphicsContext.GetStereoMode() == RENDER_STEREO_MODE_ANAGLYPH_RED_CYAN - || g_graphicsContext.GetStereoMode() == RENDER_STEREO_MODE_ANAGLYPH_GREEN_MAGENTA) + || g_graphicsContext.GetStereoMode() == RENDER_STEREO_MODE_ANAGLYPH_GREEN_MAGENTA + || g_graphicsContext.GetStereoMode() == RENDER_STEREO_MODE_ANAGLYPH_YELLOW_BLUE) { m_IntermediateTarget.GetSurfaceLevel(0, &target); } @@ -1107,7 +1108,8 @@ void CWinRenderer::RenderProcessor(DWORD flags) Stage2(); } else if ( g_graphicsContext.GetStereoMode() == RENDER_STEREO_MODE_ANAGLYPH_RED_CYAN - || g_graphicsContext.GetStereoMode() == RENDER_STEREO_MODE_ANAGLYPH_GREEN_MAGENTA) + || g_graphicsContext.GetStereoMode() == RENDER_STEREO_MODE_ANAGLYPH_GREEN_MAGENTA + || g_graphicsContext.GetStereoMode() == RENDER_STEREO_MODE_ANAGLYPH_YELLOW_BLUE) { IDirect3DDevice9 *pD3DDev = g_Windowing.Get3DDevice(); diff --git a/xbmc/guilib/StereoscopicsManager.cpp b/xbmc/guilib/StereoscopicsManager.cpp index f0f7bf9c40709..9ee19479551f6 100644 --- a/xbmc/guilib/StereoscopicsManager.cpp +++ b/xbmc/guilib/StereoscopicsManager.cpp @@ -69,6 +69,7 @@ static const struct StereoModeMap VideoModeToGuiModeMap[] = { "col_interleaved_lr", RENDER_STEREO_MODE_OFF }, // unsupported { "anaglyph_cyan_red", RENDER_STEREO_MODE_ANAGLYPH_RED_CYAN }, { "anaglyph_green_magenta", RENDER_STEREO_MODE_ANAGLYPH_GREEN_MAGENTA }, + { "anaglyph_yellow_blue", RENDER_STEREO_MODE_ANAGLYPH_YELLOW_BLUE }, { "block_lr", RENDER_STEREO_MODE_OFF }, // unsupported { "block_rl", RENDER_STEREO_MODE_OFF }, // unsupported {} @@ -87,6 +88,7 @@ static const struct StereoModeMap StringToGuiModeMap[] = { "interlaced", RENDER_STEREO_MODE_INTERLACED }, // alias { "anaglyph_cyan_red", RENDER_STEREO_MODE_ANAGLYPH_RED_CYAN }, { "anaglyph_green_magenta", RENDER_STEREO_MODE_ANAGLYPH_GREEN_MAGENTA }, + { "anaglyph_yellow_blue", RENDER_STEREO_MODE_ANAGLYPH_YELLOW_BLUE }, { "hardware_based", RENDER_STEREO_MODE_HARDWAREBASED }, { "monoscopic", RENDER_STEREO_MODE_MONO }, {} @@ -266,9 +268,28 @@ RENDER_STEREO_MODE CStereoscopicsManager::GetStereoModeOfPlayingVideo(void) const std::string &CStereoscopicsManager::GetLabelForStereoMode(const RENDER_STEREO_MODE &mode) const { - if (mode == RENDER_STEREO_MODE_AUTO) - return g_localizeStrings.Get(36532); - return g_localizeStrings.Get(36502 + mode); + int msgId; + switch(mode) { + case RENDER_STEREO_MODE_AUTO: + msgId = 36532; + break; + case RENDER_STEREO_MODE_ANAGLYPH_YELLOW_BLUE: + msgId = 36510; + break; + case RENDER_STEREO_MODE_INTERLACED: + msgId = 36507; + break; + case RENDER_STEREO_MODE_HARDWAREBASED: + msgId = 36508; + break; + case RENDER_STEREO_MODE_MONO: + msgId = 36509; + break; + default: + msgId = 36502 + mode; + } + + return g_localizeStrings.Get(msgId); } RENDER_STEREO_MODE CStereoscopicsManager::GetPreferredPlaybackMode(void) diff --git a/xbmc/interfaces/Builtins.cpp b/xbmc/interfaces/Builtins.cpp index 501e80b428169..1122041979557 100644 --- a/xbmc/interfaces/Builtins.cpp +++ b/xbmc/interfaces/Builtins.cpp @@ -230,7 +230,7 @@ const BUILT_IN commands[] = { #if defined(TARGET_ANDROID) { "StartAndroidActivity", true, "Launch an Android native app with the given package name. Optional parms (in order): intent, dataType, dataURI." }, #endif - { "SetStereoMode", true, "Changes the stereo mode of the GUI. Params can be: toggle, next, previous, select, tomono or any of the supported stereomodes (off, split_vertical, split_horizontal, row_interleaved, hardware_based, anaglyph_cyan_red, anaglyph_green_magenta, monoscopic)" } + { "SetStereoMode", true, "Changes the stereo mode of the GUI. Params can be: toggle, next, previous, select, tomono or any of the supported stereomodes (off, split_vertical, split_horizontal, row_interleaved, hardware_based, anaglyph_cyan_red, anaglyph_green_magenta, anaglyph_yellow_blue, monoscopic)" } }; bool CBuiltins::HasCommand(const std::string& execString) diff --git a/xbmc/interfaces/json-rpc/schema/types.json b/xbmc/interfaces/json-rpc/schema/types.json index 1cb18866c98b9..100c7a2996a85 100644 --- a/xbmc/interfaces/json-rpc/schema/types.json +++ b/xbmc/interfaces/json-rpc/schema/types.json @@ -1390,7 +1390,7 @@ "GUI.Stereoscopy.Mode": { "type": "object", "properties": { - "mode": { "type": "string", "required": true, "enum": [ "off", "split_vertical", "split_horizontal", "row_interleaved", "hardware_based", "anaglyph_cyan_red", "anaglyph_green_magenta", "monoscopic" ] }, + "mode": { "type": "string", "required": true, "enum": [ "off", "split_vertical", "split_horizontal", "row_interleaved", "hardware_based", "anaglyph_cyan_red", "anaglyph_green_magenta", "anaglyph_yellow_blue", "monoscopic" ] }, "label": { "type": "string", "required": true } } }, diff --git a/xbmc/rendering/RenderSystem.h b/xbmc/rendering/RenderSystem.h index 4563b5dfd47a5..9f1daf4fd6f96 100644 --- a/xbmc/rendering/RenderSystem.h +++ b/xbmc/rendering/RenderSystem.h @@ -74,6 +74,7 @@ enum RENDER_STEREO_MODE RENDER_STEREO_MODE_SPLIT_VERTICAL, RENDER_STEREO_MODE_ANAGLYPH_RED_CYAN, RENDER_STEREO_MODE_ANAGLYPH_GREEN_MAGENTA, + RENDER_STEREO_MODE_ANAGLYPH_YELLOW_BLUE, RENDER_STEREO_MODE_INTERLACED, RENDER_STEREO_MODE_HARDWAREBASED, RENDER_STEREO_MODE_MONO, diff --git a/xbmc/rendering/dx/RenderSystemDX.cpp b/xbmc/rendering/dx/RenderSystemDX.cpp index 0bf685b624b37..528f3f37ce95f 100644 --- a/xbmc/rendering/dx/RenderSystemDX.cpp +++ b/xbmc/rendering/dx/RenderSystemDX.cpp @@ -743,7 +743,8 @@ bool CRenderSystemDX::ClearBuffers(color_t color) return false; if(m_stereoMode == RENDER_STEREO_MODE_ANAGLYPH_RED_CYAN - || m_stereoMode == RENDER_STEREO_MODE_ANAGLYPH_GREEN_MAGENTA) + || m_stereoMode == RENDER_STEREO_MODE_ANAGLYPH_GREEN_MAGENTA + || m_stereoMode == RENDER_STEREO_MODE_ANAGLYPH_YELLOW_BLUE) { // if stereo anaglyph, data was cleared when left view was rendererd if(m_stereoView == RENDER_STEREO_VIEW_RIGHT) @@ -1031,6 +1032,13 @@ void CRenderSystemDX::SetStereoMode(RENDER_STEREO_MODE mode, RENDER_STEREO_VIEW else if(m_stereoView == RENDER_STEREO_VIEW_RIGHT) m_pD3DDevice->SetRenderState( D3DRS_COLORWRITEENABLE, D3DCOLORWRITEENABLE_BLUE | D3DCOLORWRITEENABLE_RED ); } + if(m_stereoMode == RENDER_STEREO_MODE_ANAGLYPH_YELLOW_BLUE) + { + if(m_stereoView == RENDER_STEREO_VIEW_LEFT) + m_pD3DDevice->SetRenderState( D3DRS_COLORWRITEENABLE, D3DCOLORWRITEENABLE_RED | D3DCOLORWRITEENABLE_GREEN); + else if(m_stereoView == RENDER_STEREO_VIEW_RIGHT) + m_pD3DDevice->SetRenderState( D3DRS_COLORWRITEENABLE, D3DCOLORWRITEENABLE_BLUE); + } } bool CRenderSystemDX::SupportsStereo(RENDER_STEREO_MODE mode) const @@ -1039,6 +1047,7 @@ bool CRenderSystemDX::SupportsStereo(RENDER_STEREO_MODE mode) const { case RENDER_STEREO_MODE_ANAGLYPH_RED_CYAN: case RENDER_STEREO_MODE_ANAGLYPH_GREEN_MAGENTA: + case RENDER_STEREO_MODE_ANAGLYPH_YELLOW_BLUE: return true; default: return CRenderSystemBase::SupportsStereo(mode); diff --git a/xbmc/rendering/gl/RenderSystemGL.cpp b/xbmc/rendering/gl/RenderSystemGL.cpp index 1496493853f07..81d180ec159df 100644 --- a/xbmc/rendering/gl/RenderSystemGL.cpp +++ b/xbmc/rendering/gl/RenderSystemGL.cpp @@ -672,6 +672,13 @@ void CRenderSystemGL::SetStereoMode(RENDER_STEREO_MODE mode, RENDER_STEREO_VIEW else if(m_stereoView == RENDER_STEREO_VIEW_RIGHT) glColorMask(GL_TRUE, GL_FALSE, GL_TRUE, GL_TRUE); } + if(m_stereoMode == RENDER_STEREO_MODE_ANAGLYPH_YELLOW_BLUE) + { + if(m_stereoView == RENDER_STEREO_VIEW_LEFT) + glColorMask(GL_TRUE, GL_TRUE, GL_FALSE, GL_TRUE); + else if(m_stereoView == RENDER_STEREO_VIEW_RIGHT) + glColorMask(GL_FALSE, GL_FALSE, GL_TRUE, GL_TRUE); + } if(m_stereoMode == RENDER_STEREO_MODE_INTERLACED) { @@ -698,6 +705,7 @@ bool CRenderSystemGL::SupportsStereo(RENDER_STEREO_MODE mode) { case RENDER_STEREO_MODE_ANAGLYPH_RED_CYAN: case RENDER_STEREO_MODE_ANAGLYPH_GREEN_MAGENTA: + case RENDER_STEREO_MODE_ANAGLYPH_YELLOW_BLUE: case RENDER_STEREO_MODE_INTERLACED: return true; case RENDER_STEREO_MODE_HARDWAREBASED: {