Merge remote-tracking branch 'origin/master' into 0.11
authorTim-Philipp Müller <tim.muller@collabora.co.uk>
Thu, 8 Dec 2011 01:19:03 +0000 (01:19 +0000)
committerTim-Philipp Müller <tim.muller@collabora.co.uk>
Thu, 8 Dec 2011 01:19:03 +0000 (01:19 +0000)
Conflicts:
ext/alsa/gstalsadeviceprobe.c
ext/alsa/gstalsamixer.c
ext/pango/gsttextoverlay.c
ext/pango/gsttextoverlay.h
gst-libs/gst/audio/gstaudiobasesink.c
gst-libs/gst/audio/gstaudioringbuffer.c
gst-libs/gst/audio/gstaudiosrc.c
gst-libs/gst/video/Makefile.am
gst-libs/gst/video/video.c
gst/encoding/gststreamcombiner.c
gst/encoding/gststreamsplitter.c
gst/playback/gstplaybasebin.c
gst/playback/gststreamsynchronizer.c
gst/playback/gstsubtitleoverlay.c
gst/playback/gsturidecodebin.c
sys/xvimage/xvimagesink.c
tests/examples/Makefile.am
win32/common/libgstvideo.def

Video overlay composition disabled for now, needs
porting to buffer meta.

44 files changed:
1  2 
configure.ac
docs/libs/gst-plugins-base-libs-docs.sgml
docs/libs/gst-plugins-base-libs-sections.txt
ext/alsa/gstalsamixer.c
ext/alsa/gstalsamixer.h
ext/alsa/gstalsasink.c
ext/alsa/gstalsasrc.c
ext/ogg/gstoggdemux.c
gst-libs/gst/Makefile.am
gst-libs/gst/app/gstappsink.c
gst-libs/gst/app/gstappsrc.c
gst-libs/gst/audio/gstaudiobasesink.c
gst-libs/gst/audio/gstaudiodecoder.c
gst-libs/gst/audio/gstaudioencoder.c
gst-libs/gst/audio/gstaudioringbuffer.c
gst-libs/gst/audio/gstaudiosink.c
gst-libs/gst/audio/gstaudiosrc.c
gst-libs/gst/pbutils/gstdiscoverer.c
gst-libs/gst/rtsp/gstrtspconnection.c
gst-libs/gst/video/convertframe.c
gst-libs/gst/video/videooverlay.c
gst/playback/gstdecodebin.c
gst/playback/gstdecodebin2.c
gst/playback/gstplaybin2.c
gst/playback/gstplaysink.c
gst/playback/gstplaysinkconvertbin.c
gst/playback/gststreamsynchronizer.c
gst/playback/gstsubtitleoverlay.c
gst/playback/gsturidecodebin.c
gst/tcp/gstmultifdsink.c
gst/videorate/gstvideorate.c
sys/ximage/ximagesink.c
sys/xvimage/xvimagesink.c
tests/check/libs/video.c
tests/examples/Makefile.am
tests/examples/encoding/encoding.c
tests/examples/overlay/gtk-videooverlay.c
tests/examples/overlay/qt-videooverlay.cpp
tests/examples/seek/jsseek.c
tests/examples/seek/scrubby.c
tests/examples/seek/seek.c
tests/icles/test-colorkey.c
tests/icles/test-videooverlay.c
tools/gst-discoverer.c

