/* * Clutter-GStreamer. * * GStreamer integration library for Clutter. * * test-start-stop.c - Test switching between 2 media files. * * Authored by Shuang He * * Copyright (C) 2009 Intel Corporation * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser 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. */ #include #include #include char *video_files[] = {NULL, NULL}; void on_error (ClutterGstPlayer *player) { g_print ("error\n"); clutter_main_quit (); } gboolean test (gpointer data) { static int count = 1; static ClutterGstPlayback *player = NULL; static char *uri[2] = {NULL, NULL}; const char *playing_uri = NULL; /* Check until we get video playing */ if (!clutter_gst_player_get_playing (CLUTTER_GST_PLAYER (data))) return TRUE; if (CLUTTER_GST_PLAYBACK (data) != player) { player = CLUTTER_GST_PLAYBACK (data); count = 1; g_free(uri[0]); uri[0] = NULL; g_free(uri[1]); uri[1] = NULL; } clutter_gst_playback_set_filename (player, video_files[count & 1]); g_print ("playing %s\n", video_files[count & 1]); if (uri[count & 1] == NULL) { uri[count & 1] = g_strdup (clutter_gst_playback_get_uri (player)); g_assert (uri[count & 1] != NULL); } /* See if it's still playing */ g_assert (clutter_gst_player_get_playing (CLUTTER_GST_PLAYER (player))); /* See if it's already change to play correct file */ playing_uri = clutter_gst_playback_get_uri (player); g_assert_cmpstr (playing_uri, ==, uri[count & 1]); if (count ++ > 10) { clutter_gst_player_set_playing (CLUTTER_GST_PLAYER (player), FALSE); clutter_main_quit (); return FALSE; } return TRUE; } int main (int argc, char *argv[]) { ClutterInitError error; ClutterColor stage_color = { 0x00, 0x00, 0x00, 0x00 }; ClutterActor *stage = NULL; ClutterActor *video = NULL; ClutterGstPlayback *player = NULL; if (argc < 3) { g_print ("%s video1 video2\n", argv[0]); exit (1); } video_files[0] = argv[1]; video_files[1] = argv[2]; error = clutter_gst_init (&argc, &argv); g_assert (error == CLUTTER_INIT_SUCCESS); stage = clutter_stage_new (); clutter_actor_set_background_color (stage, &stage_color); player = clutter_gst_playback_new (); video = g_object_new (CLUTTER_TYPE_ACTOR, "content", g_object_new (CLUTTER_GST_TYPE_ASPECTRATIO, "player", player, NULL), "width", clutter_actor_get_width (stage), "height", clutter_actor_get_height (stage), NULL); clutter_actor_add_child (stage, video); g_signal_connect (player, "error", G_CALLBACK(on_error), video); g_timeout_add (5000, test, player); clutter_gst_playback_set_filename (player, video_files[0]); clutter_gst_player_set_audio_volume (CLUTTER_GST_PLAYER (player), 0.5); clutter_gst_player_set_playing (CLUTTER_GST_PLAYER (player), TRUE); clutter_actor_show (stage); clutter_main (); return EXIT_SUCCESS; }