diff options
author | Stefano Karapetsas <[email protected]> | 2011-12-11 13:11:15 +0100 |
---|---|---|
committer | Stefano Karapetsas <[email protected]> | 2011-12-11 13:11:15 +0100 |
commit | 4ee2559eaaf2a94ac26c265517e9604a72729360 (patch) | |
tree | f24e3e3294c2b75819755289e592bf2e28e668c4 /profiles/mate-audio-profiles-test.c | |
download | mate-media-4ee2559eaaf2a94ac26c265517e9604a72729360.tar.bz2 mate-media-4ee2559eaaf2a94ac26c265517e9604a72729360.tar.xz |
moved from Mate-Extra
Diffstat (limited to 'profiles/mate-audio-profiles-test.c')
-rw-r--r-- | profiles/mate-audio-profiles-test.c | 188 |
1 files changed, 188 insertions, 0 deletions
diff --git a/profiles/mate-audio-profiles-test.c b/profiles/mate-audio-profiles-test.c new file mode 100644 index 0000000..444e9c6 --- /dev/null +++ b/profiles/mate-audio-profiles-test.c @@ -0,0 +1,188 @@ +/* mate-audio-profiles-test.c: */ + +/* + * Copyright (C) 2003 Thomas Vander Stichele + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <stdlib.h> +#include <gtk/gtk.h> +#include <mateconf/mateconf-client.h> +#include <gst/gst.h> + +#include <profiles/mate-media-profiles.h> + +static void +edit_clicked_cb (GtkButton *button, GtkWindow *window) +{ + GtkWidget *edit_dialog = NULL; + edit_dialog = gm_audio_profiles_edit_new (mateconf_client_get_default (), window); + g_assert (edit_dialog != NULL); + gtk_widget_show_all (GTK_WIDGET (edit_dialog)); +} + +static void +test_clicked_cb (GtkButton *button, GtkWidget *combo) +{ + GstStateChangeReturn ret; + gchar *partialpipe = NULL; + gchar *extension = NULL; + gchar *pipeline_desc; + GError *error = NULL; + GMAudioProfile *profile; + GstElement *pipeline = NULL; + GstMessage *msg = NULL; + GstBus *bus = NULL; + + profile = gm_audio_profile_choose_get_active (combo); + g_return_if_fail (profile != NULL); + + gtk_widget_set_sensitive (GTK_WIDGET (button), FALSE); + + extension = g_strdup (gm_audio_profile_get_extension (profile)); + partialpipe = g_strdup (gm_audio_profile_get_pipeline (profile)); + + g_print ("You chose profile with name %s and pipeline %s\n", + gm_audio_profile_get_name (profile), + gm_audio_profile_get_pipeline (profile)); + + pipeline_desc = g_strdup_printf ("audiotestsrc wave=sine num-buffers=4096 " + " ! audioconvert " + " ! %s " + " ! filesink location=test.%s", + partialpipe, extension); + + g_print ("Going to run pipeline %s\n", pipeline_desc); + + pipeline = gst_parse_launch (pipeline_desc, &error); + if (error) + { + g_warning ("Error parsing pipeline: %s", error->message); + goto done; + } + + bus = gst_element_get_bus (pipeline); + + gst_element_set_state (pipeline, GST_STATE_PLAYING); + + /* wait for state change to complete or to have failed */ + ret = gst_element_get_state (pipeline, NULL, NULL, -1); + if (ret == GST_STATE_CHANGE_FAILURE) { + /* check if an error was posted on the bus */ + if ((msg = gst_bus_poll (bus, GST_MESSAGE_ERROR, 0))) { + gst_message_parse_error (msg, &error, NULL); + } + + g_warning ("Error starting pipeline: %s", + (error) ? error->message : "UNKNOWN ERROR"); + + goto done; + } + + g_print ("Writing test sound to test.%s ...\n", extension); + + /* wait for it finish (error or EOS), but no more than 30 secs */ + msg = gst_bus_poll (bus, GST_MESSAGE_ERROR | GST_MESSAGE_EOS, 30*GST_SECOND); + + if (msg) { + switch (GST_MESSAGE_TYPE (msg)) { + case GST_MESSAGE_EOS: + g_print ("Test finished successfully.\n"); + break; + case GST_MESSAGE_ERROR: + gst_message_parse_error (msg, &error, NULL); + g_warning ("Error starting pipeline: %s", + (error) ? error->message : "UNKNOWN ERROR"); + break; + default: + g_assert_not_reached (); + } + } else { + g_warning ("Test did not finish within 30 seconds!\n"); + } + +done: + + g_print ("==============================================================\n"); + + if (error) + g_error_free (error); + + if (pipeline) { + gst_element_set_state (pipeline, GST_STATE_NULL); + gst_object_unref (pipeline); + } + + if (msg) + gst_message_unref (msg); + + if (bus) + gst_object_unref (bus); + + g_free (pipeline_desc); + g_free (partialpipe); + g_free (extension); + + gtk_widget_set_sensitive (GTK_WIDGET (button), TRUE); +} + +int +main (int argc, char **argv) +{ + GtkWidget *window, *hbox, *combo, *edit, *test; + MateConfClient *mateconf; + GOptionContext *context; + GError *error = NULL; + + g_thread_init (NULL); + context = g_option_context_new (NULL); + g_option_context_add_group (context, gst_init_get_option_group ()); + g_option_context_add_group (context, gtk_get_option_group (TRUE)); + if (g_option_context_parse (context, &argc, &argv, &error) == FALSE) { + g_print ("%s\nRun '%s --help' to see a full list of available command line options.\n", + error->message, argv[0]); + g_error_free (error); + g_option_context_free (context); + exit (1); + } + g_option_context_free (context); + + mateconf = mateconf_client_get_default (); + mate_media_profiles_init (mateconf); + + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + combo = gm_audio_profile_choose_new (); + + edit = gtk_button_new_with_mnemonic ("_Edit Profiles"); + test = gtk_button_new_with_mnemonic ("_Test"); + g_signal_connect (edit, "clicked", (GCallback) edit_clicked_cb, window); + g_signal_connect (test, "clicked", (GCallback) test_clicked_cb, combo); + g_signal_connect (edit, "destroy", (GCallback) gtk_main_quit, NULL); + + hbox = gtk_hbox_new (FALSE, 7); + gtk_box_pack_start (GTK_BOX (hbox), combo, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (hbox), test, FALSE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (hbox), edit, FALSE, TRUE, 0); + gtk_container_add (GTK_CONTAINER (window), hbox); + gtk_widget_show_all (window); + gtk_main (); + + return 0; +} |