From: <al...@fr...> - 2005-09-20 18:49:24
|
CVS Root: /cvs/gstreamer Module: gst-plugins-bad Changes by: alima Date: Tue Sep 20 2005 11:49:17 PDT Log message: Fixed configure.ac and ext/sdl/Makefile.am for sdl port to 0.9. Modified files: . : ChangeLog configure.ac ext/sdl : Makefile.am Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/ChangeLog.diff?r1=1.1832&r2=1.1833 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/configure.ac.diff?r1=1.592&r2=1.593 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/ext/sdl/Makefile.am.diff?r1=1.14&r2=1.15 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins-bad/ChangeLog,v retrieving revision 1.1832 retrieving revision 1.1833 diff -u -d -r1.1832 -r1.1833 --- ChangeLog 19 Sep 2005 21:51:02 -0000 1.1832 +++ ChangeLog 20 Sep 2005 18:49:05 -0000 1.1833 @@ -1,14 +1,21 @@ -=== release 0.9.1 === + +2005-09-20 Edgard Lima <edg...@in...> + * configure.ac: + * ext/sdl/Makefile.am: + Fixed Makefile.am - removed hard coded flags from Makefile.am. + Added AC_PATH_XTRA to configure.ac to be used by Makefile.am. 2005-09-19 Edgard Lima <edg...@in...> - * Makefile.am - * configure.ac - * ext/sdl/Makefile.am - * ext/sdl/sdlvideosink.c - * ext/sdl/sdlvideosink.h - * PORTED_09 - Ported to 0.9. + * Makefile.am: + * ext/sdl/sdlvideosink.c: + * PORTED_09: + Ported to 0.9. +=== release 0.9.1 === 2005-09-08 Flavio Oliveira <fla...@in...> Index: configure.ac RCS file: /cvs/gstreamer/gst-plugins-bad/configure.ac,v retrieving revision 1.592 retrieving revision 1.593 diff -u -d -r1.592 -r1.593 --- configure.ac 19 Sep 2005 21:47:53 -0000 1.592 +++ configure.ac 20 Sep 2005 18:49:05 -0000 1.593 @@ -369,6 +369,8 @@ dnl now try to find the HEADER AC_CHECK_HEADER(X11/Xlib.h, HAVE_X="yes", HAVE_X="no") +AC_PATH_XTRA if test "x$HAVE_X" = "xno" then AC_MSG_NOTICE([cannot find X11 development files]) Index: Makefile.am RCS file: /cvs/gstreamer/gst-plugins-bad/ext/sdl/Makefile.am,v retrieving revision 1.14 retrieving revision 1.15 diff -u -d -r1.14 -r1.15 --- Makefile.am 19 Sep 2005 21:47:54 -0000 1.14 +++ Makefile.am 20 Sep 2005 18:49:05 -0000 1.15 @@ -3,7 +3,7 @@ libgstsdlvideosink_la_SOURCES = sdlvideosink.c libgstsdlvideosink_la_CFLAGS = $(GST_CFLAGS) $(X_CFLAGS) $(SDL_CFLAGS) -libgstsdlvideosink_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -L/usr/X11R6/lib/ +libgstsdlvideosink_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) libgstsdlvideosink_la_LIBADD = $(SDL_LIBS) \ $(top_builddir)/../gst-plugins-base/gst-libs/gst/interfaces/libgstinterfaces-$(GST_MAJORMINOR).la \ $(top_builddir)/../gst-plugins-base/gst-libs/gst/video/libgstvideo-$(GST_MAJORMINOR).la \ |
From: <al...@fr...> - 2005-10-27 19:36:43
|
CVS Root: /cvs/gstreamer Module: gst-plugins-bad Changes by: alima Date: Thu Oct 27 2005 12:36:30 PDT Log message: Trying to fix videos out of sync (not fixed yet) Modified files: . : ChangeLog ext/sdl : sdlvideosink.c sdlvideosink.h Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/ChangeLog.diff?r1=1.1863&r2=1.1864 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/ext/sdl/sdlvideosink.c.diff?r1=1.55&r2=1.56 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/ext/sdl/sdlvideosink.h.diff?r1=1.11&r2=1.12 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins-bad/ChangeLog,v retrieving revision 1.1863 retrieving revision 1.1864 diff -u -d -r1.1863 -r1.1864 --- ChangeLog 27 Oct 2005 11:27:53 -0000 1.1863 +++ ChangeLog 27 Oct 2005 19:36:17 -0000 1.1864 @@ -1,3 +1,9 @@ +2005-10-27 Edgard Lima <edg...@in...> + + * ext/sdl/sdlvideosink.c: + * ext/sdl/sdlvideosink.h: + Trying to fix videos out of sync (not fixed yet) + 2005-10-27 Tim-Philipp Müller <tim at centricular dot net> * gst/qtdemux/qtdemux.h: Index: sdlvideosink.c RCS file: /cvs/gstreamer/gst-plugins-bad/ext/sdl/sdlvideosink.c,v retrieving revision 1.55 retrieving revision 1.56 diff -u -d -r1.55 -r1.56 --- sdlvideosink.c 12 Oct 2005 14:29:52 -0000 1.55 +++ sdlvideosink.c 27 Oct 2005 19:36:18 -0000 1.56 @@ -162,6 +162,30 @@ } static void +gst_sdlvideosink_get_times (GstBaseSink * basesink, GstBuffer * buffer, + GstClockTime * start, GstClockTime * end) +{ + GstSDLVideoSink *sdlvideosink = GST_SDLVIDEOSINK (basesink); + GstClockTime timestamp, duration; + timestamp = GST_BUFFER_TIMESTAMP (buffer); + if (GST_CLOCK_TIME_IS_VALID (timestamp)) { + *start = timestamp; + duration = GST_BUFFER_DURATION (buffer); + if (GST_CLOCK_TIME_IS_VALID (duration)) { + *end = timestamp + duration; + } else { + if (sdlvideosink->framerate > 0) { + *end = timestamp + GST_SECOND / sdlvideosink->framerate; + } + } + } +} +static void gst_sdlvideosink_class_init (GstSDLVideoSinkClass * klass) { GObjectClass *gobject_class; @@ -183,6 +207,7 @@ GST_DEBUG_FUNCPTR (gst_sdlvideosink_change_state); gstvs_class->set_caps = GST_DEBUG_FUNCPTR (gst_sdlvideosink_setcaps); + gstvs_class->get_times = GST_DEBUG_FUNCPTR (gst_sdlvideosink_get_times); gstvs_class->preroll = GST_DEBUG_FUNCPTR (gst_sdlvideosink_show_frame); gstvs_class->render = GST_DEBUG_FUNCPTR (gst_sdlvideosink_show_frame); @@ -256,6 +281,7 @@ sdlvideosink->width = -1; sdlvideosink->height = -1; + sdlvideosink->framerate = 0; sdlvideosink->overlay = NULL; sdlvideosink->screen = NULL; @@ -543,6 +569,7 @@ gst_sdlvideosink_get_sdl_from_fourcc (sdlvideosink, format); gst_structure_get_int (structure, "width", &sdlvideosink->width); gst_structure_get_int (structure, "height", &sdlvideosink->height); + gst_structure_get_double (structure, "framerate", &sdlvideosink->framerate); if (!sdlvideosink->format || !gst_sdlvideosink_create (sdlvideosink)) return FALSE; @@ -652,6 +679,7 @@ gst_sdlvideosink_change_state (GstElement * element, GstStateChange transition) GstSDLVideoSink *sdlvideosink; + GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS; g_return_val_if_fail (GST_IS_SDLVIDEOSINK (element), GST_STATE_CHANGE_FAILURE); @@ -663,7 +691,16 @@ return GST_STATE_CHANGE_FAILURE; GST_OBJECT_FLAG_SET (sdlvideosink, GST_SDLVIDEOSINK_OPEN); break; + default: /* do nothing */ + break; + if (GST_ELEMENT_CLASS (parent_class)->change_state) + ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); + switch (transition) { case GST_STATE_CHANGE_PAUSED_TO_READY: + sdlvideosink->framerate = 0; gst_sdlvideosink_destroy (sdlvideosink); case GST_STATE_CHANGE_READY_TO_NULL: @@ -674,8 +711,6 @@ } - if (GST_ELEMENT_CLASS (parent_class)->change_state) - return GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); return GST_STATE_CHANGE_SUCCESS; Index: sdlvideosink.h RCS file: /cvs/gstreamer/gst-plugins-bad/ext/sdl/sdlvideosink.h,v retrieving revision 1.11 retrieving revision 1.12 diff -u -d -r1.11 -r1.12 --- sdlvideosink.h 12 Oct 2005 14:29:52 -0000 1.11 +++ sdlvideosink.h 27 Oct 2005 19:36:18 -0000 1.12 @@ -52,6 +52,8 @@ guint32 format; gint width, height; /* the size of the incoming YUV stream */ unsigned long xwindow_id; + + gdouble framerate; gboolean init; |
From: <al...@fr...> - 2005-10-31 18:07:50
|
CVS Root: /cvs/gstreamer Module: gst-plugins-bad Changes by: alima Date: Mon Oct 31 2005 10:07:42 PST Log message: Added a property that allows full-screen. Modified files: . : ChangeLog ext/sdl : sdlvideosink.c sdlvideosink.h Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/ChangeLog.diff?r1=1.1866&r2=1.1867 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/ext/sdl/sdlvideosink.c.diff?r1=1.58&r2=1.59 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/ext/sdl/sdlvideosink.h.diff?r1=1.13&r2=1.14 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins-bad/ChangeLog,v retrieving revision 1.1866 retrieving revision 1.1867 diff -u -d -r1.1866 -r1.1867 --- ChangeLog 28 Oct 2005 15:11:17 -0000 1.1866 +++ ChangeLog 31 Oct 2005 18:07:30 -0000 1.1867 @@ -1,3 +1,11 @@ +2005-10-31 Edgard Lima <edg...@in...> + + * gst-plugins-bad/ext/sdl/sdlvideosink.c: gst_sdlvideosink_class_init, + gst_sdlvideosink_set_property, gst_sdlvideosink_get_property, + gst_sdlvideosink_init, gst_sdlvideosink_create: + * gst-plugins-bad/ext/sdl/sdlvideosink.h: + Added a property that allows full-screen. 2005-10-28 Tim-Philipp Müller <tim at centricular dot net> * ext/sdl/sdlvideosink.c: (gst_sdlvideosink_base_init), Index: sdlvideosink.c RCS file: /cvs/gstreamer/gst-plugins-bad/ext/sdl/sdlvideosink.c,v retrieving revision 1.58 retrieving revision 1.59 diff -u -d -r1.58 -r1.59 --- sdlvideosink.c 28 Oct 2005 15:11:18 -0000 1.58 +++ sdlvideosink.c 31 Oct 2005 18:07:30 -0000 1.59 @@ -55,6 +55,13 @@ "Ronald Bultje <rb...@ro...>", }; +enum +{ + PROP_0, + PROP_FULLSCREEN +}; static void gst_sdlvideosink_base_init (gpointer g_class); static void gst_sdlvideosink_class_init (GstSDLVideoSinkClass * klass); static void gst_sdlvideosink_init (GstSDLVideoSink * sdl); @@ -226,6 +233,10 @@ gstvs_class->preroll = GST_DEBUG_FUNCPTR (gst_sdlvideosink_show_frame); gstvs_class->render = GST_DEBUG_FUNCPTR (gst_sdlvideosink_show_frame); + g_object_class_install_property (gobject_class, PROP_FULLSCREEN, + g_param_spec_boolean ("full-screen", "Full-screnn", + "If true it will be Full screen", FALSE, G_PARAM_READWRITE)); /*gstvs_class->set_video_out = gst_sdlvideosink_set_video_out; gstvs_class->push_ui_event = gst_sdlvideosink_push_ui_event; gstvs_class->set_geometry = gst_sdlvideosink_set_geometry; */ @@ -297,6 +308,7 @@ sdlvideosink->width = -1; sdlvideosink->height = -1; sdlvideosink->framerate = 0; + sdlvideosink->full_screen = FALSE; sdlvideosink->overlay = NULL; sdlvideosink->screen = NULL; @@ -505,8 +517,16 @@ g_mutex_lock (sdlvideosink->lock); /* create a SDL window of the size requested by the user */ - sdlvideosink->screen = SDL_SetVideoMode (GST_VIDEO_SINK_WIDTH (sdlvideosink), - GST_VIDEO_SINK_HEIGHT (sdlvideosink), 0, SDL_HWSURFACE | SDL_RESIZABLE); + if (sdlvideosink->full_screen) { + sdlvideosink->screen = + SDL_SetVideoMode (GST_VIDEO_SINK_WIDTH (sdlvideosink), + GST_VIDEO_SINK_HEIGHT (sdlvideosink), 0, + SDL_HWSURFACE | SDL_FULLSCREEN); + } else { + GST_VIDEO_SINK_HEIGHT (sdlvideosink), 0, SDL_HWSURFACE | SDL_RESIZABLE); + } if (sdlvideosink->screen == NULL) goto no_screen; @@ -675,6 +695,9 @@ sdlvideosink = GST_SDLVIDEOSINK (object); switch (prop_id) { + case PROP_FULLSCREEN: + sdlvideosink->full_screen = g_value_get_boolean (value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -691,6 +714,9 @@ + g_value_set_boolean (value, &sdlvideosink->full_screen); Index: sdlvideosink.h RCS file: /cvs/gstreamer/gst-plugins-bad/ext/sdl/sdlvideosink.h,v retrieving revision 1.13 retrieving revision 1.14 diff -u -d -r1.13 -r1.14 --- sdlvideosink.h 28 Oct 2005 15:11:18 -0000 1.13 +++ sdlvideosink.h 31 Oct 2005 18:07:30 -0000 1.14 @@ -57,6 +57,7 @@ gdouble framerate; + gboolean full_screen; gboolean init; SDL_Surface *screen; |
From: <al...@fr...> - 2005-10-31 20:58:20
|
CVS Root: /cvs/gstreamer Module: gst-plugins-bad Changes by: alima Date: Mon Oct 31 2005 12:57:59 PST Log message: Changed property full-screen to fullscreen, using SDL_SWSURFACE instead of SDL_HWSURFACE when in full screen mode. Modified files: . : ChangeLog ext/sdl : sdlvideosink.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/ChangeLog.diff?r1=1.1867&r2=1.1868 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/ext/sdl/sdlvideosink.c.diff?r1=1.59&r2=1.60 ====Begin Diffs==== Index: sdlvideosink.c =================================================================== RCS file: /cvs/gstreamer/gst-plugins-bad/ext/sdl/sdlvideosink.c,v retrieving revision 1.59 retrieving revision 1.60 diff -u -d -r1.59 -r1.60 --- sdlvideosink.c 31 Oct 2005 18:07:30 -0000 1.59 +++ sdlvideosink.c 31 Oct 2005 20:57:42 -0000 1.60 @@ -234,7 +234,7 @@ gstvs_class->render = GST_DEBUG_FUNCPTR (gst_sdlvideosink_show_frame); g_object_class_install_property (gobject_class, PROP_FULLSCREEN, - g_param_spec_boolean ("full-screen", "Full-screnn", + g_param_spec_boolean ("fullscreen", "Fullscreen", "If true it will be Full screen", FALSE, G_PARAM_READWRITE)); /*gstvs_class->set_video_out = gst_sdlvideosink_set_video_out; @@ -521,7 +521,7 @@ sdlvideosink->screen = SDL_SetVideoMode (GST_VIDEO_SINK_WIDTH (sdlvideosink), GST_VIDEO_SINK_HEIGHT (sdlvideosink), 0, - SDL_HWSURFACE | SDL_FULLSCREEN); + SDL_SWSURFACE | SDL_FULLSCREEN); } else { @@ -715,7 +715,7 @@ switch (prop_id) { case PROP_FULLSCREEN: - g_value_set_boolean (value, &sdlvideosink->full_screen); + g_value_set_boolean (value, sdlvideosink->full_screen); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); Index: ChangeLog RCS file: /cvs/gstreamer/gst-plugins-bad/ChangeLog,v retrieving revision 1.1867 retrieving revision 1.1868 diff -u -d -r1.1867 -r1.1868 --- ChangeLog 31 Oct 2005 18:07:30 -0000 1.1867 +++ ChangeLog 31 Oct 2005 20:57:41 -0000 1.1868 @@ -1,5 +1,13 @@ 2005-10-31 Edgard Lima <edg...@in...> + * gst-plugins-bad/ext/sdl/sdlvideosink.c: + gst_sdlvideosink_set_property, gst_sdlvideosink_init, + gst_sdlvideosink_create: + Changed property full-screen to fullscreen, using SDL_SWSURFACE + instead of SDL_HWSURFACE when in full screen mode. + +2005-10-31 Edgard Lima <edg...@in...> + * gst-plugins-bad/ext/sdl/sdlvideosink.c: gst_sdlvideosink_class_init, gst_sdlvideosink_set_property, gst_sdlvideosink_get_property, gst_sdlvideosink_init, gst_sdlvideosink_create: |
From: <al...@fr...> - 2005-11-03 16:59:35
|
CVS Root: /cvs/gstreamer Module: gst-plugins-bad Changes by: alima Date: Thu Nov 03 2005 08:59:32 PST Log message: Add support to exit when 'Esc' key is pressed. Modified files: . : ChangeLog ext/sdl : sdlvideosink.c sdlvideosink.h Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/ChangeLog.diff?r1=1.1870&r2=1.1871 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/ext/sdl/sdlvideosink.c.diff?r1=1.60&r2=1.61 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/ext/sdl/sdlvideosink.h.diff?r1=1.14&r2=1.15 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins-bad/ChangeLog,v retrieving revision 1.1870 retrieving revision 1.1871 diff -u -d -r1.1870 -r1.1871 --- ChangeLog 2 Nov 2005 17:12:31 -0000 1.1870 +++ ChangeLog 3 Nov 2005 16:59:19 -0000 1.1871 @@ -1,3 +1,11 @@ +2005-11-03 Edgard Lima <edg...@in...> + + * ext/sdl/sdlvideosink.c: (SDL_WaitEventTimeout), + (gst_sdlvideosink_event_thread), (gst_sdlvideosink_initsdl), + (gst_sdlvideosink_change_state), (gst_sdlvideosink_deinitsdl): + * ext/sdl/sdlvideosink.h: + Add support to exit when 'Esc' key is pressed. 2005-11-02 Julien MOUTTE <ju...@mo...> * configure.ac: Requires DirectFB 0.9.24 Index: sdlvideosink.c RCS file: /cvs/gstreamer/gst-plugins-bad/ext/sdl/sdlvideosink.c,v retrieving revision 1.60 retrieving revision 1.61 diff -u -d -r1.60 -r1.61 --- sdlvideosink.c 31 Oct 2005 20:57:42 -0000 1.60 +++ sdlvideosink.c 3 Nov 2005 16:59:20 -0000 1.61 @@ -319,6 +319,9 @@ sdlvideosink->init = FALSE; + sdlvideosink->event_thread = NULL; + sdlvideosink->running = FALSE; sdlvideosink->lock = g_mutex_new (); } @@ -402,8 +405,6 @@ if (SDL_LockYUVOverlay (sdlvideosink->overlay) < 0) goto lock_yuv; - sdlvideosink->init = TRUE; - return TRUE; /* ERRORS */ @@ -443,13 +444,83 @@ g_mutex_lock (sdlvideosink->lock); if (sdlvideosink->init) { + sdlvideosink->running = FALSE; + if (sdlvideosink->event_thread) { + g_thread_join (sdlvideosink->event_thread); + sdlvideosink->event_thread = NULL; + } SDL_Quit (); sdlvideosink->init = FALSE; } g_mutex_unlock (sdlvideosink->lock); +int +SDL_WaitEventTimeout (SDL_Event * event, Uint32 timeout) +{ + Uint32 i; + int numevents = 0; + for (i = 0; i < timeout; i += 10) { + SDL_PumpEvents (); + /* numevents = SDL_PeepEvents(event, 1, SDL_GETEVENT, SDL_ALLEVENTS); */ + numevents = + SDL_PeepEvents (event, 1, SDL_GETEVENT, + SDL_KEYDOWNMASK | SDL_KEYUPMASK | + /* SDL_MOUSEMOTIONMASK | SDL_MOUSEBUTTONDOWNMASK | SDL_MOUSEBUTTONUPMASK | */ + SDL_QUITMASK); + switch (numevents) { + case -1: + return 0; + break; + case 0: + SDL_Delay (10); + default: + return numevents; + } + return 0; +} +static gpointer +gst_sdlvideosink_event_thread (GstSDLVideoSink * sdlvideosink) + SDL_Event event; + while (sdlvideosink->running) { + if (SDL_WaitEventTimeout (&event, 50)) { + switch (event.type) { + case SDL_KEYDOWN: + if (SDLK_ESCAPE != event.key.keysym.sym) { + break; + } else { + /* fall through */ + } + case SDL_QUIT: + sdlvideosink->running = FALSE; + GST_ELEMENT_ERROR (sdlvideosink, RESOURCE, OPEN_WRITE, + ("Video output device is gone."), + ("We were running fullscreen and user " + "pressed the ESC key, stopping playback.")); + break; + } + return NULL; static gboolean gst_sdlvideosink_initsdl (GstSDLVideoSink * sdlvideosink) { @@ -472,6 +543,11 @@ sdlvideosink->init = TRUE; + sdlvideosink->running = TRUE; + sdlvideosink->event_thread = + g_thread_create ((GThreadFunc) gst_sdlvideosink_event_thread, + sdlvideosink, TRUE, NULL); Index: sdlvideosink.h RCS file: /cvs/gstreamer/gst-plugins-bad/ext/sdl/sdlvideosink.h,v retrieving revision 1.14 retrieving revision 1.15 diff -u -d -r1.14 -r1.15 --- sdlvideosink.h 31 Oct 2005 18:07:30 -0000 1.14 +++ sdlvideosink.h 3 Nov 2005 16:59:20 -0000 1.15 @@ -59,7 +59,8 @@ gboolean full_screen; gboolean init; + gboolean running; + GThread *event_thread; SDL_Surface *screen; SDL_Overlay *overlay; SDL_Rect rect; |
From: <al...@fr...> - 2006-01-09 18:22:45
|
CVS Root: /cvs/gstreamer Module: gst-plugins-bad Changes by: alima Date: Mon Jan 09 2006 10:21:08 PST Log message: Created new element, sdlaudiosink. Modified files: . : ChangeLog configure.ac ext/sdl : Makefile.am sdlvideosink.c Added files: ext/sdl : gstsdl.c sdlaudiosink.c sdlaudiosink.h Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/ChangeLog.diff?r1=1.1939&r2=1.1940 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/configure.ac.diff?r1=1.630&r2=1.631 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/ext/sdl/Makefile.am.diff?r1=1.16&r2=1.17 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/ext/sdl/gstsdl.c?rev=1.1&content-type=text/vnd.viewcvs-markup http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/ext/sdl/sdlaudiosink.c?rev=1.1&content-type=text/vnd.viewcvs-markup http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/ext/sdl/sdlaudiosink.h?rev=1.1&content-type=text/vnd.viewcvs-markup http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/ext/sdl/sdlvideosink.c.diff?r1=1.63&r2=1.64 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins-bad/ChangeLog,v retrieving revision 1.1939 retrieving revision 1.1940 diff -u -d -r1.1939 -r1.1940 --- ChangeLog 5 Jan 2006 23:17:43 -0000 1.1939 +++ ChangeLog 9 Jan 2006 18:20:55 -0000 1.1940 @@ -1,4 +1,15 @@ -2006-01-05 Sebastien Moutte <seb...@mo...> +2006-01-09 Edgard Lima <edg...@in...> + + * configure.ac: + * ext/sdl/Makefile.am: + * ext/sdl/gstsdl.c: + * ext/sdl/sdlaudiosink.c: + * ext/sdl/sdlaudiosink.h: + * ext/sdl/sdlvideosink.c: + Created new element, sdlaudiosink. + +2006-01-05 Sebastien Moutte <seb...@mo...> * added sys/directdraw * added sys/directsound * added win32/vs6/gst_plugins_bad.dsw Index: configure.ac RCS file: /cvs/gstreamer/gst-plugins-bad/configure.ac,v retrieving revision 1.630 retrieving revision 1.631 diff -u -d -r1.630 -r1.631 --- configure.ac 28 Dec 2005 21:07:17 -0000 1.630 +++ configure.ac 9 Jan 2006 18:20:55 -0000 1.631 @@ -488,7 +488,7 @@ dnl *** SDL *** translit(dnm, m, l) AM_CONDITIONAL(USE_SDL, true) -GST_CHECK_FEATURE(SDL, [SDL plug-in], sdlvideosink, [ +GST_CHECK_FEATURE(SDL, [SDL plug-in], sdlvideosink sdlaudiosink, [ AM_PATH_SDL(, HAVE_SDL=yes, HAVE_SDL=no) ]) Index: Makefile.am RCS file: /cvs/gstreamer/gst-plugins-bad/ext/sdl/Makefile.am,v retrieving revision 1.16 retrieving revision 1.17 diff -u -d -r1.16 -r1.17 --- Makefile.am 20 Sep 2005 19:25:12 -0000 1.16 +++ Makefile.am 9 Jan 2006 18:20:56 -0000 1.17 @@ -1,8 +1,19 @@ plugin_LTLIBRARIES = libgstsdlvideosink.la -libgstsdlvideosink_la_SOURCES = sdlvideosink.c -libgstsdlvideosink_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(SDL_CFLAGS) -libgstsdlvideosink_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_MAJORMINOR) -lgstinterfaces-$(GST_MAJORMINOR) $(SDL_LIBS) +libgstsdlvideosink_la_SOURCES = gstsdl.c \ + sdlvideosink.c \ + sdlaudiosink.c +libgstsdlvideosink_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) \ + $(SDL_CFLAGS) +libgstsdlvideosink_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) \ + -lgstvideo-$(GST_MAJORMINOR) \ + -lgstaudio-@GST_MAJORMINOR@ \ + -lgstinterfaces-$(GST_MAJORMINOR) \ + $(SDL_LIBS) libgstsdlvideosink_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -noinst_HEADERS = sdlvideosink.h +noinst_HEADERS = sdlvideosink.h \ + sdlaudiosink.h --- NEW FILE: gstsdl.c --- /* GStreamer * Copyright (C) <2005> Edgard Lima <edg...@in...> * * 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 */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "sdlvideosink.h" #include "sdlaudiosink.h" GST_DEBUG_CATEGORY (sdl_debug); static gboolean plugin_init (GstPlugin * plugin) { if (!gst_element_register (plugin, "sdlvideosink", GST_RANK_NONE, GST_TYPE_SDLVIDEOSINK) || !gst_element_register (plugin, "sdlaudiosink", GST_RANK_NONE, GST_TYPE_SDLAUDIOSINK)) { return FALSE; } GST_DEBUG_CATEGORY_INIT (sdl_debug, "sdl", 0, "SDL elements"); return TRUE; } GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, GST_VERSION_MINOR, "sdl", "SDL (Simple DirectMedia Layer) support for GStreamer", plugin_init, VERSION, "LGPL", GST_PACKAGE, GST_ORIGIN) --- NEW FILE: sdlaudiosink.c --- #include <SDL_byteorder.h> #include <string.h> #include <unistd.h> GST_DEBUG_CATEGORY_EXTERN (sdl_debug); #define GST_CAT_DEFAULT sdl_debug /* elementfactory information */ static GstElementDetails gst_sdlaudio_sink_details = GST_ELEMENT_DETAILS ("Audio Sink (SDLAUDIO)", "Sink/Audio", "Output to a sound card via SDLAUDIO", "Edgard Lima <edg...@in...>"); static void gst_sdlaudio_sink_base_init (gpointer g_class); static void gst_sdlaudio_sink_class_init (GstSDLAudioSinkClass * klass); static void gst_sdlaudio_sink_init (GstSDLAudioSink * sdlaudiosink); static void gst_sdlaudio_sink_dispose (GObject * object); static void gst_sdlaudio_sink_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec); static void gst_sdlaudio_sink_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec); static GstCaps *gst_sdlaudio_sink_getcaps (GstBaseSink * bsink); static gboolean gst_sdlaudio_sink_open (GstAudioSink * asink); static gboolean gst_sdlaudio_sink_close (GstAudioSink * asink); static gboolean gst_sdlaudio_sink_prepare (GstAudioSink * asink, GstRingBufferSpec * spec); static gboolean gst_sdlaudio_sink_unprepare (GstAudioSink * asink); static guint gst_sdlaudio_sink_write (GstAudioSink * asink, gpointer data, guint length); #if 0 static guint gst_sdlaudio_sink_delay (GstAudioSink * asink); static void gst_sdlaudio_sink_reset (GstAudioSink * asink); /* SdlaudioSink signals and args */ enum LAST_SIGNAL }; #define SEMAPHORE_INIT(s,f) \ do { \ s.cond = g_cond_new(); \ s.mutex = g_mutex_new(); \ s.mutexflag = f; \ } while(0) #define SEMAPHORE_CLOSE(s) \ if ( s.cond ) { \ g_cond_free(s.cond); \ s.cond = NULL; \ } \ if ( s.mutex ) { \ g_mutex_free(s.mutex); \ s.mutex = NULL; \ #define SEMAPHORE_UP(s) \ do \ { \ g_mutex_lock(s.mutex); \ s.mutexflag = TRUE; \ g_mutex_unlock(s.mutex); \ g_cond_signal(s.cond); \ } while(0) #define SEMAPHORE_DOWN(s, e) \ while (1) { \ g_mutex_lock(s.mutex); \ if (!s.mutexflag) { \ if ( e ) { \ g_mutex_unlock(s.mutex); \ break; \ } \ g_cond_wait(s.cond,s.mutex); \ } \ else { \ s.mutexflag = FALSE; \ g_mutex_unlock(s.mutex); \ break; \ g_mutex_unlock(s.mutex); \ } \ static GstStaticPadTemplate sdlaudiosink_sink_factory = GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, GST_STATIC_CAPS ("audio/x-raw-int, " "endianness = (int) { " G_STRINGIFY (G_BYTE_ORDER) " }, " "signed = (boolean) { TRUE, FALSE }, " "width = (int) 16, " "depth = (int) 16, " "rate = (int) [ 1, MAX ], " "channels = (int) [ 1, 2 ]; " "audio/x-raw-int, " "width = (int) 8, " "depth = (int) 8, " "rate = (int) [ 1, MAX ], " "channels = (int) [ 1, 2 ]") ); static GstElementClass *parent_class = NULL; GType gst_sdlaudio_sink_get_type (void) static GType sdlaudiosink_type = 0; if (!sdlaudiosink_type) { static const GTypeInfo sdlaudiosink_info = { sizeof (GstSDLAudioSinkClass), gst_sdlaudio_sink_base_init, NULL, (GClassInitFunc) gst_sdlaudio_sink_class_init, sizeof (GstSDLAudioSink), 0, (GInstanceInitFunc) gst_sdlaudio_sink_init, }; sdlaudiosink_type = g_type_register_static (GST_TYPE_AUDIO_SINK, "GstSDLAudioSink", &sdlaudiosink_info, 0); return sdlaudiosink_type; static void gst_sdlaudio_sink_dispose (GObject * object) GstSDLAudioSink *sdlaudiosink = GST_SDLAUDIOSINK (object); SEMAPHORE_CLOSE (sdlaudiosink->semB); SEMAPHORE_CLOSE (sdlaudiosink->semA); if (sdlaudiosink->buffer) { g_free (sdlaudiosink->buffer); G_OBJECT_CLASS (parent_class)->dispose (object); gst_sdlaudio_sink_base_init (gpointer g_class) GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); gst_element_class_set_details (element_class, &gst_sdlaudio_sink_details); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&sdlaudiosink_sink_factory)); gst_sdlaudio_sink_class_init (GstSDLAudioSinkClass * klass) GObjectClass *gobject_class; GstElementClass *gstelement_class; GstBaseSinkClass *gstbasesink_class; GstBaseAudioSinkClass *gstbaseaudiosink_class; GstAudioSinkClass *gstaudiosink_class; gobject_class = (GObjectClass *) klass; gstelement_class = (GstElementClass *) klass; gstbasesink_class = (GstBaseSinkClass *) klass; gstbaseaudiosink_class = (GstBaseAudioSinkClass *) klass; gstaudiosink_class = (GstAudioSinkClass *) klass; parent_class = g_type_class_ref (GST_TYPE_BASE_AUDIO_SINK); gobject_class->dispose = GST_DEBUG_FUNCPTR (gst_sdlaudio_sink_dispose); gstbasesink_class->get_caps = GST_DEBUG_FUNCPTR (gst_sdlaudio_sink_getcaps); gstaudiosink_class->open = GST_DEBUG_FUNCPTR (gst_sdlaudio_sink_open); gstaudiosink_class->close = GST_DEBUG_FUNCPTR (gst_sdlaudio_sink_close); gstaudiosink_class->prepare = GST_DEBUG_FUNCPTR (gst_sdlaudio_sink_prepare); gstaudiosink_class->unprepare = GST_DEBUG_FUNCPTR (gst_sdlaudio_sink_unprepare); gstaudiosink_class->write = GST_DEBUG_FUNCPTR (gst_sdlaudio_sink_write); gstaudiosink_class->delay = GST_DEBUG_FUNCPTR (gst_sdlaudio_sink_delay); gstaudiosink_class->reset = GST_DEBUG_FUNCPTR (gst_sdlaudio_sink_reset); gst_sdlaudio_sink_init (GstSDLAudioSink * sdlaudiosink) GST_DEBUG ("initializing sdlaudiosink"); memset (&sdlaudiosink->fmt, 0, sizeof (SDL_AudioSpec)); sdlaudiosink->buffer = NULL; sdlaudiosink->eos = FALSE; SEMAPHORE_INIT (sdlaudiosink->semA, TRUE); SEMAPHORE_INIT (sdlaudiosink->semB, TRUE); static GstCaps * gst_sdlaudio_sink_getcaps (GstBaseSink * bsink) GstSDLAudioSink *sdlaudiosink; GstCaps *caps = NULL; sdlaudiosink = GST_SDLAUDIOSINK (bsink); caps = gst_caps_copy (gst_pad_get_pad_template_caps (GST_BASE_SINK_PAD (bsink))); return caps; static gint gst_sdlaudio_sink_get_format (GstBufferFormat fmt) gint result = GST_UNKNOWN; switch (fmt) { case GST_U8: result = AUDIO_U8; break; case GST_S8: result = AUDIO_S8; case GST_S16_LE: result = AUDIO_S16LSB; case GST_S16_BE: result = AUDIO_S16MSB; case GST_U16_LE: result = AUDIO_U16LSB; case GST_U16_BE: result = AUDIO_U16MSB; default: return result; gst_sdlaudio_sink_open (GstAudioSink * asink) GstSDLAudioSink *sdlaudio; int mode; sdlaudio = GST_SDLAUDIOSINK (asink); if (SDL_Init (SDL_INIT_AUDIO) < 0) { goto open_failed; open_failed: { GST_ELEMENT_ERROR (sdlaudio, LIBRARY, INIT, ("Unable to init SDL: %s\n", SDL_GetError ()), (NULL)); gst_sdlaudio_sink_close (GstAudioSink * asink) GstSDLAudioSink *sdlaudio = GST_SDLAUDIOSINK (asink); sdlaudio->eos = TRUE; SEMAPHORE_UP (sdlaudio->semA); SEMAPHORE_UP (sdlaudio->semB); SDL_Quit (); static guint gst_sdlaudio_sink_write (GstAudioSink * asink, gpointer data, guint length) if (sdlaudio->fmt.size != length) { GST_ERROR ("ring buffer segment lenght (%u) != sdl buffer len", length, sdlaudio->fmt.size); SEMAPHORE_DOWN (sdlaudio->semA, sdlaudio->eos); if (!sdlaudio->eos) memcpy (sdlaudio->buffer, data, length); return sdlaudio->fmt.size; void mixaudio (void *unused, Uint8 * stream, int len) sdlaudio = GST_SDLAUDIOSINK (unused); if (sdlaudio->fmt.size != len) { GST_ERROR ("fmt buffer len (%u) != sdl callback len (%d)", sdlaudio->fmt.size, len); SEMAPHORE_DOWN (sdlaudio->semB, sdlaudio->eos); SDL_MixAudio (stream, sdlaudio->buffer, sdlaudio->fmt.size, SDL_MIX_MAXVOLUME); gst_sdlaudio_sink_prepare (GstAudioSink * asink, GstRingBufferSpec * spec) gint power2 = -1; sdlaudio->fmt.format = gst_sdlaudio_sink_get_format (spec->format); if (sdlaudio->fmt.format == 0) goto wrong_format; if (spec->width != 16 && spec->width != 8) goto dodgy_width; sdlaudio->fmt.freq = spec->rate; sdlaudio->fmt.channels = spec->channels; sdlaudio->fmt.samples = spec->segsize / (spec->channels * ((sdlaudio->fmt.format & 0xFF) >> 3)); sdlaudio->fmt.callback = mixaudio; sdlaudio->fmt.userdata = sdlaudio; GST_DEBUG ("set segsize: %d, segtotal: %d, samples: %d", spec->segsize, spec->segtotal, sdlaudio->fmt.samples); while (sdlaudio->fmt.samples) { sdlaudio->fmt.samples >>= 1; ++power2; sdlaudio->fmt.samples = 1; sdlaudio->fmt.samples <<= power2; if (SDL_OpenAudio (&sdlaudio->fmt, NULL) < 0) { goto unable_open; spec->segsize = sdlaudio->fmt.size; sdlaudio->buffer = g_malloc (sdlaudio->fmt.size); memset (sdlaudio->buffer, sdlaudio->fmt.silence, sdlaudio->fmt.size); spec->bytes_per_sample = spec->channels * ((sdlaudio->fmt.format & 0xFF) >> 3); memset (spec->silence_sample, sdlaudio->fmt.silence, spec->bytes_per_sample); SDL_PauseAudio (0); unable_open: GST_ELEMENT_ERROR (sdlaudio, RESOURCE, OPEN_READ, ("Unable to open audio: %s", SDL_GetError ()), NULL); wrong_format: ("Unable to get format %d", spec->format), NULL); dodgy_width: ("unexpected width %d", spec->width), NULL); gst_sdlaudio_sink_unprepare (GstAudioSink * asink) SDL_CloseAudio (); if (!gst_sdlaudio_sink_close (asink)) goto couldnt_close; if (!gst_sdlaudio_sink_open (asink)) goto couldnt_reopen; couldnt_close: GST_DEBUG ("Could not close the audio device"); couldnt_reopen: GST_DEBUG ("Could not reopen the audio device"); gst_sdlaudio_sink_delay (GstAudioSink * asink) return 0; gst_sdlaudio_sink_reset (GstAudioSink * asink) --- NEW FILE: sdlaudiosink.h --- #ifndef __GST_SDLAUDIOSINK_H__ #define __GST_SDLAUDIOSINK_H__ #include <gst/gst.h> #include <gst/audio/gstaudiosink.h> #include <SDL.h> #include <SDL_audio.h> G_BEGIN_DECLS #define GST_TYPE_SDLAUDIOSINK (gst_sdlaudio_sink_get_type()) #define GST_SDLAUDIOSINK(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_SDLAUDIOSINK,GstSDLAudioSink)) #define GST_SDLAUDIOSINK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_SDLAUDIOSINK,GstSDLAudioSinkClass)) #define GST_IS_SDLAUDIOSINK(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_SDLAUDIOSINK)) #define GST_IS_SDLAUDIOSINK_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_SDLAUDIOSINK)) typedef struct _GstSDLAudioSink GstSDLAudioSink; typedef struct _GstSDLAudioSinkClass GstSDLAudioSinkClass; typedef struct _gstsdl_semaphore { GCond *cond; GMutex *mutex; gboolean mutexflag; } gstsdl_semaphore; struct _GstSDLAudioSink { GstAudioSink sink; SDL_AudioSpec fmt; guint8 *buffer; gstsdl_semaphore semA; gstsdl_semaphore semB; gboolean eos; struct _GstSDLAudioSinkClass { GstAudioSinkClass parent_class; GType gst_sdlaudio_sink_get_type(void); G_END_DECLS #endif /* __GST_SDLAUDIOSINK_H__ */ Index: sdlvideosink.c RCS file: /cvs/gstreamer/gst-plugins-bad/ext/sdl/sdlvideosink.c,v retrieving revision 1.63 retrieving revision 1.64 diff -u -d -r1.63 -r1.64 --- sdlvideosink.c 23 Nov 2005 15:36:08 -0000 1.63 +++ sdlvideosink.c 9 Jan 2006 18:20:56 -0000 1.64 @@ -32,8 +32,8 @@ #include "sdlvideosink.h" -GST_DEBUG_CATEGORY_STATIC (sdlvideosink_debug); -#define GST_CAT_DEFAULT sdlvideosink_debug +GST_DEBUG_CATEGORY_EXTERN (sdl_debug); +#define GST_CAT_DEFAULT sdl_debug /* These macros are adapted from videotestsrc.c * and/or gst-plugins/gst/games/gstvideoimage.c */ @@ -173,8 +173,6 @@ gst_element_class_add_pad_template (element_class, sink_template); gst_element_class_set_details (element_class, &gst_sdlvideosink_details); - GST_DEBUG_CATEGORY_INIT (sdlvideosink_debug, "sdlvideosink", 0, - "SDL video sink element"); } static void @@ -844,19 +842,3 @@ return GST_STATE_CHANGE_FAILURE; } - -static gboolean -plugin_init (GstPlugin * plugin) -{ - if (!gst_element_register (plugin, "sdlvideosink", GST_RANK_NONE, - GST_TYPE_SDLVIDEOSINK)) - return FALSE; - return TRUE; -} -GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, - GST_VERSION_MINOR, - "sdlvideosink", - "SDL Video Sink", plugin_init, VERSION, "LGPL", GST_PACKAGE, GST_ORIGIN) |
From: <al...@fr...> - 2006-01-12 16:47:53
|
CVS Root: /cvs/gstreamer Module: gst-plugins-bad Changes by: alima Date: Wed Jan 11 2006 12:59:53 PST Log message: Now implementing navigation interface and using GST_BOILER_PLATE_FULL. Modified files: . : ChangeLog ext/sdl : sdlvideosink.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/ChangeLog.diff?r1=1.1943&r2=1.1944 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/ext/sdl/sdlvideosink.c.diff?r1=1.64&r2=1.65 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins-bad/ChangeLog,v retrieving revision 1.1943 retrieving revision 1.1944 diff -u -d -r1.1943 -r1.1944 --- ChangeLog 11 Jan 2006 15:34:51 -0000 1.1943 +++ ChangeLog 11 Jan 2006 20:59:39 -0000 1.1944 @@ -1,3 +1,9 @@ +2006-01-11 Edgard Lima <edg...@in...> + + * ext/sdl/sdlvideosink.c: + Now implementing navigation interface and using + GST_BOILER_PLATE_FULL. + 2006-01-11 Christian Schaller <chr...@fl...> Remove SunAudio plugin as Brian's new one is in -good Index: sdlvideosink.c RCS file: /cvs/gstreamer/gst-plugins-bad/ext/sdl/sdlvideosink.c,v retrieving revision 1.64 retrieving revision 1.65 diff -u -d -r1.64 -r1.65 --- sdlvideosink.c 9 Jan 2006 18:20:56 -0000 1.64 +++ sdlvideosink.c 11 Jan 2006 20:59:39 -0000 1.65 @@ -29,6 +29,7 @@ #include <stdlib.h> #include <gst/interfaces/xoverlay.h> +#include <gst/interfaces/navigation.h> #include "sdlvideosink.h" @@ -62,10 +63,6 @@ PROP_FULLSCREEN }; -static void gst_sdlvideosink_base_init (gpointer g_class); -static void gst_sdlvideosink_class_init (GstSDLVideoSinkClass * klass); -static void gst_sdlvideosink_init (GstSDLVideoSink * sdl); - static void gst_sdlvideosink_interface_init (GstImplementsInterfaceClass * klass); static gboolean gst_sdlvideosink_supported (GstImplementsInterface * iface, @@ -96,52 +93,40 @@ static GstStateChangeReturn gst_sdlvideosink_change_state (GstElement * element, GstStateChange transition); +static void gst_sdlvideosink_navigation_init (GstNavigationInterface * iface); static GstPadTemplate *sink_template; -static GstElementClass *parent_class = NULL; -GType -gst_sdlvideosink_get_type (void) +static void +_do_init (GType type) { - static GType sdlvideosink_type = 0; - if (!sdlvideosink_type) { - static const GTypeInfo sdlvideosink_info = { - sizeof (GstSDLVideoSinkClass), - gst_sdlvideosink_base_init, - NULL, - (GClassInitFunc) gst_sdlvideosink_class_init, - sizeof (GstSDLVideoSink), - 0, - (GInstanceInitFunc) gst_sdlvideosink_init, - }; - static const GInterfaceInfo iface_info = { - (GInterfaceInitFunc) gst_sdlvideosink_interface_init, - static const GInterfaceInfo xoverlay_info = { - (GInterfaceInitFunc) gst_sdlvideosink_xoverlay_init, + static const GInterfaceInfo iface_info = { + (GInterfaceInitFunc) gst_sdlvideosink_interface_init, + NULL, + }; + static const GInterfaceInfo xoverlay_info = { + (GInterfaceInitFunc) gst_sdlvideosink_xoverlay_init, + static const GInterfaceInfo navigation_info = { + (GInterfaceInitFunc) gst_sdlvideosink_navigation_init, - sdlvideosink_type = g_type_register_static (GST_TYPE_VIDEO_SINK, - "GstSDLVideoSink", &sdlvideosink_info, 0); - g_type_add_interface_static (sdlvideosink_type, - GST_TYPE_IMPLEMENTS_INTERFACE, &iface_info); - g_type_add_interface_static (sdlvideosink_type, GST_TYPE_X_OVERLAY, - &xoverlay_info); - } + g_type_add_interface_static (type, + GST_TYPE_IMPLEMENTS_INTERFACE, &iface_info); + g_type_add_interface_static (type, GST_TYPE_X_OVERLAY, &xoverlay_info); + g_type_add_interface_static (type, GST_TYPE_NAVIGATION, &navigation_info); - return sdlvideosink_type; } -static void -gst_sdlvideosink_base_init (gpointer g_class) +GST_BOILERPLATE_FULL (GstSDLVideoSink, gst_sdlvideosink, GstVideoSink, + GST_TYPE_VIDEO_SINK, _do_init) + static void gst_sdlvideosink_base_init (gpointer g_class) GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); GstCaps *capslist; @@ -150,10 +135,10 @@ GST_MAKE_FOURCC ('I', '4', '2', '0'), GST_MAKE_FOURCC ('Y', 'V', '1', '2'), GST_MAKE_FOURCC ('Y', 'U', 'Y', '2') -/* - GST_MAKE_FOURCC ('Y', 'V', 'Y', 'U'), - GST_MAKE_FOURCC ('U', 'Y', 'V', 'Y') -*/ + /* + GST_MAKE_FOURCC ('Y', 'V', 'Y', 'U'), + GST_MAKE_FOURCC ('U', 'Y', 'V', 'Y') + */ }; /* make a list of all available caps */ @@ -301,7 +286,8 @@ #endif static void -gst_sdlvideosink_init (GstSDLVideoSink * sdlvideosink) +gst_sdlvideosink_init (GstSDLVideoSink * sdlvideosink, + GstSDLVideoSinkClass * g_class) sdlvideosink->width = -1; @@ -470,7 +456,7 @@ numevents = SDL_PeepEvents (event, 1, SDL_GETEVENT, SDL_KEYDOWNMASK | SDL_KEYUPMASK | - /* SDL_MOUSEMOTIONMASK | SDL_MOUSEBUTTONDOWNMASK | SDL_MOUSEBUTTONUPMASK | */ + SDL_MOUSEMOTIONMASK | SDL_MOUSEBUTTONDOWNMASK | SDL_MOUSEBUTTONUPMASK | SDL_QUITMASK); switch (numevents) { case -1: @@ -498,8 +484,32 @@ if (SDL_WaitEventTimeout (&event, 50)) { switch (event.type) { + case SDL_MOUSEMOTION: + gst_navigation_send_mouse_event (GST_NAVIGATION (sdlvideosink), + "mouse-move", 0, event.motion.x, event.motion.y); + break; + case SDL_MOUSEBUTTONDOWN: + "mouse-button-press", + event.button.button, event.button.x, event.button.y); + case SDL_MOUSEBUTTONUP: + "mouse-button-release", + case SDL_KEYUP: + GST_DEBUG ("key press event %s !", + SDL_GetKeyName (event.key.keysym.sym)); + gst_navigation_send_key_event (GST_NAVIGATION (sdlvideosink), + "key-release", SDL_GetKeyName (event.key.keysym.sym)); case SDL_KEYDOWN: if (SDLK_ESCAPE != event.key.keysym.sym) { + GST_DEBUG ("key press event %s !", + SDL_GetKeyName (event.key.keysym.sym)); + gst_navigation_send_key_event (GST_NAVIGATION (sdlvideosink), + "key-press", SDL_GetKeyName (event.key.keysym.sym)); break; } else { /* fall through */ @@ -842,3 +852,70 @@ return GST_STATE_CHANGE_FAILURE; } +gst_sdlvideosink_navigation_send_event (GstNavigation * navigation, + GstStructure * structure) +{ + GstSDLVideoSink *sdlvideosink = GST_SDLVIDEOSINK (navigation); + GstEvent *event; + GstVideoRectangle src, dst, result; + gint width, height; + double x, y; + GstPad *pad = NULL; + src.w = GST_VIDEO_SINK_WIDTH (sdlvideosink); + src.h = GST_VIDEO_SINK_HEIGHT (sdlvideosink); + dst.w = sdlvideosink->width; + dst.h = sdlvideosink->height; + gst_video_sink_center_rect (src, dst, &result, FALSE); + event = gst_event_new_navigation (structure); + /* Our coordinates can be wrong here if we centered the video */ + /* Converting pointer coordinates to the non scaled geometry */ + if (gst_structure_get_double (structure, "pointer_x", &x)) { + double old_x = x; + if (x >= result.x && x <= (result.x + result.w)) { + x -= result.x; + x *= sdlvideosink->width; + x /= result.w; + } else { + x = 0; + } + GST_DEBUG_OBJECT (sdlvideosink, "translated navigation event x " + "coordinate from %f to %f", old_x, x); + gst_structure_set (structure, "pointer_x", G_TYPE_DOUBLE, x, NULL); + } + if (gst_structure_get_double (structure, "pointer_y", &y)) { + double old_y = y; + if (y >= result.y && y <= (result.y + result.h)) { + y -= result.y; + y *= sdlvideosink->height; + y /= result.h; + y = 0; + GST_DEBUG_OBJECT (sdlvideosink, "translated navigation event y " + "coordinate from %fd to %fd", old_y, y); + gst_structure_set (structure, "pointer_y", G_TYPE_DOUBLE, y, NULL); + pad = gst_pad_get_peer (GST_VIDEO_SINK_PAD (sdlvideosink)); + if (GST_IS_PAD (pad) && GST_IS_EVENT (event)) { + gst_pad_send_event (pad, event); + gst_object_unref (pad); +} +gst_sdlvideosink_navigation_init (GstNavigationInterface * iface) + iface->send_event = gst_sdlvideosink_navigation_send_event; |
From: <al...@fr...> - 2006-01-12 16:48:28
|
CVS Root: /cvs/gstreamer Module: gst-plugins-bad Changes by: alima Date: Wed Jan 11 2006 06:41:36 PST Log message: Replaced wrong style code by GST_BOILERPLATE. Modified files: . : ChangeLog ext/sdl : sdlaudiosink.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/ChangeLog.diff?r1=1.1941&r2=1.1942 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/ext/sdl/sdlaudiosink.c.diff?r1=1.1&r2=1.2 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins-bad/ChangeLog,v retrieving revision 1.1941 retrieving revision 1.1942 diff -u -d -r1.1941 -r1.1942 --- ChangeLog 11 Jan 2006 11:04:03 -0000 1.1941 +++ ChangeLog 11 Jan 2006 14:41:24 -0000 1.1942 @@ -1,3 +1,8 @@ +2006-01-11 Edgard Lima <edg...@in...> + + * ext/sdl/sdlaudiosink.c: + Replaced wrong style code by GST_BOILERPLATE. + 2006-01-11 Fabrizio Gennari <fab...@ti...> reviewed by: Edward Hervey <ed...@fl...> @@ -6,7 +11,7 @@ Add support for Indeo3 video in Quicktime files. Closes #326524 -2006-01-09 Edgard Lima <edg...@in...> +2006-01-09 Edgard Lima <edg...@in...> * configure.ac: * ext/sdl/Makefile.am: Index: sdlaudiosink.c RCS file: /cvs/gstreamer/gst-plugins-bad/ext/sdl/sdlaudiosink.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- sdlaudiosink.c 9 Jan 2006 18:20:56 -0000 1.1 +++ sdlaudiosink.c 11 Jan 2006 14:41:24 -0000 1.2 @@ -33,9 +33,6 @@ "Output to a sound card via SDLAUDIO", "Edgard Lima <edg...@in...>"); -static void gst_sdlaudio_sink_base_init (gpointer g_class); -static void gst_sdlaudio_sink_class_init (GstSDLAudioSinkClass * klass); -static void gst_sdlaudio_sink_init (GstSDLAudioSink * sdlaudiosink); static void gst_sdlaudio_sink_dispose (GObject * object); static void gst_sdlaudio_sink_get_property (GObject * object, guint prop_id, @@ -134,36 +131,10 @@ "rate = (int) [ 1, MAX ], " "channels = (int) [ 1, 2 ]") ); -static GstElementClass *parent_class = NULL; - -GType -gst_sdlaudio_sink_get_type (void) -{ - static GType sdlaudiosink_type = 0; - if (!sdlaudiosink_type) { - static const GTypeInfo sdlaudiosink_info = { - sizeof (GstSDLAudioSinkClass), - gst_sdlaudio_sink_base_init, - NULL, - (GClassInitFunc) gst_sdlaudio_sink_class_init, - sizeof (GstSDLAudioSink), - 0, - (GInstanceInitFunc) gst_sdlaudio_sink_init, - }; - sdlaudiosink_type = - g_type_register_static (GST_TYPE_AUDIO_SINK, "GstSDLAudioSink", - &sdlaudiosink_info, 0); - } - return sdlaudiosink_type; -} +GST_BOILERPLATE (GstSDLAudioSink, gst_sdlaudio_sink, GstAudioSink, + GST_TYPE_AUDIO_SINK) -static void -gst_sdlaudio_sink_dispose (GObject * object) + static void gst_sdlaudio_sink_dispose (GObject * object) { GstSDLAudioSink *sdlaudiosink = GST_SDLAUDIOSINK (object); @@ -175,7 +146,6 @@ g_free (sdlaudiosink->buffer); } - G_OBJECT_CLASS (parent_class)->dispose (object); } static void @@ -203,8 +173,6 @@ gstbaseaudiosink_class = (GstBaseAudioSinkClass *) klass; gstaudiosink_class = (GstAudioSinkClass *) klass; - parent_class = g_type_class_ref (GST_TYPE_BASE_AUDIO_SINK); gobject_class->dispose = GST_DEBUG_FUNCPTR (gst_sdlaudio_sink_dispose); gstbasesink_class->get_caps = GST_DEBUG_FUNCPTR (gst_sdlaudio_sink_getcaps); @@ -224,7 +192,8 @@ -gst_sdlaudio_sink_init (GstSDLAudioSink * sdlaudiosink) +gst_sdlaudio_sink_init (GstSDLAudioSink * sdlaudiosink, + GstSDLAudioSinkClass * g_class) GST_DEBUG ("initializing sdlaudiosink"); @@ -235,7 +204,7 @@ SEMAPHORE_INIT (sdlaudiosink->semA, TRUE); - SEMAPHORE_INIT (sdlaudiosink->semB, TRUE); + SEMAPHORE_INIT (sdlaudiosink->semB, FALSE); |