mozilla-gstreamer-1.patch
author Wolfgang Rosenauer <wr@rosenauer.org>
Tue, 19 Mar 2013 08:20:23 +0100
changeset 634 3fbce5dd16c2
parent 627 cc7671532e60
child 637 73640b76d6c3
permissions -rw-r--r--
merge from firefox20
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
627
cc7671532e60 complete GStreamer 1.0 patch to cover our earlier GStreamer patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 625
diff changeset
     2
# Parent 0559be6b60075e1a708ca90e874f922ff200c462
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
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    10
@@ -5758,28 +5758,36 @@ fi
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
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    38
     # depend on >= 0.10.33 as that's when the playbin2 source-setup signal was
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    39
     # introduced
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    40
-    GST_VERSION=0.10.33
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    41
+    if test "$GST_API_VERSION" = "1.0"; then
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    42
+      GST_VERSION=1.0
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    43
+    else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    44
+      GST_VERSION=0.10.33
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    45
+    fi
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    46
     PKG_CHECK_MODULES(GSTREAMER,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    47
                       gstreamer-$GST_API_VERSION >= $GST_VERSION
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    48
                       gstreamer-app-$GST_API_VERSION
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    49
                       gstreamer-plugins-base-$GST_API_VERSION)
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    50
     if test -n "$GSTREAMER_LIBS"; then
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    51
        _SAVE_LDFLAGS=$LDFLAGS
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    52
        LDFLAGS="$LDFLAGS $GSTREAMER_LIBS -lgstvideo-$GST_API_VERSION"
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    53
        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
    54
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
    55
--- 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
    56
+++ 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
    57
@@ -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
    58
     }
cc7671532e60 complete GStreamer 1.0 patch to cover our earlier GStreamer patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 625
diff changeset
    59
     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
    60
   }
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
   return true;
cc7671532e60 complete GStreamer 1.0 patch to cover our earlier GStreamer patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 625
diff changeset
    63
 }
cc7671532e60 complete GStreamer 1.0 patch to cover our earlier GStreamer patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 625
diff changeset
    64
 