diff --cc configure.ac
@@@ -564,11 -573,56 +564,11 @@@ AG_GST_CHECK_FEATURE(XSHM, [X Shared Me
        fi
      fi
    fi
- ], , [ 
-   AC_SUBST(HAVE_XSHM) 
-   AC_SUBST(XSHM_LIBS) 
+ ], , [
+   AC_SUBST(HAVE_XSHM)
+   AC_SUBST(XSHM_LIBS)
  ])
  
 -dnl v4l/v4l2 checks have been moved down because they require X
 -
 -dnl *** Video 4 Linux ***
 -dnl for information about the header/define, see sys/v4l/gstv4lelement.h
 -dnl renamed to GST_V4L in accordance with V4L2 below
 -translit(dnm, m, l) AM_CONDITIONAL(USE_GST_V4L, true)
 -AG_GST_CHECK_FEATURE(GST_V4L, [Video 4 Linux], video4linux, [
 -  AC_CHECK_DECL(VID_TYPE_MPEG_ENCODER, HAVE_GST_V4L="yes", HAVE_GST_V4L="no", [
 -#include <sys/types.h>
 -#define _LINUX_TIME_H
 -#define __user
 -#include <linux/videodev.h>
 -  ])
 -
 -  dnl we can build v4l without Xv, but then we won't have XOverlay support
 -  if test "x$HAVE_GST_V4L" = "xyes" -a "x$HAVE_XVIDEO" != "xyes"
 -  then
 -    AC_MSG_NOTICE([NO XVIDEO FOUND, VIDEO4LINUX WILL BE BUILT])
 -    AC_MSG_NOTICE([WITHOUT XOVERLAY SUPPORT])
 -  fi
 -])
 -
 -# Optional gudev for device probing
 -AC_ARG_WITH([gudev],
 -  AC_HELP_STRING([--with-gudev],
 -    [device detection with gudev]),
 -  [],
 -  [with_gudev=check])
 -if test x$HAVE_GST_V4L = xyes; then
 -  if test x$with_gudev != xno; then
 -      PKG_CHECK_MODULES(GUDEV, [ gudev-1.0 >= 143 ],
 -          [ have_gudev=yes
 -            AC_DEFINE(HAVE_GUDEV, 1,
 -               [Whether gudev is available for device detection])
 -            AC_DEFINE([G_UDEV_API_IS_SUBJECT_TO_CHANGE], 1, [I know the API is subject to change.])
 -          ], [
 -          have_gudev=no
 -          ])
 -  else
 -    have_gudev=no
 -  fi
 -fi
 -AC_SUBST(GUDEV_CFLAGS)
 -AC_SUBST(GUDEV_LIBS)
 -
  dnl *** ext plug-ins ***
  dnl keep this list sorted alphabetically !
  
