mozilla-gstreamer-1.patch
author Wolfgang Rosenauer <wr@rosenauer.org>
Mon, 08 Apr 2013 00:00:01 +0200
changeset 641 8d4c4f06e0e4
parent 637 73640b76d6c3
permissions -rw-r--r--
minor improvements (still has a playback issue)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
625
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     1
# HG changeset patch
641
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
     2
# Parent 43f163cb7a9666d92bc71edf077b0e1448312367
625
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     3
# User Mike Gorse <mgorse@suse.com>
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     4
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     5
Bug 806917 - support GStreamer 1.0
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     6
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     7
diff --git a/configure.in b/configure.in
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     8
--- a/configure.in
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     9
+++ b/configure.in
637
73640b76d6c3 first building version of FF21
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 627
diff changeset
    10
@@ -5706,26 +5706,34 @@ fi
625
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    11
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    12
 AC_SUBST(MOZ_PULSEAUDIO)
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    13
 AC_SUBST(MOZ_PULSEAUDIO_CFLAGS)
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    14
 AC_SUBST(MOZ_PULSEAUDIO_LIBS)
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    15
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    16
 dnl ========================================================
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    17
 dnl = Enable GStreamer
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    18
 dnl ========================================================
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    19
-MOZ_ARG_ENABLE_BOOL(gstreamer,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    20
-[  --enable-gstreamer           Enable GStreamer support],
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    21
-MOZ_GSTREAMER=1,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    22
-MOZ_GSTREAMER=)
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    23
+MOZ_ARG_ENABLE_STRING(gstreamer,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    24
+[  --enable-gstreamer[=1.0]           Enable GStreamer support],
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    25
+[ MOZ_GSTREAMER=1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    26
+  # API version, eg 0.10, 1.0 etc
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    27
+  if test -n "$enableval" ]; then
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    28
+    GST_API_VERSION=$enableval
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    29
+  else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    30
+    GST_API_VERSION=0.10
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    31
+  fi]
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    32
+[ MOZ_GSTREAMER=])
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    33
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    34
 if test "$MOZ_GSTREAMER"; then
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    35
-    # API version, eg 0.10, 1.0 etc
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    36
-    GST_API_VERSION=0.10
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    37
     # core/base release number
637
73640b76d6c3 first building version of FF21
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 627
diff changeset
    38
-    GST_VERSION=0.10.25
625
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    39
+    if test "$GST_API_VERSION" = "1.0"; then
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    40
+      GST_VERSION=1.0
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    41
+    else
637
73640b76d6c3 first building version of FF21
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 627
diff changeset
    42
+      GST_VERSION=0.10.25
625
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    43
+    fi
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    44
     PKG_CHECK_MODULES(GSTREAMER,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    45
                       gstreamer-$GST_API_VERSION >= $GST_VERSION
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    46
                       gstreamer-app-$GST_API_VERSION
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    47
                       gstreamer-plugins-base-$GST_API_VERSION)
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    48
     if test -n "$GSTREAMER_LIBS"; then
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    49
        _SAVE_LDFLAGS=$LDFLAGS
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    50
        LDFLAGS="$LDFLAGS $GSTREAMER_LIBS -lgstvideo-$GST_API_VERSION"
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    51
        AC_TRY_LINK(,[return 0;],_HAVE_LIBGSTVIDEO=1,_HAVE_LIBGSTVIDEO=)
627
cc7671532e60 complete GStreamer 1.0 patch to cover our earlier GStreamer patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 625
diff changeset
    52
diff --git a/content/media/gstreamer/GStreamerFormatHelper.cpp b/content/media/gstreamer/GStreamerFormatHelper.cpp
cc7671532e60 complete GStreamer 1.0 patch to cover our earlier GStreamer patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 625
diff changeset
    53
--- a/content/media/gstreamer/GStreamerFormatHelper.cpp
cc7671532e60 complete GStreamer 1.0 patch to cover our earlier GStreamer patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 625
diff changeset
    54
+++ b/content/media/gstreamer/GStreamerFormatHelper.cpp
cc7671532e60 complete GStreamer 1.0 patch to cover our earlier GStreamer patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 625
diff changeset
    55
@@ -141,17 +141,21 @@ bool GStreamerFormatHelper::HaveElements
cc7671532e60 complete GStreamer 1.0 patch to cover our earlier GStreamer patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 625
diff changeset
    56
     }
cc7671532e60 complete GStreamer 1.0 patch to cover our earlier GStreamer patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 625
diff changeset
    57
     g_list_free(list);
cc7671532e60 complete GStreamer 1.0 patch to cover our earlier GStreamer patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 625
diff changeset
    58
   }
cc7671532e60 complete GStreamer 1.0 patch to cover our earlier GStreamer patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 625
diff changeset
    59
 
cc7671532e60 complete GStreamer 1.0 patch to cover our earlier GStreamer patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 625
diff changeset
    60
   return true;
cc7671532e60 complete GStreamer 1.0 patch to cover our earlier GStreamer patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 625
diff changeset
    61
 }
cc7671532e60 complete GStreamer 1.0 patch to cover our earlier GStreamer patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 625
diff changeset
    62
 