cc7671532e60 complete GStreamer 1.0 patch to cover our earlier GStreamer patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 625
diff changeset
    65
 GList* GStreamerFormatHelper::GetFactories() {
cc7671532e60 complete GStreamer 1.0 patch to cover our earlier GStreamer patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 625
diff changeset
    66
+#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
    67
+  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
    68
+#else
cc7671532e60 complete GStreamer 1.0 patch to cover our earlier GStreamer patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 625
diff changeset
    69
   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
    70
+#endif
cc7671532e60 complete GStreamer 1.0 patch to cover our earlier GStreamer patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 625
diff changeset
    71
   if (cookie != mCookie) {
cc7671532e60 complete GStreamer 1.0 patch to cover our earlier GStreamer patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 625
diff changeset
    72
     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
    73
     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
    74
         (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
    75
          GST_RANK_MARGINAL);
cc7671532e60 complete GStreamer 1.0 patch to cover our earlier GStreamer patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 625
diff changeset
    76
     mCookie = cookie;
cc7671532e60 complete GStreamer 1.0 patch to cover our earlier GStreamer patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 625
diff changeset
    77
   }
cc7671532e60 complete GStreamer 1.0 patch to cover our earlier GStreamer patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents: 625
diff changeset
    78
 
625
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    79
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
    80
--- a/content/media/gstreamer/GStreamerReader.cpp
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    81
+++ b/content/media/gstreamer/GStreamerReader.cpp
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    82
@@ -69,18 +69,22 @@ GStreamerReader::GStreamerReader(Abstrac
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    83
   MOZ_COUNT_CTOR(GStreamerReader);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    84
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    85
   mSrcCallbacks.need_data = GStreamerReader::NeedDataCb;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    86
   mSrcCallbacks.enough_data = GStreamerReader::EnoughDataCb;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    87
   mSrcCallbacks.seek_data = GStreamerReader::SeekDataCb;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    88
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    89
   mSinkCallbacks.eos = GStreamerReader::EosCb;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    90
   mSinkCallbacks.new_preroll = GStreamerReader::NewPrerollCb;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    91
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    92
+  mSinkCallbacks.new_sample = GStreamerReader::NewBufferCb;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    93
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    94
   mSinkCallbacks.new_buffer = GStreamerReader::NewBufferCb;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    95
   mSinkCallbacks.new_buffer_list = NULL;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    96
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    97
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    98
   gst_segment_init(&mVideoSegment, GST_FORMAT_UNDEFINED);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    99
   gst_segment_init(&mAudioSegment, GST_FORMAT_UNDEFINED);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   100
 }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   101
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   102
 GStreamerReader::~GStreamerReader()
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   103
 {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   104
   MOZ_COUNT_DTOR(GStreamerReader);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   105
@@ -120,19 +124,26 @@ nsresult GStreamerReader::Init(MediaDeco
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   106
   mVideoSink = gst_parse_bin_from_description("capsfilter name=filter ! "
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   107
       "appsink name=videosink sync=true max-buffers=1 "
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   108
       "caps=video/x-raw-yuv,format=(fourcc)I420"
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   109
       , TRUE, NULL);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   110
   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
   111
         "videosink"));
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   112
   gst_app_sink_set_callbacks(mVideoAppSink, &mSinkCallbacks,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   113
       (gpointer) this, NULL);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   114
-  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
   115
+  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
   116
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   117
+  // 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
   118
+  gst_pad_add_probe(sinkpad,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   119
+      (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
   120
+      &GStreamerReader::EventProbeCb, this, NULL);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   121
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   122
   gst_pad_add_event_probe(sinkpad,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   123
       G_CALLBACK(&GStreamerReader::EventProbeCb), this);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   124
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   125
   gst_object_unref(sinkpad);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   126
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   127
   mAudioSink = gst_parse_bin_from_description("capsfilter name=filter ! "
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   128
 #ifdef MOZ_SAMPLE_TYPE_FLOAT32
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   129
         "appsink name=audiosink sync=true caps=audio/x-raw-float,"
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   130
 #ifdef IS_LITTLE_ENDIAN
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   131
         "channels={1,2},rate=44100,width=32,endianness=1234", TRUE, NULL);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   132
 #else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   133
@@ -145,19 +156,25 @@ nsresult GStreamerReader::Init(MediaDeco
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   134
 #else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   135
         "channels={1,2},rate=48000,width=16,endianness=4321", TRUE, NULL);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   136
 #endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   137
 #endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   138
   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
   139
         "audiosink"));
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   140
   gst_app_sink_set_callbacks(mAudioAppSink, &mSinkCallbacks,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   141
       (gpointer) this, NULL);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   142
