#include "wx/thread.h" // wxMutex/wxMutexLocker
#ifdef __WXGTK__
-# include "wx/gtk/win_gtk.h"
+ #include <gtk/gtk.h>
# include <gdk/gdkx.h> // for GDK_WINDOW_XWINDOW
#endif
# define DEBUG_MAIN_THREAD
# endif // Debug
+#ifndef __WXGTK20__
extern void wxapp_install_idle_handler();
extern bool g_isIdle;
+#endif
extern bool g_mainThreadLocked;
#endif // wxGTK
public:
wxGStreamerMediaBackend();
- ~wxGStreamerMediaBackend();
+ virtual ~wxGStreamerMediaBackend();
virtual bool CreateControl(wxControl* ctrl, wxWindow* parent,
wxWindowID id,
if(event->count > 0)
return FALSE;
- GdkWindow *window = GTK_PIZZA(be->GetControl()->m_wxwindow)->bin_window;
+ GdkWindow *window = be->GetControl()->GTKGetDrawingWindow();
// I've seen this reccommended somewhere...
// TODO: Is this needed? Maybe it is just cruft...
//-----------------------------------------------------------------------------
#ifdef __WXGTK__
extern "C" {
-static gint gtk_window_realize_callback(GtkWidget* theWidget,
+static gint gtk_window_realize_callback(GtkWidget*,
wxGStreamerMediaBackend* be)
{
DEBUG_MAIN_THREAD // TODO: Is this neccessary?
+#ifndef __WXGTK20__
if (g_isIdle) // FIXME: Why is needed? For wxYield? ??
wxapp_install_idle_handler();
+#endif
wxYield(); // FIXME: RN: X Server gets an error/crash if I don't do
// this or a messagebox beforehand?!?!??
- GdkWindow *window = GTK_PIZZA(theWidget)->bin_window;
+ GdkWindow *window = be->GetControl()->GTKGetDrawingWindow();
wxASSERT(window);
gst_x_overlay_set_xwindow_id( GST_X_OVERLAY(be->m_xoverlay),
else
{
wxYield(); // see realize callback...
- GdkWindow *window = GTK_PIZZA(m_ctrl->m_wxwindow)->bin_window;
+ GdkWindow *window = m_ctrl->m_wxwindow->GTKGetDrawingWindow();
wxASSERT(window);
#endif
// Sets m_playbin to NULL signifying we havn't loaded anything yet
//-----------------------------------------------------------------------------
wxGStreamerMediaBackend::wxGStreamerMediaBackend()
- : m_playbin(NULL)
+ : m_playbin(NULL),
+ m_eventHandler(NULL)
{
}
// Create our playbin object
m_playbin = gst_element_factory_make ("playbin", "play");
if (!GST_IS_ELEMENT(m_playbin))
- {
+ {
if(G_IS_OBJECT(m_playbin))
g_object_unref(m_playbin);
wxLogSysError(wxT("Got an invalid playbin"));
return false;
- }
+ }
#if GST_VERSION_MAJOR == 0 && GST_VERSION_MINOR < 10
// Connect the glib events/callbacks we want to our playbin
if( !TryAudioSink(audiosink) )
{
wxLogSysError(wxT("Could not find a valid audiosink"));
- return false;
+ return false;
}
}
}
g_object_unref(audiosink);
wxLogSysError(wxT("Could not find a suitable video sink"));
return false;
- }
+ }
}
}
}
return false;
}
+ // free current media resources
+ gst_element_set_state (m_playbin, GST_STATE_NULL);
+
// Make sure the passed URI is valid and tell playbin to load it
// non-file uris are encoded
wxASSERT(gst_uri_protocol_is_valid("file"));