[maemo-commits] [maemo-commits] r16678 - projects/haf/trunk/hildon-thumbnail/daemon/plugins
From: subversion at stage.maemo.org subversion at stage.maemo.orgDate: Fri Nov 14 14:35:32 EET 2008
- Previous message: [maemo-commits] r16677 - in projects/haf/trunk/hildon-thumbnail: . daemon/plugins
- Next message: [maemo-commits] r16679 - projects/haf/trunk/hildon-thumbnail/daemon/plugins
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Author: pvanhoof Date: 2008-11-14 14:35:31 +0200 (Fri, 14 Nov 2008) New Revision: 16678 Modified: projects/haf/trunk/hildon-thumbnail/daemon/plugins/gstreamer-video-plugin.c Log: Bugfixes Modified: projects/haf/trunk/hildon-thumbnail/daemon/plugins/gstreamer-video-plugin.c =================================================================== --- projects/haf/trunk/hildon-thumbnail/daemon/plugins/gstreamer-video-plugin.c 2008-11-14 11:05:08 UTC (rev 16677) +++ projects/haf/trunk/hildon-thumbnail/daemon/plugins/gstreamer-video-plugin.c 2008-11-14 12:35:31 UTC (rev 16678) @@ -53,8 +53,8 @@ guint mtime; GCond *condition; - gboolean had_callback; - GMutex *mutex; + gboolean had_callback, set_state; + GMutex *mutex, *pipe_lock; GstElement *pipeline; GstElement *source; @@ -140,6 +140,7 @@ gboolean last, VideoThumbnailer *thumber) { + if (g_mutex_trylock (thumber->pipe_lock)) { GstCaps *caps; GstStructure *str; GstPad *videopad; @@ -147,6 +148,7 @@ videopad = gst_element_get_pad (thumber->bin, "sink"); if (GST_PAD_IS_LINKED (videopad)) { g_object_unref (videopad); + g_mutex_unlock (thumber->pipe_lock); return; } @@ -155,11 +157,13 @@ if (!g_strrstr (gst_structure_get_name (str), "video")) { g_object_unref (videopad); gst_caps_unref (caps); + g_mutex_unlock (thumber->pipe_lock); return; } gst_caps_unref (caps); - gst_pad_link (pad, videopad); + g_mutex_unlock (thumber->pipe_lock); + } } @@ -168,6 +172,7 @@ GstMessage *message, VideoThumbnailer *thumber) { + if (g_mutex_trylock (thumber->pipe_lock)) { gchar *message_str; GError *error = NULL; GstState old_state, new_state; @@ -175,7 +180,6 @@ gint64 position = -1; GstFormat format; - switch (GST_MESSAGE_TYPE(message)) { case GST_MESSAGE_ERROR: @@ -250,7 +254,7 @@ if (old_state == GST_STATE_READY && new_state == GST_STATE_PAUSED) { if (!gst_element_seek_simple (thumber->pipeline, GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH, position)) { - g_warning ("Seek failed"); + //g_warning ("Seek failed"); } } break; @@ -261,8 +265,10 @@ /* unhandled message */ break; } + g_mutex_unlock (thumber->pipe_lock); + } - return TRUE; + return TRUE; } static void @@ -284,8 +290,9 @@ thumber->video_sink = NULL; thumber->had_callback = FALSE; - thumber->mutex = g_mutex_new (); - thumber->condition = g_cond_new (); + thumber->mutex = g_mutex_new (); + thumber->condition = g_cond_new (); + thumber->set_state = FALSE; /* Preparing the source, decodebin and pipeline */ thumber->pipeline = gst_pipeline_new("source pipeline"); @@ -369,31 +376,32 @@ gst_bin_add (GST_BIN (thumber->pipeline), thumber->bin); /* Run */ + thumber->set_state = FALSE; gst_element_set_state (thumber->pipeline, GST_STATE_PAUSED); g_get_current_time (&timev); - g_time_val_add (&timev, 10000000); /* 10 seconds */ + g_time_val_add (&timev, 1000000); /* 1 seconds */ g_mutex_lock (thumber->mutex); if (!thumber->had_callback) g_cond_timed_wait (thumber->condition, thumber->mutex, &timev); g_mutex_unlock (thumber->mutex); - cleanup: g_cond_free (thumber->condition); + thumber->condition = NULL; g_mutex_free (thumber->mutex); + g_mutex_lock (thumber->pipe_lock); + if (thumber->pipeline) { - gst_element_set_state (thumber->pipeline, GST_STATE_NULL); + if (thumber->pipeline && !thumber->set_state) + gst_element_set_state (thumber->pipeline, GST_STATE_NULL); + /* This should free all the elements in the pipeline FIXME - * Check that this is the case - * - * Review by Philip: I'm assuming here that this is a correct - * assumption ;-) - I have not checked myself - */ - + * Check that this is the case */ gst_object_unref (thumber->pipeline); } else { if (thumber->source) @@ -409,6 +417,7 @@ if (thumber->video_sink) gst_object_unref (thumber->video_sink); } + g_mutex_unlock (thumber->pipe_lock); } @@ -444,6 +453,8 @@ /* Create the thumbnailer struct */ thumber = g_slice_new0 (VideoThumbnailer); + thumber->pipe_lock = g_mutex_new (); + thumber->has_audio = thumber->has_video = FALSE; thumber->video_fps_n = thumber->video_fps_d = -1; thumber->video_height = thumber->video_width = -1; @@ -473,6 +484,8 @@ nerror_handler: + g_mutex_free (thumber->pipe_lock); + g_slice_free (VideoThumbnailer, thumber); if (nerror) {
- Previous message: [maemo-commits] r16677 - in projects/haf/trunk/hildon-thumbnail: . daemon/plugins
- Next message: [maemo-commits] r16679 - projects/haf/trunk/hildon-thumbnail/daemon/plugins
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]