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