mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-26 05:56:14 +00:00
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:
parent
3edbd208c3
commit
74931b8db0
3 changed files with 50 additions and 11 deletions
|
@ -65,6 +65,7 @@ enum {
|
||||||
ARG_DISPLAY,
|
ARG_DISPLAY,
|
||||||
ARG_VIDEOWINDOW,
|
ARG_VIDEOWINDOW,
|
||||||
ARG_DO_OVERLAY,
|
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_object_class_install_property(G_OBJECT_CLASS(klass), ARG_FREQUENCY,
|
||||||
g_param_spec_ulong("frequency","frequency","frequency",
|
g_param_spec_ulong("frequency","frequency","frequency",
|
||||||
0,G_MAXULONG,0,G_PARAM_READWRITE));
|
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_object_class_install_property(G_OBJECT_CLASS(klass), ARG_HAS_AUDIO,
|
||||||
g_param_spec_boolean("has_audio","has_audio","has_audio",
|
g_param_spec_boolean("has_audio","has_audio","has_audio",
|
||||||
|
@ -289,11 +293,9 @@ gst_v4lelement_set_property (GObject *object,
|
||||||
break;
|
break;
|
||||||
case ARG_FREQUENCY:
|
case ARG_FREQUENCY:
|
||||||
v4lelement->frequency = g_value_get_ulong(value);
|
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))
|
||||||
if (gst_v4l_has_tuner(v4lelement))
|
return;
|
||||||
if (!gst_v4l_set_frequency(v4lelement, v4lelement->frequency))
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ARG_MUTE:
|
case ARG_MUTE:
|
||||||
|
@ -432,6 +434,12 @@ gst_v4lelement_get_property (GObject *object,
|
||||||
gst_v4l_get_frequency(v4lelement, &temp_ul);
|
gst_v4l_get_frequency(v4lelement, &temp_ul);
|
||||||
g_value_set_ulong(value, temp_ul);
|
g_value_set_ulong(value, temp_ul);
|
||||||
break;
|
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:
|
case ARG_HAS_AUDIO:
|
||||||
g_value_set_boolean(value, FALSE);
|
g_value_set_boolean(value, FALSE);
|
||||||
if (GST_V4L_IS_OPEN(v4lelement))
|
if (GST_V4L_IS_OPEN(v4lelement))
|
||||||
|
|
|
@ -243,8 +243,40 @@ gst_v4l_has_tuner (GstV4lElement *v4lelement)
|
||||||
DEBUG("checking whether device has a tuner");
|
DEBUG("checking whether device has a tuner");
|
||||||
GST_V4L_CHECK_OPEN(v4lelement);
|
GST_V4L_CHECK_OPEN(v4lelement);
|
||||||
|
|
||||||
return (v4lelement->vcap.type & VID_TYPE_TUNER &&
|
return v4lelement->vcap.type & VID_TYPE_TUNER;
|
||||||
v4lelement->vchan.flags & VIDEO_VC_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);
|
DEBUG("setting tuner frequency to %lu", frequency);
|
||||||
GST_V4L_CHECK_OPEN(v4lelement);
|
GST_V4L_CHECK_OPEN(v4lelement);
|
||||||
GST_V4L_CHECK_NOT_ACTIVE(v4lelement);
|
|
||||||
|
|
||||||
if (!gst_v4l_has_tuner(v4lelement))
|
if (!gst_v4l_has_tuner(v4lelement))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
@ -424,8 +455,7 @@ gst_v4l_has_audio (GstV4lElement *v4lelement)
|
||||||
DEBUG("checking whether device has audio");
|
DEBUG("checking whether device has audio");
|
||||||
GST_V4L_CHECK_OPEN(v4lelement);
|
GST_V4L_CHECK_OPEN(v4lelement);
|
||||||
|
|
||||||
return (v4lelement->vcap.audios > 0 &&
|
return v4lelement->vcap.audios > 0;
|
||||||
v4lelement->vchan.flags & VIDEO_VC_AUDIO);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -116,6 +116,7 @@ GList *gst_v4l_get_chan_names (GstV4lElement *v4lelement);
|
||||||
|
|
||||||
/* frequency control */
|
/* frequency control */
|
||||||
gboolean gst_v4l_has_tuner (GstV4lElement *v4lelement);
|
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_get_frequency (GstV4lElement *v4lelement, gulong *frequency);
|
||||||
gboolean gst_v4l_set_frequency (GstV4lElement *v4lelement, gulong frequency);
|
gboolean gst_v4l_set_frequency (GstV4lElement *v4lelement, gulong frequency);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue