Revert "v4l2: add norm property"

This reverts commit 9e1d419d07.

Reverting this since it adds unreviewed and bad API to v4l2src
(property of type enum, with seemingly random and unsorted values).
This commit is contained in:
Tim-Philipp Müller 2011-01-02 01:24:21 +00:00
parent 88e90f36b5
commit 0be6bd355a
6 changed files with 18 additions and 116 deletions

View file

@ -49,7 +49,7 @@ GST_DEBUG_CATEGORY_EXTERN (v4l2_debug);
#define DEFAULT_PROP_DEVICE_NAME NULL
#define DEFAULT_PROP_DEVICE_FD -1
#define DEFAULT_PROP_FLAGS 0
#define DEFAULT_PROP_TV_NORM 0
#define DEFAULT_PROP_NORM NULL
#define DEFAULT_PROP_CHANNEL NULL
#define DEFAULT_PROP_FREQUENCY 0
@ -309,54 +309,6 @@ gst_v4l2_device_get_type (void)
return v4l2_device_type;
}
#define GST_TYPE_V4L2_TV_NORM (gst_v4l2_tv_norm_get_type ())
static GType
gst_v4l2_tv_norm_get_type (void)
{
static GType v4l2_tv_norm = 0;
if (!v4l2_tv_norm) {
static const GEnumValue tv_norms[] = {
{0, "none", "none"},
{V4L2_STD_NTSC, "NTSC", "NTSC"},
{V4L2_STD_NTSC_M, "NTSC-M", "NTSC-M"},
{V4L2_STD_NTSC_M_JP, "NTSC-M-JP", "NTSC-M-JP"},
{V4L2_STD_NTSC_M_KR, "NTSC-M-KR", "NTSC-M-KR"},
{V4L2_STD_NTSC_443, "NTSC-443", "NTSC-443"},
{V4L2_STD_PAL, "PAL", "PAL"},
{V4L2_STD_PAL_BG, "PAL-BG", "PAL-BG"},
{V4L2_STD_PAL_B, "PAL-B", "PAL-B"},
{V4L2_STD_PAL_B1, "PAL-B1", "PAL-B1"},
{V4L2_STD_PAL_G, "PAL-G", "PAL-G"},
{V4L2_STD_PAL_H, "PAL-H", "PAL-H"},
{V4L2_STD_PAL_I, "PAL-I", "PAL-I"},
{V4L2_STD_PAL_DK, "PAL-DK", "PAL-DK"},
{V4L2_STD_PAL_D, "PAL-D", "PAL-D"},
{V4L2_STD_PAL_D1, "PAL-D1", "PAL-D1"},
{V4L2_STD_PAL_K, "PAL-K", "PAL-K"},
{V4L2_STD_PAL_M, "PAL-M", "PAL-M"},
{V4L2_STD_PAL_N, "PAL-N", "PAL-N"},
{V4L2_STD_PAL_Nc, "PAL-Nc", "PAL-Nc"},
{V4L2_STD_PAL_60, "PAL-60", "PAL-60"},
{V4L2_STD_SECAM, "SECAM", "SECAM"},
{V4L2_STD_SECAM_B, "SECAM-B", "SECAM-B"},
{V4L2_STD_SECAM_G, "SECAM-G", "SECAM-G"},
{V4L2_STD_SECAM_H, "SECAM-H", "SECAM-H"},
{V4L2_STD_SECAM_DK, "SECAM-DK", "SECAM-DK"},
{V4L2_STD_SECAM_D, "SECAM-D", "SECAM-D"},
{V4L2_STD_SECAM_K, "SECAM-K", "SECAM-K"},
{V4L2_STD_SECAM_K1, "SECAM-K1", "SECAM-K1"},
{V4L2_STD_SECAM_L, "SECAM-L", "SECAM-L"},
{V4L2_STD_SECAM_LC, "SECAM-Lc", "SECAM-Lc"},
{0, NULL, NULL}
};
v4l2_tv_norm = g_enum_register_static ("V4L2_TV_norms", tv_norms);
}
return v4l2_tv_norm;
}
void
gst_v4l2_object_install_properties_helper (GObjectClass * gobject_class,
const char *default_device)
@ -425,12 +377,6 @@ gst_v4l2_object_install_properties_helper (GObjectClass * gobject_class,
"Hue or color balance", G_MININT,
G_MAXINT, 0,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | GST_PARAM_CONTROLLABLE));
g_object_class_install_property (gobject_class, PROP_TV_NORM,
g_param_spec_enum ("norm", "TV norm",
"video standard",
GST_TYPE_V4L2_TV_NORM, DEFAULT_PROP_TV_NORM,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
}
GstV4l2Object *
@ -487,6 +433,9 @@ gst_v4l2_object_destroy (GstV4l2Object * v4l2object)
if (v4l2object->channel)
g_free (v4l2object->channel);
if (v4l2object->norm)
g_free (v4l2object->norm);
if (v4l2object->formats) {
gst_v4l2_object_clear_format_list (v4l2object);
}
@ -571,9 +520,6 @@ gst_v4l2_object_set_property_helper (GstV4l2Object * v4l2object,
v4l2object->norm = g_value_dup_string (value);
}
break;
case PROP_TV_NORM:
v4l2object->tv_norm = g_value_get_enum (value);
break;
case PROP_CHANNEL:
if (GST_V4L2_IS_OPEN (v4l2object)) {
GstTuner *tuner = GST_TUNER (v4l2object->element);
@ -678,9 +624,6 @@ gst_v4l2_object_get_property_helper (GstV4l2Object * v4l2object,
return TRUE;
}
break;
case PROP_TV_NORM:
g_value_set_enum (value, v4l2object->tv_norm);
break;
default:
return FALSE;
break;
@ -700,18 +643,16 @@ gst_v4l2_set_defaults (GstV4l2Object * v4l2object)
tuner = GST_TUNER (v4l2object->element);
if (v4l2object->tv_norm)
norm = gst_v4l2_tuner_get_norm_by_std_id (v4l2object, v4l2object->tv_norm);
GST_DEBUG_OBJECT (v4l2object->element, "tv_norm=%llx, norm=%p",
v4l2object->tv_norm, norm);
if (v4l2object->norm)
norm = gst_tuner_find_norm_by_name (tuner, v4l2object->norm);
if (norm) {
gst_tuner_set_norm (tuner, norm);
} else {
norm =
GST_TUNER_NORM (gst_tuner_get_norm (GST_TUNER (v4l2object->element)));
if (norm) {
v4l2object->tv_norm =
gst_v4l2_tuner_get_std_id_by_norm (v4l2object, norm);
g_free (v4l2object->norm);
v4l2object->norm = g_strdup (norm->label);
gst_tuner_norm_changed (tuner, norm);
}
}
@ -1921,15 +1862,13 @@ default_frame_sizes:
}
/* Since we can't get framerate directly, try to use the current norm */
if (v4l2object->tv_norm && v4l2object->norms) {
if (v4l2object->norm && v4l2object->norms) {
GList *norms;
GstTunerNorm *norm = NULL;
GstTunerNorm *current =
gst_v4l2_tuner_get_norm_by_std_id (v4l2object, v4l2object->tv_norm);
for (norms = v4l2object->norms; norms != NULL; norms = norms->next) {
norm = (GstTunerNorm *) norms->data;
if (!strcmp (norm->label, current->label))
if (!strcmp (norm->label, v4l2object->norm))
break;
}
/* If it's possible, set framerate to that (discrete) value */

View file

@ -108,7 +108,7 @@ struct _GstV4l2Object {
GList *channels;
/* properties */
v4l2_std_id tv_norm;
gchar *norm;
gchar *channel;
gulong frequency;
@ -137,8 +137,7 @@ GType gst_v4l2_object_get_type (void);
PROP_BRIGHTNESS, \
PROP_CONTRAST, \
PROP_SATURATION, \
PROP_HUE, \
PROP_TV_NORM
PROP_HUE
/* create/destroy */
GstV4l2Object * gst_v4l2_object_new (GstElement * element,

View file

@ -55,7 +55,6 @@
#include "gstv4l2colorbalance.h"
#include "gstv4l2tuner.h"
#ifdef HAVE_XVIDEO
#include "gstv4l2xoverlay.h"
#endif
@ -92,7 +91,6 @@ enum
GST_IMPLEMENT_V4L2_PROBE_METHODS (GstV4l2SinkClass, gst_v4l2sink);
GST_IMPLEMENT_V4L2_COLOR_BALANCE_METHODS (GstV4l2Sink, gst_v4l2sink);
GST_IMPLEMENT_V4L2_TUNER_METHODS (GstV4l2Sink, gst_v4l2sink);
#ifdef HAVE_XVIDEO
GST_IMPLEMENT_V4L2_XOVERLAY_METHODS (GstV4l2Sink, gst_v4l2sink);
#endif
@ -103,13 +101,14 @@ gst_v4l2sink_iface_supported (GstImplementsInterface * iface, GType iface_type)
{
GstV4l2Object *v4l2object = GST_V4L2SINK (iface)->v4l2object;
g_assert (iface_type == GST_TYPE_TUNER ||
#ifdef HAVE_XVIDEO
iface_type == GST_TYPE_X_OVERLAY ||
iface_type == GST_TYPE_NAVIGATION ||
#endif
g_assert (iface_type == GST_TYPE_X_OVERLAY ||
iface_type == GST_TYPE_COLOR_BALANCE ||
iface_type == GST_TYPE_VIDEO_ORIENTATION);
#else
g_assert (iface_type == GST_TYPE_COLOR_BALANCE ||
iface_type == GST_TYPE_VIDEO_ORIENTATION);
#endif
if (v4l2object->video_fd == -1)
return FALSE;
@ -151,11 +150,6 @@ gst_v4l2sink_init_interfaces (GType type)
NULL,
NULL,
};
static const GInterfaceInfo v4l2_tuner_info = {
(GInterfaceInitFunc) gst_v4l2sink_tuner_interface_init,
NULL,
NULL,
};
#ifdef HAVE_XVIDEO
static const GInterfaceInfo v4l2_xoverlay_info = {
(GInterfaceInitFunc) gst_v4l2sink_xoverlay_interface_init,
@ -186,7 +180,6 @@ gst_v4l2sink_init_interfaces (GType type)
g_type_add_interface_static (type,
GST_TYPE_IMPLEMENTS_INTERFACE, &v4l2iface_info);
g_type_add_interface_static (type, GST_TYPE_TUNER, &v4l2_tuner_info);
#ifdef HAVE_XVIDEO
g_type_add_interface_static (type, GST_TYPE_X_OVERLAY, &v4l2_xoverlay_info);
g_type_add_interface_static (type,

View file

@ -237,6 +237,7 @@ gst_v4l2_tuner_set_norm (GstV4l2Object * v4l2object, GstTunerNorm * norm)
GstTunerNorm *
gst_v4l2_tuner_get_norm (GstV4l2Object * v4l2object)
{
GList *item;
v4l2_std_id norm;
/* assert that we're opened and that we're using a known item */
@ -244,14 +245,6 @@ gst_v4l2_tuner_get_norm (GstV4l2Object * v4l2object)
gst_v4l2_get_norm (v4l2object, &norm);
return gst_v4l2_tuner_get_norm_by_std_id (v4l2object, norm);
}
GstTunerNorm *
gst_v4l2_tuner_get_norm_by_std_id (GstV4l2Object * v4l2object, v4l2_std_id norm)
{
GList *item;
for (item = v4l2object->norms; item != NULL; item = item->next) {
if (norm & GST_V4L2_TUNER_NORM (item->data)->index)
return (GstTunerNorm *) item->data;
@ -260,20 +253,6 @@ gst_v4l2_tuner_get_norm_by_std_id (GstV4l2Object * v4l2object, v4l2_std_id norm)
return NULL;
}
v4l2_std_id
gst_v4l2_tuner_get_std_id_by_norm (GstV4l2Object * v4l2object,
GstTunerNorm * norm)
{
GList *item;
for (item = v4l2object->norms; item != NULL; item = item->next) {
if (norm == GST_TUNER_NORM (item->data))
return GST_V4L2_TUNER_NORM (item->data)->index;
}
return 0;
}
void
gst_v4l2_tuner_set_frequency_and_notify (GstV4l2Object * v4l2object,
GstTunerChannel * channel, gulong frequency)

View file

@ -94,11 +94,6 @@ void gst_v4l2_tuner_set_norm_and_notify (GstV4l2Object * v4l2o
GstTunerNorm* gst_v4l2_tuner_get_norm (GstV4l2Object * v4l2object);
gboolean gst_v4l2_tuner_set_norm (GstV4l2Object * v4l2object,
GstTunerNorm * norm);
GstTunerNorm* gst_v4l2_tuner_get_norm_by_std_id (GstV4l2Object * v4l2object,
v4l2_std_id norm);
v4l2_std_id gst_v4l2_tuner_get_std_id_by_norm (GstV4l2Object * v4l2object,
GstTunerNorm * norm);
/* frequency */
void gst_v4l2_tuner_set_frequency_and_notify (GstV4l2Object * v4l2object,
GstTunerChannel * channel,

View file

@ -226,9 +226,6 @@ gst_v4l2_fill_lists (GstV4l2Object * v4l2object)
standard.frameperiod.denominator, standard.frameperiod.numerator);
v4l2norm->index = standard.id;
GST_DEBUG_OBJECT (v4l2object->element, "index=%08x, label=%s",
(unsigned int) v4l2norm->index, norm->label);
v4l2object->norms = g_list_prepend (v4l2object->norms, (gpointer) norm);
}
v4l2object->norms = g_list_reverse (v4l2object->norms);