aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRainer Hochecker <fernetmenta@online.de>2017-01-31 19:27:37 +0100
committerRainer Hochecker <fernetmenta@online.de>2017-02-16 12:59:40 +0100
commit0cc06143bdf5c4df9d72608298b8822e1133a5e2 (patch)
tree89d57e48ccd6c43fc2fc1397dc571bc57eb5904f
parenta1bf5b14cd87b92d7a79128c14a230ea18f28a92 (diff)
VideoPlayer: VideoReferenceClock to the right place
-rw-r--r--cmake/treedata/common/video.txt1
-rw-r--r--xbmc/cores/VideoPlayer/CMakeLists.txt6
-rw-r--r--xbmc/cores/VideoPlayer/DVDClock.cpp2
-rw-r--r--xbmc/cores/VideoPlayer/VideoReferenceClock.cpp (renamed from xbmc/video/VideoReferenceClock.cpp)73
-rw-r--r--xbmc/cores/VideoPlayer/VideoReferenceClock.h (renamed from xbmc/video/VideoReferenceClock.h)5
-rw-r--r--xbmc/platform/darwin/ios/XBMCController.mm1
-rw-r--r--xbmc/video/CMakeLists.txt2
-rw-r--r--xbmc/video/videosync/CMakeLists.txt50
-rw-r--r--xbmc/video/videosync/VideoSyncAML.cpp110
-rw-r--r--xbmc/video/videosync/VideoSyncAML.h41
-rw-r--r--xbmc/windowing/CMakeLists.txt3
-rw-r--r--xbmc/windowing/VideoSync.h (renamed from xbmc/video/videosync/VideoSync.h)6
-rw-r--r--xbmc/windowing/WinSystem.h5
-rw-r--r--xbmc/windowing/X11/CMakeLists.txt4
-rw-r--r--xbmc/windowing/X11/VideoSyncDRM.cpp (renamed from xbmc/video/videosync/VideoSyncDRM.cpp)2
-rw-r--r--xbmc/windowing/X11/VideoSyncDRM.h (renamed from xbmc/video/videosync/VideoSyncDRM.h)7
-rw-r--r--xbmc/windowing/X11/VideoSyncGLX.cpp (renamed from xbmc/video/videosync/VideoSyncGLX.cpp)2
-rw-r--r--xbmc/windowing/X11/VideoSyncGLX.h (renamed from xbmc/video/videosync/VideoSyncGLX.h)4
-rw-r--r--xbmc/windowing/X11/WinSystemX11.cpp4
-rw-r--r--xbmc/windowing/X11/WinSystemX11GLContext.cpp19
-rw-r--r--xbmc/windowing/X11/WinSystemX11GLContext.h3
-rw-r--r--xbmc/windowing/egl/VideoSyncAndroid.cpp (renamed from xbmc/video/videosync/VideoSyncAndroid.cpp)0
-rw-r--r--xbmc/windowing/egl/VideoSyncAndroid.h (renamed from xbmc/video/videosync/VideoSyncAndroid.h)0
-rw-r--r--xbmc/windowing/egl/VideoSyncIMX.cpp (renamed from xbmc/video/videosync/VideoSyncIMX.cpp)0
-rw-r--r--xbmc/windowing/egl/VideoSyncIMX.h (renamed from xbmc/video/videosync/VideoSyncIMX.h)0
-rw-r--r--xbmc/windowing/egl/VideoSyncPi.cpp (renamed from xbmc/video/videosync/VideoSyncPi.cpp)0
-rw-r--r--xbmc/windowing/egl/VideoSyncPi.h (renamed from xbmc/video/videosync/VideoSyncPi.h)0
-rw-r--r--xbmc/windowing/osx/CMakeLists.txt12
-rw-r--r--xbmc/windowing/osx/VideoSyncIos.cpp (renamed from xbmc/video/videosync/VideoSyncIos.cpp)2
-rw-r--r--xbmc/windowing/osx/VideoSyncIos.h (renamed from xbmc/video/videosync/VideoSyncIos.h)4
-rw-r--r--xbmc/windowing/osx/VideoSyncOsx.cpp (renamed from xbmc/video/videosync/VideoSyncOsx.cpp)3
-rw-r--r--xbmc/windowing/osx/VideoSyncOsx.h (renamed from xbmc/video/videosync/VideoSyncOsx.h)6
-rw-r--r--xbmc/windowing/osx/WinSystemIOS.h2
-rw-r--r--xbmc/windowing/osx/WinSystemIOS.mm13
-rw-r--r--xbmc/windowing/osx/WinSystemOSX.h3
-rw-r--r--xbmc/windowing/osx/WinSystemOSX.mm9
-rw-r--r--xbmc/windowing/windows/VideoSyncD3D.cpp (renamed from xbmc/video/videosync/VideoSyncD3D.cpp)0
-rw-r--r--xbmc/windowing/windows/VideoSyncD3D.h (renamed from xbmc/video/videosync/VideoSyncD3D.h)0
38 files changed, 91 insertions, 313 deletions
diff --git a/cmake/treedata/common/video.txt b/cmake/treedata/common/video.txt
index e7855a0809..acfb33bf57 100644
--- a/cmake/treedata/common/video.txt
+++ b/cmake/treedata/common/video.txt
@@ -1,5 +1,4 @@
xbmc/video video
xbmc/video/dialogs video/dialogs
xbmc/video/jobs video/jobs
-xbmc/video/videosync video/sync
xbmc/video/windows video/windows
diff --git a/xbmc/cores/VideoPlayer/CMakeLists.txt b/xbmc/cores/VideoPlayer/CMakeLists.txt
index 00d0232922..4ceff1b890 100644
--- a/xbmc/cores/VideoPlayer/CMakeLists.txt
+++ b/xbmc/cores/VideoPlayer/CMakeLists.txt
@@ -13,7 +13,8 @@ set(SOURCES DVDAudio.cpp
VideoPlayerRadioRDS.cpp
VideoPlayerSubtitle.cpp
VideoPlayerTeletext.cpp
- VideoPlayerVideo.cpp)
+ VideoPlayerVideo.cpp
+ VideoReferenceClock.cpp)
set(HEADERS DVDAudio.h
DVDClock.h
@@ -32,6 +33,7 @@ set(HEADERS DVDAudio.h
VideoPlayerRadioRDS.h
VideoPlayerSubtitle.h
VideoPlayerTeletext.h
- VideoPlayerVideo.h)
+ VideoPlayerVideo.h
+ VideoReferenceClock.h)
core_add_library(VideoPlayer)
diff --git a/xbmc/cores/VideoPlayer/DVDClock.cpp b/xbmc/cores/VideoPlayer/DVDClock.cpp
index f4ae45d816..4cf90d546e 100644
--- a/xbmc/cores/VideoPlayer/DVDClock.cpp
+++ b/xbmc/cores/VideoPlayer/DVDClock.cpp
@@ -19,7 +19,7 @@
*/
#include "DVDClock.h"
-#include "video/VideoReferenceClock.h"
+#include "VideoReferenceClock.h"
#include <math.h>
#include "utils/MathUtils.h"
#include "threads/SingleLock.h"
diff --git a/xbmc/video/VideoReferenceClock.cpp b/xbmc/cores/VideoPlayer/VideoReferenceClock.cpp
index 2d85839d23..0dd7ea9b87 100644
--- a/xbmc/video/VideoReferenceClock.cpp
+++ b/xbmc/cores/VideoPlayer/VideoReferenceClock.cpp
@@ -24,39 +24,9 @@
#include "utils/TimeUtils.h"
#include "threads/SingleLock.h"
#include "guilib/GraphicContext.h"
-#include "video/videosync/VideoSync.h"
#include "settings/Settings.h"
-
-#if defined(HAS_GLX)
-#include "video/videosync/VideoSyncGLX.h"
-#endif
-#if defined(HAVE_X11)
-#include "video/videosync/VideoSyncDRM.h"
+#include "windowing/VideoSync.h"
#include "windowing/WindowingFactory.h"
-#elif defined(TARGET_RASPBERRY_PI)
-#include "video/videosync/VideoSyncPi.h"
-#elif defined(HAS_IMXVPU)
-#include "video/videosync/VideoSyncIMX.h"
-#endif
-#if defined(TARGET_WINDOWS)
-#include "video/videosync/VideoSyncD3D.h"
-#endif
-#if defined(TARGET_DARWIN_OSX)
-#include "video/videosync/VideoSyncOsx.h"
-#endif
-#if defined(TARGET_DARWIN_IOS)
-#include "video/videosync/VideoSyncIos.h"
-#endif
-#if defined(TARGET_ANDROID)
-#include "video/videosync/VideoSyncAndroid.h"
-#endif
-#if defined(HAS_LIBAMCODEC)
-#include "video/videosync/VideoSyncAML.h"
-#endif
-
-#ifdef TARGET_POSIX
-#include "linux/XTimeUtils.h"
-#endif
CVideoReferenceClock::CVideoReferenceClock() : CThread("RefClock")
{
@@ -73,8 +43,6 @@ CVideoReferenceClock::CVideoReferenceClock() : CThread("RefClock")
m_MissedVblanks = 0;
m_VblankTime = 0;
- m_pVideoSync = nullptr;
-
Start();
}
@@ -90,12 +58,13 @@ void CVideoReferenceClock::Start()
Create();
}
-void CVideoReferenceClock::CBUpdateClock(int NrVBlanks, uint64_t time, CVideoReferenceClock *clock)
+void CVideoReferenceClock::CBUpdateClock(int NrVBlanks, uint64_t time, void *clock)
{
{
- CSingleLock lock(clock->m_CritSection);
- clock->m_VblankTime = time;
- clock->UpdateClock(NrVBlanks, true);
+ CVideoReferenceClock *refClock = static_cast<CVideoReferenceClock*>(clock);
+ CSingleLock lock(refClock->m_CritSection);
+ refClock->m_VblankTime = time;
+ refClock->UpdateClock(NrVBlanks, true);
}
}
@@ -106,32 +75,7 @@ void CVideoReferenceClock::Process()
while(!m_bStop)
{
- //set up the vblank clock
-#if defined(HAVE_X11)
- std::string gpuvendor = g_Windowing.GetRenderVendor();
- std::transform(gpuvendor.begin(), gpuvendor.end(), gpuvendor.begin(), ::tolower);
- if ((gpuvendor.compare(0, 5, "intel") == 0 ||
- gpuvendor.compare(0, 5, "x.org") == 0)) // AMD
- m_pVideoSync = new CVideoSyncDRM(this);
-#if defined(HAS_GLX)
- else
- m_pVideoSync = new CVideoSyncGLX(this);
-#endif
-#elif defined(TARGET_WINDOWS)
- m_pVideoSync = new CVideoSyncD3D(this);
-#elif defined(TARGET_DARWIN_OSX)
- m_pVideoSync = new CVideoSyncOsx(this);
-#elif defined(TARGET_DARWIN_IOS)
- m_pVideoSync = new CVideoSyncIos(this);
-#elif defined(TARGET_RASPBERRY_PI)
- m_pVideoSync = new CVideoSyncPi(this);
-#elif defined(HAS_IMXVPU)
- m_pVideoSync = new CVideoSyncIMX(this);
-#elif defined(TARGET_ANDROID)
- m_pVideoSync = new CVideoSyncAndroid(this);
-#elif defined(HAS_LIBAMCODEC)
- m_pVideoSync = new CVideoSyncAML(this);
-#endif
+ m_pVideoSync = g_Windowing.GetVideoSync(this);
if (m_pVideoSync)
{
@@ -173,8 +117,7 @@ void CVideoReferenceClock::Process()
if (m_pVideoSync)
{
m_pVideoSync->Cleanup();
- delete m_pVideoSync;
- m_pVideoSync = nullptr;
+ m_pVideoSync.reset();
}
if (!SetupSuccess)
diff --git a/xbmc/video/VideoReferenceClock.h b/xbmc/cores/VideoPlayer/VideoReferenceClock.h
index 659e4269a2..00f58bf7ec 100644
--- a/xbmc/video/VideoReferenceClock.h
+++ b/xbmc/cores/VideoPlayer/VideoReferenceClock.h
@@ -21,6 +21,7 @@
#include "threads/Thread.h"
#include "threads/CriticalSection.h"
+#include <memory>
class CVideoSync;
@@ -43,7 +44,7 @@ class CVideoReferenceClock : public CThread
void UpdateClock(int NrVBlanks, bool CheckMissed);
double UpdateInterval() const;
int64_t TimeOfNextVblank() const;
- static void CBUpdateClock(int NrVBlanks, uint64_t time, CVideoReferenceClock *clock);
+ static void CBUpdateClock(int NrVBlanks, uint64_t time, void *clock);
int64_t m_CurrTime; //the current time of the clock when using vblank as clock source
int64_t m_LastIntTime; //last interpolated clock value, to make sure the clock doesn't go backwards
@@ -60,5 +61,5 @@ class CVideoReferenceClock : public CThread
CCriticalSection m_CritSection;
- CVideoSync *m_pVideoSync;
+ std::unique_ptr<CVideoSync> m_pVideoSync;
};
diff --git a/xbmc/platform/darwin/ios/XBMCController.mm b/xbmc/platform/darwin/ios/XBMCController.mm
index 380537e944..2d6b85fe56 100644
--- a/xbmc/platform/darwin/ios/XBMCController.mm
+++ b/xbmc/platform/darwin/ios/XBMCController.mm
@@ -37,7 +37,6 @@
#include "guilib/GUIControl.h"
#include "input/Key.h"
#include "windowing/WindowingFactory.h"
-#include "video/VideoReferenceClock.h"
#include "utils/log.h"
#include "utils/TimeUtils.h"
#include "Util.h"
diff --git a/xbmc/video/CMakeLists.txt b/xbmc/video/CMakeLists.txt
index 9842fce0aa..c3ee3d7554 100644
--- a/xbmc/video/CMakeLists.txt
+++ b/xbmc/video/CMakeLists.txt
@@ -9,7 +9,6 @@ set(SOURCES Bookmark.cpp
VideoInfoScanner.cpp
VideoInfoTag.cpp
VideoLibraryQueue.cpp
- VideoReferenceClock.cpp
VideoThumbLoader.cpp
ViewModeSettings.cpp)
@@ -26,7 +25,6 @@ set(HEADERS Bookmark.h
VideoInfoScanner.h
VideoInfoTag.h
VideoLibraryQueue.h
- VideoReferenceClock.h
VideoThumbLoader.h)
core_add_library(video)
diff --git a/xbmc/video/videosync/CMakeLists.txt b/xbmc/video/videosync/CMakeLists.txt
deleted file mode 100644
index 177c656ea6..0000000000
--- a/xbmc/video/videosync/CMakeLists.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-set(HEADERS VideoSync.h)
-
-if(OPENGL_FOUND)
- list(APPEND SOURCES VideoSyncGLX.cpp)
- list(APPEND HEADERS VideoSyncGLX.h)
-endif()
-
-if(X_FOUND)
- list(APPEND SOURCES VideoSyncDRM.cpp)
- list(APPEND HEADERS VideoSyncDRM.h)
-endif()
-
-if(CORE_SYSTEM_NAME STREQUAL windows)
- list(APPEND SOURCES VideoSyncD3D.cpp)
- list(APPEND HEADERS VideoSyncD3D.h)
-endif()
-
-if(CORE_SYSTEM_NAME STREQUAL rbpi)
- list(APPEND SOURCES VideoSyncPi.cpp)
- list(APPEND HEADERS VideoSyncPi.h)
-endif()
-
-if(CORE_SYSTEM_NAME STREQUAL osx)
- list(APPEND SOURCES VideoSyncOsx.cpp)
- list(APPEND HEADERS VideoSyncOsx.h)
-endif()
-
-if(CORE_SYSTEM_NAME STREQUAL ios)
- list(APPEND SOURCES VideoSyncIos.cpp)
- list(APPEND HEADERS VideoSyncIos.h)
-endif()
-
-if(CORE_SYSTEM_NAME STREQUAL android)
- list(APPEND SOURCES VideoSyncAndroid.cpp)
- list(APPEND HEADERS VideoSyncAndroid.h)
-endif()
-
-if(IMX_FOUND)
- list(APPEND SOURCES VideoSyncIMX.cpp)
- list(APPEND HEADERS VideoSyncIMX.h)
-endif()
-
-if(AML_FOUND)
- list(APPEND SOURCES VideoSyncAML.cpp)
- list(APPEND HEADERS VideoSyncAML.h)
-endif()
-
-if(SOURCES AND HEADERS)
- core_add_library(video_sync)
-endif()
diff --git a/xbmc/video/videosync/VideoSyncAML.cpp b/xbmc/video/videosync/VideoSyncAML.cpp
deleted file mode 100644
index cd8559e94d..0000000000
--- a/xbmc/video/videosync/VideoSyncAML.cpp
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright (C) 2017 Team XBMC
- * http://xbmc.org
- *
- * This Program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * This Program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with XBMC; see the file COPYING. If not, see
- * <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "system.h"
-
-#if defined(HAS_LIBAMCODEC)
-
-#include "video/videosync/VideoSyncAML.h"
-#include "guilib/GraphicContext.h"
-#include "windowing/WindowingFactory.h"
-#include "utils/TimeUtils.h"
-#include "utils/log.h"
-#include "threads/Thread.h"
-#include <sys/poll.h>
-
-#include <chrono>
-#include <thread>
-
-extern CEvent g_aml_sync_event;
-
-CVideoSyncAML::CVideoSyncAML(CVideoReferenceClock *clock)
-: CVideoSync(clock)
-, m_abort(false)
-{
-}
-
-CVideoSyncAML::~CVideoSyncAML()
-{
-}
-
-bool CVideoSyncAML::Setup(PUPDATECLOCK func)
-{
- UpdateClock = func;
-
- m_abort = false;
-
- g_Windowing.Register(this);
- CLog::Log(LOGDEBUG, "CVideoReferenceClock: setting up AML");
-
- return true;
-}
-
-void CVideoSyncAML::Run(std::atomic<bool>& stop)
-{
- // We use the wall clock for timout handling (no AML h/w, startup)
- std::chrono::time_point<std::chrono::system_clock> now(std::chrono::system_clock::now());
- unsigned int waittime (3000 / m_fps);
- uint64_t numVBlanks (0);
-
- while (!stop && !m_abort)
- {
- int countVSyncs(1);
- if( !g_aml_sync_event.WaitMSec(waittime))
- {
- std::chrono::milliseconds elapsed(std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now() - now).count());
- uint64_t curVBlanks = (m_fps * elapsed.count()) / 1000;
- int64_t lastVBlankTime((curVBlanks * 1000) / m_fps);
- if (elapsed.count() > lastVBlankTime)
- {
- lastVBlankTime = (++curVBlanks * 1000) / m_fps;
- std::this_thread::sleep_for(std::chrono::milliseconds(lastVBlankTime - elapsed.count()));
- }
- countVSyncs = curVBlanks - numVBlanks;
- numVBlanks = curVBlanks;
- }
- else
- ++numVBlanks;
-
- uint64_t now = CurrentHostCounter();
-
- UpdateClock(countVSyncs, now, m_refClock);
- }
-}
-
-void CVideoSyncAML::Cleanup()
-{
- CLog::Log(LOGDEBUG, "CVideoReferenceClock: cleaning up AML");
- g_Windowing.Unregister(this);
-}
-
-float CVideoSyncAML::GetFps()
-{
- m_fps = g_graphicsContext.GetFPS();
- CLog::Log(LOGDEBUG, "CVideoReferenceClock: fps: %.3f", m_fps);
- return m_fps;
-}
-
-void CVideoSyncAML::OnResetDisplay()
-{
- m_abort = true;
-}
-
-#endif
diff --git a/xbmc/video/videosync/VideoSyncAML.h b/xbmc/video/videosync/VideoSyncAML.h
deleted file mode 100644
index f12230ea90..0000000000
--- a/xbmc/video/videosync/VideoSyncAML.h
+++ /dev/null
@@ -1,41 +0,0 @@
-#pragma once
-/*
- * Copyright (C) 2017 Team XBMC
- * http://xbmc.org
- *
- * This Program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * This Program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with XBMC; see the file COPYING. If not, see
- * <http://www.gnu.org/licenses/>.
- *
- */
-
-#if defined(HAS_LIBAMCODEC)
-
-#include "video/videosync/VideoSync.h"
-#include "guilib/DispResource.h"
-
-class CVideoSyncAML : public CVideoSync, IDispResource
-{
-public:
- CVideoSyncAML(CVideoReferenceClock *clock);
- virtual ~CVideoSyncAML();
- virtual bool Setup(PUPDATECLOCK func);
- virtual void Run(std::atomic<bool>& stop);
- virtual void Cleanup();
- virtual float GetFps();
- virtual void OnResetDisplay();
-private:
- volatile bool m_abort;
-};
-
-#endif
diff --git a/xbmc/windowing/CMakeLists.txt b/xbmc/windowing/CMakeLists.txt
index 0e0cf87a1e..b8924a3104 100644
--- a/xbmc/windowing/CMakeLists.txt
+++ b/xbmc/windowing/CMakeLists.txt
@@ -4,7 +4,8 @@ set(SOURCES WinEvents.cpp
set(HEADERS WindowingFactory.h
WinEvents.h
WinSystem.h
- XBMC_events.h)
+ XBMC_events.h
+ VideoSync.h)
if (NOT MIR_FOUND)
if(SDL_FOUND AND NOT X_FOUND)
diff --git a/xbmc/video/videosync/VideoSync.h b/xbmc/windowing/VideoSync.h
index a430cb029f..8db21957ca 100644
--- a/xbmc/video/videosync/VideoSync.h
+++ b/xbmc/windowing/VideoSync.h
@@ -21,12 +21,12 @@
#include <atomic>
class CVideoReferenceClock;
-typedef void (*PUPDATECLOCK)(int NrVBlanks, uint64_t time, CVideoReferenceClock *clock);
+typedef void (*PUPDATECLOCK)(int NrVBlanks, uint64_t time, void *clock);
class CVideoSync
{
public:
- CVideoSync(CVideoReferenceClock *clock) { m_refClock = clock; };
+ CVideoSync(void *clock) { m_refClock = clock; };
virtual ~CVideoSync() {};
virtual bool Setup(PUPDATECLOCK func) = 0;
virtual void Run(std::atomic<bool>& stop) = 0;
@@ -36,5 +36,5 @@ public:
protected:
PUPDATECLOCK UpdateClock;
float m_fps;
- CVideoReferenceClock *m_refClock;
+ void *m_refClock;
};
diff --git a/xbmc/windowing/WinSystem.h b/xbmc/windowing/WinSystem.h
index d67a2a9298..95676b4358 100644
--- a/xbmc/windowing/WinSystem.h
+++ b/xbmc/windowing/WinSystem.h
@@ -21,8 +21,10 @@
#ifndef WINDOW_SYSTEM_BASE_H
#define WINDOW_SYSTEM_BASE_H
+#include "VideoSync.h"
#include "WinEvents.h"
#include "guilib/Resolution.h"
+#include <memory>
#include <vector>
typedef enum _WindowSystemType
@@ -84,6 +86,9 @@ public:
virtual bool Hide() { return false; }
virtual bool Show(bool raise = true) { return false; }
+ // videosync
+ virtual std::unique_ptr<CVideoSync> GetVideoSync(void *clock) { return nullptr; }
+
// notifications
virtual void OnMove(int x, int y) {}
diff --git a/xbmc/windowing/X11/CMakeLists.txt b/xbmc/windowing/X11/CMakeLists.txt
index 6d2527d563..902dea50a4 100644
--- a/xbmc/windowing/X11/CMakeLists.txt
+++ b/xbmc/windowing/X11/CMakeLists.txt
@@ -6,6 +6,8 @@ if (X_FOUND)
WinSystemX11GLContext.cpp
WinSystemX11GLESContext.cpp
XRandR.cpp
+ VideoSyncGLX.cpp
+ VideoSyncDRM.cpp
WinSystemX11.cpp)
set(HEADERS GLContext.h
@@ -14,6 +16,8 @@ if (X_FOUND)
WinSystemX11GLContext.h
WinSystemX11GLESContext.h
XRandR.h
+ VideoSyncGLX.h
+ VideoSyncDRM.h
WinSystemX11.h)
core_add_library(windowing_X11)
diff --git a/xbmc/video/videosync/VideoSyncDRM.cpp b/xbmc/windowing/X11/VideoSyncDRM.cpp
index c86a7b771d..f31b349124 100644
--- a/xbmc/video/videosync/VideoSyncDRM.cpp
+++ b/xbmc/windowing/X11/VideoSyncDRM.cpp
@@ -22,7 +22,7 @@
#if defined(HAVE_X11)
-#include "video/videosync/VideoSyncDRM.h"
+#include "VideoSyncDRM.h"
#include "xf86drm.h"
#include <sys/poll.h>
#include <sys/time.h>
diff --git a/xbmc/video/videosync/VideoSyncDRM.h b/xbmc/windowing/X11/VideoSyncDRM.h
index b6807171f3..3f41cc25ee 100644
--- a/xbmc/video/videosync/VideoSyncDRM.h
+++ b/xbmc/windowing/X11/VideoSyncDRM.h
@@ -19,15 +19,13 @@
*
*/
-#if defined(HAVE_X11)
-
-#include "video/videosync/VideoSync.h"
+#include "windowing/VideoSync.h"
#include "guilib/DispResource.h"
class CVideoSyncDRM : public CVideoSync, IDispResource
{
public:
- CVideoSyncDRM(CVideoReferenceClock *clock) : CVideoSync(clock) {};
+ CVideoSyncDRM(void *clock) : CVideoSync(clock) {};
virtual bool Setup(PUPDATECLOCK func);
virtual void Run(std::atomic<bool>& stop);
virtual void Cleanup();
@@ -45,4 +43,3 @@ private:
};
};
-#endif
diff --git a/xbmc/video/videosync/VideoSyncGLX.cpp b/xbmc/windowing/X11/VideoSyncGLX.cpp
index fd28e007e3..a0da423254 100644
--- a/xbmc/video/videosync/VideoSyncGLX.cpp
+++ b/xbmc/windowing/X11/VideoSyncGLX.cpp
@@ -22,7 +22,7 @@
#if defined(HAS_GLX)
-#include "video/videosync/VideoSyncGLX.h"
+#include "VideoSyncGLX.h"
#include <sstream>
#include <X11/extensions/Xrandr.h>
#include "windowing/WindowingFactory.h"
diff --git a/xbmc/video/videosync/VideoSyncGLX.h b/xbmc/windowing/X11/VideoSyncGLX.h
index 7d23c47f03..eb390d6a84 100644
--- a/xbmc/video/videosync/VideoSyncGLX.h
+++ b/xbmc/windowing/X11/VideoSyncGLX.h
@@ -21,7 +21,7 @@
#if defined(HAS_GLX)
-#include "video/videosync/VideoSync.h"
+#include "windowing/VideoSync.h"
#include "system_gl.h"
#include <X11/X.h>
#include <X11/Xlib.h>
@@ -32,7 +32,7 @@
class CVideoSyncGLX : public CVideoSync, IDispResource
{
public:
- CVideoSyncGLX(CVideoReferenceClock *clock) : CVideoSync(clock) {};
+ CVideoSyncGLX(void *clock) : CVideoSync(clock) {};
virtual bool Setup(PUPDATECLOCK func);
virtual void Run(std::atomic<bool>& stop);
virtual void Cleanup();
diff --git a/xbmc/windowing/X11/WinSystemX11.cpp b/xbmc/windowing/X11/WinSystemX11.cpp
index 291bbf6420..ff7abe675d 100644
--- a/xbmc/windowing/X11/WinSystemX11.cpp
+++ b/xbmc/windowing/X11/WinSystemX11.cpp
@@ -20,8 +20,6 @@
#include "system.h"
-#if defined(HAVE_X11)
-
#include "WinSystemX11.h"
#include "ServiceBroker.h"
#include "settings/DisplaySettings.h"
@@ -1071,4 +1069,4 @@ void CWinSystemX11::UpdateCrtc()
g_graphicsContext.SetFPS(fps);
}
-#endif
+
diff --git a/xbmc/windowing/X11/WinSystemX11GLContext.cpp b/xbmc/windowing/X11/WinSystemX11GLContext.cpp
index 33c5858b8b..c776dbdf96 100644
--- a/xbmc/windowing/X11/WinSystemX11GLContext.cpp
+++ b/xbmc/windowing/X11/WinSystemX11GLContext.cpp
@@ -19,7 +19,7 @@
*/
#include "system.h"
-#if defined(HAVE_X11) && defined(HAS_GL)
+#if defined(HAS_GL)
#include <X11/Xlib.h>
#include <X11/Xutil.h>
@@ -34,6 +34,8 @@
#include "threads/SingleLock.h"
#include <vector>
#include "Application.h"
+#include "VideoSyncDRM.h"
+#include "VideoSyncGLX.h"
CWinSystemX11GLContext::CWinSystemX11GLContext()
{
@@ -219,4 +221,19 @@ bool CWinSystemX11GLContext::RefreshGLContext(bool force)
return ret;
}
+std::unique_ptr<CVideoSync> CWinSystemX11GLContext::GetVideoSync(void *clock)
+{
+ std::unique_ptr<CVideoSync> pVSync;
+
+ if (dynamic_cast<CGLContextEGL*>(m_pGLContext))
+ {
+ pVSync.reset(new CVideoSyncDRM(clock));
+ }
+ else if (dynamic_cast<CGLContextGLX*>(m_pGLContext))
+ {
+ pVSync.reset(new CVideoSyncGLX(clock));
+ }
+ return pVSync;
+}
+
#endif
diff --git a/xbmc/windowing/X11/WinSystemX11GLContext.h b/xbmc/windowing/X11/WinSystemX11GLContext.h
index 4e0ca8c62e..b4e7f390d9 100644
--- a/xbmc/windowing/X11/WinSystemX11GLContext.h
+++ b/xbmc/windowing/X11/WinSystemX11GLContext.h
@@ -43,6 +43,9 @@ public:
bool IsExtSupported(const char* extension) override;
+ // videosync
+ virtual std::unique_ptr<CVideoSync> GetVideoSync(void *clock) override;
+
GLXWindow GetWindow() const;
GLXContext GetGlxContext() const;
EGLDisplay GetEGLDisplay() const;
diff --git a/xbmc/video/videosync/VideoSyncAndroid.cpp b/xbmc/windowing/egl/VideoSyncAndroid.cpp
index 71d7906267..71d7906267 100644
--- a/xbmc/video/videosync/VideoSyncAndroid.cpp
+++ b/xbmc/windowing/egl/VideoSyncAndroid.cpp
diff --git a/xbmc/video/videosync/VideoSyncAndroid.h b/xbmc/windowing/egl/VideoSyncAndroid.h
index 803df561b2..803df561b2 100644
--- a/xbmc/video/videosync/VideoSyncAndroid.h
+++ b/xbmc/windowing/egl/VideoSyncAndroid.h
diff --git a/xbmc/video/videosync/VideoSyncIMX.cpp b/xbmc/windowing/egl/VideoSyncIMX.cpp
index fa7c27c4e5..fa7c27c4e5 100644
--- a/xbmc/video/videosync/VideoSyncIMX.cpp
+++ b/xbmc/windowing/egl/VideoSyncIMX.cpp
diff --git a/xbmc/video/videosync/VideoSyncIMX.h b/xbmc/windowing/egl/VideoSyncIMX.h
index 7220ac60ba..7220ac60ba 100644
--- a/xbmc/video/videosync/VideoSyncIMX.h
+++ b/xbmc/windowing/egl/VideoSyncIMX.h
diff --git a/xbmc/video/videosync/VideoSyncPi.cpp b/xbmc/windowing/egl/VideoSyncPi.cpp
index 0b512d3b0b..0b512d3b0b 100644
--- a/xbmc/video/videosync/VideoSyncPi.cpp
+++ b/xbmc/windowing/egl/VideoSyncPi.cpp
diff --git a/xbmc/video/videosync/VideoSyncPi.h b/xbmc/windowing/egl/VideoSyncPi.h
index c7c3d12c71..c7c3d12c71 100644
--- a/xbmc/video/videosync/VideoSyncPi.h
+++ b/xbmc/windowing/egl/VideoSyncPi.h
diff --git a/xbmc/windowing/osx/CMakeLists.txt b/xbmc/windowing/osx/CMakeLists.txt
index a007c38df2..0191ddefb5 100644
--- a/xbmc/windowing/osx/CMakeLists.txt
+++ b/xbmc/windowing/osx/CMakeLists.txt
@@ -1,17 +1,21 @@
if(CORE_SYSTEM_NAME STREQUAL osx)
set(SOURCES WinEventsOSX.mm
WinSystemOSX.mm
- WinSystemOSXGL.mm)
+ WinSystemOSXGL.mm
+ VideoSyncOsx.cpp)
set(HEADERS WinEventsOSX.h
WinSystemOSX.h
- WinSystemOSXGL.h)
+ WinSystemOSXGL.h
+ VideoSyncOsx.h)
endif()
if(CORE_SYSTEM_NAME STREQUAL ios)
set(SOURCES WinEventsIOS.mm
- WinSystemIOS.mm)
+ WinSystemIOS.mm
+ VideoSyncIos.cpp)
set(HEADERS WinEventsIOS.h
- WinSystemIOS.h)
+ WinSystemIOS.h
+ VideoSyncIos.h)
endif()
core_add_library(windowing_osx)
diff --git a/xbmc/video/videosync/VideoSyncIos.cpp b/xbmc/windowing/osx/VideoSyncIos.cpp
index 026dd7ed91..ac23993dd8 100644
--- a/xbmc/video/videosync/VideoSyncIos.cpp
+++ b/xbmc/windowing/osx/VideoSyncIos.cpp
@@ -24,7 +24,7 @@
#include "utils/log.h"
#include "VideoSyncIos.h"
#include "utils/MathUtils.h"
-#include "video/VideoReferenceClock.h"
+#include "cores/VideoPlayer/VideoReferenceClock.h"
#include "guilib/GraphicContext.h"
#include "windowing/WindowingFactory.h"
#include "utils/TimeUtils.h"
diff --git a/xbmc/video/videosync/VideoSyncIos.h b/xbmc/windowing/osx/VideoSyncIos.h
index bf336b80dd..6d129eb63d 100644
--- a/xbmc/video/videosync/VideoSyncIos.h
+++ b/xbmc/windowing/osx/VideoSyncIos.h
@@ -20,13 +20,13 @@
*/
#if defined(TARGET_DARWIN_IOS)
-#include "VideoSync.h"
+#include "windowing/VideoSync.h"
#include "guilib/DispResource.h"
class CVideoSyncIos : public CVideoSync, IDispResource
{
public:
- CVideoSyncIos(CVideoReferenceClock *clock) : CVideoSync(clock), m_LastVBlankTime(0), m_abort(false){}
+ CVideoSyncIos(void *clock) : CVideoSync(clock), m_LastVBlankTime(0), m_abort(false){}
// CVideoSync interface
virtual bool Setup(PUPDATECLOCK func) override;
diff --git a/xbmc/video/videosync/VideoSyncOsx.cpp b/xbmc/windowing/osx/VideoSyncOsx.cpp
index f6320c49b3..9ea7145b33 100644
--- a/xbmc/video/videosync/VideoSyncOsx.cpp
+++ b/xbmc/windowing/osx/VideoSyncOsx.cpp
@@ -20,11 +20,9 @@
#include "system.h"
-#if defined(TARGET_DARWIN_OSX)
#include "utils/log.h"
#include "VideoSyncOsx.h"
#include "utils/MathUtils.h"
-#include "video/VideoReferenceClock.h"
#include "guilib/GraphicContext.h"
#include "utils/TimeUtils.h"
#include "windowing/WindowingFactory.h"
@@ -159,4 +157,3 @@ void CVideoSyncOsx::DeinitDisplayLink()
Cocoa_CVDisplayLinkRelease();
}
-#endif//TARGET_DARWIN_OSX
diff --git a/xbmc/video/videosync/VideoSyncOsx.h b/xbmc/windowing/osx/VideoSyncOsx.h
index 1a2eedcd7e..276c9085a5 100644
--- a/xbmc/video/videosync/VideoSyncOsx.h
+++ b/xbmc/windowing/osx/VideoSyncOsx.h
@@ -19,8 +19,7 @@
*
*/
-#if defined(TARGET_DARWIN_OSX)
-#include "VideoSync.h"
+#include "windowing/VideoSync.h"
#include "guilib/DispResource.h"
#include "threads/Event.h"
@@ -28,7 +27,7 @@ class CVideoSyncOsx : public CVideoSync, IDispResource
{
public:
- CVideoSyncOsx(CVideoReferenceClock *clock) :
+ CVideoSyncOsx(void *clock) :
CVideoSync(clock),
m_LastVBlankTime(0),
m_displayLost(false),
@@ -58,4 +57,3 @@ private:
CEvent m_lostEvent;
};
-#endif// TARGET_DARWIN_OSX
diff --git a/xbmc/windowing/osx/WinSystemIOS.h b/xbmc/windowing/osx/WinSystemIOS.h
index 7ecdf672a7..2ee5645b22 100644
--- a/xbmc/windowing/osx/WinSystemIOS.h
+++ b/xbmc/windowing/osx/WinSystemIOS.h
@@ -72,6 +72,8 @@ public:
virtual int GetNumScreens();
virtual int GetCurrentScreen();
+ virtual std::unique_ptr<CVideoSync> GetVideoSync(void *clock) override;
+
bool InitDisplayLink(CVideoSyncIos *syncImpl);
void DeinitDisplayLink(void);
void OnAppFocusChange(bool focus);
diff --git a/xbmc/windowing/osx/WinSystemIOS.mm b/xbmc/windowing/osx/WinSystemIOS.mm
index a2e74332a4..84f1770185 100644
--- a/xbmc/windowing/osx/WinSystemIOS.mm
+++ b/xbmc/windowing/osx/WinSystemIOS.mm
@@ -18,7 +18,6 @@
*
*/
-#if defined(TARGET_DARWIN_IOS)
//hack around problem with xbmc's typedef int BOOL
// and obj-c's typedef unsigned char BOOL
#define BOOL XBMC_BOOL
@@ -26,7 +25,8 @@
#undef BOOL
#ifdef HAS_EGL
-#define BOOL XBMC_BOOL
+#define BOOL XBMC_BOOL
+#include "VideoSyncIos.h"
#include "WinSystemIOS.h"
#include "utils/log.h"
#include "filesystem/SpecialProtocol.h"
@@ -37,7 +37,7 @@
#include "utils/StringUtils.h"
#include "guilib/DispResource.h"
#include "threads/SingleLock.h"
-#include "video/videosync/VideoSyncIos.h"
+#include "VideoSyncIos.h"
#include <vector>
#undef BOOL
@@ -485,6 +485,11 @@ void* CWinSystemIOS::GetEAGLContextObj()
return [g_xbmcController getEAGLContextObj];
}
-#endif
+std::unique_ptr<CVideoSync> CWinSystemIOS::GetVideoSync(void *clock)
+{
+ std::unique_ptr<CVideoSync> pVSync(new CVideoSyncIos(clock));
+ return pVSync;
+}
#endif
+
diff --git a/xbmc/windowing/osx/WinSystemOSX.h b/xbmc/windowing/osx/WinSystemOSX.h
index c46e27b41e..fe37b26b68 100644
--- a/xbmc/windowing/osx/WinSystemOSX.h
+++ b/xbmc/windowing/osx/WinSystemOSX.h
@@ -74,6 +74,8 @@ public:
virtual int GetNumScreens();
virtual int GetCurrentScreen();
virtual double GetCurrentRefreshrate() { return m_refreshRate; }
+
+ virtual std::unique_ptr<CVideoSync> GetVideoSync(void *clock) override;
void WindowChangedScreen();
@@ -88,6 +90,7 @@ public:
std::string GetClipboardText(void);
+
protected:
void HandlePossibleRefreshrateChange();
void* CreateWindowedContext(void* shareCtx);
diff --git a/xbmc/windowing/osx/WinSystemOSX.mm b/xbmc/windowing/osx/WinSystemOSX.mm
index 752e8655a8..365bb0badb 100644
--- a/xbmc/windowing/osx/WinSystemOSX.mm
+++ b/xbmc/windowing/osx/WinSystemOSX.mm
@@ -18,13 +18,12 @@
*
*/
-#if defined(TARGET_DARWIN_OSX)
-
//hack around problem with xbmc's typedef int BOOL
// and obj-c's typedef unsigned char BOOL
#define BOOL XBMC_BOOL
#include "WinSystemOSX.h"
#include "WinEventsOSX.h"
+#include "VideoSyncOsx.h"
#include "Application.h"
#include "ServiceBroker.h"
#include "messaging/ApplicationMessenger.h"
@@ -1798,4 +1797,8 @@ std::string CWinSystemOSX::GetClipboardText(void)
return utf8_text;
}
-#endif
+std::unique_ptr<CVideoSync> CWinSystemOSX::GetVideoSync(void *clock)
+{
+ std::unique_ptr<CVideoSync> pVSync(new CVideoSyncOsx(clock));
+ return pVSync;
+}
diff --git a/xbmc/video/videosync/VideoSyncD3D.cpp b/xbmc/windowing/windows/VideoSyncD3D.cpp
index e48b91e121..e48b91e121 100644
--- a/xbmc/video/videosync/VideoSyncD3D.cpp
+++ b/xbmc/windowing/windows/VideoSyncD3D.cpp
diff --git a/xbmc/video/videosync/VideoSyncD3D.h b/xbmc/windowing/windows/VideoSyncD3D.h
index 486b6206f6..486b6206f6 100644
--- a/xbmc/video/videosync/VideoSyncD3D.h
+++ b/xbmc/windowing/windows/VideoSyncD3D.h