@@@ -491,14 -496,15 +496,15 @@@ gst_alsa_mixer_new (const char *device
    if (pipe (ret->pfd) == -1)
      goto error;
  
-   ret->rec_mutex = g_new (GStaticRecMutex, 1);
-   g_static_rec_mutex_init (ret->rec_mutex);
-   ret->task_mutex = g_new (GStaticRecMutex, 1);
-   g_static_rec_mutex_init (ret->task_mutex);
+ #if !GLIB_CHECK_VERSION (2, 31, 0)
+   g_static_rec_mutex_init (&ret->rec_mutex);
+ #else
+   g_rec_mutex_init (&ret->rec_mutex);
+ #endif
+   g_static_rec_mutex_init (&ret->task_mutex);
  
 -  ret->task = gst_task_create (task_monitor_alsa, ret);
 +  ret->task = gst_task_new (task_monitor_alsa, ret);
-   gst_task_set_lock (ret->task, ret->task_mutex);
+   gst_task_set_lock (ret->task, &ret->task_mutex);
  
    ret->device = g_strdup (device);
    ret->dir = dir;
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -14,10 -18,12 +14,10 @@@ SUBDIRS = 
        riff \
        app
  
- noinst_HEADERS = gettext.h gst-i18n-plugin.h
+ noinst_HEADERS = gettext.h gst-i18n-plugin.h glib-compat-private.h
  
  # dependencies:
 -audio: interfaces pbutils
 -
 -cdda: tag
 +audio: interfaces tag
  
  riff: tag audio
  
  
  #include <string.h>
  
 +#include "gstapp-marshal.h"
  #include "gstappsink.h"
  
+ #include "gst/glib-compat-private.h"
  struct _GstAppSinkPrivate
  {
    GstCaps *caps;
Simple merge
  
  #include <string.h>
  
+ /* FIXME 0.11: suppress warnings for deprecated API such as GStaticRecMutex
+  * with newer GLib versions (>= 2.31.0) */
+ #define GLIB_DISABLE_DEPRECATION_WARNINGS
 +#include "gstaudiobasesink.h"
  
 -#include "gstbaseaudiosink.h"
 +GST_DEBUG_CATEGORY_STATIC (gst_audio_base_sink_debug);
 +#define GST_CAT_DEFAULT gst_audio_base_sink_debug
  
 -GST_DEBUG_CATEGORY_STATIC (gst_base_audio_sink_debug);
 -#define GST_CAT_DEFAULT gst_base_audio_sink_debug
 +#define GST_AUDIO_BASE_SINK_GET_PRIVATE(obj)  \
 +   (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GST_TYPE_AUDIO_BASE_SINK, GstAudioBaseSinkPrivate))
  
 -#define GST_BASE_AUDIO_SINK_GET_PRIVATE(obj)  \
 -   (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GST_TYPE_BASE_AUDIO_SINK, GstBaseAudioSinkPrivate))
 -
 -struct _GstBaseAudioSinkPrivate
 +struct _GstAudioBaseSinkPrivate
  {
    /* upstream latency */
    GstClockTime us_latency;
Simple merge
Simple merge
  
  #include <string.h>
  
 -#include "gstringbuffer.h"
 +#include "gstaudioringbuffer.h"
  
 -GST_DEBUG_CATEGORY_STATIC (gst_ring_buffer_debug);
 -#define GST_CAT_DEFAULT gst_ring_buffer_debug
+ #include "gst/glib-compat-private.h"
 +GST_DEBUG_CATEGORY_STATIC (gst_audio_ring_buffer_debug);
 +#define GST_CAT_DEFAULT gst_audio_ring_buffer_debug
  
 -static void gst_ring_buffer_dispose (GObject * object);
 -static void gst_ring_buffer_finalize (GObject * object);
 +static void gst_audio_ring_buffer_dispose (GObject * object);
 +static void gst_audio_ring_buffer_finalize (GObject * object);
  
 -static gboolean gst_ring_buffer_pause_unlocked (GstRingBuffer * buf);
 -static void default_clear_all (GstRingBuffer * buf);
 -static guint default_commit (GstRingBuffer * buf, guint64 * sample,
 +static gboolean gst_audio_ring_buffer_pause_unlocked (GstAudioRingBuffer * buf);
 +static void default_clear_all (GstAudioRingBuffer * buf);
 +static guint default_commit (GstAudioRingBuffer * buf, guint64 * sample,
      guchar * data, gint in_samples, gint out_samples, gint * accum);
  
  /* ringbuffer abstract base class */
Simple merge
@@@ -389,16 -378,23 +391,23 @@@ gst_audio_src_ring_buffer_acquire (GstA
    if (!result)
      goto could_not_open;
  
 -  buf->data = gst_buffer_new_and_alloc (spec->segtotal * spec->segsize);
 -  memset (GST_BUFFER_DATA (buf->data), 0, GST_BUFFER_SIZE (buf->data));
 +  buf->size = spec->segtotal * spec->segsize;
 +  buf->memory = g_malloc0 (buf->size);
  
 -  abuf = GST_AUDIORING_BUFFER (buf);
 +  abuf = GST_AUDIO_SRC_RING_BUFFER (buf);
    abuf->running = TRUE;
  
+   /* FIXME: handle thread creation failure */
+ #if !GLIB_CHECK_VERSION (2, 31, 0)
    src->thread =
        g_thread_create ((GThreadFunc) audioringbuffer_thread_func, buf, TRUE,
        NULL);
-   GST_AUDIO_SRC_RING_BUFFER_WAIT (buf);
+ #else
+   src->thread = g_thread_try_new ("audiosrc-ringbuffer",
+       (GThreadFunc) audioringbuffer_thread_func, buf, NULL);
+ #endif
 -  GST_AUDIORING_BUFFER_WAIT (buf);
++  GST_AUDIO_RING_BUFFER_WAIT (buf);
  
    return result;
  
Simple merge
  #endif
  
  #include "gstrtspconnection.h"
 -#include "gstrtspbase64.h"
  
+ #include "gst/glib-compat-private.h"
  union gst_sockaddr
  {
    struct sockaddr sa;
Simple merge
   * </para>
   * </refsect2>
   * <refsect2>
 - * <title>GstXOverlay and Gtk+</title>
 + * <title>GstVideoOverlay and Gtk+</title>
   * <para>
   * |[
+  * #include &lt;gst/interfaces/xoverlay.h&gt;
   * #include &lt;gtk/gtk.h&gt;
   * #ifdef GDK_WINDOWING_X11
   * #include &lt;gdk/gdkx.h&gt;  // for GDK_WINDOW_XID
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -236,12 -193,40 +238,28 @@@ _is_raw_video (GstStructure * s
  }
  
  static gboolean
- _is_raw_video_pad (GstPad * pad)
+ _is_video_pad (GstPad * pad, gboolean * hw_accelerated)
  {
 -  GstPad *peer = gst_pad_get_peer (pad);
 -  GstCaps *caps;
 +  GstCaps *caps = gst_pad_get_current_caps (pad);
-   gboolean raw;
+   gboolean ret;
+   const gchar *name;
 -  if (peer) {
 -    caps = gst_pad_get_negotiated_caps (peer);
 -    if (!caps) {
 -      caps = gst_pad_get_caps_reffed (peer);
 -    }
 -    gst_object_unref (peer);
 -  } else {
 -    caps = gst_pad_get_caps_reffed (pad);
 -  }
 -
 -
+   name = gst_structure_get_name (gst_caps_get_structure (caps, 0));
+   if (g_str_has_prefix (name, "video/x-raw-")) {
+     ret = TRUE;
+     if (hw_accelerated)
+       *hw_accelerated = FALSE;
  
-   raw = _is_raw_video (gst_caps_get_structure (caps, 0));
+   } else if (g_str_has_prefix (name, "video/x-surface")) {
+     ret = TRUE;
+     if (hw_accelerated)
+       *hw_accelerated = TRUE;
+   } else {
+     ret = FALSE;
+     if (hw_accelerated)
+       *hw_accelerated = FALSE;
+   }
  
    gst_caps_unref (caps);
  
@@@ -1039,18 -1072,32 +1079,26 @@@ _pad_blocked_cb (GstPad * pad, GstPadPr
        /* Send segments to the parser/overlay if necessary. These are not sent
         * outside this element because of the proxy pad event function */
        if (self->video_segment.format != GST_FORMAT_UNDEFINED) {
 -        GstEvent *event1, *event2;
 +        GstEvent *event1;
  
-         sink = gst_element_get_static_pad (self->pre_colorspace, "sink");
-         if (G_UNLIKELY (!sink)) {
-           GST_WARNING_OBJECT (self, "Can't get sink pad from " COLORSPACE);
-           continue;
+         if (is_video) {
+           sink = gst_element_get_static_pad (self->pre_colorspace, "sink");
+           if (G_UNLIKELY (!sink)) {
+             GST_WARNING_OBJECT (self, "Can't get sink pad from " COLORSPACE);
+             continue;
+           }
+         } else {
+           sink = gst_element_get_static_pad (self->overlay, "video_sink");
+           if (G_UNLIKELY (!sink)) {
+             GST_WARNING_OBJECT (self, "Can't get sink pad from textoverlay");
+             continue;
+           }
          }
  
 -        _generate_update_newsegment_event (&self->video_segment, &event1,
 -            &event2);
 -        GST_DEBUG_OBJECT (self,
 -            "Pushing video accumulate newsegment event: %" GST_PTR_FORMAT,
 -            event1->structure);
 +        _generate_update_segment_event (&self->video_segment, &event1);
          GST_DEBUG_OBJECT (self,
 -            "Pushing video update newsegment event: %" GST_PTR_FORMAT,
 -            event2->structure);
 +            "Pushing video segment event: %" GST_PTR_FORMAT, event1);
          gst_pad_send_event (sink, event1);
 -        gst_pad_send_event (sink, event2);
  
          gst_object_unref (sink);
        }
  #include "gstplay-marshal.h"
  #include "gstplay-enum.h"
  #include "gstrawcaps.h"
 +#include "gstplayback.h"
  
+ #include "gst/glib-compat-private.h"
  #define GST_TYPE_URI_DECODE_BIN \
    (gst_uri_decode_bin_get_type())
  #define GST_URI_DECODE_BIN(obj) \
Simple merge
@@@ -166,8 -192,11 +167,9 @@@ gst_video_rate_class_init (GstVideoRate
    base_class->transform_caps =
        GST_DEBUG_FUNCPTR (gst_video_rate_transform_caps);
    base_class->transform_ip = GST_DEBUG_FUNCPTR (gst_video_rate_transform_ip);
 -  base_class->prepare_output_buffer =
 -      GST_DEBUG_FUNCPTR (gst_video_rate_prepare_output_buffer);
 -  base_class->event = GST_DEBUG_FUNCPTR (gst_video_rate_event);
 +  base_class->sink_event = GST_DEBUG_FUNCPTR (gst_video_rate_sink_event);
    base_class->start = GST_DEBUG_FUNCPTR (gst_video_rate_start);
+   base_class->stop = GST_DEBUG_FUNCPTR (gst_video_rate_stop);
    base_class->fixate_caps = GST_DEBUG_FUNCPTR (gst_video_rate_fixate_caps);
    base_class->query = GST_DEBUG_FUNCPTR (gst_video_rate_query);
  
  /* Debugging category */
  #include <gst/gstinfo.h>
  
+ #include "gst/glib-compat-private.h"
  GST_DEBUG_CATEGORY_EXTERN (gst_debug_ximagesink);
 +GST_DEBUG_CATEGORY_EXTERN (GST_CAT_PERFORMANCE);
  #define GST_CAT_DEFAULT gst_debug_ximagesink
  
  typedef struct
  /* Debugging category */
  #include <gst/gstinfo.h>
  
 -GST_DEBUG_CATEGORY_STATIC (gst_debug_xvimagesink);
+ #include "gst/glib-compat-private.h"
 +GST_DEBUG_CATEGORY_EXTERN (gst_debug_xvimagesink);
 +GST_DEBUG_CATEGORY_EXTERN (GST_CAT_PERFORMANCE);
  #define GST_CAT_DEFAULT gst_debug_xvimagesink
 -GST_DEBUG_CATEGORY_STATIC (GST_CAT_PERFORMANCE);
  
  typedef struct
  {
Simple merge
@@@ -8,9 -8,9 +8,8 @@@ if USE_GI
  GIO_SUBDIRS = gio
  endif
  
- SUBDIRS = app audio dynamic $(FT2_SUBDIRS) $(GIO_SUBDIRS) overlay playrec encoding
 -SUBDIRS = app audio dynamic fft $(FT2_SUBDIRS) $(GIO_SUBDIRS) overlay playrec v4l encoding
--
- DIST_SUBDIRS = app audio dynamic gio overlay seek snapshot playrec encoding
 -DIST_SUBDIRS = app audio dynamic fft gio overlay seek snapshot playrec v4l encoding
++SUBDIRS = app audio dynamic fft $(FT2_SUBDIRS) $(GIO_SUBDIRS) overlay playrec encoding
++DIST_SUBDIRS = app audio dynamic fft gio overlay seek snapshot playrec encoding
  
  include $(top_srcdir)/common/parallel-subdirs.mak
  
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge