diff options
Diffstat (limited to 'Source/WebCore/platform/graphics/gstreamer')
3 files changed, 64 insertions, 1 deletions
diff --git a/Source/WebCore/platform/graphics/gstreamer/GStreamerGWorld.cpp b/Source/WebCore/platform/graphics/gstreamer/GStreamerGWorld.cpp index d179601..a4b20be 100644 --- a/Source/WebCore/platform/graphics/gstreamer/GStreamerGWorld.cpp +++ b/Source/WebCore/platform/graphics/gstreamer/GStreamerGWorld.cpp @@ -43,7 +43,8 @@ gboolean gstGWorldSyncMessageCallback(GstBus* bus, GstMessage* message, gpointer GStreamerGWorld* gstGWorld = static_cast<GStreamerGWorld*>(data); - if (gst_structure_has_name(message->structure, "prepare-xwindow-id")) + if (gst_structure_has_name(message->structure, "prepare-xwindow-id") + || gst_structure_has_name(message->structure, "have-ns-view")) gstGWorld->setWindowOverlay(message); return TRUE; } diff --git a/Source/WebCore/platform/graphics/gstreamer/PlatformVideoWindow.h b/Source/WebCore/platform/graphics/gstreamer/PlatformVideoWindow.h index f2a3ff2..d71e6d3 100644 --- a/Source/WebCore/platform/graphics/gstreamer/PlatformVideoWindow.h +++ b/Source/WebCore/platform/graphics/gstreamer/PlatformVideoWindow.h @@ -25,6 +25,10 @@ #include <wtf/PassRefPtr.h> #include <wtf/RefCounted.h> +#if PLATFORM(MAC) +#include <wtf/RetainPtr.h> +#endif + typedef struct _GstMessage GstMessage; namespace WebCore { @@ -38,13 +42,22 @@ class PlatformVideoWindow : public RefCounted<PlatformVideoWindow> { void prepareForOverlay(GstMessage*); +#if !PLATFORM(MAC) PlatformWidget window() const { return m_window; } +#else + PlatformWidget window() const { return m_window.get(); } +#endif unsigned long videoWindowId() const { return m_videoWindowId; } private: unsigned long m_videoWindowId; PlatformWidget m_videoWindow; +#if !PLATFORM(MAC) PlatformWidget m_window; +#else + RetainPtr<NSView> m_window; +#endif + }; } diff --git a/Source/WebCore/platform/graphics/gstreamer/PlatformVideoWindowMac.mm b/Source/WebCore/platform/graphics/gstreamer/PlatformVideoWindowMac.mm new file mode 100644 index 0000000..e98cf9b --- /dev/null +++ b/Source/WebCore/platform/graphics/gstreamer/PlatformVideoWindowMac.mm @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2011 Igalia S.L + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#include "config.h" +#include "PlatformVideoWindow.h" + +#if USE(GSTREAMER) + +#include <gst/gst.h> + +using namespace WebCore; + +PlatformVideoWindow::PlatformVideoWindow() +{ + m_window.adoptNS([[NSView alloc] init]); + m_videoWindowId = reinterpret_cast<unsigned long>(m_window.get()); +} + +PlatformVideoWindow::~PlatformVideoWindow() +{ + m_videoWindowId = 0; +} + +void PlatformVideoWindow::prepareForOverlay(GstMessage* message) +{ + if (gst_structure_has_name(message->structure, "have-ns-view")) { + m_videoWindow = static_cast<PlatformWidget>(g_value_get_pointer(gst_structure_get_value(message->structure, "nsview"))); + ASSERT(m_videoWindow); + [m_window.get() addSubview:m_videoWindow]; + } +} + +#endif // USE(GSTREAMER) |