-  sinkpad = gst_element_get_pad(GST_ELEMENT(mAudioAppSink), "sink");
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   143
+  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
   144
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   145
+  gst_pad_add_probe(sinkpad,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   146
+      (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
   147
+      &GStreamerReader::EventProbeCb, this, NULL);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   148
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   149
   gst_pad_add_event_probe(sinkpad,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   150
       G_CALLBACK(&GStreamerReader::EventProbeCb), this);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   151
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   152
   gst_object_unref(sinkpad);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   153
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   154
   g_object_set(mPlayBin, "uri", "appsrc://",
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   155
       "video-sink", mVideoSink,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   156
       "audio-sink", mAudioSink,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   157
       NULL);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   158
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   159
   g_object_connect(mPlayBin, "signal::source-setup",
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   160
@@ -231,17 +248,17 @@ nsresult GStreamerReader::ReadMetadata(V
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   161
       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
   162
     else if (!(current_flags & GST_PLAY_FLAG_VIDEO))
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   163
       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
   164
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   165
     if (filter) {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   166
       /* 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
   167
        * 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
   168
        */
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   169
-      GstCaps *filterCaps = gst_caps_new_simple ("skip", NULL);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   170
+      GstCaps *filterCaps = gst_caps_new_simple ("skip", NULL, NULL);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   171
       g_object_set(filter, "caps", filterCaps, NULL);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   172
       gst_caps_unref(filterCaps);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   173
       gst_object_unref(filter);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   174
     }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   175
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   176
     /* start the pipeline */
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   177
     gst_element_set_state(mPlayBin, GST_STATE_PAUSED);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   178
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   179
@@ -284,19 +301,24 @@ nsresult GStreamerReader::ReadMetadata(V
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   180
       gst_element_set_state(mPlayBin, GST_STATE_NULL);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   181
       gst_message_unref(message);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   182
       return NS_ERROR_FAILURE;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   183
     }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   184
   }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   185
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   186
   /* report the duration */
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   187
   gint64 duration;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   188
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   189
+  if (gst_element_query_duration(GST_ELEMENT(mPlayBin),
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   190
+      GST_FORMAT_TIME, &duration)) {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   191
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   192
   GstFormat format = GST_FORMAT_TIME;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   193
   if (gst_element_query_duration(GST_ELEMENT(mPlayBin),
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   194
       &format, &duration) && format == GST_FORMAT_TIME) {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   195
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   196
     ReentrantMonitorAutoEnter mon(mDecoder->GetReentrantMonitor());
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   197
     LOG(PR_LOG_DEBUG, ("returning duration %" GST_TIME_FORMAT,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   198
           GST_TIME_ARGS (duration)));
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   199
     duration = GST_TIME_AS_USECONDS (duration);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   200
     mDecoder->SetMediaDuration(duration);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   201
   }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   202
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   203
   int n_video = 0, n_audio = 0;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   204
@@ -365,59 +387,87 @@ bool GStreamerReader::DecodeAudioData()
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   205
 {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   206
   NS_ASSERTION(mDecoder->OnDecodeThread(), "Should be on decode thread.");
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   207
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   208
   if (!WaitForDecodedData(&mAudioSinkBufferCount)) {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   209
     mAudioQueue.Finish();
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   210
     return false;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   211
   }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   212
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   213
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   214
+    GstSample *sample = gst_app_sink_pull_sample(mAudioAppSink);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   215
+    GstBuffer *buffer = gst_sample_get_buffer(sample);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   216
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   217
   GstBuffer *buffer = gst_app_sink_pull_buffer(mAudioAppSink);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   218
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   219
   int64_t timestamp = GST_BUFFER_TIMESTAMP(buffer);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   220
   timestamp = gst_segment_to_stream_time(&mAudioSegment,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   221
       GST_FORMAT_TIME, timestamp);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   222
   timestamp = GST_TIME_AS_USECONDS(timestamp);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   223
   int64_t duration = 0;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   224
   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
   225
     duration = GST_TIME_AS_USECONDS(GST_BUFFER_DURATION(buffer));
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   226
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   227
   int64_t offset = GST_BUFFER_OFFSET(buffer);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   228
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   229
+  GstMapInfo info;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   230
+  gst_buffer_map(buffer, &info, GST_MAP_READ);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   231
+  unsigned int size = info.size;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   232
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   233
   unsigned int size = GST_BUFFER_SIZE(buffer);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   234
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   235
   int32_t frames = (size / sizeof(AudioDataValue)) / mInfo.mAudioChannels;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   236
   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
   237
   nsAutoArrayPtr<AudioDataValue> data(new AudioDataValue[outSize]);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   238
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   239
+  memcpy(data, info.data, info.size);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   240
+  gst_buffer_unmap(buffer, &info);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   241
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   242
   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
   243
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   244
   AudioData *audio = new AudioData(offset, timestamp, duration,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   245
       frames, data.forget(), mInfo.mAudioChannels);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   246
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   247
   mAudioQueue.Push(audio);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   248
   gst_buffer_unref(buffer);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   249
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   250
   return true;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   251
 }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   252
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   253
 bool GStreamerReader::DecodeVideoFrame(bool &aKeyFrameSkip,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   254
                                          int64_t aTimeThreshold)
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   255
 {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   256
   NS_ASSERTION(mDecoder->OnDecodeThread(), "Should be on decode thread.");
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
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   259
+    GstSample *sample = NULL;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   260
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   261
   GstBuffer *buffer = NULL;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   262
   int64_t timestamp, nextTimestamp;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   263
   while (true)
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   264
   {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   265
     if (!WaitForDecodedData(&mVideoSinkBufferCount)) {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   266
       mVideoQueue.Finish();
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   267
       break;
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
     mDecoder->NotifyDecodedFrames(0, 1);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   270
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   271
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   272
+    sample = gst_app_sink_pull_sample(mVideoAppSink);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   273
+    buffer = gst_sample_get_buffer(sample);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   274
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   275
     buffer = gst_app_sink_pull_buffer(mVideoAppSink);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   276
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   277
     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
   278
     if ((aKeyFrameSkip && !isKeyframe)) {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   279
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   280
+      gst_sample_unref(sample);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   281
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   282
       gst_buffer_unref(buffer);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   283
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   284
       buffer = NULL;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   285
       continue;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   286
     }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   287
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   288
     timestamp = GST_BUFFER_TIMESTAMP(buffer);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   289
     {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   290
       ReentrantMonitorAutoEnter mon(mGstThreadsMonitor);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   291
       timestamp = gst_segment_to_stream_time(&mVideoSegment,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   292
@@ -431,62 +481,90 @@ bool GStreamerReader::DecodeVideoFrame(b
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   293
     else if (fpsNum && fpsDen)
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   294
       /* add 1-frame duration */
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   295
       nextTimestamp += gst_util_uint64_scale(GST_USECOND, fpsNum, fpsDen);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   296
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   297
     if (timestamp < aTimeThreshold) {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   298
       LOG(PR_LOG_DEBUG, ("skipping frame %" GST_TIME_FORMAT
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   299
             " threshold %" GST_TIME_FORMAT,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   300
             GST_TIME_ARGS(timestamp), GST_TIME_ARGS(aTimeThreshold)));
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   301
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   302
+      gst_sample_unref(sample);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   303
+#else
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
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   306
       buffer = NULL;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   307
       continue;
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
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   310
     break;
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
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   313
   if (buffer == NULL)
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   314
     /* no more frames */
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   315
     return false;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   316
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   317
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   318
+  GstMapInfo info;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   319
+  gst_buffer_map(buffer, &info, GST_MAP_READ);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   320
+  guint8 *data = info.data;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   321
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   322
   guint8 *data = GST_BUFFER_DATA(buffer);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   323
+#endif
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
   int width = mPicture.width;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   326
   int height = mPicture.height;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   327
   GstVideoFormat format = mFormat;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   328
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   329
   VideoData::YCbCrBuffer b;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   330
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   331
+  GstVideoInfo *video_info;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   332
+  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
   333
+  for(int i = 0; i < 3; i++) {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   334
+    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
   335
+    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
   336
+    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
   337
+    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
   338
+    b.mPlanes[i].mOffset = 0;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   339
+    b.mPlanes[i].mSkip = 0;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   340
+  }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   341
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   342
   for(int i = 0; i < 3; i++) {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   343
     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
   344
         width, height);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   345
     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
   346
     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
   347
         i, height);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   348
     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
   349
         i, width);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   350
     b.mPlanes[i].mOffset = 0;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   351
     b.mPlanes[i].mSkip = 0;
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
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   354
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   355
   bool isKeyframe = !GST_BUFFER_FLAG_IS_SET(buffer,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   356
       GST_BUFFER_FLAG_DELTA_UNIT);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   357
   /* XXX ? */
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   358
   int64_t offset = 0;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   359
   VideoData *video = VideoData::Create(mInfo,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   360
                                        mDecoder->GetImageContainer(),
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   361
                                        offset,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   362
                                        timestamp,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   363
                                        nextTimestamp,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   364
                                        b,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   365
                                        isKeyframe,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   366
                                        -1,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   367
                                        mPicture);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   368
   mVideoQueue.Push(video);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   369
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   370
+  gst_buffer_unmap(buffer, &info);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   371
+  gst_sample_unref(sample);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   372
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   373
   gst_buffer_unref(buffer);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   374
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   375
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   376
   return true;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   377
 }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   378
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   379
 nsresult GStreamerReader::Seek(int64_t aTarget,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   380
                                  int64_t aStartTime,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   381
                                  int64_t aEndTime,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   382
                                  int64_t aCurrentTime)
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   383
@@ -509,52 +587,62 @@ nsresult GStreamerReader::Seek(int64_t a
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
 nsresult GStreamerReader::GetBuffered(nsTimeRanges* aBuffered,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   386
                                         int64_t aStartTime)
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   387
 {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   388
   if (!mInfo.mHasVideo && !mInfo.mHasAudio) {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   389
     return NS_OK;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   390
   }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   391
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   392
-  GstFormat format = GST_FORMAT_TIME;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   393
+#if GST_VERSION_MAJOR == 0
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   394
+    GstFormat format = GST_FORMAT_TIME;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   395
+#endif
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
   MediaResource* resource = mDecoder->GetResource();
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   398
   gint64 resourceLength = resource->GetLength();
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   399
   nsTArray<MediaByteRange> ranges;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   400
   resource->GetCachedRanges(ranges);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   401
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   402
   if (mDecoder->OnStateMachineThread())
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   403
     /* 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
   404
      * 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
   405
      */
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   406
     NotifyBytesConsumed();
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   407
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   408
   if (resource->IsDataCachedToEndOfResource(0)) {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   409
     /* fast path for local or completely cached files */
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   410
     gint64 duration = 0;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   411
-    GstFormat format = GST_FORMAT_TIME;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   412
-
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   413
     duration = QueryDuration();
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   414
     double end = (double) duration / GST_MSECOND;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   415
     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
   416
           end, resourceLength));
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   417
     aBuffered->Add(0, end);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   418
     return NS_OK;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   419
   }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   420
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   421
   for(uint32_t index = 0; index < ranges.Length(); index++) {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   422
     int64_t startOffset = ranges[index].mStart;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   423
     int64_t endOffset = ranges[index].mEnd;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   424
     gint64 startTime, endTime;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   425
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   426
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   427
+    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
   428
+      startOffset, GST_FORMAT_TIME, &startTime))
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   429
+      continue;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   430
+    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
   431
+      endOffset, GST_FORMAT_TIME, &endTime))
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   432
+      continue;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   433
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   434
     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
   435
       startOffset, &format, &startTime) || format != GST_FORMAT_TIME)
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   436
       continue;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   437
     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
   438
       endOffset, &format, &endTime) || format != GST_FORMAT_TIME)
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   439
       continue;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   440
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   441
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   442
     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
   443
     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
   444
     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
   445
           start, end, startOffset, endOffset, resourceLength));
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   446
     aBuffered->Add(start, end);
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
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   449
@@ -563,48 +651,64 @@ nsresult GStreamerReader::GetBuffered(ns
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   450
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   451
 void GStreamerReader::ReadAndPushData(guint aLength)
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
   NS_ASSERTION(resource, "Decoder has no media resource");
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   455
   nsresult rv = NS_OK;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   456
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   457
   GstBuffer *buffer = gst_buffer_new_and_alloc(aLength);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   458
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   459
+  GstMapInfo info;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   460
+  gst_buffer_map(buffer, &info, GST_MAP_WRITE);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   461
+  guint8 *data = info.data;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   462
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   463
   guint8 *data = GST_BUFFER_DATA(buffer);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   464
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   465
   uint32_t size = 0, bytesRead = 0;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   466
   while(bytesRead < aLength) {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   467
     rv = resource->Read(reinterpret_cast<char*>(data + bytesRead),
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   468
         aLength - bytesRead, &size);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   469
     if (NS_FAILED(rv) || size == 0)
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   470
       break;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   471
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   472
     bytesRead += size;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   473
   }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   474
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   475
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   476
+  info.size = bytesRead;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   477
+  gst_buffer_unmap(buffer, &info);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   478
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   479
   GST_BUFFER_SIZE(buffer) = bytesRead;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   480
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   481
   mByteOffset += bytesRead;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   482
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   483
   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
   484
   if (ret != GST_FLOW_OK)
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   485
     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
   486
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   487
-  if (GST_BUFFER_SIZE (buffer) < aLength)
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   488
+  if (bytesRead < aLength)
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   489
     /* 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
   490
     gst_app_src_end_of_stream(mSource);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   491
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   492
   gst_buffer_unref(buffer);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   493
 }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   494
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   495
 int64_t GStreamerReader::QueryDuration()
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   496
 {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   497
   gint64 duration = 0;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   498
   GstFormat format = GST_FORMAT_TIME;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   499
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   500
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   501
+  if (gst_element_query_duration(GST_ELEMENT(mPlayBin),
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   502
+      format, &duration)) {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   503
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   504
   if (gst_element_query_duration(GST_ELEMENT(mPlayBin),
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   505
       &format, &duration)) {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   506
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   507
     if (format == GST_FORMAT_TIME) {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   508
       LOG(PR_LOG_DEBUG, ("pipeline duration %" GST_TIME_FORMAT,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   509
             GST_TIME_ARGS (duration)));
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   510
       duration = GST_TIME_AS_USECONDS (duration);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   511
     }
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
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   514
   /*if (mDecoder->mDuration != -1 &&
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   515
@@ -668,60 +772,95 @@ gboolean GStreamerReader::SeekData(GstAp
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   516
   if (NS_SUCCEEDED(rv))
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   517
     mByteOffset = mLastReportedByteOffset = aOffset;
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
     LOG(PR_LOG_ERROR, ("seek at %lu failed", aOffset));
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   520
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   521
   return NS_SUCCEEDED(rv);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   522
 }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   523
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   524
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   525
+GstPadProbeReturn GStreamerReader::EventProbeCb(GstPad *aPad,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   526
+                                                GstPadProbeInfo *aInfo,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   527
+                                                gpointer aUserData)
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   528
+{
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   529
+  GStreamerReader *reader = (GStreamerReader *) aUserData;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   530
+  GstEvent *aEvent = (GstEvent *)aInfo->data;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   531
+  return reader->EventProbe(aPad, aEvent);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   532
+}
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   533
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   534
 gboolean GStreamerReader::EventProbeCb(GstPad *aPad,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   535
                                          GstEvent *aEvent,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   536
                                          gpointer aUserData)
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   537
 {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   538
   GStreamerReader *reader = (GStreamerReader *) aUserData;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   539
   return reader->EventProbe(aPad, aEvent);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   540
 }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   541
+#endif
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_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   544
+GstPadProbeReturn GStreamerReader::EventProbe(GstPad *aPad, GstEvent *aEvent)
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   545
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   546
 gboolean GStreamerReader::EventProbe(GstPad *aPad, GstEvent *aEvent)
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   547
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   548
 {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   549
   GstElement *parent = GST_ELEMENT(gst_pad_get_parent(aPad));
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   550
   switch(GST_EVENT_TYPE(aEvent)) {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   551
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   552
+    case GST_EVENT_SEGMENT:
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   553
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   554
     case GST_EVENT_NEWSEGMENT:
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   555
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   556
     {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   557
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   558
+      const GstSegment *newSegment;
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
       gboolean update;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   561
       gdouble rate;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   562
       GstFormat format;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   563
       gint64 start, stop, position;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   564
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   565
       GstSegment *segment;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   566
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   567
       /* 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
   568
        * is what the upper layers sync on.
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
       ReentrantMonitorAutoEnter mon(mGstThreadsMonitor);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   571
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   572
+      gst_event_parse_segment(aEvent, &newSegment);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   573
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   574
       gst_event_parse_new_segment(aEvent, &update, &rate, &format,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   575
           &start, &stop, &position);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   576
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   577
       if (parent == GST_ELEMENT(mVideoAppSink))
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   578
         segment = &mVideoSegment;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   579
       else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   580
         segment = &mAudioSegment;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   581
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   582
+      gst_segment_copy_into (newSegment, segment);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   583
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   584
       gst_segment_set_newsegment(segment, update, rate, format,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   585
           start, stop, position);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   586
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   587
       break;
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
     case GST_EVENT_FLUSH_STOP:
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   590
       /* Reset on seeks */
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   591
       ResetDecode();
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   592
       break;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   593
     default:
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   594
       break;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   595
   }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   596
   gst_object_unref(parent);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   597
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   598
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   599
+  return GST_PAD_PROBE_OK;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   600
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   601
   return TRUE;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   602
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   603
 }
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
 GstFlowReturn GStreamerReader::NewPrerollCb(GstAppSink *aSink,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   606
                                               gpointer aUserData)
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   607
 {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   608
   GStreamerReader *reader = (GStreamerReader *) aUserData;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   609
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   610
   if (aSink == reader->mVideoAppSink)
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   611
@@ -730,18 +869,22 @@ GstFlowReturn GStreamerReader::NewPrerol
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   612
     reader->AudioPreroll();
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   613
   return GST_FLOW_OK;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   614
 }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   615
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   616
 void GStreamerReader::AudioPreroll()
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   617
 {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   618
   /* 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
   619
   LOG(PR_LOG_DEBUG, ("Audio preroll"));
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   620
-  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
   621
+  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
   622
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   623
+  GstCaps *caps = gst_pad_get_current_caps(sinkpad);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   624
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   625
   GstCaps *caps = gst_pad_get_negotiated_caps(sinkpad);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   626
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   627
   GstStructure *s = gst_caps_get_structure(caps, 0);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   628
   mInfo.mAudioRate = mInfo.mAudioChannels = 0;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   629
   gst_structure_get_int(s, "rate", (gint *) &mInfo.mAudioRate);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   630
   gst_structure_get_int(s, "channels", (gint *) &mInfo.mAudioChannels);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   631
   NS_ASSERTION(mInfo.mAudioRate != 0, ("audio rate is zero"));
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   632
   NS_ASSERTION(mInfo.mAudioChannels != 0, ("audio channels is zero"));
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   633
   NS_ASSERTION(mInfo.mAudioChannels > 0 && mInfo.mAudioChannels <= MAX_CHANNELS,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   634
       "invalid audio channels number");
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   635
@@ -749,19 +892,29 @@ void GStreamerReader::AudioPreroll()
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   636
   gst_caps_unref(caps);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   637
   gst_object_unref(sinkpad);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   638
 }
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   639
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   640
 void GStreamerReader::VideoPreroll()
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   641
 {
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   642
   /* 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
   643
   LOG(PR_LOG_DEBUG, ("Video preroll"));
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   644
-  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
   645
+  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
   646
+#if GST_VERSION_MAJOR == 1
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   647
+  GstCaps *caps = gst_pad_get_current_caps(sinkpad);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   648
+  GstVideoInfo info;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   649
+  memset (&info, 0, sizeof (info));
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   650
+  gst_video_info_from_caps(&info, caps);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   651
+  mFormat = info.finfo->format;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   652
+  mPicture.width = info.width;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   653
+  mPicture.height = info.height;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   654
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   655
   GstCaps *caps = gst_pad_get_negotiated_caps(sinkpad);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   656
   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
   657
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   658
   GstStructure *structure = gst_caps_get_structure(caps, 0);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   659
   gst_structure_get_fraction(structure, "framerate", &fpsNum, &fpsDen);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   660
   NS_ASSERTION(mPicture.width && mPicture.height, "invalid video resolution");
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   661
   mInfo.mDisplay = nsIntSize(mPicture.width, mPicture.height);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   662
   mInfo.mHasVideo = true;
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   663
   gst_caps_unref(caps);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   664
   gst_object_unref(sinkpad);
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
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
   667
--- a/content/media/gstreamer/GStreamerReader.h
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   668
+++ b/content/media/gstreamer/GStreamerReader.h
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   669
@@ -71,18 +71,23 @@ private:
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
   /* Called when a seek is issued on the pipeline */
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   672
   static gboolean SeekDataCb(GstAppSrc *aSrc,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   673
                              guint64 aOffset,
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   674
                              gpointer aUserData);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   675
   gboolean SeekData(GstAppSrc *aSrc, guint64 aOffset);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   676
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   677
   /* Called when events reach the sinks. See inline comments */
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
+  static GstPadProbeReturn EventProbeCb(GstPad *aPad, GstPadProbeInfo *aInfo, gpointer aUserData);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   680
+  GstPadProbeReturn EventProbe(GstPad *aPad, GstEvent *aEvent);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   681
+#else
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   682
   static gboolean EventProbeCb(GstPad *aPad, GstEvent *aEvent, gpointer aUserData);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   683
   gboolean EventProbe(GstPad *aPad, GstEvent *aEvent);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   684
+#endif
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   685
 
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   686
   /* 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
   687
    * 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
   688
    */
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   689
   static GstFlowReturn NewPrerollCb(GstAppSink *aSink, gpointer aUserData);
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   690
   void VideoPreroll();
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   691
   void AudioPreroll();
9f6e14430916 Bug 806917 - support GStreamer 1.0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
   692