From: <tp...@ke...> - 2007-03-07 18:50:27
|
CVS Root: /cvs/gstreamer Module: gst-plugins-base Changes by: tpm Date: Wed Mar 07 2007 18:50:22 UTC Log message: * gst-libs/gst/interfaces/mixertrack.c: (gst_mixer_track_class_init), (gst_mixer_track_get_property), (gst_mixer_track_set_property): API: add "untranslated-label" property which should be set by implementations at construct time (#414645). * ext/alsa/gstalsamixeroptions.c: (gst_alsa_mixer_options_new): * ext/alsa/gstalsamixertrack.c: (gst_alsa_mixer_track_new): Set "untranslated-label" when constructing mixer track objects. * tests/check/elements/alsa.c: (GST_START_TEST), (alsa_suite): Unit test to check the above. Modified files: . : ChangeLog ext/alsa : gstalsamixeroptions.c gstalsamixertrack.c gst-libs/gst/interfaces: mixertrack.c tests/check/elements: alsa.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ChangeLog.diff?r1=1.3197&r2=1.3198 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ext/alsa/gstalsamixeroptions.c.diff?r1=1.2&r2=1.3 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ext/alsa/gstalsamixertrack.c.diff?r1=1.13&r2=1.14 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/gst-libs/gst/interfaces/mixertrack.c.diff?r1=1.8&r2=1.9 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/tests/check/elements/alsa.c.diff?r1=1.2&r2=1.3 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins-base/ChangeLog,v retrieving revision 1.3197 retrieving revision 1.3198 diff -u -d -r1.3197 -r1.3198 --- ChangeLog 7 Mar 2007 17:15:57 -0000 1.3197 +++ ChangeLog 7 Mar 2007 18:50:09 -0000 1.3198 @@ -1,3 +1,18 @@ +2007-03-07 Tim-Philipp Müller <tim at centricular dot net> + + * gst-libs/gst/interfaces/mixertrack.c: + (gst_mixer_track_class_init), (gst_mixer_track_get_property), + (gst_mixer_track_set_property): + API: add "untranslated-label" property which should be set by + implementations at construct time (#414645). + * ext/alsa/gstalsamixeroptions.c: (gst_alsa_mixer_options_new): + * ext/alsa/gstalsamixertrack.c: (gst_alsa_mixer_track_new): + Set "untranslated-label" when constructing mixer track objects. + * tests/check/elements/alsa.c: (GST_START_TEST), (alsa_suite): + Unit test to check the above. 2007-03-07 Wim Taymans <wi...@fl...> * ext/ogg/gstoggdemux.c: (gst_ogg_demux_read_chain): Index: mixertrack.c RCS file: /cvs/gstreamer/gst-plugins-base/gst-libs/gst/interfaces/mixertrack.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -d -r1.8 -r1.9 --- mixertrack.c 8 Apr 2006 21:02:50 -0000 1.8 +++ mixertrack.c 7 Mar 2007 18:50:09 -0000 1.9 @@ -38,6 +38,7 @@ { ARG_0, ARG_LABEL, + ARG_UNTRANSLATED_LABEL, ARG_MIN_VOLUME, ARG_MAX_VOLUME, ARG_FLAGS, @@ -50,6 +51,8 @@ static void gst_mixer_track_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec); +static void gst_mixer_track_set_property (GObject * object, guint prop_id, + const GValue * value, GParamSpec * pspec); static GObjectClass *parent_class = NULL; static guint signals[LAST_SIGNAL] = { 0 }; @@ -89,10 +92,28 @@ parent_class = g_type_class_peek_parent (klass); object_klass->get_property = gst_mixer_track_get_property; + object_klass->set_property = gst_mixer_track_set_property; g_object_class_install_property (object_klass, ARG_LABEL, g_param_spec_string ("label", "Track label", - "The label assigned to the track", NULL, G_PARAM_READABLE)); + "The label assigned to the track (may be translated)", NULL, + G_PARAM_READABLE)); + /** + * GstMixerTrack:untranslated-label + * + * The untranslated label of the mixer track, if available. Mixer track + * implementations must set this at construct time. Applications may find + * this useful to determine icons for various kind of tracks. However, + * applications mustn't make any assumptions about the naming of tracks, + * the untranslated labels are purely informational and may change. + * Since: 0.10.13 + **/ + g_object_class_install_property (object_klass, ARG_UNTRANSLATED_LABEL, + g_param_spec_string ("untranslated-label", "Untranslated track label", + "The untranslated label assigned to the track (since 0.10.13)", + NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property (object_klass, ARG_MIN_VOLUME, g_param_spec_int ("min_volume", "Minimum volume level", @@ -148,6 +169,9 @@ mixer_track->num_channels = 0; } +/* FIXME 0.11: move this as a member into the mixer track structure */ +#define MIXER_TRACK_OBJECT_DATA_KEY_UNTRANSLATED_LABEL "gst-mixer-track-ulabel" static void gst_mixer_track_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec) @@ -160,6 +184,11 @@ case ARG_LABEL: g_value_set_string (value, mixer_track->label); break; + case ARG_UNTRANSLATED_LABEL: + g_value_set_string (value, + (const gchar *) g_object_get_data (G_OBJECT (mixer_track), + MIXER_TRACK_OBJECT_DATA_KEY_UNTRANSLATED_LABEL)); + break; case ARG_MIN_VOLUME: g_value_set_int (value, mixer_track->min_volume); @@ -179,6 +208,26 @@ +gst_mixer_track_set_property (GObject * object, guint prop_id, + const GValue * value, GParamSpec * pspec) +{ + GstMixerTrack *mixer_track; + mixer_track = GST_MIXER_TRACK (object); + switch (prop_id) { + g_object_set_data_full (G_OBJECT (mixer_track), + MIXER_TRACK_OBJECT_DATA_KEY_UNTRANSLATED_LABEL, + g_value_dup_string (value), (GDestroyNotify) g_free); + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + } +} +static void gst_mixer_track_dispose (GObject * object) GstMixerTrack *channel = GST_MIXER_TRACK (object); Index: gstalsamixeroptions.c RCS file: /cvs/gstreamer/gst-plugins-base/ext/alsa/gstalsamixeroptions.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- gstalsamixeroptions.c 8 Apr 2006 21:02:49 -0000 1.2 +++ gstalsamixeroptions.c 7 Mar 2007 18:50:10 -0000 1.3 @@ -69,14 +69,22 @@ GstMixerOptions * gst_alsa_mixer_options_new (snd_mixer_elem_t * element, gint track_num) - GstMixerOptions *opts = g_object_new (GST_ALSA_MIXER_OPTIONS_TYPE, NULL); - GstAlsaMixerOptions *alsa_opts = (GstAlsaMixerOptions *) opts; - GstMixerTrack *track = (GstMixerTrack *) opts; + GstMixerOptions *opts; + GstAlsaMixerOptions *alsa_opts; + GstMixerTrack *track; + const gchar *label; gint num, i; gchar str[256]; + label = snd_mixer_selem_get_name (element); + opts = g_object_new (GST_ALSA_MIXER_OPTIONS_TYPE, + "untranslated-label", label, NULL); + alsa_opts = (GstAlsaMixerOptions *) opts; + track = (GstMixerTrack *) opts; /* set basic information */ - track->label = g_strdup (snd_mixer_selem_get_name (element)); + track->label = g_strdup (label); /* FIXME: translate this? */ track->num_channels = 0; track->flags = 0; alsa_opts->element = element; Index: gstalsamixertrack.c RCS file: /cvs/gstreamer/gst-plugins-base/ext/alsa/gstalsamixertrack.c,v retrieving revision 1.13 retrieving revision 1.14 diff -u -d -r1.13 -r1.14 --- gstalsamixertrack.c 29 Aug 2006 11:50:51 -0000 1.13 +++ gstalsamixertrack.c 7 Mar 2007 18:50:10 -0000 1.14 @@ -145,7 +145,9 @@ GST_LOG ("[%s] num=%d,track_num=%d,flags=0x%08x,sw=%s,shared_mute_track=%p", name, num, track_num, flags, (sw) ? "true" : "false", shared_mute_track); - track = (GstMixerTrack *) g_object_new (GST_ALSA_MIXER_TRACK_TYPE, NULL); + track = (GstMixerTrack *) g_object_new (GST_ALSA_MIXER_TRACK_TYPE, + "untranslated-label", name, NULL); alsa_track = (GstAlsaMixerTrack *) track; GST_LOG ("[%s] created new mixer track %p", name, track); Index: alsa.c RCS file: /cvs/gstreamer/gst-plugins-base/tests/check/elements/alsa.c,v --- alsa.c 18 May 2006 20:30:26 -0000 1.2 +++ alsa.c 7 Mar 2007 18:50:10 -0000 1.3 @@ -24,6 +24,7 @@ #include <gst/check/gstcheck.h> #include <gst/interfaces/propertyprobe.h> +#include <gst/interfaces/mixer.h> /* just a simple test that runs device probing on * an alsasrc, alsasink and alsamixer instance */ @@ -48,14 +49,16 @@ arr = gst_property_probe_probe_and_get_values_name (probe, "device"); if (arr) { for (i = 0; i < arr->n_values; ++i) { + const gchar *device; GValue *val; val = g_value_array_get_nth (arr, i); fail_unless (val != NULL); fail_unless (G_VALUE_HOLDS_STRING (val)); - GST_LOG_OBJECT (element, "device[%d] = %s", i, - g_value_get_string (val)); + device = g_value_get_string (val); + fail_unless (device != NULL); + GST_LOG_OBJECT (element, "device[%d] = %s", i, device); } g_value_array_free (arr); } else { @@ -68,7 +71,50 @@ GST_END_TEST; -Suite * +GST_START_TEST (test_alsa_mixer_track) + GstStateChangeReturn state_ret; + GstElement *mixer; + GList *tracks, *l; + mixer = gst_element_factory_make ("alsamixer", "alsamixer"); + fail_unless (mixer != NULL, "Failed to create 'alsamixer' element!"); + state_ret = gst_element_set_state (mixer, GST_STATE_READY); + if (state_ret != GST_STATE_CHANGE_SUCCESS) + return; + GST_LOG ("opened alsamixer"); + fail_unless (GST_IS_MIXER (mixer), "is not a GstMixer?!"); + tracks = (GList *) gst_mixer_list_tracks (GST_MIXER (mixer)); + for (l = tracks; l != NULL; l = l->next) { + GstMixerTrack *track; + gchar *ulabel = NULL, *label = NULL; + track = GST_MIXER_TRACK (l->data); + g_object_get (track, "label", &label, "untranslated-label", &ulabel, NULL); + fail_unless (label == NULL || g_utf8_validate (label, -1, NULL)); + if (ulabel != NULL) { + gchar *p; + for (p = ulabel; p != NULL && *p != '\0'; ++p) { + fail_unless (g_ascii_isprint (*p), + "untranslated label '%s' not printable ASCII", ulabel); + } + } + GST_DEBUG ("%s: %s", GST_STR_NULL (ulabel), GST_STR_NULL (label)); + g_free (label); + g_free (ulabel); + fail_unless_equals_int (gst_element_set_state (mixer, GST_STATE_NULL), + GST_STATE_CHANGE_SUCCESS); +GST_END_TEST; +static Suite * alsa_suite (void) Suite *s = suite_create ("alsa"); @@ -76,23 +122,9 @@ suite_add_tcase (s, tc_chain); tcase_add_test (tc_chain, test_device_property_probe); + tcase_add_test (tc_chain, test_alsa_mixer_track); return s; -int -main (int argc, char **argv) -{ - int nf; - - Suite *s = alsa_suite (); - SRunner *sr = srunner_create (s); - gst_check_init (&argc, &argv); - srunner_run_all (sr, CK_NORMAL); - nf = srunner_ntests_failed (sr); - srunner_free (sr); - return nf; -} +GST_CHECK_MAIN (alsa) |