2 * This file is a part of MAFW
4 * Copyright (C) 2007, 2008, 2009 Nokia Corporation, all rights reserved.
6 * Contact: Visa Smolander <visa.smolander@nokia.com>
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public License
10 * as published by the Free Software Foundation; version 2.1 of
11 * the License, or (at your option) any later version.
13 * This library is distributed in the hope that it will be useful, but
14 * WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with this library; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
28 * Test of the playback system
30 * Copyright (C) 2007 Nokia Corporation
36 #include <sys/select.h>
38 #include <sys/types.h>
41 #include "mafw-gst-renderer.h"
42 #include <libmafw/mafw-metadata.h>
43 #include <libmafw/mafw-registry.h>
45 MafwGstRenderer *gst_renderer;
47 static struct termios tio_orig;
50 gboolean muted = FALSE;
54 *@time: how long to wait, in microsecs
57 int kbhit (int time) {
66 /* Wait up to 'time' microseconds. */
67 tv.tv_sec=time / 1000;
68 tv.tv_usec = (time % 1000)*1000;
70 retval=select (1, &rfds, NULL, NULL, &tv);
71 if(retval < 1) return -1;
72 retval = read (0, &c, 1);
73 if (retval < 1) return -1;
82 static void raw_kb_enable (void) {
83 struct termios tio_new;
84 tcgetattr(0, &tio_orig);
87 tio_new.c_lflag &= ~(ICANON|ECHO); /* Clear ICANON and ECHO. */
88 tio_new.c_cc[VMIN] = 1;
89 tio_new.c_cc[VTIME] = 0;
90 tcsetattr (0, TCSANOW, &tio_new);
93 static void raw_kb_disable (void)
95 tcsetattr (0,TCSANOW, &tio_orig);
98 static void get_position_cb(MafwRenderer* self, gint position, gpointer user_data,
101 guint* rpos = (guint*) user_data;
102 g_return_if_fail(rpos != NULL);
111 static gboolean idle_cb (gpointer data)
114 GError *error = NULL;
122 printf ("c = %d\n", c);
125 printf ("Seeking %d seconds forward\n", seek_delta);
128 mafw_gst_renderer_get_position(MAFW_RENDERER(gst_renderer),
129 get_position_cb, &pos);
131 printf (" Position before seek: %d\n", pos);
133 mafw_gst_renderer_set_position(MAFW_RENDERER(gst_renderer), pos,
136 mafw_gst_renderer_get_position(MAFW_RENDERER(gst_renderer),
137 get_position_cb, &pos);
139 printf (" Position after seek: %d\n", pos);
143 printf ("Seeking %d seconds backwards\n", seek_delta);
146 mafw_gst_renderer_get_position(MAFW_RENDERER(gst_renderer),
147 get_position_cb, &pos);
149 printf (" Position before seek: %d\n", pos);
151 mafw_gst_renderer_set_position(MAFW_RENDERER(gst_renderer), pos,
154 mafw_gst_renderer_get_position(MAFW_RENDERER(gst_renderer),
155 get_position_cb, &pos);
157 printf (" Position after seek: %d\n", pos);
161 if (gst_renderer->current_state == Playing) {
162 printf ("Pausing...\n");
163 mafw_gst_renderer_pause(MAFW_RENDERER (gst_renderer), NULL, NULL);
165 else if (gst_renderer->current_state == Paused) {
166 printf ("Resuming...\n");
167 mafw_gst_renderer_resume(MAFW_RENDERER (gst_renderer), NULL, NULL);
172 printf ("Playing...\n");
173 mafw_gst_renderer_play (MAFW_RENDERER (gst_renderer), NULL, NULL);
177 printf ("Stopping\n");
178 mafw_gst_renderer_stop (MAFW_RENDERER (gst_renderer), NULL, NULL);
182 printf ("Getting position\n");
185 mafw_gst_renderer_get_position(MAFW_RENDERER(gst_renderer),
186 get_position_cb, &pos);
188 printf ("Current position: %d\n", pos);
193 printf ("Increasing volume to %lf\n", volume);
194 mafw_extension_set_property_float(MAFW_EXTENSION(gst_renderer),
200 printf ("Decreasing volume to %lf\n", volume);
201 mafw_extension_set_property_float(MAFW_EXTENSION(gst_renderer),
207 printf ("(Un)Muting...\n");
208 mafw_extension_set_property_boolean(MAFW_EXTENSION(gst_renderer),
213 printf ("COMMANDS:\n" \
216 " space\tPause/Resume\n" \
217 " +\t\tVolume up\n" \
218 " -\t\tVolume down\n" \
219 " m\t\tMute/Unmute\n" \
220 " .\t\tSeek forward 2 sec\n" \
221 " ,\t\tSeek backwards 2 sec\n" \
227 mafw_gst_renderer_stop (MAFW_RENDERER (gst_renderer), NULL, NULL);
229 g_main_loop_quit (loop);
233 printf ("Error occured during the operation\n");
234 g_error_free (error);
244 static void metadata_changed (MafwGstRenderer *gst_renderer,
245 GHashTable *metadata,
248 g_print("Metadata changed:\n");
249 mafw_metadata_print (metadata, NULL);
257 static void buffering_cb (MafwGstRenderer *gst_renderer,
261 g_print("Buffering: %f\n", percentage);
264 static void play_uri_cb(MafwRenderer* renderer, gpointer user_data, const GError* error)
267 printf("Unable to play: %s\n", error->message);
276 gint main(gint argc, gchar ** argv)
278 MafwRegistry *registry;
281 gst_init (&argc, &argv);
284 g_print("Usage: mafw-test-player <media-uri>\n");
290 registry = MAFW_REGISTRY(mafw_registry_get_instance());
291 gst_renderer = MAFW_GST_RENDERER(mafw_gst_renderer_new(registry));
292 g_signal_connect (G_OBJECT (gst_renderer),
294 G_CALLBACK (metadata_changed),
297 g_signal_connect (G_OBJECT (gst_renderer),
299 G_CALLBACK (buffering_cb),
302 mafw_renderer_play_uri(MAFW_RENDERER (gst_renderer), argv[1], play_uri_cb,
305 loop = mafw_gst_renderer_get_loop(gst_renderer);
307 g_idle_add (idle_cb, NULL);
308 g_main_loop_run (loop);
310 g_object_unref (G_OBJECT (gst_renderer));