From: Jens Georg Date: Wed, 5 Dec 2012 22:26:39 +0000 (+0100) Subject: examples: Add fullscreen renderer example X-Git-Tag: RYGEL_0_17_5~53 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=eb25307efabb64e8cf79fb425a52bcbdea7e2d3c;p=profile%2Fivi%2Frygel.git examples: Add fullscreen renderer example --- diff --git a/configure.ac b/configure.ac index a03f4f9..87bda14 100644 --- a/configure.ac +++ b/configure.ac @@ -83,6 +83,7 @@ AS_IF([test "x$with_media_engine" = "xgstreamer"], PKG_CHECK_MODULES(LIBGSTREAMER, gstreamer-1.0 >= $GSTREAMER_REQUIRED) PKG_CHECK_MODULES(GSTREAMER_BASE, gstreamer-base-1.0 >= $GSTREAMER_REQUIRED) PKG_CHECK_MODULES(GST_PBU, gstreamer-pbutils-1.0 >= $GSTPBU_REQUIRED) + PKG_CHECK_MODULES(GST_VIDEO, gstreamer-video-1.0 >= $GSTREAMER_REQUIRED) enable_gstreamer="yes" BUILT_ENGINES="$BUILT_ENGINES;librygel-media-engine-gst" ], diff --git a/examples/Makefile.am b/examples/Makefile.am index b538ea8..ac39753 100644 --- a/examples/Makefile.am +++ b/examples/Makefile.am @@ -38,6 +38,19 @@ standalone_renderer_gst_LDADD = \ $(top_builddir)/src/librygel-renderer-gst/librygel-renderer-gst-2.0.la \ $(LIBGSTREAMER_LIBS) \ $(RYGEL_COMMON_LIBS) + +if BUILD_UI +noinst_PROGRAMS += fullscreen-renderer +fullscreen_renderer_SOURCES = fullscreen-renderer.c +fullscreen_renderer_CFLAGS = $(AM_CFLAGS) $(GTK_CFLAGS) +fullscreen_renderer_LDADD = \ + $(top_builddir)/src/librygel-renderer/librygel-renderer-2.0.la \ + $(top_builddir)/src/librygel-renderer-gst/librygel-renderer-gst-2.0.la \ + $(LIBGSTREAMER_LIBS) \ + $(RYGEL_COMMON_LIBS) \ + $(GTK_LIBS) \ + $(GST_VIDEO_LIBS) +endif endif EXTRA_DIST = service/wrap-dbus \ diff --git a/examples/fullscreen-renderer.c b/examples/fullscreen-renderer.c new file mode 100644 index 0000000..71b1e8a --- /dev/null +++ b/examples/fullscreen-renderer.c @@ -0,0 +1,100 @@ +/* + * Copyright (C) 2012 Openismus GmbH. + * + * Author: Jens Georg + * + * This file is part of Rygel. + * + * Rygel 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. + * + * Rygel 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 program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +/* + * Demo application for librygel-renderer-gst. + * + * Creates a simple stand-alone UPnP renderer that renders any visual content + * fullscreen. + * + * Usage: + * standalone-renderer [] + * + * If no network device is given on the commandline, the program falls back to + * eth0. + * + * To do anything useful, another UPnP server + UPnP controller is necessary + * to tell it which media file to show. + */ + +#include +#include +#include + +#include "rygel-renderer-gst.h" +#include "rygel-core.h" + +struct _MainData { + GtkWindow *window; + GtkWindow *video; + GstElement *playbin; +}; +typedef struct _MainData MainData; + +static void on_realize (GtkWidget *widget, gpointer user_data) +{ + GdkWindow *window; + guintptr window_handle; + MainData *data = (MainData *) user_data; + + window = gtk_widget_get_window (widget); + if (!gdk_window_ensure_native (window)) + g_error ("Could not create native window for overlay"); + + window_handle = GDK_WINDOW_XID (window); + gst_video_overlay_set_window_handle (GST_VIDEO_OVERLAY (data->playbin), + window_handle); +} + +int main (int argc, char *argv[]) +{ + RygelPlaybinRenderer *renderer; + GError *error = NULL; + GMainLoop *loop; + MainData data; + + gtk_init (&argc, &argv); + gst_init (&argc, &argv); + + g_set_application_name ("Rygel-Fullscreen-Renderer"); + + renderer = rygel_playbin_renderer_new ("LibRygel renderer demo"); + data.playbin = rygel_playbin_renderer_get_playbin (renderer); + + data.window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + data.video = gtk_drawing_area_new (); + gtk_widget_set_double_buffered (data.video, FALSE); + gtk_container_add (GTK_CONTAINER (data.window), data.video); + g_signal_connect (data.video, "realize", G_CALLBACK (on_realize), &data); + gtk_window_fullscreen (data.window); + gtk_widget_show_all (data.window); + + if (argc >= 2) { + rygel_media_device_add_interface (RYGEL_MEDIA_DEVICE (renderer), argv[1]); + } else { + rygel_media_device_add_interface (RYGEL_MEDIA_DEVICE (renderer), "eth0"); + } + + gtk_main (); + + return 0; +}