summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorReynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com>2014-09-02 12:13:01 -0400
committerReynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com>2014-09-02 17:11:40 -0400
commit1adc34cc031ec14e8826f2f9978ddf1f96dee669 (patch)
tree1bc8ad233d4672747b21bed3bb9c6174155327ca
parent76e099e5b91bd98ad68c4461d138369351110f6a (diff)
dvbsrc: delay locking till actually needed
Get rid of unneeded locking at prop setting by doing it only when tuning the frontend at _tune_fe()
-rw-r--r--sys/dvb/gstdvbsrc.c51
1 files changed, 5 insertions, 46 deletions
diff --git a/sys/dvb/gstdvbsrc.c b/sys/dvb/gstdvbsrc.c
index fab166ff1..fa5e08edc 100644
--- a/sys/dvb/gstdvbsrc.c
+++ b/sys/dvb/gstdvbsrc.c
@@ -1189,109 +1189,67 @@ gst_dvbsrc_set_property (GObject * _object, guint prop_id,
object->stream_id = g_value_get_int (value);
break;
case ARG_DVBSRC_ISDBT_LAYER_ENABLED:
- g_mutex_lock (&object->tune_mutex);
object->isdbt_layer_enabled = g_value_get_uint (value);
- g_mutex_unlock (&object->tune_mutex);
break;
case ARG_DVBSRC_ISDBT_PARTIAL_RECEPTION:
- g_mutex_lock (&object->tune_mutex);
object->isdbt_partial_reception = g_value_get_int (value);
- g_mutex_unlock (&object->tune_mutex);
break;
case ARG_DVBSRC_ISDBT_SOUND_BROADCASTING:
- g_mutex_lock (&object->tune_mutex);
object->isdbt_sound_broadcasting = g_value_get_int (value);
- g_mutex_unlock (&object->tune_mutex);
break;
case ARG_DVBSRC_ISDBT_SB_SUBCHANNEL_ID:
- g_mutex_lock (&object->tune_mutex);
object->isdbt_sb_subchannel_id = g_value_get_int (value);
- g_mutex_unlock (&object->tune_mutex);
break;
case ARG_DVBSRC_ISDBT_SB_SEGMENT_IDX:
- g_mutex_lock (&object->tune_mutex);
object->isdbt_sb_segment_idx = g_value_get_int (value);
- g_mutex_unlock (&object->tune_mutex);
break;
case ARG_DVBSRC_ISDBT_SB_SEGMENT_COUNT:
- g_mutex_lock (&object->tune_mutex);
object->isdbt_sb_segment_count = g_value_get_uint (value);
- g_mutex_unlock (&object->tune_mutex);
break;
case ARG_DVBSRC_ISDBT_LAYERA_FEC:
- g_mutex_lock (&object->tune_mutex);
object->isdbt_layera_fec = g_value_get_enum (value);
- g_mutex_unlock (&object->tune_mutex);
break;
case ARG_DVBSRC_ISDBT_LAYERA_MODULATION:
- g_mutex_lock (&object->tune_mutex);
object->isdbt_layera_modulation = g_value_get_enum (value);
- g_mutex_unlock (&object->tune_mutex);
break;
case ARG_DVBSRC_ISDBT_LAYERA_SEGMENT_COUNT:
- g_mutex_lock (&object->tune_mutex);
object->isdbt_layera_segment_count = g_value_get_int (value);
- g_mutex_unlock (&object->tune_mutex);
break;
case ARG_DVBSRC_ISDBT_LAYERA_TIME_INTERLEAVING:
- g_mutex_lock (&object->tune_mutex);
object->isdbt_layera_time_interleaving = g_value_get_int (value);
- g_mutex_unlock (&object->tune_mutex);
break;
case ARG_DVBSRC_ISDBT_LAYERB_FEC:
- g_mutex_lock (&object->tune_mutex);
object->isdbt_layerb_fec = g_value_get_enum (value);
- g_mutex_unlock (&object->tune_mutex);
break;
case ARG_DVBSRC_ISDBT_LAYERB_MODULATION:
- g_mutex_lock (&object->tune_mutex);
object->isdbt_layerb_modulation = g_value_get_enum (value);
- g_mutex_unlock (&object->tune_mutex);
break;
case ARG_DVBSRC_ISDBT_LAYERB_SEGMENT_COUNT:
- g_mutex_lock (&object->tune_mutex);
object->isdbt_layerb_segment_count = g_value_get_int (value);
- g_mutex_unlock (&object->tune_mutex);
break;
case ARG_DVBSRC_ISDBT_LAYERB_TIME_INTERLEAVING:
- g_mutex_lock (&object->tune_mutex);
object->isdbt_layerb_time_interleaving = g_value_get_int (value);
- g_mutex_unlock (&object->tune_mutex);
break;
case ARG_DVBSRC_ISDBT_LAYERC_FEC:
- g_mutex_lock (&object->tune_mutex);
object->isdbt_layerc_fec = g_value_get_enum (value);
- g_mutex_unlock (&object->tune_mutex);
break;
case ARG_DVBSRC_ISDBT_LAYERC_MODULATION:
- g_mutex_lock (&object->tune_mutex);
object->isdbt_layerc_modulation = g_value_get_enum (value);
- g_mutex_unlock (&object->tune_mutex);
break;
case ARG_DVBSRC_ISDBT_LAYERC_SEGMENT_COUNT:
- g_mutex_lock (&object->tune_mutex);
object->isdbt_layerc_segment_count = g_value_get_int (value);
- g_mutex_unlock (&object->tune_mutex);
break;
case ARG_DVBSRC_ISDBT_LAYERC_TIME_INTERLEAVING:
- g_mutex_lock (&object->tune_mutex);
object->isdbt_layerc_time_interleaving = g_value_get_int (value);
- g_mutex_unlock (&object->tune_mutex);
break;
case ARG_DVBSRC_LNB_SLOF:
- g_mutex_lock (&object->tune_mutex);
object->lnb_slof = g_value_get_uint (value);
- g_mutex_unlock (&object->tune_mutex);
break;
case ARG_DVBSRC_LNB_LOF1:
- g_mutex_lock (&object->tune_mutex);
object->lnb_lof1 = g_value_get_uint (value);
- g_mutex_unlock (&object->tune_mutex);
break;
case ARG_DVBSRC_LNB_LOF2:
- g_mutex_lock (&object->tune_mutex);
object->lnb_lof2 = g_value_get_uint (value);
- g_mutex_unlock (&object->tune_mutex);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -1994,11 +1952,8 @@ gst_dvbsrc_do_tune (GstDvbSrc * src)
{
/* if we are in paused/playing state tune now, otherwise in ready
* to paused state change */
- if (GST_STATE (src) > GST_STATE_READY) {
- g_mutex_lock (&src->tune_mutex);
+ if (GST_STATE (src) > GST_STATE_READY)
gst_dvbsrc_tune (src);
- g_mutex_unlock (&src->tune_mutex);
- }
}
static void
@@ -2160,6 +2115,8 @@ gst_dvbsrc_tune_fe (GstDvbSrc * object)
gst_dvbsrc_unset_pes_filters (object);
+ g_mutex_lock (&object->tune_mutex);
+
gst_poll_fd_init (&fe_fd);
fe_fd.fd = object->fd_frontend;
poll_set = gst_poll_new (TRUE);
@@ -2239,6 +2196,7 @@ gst_dvbsrc_tune_fe (GstDvbSrc * object)
GST_DEBUG_OBJECT (object, "Successfully set frontend tuning params");
gst_poll_free (poll_set);
+ g_mutex_unlock (&object->tune_mutex);
return TRUE;
fail_with_signal:
@@ -2246,6 +2204,7 @@ fail_with_signal:
fail:
GST_WARNING_OBJECT (object, "Could not tune to desired frequency");
gst_poll_free (poll_set);
+ g_mutex_unlock (&object->tune_mutex);
return FALSE;
}