diff options
author | Edgard Lima <edgard.lima@indt.org.br> | 2007-02-22 17:53:26 +0000 |
---|---|---|
committer | Edgard Lima <edgard.lima@indt.org.br> | 2007-02-22 17:53:26 +0000 |
commit | fff672f930932ae0466d97011b2258df00f4ce55 (patch) | |
tree | 9a2d0237b2d7607889c0fb856aac43dd808d4026 /sys/v4l2/gstv4l2tuner.c | |
parent | 5c1b116dc898990c72acdaf54ce244cfc73fa7af (diff) |
Fix segfault when oppening a radio device.
Original commit message from CVS:
Fix segfault when oppening a radio device.
Diffstat (limited to 'sys/v4l2/gstv4l2tuner.c')
-rw-r--r-- | sys/v4l2/gstv4l2tuner.c | 44 |
1 files changed, 25 insertions, 19 deletions
diff --git a/sys/v4l2/gstv4l2tuner.c b/sys/v4l2/gstv4l2tuner.c index 699540c9..da31e156 100644 --- a/sys/v4l2/gstv4l2tuner.c +++ b/sys/v4l2/gstv4l2tuner.c @@ -171,11 +171,13 @@ gst_v4l2_tuner_get_channel (GstV4l2Object * v4l2object) /* assert that we're opened and that we're using a known item */ g_return_val_if_fail (GST_V4L2_IS_OPEN (v4l2object), NULL); - v4l2object->get_in_out_func (v4l2object, &channel); + if (v4l2object->get_in_out_func (v4l2object, &channel)) { + + for (item = v4l2object->channels; item != NULL; item = item->next) { + if (channel == GST_V4L2_TUNER_CHANNEL (item->data)->index) + return (GstTunerChannel *) item->data; + } - for (item = v4l2object->channels; item != NULL; item = item->next) { - if (channel == GST_V4L2_TUNER_CHANNEL (item->data)->index) - return (GstTunerChannel *) item->data; } return NULL; @@ -271,15 +273,17 @@ gst_v4l2_tuner_set_frequency (GstV4l2Object * v4l2object, g_return_val_if_fail (gst_v4l2_tuner_contains_channel (v4l2object, v4l2channel), FALSE); - v4l2object->get_in_out_func (v4l2object, &chan); - if (chan == GST_V4L2_TUNER_CHANNEL (channel)->index && - GST_TUNER_CHANNEL_HAS_FLAG (channel, GST_TUNER_CHANNEL_FREQUENCY)) { - if (gst_v4l2_set_frequency (v4l2object, v4l2channel->tuner, frequency)) { - gst_tuner_frequency_changed (GST_TUNER (v4l2object->element), channel, - frequency); - return TRUE; + if (v4l2object->get_in_out_func (v4l2object, &chan)) { + if (chan == GST_V4L2_TUNER_CHANNEL (channel)->index && + GST_TUNER_CHANNEL_HAS_FLAG (channel, GST_TUNER_CHANNEL_FREQUENCY)) { + if (gst_v4l2_set_frequency (v4l2object, v4l2channel->tuner, frequency)) { + gst_tuner_frequency_changed (GST_TUNER (v4l2object->element), channel, + frequency); + return TRUE; + } } } + return FALSE; } @@ -298,10 +302,11 @@ gst_v4l2_tuner_get_frequency (GstV4l2Object * v4l2object, g_return_val_if_fail (gst_v4l2_tuner_contains_channel (v4l2object, v4l2channel), 0); - v4l2object->get_in_out_func (v4l2object, &chan); - if (chan == GST_V4L2_TUNER_CHANNEL (channel)->index && - GST_TUNER_CHANNEL_HAS_FLAG (channel, GST_TUNER_CHANNEL_FREQUENCY)) { - gst_v4l2_get_frequency (v4l2object, v4l2channel->tuner, &frequency); + if (v4l2object->get_in_out_func (v4l2object, &chan)) { + if (chan == GST_V4L2_TUNER_CHANNEL (channel)->index && + GST_TUNER_CHANNEL_HAS_FLAG (channel, GST_TUNER_CHANNEL_FREQUENCY)) { + gst_v4l2_get_frequency (v4l2object, v4l2channel->tuner, &frequency); + } } return frequency; @@ -322,10 +327,11 @@ gst_v4l2_tuner_signal_strength (GstV4l2Object * v4l2object, g_return_val_if_fail (gst_v4l2_tuner_contains_channel (v4l2object, v4l2channel), 0); - v4l2object->get_in_out_func (v4l2object, &chan); - if (chan == GST_V4L2_TUNER_CHANNEL (channel)->index && - GST_TUNER_CHANNEL_HAS_FLAG (channel, GST_TUNER_CHANNEL_FREQUENCY)) { - gst_v4l2_signal_strength (v4l2object, v4l2channel->tuner, &signal); + if (v4l2object->get_in_out_func (v4l2object, &chan)) { + if (chan == GST_V4L2_TUNER_CHANNEL (channel)->index && + GST_TUNER_CHANNEL_HAS_FLAG (channel, GST_TUNER_CHANNEL_FREQUENCY)) { + gst_v4l2_signal_strength (v4l2object, v4l2channel->tuner, &signal); + } } return signal; |