d3dvideosink: port to the new GLib thread API

This commit is contained in:
Mark Nauwelaerts 2012-09-11 15:02:00 +02:00
parent 82f46a5efe
commit 4a843dbbac
3 changed files with 13 additions and 17 deletions

View file

@ -319,7 +319,7 @@ gst_d3dvideosink_init (GstD3DVideoSink * sink)
{ {
gst_d3dvideosink_clear (sink); gst_d3dvideosink_clear (sink);
sink->d3d_device_lock = g_mutex_new (); g_mutex_init (&sink->d3d_device_lock);
sink->par = g_new0 (GValue, 1); sink->par = g_new0 (GValue, 1);
g_value_init (sink->par, GST_TYPE_FRACTION); g_value_init (sink->par, GST_TYPE_FRACTION);
@ -341,8 +341,7 @@ gst_d3dvideosink_finalize (GObject * gobject)
sink->par = NULL; sink->par = NULL;
} }
g_mutex_free (sink->d3d_device_lock); g_mutex_clear (&sink->d3d_device_lock);
sink->d3d_device_lock = NULL;
G_OBJECT_CLASS (parent_class)->finalize (gobject); G_OBJECT_CLASS (parent_class)->finalize (gobject);
} }
@ -526,8 +525,8 @@ gst_d3dvideosink_create_shared_hidden_window (GstD3DVideoSink * sink)
if (shared.hidden_window_created_signal == NULL) if (shared.hidden_window_created_signal == NULL)
goto failed; goto failed;
shared.hidden_window_thread = g_thread_create ((GThreadFunc) shared.hidden_window_thread = g_thread_try_new ("shared hidden window thread",
gst_d3dvideosink_shared_hidden_window_thread, sink, TRUE, NULL); (GThreadFunc) gst_d3dvideosink_shared_hidden_window_thread, sink, NULL);
/* wait maximum 60 seconds for window to be created */ /* wait maximum 60 seconds for window to be created */
if (WaitForSingleObject (shared.hidden_window_created_signal, if (WaitForSingleObject (shared.hidden_window_created_signal,
@ -1044,9 +1043,8 @@ gst_d3dvideosink_create_default_window (GstD3DVideoSink * sink)
if (sink->window_created_signal == NULL) if (sink->window_created_signal == NULL)
goto failed; goto failed;
sink->window_thread = sink->window_thread = g_thread_try_new ("window thread",
g_thread_create ((GThreadFunc) gst_d3dvideosink_window_thread, sink, TRUE, (GThreadFunc) gst_d3dvideosink_window_thread, sink, NULL);
NULL);
/* wait maximum 10 seconds for window to be created */ /* wait maximum 10 seconds for window to be created */
if (WaitForSingleObject (sink->window_created_signal, 10000) != WAIT_OBJECT_0) if (WaitForSingleObject (sink->window_created_signal, 10000) != WAIT_OBJECT_0)

View file

@ -63,17 +63,15 @@ G_BEGIN_DECLS
typedef struct _GstD3DVideoSink GstD3DVideoSink; typedef struct _GstD3DVideoSink GstD3DVideoSink;
typedef struct _GstD3DVideoSinkClass GstD3DVideoSinkClass; typedef struct _GstD3DVideoSinkClass GstD3DVideoSinkClass;
#define GST_D3DVIDEOSINK_D3D_DEVICE_LOCK(sink) g_mutex_lock (GST_D3DVIDEOSINK (sink)->d3d_device_lock) #define GST_D3DVIDEOSINK_D3D_DEVICE_LOCK(sink) g_mutex_lock (&GST_D3DVIDEOSINK (sink)->d3d_device_lock)
#define GST_D3DVIDEOSINK_D3D_DEVICE_TRYLOCK(sink) g_mutex_trylock (GST_D3DVIDEOSINK (sink)->d3d_device_lock) #define GST_D3DVIDEOSINK_D3D_DEVICE_TRYLOCK(sink) g_mutex_trylock (&GST_D3DVIDEOSINK (sink)->d3d_device_lock)
#define GST_D3DVIDEOSINK_D3D_DEVICE_UNLOCK(sink) g_mutex_unlock (GST_D3DVIDEOSINK (sink)->d3d_device_lock) #define GST_D3DVIDEOSINK_D3D_DEVICE_UNLOCK(sink) g_mutex_unlock (&GST_D3DVIDEOSINK (sink)->d3d_device_lock)
struct _GstD3DVideoSink struct _GstD3DVideoSink
{ {
GstVideoSink sink; GstVideoSink sink;
/* source rectangle */ /* source rectangle */
//gint width;
//gint height;
GstVideoFormat format; GstVideoFormat format;
GstVideoInfo info; GstVideoInfo info;
@ -100,7 +98,7 @@ struct _GstD3DVideoSink
WNDPROC prevWndProc; WNDPROC prevWndProc;
gboolean is_hooked; gboolean is_hooked;
GMutex *d3d_device_lock; GMutex d3d_device_lock;
LPDIRECT3DSURFACE9 d3d_offscreen_surface; LPDIRECT3DSURFACE9 d3d_offscreen_surface;
LPDIRECT3DDEVICE9 d3ddev; LPDIRECT3DDEVICE9 d3ddev;
D3DPRESENT_PARAMETERS d3dpp; D3DPRESENT_PARAMETERS d3dpp;

View file

@ -46,8 +46,8 @@ init_supported_apis (void)
static DirectXAPI *directx_determine_best_available_api (void); static DirectXAPI *directx_determine_best_available_api (void);
/* Mutex macros */ /* Mutex macros */
#define DIRECTX_LOCK g_static_rec_mutex_lock (&dx_lock); #define DIRECTX_LOCK g_rec_mutex_lock (&dx_lock);
#define DIRECTX_UNLOCK g_static_rec_mutex_unlock (&dx_lock); #define DIRECTX_UNLOCK g_rec_mutex_unlock (&dx_lock);
typedef struct _DirectXInfo DirectXInfo; typedef struct _DirectXInfo DirectXInfo;
struct _DirectXInfo struct _DirectXInfo
@ -63,7 +63,7 @@ struct _DirectXInfo
/* Private vars */ /* Private vars */
static DirectXInfo dx; static DirectXInfo dx;
static GStaticRecMutex dx_lock = G_STATIC_REC_MUTEX_INIT; static GRecMutex dx_lock;
gboolean gboolean
directx_initialize (DirectXInitParams * init_params) directx_initialize (DirectXInitParams * init_params)