mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-10-22 02:13:46 +00:00
gst/playback/gstplaybasebin.c: Take some locks and make a copy of the streaminfo value array we maintain while holdin...
Original commit message from CVS: * gst/playback/gstplaybasebin.c: (gst_play_base_bin_get_property), (gst_play_base_bin_get_streaminfo_value_array): Take some locks and make a copy of the streaminfo value array we maintain while holding the lock, so that the application can retrieve the stream-info as a value array in a thread-safe way.
This commit is contained in:
parent
75d5fcb62e
commit
514c2d7610
2 changed files with 21 additions and 8 deletions
|
@ -1,3 +1,11 @@
|
||||||
|
2007-01-30 Tim-Philipp Müller <tim at centricular dot net>
|
||||||
|
|
||||||
|
* gst/playback/gstplaybasebin.c: (gst_play_base_bin_get_property),
|
||||||
|
(gst_play_base_bin_get_streaminfo_value_array):
|
||||||
|
Take some locks and make a copy of the streaminfo value array we
|
||||||
|
maintain while holding the lock, so that the application can
|
||||||
|
retrieve the stream-info as a value array in a thread-safe way.
|
||||||
|
|
||||||
2007-01-30 Wim Taymans <wim@fluendo.com>
|
2007-01-30 Wim Taymans <wim@fluendo.com>
|
||||||
|
|
||||||
* gst/audioconvert/gstaudioconvert.c:
|
* gst/audioconvert/gstaudioconvert.c:
|
||||||
|
|
|
@ -75,8 +75,8 @@ static void gst_play_base_bin_handle_message_func (GstBin * bin,
|
||||||
static GstStateChangeReturn gst_play_base_bin_change_state (GstElement *
|
static GstStateChangeReturn gst_play_base_bin_change_state (GstElement *
|
||||||
element, GstStateChange transition);
|
element, GstStateChange transition);
|
||||||
|
|
||||||
const GList *gst_play_base_bin_get_streaminfo (GstPlayBaseBin * play_base_bin);
|
static const GList *gst_play_base_bin_get_streaminfo (GstPlayBaseBin * bin);
|
||||||
const GValueArray *gst_play_base_bin_get_streaminfo_value_array (GstPlayBaseBin
|
static GValueArray *gst_play_base_bin_get_streaminfo_value_array (GstPlayBaseBin
|
||||||
* play_base_bin);
|
* play_base_bin);
|
||||||
static void preroll_remove_overrun (GstElement * element,
|
static void preroll_remove_overrun (GstElement * element,
|
||||||
GstPlayBaseBin * play_base_bin);
|
GstPlayBaseBin * play_base_bin);
|
||||||
|
@ -2502,8 +2502,10 @@ gst_play_base_bin_get_property (GObject * object, guint prop_id, GValue * value,
|
||||||
(gpointer) gst_play_base_bin_get_streaminfo (play_base_bin));
|
(gpointer) gst_play_base_bin_get_streaminfo (play_base_bin));
|
||||||
break;
|
break;
|
||||||
case ARG_STREAMINFO_VALUES:{
|
case ARG_STREAMINFO_VALUES:{
|
||||||
g_value_set_boxed (value,
|
GValueArray *copy;
|
||||||
gst_play_base_bin_get_streaminfo_value_array (play_base_bin));
|
|
||||||
|
copy = gst_play_base_bin_get_streaminfo_value_array (play_base_bin);
|
||||||
|
g_value_take_boxed (value, copy);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ARG_SOURCE:
|
case ARG_SOURCE:
|
||||||
|
@ -2594,7 +2596,7 @@ cleanup_groups:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const GList *
|
static const GList *
|
||||||
gst_play_base_bin_get_streaminfo (GstPlayBaseBin * play_base_bin)
|
gst_play_base_bin_get_streaminfo (GstPlayBaseBin * play_base_bin)
|
||||||
{
|
{
|
||||||
GstPlayBaseGroup *group = get_active_group (play_base_bin);
|
GstPlayBaseGroup *group = get_active_group (play_base_bin);
|
||||||
|
@ -2606,15 +2608,18 @@ gst_play_base_bin_get_streaminfo (GstPlayBaseBin * play_base_bin)
|
||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
|
||||||
const GValueArray *
|
static GValueArray *
|
||||||
gst_play_base_bin_get_streaminfo_value_array (GstPlayBaseBin * play_base_bin)
|
gst_play_base_bin_get_streaminfo_value_array (GstPlayBaseBin * play_base_bin)
|
||||||
{
|
{
|
||||||
GstPlayBaseGroup *group = get_active_group (play_base_bin);
|
GstPlayBaseGroup *group;
|
||||||
GValueArray *array = NULL;
|
GValueArray *array = NULL;
|
||||||
|
|
||||||
|
GROUP_LOCK (play_base_bin);
|
||||||
|
group = get_active_group (play_base_bin);
|
||||||
if (group) {
|
if (group) {
|
||||||
array = group->streaminfo_value_array;
|
array = g_value_array_copy (group->streaminfo_value_array);
|
||||||
}
|
}
|
||||||
|
GROUP_UNLOCK (play_base_bin);
|
||||||
|
|
||||||
return array;
|
return array;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue