mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-11 01:45:33 +00:00
port to new gthread API
This commit is contained in:
parent
a0d9ac6bb1
commit
27ee60a27b
31 changed files with 188 additions and 211 deletions
|
@ -207,8 +207,8 @@ gst_ass_render_init (GstAssRender * render)
|
|||
|
||||
gst_video_info_init (&render->info);
|
||||
|
||||
render->subtitle_mutex = g_mutex_new ();
|
||||
render->subtitle_cond = g_cond_new ();
|
||||
g_mutex_init (&render->subtitle_mutex);
|
||||
g_cond_init (&render->subtitle_cond);
|
||||
|
||||
render->renderer_init_ok = FALSE;
|
||||
render->track_init_ok = FALSE;
|
||||
|
@ -218,7 +218,7 @@ gst_ass_render_init (GstAssRender * render)
|
|||
gst_segment_init (&render->video_segment, GST_FORMAT_TIME);
|
||||
gst_segment_init (&render->subtitle_segment, GST_FORMAT_TIME);
|
||||
|
||||
render->ass_mutex = g_mutex_new ();
|
||||
g_mutex_init (&render->ass_mutex);
|
||||
render->ass_library = ass_library_init ();
|
||||
#if defined(LIBASS_VERSION) && LIBASS_VERSION >= 0x00907000
|
||||
ass_set_message_cb (render->ass_library, _libass_message_cb, render);
|
||||
|
@ -241,11 +241,8 @@ gst_ass_render_finalize (GObject * object)
|
|||
{
|
||||
GstAssRender *render = GST_ASS_RENDER (object);
|
||||
|
||||
if (render->subtitle_mutex)
|
||||
g_mutex_free (render->subtitle_mutex);
|
||||
|
||||
if (render->subtitle_cond)
|
||||
g_cond_free (render->subtitle_cond);
|
||||
g_mutex_clear (&render->subtitle_mutex);
|
||||
g_cond_clear (&render->subtitle_cond);
|
||||
|
||||
if (render->ass_track) {
|
||||
ass_free_track (render->ass_track);
|
||||
|
@ -259,8 +256,7 @@ gst_ass_render_finalize (GObject * object)
|
|||
ass_library_done (render->ass_library);
|
||||
}
|
||||
|
||||
if (render->ass_mutex)
|
||||
g_mutex_free (render->ass_mutex);
|
||||
g_mutex_clear (&render->ass_mutex);
|
||||
|
||||
G_OBJECT_CLASS (parent_class)->finalize (object);
|
||||
}
|
||||
|
@ -277,9 +273,9 @@ gst_ass_render_set_property (GObject * object, guint prop_id,
|
|||
break;
|
||||
case PROP_EMBEDDEDFONTS:
|
||||
render->embeddedfonts = g_value_get_boolean (value);
|
||||
g_mutex_lock (render->ass_mutex);
|
||||
g_mutex_lock (&render->ass_mutex);
|
||||
ass_set_extract_fonts (render->ass_library, render->embeddedfonts);
|
||||
g_mutex_unlock (render->ass_mutex);
|
||||
g_mutex_unlock (&render->ass_mutex);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
|
@ -324,13 +320,13 @@ gst_ass_render_change_state (GstElement * element, GstStateChange transition)
|
|||
break;
|
||||
|
||||
case GST_STATE_CHANGE_PAUSED_TO_READY:
|
||||
g_mutex_lock (render->subtitle_mutex);
|
||||
g_mutex_lock (&render->subtitle_mutex);
|
||||
render->subtitle_flushing = TRUE;
|
||||
if (render->subtitle_pending)
|
||||
gst_buffer_unref (render->subtitle_pending);
|
||||
render->subtitle_pending = NULL;
|
||||
g_cond_signal (render->subtitle_cond);
|
||||
g_mutex_unlock (render->subtitle_mutex);
|
||||
g_cond_signal (&render->subtitle_cond);
|
||||
g_mutex_unlock (&render->subtitle_mutex);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -338,11 +334,11 @@ gst_ass_render_change_state (GstElement * element, GstStateChange transition)
|
|||
|
||||
switch (transition) {
|
||||
case GST_STATE_CHANGE_PAUSED_TO_READY:
|
||||
g_mutex_lock (render->ass_mutex);
|
||||
g_mutex_lock (&render->ass_mutex);
|
||||
if (render->ass_track)
|
||||
ass_free_track (render->ass_track);
|
||||
render->ass_track = NULL;
|
||||
g_mutex_unlock (render->ass_mutex);
|
||||
g_mutex_unlock (&render->ass_mutex);
|
||||
render->track_init_ok = FALSE;
|
||||
render->renderer_init_ok = FALSE;
|
||||
break;
|
||||
|
@ -400,13 +396,13 @@ gst_ass_render_event_src (GstPad * pad, GstObject * parent, GstEvent * event)
|
|||
gst_pad_push_event (render->srcpad, gst_event_new_flush_start ());
|
||||
|
||||
/* Mark subtitle as flushing, unblocks chains */
|
||||
g_mutex_lock (render->subtitle_mutex);
|
||||
g_mutex_lock (&render->subtitle_mutex);
|
||||
if (render->subtitle_pending)
|
||||
gst_buffer_unref (render->subtitle_pending);
|
||||
render->subtitle_pending = NULL;
|
||||
render->subtitle_flushing = TRUE;
|
||||
g_cond_signal (render->subtitle_cond);
|
||||
g_mutex_unlock (render->subtitle_mutex);
|
||||
g_cond_signal (&render->subtitle_cond);
|
||||
g_mutex_unlock (&render->subtitle_mutex);
|
||||
|
||||
/* Seek on each sink pad */
|
||||
gst_event_ref (event);
|
||||
|
@ -780,7 +776,7 @@ gst_ass_render_setcaps_video (GstPad * pad, GstCaps * caps)
|
|||
goto out;
|
||||
}
|
||||
|
||||
g_mutex_lock (render->ass_mutex);
|
||||
g_mutex_lock (&render->ass_mutex);
|
||||
ass_set_frame_size (render->ass_renderer, info.width, info.height);
|
||||
|
||||
dar = (((gdouble) par_n) * ((gdouble) info.width))
|
||||
|
@ -803,7 +799,7 @@ gst_ass_render_setcaps_video (GstPad * pad, GstCaps * caps)
|
|||
#endif
|
||||
ass_set_margins (render->ass_renderer, 0, 0, 0, 0);
|
||||
ass_set_use_margins (render->ass_renderer, 0);
|
||||
g_mutex_unlock (render->ass_mutex);
|
||||
g_mutex_unlock (&render->ass_mutex);
|
||||
|
||||
render->renderer_init_ok = TRUE;
|
||||
|
||||
|
@ -841,7 +837,7 @@ gst_ass_render_setcaps_text (GstPad * pad, GstCaps * caps)
|
|||
|
||||
value = gst_structure_get_value (structure, "codec_data");
|
||||
|
||||
g_mutex_lock (render->ass_mutex);
|
||||
g_mutex_lock (&render->ass_mutex);
|
||||
if (value != NULL) {
|
||||
priv = gst_value_get_buffer (value);
|
||||
g_return_val_if_fail (priv != NULL, FALSE);
|
||||
|
@ -869,7 +865,7 @@ gst_ass_render_setcaps_text (GstPad * pad, GstCaps * caps)
|
|||
|
||||
ret = TRUE;
|
||||
}
|
||||
g_mutex_unlock (render->ass_mutex);
|
||||
g_mutex_unlock (&render->ass_mutex);
|
||||
|
||||
gst_object_unref (render);
|
||||
|
||||
|
@ -897,9 +893,9 @@ gst_ass_render_process_text (GstAssRender * render, GstBuffer * buffer,
|
|||
|
||||
data = gst_buffer_map (buffer, &size, NULL, GST_MAP_READ);
|
||||
|
||||
g_mutex_lock (render->ass_mutex);
|
||||
g_mutex_lock (&render->ass_mutex);
|
||||
ass_process_chunk (render->ass_track, data, size, pts_start, pts_end);
|
||||
g_mutex_unlock (render->ass_mutex);
|
||||
g_mutex_unlock (&render->ass_mutex);
|
||||
|
||||
gst_buffer_unmap (buffer, data, size);
|
||||
gst_buffer_unref (buffer);
|
||||
|
@ -953,7 +949,7 @@ gst_ass_render_chain_video (GstPad * pad, GstObject * parent,
|
|||
|
||||
render->video_segment.position = clip_start;
|
||||
|
||||
g_mutex_lock (render->subtitle_mutex);
|
||||
g_mutex_lock (&render->subtitle_mutex);
|
||||
if (render->subtitle_pending) {
|
||||
GstClockTime sub_running_time, vid_running_time;
|
||||
GstClockTime sub_running_time_end, vid_running_time_end;
|
||||
|
@ -979,15 +975,15 @@ gst_ass_render_chain_video (GstPad * pad, GstObject * parent,
|
|||
GST_TIME_FORMAT, GST_TIME_ARGS (sub_running_time_end),
|
||||
GST_TIME_ARGS (vid_running_time));
|
||||
render->subtitle_pending = NULL;
|
||||
g_cond_signal (render->subtitle_cond);
|
||||
g_cond_signal (&render->subtitle_cond);
|
||||
} else if (sub_running_time <= vid_running_time_end + GST_SECOND / 2) {
|
||||
gst_ass_render_process_text (render, render->subtitle_pending,
|
||||
sub_running_time, sub_running_time_end - sub_running_time);
|
||||
render->subtitle_pending = NULL;
|
||||
g_cond_signal (render->subtitle_cond);
|
||||
g_cond_signal (&render->subtitle_cond);
|
||||
}
|
||||
}
|
||||
g_mutex_unlock (render->subtitle_mutex);
|
||||
g_mutex_unlock (&render->subtitle_mutex);
|
||||
|
||||
/* now start rendering subtitles, if all conditions are met */
|
||||
if (render->renderer_init_ok && render->track_init_ok && render->enable) {
|
||||
|
@ -1006,7 +1002,7 @@ gst_ass_render_chain_video (GstPad * pad, GstObject * parent,
|
|||
/* libass needs timestamps in ms */
|
||||
timestamp = running_time / GST_MSECOND;
|
||||
|
||||
g_mutex_lock (render->ass_mutex);
|
||||
g_mutex_lock (&render->ass_mutex);
|
||||
#ifndef GST_DISABLE_GST_DEBUG
|
||||
/* only for testing right now. could possibly be used for optimizations? */
|
||||
step = ass_step_sub (render->ass_track, timestamp, 1);
|
||||
|
@ -1018,7 +1014,7 @@ gst_ass_render_chain_video (GstPad * pad, GstObject * parent,
|
|||
/* not sure what the last parameter to this call is for (detect_change) */
|
||||
ass_image = ass_render_frame (render->ass_renderer, render->ass_track,
|
||||
timestamp, NULL);
|
||||
g_mutex_unlock (render->ass_mutex);
|
||||
g_mutex_unlock (&render->ass_mutex);
|
||||
|
||||
if (ass_image != NULL) {
|
||||
GstVideoFrame frame;
|
||||
|
@ -1108,11 +1104,11 @@ gst_ass_render_chain_text (GstPad * pad, GstObject * parent, GstBuffer * buffer)
|
|||
|
||||
if (sub_running_time > vid_running_time + GST_SECOND / 2) {
|
||||
g_assert (render->subtitle_pending == NULL);
|
||||
g_mutex_lock (render->subtitle_mutex);
|
||||
g_mutex_lock (&render->subtitle_mutex);
|
||||
if (G_UNLIKELY (render->subtitle_flushing)) {
|
||||
GST_DEBUG_OBJECT (render, "Text pad flushing");
|
||||
gst_buffer_unref (buffer);
|
||||
g_mutex_unlock (render->subtitle_mutex);
|
||||
g_mutex_unlock (&render->subtitle_mutex);
|
||||
return GST_FLOW_WRONG_STATE;
|
||||
}
|
||||
GST_DEBUG_OBJECT (render,
|
||||
|
@ -1120,8 +1116,8 @@ gst_ass_render_chain_text (GstPad * pad, GstObject * parent, GstBuffer * buffer)
|
|||
GST_TIME_FORMAT, GST_TIME_ARGS (sub_running_time),
|
||||
GST_TIME_ARGS (vid_running_time));
|
||||
render->subtitle_pending = buffer;
|
||||
g_cond_wait (render->subtitle_cond, render->subtitle_mutex);
|
||||
g_mutex_unlock (render->subtitle_mutex);
|
||||
g_cond_wait (&render->subtitle_cond, &render->subtitle_mutex);
|
||||
g_mutex_unlock (&render->subtitle_mutex);
|
||||
} else if (sub_running_time_end < vid_running_time) {
|
||||
GST_DEBUG_OBJECT (render,
|
||||
"Too late text buffer, dropping (%" GST_TIME_FORMAT " < %"
|
||||
|
@ -1212,11 +1208,11 @@ gst_ass_render_handle_tags (GstAssRender * render, GstTagList * taglist)
|
|||
}
|
||||
|
||||
if (valid_mimetype || valid_extension) {
|
||||
g_mutex_lock (render->ass_mutex);
|
||||
g_mutex_lock (&render->ass_mutex);
|
||||
ass_add_font (render->ass_library, (gchar *) filename,
|
||||
(gchar *) GST_BUFFER_DATA (buf), GST_BUFFER_SIZE (buf));
|
||||
GST_DEBUG_OBJECT (render, "registered new font %s", filename);
|
||||
g_mutex_unlock (render->ass_mutex);
|
||||
g_mutex_unlock (&render->ass_mutex);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -1368,7 +1364,7 @@ gst_ass_render_event_text (GstPad * pad, GstObject * parent, GstEvent * event)
|
|||
break;
|
||||
case GST_EVENT_FLUSH_START:
|
||||
GST_DEBUG_OBJECT (render, "begin flushing");
|
||||
g_mutex_lock (render->ass_mutex);
|
||||
g_mutex_lock (&render->ass_mutex);
|
||||
if (render->ass_track) {
|
||||
/* delete any events on the ass_track */
|
||||
for (i = 0; i < render->ass_track->n_events; i++) {
|
||||
|
@ -1378,14 +1374,14 @@ gst_ass_render_event_text (GstPad * pad, GstObject * parent, GstEvent * event)
|
|||
render->ass_track->n_events = 0;
|
||||
GST_DEBUG_OBJECT (render, "done flushing");
|
||||
}
|
||||
g_mutex_unlock (render->ass_mutex);
|
||||
g_mutex_lock (render->subtitle_mutex);
|
||||
g_mutex_unlock (&render->ass_mutex);
|
||||
g_mutex_lock (&render->subtitle_mutex);
|
||||
if (render->subtitle_pending)
|
||||
gst_buffer_unref (render->subtitle_pending);
|
||||
render->subtitle_pending = NULL;
|
||||
render->subtitle_flushing = TRUE;
|
||||
g_cond_signal (render->subtitle_cond);
|
||||
g_mutex_unlock (render->subtitle_mutex);
|
||||
g_cond_signal (&render->subtitle_cond);
|
||||
g_mutex_unlock (&render->subtitle_mutex);
|
||||
gst_event_unref (event);
|
||||
ret = TRUE;
|
||||
break;
|
||||
|
|
|
@ -60,13 +60,13 @@ struct _GstAssRender
|
|||
GstVideoInfo info;
|
||||
GstAssRenderBlitFunction blit;
|
||||
|
||||
GMutex *subtitle_mutex;
|
||||
GCond *subtitle_cond;
|
||||
GMutex subtitle_mutex;
|
||||
GCond subtitle_cond;
|
||||
GstBuffer *subtitle_pending;
|
||||
gboolean subtitle_flushing;
|
||||
GstSegment subtitle_segment;
|
||||
|
||||
GMutex *ass_mutex;
|
||||
GMutex ass_mutex;
|
||||
ASS_Library *ass_library;
|
||||
ASS_Renderer *ass_renderer;
|
||||
ASS_Track *ass_track;
|
||||
|
|
|
@ -179,7 +179,7 @@ gst_mplex_finalize (GObject * object)
|
|||
/* ... and of the rest */
|
||||
delete mplex->job;
|
||||
|
||||
g_mutex_free (mplex->tlock);
|
||||
g_mutex_clear (&mplex->tlock);
|
||||
|
||||
G_OBJECT_CLASS (parent_class)->finalize (object);
|
||||
}
|
||||
|
@ -200,7 +200,7 @@ gst_mplex_init (GstMplex * mplex)
|
|||
mplex->num_apads = 0;
|
||||
mplex->num_vpads = 0;
|
||||
|
||||
mplex->tlock = g_mutex_new ();
|
||||
g_mutex_init (&mplex->tlock);
|
||||
|
||||
gst_mplex_reset (mplex);
|
||||
}
|
||||
|
@ -231,7 +231,7 @@ gst_mplex_reset (GstMplex * mplex)
|
|||
}
|
||||
|
||||
if (!mpad->pad) {
|
||||
g_cond_free (mpad->cond);
|
||||
g_cond_clear (&mpad->cond);
|
||||
g_object_unref (mpad->adapter);
|
||||
g_free (mpad);
|
||||
} else
|
||||
|
@ -630,7 +630,7 @@ gst_mplex_request_new_pad (GstElement * element,
|
|||
|
||||
mpad = g_new0 (GstMplexPad, 1);
|
||||
mpad->adapter = gst_adapter_new ();
|
||||
mpad->cond = g_cond_new ();
|
||||
g_cond_init (&mpad->cond);
|
||||
gst_object_ref (newpad);
|
||||
mpad->pad = newpad;
|
||||
|
||||
|
|
|
@ -46,23 +46,23 @@ GST_DEBUG_CATEGORY_EXTERN (mplex_debug);
|
|||
|
||||
#define GST_MPLEX_MUTEX_LOCK(m) G_STMT_START { \
|
||||
GST_LOG_OBJECT (m, "locking tlock from thread %p", g_thread_self ()); \
|
||||
g_mutex_lock ((m)->tlock); \
|
||||
g_mutex_lock (&(m)->tlock); \
|
||||
GST_LOG_OBJECT (m, "locked tlock from thread %p", g_thread_self ()); \
|
||||
} G_STMT_END
|
||||
|
||||
#define GST_MPLEX_MUTEX_UNLOCK(m) G_STMT_START { \
|
||||
GST_LOG_OBJECT (m, "unlocking tlock from thread %p", g_thread_self ()); \
|
||||
g_mutex_unlock ((m)->tlock); \
|
||||
g_mutex_unlock (&(m)->tlock); \
|
||||
} G_STMT_END
|
||||
|
||||
#define GST_MPLEX_WAIT(m, p) G_STMT_START { \
|
||||
GST_LOG_OBJECT (m, "thread %p waiting", g_thread_self ()); \
|
||||
g_cond_wait ((p)->cond, (m)->tlock); \
|
||||
g_cond_wait (&(p)->cond, &(m)->tlock); \
|
||||
} G_STMT_END
|
||||
|
||||
#define GST_MPLEX_SIGNAL(m, p) G_STMT_START { \
|
||||
GST_LOG_OBJECT (m, "signalling from thread %p", g_thread_self ()); \
|
||||
g_cond_signal ((p)->cond); \
|
||||
g_cond_signal (&(p)->cond); \
|
||||
} G_STMT_END
|
||||
|
||||
#define GST_MPLEX_SIGNAL_ALL(m) G_STMT_START { \
|
||||
|
@ -84,7 +84,7 @@ typedef struct _GstMplexPad
|
|||
/* no more to expect on this pad */
|
||||
gboolean eos;
|
||||
/* signals counterpart thread to have a look */
|
||||
GCond *cond;
|
||||
GCond cond;
|
||||
/* amount needed by mplex on this stream */
|
||||
guint needed;
|
||||
/* bitstream for this pad */
|
||||
|
@ -103,7 +103,7 @@ typedef struct _GstMplex {
|
|||
GstMplexJob *job;
|
||||
|
||||
/* lock for syncing */
|
||||
GMutex *tlock;
|
||||
GMutex tlock;
|
||||
/* with TLOCK */
|
||||
/* muxer writer generated eos */
|
||||
gboolean eos;
|
||||
|
|
|
@ -181,10 +181,10 @@ gst_base_camera_src_start_capture (GstBaseCameraSrc * src)
|
|||
|
||||
GST_DEBUG_OBJECT (src, "Starting capture");
|
||||
|
||||
g_mutex_lock (src->capturing_mutex);
|
||||
g_mutex_lock (&src->capturing_mutex);
|
||||
if (src->capturing) {
|
||||
GST_WARNING_OBJECT (src, "Capturing already ongoing");
|
||||
g_mutex_unlock (src->capturing_mutex);
|
||||
g_mutex_unlock (&src->capturing_mutex);
|
||||
|
||||
/* post a warning to notify camerabin2 that the capture failed */
|
||||
GST_ELEMENT_WARNING (src, RESOURCE, BUSY, (NULL), (NULL));
|
||||
|
@ -200,7 +200,7 @@ gst_base_camera_src_start_capture (GstBaseCameraSrc * src)
|
|||
g_object_notify (G_OBJECT (src), "ready-for-capture");
|
||||
GST_WARNING_OBJECT (src, "Failed to start capture");
|
||||
}
|
||||
g_mutex_unlock (src->capturing_mutex);
|
||||
g_mutex_unlock (&src->capturing_mutex);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -210,14 +210,14 @@ gst_base_camera_src_stop_capture (GstBaseCameraSrc * src)
|
|||
|
||||
g_return_if_fail (klass->stop_capture != NULL);
|
||||
|
||||
g_mutex_lock (src->capturing_mutex);
|
||||
g_mutex_lock (&src->capturing_mutex);
|
||||
if (!src->capturing) {
|
||||
GST_DEBUG_OBJECT (src, "No ongoing capture");
|
||||
g_mutex_unlock (src->capturing_mutex);
|
||||
g_mutex_unlock (&src->capturing_mutex);
|
||||
return;
|
||||
}
|
||||
klass->stop_capture (src);
|
||||
g_mutex_unlock (src->capturing_mutex);
|
||||
g_mutex_unlock (&src->capturing_mutex);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -234,7 +234,7 @@ gst_base_camera_src_dispose (GObject * object)
|
|||
{
|
||||
GstBaseCameraSrc *src = GST_BASE_CAMERA_SRC_CAST (object);
|
||||
|
||||
g_mutex_free (src->capturing_mutex);
|
||||
g_mutex_clear (&src->capturing_mutex);
|
||||
|
||||
if (src->preview_pipeline) {
|
||||
gst_camerabin_destroy_preview_pipeline (src->preview_pipeline);
|
||||
|
@ -542,7 +542,7 @@ gst_base_camera_src_init (GstBaseCameraSrc * self)
|
|||
self->mode = MODE_IMAGE;
|
||||
|
||||
self->capturing = FALSE;
|
||||
self->capturing_mutex = g_mutex_new ();
|
||||
g_mutex_init (&self->capturing_mutex);
|
||||
|
||||
self->post_preview = DEFAULT_POST_PREVIEW;
|
||||
|
||||
|
|
|
@ -69,7 +69,7 @@ struct _GstBaseCameraSrc
|
|||
GstCameraBinMode mode;
|
||||
|
||||
gboolean capturing;
|
||||
GMutex *capturing_mutex;
|
||||
GMutex capturing_mutex;
|
||||
|
||||
/* Preview convert pipeline */
|
||||
GstCaps *preview_caps;
|
||||
|
|
|
@ -68,7 +68,7 @@ bus_callback (GstBus * bus, GstMessage * message, gpointer user_data)
|
|||
data->pipeline = NULL;
|
||||
}
|
||||
|
||||
g_cond_signal (data->processing_cond);
|
||||
g_cond_signal (&data->processing_cond);
|
||||
|
||||
break;
|
||||
}
|
||||
|
@ -101,13 +101,13 @@ gst_camerabin_preview_pipeline_new_sample (GstAppSink * appsink,
|
|||
"This element has no bus, therefore no message sent!");
|
||||
}
|
||||
|
||||
g_mutex_lock (data->processing_lock);
|
||||
g_mutex_lock (&data->processing_lock);
|
||||
|
||||
data->processing--;
|
||||
if (data->processing == 0)
|
||||
g_cond_signal (data->processing_cond);
|
||||
g_cond_signal (&data->processing_cond);
|
||||
|
||||
g_mutex_unlock (data->processing_lock);
|
||||
g_mutex_unlock (&data->processing_lock);
|
||||
|
||||
return GST_FLOW_OK;
|
||||
}
|
||||
|
@ -195,8 +195,8 @@ gst_camerabin_create_preview_pipeline (GstElement * element,
|
|||
data->filter = filter;
|
||||
data->vscale = vscale;
|
||||
|
||||
data->processing_lock = g_mutex_new ();
|
||||
data->processing_cond = g_cond_new ();
|
||||
g_mutex_init (&data->processing_lock);
|
||||
g_cond_init (&data->processing_cond);
|
||||
|
||||
data->pending_preview_caps = NULL;
|
||||
data->processing = 0;
|
||||
|
@ -230,13 +230,13 @@ gst_camerabin_destroy_preview_pipeline (GstCameraBinPreviewPipelineData *
|
|||
{
|
||||
g_return_if_fail (preview != NULL);
|
||||
|
||||
if (preview->processing_lock) {
|
||||
g_mutex_free (preview->processing_lock);
|
||||
preview->processing_lock = NULL;
|
||||
if (preview->processing_lock.p) {
|
||||
g_mutex_clear (&preview->processing_lock);
|
||||
preview->processing_lock.p = NULL;
|
||||
}
|
||||
if (preview->processing_cond) {
|
||||
g_cond_free (preview->processing_cond);
|
||||
preview->processing_cond = NULL;
|
||||
if (preview->processing_cond.p) {
|
||||
g_cond_clear (&preview->processing_cond);
|
||||
preview->processing_cond.p = NULL;
|
||||
}
|
||||
if (preview->pipeline) {
|
||||
gst_element_set_state (preview->pipeline, GST_STATE_NULL);
|
||||
|
@ -263,12 +263,12 @@ gst_camerabin_preview_pipeline_post (GstCameraBinPreviewPipelineData * preview,
|
|||
g_return_val_if_fail (preview->pipeline != NULL, FALSE);
|
||||
g_return_val_if_fail (buffer, FALSE);
|
||||
|
||||
g_mutex_lock (preview->processing_lock);
|
||||
g_mutex_lock (&preview->processing_lock);
|
||||
g_return_val_if_fail (preview->pipeline != NULL, FALSE);
|
||||
|
||||
if (preview->pending_preview_caps) {
|
||||
if (preview->processing > 0) {
|
||||
g_cond_wait (preview->processing_cond, preview->processing_lock);
|
||||
g_cond_wait (&preview->processing_cond, &preview->processing_lock);
|
||||
}
|
||||
_gst_camerabin_preview_set_caps (preview, preview->pending_preview_caps);
|
||||
gst_caps_replace (&preview->pending_preview_caps, NULL);
|
||||
|
@ -279,7 +279,7 @@ gst_camerabin_preview_pipeline_post (GstCameraBinPreviewPipelineData * preview,
|
|||
gst_app_src_push_buffer ((GstAppSrc *) preview->appsrc,
|
||||
gst_buffer_ref (buffer));
|
||||
|
||||
g_mutex_unlock (preview->processing_lock);
|
||||
g_mutex_unlock (&preview->processing_lock);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -321,7 +321,7 @@ gst_camerabin_preview_set_caps (GstCameraBinPreviewPipelineData * preview,
|
|||
{
|
||||
g_return_if_fail (preview != NULL);
|
||||
|
||||
g_mutex_lock (preview->processing_lock);
|
||||
g_mutex_lock (&preview->processing_lock);
|
||||
|
||||
if (preview->processing == 0) {
|
||||
_gst_camerabin_preview_set_caps (preview, caps);
|
||||
|
@ -329,7 +329,7 @@ gst_camerabin_preview_set_caps (GstCameraBinPreviewPipelineData * preview,
|
|||
GST_DEBUG ("Preview pipeline busy, storing new caps as pending");
|
||||
gst_caps_replace (&preview->pending_preview_caps, caps);
|
||||
}
|
||||
g_mutex_unlock (preview->processing_lock);
|
||||
g_mutex_unlock (&preview->processing_lock);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -352,7 +352,7 @@ gst_camerabin_preview_set_filter (GstCameraBinPreviewPipelineData * preview,
|
|||
|
||||
GST_DEBUG ("Preview pipeline setting new filter %p", filter);
|
||||
|
||||
g_mutex_lock (preview->processing_lock);
|
||||
g_mutex_lock (&preview->processing_lock);
|
||||
|
||||
gst_element_get_state (preview->pipeline, ¤t, NULL, 0);
|
||||
|
||||
|
@ -398,7 +398,7 @@ gst_camerabin_preview_set_filter (GstCameraBinPreviewPipelineData * preview,
|
|||
GST_WARNING ("Cannot change filter when pipeline is running");
|
||||
ret = FALSE;
|
||||
}
|
||||
g_mutex_unlock (preview->processing_lock);
|
||||
g_mutex_unlock (&preview->processing_lock);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -42,8 +42,8 @@ typedef struct
|
|||
|
||||
GstCaps *pending_preview_caps;
|
||||
guint processing;
|
||||
GMutex *processing_lock;
|
||||
GCond *processing_cond;
|
||||
GMutex processing_lock;
|
||||
GCond processing_cond;
|
||||
|
||||
} GstCameraBinPreviewPipelineData;
|
||||
|
||||
|
|
|
@ -130,7 +130,7 @@ gst_base_video_codec_init (GstBaseVideoCodec * base_video_codec,
|
|||
|
||||
gst_segment_init (&base_video_codec->segment, GST_FORMAT_TIME);
|
||||
|
||||
g_static_rec_mutex_init (&base_video_codec->stream_lock);
|
||||
g_rec_mutex_init (&base_video_codec->stream_lock);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -162,7 +162,7 @@ gst_base_video_codec_finalize (GObject * object)
|
|||
{
|
||||
GstBaseVideoCodec *base_video_codec = GST_BASE_VIDEO_CODEC (object);
|
||||
|
||||
g_static_rec_mutex_free (&base_video_codec->stream_lock);
|
||||
g_rec_mutex_clear (&base_video_codec->stream_lock);
|
||||
|
||||
G_OBJECT_CLASS (parent_class)->finalize (object);
|
||||
}
|
||||
|
|
|
@ -81,8 +81,8 @@ G_BEGIN_DECLS
|
|||
*/
|
||||
#define GST_BASE_VIDEO_CODEC_FLOW_NEED_DATA GST_FLOW_CUSTOM_SUCCESS
|
||||
|
||||
#define GST_BASE_VIDEO_CODEC_STREAM_LOCK(codec) g_static_rec_mutex_lock (&GST_BASE_VIDEO_CODEC (codec)->stream_lock)
|
||||
#define GST_BASE_VIDEO_CODEC_STREAM_UNLOCK(codec) g_static_rec_mutex_unlock (&GST_BASE_VIDEO_CODEC (codec)->stream_lock)
|
||||
#define GST_BASE_VIDEO_CODEC_STREAM_LOCK(codec) g_rec_mutex_lock (&GST_BASE_VIDEO_CODEC (codec)->stream_lock)
|
||||
#define GST_BASE_VIDEO_CODEC_STREAM_UNLOCK(codec) g_rec_mutex_unlock (&GST_BASE_VIDEO_CODEC (codec)->stream_lock)
|
||||
|
||||
typedef struct _GstVideoState GstVideoState;
|
||||
typedef struct _GstVideoFrameState GstVideoFrameState;
|
||||
|
@ -160,7 +160,7 @@ struct _GstBaseVideoCodec
|
|||
/* protects all data processing, i.e. is locked
|
||||
* in the chain function, finish_frame and when
|
||||
* processing serialized events */
|
||||
GStaticRecMutex stream_lock;
|
||||
GRecMutex stream_lock;
|
||||
|
||||
guint64 system_frame_number;
|
||||
|
||||
|
|
|
@ -501,7 +501,7 @@ gst_base_audio_visualizer_init (GstBaseAudioVisualizer * scope,
|
|||
scope->rate = GST_AUDIO_DEF_RATE;
|
||||
scope->channels = 2;
|
||||
|
||||
scope->config_lock = g_mutex_new ();
|
||||
g_mutex_init (&scope->config_lock);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -560,9 +560,9 @@ gst_base_audio_visualizer_dispose (GObject * object)
|
|||
g_free (scope->pixelbuf);
|
||||
scope->pixelbuf = NULL;
|
||||
}
|
||||
if (scope->config_lock) {
|
||||
g_mutex_free (scope->config_lock);
|
||||
scope->config_lock = NULL;
|
||||
if (scope->config_lock.p) {
|
||||
g_mutex_clear (&scope->config_lock);
|
||||
scope->config_lock.p = NULL;
|
||||
}
|
||||
G_OBJECT_CLASS (parent_class)->dispose (object);
|
||||
}
|
||||
|
@ -821,7 +821,7 @@ gst_base_audio_visualizer_chain (GstPad * pad, GstObject * parent,
|
|||
|
||||
gst_adapter_push (scope->adapter, buffer);
|
||||
|
||||
g_mutex_lock (scope->config_lock);
|
||||
g_mutex_lock (&scope->config_lock);
|
||||
|
||||
/* this is what we want */
|
||||
sbpf = scope->req_spf * scope->channels * sizeof (gint16);
|
||||
|
@ -865,9 +865,9 @@ gst_base_audio_visualizer_chain (GstPad * pad, GstObject * parent,
|
|||
}
|
||||
}
|
||||
|
||||
g_mutex_unlock (scope->config_lock);
|
||||
g_mutex_unlock (&scope->config_lock);
|
||||
ret = gst_buffer_pool_acquire_buffer (scope->pool, &outbuf, NULL);
|
||||
g_mutex_lock (scope->config_lock);
|
||||
g_mutex_lock (&scope->config_lock);
|
||||
/* recheck as the value could have changed */
|
||||
sbpf = scope->req_spf * scope->channels * sizeof (gint16);
|
||||
|
||||
|
@ -910,10 +910,10 @@ gst_base_audio_visualizer_chain (GstPad * pad, GstObject * parent,
|
|||
|
||||
gst_buffer_unmap (outbuf, vdata, scope->bpf);
|
||||
|
||||
g_mutex_unlock (scope->config_lock);
|
||||
g_mutex_unlock (&scope->config_lock);
|
||||
ret = gst_pad_push (scope->srcpad, outbuf);
|
||||
outbuf = NULL;
|
||||
g_mutex_lock (scope->config_lock);
|
||||
g_mutex_lock (&scope->config_lock);
|
||||
|
||||
skip:
|
||||
/* recheck as the value could have changed */
|
||||
|
@ -935,7 +935,7 @@ gst_base_audio_visualizer_chain (GstPad * pad, GstObject * parent,
|
|||
break;
|
||||
}
|
||||
|
||||
g_mutex_unlock (scope->config_lock);
|
||||
g_mutex_unlock (&scope->config_lock);
|
||||
|
||||
beach:
|
||||
return ret;
|
||||
|
|
|
@ -101,7 +101,7 @@ struct _GstBaseAudioVisualizer
|
|||
gint rate;
|
||||
|
||||
/* configuration mutex */
|
||||
GMutex *config_lock;
|
||||
GMutex config_lock;
|
||||
|
||||
/* QoS stuff *//* with LOCK */
|
||||
gdouble proportion;
|
||||
|
|
|
@ -377,14 +377,15 @@ gst_camera_bin_start_capture (GstCameraBin2 * camerabin)
|
|||
return;
|
||||
}
|
||||
|
||||
g_mutex_lock (camerabin->video_capture_mutex);
|
||||
g_mutex_lock (&camerabin->video_capture_mutex);
|
||||
while (camerabin->video_state == GST_CAMERA_BIN_VIDEO_FINISHING) {
|
||||
g_cond_wait (camerabin->video_state_cond, camerabin->video_capture_mutex);
|
||||
g_cond_wait (&camerabin->video_state_cond,
|
||||
&camerabin->video_capture_mutex);
|
||||
}
|
||||
if (camerabin->video_state != GST_CAMERA_BIN_VIDEO_IDLE) {
|
||||
GST_WARNING_OBJECT (camerabin, "Another video recording is ongoing"
|
||||
" (state %d), cannot start a new one", camerabin->video_state);
|
||||
g_mutex_unlock (camerabin->video_capture_mutex);
|
||||
g_mutex_unlock (&camerabin->video_capture_mutex);
|
||||
return;
|
||||
}
|
||||
camerabin->video_state = GST_CAMERA_BIN_VIDEO_STARTING;
|
||||
|
@ -410,20 +411,20 @@ gst_camera_bin_start_capture (GstCameraBin2 * camerabin)
|
|||
}
|
||||
} else {
|
||||
/* store the next capture buffer filename */
|
||||
g_mutex_lock (camerabin->image_capture_mutex);
|
||||
g_mutex_lock (&camerabin->image_capture_mutex);
|
||||
camerabin->image_location_list =
|
||||
g_slist_append (camerabin->image_location_list, g_strdup (location));
|
||||
g_mutex_unlock (camerabin->image_capture_mutex);
|
||||
g_mutex_unlock (&camerabin->image_capture_mutex);
|
||||
}
|
||||
|
||||
if (camerabin->post_previews) {
|
||||
/* Count processing of preview images too */
|
||||
GST_CAMERA_BIN2_PROCESSING_INC (camerabin);
|
||||
/* store the next preview filename */
|
||||
g_mutex_lock (camerabin->preview_list_mutex);
|
||||
g_mutex_lock (&camerabin->preview_list_mutex);
|
||||
camerabin->preview_location_list =
|
||||
g_slist_append (camerabin->preview_location_list, location);
|
||||
g_mutex_unlock (camerabin->preview_list_mutex);
|
||||
g_mutex_unlock (&camerabin->preview_list_mutex);
|
||||
} else {
|
||||
g_free (location);
|
||||
}
|
||||
|
@ -435,7 +436,7 @@ gst_camera_bin_start_capture (GstCameraBin2 * camerabin)
|
|||
gst_element_set_state (camerabin->audio_src, GST_STATE_PLAYING);
|
||||
|
||||
camerabin->video_state = GST_CAMERA_BIN_VIDEO_RECORDING;
|
||||
g_mutex_unlock (camerabin->video_capture_mutex);
|
||||
g_mutex_unlock (&camerabin->video_capture_mutex);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -450,11 +451,11 @@ gst_camera_bin_start_capture (GstCameraBin2 * camerabin)
|
|||
if (camerabin->mode == MODE_IMAGE) {
|
||||
/* Store image tags in a list and push them later, this prevents
|
||||
start_capture() from blocking in pad_push_event call */
|
||||
g_mutex_lock (camerabin->image_capture_mutex);
|
||||
g_mutex_lock (&camerabin->image_capture_mutex);
|
||||
camerabin->image_tags_list =
|
||||
g_slist_append (camerabin->image_tags_list,
|
||||
taglist ? gst_tag_list_copy (taglist) : NULL);
|
||||
g_mutex_unlock (camerabin->image_capture_mutex);
|
||||
g_mutex_unlock (&camerabin->image_capture_mutex);
|
||||
} else if (taglist) {
|
||||
GstPad *active_pad;
|
||||
|
||||
|
@ -474,7 +475,7 @@ gst_camera_bin_stop_capture (GstCameraBin2 * camerabin)
|
|||
{
|
||||
GST_DEBUG_OBJECT (camerabin, "Received stop-capture");
|
||||
if (camerabin->mode == MODE_VIDEO) {
|
||||
g_mutex_lock (camerabin->video_capture_mutex);
|
||||
g_mutex_lock (&camerabin->video_capture_mutex);
|
||||
if (camerabin->video_state == GST_CAMERA_BIN_VIDEO_RECORDING) {
|
||||
if (camerabin->src)
|
||||
g_signal_emit_by_name (camerabin->src, "stop-capture", NULL);
|
||||
|
@ -485,7 +486,7 @@ gst_camera_bin_stop_capture (GstCameraBin2 * camerabin)
|
|||
gst_element_send_event (camerabin->audio_src, gst_event_new_eos ());
|
||||
}
|
||||
}
|
||||
g_mutex_unlock (camerabin->video_capture_mutex);
|
||||
g_mutex_unlock (&camerabin->video_capture_mutex);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -540,10 +541,10 @@ gst_camera_bin_dispose (GObject * object)
|
|||
GstCameraBin2 *camerabin = GST_CAMERA_BIN2_CAST (object);
|
||||
|
||||
g_free (camerabin->location);
|
||||
g_mutex_free (camerabin->preview_list_mutex);
|
||||
g_mutex_free (camerabin->image_capture_mutex);
|
||||
g_mutex_free (camerabin->video_capture_mutex);
|
||||
g_cond_free (camerabin->video_state_cond);
|
||||
g_mutex_clear (&camerabin->preview_list_mutex);
|
||||
g_mutex_clear (&camerabin->image_capture_mutex);
|
||||
g_mutex_clear (&camerabin->video_capture_mutex);
|
||||
g_cond_clear (&camerabin->video_state_cond);
|
||||
|
||||
if (camerabin->src_capture_notify_id)
|
||||
g_signal_handler_disconnect (camerabin->src,
|
||||
|
@ -899,10 +900,10 @@ gst_camera_bin_init (GstCameraBin2 * camera)
|
|||
camera->zoom = DEFAULT_ZOOM;
|
||||
camera->max_zoom = MAX_ZOOM;
|
||||
camera->flags = DEFAULT_FLAGS;
|
||||
camera->preview_list_mutex = g_mutex_new ();
|
||||
camera->image_capture_mutex = g_mutex_new ();
|
||||
camera->video_capture_mutex = g_mutex_new ();
|
||||
camera->video_state_cond = g_cond_new ();
|
||||
g_mutex_init (&camera->preview_list_mutex);
|
||||
g_mutex_init (&camera->image_capture_mutex);
|
||||
g_mutex_init (&camera->video_capture_mutex);
|
||||
g_cond_init (&camera->video_state_cond);
|
||||
|
||||
/* capsfilters are created here as we proxy their caps properties and
|
||||
* this way we avoid having to store the caps while on NULL state to
|
||||
|
@ -959,7 +960,7 @@ gst_camera_bin_skip_next_preview (GstCameraBin2 * camerabin)
|
|||
{
|
||||
gchar *location;
|
||||
|
||||
g_mutex_lock (camerabin->preview_list_mutex);
|
||||
g_mutex_lock (&camerabin->preview_list_mutex);
|
||||
if (camerabin->preview_location_list) {
|
||||
location = camerabin->preview_location_list->data;
|
||||
GST_DEBUG_OBJECT (camerabin, "Skipping preview for %s", location);
|
||||
|
@ -971,7 +972,7 @@ gst_camera_bin_skip_next_preview (GstCameraBin2 * camerabin)
|
|||
} else {
|
||||
GST_WARNING_OBJECT (camerabin, "No previews to skip");
|
||||
}
|
||||
g_mutex_unlock (camerabin->preview_list_mutex);
|
||||
g_mutex_unlock (&camerabin->preview_list_mutex);
|
||||
}
|
||||
|
||||
static gpointer
|
||||
|
@ -980,7 +981,7 @@ gst_camera_bin_video_reset_elements (gpointer u_data)
|
|||
GstCameraBin2 *camerabin = GST_CAMERA_BIN2_CAST (u_data);
|
||||
|
||||
GST_DEBUG_OBJECT (camerabin, "Resetting video elements state");
|
||||
g_mutex_lock (camerabin->video_capture_mutex);
|
||||
g_mutex_lock (&camerabin->video_capture_mutex);
|
||||
|
||||
/* reset element states to clear eos/flushing pads */
|
||||
gst_element_set_state (camerabin->video_encodebin, GST_STATE_READY);
|
||||
|
@ -1016,8 +1017,8 @@ gst_camera_bin_video_reset_elements (gpointer u_data)
|
|||
|
||||
GST_DEBUG_OBJECT (camerabin, "Setting video state to idle");
|
||||
camerabin->video_state = GST_CAMERA_BIN_VIDEO_IDLE;
|
||||
g_cond_signal (camerabin->video_state_cond);
|
||||
g_mutex_unlock (camerabin->video_capture_mutex);
|
||||
g_cond_signal (&camerabin->video_state_cond);
|
||||
g_mutex_unlock (&camerabin->video_capture_mutex);
|
||||
|
||||
gst_object_unref (camerabin);
|
||||
return NULL;
|
||||
|
@ -1046,7 +1047,7 @@ gst_camera_bin_handle_message (GstBin * bin, GstMessage * message)
|
|||
} else if (gst_structure_has_name (structure, "preview-image")) {
|
||||
gchar *location = NULL;
|
||||
|
||||
g_mutex_lock (camerabin->preview_list_mutex);
|
||||
g_mutex_lock (&camerabin->preview_list_mutex);
|
||||
if (camerabin->preview_location_list) {
|
||||
location = camerabin->preview_location_list->data;
|
||||
camerabin->preview_location_list =
|
||||
|
@ -1060,7 +1061,7 @@ gst_camera_bin_handle_message (GstBin * bin, GstMessage * message)
|
|||
"happen if the source is posting previews while camerabin2 is "
|
||||
"shutting down");
|
||||
}
|
||||
g_mutex_unlock (camerabin->preview_list_mutex);
|
||||
g_mutex_unlock (&camerabin->preview_list_mutex);
|
||||
|
||||
if (location) {
|
||||
GValue value = { 0 };
|
||||
|
@ -1097,23 +1098,25 @@ gst_camera_bin_handle_message (GstBin * bin, GstMessage * message)
|
|||
GstElement *src = GST_ELEMENT (GST_MESSAGE_SRC (message));
|
||||
if (src == GST_CAMERA_BIN2_CAST (bin)->videosink) {
|
||||
|
||||
g_mutex_lock (camerabin->video_capture_mutex);
|
||||
g_mutex_lock (&camerabin->video_capture_mutex);
|
||||
GST_DEBUG_OBJECT (bin, "EOS from video branch");
|
||||
g_assert (camerabin->video_state == GST_CAMERA_BIN_VIDEO_FINISHING);
|
||||
|
||||
gst_video_capture_bin_post_video_done (GST_CAMERA_BIN2_CAST (bin));
|
||||
dec_counter = TRUE;
|
||||
|
||||
if (!g_thread_create (gst_camera_bin_video_reset_elements,
|
||||
gst_object_ref (camerabin), FALSE, NULL)) {
|
||||
GST_WARNING_OBJECT (camerabin, "Failed to create thread to "
|
||||
if (!g_thread_try_new ("reset-element-thread",
|
||||
gst_camera_bin_video_reset_elements, gst_object_ref (camerabin),
|
||||
NULL)) {
|
||||
GST_WARNING_OBJECT (camerabin,
|
||||
"Failed to create thread to "
|
||||
"reset video elements' state, video recordings may not work "
|
||||
"anymore");
|
||||
gst_object_unref (camerabin);
|
||||
camerabin->video_state = GST_CAMERA_BIN_VIDEO_IDLE;
|
||||
}
|
||||
|
||||
g_mutex_unlock (camerabin->video_capture_mutex);
|
||||
g_mutex_unlock (&camerabin->video_capture_mutex);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -1356,7 +1359,7 @@ gst_camera_bin_image_src_buffer_probe (GstPad * pad, GstPadProbeInfo * info,
|
|||
GstPad *peer;
|
||||
GstTagList *tags;
|
||||
|
||||
g_mutex_lock (camerabin->image_capture_mutex);
|
||||
g_mutex_lock (&camerabin->image_capture_mutex);
|
||||
|
||||
/* Push pending image tags */
|
||||
if (camerabin->image_tags_list) {
|
||||
|
@ -1385,10 +1388,10 @@ gst_camera_bin_image_src_buffer_probe (GstPad * pad, GstPadProbeInfo * info,
|
|||
location);
|
||||
} else {
|
||||
GST_DEBUG_OBJECT (camerabin, "No filename location change to send");
|
||||
g_mutex_unlock (camerabin->image_capture_mutex);
|
||||
g_mutex_unlock (&camerabin->image_capture_mutex);
|
||||
return ret;
|
||||
}
|
||||
g_mutex_unlock (camerabin->image_capture_mutex);
|
||||
g_mutex_unlock (&camerabin->image_capture_mutex);
|
||||
|
||||
if (location) {
|
||||
evt = gst_camera_bin_new_event_file_location (location);
|
||||
|
@ -1930,7 +1933,7 @@ gst_camera_bin_change_state (GstElement * element, GstStateChange trans)
|
|||
GST_CAMERA_BIN2_RESET_PROCESSING_COUNTER (camera);
|
||||
camera->video_state = GST_CAMERA_BIN_VIDEO_IDLE;
|
||||
|
||||
g_mutex_lock (camera->image_capture_mutex);
|
||||
g_mutex_lock (&camera->image_capture_mutex);
|
||||
g_slist_foreach (camera->image_location_list, (GFunc) g_free, NULL);
|
||||
g_slist_free (camera->image_location_list);
|
||||
camera->image_location_list = NULL;
|
||||
|
@ -1939,13 +1942,13 @@ gst_camera_bin_change_state (GstElement * element, GstStateChange trans)
|
|||
(GFunc) _gst_tag_list_free_maybe, NULL);
|
||||
g_slist_free (camera->image_tags_list);
|
||||
camera->image_tags_list = NULL;
|
||||
g_mutex_unlock (camera->image_capture_mutex);
|
||||
g_mutex_unlock (&camera->image_capture_mutex);
|
||||
|
||||
g_mutex_lock (camera->preview_list_mutex);
|
||||
g_mutex_lock (&camera->preview_list_mutex);
|
||||
g_slist_foreach (camera->preview_location_list, (GFunc) g_free, NULL);
|
||||
g_slist_free (camera->preview_location_list);
|
||||
camera->preview_location_list = NULL;
|
||||
g_mutex_unlock (camera->preview_list_mutex);
|
||||
g_mutex_unlock (&camera->preview_list_mutex);
|
||||
|
||||
/* explicitly set to READY as they might be outside of the bin */
|
||||
gst_element_set_state (camera->audio_volume, GST_STATE_READY);
|
||||
|
|
|
@ -97,7 +97,7 @@ struct _GstCameraBin2
|
|||
/* Index of the auto incrementing file index for captures */
|
||||
gint capture_index;
|
||||
|
||||
GMutex *image_capture_mutex;
|
||||
GMutex image_capture_mutex;
|
||||
/* stores list of image locations to be pushed to the image sink
|
||||
* as file location change notifications, they are pushed before
|
||||
* each buffer capture */
|
||||
|
@ -120,7 +120,7 @@ struct _GstCameraBin2
|
|||
* list and the message handling function looking at preview names)
|
||||
*/
|
||||
GSList *preview_location_list;
|
||||
GMutex *preview_list_mutex;
|
||||
GMutex preview_list_mutex;
|
||||
|
||||
gboolean video_profile_switch;
|
||||
gboolean image_profile_switch;
|
||||
|
@ -128,8 +128,8 @@ struct _GstCameraBin2
|
|||
gboolean audio_drop_eos;
|
||||
gboolean audio_send_newseg;
|
||||
|
||||
GMutex *video_capture_mutex;
|
||||
GCond *video_state_cond;
|
||||
GMutex video_capture_mutex;
|
||||
GCond video_state_cond;
|
||||
GstCameraBinVideoState video_state;
|
||||
|
||||
/* properties */
|
||||
|
|
|
@ -213,7 +213,7 @@ gst_wrapper_camera_bin_src_imgsrc_probe (GstPad * pad, GstPadProbeInfo * info,
|
|||
GST_LOG_OBJECT (self, "Image probe, mode %d, capture count %d",
|
||||
camerasrc->mode, self->image_capture_count);
|
||||
|
||||
g_mutex_lock (camerasrc->capturing_mutex);
|
||||
g_mutex_lock (&camerasrc->capturing_mutex);
|
||||
if (self->image_capture_count > 0) {
|
||||
ret = GST_PAD_PROBE_OK;
|
||||
self->image_capture_count--;
|
||||
|
@ -228,7 +228,7 @@ gst_wrapper_camera_bin_src_imgsrc_probe (GstPad * pad, GstPadProbeInfo * info,
|
|||
gst_base_camera_src_finish_capture (camerasrc);
|
||||
}
|
||||
}
|
||||
g_mutex_unlock (camerasrc->capturing_mutex);
|
||||
g_mutex_unlock (&camerasrc->capturing_mutex);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -255,7 +255,7 @@ gst_wrapper_camera_bin_src_vidsrc_probe (GstPad * pad, GstPadProbeInfo * info,
|
|||
* probe.
|
||||
*/
|
||||
/* TODO shouldn't access this directly */
|
||||
g_mutex_lock (camerasrc->capturing_mutex);
|
||||
g_mutex_lock (&camerasrc->capturing_mutex);
|
||||
if (self->video_rec_status == GST_VIDEO_RECORDING_STATUS_DONE) {
|
||||
/* NOP */
|
||||
} else if (self->video_rec_status == GST_VIDEO_RECORDING_STATUS_STARTING) {
|
||||
|
@ -286,7 +286,7 @@ gst_wrapper_camera_bin_src_vidsrc_probe (GstPad * pad, GstPadProbeInfo * info,
|
|||
} else {
|
||||
ret = GST_PAD_PROBE_OK;
|
||||
}
|
||||
g_mutex_unlock (camerasrc->capturing_mutex);
|
||||
g_mutex_unlock (&camerasrc->capturing_mutex);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -747,10 +747,10 @@ start_image_capture (GstWrapperCameraBinSrc * self)
|
|||
(GstPhotoCapturePrepared) img_capture_prepared,
|
||||
self->image_capture_caps, self);
|
||||
} else {
|
||||
g_mutex_unlock (bcamsrc->capturing_mutex);
|
||||
g_mutex_unlock (&bcamsrc->capturing_mutex);
|
||||
gst_wrapper_camera_bin_reset_video_src_caps (self,
|
||||
self->image_capture_caps);
|
||||
g_mutex_lock (bcamsrc->capturing_mutex);
|
||||
g_mutex_lock (&bcamsrc->capturing_mutex);
|
||||
ret = TRUE;
|
||||
}
|
||||
|
||||
|
@ -995,9 +995,9 @@ gst_wrapper_camera_bin_src_start_capture (GstBaseCameraSrc * camerasrc)
|
|||
GstCaps *caps = NULL;
|
||||
|
||||
if (src->video_renegotiate) {
|
||||
g_mutex_unlock (camerasrc->capturing_mutex);
|
||||
g_mutex_unlock (&camerasrc->capturing_mutex);
|
||||
gst_wrapper_camera_bin_reset_video_src_caps (src, NULL);
|
||||
g_mutex_lock (camerasrc->capturing_mutex);
|
||||
g_mutex_lock (&camerasrc->capturing_mutex);
|
||||
|
||||
/* clean capsfilter caps so they don't interfere here */
|
||||
g_object_set (src->src_filter, "caps", NULL, NULL);
|
||||
|
@ -1009,9 +1009,9 @@ gst_wrapper_camera_bin_src_start_capture (GstBaseCameraSrc * camerasrc)
|
|||
GST_DEBUG_OBJECT (src, "Video src caps %" GST_PTR_FORMAT, caps);
|
||||
|
||||
src->video_renegotiate = FALSE;
|
||||
g_mutex_unlock (camerasrc->capturing_mutex);
|
||||
g_mutex_unlock (&camerasrc->capturing_mutex);
|
||||
gst_wrapper_camera_bin_reset_video_src_caps (src, caps);
|
||||
g_mutex_lock (camerasrc->capturing_mutex);
|
||||
g_mutex_lock (&camerasrc->capturing_mutex);
|
||||
gst_caps_unref (caps);
|
||||
}
|
||||
if (src->video_rec_status == GST_VIDEO_RECORDING_STATUS_DONE) {
|
||||
|
|
|
@ -158,7 +158,7 @@ gst_dvbsub_overlay_flush_subtitles (GstDVBSubOverlay * render)
|
|||
{
|
||||
DVBSubtitles *subs;
|
||||
|
||||
g_mutex_lock (render->dvbsub_mutex);
|
||||
g_mutex_lock (&render->dvbsub_mutex);
|
||||
while ((subs = g_queue_pop_head (render->pending_subtitles))) {
|
||||
dvb_subtitles_free (subs);
|
||||
}
|
||||
|
@ -177,7 +177,7 @@ gst_dvbsub_overlay_flush_subtitles (GstDVBSubOverlay * render)
|
|||
dvb_sub_set_callbacks (render->dvb_sub, &dvbsub_callbacks, render);
|
||||
}
|
||||
|
||||
g_mutex_unlock (render->dvbsub_mutex);
|
||||
g_mutex_unlock (&render->dvbsub_mutex);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -220,7 +220,7 @@ gst_dvbsub_overlay_init (GstDVBSubOverlay * render)
|
|||
render->enable = DEFAULT_ENABLE;
|
||||
render->max_page_timeout = DEFAULT_MAX_PAGE_TIMEOUT;
|
||||
|
||||
render->dvbsub_mutex = g_mutex_new ();
|
||||
g_mutex_init (&render->dvbsub_mutex);
|
||||
gst_dvbsub_overlay_flush_subtitles (render);
|
||||
|
||||
gst_segment_init (&render->video_segment, GST_FORMAT_TIME);
|
||||
|
@ -247,8 +247,7 @@ gst_dvbsub_overlay_finalize (GObject * object)
|
|||
if (overlay->dvb_sub)
|
||||
dvb_sub_free (overlay->dvb_sub);
|
||||
|
||||
if (overlay->dvbsub_mutex)
|
||||
g_mutex_free (overlay->dvbsub_mutex);
|
||||
g_mutex_clear (&overlay->dvbsub_mutex);
|
||||
|
||||
G_OBJECT_CLASS (parent_class)->finalize (object);
|
||||
}
|
||||
|
@ -715,9 +714,9 @@ gst_dvbsub_overlay_process_text (GstDVBSubOverlay * overlay, GstBuffer * buffer,
|
|||
|
||||
data = gst_buffer_map (buffer, &size, NULL, GST_MAP_READ);
|
||||
|
||||
g_mutex_lock (overlay->dvbsub_mutex);
|
||||
g_mutex_lock (&overlay->dvbsub_mutex);
|
||||
dvb_sub_feed_with_pts (overlay->dvb_sub, pts, data, size);
|
||||
g_mutex_unlock (overlay->dvbsub_mutex);
|
||||
g_mutex_unlock (&overlay->dvbsub_mutex);
|
||||
|
||||
gst_buffer_unmap (buffer, data, size);
|
||||
gst_buffer_unref (buffer);
|
||||
|
@ -850,7 +849,7 @@ gst_dvbsub_overlay_chain_video (GstPad * pad, GstObject * parent,
|
|||
|
||||
overlay->video_segment.position = GST_BUFFER_TIMESTAMP (buffer);
|
||||
|
||||
g_mutex_lock (overlay->dvbsub_mutex);
|
||||
g_mutex_lock (&overlay->dvbsub_mutex);
|
||||
if (!g_queue_is_empty (overlay->pending_subtitles)) {
|
||||
DVBSubtitles *tmp, *candidate = NULL;
|
||||
|
||||
|
@ -919,7 +918,7 @@ gst_dvbsub_overlay_chain_video (GstPad * pad, GstObject * parent,
|
|||
blit_i420 (overlay, overlay->current_subtitle, &frame);
|
||||
gst_video_frame_unmap (&frame);
|
||||
}
|
||||
g_mutex_unlock (overlay->dvbsub_mutex);
|
||||
g_mutex_unlock (&overlay->dvbsub_mutex);
|
||||
|
||||
ret = gst_pad_push (overlay->srcpad, buffer);
|
||||
|
||||
|
|
|
@ -56,7 +56,7 @@ struct _GstDVBSubOverlay
|
|||
GQueue *pending_subtitles; /* A queue of raw subtitle region sets with
|
||||
* metadata that are waiting their running time */
|
||||
|
||||
GMutex *dvbsub_mutex; /* protects the queue and the DvbSub instance */
|
||||
GMutex dvbsub_mutex; /* protects the queue and the DvbSub instance */
|
||||
DvbSub *dvb_sub;
|
||||
};
|
||||
|
||||
|
|
|
@ -172,7 +172,7 @@ gst_dvd_spu_init (GstDVDSpu * dvdspu)
|
|||
gst_element_add_pad (GST_ELEMENT (dvdspu), dvdspu->subpic_sinkpad);
|
||||
gst_element_add_pad (GST_ELEMENT (dvdspu), dvdspu->srcpad);
|
||||
|
||||
dvdspu->spu_lock = g_mutex_new ();
|
||||
g_mutex_init (&dvdspu->spu_lock);
|
||||
dvdspu->pending_spus = g_queue_new ();
|
||||
|
||||
gst_dvd_spu_clear (dvdspu);
|
||||
|
@ -221,7 +221,7 @@ gst_dvd_spu_finalize (GObject * object)
|
|||
}
|
||||
}
|
||||
g_queue_free (dvdspu->pending_spus);
|
||||
g_mutex_free (dvdspu->spu_lock);
|
||||
g_mutex_clear (&dvdspu->spu_lock);
|
||||
|
||||
G_OBJECT_CLASS (parent_class)->finalize (object);
|
||||
}
|
||||
|
|
|
@ -38,8 +38,8 @@ G_BEGIN_DECLS
|
|||
#define GST_IS_DVD_SPU_CLASS(klass) \
|
||||
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DVD_SPU))
|
||||
|
||||
#define DVD_SPU_LOCK(s) g_mutex_lock ((s)->spu_lock);
|
||||
#define DVD_SPU_UNLOCK(s) g_mutex_unlock ((s)->spu_lock);
|
||||
#define DVD_SPU_LOCK(s) g_mutex_lock (&(s)->spu_lock);
|
||||
#define DVD_SPU_UNLOCK(s) g_mutex_unlock (&(s)->spu_lock);
|
||||
|
||||
typedef struct _GstDVDSpuClass GstDVDSpuClass;
|
||||
|
||||
|
@ -96,7 +96,7 @@ struct _GstDVDSpu {
|
|||
GstPad *srcpad;
|
||||
|
||||
/* Mutex to protect state we access from different chain funcs */
|
||||
GMutex *spu_lock;
|
||||
GMutex spu_lock;
|
||||
|
||||
GstSegment video_seg;
|
||||
GstSegment subp_seg;
|
||||
|
|
|
@ -102,10 +102,6 @@
|
|||
#include "config.h"
|
||||
#endif
|
||||
|
||||
/* FIXME 0.11: suppress warnings for deprecated API such as GStaticRecMutex
|
||||
* with newer GLib versions (>= 2.31.0) */
|
||||
#define GLIB_DISABLE_DEPRECATION_WARNINGS
|
||||
|
||||
#include <gst/gst-i18n-plugin.h>
|
||||
|
||||
#include <sys/ioctl.h>
|
||||
|
@ -718,7 +714,7 @@ gst_multi_fd_sink_finalize (GObject * object)
|
|||
|
||||
this = GST_MULTI_FD_SINK (object);
|
||||
|
||||
CLIENTS_LOCK_FREE (this);
|
||||
CLIENTS_LOCK_CLEAR (this);
|
||||
g_hash_table_destroy (this->fd_hash);
|
||||
g_array_free (this->bufqueue, TRUE);
|
||||
|
||||
|
|
|
@ -176,10 +176,10 @@ typedef struct {
|
|||
guint64 last_buffer_ts;
|
||||
} GstTCPClient;
|
||||
|
||||
#define CLIENTS_LOCK_INIT(fdsink) (g_static_rec_mutex_init(&fdsink->clientslock))
|
||||
#define CLIENTS_LOCK_FREE(fdsink) (g_static_rec_mutex_free(&fdsink->clientslock))
|
||||
#define CLIENTS_LOCK(fdsink) (g_static_rec_mutex_lock(&fdsink->clientslock))
|
||||
#define CLIENTS_UNLOCK(fdsink) (g_static_rec_mutex_unlock(&fdsink->clientslock))
|
||||
#define CLIENTS_LOCK_INIT(fdsink) (g_rec_mutex_init(&fdsink->clientslock))
|
||||
#define CLIENTS_LOCK_CLEAR(fdsink) (g_rec_mutex_clear(&fdsink->clientslock))
|
||||
#define CLIENTS_LOCK(fdsink) (g_rec_mutex_lock(&fdsink->clientslock))
|
||||
#define CLIENTS_UNLOCK(fdsink) (g_rec_mutex_unlock(&fdsink->clientslock))
|
||||
|
||||
/**
|
||||
* GstMultiFdSink:
|
||||
|
@ -193,7 +193,7 @@ struct _GstMultiFdSink {
|
|||
guint64 bytes_to_serve; /* how much bytes we must serve */
|
||||
guint64 bytes_served; /* how much bytes have we served */
|
||||
|
||||
GStaticRecMutex clientslock; /* lock to protect the clients list */
|
||||
GRecMutex clientslock; /* lock to protect the clients list */
|
||||
GList *clients; /* list of clients we are serving */
|
||||
GHashTable *fd_hash; /* index on fd to client */
|
||||
guint clients_cookie; /* Cookie to detect changes to the clients list */
|
||||
|
|
|
@ -185,8 +185,7 @@ gst_sdp_demux_init (GstSDPDemux * demux)
|
|||
|
||||
/* protects the streaming thread in interleaved mode or the polling
|
||||
* thread in UDP mode. */
|
||||
demux->stream_rec_lock = g_new (GStaticRecMutex, 1);
|
||||
g_static_rec_mutex_init (demux->stream_rec_lock);
|
||||
g_rec_mutex_init (&demux->stream_rec_lock);
|
||||
|
||||
demux->adapter = gst_adapter_new ();
|
||||
}
|
||||
|
@ -199,8 +198,7 @@ gst_sdp_demux_finalize (GObject * object)
|
|||
demux = GST_SDP_DEMUX (object);
|
||||
|
||||
/* free locks */
|
||||
g_static_rec_mutex_free (demux->stream_rec_lock);
|
||||
g_free (demux->stream_rec_lock);
|
||||
g_rec_mutex_clear (&demux->stream_rec_lock);
|
||||
|
||||
g_object_unref (demux->adapter);
|
||||
|
||||
|
|
|
@ -42,9 +42,9 @@ G_BEGIN_DECLS
|
|||
typedef struct _GstSDPDemux GstSDPDemux;
|
||||
typedef struct _GstSDPDemuxClass GstSDPDemuxClass;
|
||||
|
||||
#define GST_SDP_STREAM_GET_LOCK(sdp) (GST_SDP_DEMUX_CAST(sdp)->stream_rec_lock)
|
||||
#define GST_SDP_STREAM_LOCK(sdp) (g_static_rec_mutex_lock (GST_SDP_STREAM_GET_LOCK(sdp)))
|
||||
#define GST_SDP_STREAM_UNLOCK(sdp) (g_static_rec_mutex_unlock (GST_SDP_STREAM_GET_LOCK(sdp)))
|
||||
#define GST_SDP_STREAM_GET_LOCK(sdp) (&GST_SDP_DEMUX_CAST(sdp)->stream_rec_lock)
|
||||
#define GST_SDP_STREAM_LOCK(sdp) (g_rec_mutex_lock (GST_SDP_STREAM_GET_LOCK(sdp)))
|
||||
#define GST_SDP_STREAM_UNLOCK(sdp) (g_rec_mutex_unlock (GST_SDP_STREAM_GET_LOCK(sdp)))
|
||||
|
||||
typedef struct _GstSDPStream GstSDPStream;
|
||||
|
||||
|
@ -91,7 +91,7 @@ struct _GstSDPDemux {
|
|||
gboolean ignore_timeout;
|
||||
|
||||
gint numstreams;
|
||||
GStaticRecMutex *stream_rec_lock;
|
||||
GRecMutex stream_rec_lock;
|
||||
GList *streams;
|
||||
|
||||
/* properties */
|
||||
|
|
|
@ -488,7 +488,7 @@ gst_dvbsrc_init (GstDvbSrc * object)
|
|||
object->inversion = DEFAULT_INVERSION;
|
||||
object->stats_interval = DEFAULT_STATS_REPORTING_INTERVAL;
|
||||
|
||||
object->tune_mutex = g_mutex_new ();
|
||||
g_mutex_init (&object->tune_mutex);
|
||||
object->timeout = DEFAULT_TIMEOUT;
|
||||
}
|
||||
|
||||
|
@ -617,9 +617,9 @@ gst_dvbsrc_set_property (GObject * _object, guint prop_id,
|
|||
|
||||
/* if we are in paused/playing state tune now, otherwise in ready to paused state change */
|
||||
if (GST_STATE (object) > GST_STATE_READY) {
|
||||
g_mutex_lock (object->tune_mutex);
|
||||
g_mutex_lock (&object->tune_mutex);
|
||||
gst_dvbsrc_tune (object);
|
||||
g_mutex_unlock (object->tune_mutex);
|
||||
g_mutex_unlock (&object->tune_mutex);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -856,7 +856,7 @@ gst_dvbsrc_finalize (GObject * _object)
|
|||
object = GST_DVBSRC (_object);
|
||||
|
||||
/* freeing the mutex segfaults somehow */
|
||||
g_mutex_free (object->tune_mutex);
|
||||
g_mutex_clear (&object->tune_mutex);
|
||||
|
||||
if (G_OBJECT_CLASS (parent_class)->finalize)
|
||||
G_OBJECT_CLASS (parent_class)->finalize (_object);
|
||||
|
@ -969,7 +969,7 @@ gst_dvbsrc_create (GstPushSrc * element, GstBuffer ** buf)
|
|||
buffer_size = DEFAULT_BUFFER_SIZE;
|
||||
|
||||
/* device can not be tuned during read */
|
||||
g_mutex_lock (object->tune_mutex);
|
||||
g_mutex_lock (&object->tune_mutex);
|
||||
|
||||
|
||||
if (object->fd_dvr > -1) {
|
||||
|
@ -987,7 +987,7 @@ gst_dvbsrc_create (GstPushSrc * element, GstBuffer ** buf)
|
|||
}
|
||||
}
|
||||
|
||||
g_mutex_unlock (object->tune_mutex);
|
||||
g_mutex_unlock (&object->tune_mutex);
|
||||
return retval;
|
||||
|
||||
}
|
||||
|
|
|
@ -41,7 +41,7 @@ G_BEGIN_DECLS
|
|||
GstPushSrc element;
|
||||
GstPad *srcpad;
|
||||
|
||||
GMutex *tune_mutex;
|
||||
GMutex tune_mutex;
|
||||
gboolean need_tune;
|
||||
|
||||
int adapter_type;
|
||||
|
|
|
@ -974,9 +974,6 @@ main (int argc, char *argv[])
|
|||
GOptionContext *ctx;
|
||||
GError *err = NULL;
|
||||
|
||||
if (!g_thread_supported ())
|
||||
g_thread_init (NULL);
|
||||
|
||||
ctx = g_option_context_new (NULL);
|
||||
g_option_context_add_main_entries (ctx, options, NULL);
|
||||
g_option_context_add_group (ctx, gst_init_get_option_group ());
|
||||
|
|
|
@ -781,9 +781,6 @@ main (int argc, char *argv[])
|
|||
GOptionContext *ctx;
|
||||
GError *err = NULL;
|
||||
|
||||
if (!g_thread_supported ())
|
||||
g_thread_init (NULL);
|
||||
|
||||
ctx = g_option_context_new ("\n\ncamerabin command line test application.");
|
||||
g_option_context_add_main_entries (ctx, options, NULL);
|
||||
g_option_context_add_group (ctx, gst_init_get_option_group ());
|
||||
|
|
|
@ -1250,9 +1250,6 @@ main (int argc, char *argv[])
|
|||
GOptionContext *ctx;
|
||||
GError *err = NULL;
|
||||
|
||||
if (!g_thread_supported ())
|
||||
g_thread_init (NULL);
|
||||
|
||||
ctx = g_option_context_new ("\n\ncamerabin command line test application.");
|
||||
g_option_context_add_main_entries (ctx, options, NULL);
|
||||
g_option_context_add_group (ctx, gst_init_get_option_group ());
|
||||
|
|
|
@ -190,9 +190,6 @@ main (gint argc, gchar ** argv)
|
|||
return -1;
|
||||
}
|
||||
|
||||
if (!g_thread_supported ())
|
||||
g_thread_init (NULL);
|
||||
|
||||
gst_init (NULL, NULL);
|
||||
gtk_init (NULL, NULL);
|
||||
|
||||
|
|
|
@ -1141,7 +1141,7 @@ demo_gui_show_func (DemoGui * gui)
|
|||
status_bar_printf (GTK_STATUSBAR (status_bar), 5,
|
||||
"Welcome to the Scaletempo demo.");
|
||||
|
||||
if (!g_thread_create ((GThreadFunc) gtk_main, NULL, FALSE, &error)) {
|
||||
if (!g_thread_try_new ("name", (GThreadFunc) gtk_main, NULL, &error)) {
|
||||
g_signal_emit (gui, demo_gui_signals[SIGNAL_ERROR], 0, error->message);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -60,9 +60,6 @@ main (int argc, char *argv[])
|
|||
{NULL,}
|
||||
};
|
||||
|
||||
if (!g_thread_supported ())
|
||||
g_thread_init (NULL);
|
||||
|
||||
ctx = g_option_context_new ("uri ...");
|
||||
g_option_context_add_group (ctx, gst_init_get_option_group ());
|
||||
g_option_context_add_group (ctx, gtk_get_option_group (FALSE));
|
||||
|
|
Loading…
Reference in a new issue