summaryrefslogtreecommitdiffstats
path: root/sys/v4l2/gstv4l2tuner.c
diff options
context:
space:
mode:
authorEdgard Lima <edgard.lima@indt.org.br>2007-02-22 17:53:26 +0000
committerEdgard Lima <edgard.lima@indt.org.br>2007-02-22 17:53:26 +0000
commitfff672f930932ae0466d97011b2258df00f4ce55 (patch)
tree9a2d0237b2d7607889c0fb856aac43dd808d4026 /sys/v4l2/gstv4l2tuner.c
parent5c1b116dc898990c72acdaf54ce244cfc73fa7af (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.c44
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;