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