]> git.saurik.com Git - wxWidgets.git/blobdiff - src/unix/mediactrl.cpp
use wxFSVolume instead of duplicating its functionality in the (MSW branch of) wxGetA...
[wxWidgets.git] / src / unix / mediactrl.cpp
index 3edabd669f0c273e67c541e8adcadc68647fe9d8..8a549b75bbdc65139a3f0e2394ea70d181f3ae2a 100644 (file)
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
-#include "wx/mediactrl.h"
-
 #if wxUSE_MEDIACTRL
 
+#include "wx/mediactrl.h"
+
 #if wxUSE_GSTREAMER
 
 #include <gst/gst.h>                // main gstreamer header
 #   include <gst/gconf/gconf.h>        // gstreamer glib configuration
 #endif
 
-#include "wx/log.h"                 // wxLogDebug/wxLogSysError/wxLogTrace
-#include "wx/app.h"                 // wxTheApp->argc, wxTheApp->argv
+#ifndef  WX_PRECOMP
+    #include "wx/log.h"             // wxLogDebug/wxLogSysError/wxLogTrace
+    #include "wx/app.h"             // wxTheApp->argc, wxTheApp->argv
+    #include "wx/timer.h"           // wxTimer
+#endif
+
 #include "wx/thread.h"              // wxMutex/wxMutexLocker
-#include "wx/timer.h"               // wxTimer
 
 #ifdef __WXGTK__
-#    include "wx/gtk/win_gtk.h"     // for <gdk/gdkx.h>/GDK_WINDOW_XWINDOW
+#    include "wx/gtk/win_gtk.h"
+#    include <gdk/gdkx.h>           // for GDK_WINDOW_XWINDOW
 #endif
 
 //-----------------------------------------------------------------------------
@@ -162,7 +166,7 @@ class WXDLLIMPEXP_MEDIA
 public:
 
     wxGStreamerMediaBackend();
-    ~wxGStreamerMediaBackend();
+    virtual ~wxGStreamerMediaBackend();
 
     virtual bool CreateControl(wxControl* ctrl, wxWindow* parent,
                                      wxWindowID id,
@@ -909,7 +913,7 @@ bool wxGStreamerMediaBackend::TryVideoSink(GstElement* videosink)
 //
 // Called when the media is about to stop
 //-----------------------------------------------------------------------------
-void wxGStreamerMediaEventHandler::OnMediaFinish(wxMediaEvent& event)
+void wxGStreamerMediaEventHandler::OnMediaFinish(wxMediaEvent& WXUNUSED(event))
 {
     // (RN - I have no idea why I thought this was good behaviour....
     // maybe it made sense for streaming/nonseeking data but
@@ -1033,7 +1037,7 @@ bool wxGStreamerMediaBackend::CreateControl(wxControl* ctrl, wxWindow* parent,
         if(error)
         {
             wxLogSysError(wxT("Could not initialize GStreamer\n")
-                          wxT("Error Message:%s"), 
+                          wxT("Error Message:%s"),
                           (const wxChar*) wxConvUTF8.cMB2WX(error->message)
                          );
             g_error_free(error);
@@ -1051,7 +1055,7 @@ bool wxGStreamerMediaBackend::CreateControl(wxControl* ctrl, wxWindow* parent,
 
 #ifdef __WXGTK__
     // We handle our own GTK expose events
-    m_ctrl->m_noExpose = TRUE;
+    m_ctrl->m_noExpose = true;
 #endif
 
     if( !m_ctrl->wxControl::Create(parent, id, pos, size,
@@ -1067,9 +1071,6 @@ bool wxGStreamerMediaBackend::CreateControl(wxControl* ctrl, wxWindow* parent,
     // so it doesn't draw over the video and cause sporadic
     // disappearances of the video
     gtk_widget_set_double_buffered(m_ctrl->m_wxwindow, FALSE);
-
-    // Tell GtkPizza not to clear the background
-    gtk_pizza_set_clear(GTK_PIZZA(m_ctrl->m_wxwindow), FALSE);
 #endif
 
     // don't erase the background of our control window
@@ -1196,11 +1197,11 @@ bool wxGStreamerMediaBackend::Load(const wxURI& location)
 
         //Workaround GstURI leading "//" problem and make sure it leads
         //with that
-        return DoLoad(wxString(wxT("file://")) + 
-                      uristring.Right(uristring.Length() - 5)
+        return DoLoad(wxString(wxT("file://")) +
+                      uristring.Right(uristring.length() - 5)
                      );
     }
-    else 
+    else
         return DoLoad(location.BuildURI());
 }
 
@@ -1235,6 +1236,9 @@ bool wxGStreamerMediaBackend::DoLoad(const wxString& locstring)
             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"));
@@ -1357,7 +1361,7 @@ wxMediaState wxGStreamerMediaBackend::GetState()
 // NB: whether we have paused or not and keep track of the time after the
 // NB: pause and whenever the user seeks while paused
 // NB:
-// 
+//
 // THREAD-UNSAFE, at least if not paused. Requires media to be at least paused.
 //-----------------------------------------------------------------------------
 wxLongLong wxGStreamerMediaBackend::GetPosition()