cc7671532e60 complete GStreamer 1.0 patch to cover our earlier GStreamer patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 625
diff changeset
    63
 GList* GStreamerFormatHelper::GetFactories() {
cc7671532e60 complete GStreamer 1.0 patch to cover our earlier GStreamer patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 625
diff changeset
    64
+#if GST_VERSION_MAJOR == 1
cc7671532e60 complete GStreamer 1.0 patch to cover our earlier GStreamer patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 625
diff changeset
    65
+  uint32_t cookie = gst_registry_get_feature_list_cookie(gst_registry_get());
cc7671532e60 complete GStreamer 1.0 patch to cover our earlier GStreamer patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 625
diff changeset
    66
+#else
cc7671532e60 complete GStreamer 1.0 patch to cover our earlier GStreamer patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 625
diff changeset
    67
   uint32_t cookie = gst_default_registry_get_feature_list_cookie ();
cc7671532e60 complete GStreamer 1.0 patch to cover our earlier GStreamer patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 625
diff changeset
    68
+#endif
cc7671532e60 complete GStreamer 1.0 patch to cover our earlier GStreamer patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 625
diff changeset
    69
   if (cookie != mCookie) {
cc7671532e60 complete GStreamer 1.0 patch to cover our earlier GStreamer patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 625
diff changeset
    70
     g_list_free(mFactories);
cc7671532e60 complete GStreamer 1.0 patch to cover our earlier GStreamer patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 625
diff changeset
    71
     mFactories = gst_element_factory_list_get_elements
cc7671532e60 complete GStreamer 1.0 patch to cover our earlier GStreamer patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 625
diff changeset
    72
         (GST_ELEMENT_FACTORY_TYPE_DEMUXER | GST_ELEMENT_FACTORY_TYPE_DECODER,
cc7671532e60 complete GStreamer 1.0 patch to cover our earlier GStreamer patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 625
diff changeset
    73
          GST_RANK_MARGINAL);
cc7671532e60 complete GStreamer 1.0 patch to cover our earlier GStreamer patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 625
diff changeset
    74
     mCookie = cookie;
cc7671532e60 complete GStreamer 1.0 patch to cover our earlier GStreamer patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 625
diff changeset
    75
   }
cc7671532e60 complete GStreamer 1.0 patch to cover our earlier GStreamer patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 625
diff changeset
    76
 
625
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    77
diff --git a/content/media/gstreamer/GStreamerReader.cpp b/content/media/gstreamer/GStreamerReader.cpp
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    78
--- a/content/media/gstreamer/GStreamerReader.cpp
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    79
+++ b/content/media/gstreamer/GStreamerReader.cpp
641
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
    80
@@ -22,16 +22,22 @@ using namespace layers;
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
    81
 
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
    82
 #ifdef PR_LOGGING
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
    83
 extern PRLogModuleInfo* gMediaDecoderLog;
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
    84
 #define LOG(type, msg) PR_LOG(gMediaDecoderLog, type, msg)
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
    85
 #else
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
    86
 #define LOG(type, msg)
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
    87
 #endif
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
    88
 
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
    89
+#if GST_VERSION_MAJOR == 1
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
    90
+#define PLAYBIN "playbin"
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
    91
+#else
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
    92
+#define PLAYBIN "playbin2"
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
    93
+#endif
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
    94
+
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
    95
 static const int MAX_CHANNELS = 4;
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
    96
 // Let the demuxer work in pull mode for short files
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
    97
 static const int SHORT_FILE_SIZE = 1024 * 1024;
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
    98
 // The default resource->Read() size when working in push mode
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
    99
 static const int DEFAULT_SOURCE_READ_SIZE = 50 * 1024;
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   100
 
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   101
 typedef enum {
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   102
   GST_PLAY_FLAG_VIDEO         = (1 << 0),
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   103
@@ -69,18 +75,22 @@ GStreamerReader::GStreamerReader(Abstrac
625
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   104
   MOZ_COUNT_CTOR(GStreamerReader);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   105
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   106
   mSrcCallbacks.need_data = GStreamerReader::NeedDataCb;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   107
   mSrcCallbacks.enough_data = GStreamerReader::EnoughDataCb;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   108
   mSrcCallbacks.seek_data = GStreamerReader::SeekDataCb;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   109
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   110
   mSinkCallbacks.eos = GStreamerReader::EosCb;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   111
   mSinkCallbacks.new_preroll = GStreamerReader::NewPrerollCb;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   112
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   113
+  mSinkCallbacks.new_sample = GStreamerReader::NewBufferCb;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   114
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   115
   mSinkCallbacks.new_buffer = GStreamerReader::NewBufferCb;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   116
   mSinkCallbacks.new_buffer_list = NULL;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   117
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   118
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   119
   gst_segment_init(&mVideoSegment, GST_FORMAT_UNDEFINED);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   120
   gst_segment_init(&mAudioSegment, GST_FORMAT_UNDEFINED);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   121
 }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   122
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   123
 GStreamerReader::~GStreamerReader()
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   124
 {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   125
   MOZ_COUNT_DTOR(GStreamerReader);
641
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   126
@@ -106,60 +116,85 @@ nsresult GStreamerReader::Init(MediaDeco
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   127
 {
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   128
   GError *error = NULL;
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   129
   if (!gst_init_check(0, 0, &error)) {
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   130
     LOG(PR_LOG_ERROR, ("gst initialization failed: %s", error->message));
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   131
     g_error_free(error);
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   132
     return NS_ERROR_FAILURE;
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   133
   }
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   134
 
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   135
-  mPlayBin = gst_element_factory_make("playbin2", NULL);
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   136
+  mPlayBin = gst_element_factory_make(PLAYBIN, NULL);
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   137
   if (mPlayBin == NULL) {
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   138
-    LOG(PR_LOG_ERROR, ("couldn't create playbin2"));
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   139
+    LOG(PR_LOG_ERROR, ("couldn't create playbin"));
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   140
     return NS_ERROR_FAILURE;
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   141
   }
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   142
   g_object_set(mPlayBin, "buffer-size", 0, NULL);
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   143
   mBus = gst_pipeline_get_bus(GST_PIPELINE(mPlayBin));
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   144
 
625
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   145
   mVideoSink = gst_parse_bin_from_description("capsfilter name=filter ! "
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   146
       "appsink name=videosink sync=true max-buffers=1 "
641
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   147
+#if GST_VERSION_MAJOR == 1
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   148
+      "caps=video/x-raw,format=(fourcc)I420"
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   149
+#else
625
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   150
       "caps=video/x-raw-yuv,format=(fourcc)I420"
641
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   151
+#endif
625
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   152
       , TRUE, NULL);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   153
   mVideoAppSink = GST_APP_SINK(gst_bin_get_by_name(GST_BIN(mVideoSink),
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   154
         "videosink"));
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   155
   gst_app_sink_set_callbacks(mVideoAppSink, &mSinkCallbacks,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   156
       (gpointer) this, NULL);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   157
-  GstPad *sinkpad = gst_element_get_pad(GST_ELEMENT(mVideoAppSink), "sink");
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   158
+  GstPad *sinkpad = gst_element_get_static_pad(GST_ELEMENT(mVideoAppSink), "sink");
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   159
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   160
+  // TODO: Figure out whether we need UPSTREAM or DOWNSTREAM, or both
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   161
+  gst_pad_add_probe(sinkpad,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   162
+      (GstPadProbeType) (GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM | GST_PAD_PROBE_TYPE_EVENT_UPSTREAM),
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   163
+      &GStreamerReader::EventProbeCb, this, NULL);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   164
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   165
   gst_pad_add_event_probe(sinkpad,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   166
       G_CALLBACK(&GStreamerReader::EventProbeCb), this);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   167
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   168
   gst_object_unref(sinkpad);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   169
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   170
   mAudioSink = gst_parse_bin_from_description("capsfilter name=filter ! "
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   171
 #ifdef MOZ_SAMPLE_TYPE_FLOAT32
641
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   172
+#if GST_VERSION_MAJOR == 1
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   173
+        "appsink name=audiosink sync=true caps=audio/x-raw,"
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   174
+#else
625
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   175
         "appsink name=audiosink sync=true caps=audio/x-raw-float,"
641
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   176
+#endif
625
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   177
 #ifdef IS_LITTLE_ENDIAN
637
73640b76d6c3 first building version of FF21
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 627
diff changeset
   178
         "channels={1,2},width=32,endianness=1234", TRUE, NULL);
625
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   179
 #else
641
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   180
         "channels={1,2},width=32,endianness=4321", TRUE, NULL);
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   181
 #endif
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   182
 #else
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   183
+#if GST_VERSION_MAJOR == 1
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   184
+        "appsink name=audiosink sync=true caps=audio/x-raw,"
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   185
+#else
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   186
         "appsink name=audiosink sync=true caps=audio/x-raw-int,"
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   187
+#endif
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   188
 #ifdef IS_LITTLE_ENDIAN
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   189
         "channels={1,2},width=16,endianness=1234", TRUE, NULL);
625
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   190
 #else
637
73640b76d6c3 first building version of FF21
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 627
diff changeset
   191
         "channels={1,2},width=16,endianness=4321", TRUE, NULL);
625
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   192
 #endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   193
 #endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   194
   mAudioAppSink = GST_APP_SINK(gst_bin_get_by_name(GST_BIN(mAudioSink),
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   195
         "audiosink"));
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   196
   gst_app_sink_set_callbacks(mAudioAppSink, &mSinkCallbacks,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   197
       (gpointer) this, NULL);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   198
-  sinkpad = gst_element_get_pad(GST_ELEMENT(mAudioAppSink), "sink");
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   199
+  sinkpad = gst_element_get_static_pad(GST_ELEMENT(mAudioAppSink), "sink");
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   200
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   201
+  gst_pad_add_probe(sinkpad,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   202
+      (GstPadProbeType) (GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM | GST_PAD_PROBE_TYPE_EVENT_UPSTREAM),
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   203
+      &GStreamerReader::EventProbeCb, this, NULL);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   204
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   205
   gst_pad_add_event_probe(sinkpad,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   206
       G_CALLBACK(&GStreamerReader::EventProbeCb), this);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   207
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   208
   gst_object_unref(sinkpad);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   209
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   210
   g_object_set(mPlayBin, "uri", "appsrc://",
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   211
       "video-sink", mVideoSink,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   212
       "audio-sink", mAudioSink,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   213
       NULL);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   214
 
637
73640b76d6c3 first building version of FF21
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 627
diff changeset
   215
   g_signal_connect(G_OBJECT(mPlayBin), "notify::source",
641
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   216
@@ -236,17 +271,17 @@ nsresult GStreamerReader::ReadMetadata(V
625
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   217
       filter = gst_bin_get_by_name(GST_BIN(mAudioSink), "filter");
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   218
     else if (!(current_flags & GST_PLAY_FLAG_VIDEO))
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   219
       filter = gst_bin_get_by_name(GST_BIN(mVideoSink), "filter");
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   220
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   221
     if (filter) {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   222
       /* Little trick: set the target caps to "skip" so that playbin2 fails to
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   223
        * find a decoder for the stream we want to skip.
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   224
        */
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   225
-      GstCaps *filterCaps = gst_caps_new_simple ("skip", NULL);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   226
+      GstCaps *filterCaps = gst_caps_new_simple ("skip", NULL, NULL);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   227
       g_object_set(filter, "caps", filterCaps, NULL);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   228
       gst_caps_unref(filterCaps);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   229
       gst_object_unref(filter);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   230
     }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   231
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   232
     /* start the pipeline */
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   233
     gst_element_set_state(mPlayBin, GST_STATE_PAUSED);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   234
 
641
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   235
@@ -289,19 +324,24 @@ nsresult GStreamerReader::ReadMetadata(V
625
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   236
       gst_element_set_state(mPlayBin, GST_STATE_NULL);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   237
       gst_message_unref(message);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   238
       return NS_ERROR_FAILURE;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   239
     }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   240
   }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   241
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   242
   /* report the duration */
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   243
   gint64 duration;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   244
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   245
+  if (gst_element_query_duration(GST_ELEMENT(mPlayBin),
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   246
+      GST_FORMAT_TIME, &duration)) {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   247
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   248
   GstFormat format = GST_FORMAT_TIME;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   249
   if (gst_element_query_duration(GST_ELEMENT(mPlayBin),
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   250
       &format, &duration) && format == GST_FORMAT_TIME) {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   251
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   252
     ReentrantMonitorAutoEnter mon(mDecoder->GetReentrantMonitor());
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   253
     LOG(PR_LOG_DEBUG, ("returning duration %" GST_TIME_FORMAT,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   254
           GST_TIME_ARGS (duration)));
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   255
     duration = GST_TIME_AS_USECONDS (duration);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   256
     mDecoder->SetMediaDuration(duration);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   257
   }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   258
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   259
   int n_video = 0, n_audio = 0;
641
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   260
@@ -370,59 +410,87 @@ bool GStreamerReader::DecodeAudioData()
625
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   261
 {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   262
   NS_ASSERTION(mDecoder->OnDecodeThread(), "Should be on decode thread.");
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   263
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   264
   if (!WaitForDecodedData(&mAudioSinkBufferCount)) {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   265
     mAudioQueue.Finish();
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   266
     return false;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   267
   }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   268
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   269
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   270
+    GstSample *sample = gst_app_sink_pull_sample(mAudioAppSink);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   271
+    GstBuffer *buffer = gst_sample_get_buffer(sample);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   272
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   273
   GstBuffer *buffer = gst_app_sink_pull_buffer(mAudioAppSink);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   274
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   275
   int64_t timestamp = GST_BUFFER_TIMESTAMP(buffer);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   276
   timestamp = gst_segment_to_stream_time(&mAudioSegment,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   277
       GST_FORMAT_TIME, timestamp);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   278
   timestamp = GST_TIME_AS_USECONDS(timestamp);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   279
   int64_t duration = 0;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   280
   if (GST_CLOCK_TIME_IS_VALID(GST_BUFFER_DURATION(buffer)))
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   281
     duration = GST_TIME_AS_USECONDS(GST_BUFFER_DURATION(buffer));
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   282
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   283
   int64_t offset = GST_BUFFER_OFFSET(buffer);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   284
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   285
+  GstMapInfo info;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   286
+  gst_buffer_map(buffer, &info, GST_MAP_READ);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   287
+  unsigned int size = info.size;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   288
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   289
   unsigned int size = GST_BUFFER_SIZE(buffer);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   290
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   291
   int32_t frames = (size / sizeof(AudioDataValue)) / mInfo.mAudioChannels;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   292
   ssize_t outSize = static_cast<size_t>(size / sizeof(AudioDataValue));
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   293
   nsAutoArrayPtr<AudioDataValue> data(new AudioDataValue[outSize]);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   294
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   295
+  memcpy(data, info.data, info.size);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   296
+  gst_buffer_unmap(buffer, &info);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   297
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   298
   memcpy(data, GST_BUFFER_DATA(buffer), GST_BUFFER_SIZE(buffer));
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   299
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   300
   AudioData *audio = new AudioData(offset, timestamp, duration,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   301
       frames, data.forget(), mInfo.mAudioChannels);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   302
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   303
   mAudioQueue.Push(audio);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   304
   gst_buffer_unref(buffer);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   305
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   306
   return true;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   307
 }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   308
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   309
 bool GStreamerReader::DecodeVideoFrame(bool &aKeyFrameSkip,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   310
                                          int64_t aTimeThreshold)
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   311
 {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   312
   NS_ASSERTION(mDecoder->OnDecodeThread(), "Should be on decode thread.");
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   313
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   314
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   315
+    GstSample *sample = NULL;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   316
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   317
   GstBuffer *buffer = NULL;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   318
   int64_t timestamp, nextTimestamp;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   319
   while (true)
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   320
   {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   321
     if (!WaitForDecodedData(&mVideoSinkBufferCount)) {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   322
       mVideoQueue.Finish();
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   323
       break;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   324
     }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   325
     mDecoder->NotifyDecodedFrames(0, 1);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   326
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   327
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   328
+    sample = gst_app_sink_pull_sample(mVideoAppSink);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   329
+    buffer = gst_sample_get_buffer(sample);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   330
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   331
     buffer = gst_app_sink_pull_buffer(mVideoAppSink);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   332
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   333
     bool isKeyframe = !GST_BUFFER_FLAG_IS_SET(buffer, GST_BUFFER_FLAG_DISCONT);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   334
     if ((aKeyFrameSkip && !isKeyframe)) {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   335
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   336
+      gst_sample_unref(sample);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   337
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   338
       gst_buffer_unref(buffer);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   339
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   340
       buffer = NULL;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   341
       continue;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   342
     }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   343
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   344
     timestamp = GST_BUFFER_TIMESTAMP(buffer);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   345
     {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   346
       ReentrantMonitorAutoEnter mon(mGstThreadsMonitor);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   347
       timestamp = gst_segment_to_stream_time(&mVideoSegment,
641
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   348
@@ -436,62 +504,90 @@ bool GStreamerReader::DecodeVideoFrame(b
625
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   349
     else if (fpsNum && fpsDen)
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   350
       /* add 1-frame duration */
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   351
       nextTimestamp += gst_util_uint64_scale(GST_USECOND, fpsNum, fpsDen);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   352
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   353
     if (timestamp < aTimeThreshold) {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   354
       LOG(PR_LOG_DEBUG, ("skipping frame %" GST_TIME_FORMAT
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   355
             " threshold %" GST_TIME_FORMAT,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   356
             GST_TIME_ARGS(timestamp), GST_TIME_ARGS(aTimeThreshold)));
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   357
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   358
+      gst_sample_unref(sample);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   359
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   360
       gst_buffer_unref(buffer);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   361
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   362
       buffer = NULL;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   363
       continue;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   364
     }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   365
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   366
     break;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   367
   }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   368
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   369
   if (buffer == NULL)
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   370
     /* no more frames */
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   371
     return false;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   372
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   373
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   374
+  GstMapInfo info;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   375
+  gst_buffer_map(buffer, &info, GST_MAP_READ);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   376
+  guint8 *data = info.data;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   377
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   378
   guint8 *data = GST_BUFFER_DATA(buffer);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   379
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   380
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   381
   int width = mPicture.width;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   382
   int height = mPicture.height;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   383
   GstVideoFormat format = mFormat;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   384
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   385
   VideoData::YCbCrBuffer b;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   386
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   387
+  GstVideoInfo *video_info;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   388
+  gst_video_info_set_format(video_info, format, width, height);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   389
+  for(int i = 0; i < 3; i++) {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   390
+    b.mPlanes[i].mData = data + GST_VIDEO_INFO_COMP_OFFSET(video_info, i);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   391
+    b.mPlanes[i].mStride = GST_VIDEO_INFO_COMP_STRIDE(video_info, i);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   392
+    b.mPlanes[i].mHeight = GST_VIDEO_INFO_COMP_HEIGHT(video_info, i);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   393
+    b.mPlanes[i].mWidth = GST_VIDEO_INFO_COMP_WIDTH(video_info, i);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   394
+    b.mPlanes[i].mOffset = 0;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   395
+    b.mPlanes[i].mSkip = 0;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   396
+  }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   397
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   398
   for(int i = 0; i < 3; i++) {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   399
     b.mPlanes[i].mData = data + gst_video_format_get_component_offset(format, i,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   400
         width, height);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   401
     b.mPlanes[i].mStride = gst_video_format_get_row_stride(format, i, width);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   402
     b.mPlanes[i].mHeight = gst_video_format_get_component_height(format,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   403
         i, height);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   404
     b.mPlanes[i].mWidth = gst_video_format_get_component_width(format,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   405
         i, width);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   406
     b.mPlanes[i].mOffset = 0;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   407
     b.mPlanes[i].mSkip = 0;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   408
   }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   409
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   410
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   411
   bool isKeyframe = !GST_BUFFER_FLAG_IS_SET(buffer,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   412
       GST_BUFFER_FLAG_DELTA_UNIT);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   413
   /* XXX ? */
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   414
   int64_t offset = 0;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   415
   VideoData *video = VideoData::Create(mInfo,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   416
                                        mDecoder->GetImageContainer(),
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   417
                                        offset,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   418
                                        timestamp,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   419
                                        nextTimestamp,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   420
                                        b,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   421
                                        isKeyframe,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   422
                                        -1,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   423
                                        mPicture);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   424
   mVideoQueue.Push(video);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   425
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   426
+  gst_buffer_unmap(buffer, &info);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   427
+  gst_sample_unref(sample);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   428
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   429
   gst_buffer_unref(buffer);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   430
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   431
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   432
   return true;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   433
 }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   434
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   435
 nsresult GStreamerReader::Seek(int64_t aTarget,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   436
                                  int64_t aStartTime,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   437
                                  int64_t aEndTime,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   438
                                  int64_t aCurrentTime)
641
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   439
@@ -514,52 +610,62 @@ nsresult GStreamerReader::Seek(int64_t a
625
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   440
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   441
 nsresult GStreamerReader::GetBuffered(nsTimeRanges* aBuffered,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   442
                                         int64_t aStartTime)
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   443
 {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   444
   if (!mInfo.mHasVideo && !mInfo.mHasAudio) {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   445
     return NS_OK;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   446
   }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   447
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   448
-  GstFormat format = GST_FORMAT_TIME;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   449
+#if GST_VERSION_MAJOR == 0
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   450
+    GstFormat format = GST_FORMAT_TIME;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   451
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   452
+
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   453
   MediaResource* resource = mDecoder->GetResource();
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   454
   gint64 resourceLength = resource->GetLength();
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   455
   nsTArray<MediaByteRange> ranges;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   456
   resource->GetCachedRanges(ranges);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   457
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   458
   if (mDecoder->OnStateMachineThread())
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   459
     /* Report the position from here while buffering as we can't report it from
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   460
      * the gstreamer threads that are actually reading from the resource
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   461
      */
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   462
     NotifyBytesConsumed();
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   463
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   464
   if (resource->IsDataCachedToEndOfResource(0)) {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   465
     /* fast path for local or completely cached files */
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   466
     gint64 duration = 0;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   467
-    GstFormat format = GST_FORMAT_TIME;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   468
-
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   469
     duration = QueryDuration();
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   470
     double end = (double) duration / GST_MSECOND;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   471
     LOG(PR_LOG_DEBUG, ("complete range [0, %f] for [0, %li]",
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   472
           end, resourceLength));
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   473
     aBuffered->Add(0, end);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   474
     return NS_OK;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   475
   }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   476
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   477
   for(uint32_t index = 0; index < ranges.Length(); index++) {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   478
     int64_t startOffset = ranges[index].mStart;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   479
     int64_t endOffset = ranges[index].mEnd;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   480
     gint64 startTime, endTime;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   481
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   482
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   483
+    if (!gst_element_query_convert(GST_ELEMENT(mPlayBin), GST_FORMAT_BYTES,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   484
+      startOffset, GST_FORMAT_TIME, &startTime))
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   485
+      continue;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   486
+    if (!gst_element_query_convert(GST_ELEMENT(mPlayBin), GST_FORMAT_BYTES,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   487
+      endOffset, GST_FORMAT_TIME, &endTime))
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   488
+      continue;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   489
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   490
     if (!gst_element_query_convert(GST_ELEMENT(mPlayBin), GST_FORMAT_BYTES,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   491
       startOffset, &format, &startTime) || format != GST_FORMAT_TIME)
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   492
       continue;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   493
     if (!gst_element_query_convert(GST_ELEMENT(mPlayBin), GST_FORMAT_BYTES,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   494
       endOffset, &format, &endTime) || format != GST_FORMAT_TIME)
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   495
       continue;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   496
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   497
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   498
     double start = start = (double) GST_TIME_AS_USECONDS (startTime) / GST_MSECOND;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   499
     double end = (double) GST_TIME_AS_USECONDS (endTime) / GST_MSECOND;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   500
     LOG(PR_LOG_DEBUG, ("adding range [%f, %f] for [%li %li] size %li",
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   501
           start, end, startOffset, endOffset, resourceLength));
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   502
     aBuffered->Add(start, end);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   503
   }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   504
 
641
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   505
@@ -568,48 +674,64 @@ nsresult GStreamerReader::GetBuffered(ns
625
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   506
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   507
 void GStreamerReader::ReadAndPushData(guint aLength)
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   508
 {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   509
   MediaResource* resource = mDecoder->GetResource();
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   510
   NS_ASSERTION(resource, "Decoder has no media resource");
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   511
   nsresult rv = NS_OK;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   512
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   513
   GstBuffer *buffer = gst_buffer_new_and_alloc(aLength);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   514
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   515
+  GstMapInfo info;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   516
+  gst_buffer_map(buffer, &info, GST_MAP_WRITE);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   517
+  guint8 *data = info.data;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   518
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   519
   guint8 *data = GST_BUFFER_DATA(buffer);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   520
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   521
   uint32_t size = 0, bytesRead = 0;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   522
   while(bytesRead < aLength) {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   523
     rv = resource->Read(reinterpret_cast<char*>(data + bytesRead),
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   524
         aLength - bytesRead, &size);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   525
     if (NS_FAILED(rv) || size == 0)
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   526
       break;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   527
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   528
     bytesRead += size;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   529
   }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   530
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   531
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   532
+  info.size = bytesRead;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   533
+  gst_buffer_unmap(buffer, &info);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   534
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   535
   GST_BUFFER_SIZE(buffer) = bytesRead;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   536
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   537
   mByteOffset += bytesRead;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   538
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   539
   GstFlowReturn ret = gst_app_src_push_buffer(mSource, gst_buffer_ref(buffer));
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   540
   if (ret != GST_FLOW_OK)
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   541
     LOG(PR_LOG_ERROR, ("ReadAndPushData push ret %s", gst_flow_get_name(ret)));
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   542
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   543
-  if (GST_BUFFER_SIZE (buffer) < aLength)
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   544
+  if (bytesRead < aLength)
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   545
     /* If we read less than what we wanted, we reached the end */
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   546
     gst_app_src_end_of_stream(mSource);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   547
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   548
   gst_buffer_unref(buffer);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   549
 }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   550
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   551
 int64_t GStreamerReader::QueryDuration()
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   552
 {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   553
   gint64 duration = 0;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   554
   GstFormat format = GST_FORMAT_TIME;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   555
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   556
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   557
+  if (gst_element_query_duration(GST_ELEMENT(mPlayBin),
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   558
+      format, &duration)) {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   559
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   560
   if (gst_element_query_duration(GST_ELEMENT(mPlayBin),
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   561
       &format, &duration)) {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   562
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   563
     if (format == GST_FORMAT_TIME) {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   564
       LOG(PR_LOG_DEBUG, ("pipeline duration %" GST_TIME_FORMAT,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   565
             GST_TIME_ARGS (duration)));
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   566
       duration = GST_TIME_AS_USECONDS (duration);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   567
     }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   568
   }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   569
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   570
   /*if (mDecoder->mDuration != -1 &&
641
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   571
@@ -673,60 +795,95 @@ gboolean GStreamerReader::SeekData(GstAp
625
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   572
   if (NS_SUCCEEDED(rv))
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   573
     mByteOffset = mLastReportedByteOffset = aOffset;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   574
   else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   575
     LOG(PR_LOG_ERROR, ("seek at %lu failed", aOffset));
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   576
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   577
   return NS_SUCCEEDED(rv);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   578
 }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   579
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   580
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   581
+GstPadProbeReturn GStreamerReader::EventProbeCb(GstPad *aPad,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   582
+                                                GstPadProbeInfo *aInfo,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   583
+                                                gpointer aUserData)
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   584
+{
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   585
+  GStreamerReader *reader = (GStreamerReader *) aUserData;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   586
+  GstEvent *aEvent = (GstEvent *)aInfo->data;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   587
+  return reader->EventProbe(aPad, aEvent);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   588
+}
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   589
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   590
 gboolean GStreamerReader::EventProbeCb(GstPad *aPad,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   591
                                          GstEvent *aEvent,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   592
                                          gpointer aUserData)
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   593
 {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   594
   GStreamerReader *reader = (GStreamerReader *) aUserData;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   595
   return reader->EventProbe(aPad, aEvent);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   596
 }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   597
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   598
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   599
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   600
+GstPadProbeReturn GStreamerReader::EventProbe(GstPad *aPad, GstEvent *aEvent)
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   601
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   602
 gboolean GStreamerReader::EventProbe(GstPad *aPad, GstEvent *aEvent)
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   603
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   604
 {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   605
   GstElement *parent = GST_ELEMENT(gst_pad_get_parent(aPad));
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   606
   switch(GST_EVENT_TYPE(aEvent)) {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   607
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   608
+    case GST_EVENT_SEGMENT:
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   609
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   610
     case GST_EVENT_NEWSEGMENT:
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   611
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   612
     {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   613
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   614
+      const GstSegment *newSegment;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   615
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   616
       gboolean update;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   617
       gdouble rate;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   618
       GstFormat format;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   619
       gint64 start, stop, position;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   620
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   621
       GstSegment *segment;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   622
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   623
       /* Store the segments so we can convert timestamps to stream time, which
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   624
        * is what the upper layers sync on.
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   625
        */
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   626
       ReentrantMonitorAutoEnter mon(mGstThreadsMonitor);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   627
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   628
+      gst_event_parse_segment(aEvent, &newSegment);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   629
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   630
       gst_event_parse_new_segment(aEvent, &update, &rate, &format,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   631
           &start, &stop, &position);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   632
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   633
       if (parent == GST_ELEMENT(mVideoAppSink))
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   634
         segment = &mVideoSegment;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   635
       else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   636
         segment = &mAudioSegment;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   637
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   638
+      gst_segment_copy_into (newSegment, segment);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   639
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   640
       gst_segment_set_newsegment(segment, update, rate, format,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   641
           start, stop, position);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   642
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   643
       break;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   644
     }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   645
     case GST_EVENT_FLUSH_STOP:
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   646
       /* Reset on seeks */
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   647
       ResetDecode();
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   648
       break;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   649
     default:
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   650
       break;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   651
   }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   652
   gst_object_unref(parent);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   653
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   654
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   655
+  return GST_PAD_PROBE_OK;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   656
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   657
   return TRUE;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   658
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   659
 }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   660
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   661
 GstFlowReturn GStreamerReader::NewPrerollCb(GstAppSink *aSink,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   662
                                               gpointer aUserData)
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   663
 {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   664
   GStreamerReader *reader = (GStreamerReader *) aUserData;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   665
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   666
   if (aSink == reader->mVideoAppSink)
641
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   667
@@ -735,18 +892,22 @@ GstFlowReturn GStreamerReader::NewPrerol
625
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   668
     reader->AudioPreroll();
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   669
   return GST_FLOW_OK;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   670
 }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   671
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   672
 void GStreamerReader::AudioPreroll()
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   673
 {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   674
   /* The first audio buffer has reached the audio sink. Get rate and channels */
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   675
   LOG(PR_LOG_DEBUG, ("Audio preroll"));
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   676
-  GstPad *sinkpad = gst_element_get_pad(GST_ELEMENT(mAudioAppSink), "sink");
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   677
+  GstPad *sinkpad = gst_element_get_static_pad(GST_ELEMENT(mAudioAppSink), "sink");
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   678
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   679
+  GstCaps *caps = gst_pad_get_current_caps(sinkpad);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   680
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   681
   GstCaps *caps = gst_pad_get_negotiated_caps(sinkpad);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   682
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   683
   GstStructure *s = gst_caps_get_structure(caps, 0);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   684
   mInfo.mAudioRate = mInfo.mAudioChannels = 0;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   685
   gst_structure_get_int(s, "rate", (gint *) &mInfo.mAudioRate);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   686
   gst_structure_get_int(s, "channels", (gint *) &mInfo.mAudioChannels);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   687
   NS_ASSERTION(mInfo.mAudioRate != 0, ("audio rate is zero"));
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   688
   NS_ASSERTION(mInfo.mAudioChannels != 0, ("audio channels is zero"));
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   689
   NS_ASSERTION(mInfo.mAudioChannels > 0 && mInfo.mAudioChannels <= MAX_CHANNELS,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   690
       "invalid audio channels number");
641
8d4c4f06e0e4 minor improvements (still has a playback issue)
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 637
diff changeset
   691
@@ -754,19 +915,29 @@ void GStreamerReader::AudioPreroll()
625
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   692
   gst_caps_unref(caps);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   693
   gst_object_unref(sinkpad);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   694
 }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   695
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   696
 void GStreamerReader::VideoPreroll()
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   697
 {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   698
   /* The first video buffer has reached the video sink. Get width and height */
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   699
   LOG(PR_LOG_DEBUG, ("Video preroll"));
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   700
-  GstPad *sinkpad = gst_element_get_pad(GST_ELEMENT(mVideoAppSink), "sink");
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   701
+  GstPad *sinkpad = gst_element_get_static_pad(GST_ELEMENT(mVideoAppSink), "sink");
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   702
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   703
+  GstCaps *caps = gst_pad_get_current_caps(sinkpad);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   704
+  GstVideoInfo info;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   705
+  memset (&info, 0, sizeof (info));
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   706
+  gst_video_info_from_caps(&info, caps);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   707
+  mFormat = info.finfo->format;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   708
+  mPicture.width = info.width;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   709
+  mPicture.height = info.height;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   710
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   711
   GstCaps *caps = gst_pad_get_negotiated_caps(sinkpad);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   712
   gst_video_format_parse_caps(caps, &mFormat, &mPicture.width, &mPicture.height);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   713
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   714
   GstStructure *structure = gst_caps_get_structure(caps, 0);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   715
   gst_structure_get_fraction(structure, "framerate", &fpsNum, &fpsDen);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   716
   NS_ASSERTION(mPicture.width && mPicture.height, "invalid video resolution");
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   717
   mInfo.mDisplay = nsIntSize(mPicture.width, mPicture.height);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   718
   mInfo.mHasVideo = true;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   719
   gst_caps_unref(caps);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   720
   gst_object_unref(sinkpad);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   721
 }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   722
diff --git a/content/media/gstreamer/GStreamerReader.h b/content/media/gstreamer/GStreamerReader.h
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   723
--- a/content/media/gstreamer/GStreamerReader.h
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   724
+++ b/content/media/gstreamer/GStreamerReader.h
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   725
@@ -71,18 +71,23 @@ private:
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   726
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   727
   /* Called when a seek is issued on the pipeline */
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   728
   static gboolean SeekDataCb(GstAppSrc *aSrc,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   729
                              guint64 aOffset,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   730
                              gpointer aUserData);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   731
   gboolean SeekData(GstAppSrc *aSrc, guint64 aOffset);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   732
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   733
   /* Called when events reach the sinks. See inline comments */
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   734
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   735
+  static GstPadProbeReturn EventProbeCb(GstPad *aPad, GstPadProbeInfo *aInfo, gpointer aUserData);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   736
+  GstPadProbeReturn EventProbe(GstPad *aPad, GstEvent *aEvent);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   737
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   738
   static gboolean EventProbeCb(GstPad *aPad, GstEvent *aEvent, gpointer aUserData);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   739
   gboolean EventProbe(GstPad *aPad, GstEvent *aEvent);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   740
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   741
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   742
   /* Called when the pipeline is prerolled, that is when at start or after a
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   743
    * seek, the first audio and video buffers are queued in the sinks.
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   744
    */
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   745
   static GstFlowReturn NewPrerollCb(GstAppSink *aSink, gpointer aUserData);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   746
   void VideoPreroll();
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   747
   void AudioPreroll();
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   748