Fix to allow parameters to be set by gst-launch

Original commit message from CVS:
Fix to allow parameters to be set by gst-launch
This commit is contained in:
David Schleef 2002-12-20 20:12:28 +00:00
parent 3edbd208c3
commit 74931b8db0
3 changed files with 50 additions and 11 deletions

View file

@ -65,6 +65,7 @@ enum {
ARG_DISPLAY,
ARG_VIDEOWINDOW,
ARG_DO_OVERLAY,
ARG_SIGNAL,
};
@ -142,6 +143,9 @@ gst_v4lelement_class_init (GstV4lElementClass *klass)
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_FREQUENCY,
g_param_spec_ulong("frequency","frequency","frequency",
0,G_MAXULONG,0,G_PARAM_READWRITE));
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_SIGNAL,
g_param_spec_uint("signal","signal","signal",
0,65535,0,G_PARAM_READABLE));
g_object_class_install_property(G_OBJECT_CLASS(klass), ARG_HAS_AUDIO,
g_param_spec_boolean("has_audio","has_audio","has_audio",
@ -289,11 +293,9 @@ gst_v4lelement_set_property (GObject *object,
break;
case ARG_FREQUENCY:
v4lelement->frequency = g_value_get_ulong(value);
if (GST_V4L_IS_OPEN(v4lelement) && !GST_V4L_IS_ACTIVE(v4lelement))
{
if (gst_v4l_has_tuner(v4lelement))
if (!gst_v4l_set_frequency(v4lelement, v4lelement->frequency))
return;
if (gst_v4l_has_tuner(v4lelement))
if (!gst_v4l_set_frequency(v4lelement, v4lelement->frequency))
return;
}
break;
case ARG_MUTE:
@ -432,6 +434,12 @@ gst_v4lelement_get_property (GObject *object,
gst_v4l_get_frequency(v4lelement, &temp_ul);
g_value_set_ulong(value, temp_ul);
break;
case ARG_SIGNAL:
if (GST_V4L_IS_OPEN(v4lelement))
if (gst_v4l_has_tuner(v4lelement))
gst_v4l_get_signal(v4lelement, &temp_i);
g_value_set_uint(value, temp_i);
break;
case ARG_HAS_AUDIO:
g_value_set_boolean(value, FALSE);
if (GST_V4L_IS_OPEN(v4lelement))

View file

@ -243,8 +243,40 @@ gst_v4l_has_tuner (GstV4lElement *v4lelement)
DEBUG("checking whether device has a tuner");
GST_V4L_CHECK_OPEN(v4lelement);
return (v4lelement->vcap.type & VID_TYPE_TUNER &&
v4lelement->vchan.flags & VIDEO_VC_TUNER);
return v4lelement->vcap.type & VID_TYPE_TUNER;
}
/******************************************************
* gst_v4l_get_signal():
* get the current signal
* return value: TRUE on success, FALSE on error
******************************************************/
gboolean
gst_v4l_get_signal (GstV4lElement *v4lelement,
guint *signal)
{
struct video_tuner tuner;
DEBUG("getting tuner signal");
GST_V4L_CHECK_OPEN(v4lelement);
if (!gst_v4l_has_tuner(v4lelement))
return FALSE;
tuner.tuner = 0;
if (ioctl(v4lelement->video_fd, VIDIOCGTUNER, &tuner) < 0)
{
gst_element_error(GST_ELEMENT(v4lelement),
"Error getting tuner signal: %s",
sys_errlist[errno]);
return FALSE;
}
*signal = tuner.signal;
return TRUE;
}
@ -288,8 +320,7 @@ gst_v4l_set_frequency (GstV4lElement *v4lelement,
{
DEBUG("setting tuner frequency to %lu", frequency);
GST_V4L_CHECK_OPEN(v4lelement);
GST_V4L_CHECK_NOT_ACTIVE(v4lelement);
if (!gst_v4l_has_tuner(v4lelement))
return FALSE;
@ -424,8 +455,7 @@ gst_v4l_has_audio (GstV4lElement *v4lelement)
DEBUG("checking whether device has audio");
GST_V4L_CHECK_OPEN(v4lelement);
return (v4lelement->vcap.audios > 0 &&
v4lelement->vchan.flags & VIDEO_VC_AUDIO);
return v4lelement->vcap.audios > 0;
}

View file

@ -116,6 +116,7 @@ GList *gst_v4l_get_chan_names (GstV4lElement *v4lelement);
/* frequency control */
gboolean gst_v4l_has_tuner (GstV4lElement *v4lelement);
gboolean gst_v4l_get_signal (GstV4lElement *v4lelement, guint *signal);
gboolean gst_v4l_get_frequency (GstV4lElement *v4lelement, gulong *frequency);
gboolean gst_v4l_set_frequency (GstV4lElement *v4lelement, gulong frequency);