diff options
36 files changed, 194 insertions, 171 deletions
diff --git a/configure.ac b/configure.ac index 10685b45..b0f03ffa 100644 --- a/configure.ac +++ b/configure.ac @@ -29,14 +29,15 @@ LT_INIT([dlopen disable-static]) dnl Required versions of library packages GLIB_REQUIRED=2.31.13 +LIBXML_REQUIRED=2.7 VALA_REQUIRED=0.16.1 VALADOC_REQUIRED=0.2 GSSDP_REQUIRED=0.13.0 GUPNP_REQUIRED=0.19.0 GUPNP_AV_REQUIRED=0.11.2 -GUPNP_DLNA_REQUIRED=0.5.0 -GSTREAMER_REQUIRED=0.10.36 -GSTPBU_REQUIRED=0.10.35 +GUPNP_DLNA_REQUIRED=0.7.0 +GSTREAMER_REQUIRED=1.0 +GSTPBU_REQUIRED=1.0 GIO_REQUIRED=2.26 GEE_REQUIRED=0.8.0 UUID_REQUIRED=1.41.3 @@ -44,8 +45,8 @@ LIBSOUP_REQUIRED=2.34.0 GTK_REQUIRED=2.90.3 dnl Additional requirements for media-export plugin -GSTREAMER_TAG_REQUIRED=0.10.28 -GSTREAMER_APP_REQUIRED=0.10.28 +GSTREAMER_TAG_REQUIRED=1.0 +GSTREAMER_APP_REQUIRED=1.0 LIBSQLITE3_REQUIRED=3.5 dnl Additional requirements for tracker plugin @@ -61,6 +62,7 @@ PKG_CHECK_MODULES(LIBGIO, gio-2.0 >= $GIO_REQUIRED) PKG_CHECK_MODULES(GEE, gee-0.8 >= $GEE_REQUIRED) PKG_CHECK_MODULES(UUID, uuid >= $UUID_REQUIRED) PKG_CHECK_MODULES(LIBSOUP, libsoup-2.4 >= $LIBSOUP_REQUIRED) +PKG_CHECK_MODULES(LIBXML, libxml-2.0 >= $LIBXML_REQUIRED) dnl Media engine to use BUILT_ENGINES="librygel-media-engine-simple" @@ -74,10 +76,10 @@ AC_ARG_WITH([media_engine], AS_IF([test "x$with_media_engine" = "xgstreamer"], [ - PKG_CHECK_MODULES(LIBGUPNP_DLNA, gupnp-dlna-1.0 >= $GUPNP_DLNA_REQUIRED) - PKG_CHECK_MODULES(LIBGSTREAMER, gstreamer-0.10 >= $GSTREAMER_REQUIRED) - PKG_CHECK_MODULES(GSTREAMER_BASE, gstreamer-base-0.10 >= $GSTREAMER_REQUIRED) - PKG_CHECK_MODULES(GST_PBU, gstreamer-pbutils-0.10 >= $GSTPBU_REQUIRED) + PKG_CHECK_MODULES(LIBGUPNP_DLNA, gupnp-dlna-1.1 >= $GUPNP_DLNA_REQUIRED) + PKG_CHECK_MODULES(LIBGSTREAMER, gstreamer-1.0 >= $GSTREAMER_REQUIRED) + PKG_CHECK_MODULES(GSTREAMER_BASE, gstreamer-base-1.0 >= $GSTREAMER_REQUIRED) + PKG_CHECK_MODULES(GST_PBU, gstreamer-pbutils-1.0 >= $GSTPBU_REQUIRED) enable_gstreamer="yes" BUILT_ENGINES="$BUILT_ENGINES;librygel-media-engine-gst" ], @@ -128,7 +130,8 @@ RYGEL_CHECK_VALA([$VALA_REQUIRED], AS_IF([test "x$with_media_engine" = "xgstreamer"], [ - RYGEL_CHECK_PACKAGES([gupnp-dlna-1.0 gstreamer-0.10 gstreamer-pbutils-0.10]) + RYGEL_CHECK_PACKAGES([gupnp-dlna-1.1 gstreamer-1.0 + gstreamer-pbutils-1.0]) ]) dnl Debugging @@ -210,9 +213,9 @@ dnl Check additional requirements for MediaExport plugins if test "x$enable_media_export_plugin" = "xyes"; then PKG_CHECK_MODULES(LIBSQLITE3, sqlite3 >= $LIBSQLITE3_REQUIRED) - PKG_CHECK_MODULES(GSTREAMER_TAG, gstreamer-tag-0.10 >= $GSTREAMER_TAG_REQUIRED); - PKG_CHECK_MODULES(GSTREAMER_APP, gstreamer-app-0.10 >= $GSTREAMER_APP_REQUIRED); - RYGEL_CHECK_PACKAGES([sqlite3 gstreamer-tag-0.10 gstreamer-app-0.10]) + PKG_CHECK_MODULES(GSTREAMER_TAG, gstreamer-tag-1.0 >= $GSTREAMER_TAG_REQUIRED); + PKG_CHECK_MODULES(GSTREAMER_APP, gstreamer-app-1.0 >= $GSTREAMER_APP_REQUIRED); + RYGEL_CHECK_PACKAGES([sqlite3 gstreamer-tag-1.0 gstreamer-app-1.0]) AC_CHECK_HEADER([unistr.h], AC_CHECK_LIB([unistring], [u8_strcoll], diff --git a/data/Makefile.am b/data/Makefile.am index 6534dafa..7bd3fb18 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -22,11 +22,11 @@ desktop_in_files = rygel.desktop.in rygel-preferences.desktop.in desktop_DATA = $(desktop_in_files:.desktop.in=.desktop) @INTLTOOL_DESKTOP_RULE@ -preset_DATA = $(srcdir)/presets/ffenc_aac.prs \ - $(srcdir)/presets/ffenc_mp2.prs \ - $(srcdir)/presets/ffenc_mpeg2video.prs \ - $(srcdir)/presets/ffenc_wmav1.prs \ - $(srcdir)/presets/ffenc_wmv1.prs \ +preset_DATA = $(srcdir)/presets/avenc_aac.prs \ + $(srcdir)/presets/avenc_mp2.prs \ + $(srcdir)/presets/avenc_mpeg2video.prs \ + $(srcdir)/presets/avenc_wmav1.prs \ + $(srcdir)/presets/avenc_wmv1.prs \ $(srcdir)/presets/GstFaac.prs \ $(srcdir)/presets/GstLameMP3Enc.prs \ $(srcdir)/presets/GstMP4Mux.prs \ diff --git a/data/presets/GstFaac.prs b/data/presets/GstFaac.prs index 69894850..c02d4fa1 100644 --- a/data/presets/GstFaac.prs +++ b/data/presets/GstFaac.prs @@ -1,5 +1,5 @@ [_presets_] -version=0.10 +version=1.0 element-name=GstFaac [Rygel DLNA preset] @@ -7,3 +7,6 @@ bitrate=64000 [Rygel AAC_ADTS_320 preset] bitrate=256000 + +[Rygel AVC_MP4_BL_CIF15_AAC_520 preset] +bitrate=256000 diff --git a/data/presets/GstLameMP3Enc.prs b/data/presets/GstLameMP3Enc.prs index a80a10d2..fd66ea13 100644 --- a/data/presets/GstLameMP3Enc.prs +++ b/data/presets/GstLameMP3Enc.prs @@ -1,5 +1,5 @@ [_presets_] -version=0.10 +version=1.0 element-name=GstLameMP3Enc [Rygel DLNA preset] diff --git a/data/presets/GstMP4Mux.prs b/data/presets/GstMP4Mux.prs index 8c54280f..c5a885c4 100644 --- a/data/presets/GstMP4Mux.prs +++ b/data/presets/GstMP4Mux.prs @@ -1,5 +1,5 @@ [_presets_] -version=0.10 +version=1.0 element-name=GstMP4Mux [Rygel DLNA preset] diff --git a/data/presets/GstTwoLame.prs b/data/presets/GstTwoLame.prs index e8025298..7ad25230 100644 --- a/data/presets/GstTwoLame.prs +++ b/data/presets/GstTwoLame.prs @@ -1,5 +1,5 @@ [_presets_] -version=0.10 +version=1.0 element-name=GstTwoLame [Rygel DLNA preset] diff --git a/data/presets/GstX264Enc.prs b/data/presets/GstX264Enc.prs index b126d36a..400717da 100644 --- a/data/presets/GstX264Enc.prs +++ b/data/presets/GstX264Enc.prs @@ -1,5 +1,5 @@ [_presets_] -version=0.10 +version=1.0 element-name=GstX264Enc [Rygel AVC_MP4_BL_CIF15_AAC_520 preset] diff --git a/data/presets/ffenc_aac.prs b/data/presets/avenc_aac.prs index cd3838e3..0ea27d01 100644 --- a/data/presets/ffenc_aac.prs +++ b/data/presets/avenc_aac.prs @@ -1,6 +1,6 @@ [_presets_] -version=0.10 -element-name=ffenc_aac +version=1.0 +element-name=wvenc_aac [Rygel DLNA preset] bitrate=64000 diff --git a/data/presets/ffenc_mp2.prs b/data/presets/avenc_mp2.prs index 588af1b9..bb557bc0 100644 --- a/data/presets/ffenc_mp2.prs +++ b/data/presets/avenc_mp2.prs @@ -1,6 +1,6 @@ [_presets_] -version=0.10 -element-name=ffenc_mp2 +version=1.0 +element-name=avenc_mp2 [Rygel DLNA preset] bitrate=256000 diff --git a/data/presets/ffenc_mpeg2video.prs b/data/presets/avenc_mpeg2video.prs index 32a14d4e..bfd1f05a 100644 --- a/data/presets/ffenc_mpeg2video.prs +++ b/data/presets/avenc_mpeg2video.prs @@ -1,6 +1,6 @@ [_presets_] -version=0.10 -element-name=ffenc_mpeg2video +version=1.0 +element-name=avenc_mpeg2video [Rygel DLNA preset] bitrate=1500000 diff --git a/data/presets/ffenc_wmav1.prs b/data/presets/avenc_wmav1.prs index c28a00e7..736b002a 100644 --- a/data/presets/ffenc_wmav1.prs +++ b/data/presets/avenc_wmav1.prs @@ -1,6 +1,6 @@ [_presets_] -version=0.10 -element-name=ffenc_wmav1 +version=1.0 +element-name=avenc_wmav1 [Rygel DLNA preset] bitrate=64000 diff --git a/data/presets/ffenc_wmv1.prs b/data/presets/avenc_wmv1.prs index 6434df44..0a8319e9 100644 --- a/data/presets/ffenc_wmv1.prs +++ b/data/presets/avenc_wmv1.prs @@ -1,6 +1,6 @@ [_presets_] -version=0.10 -element-name=ffenc_wmv1 +version=1.0 +element-name=avenc_wmv1 [Rygel DLNA preset] bitrate=1200000 diff --git a/doc/reference/librygel-renderer-gst/Makefile.am b/doc/reference/librygel-renderer-gst/Makefile.am index 99913912..122f1210 100644 --- a/doc/reference/librygel-renderer-gst/Makefile.am +++ b/doc/reference/librygel-renderer-gst/Makefile.am @@ -20,7 +20,7 @@ RYGEL_DOCBUILD_VALADOC_FLAGS = \ --pkg rygel-core-2.0 \ --vapidir $(top_srcdir)/src/librygel-renderer \ --pkg rygel-renderer-2.0 \ - --pkg gstreamer-pbutils-0.10 \ + --pkg gstreamer-pbutils-1.0 \ $(RYGEL_COMMON_VALAFLAGS_PKG) \ $(LIBRYGEL_RENDERER_GST_VALAFLAGS_PKG) diff --git a/src/librygel-renderer-gst/Makefile.am b/src/librygel-renderer-gst/Makefile.am index 643a3e2c..139877a0 100644 --- a/src/librygel-renderer-gst/Makefile.am +++ b/src/librygel-renderer-gst/Makefile.am @@ -17,6 +17,7 @@ AM_CFLAGS += -DG_LOG_DOMAIN=\"Rygel\" \ librygel_renderer_gst_2_0_la_VALAFLAGS = \ -H rygel-renderer-gst.h --library=rygel-renderer-gst-2.0 \ + --enable-experimental \ $(LIBRYGEL_RENDERER_GST_VALAFLAGS_PKG) \ $(RYGEL_COMMON_RENDERER_PLUGIN_VALAFLAGS) librygel_renderer_gst_2_0_la_LIBADD = \ diff --git a/src/librygel-renderer-gst/filelist.am b/src/librygel-renderer-gst/filelist.am index c21215d6..379a9be4 100644 --- a/src/librygel-renderer-gst/filelist.am +++ b/src/librygel-renderer-gst/filelist.am @@ -5,4 +5,4 @@ LIBRYGEL_RENDERER_GST_VAPI_SOURCE_FILES = \ LIBRYGEL_RENDERER_GST_NONVAPI_SOURCE_FILES = -LIBRYGEL_RENDERER_GST_VALAFLAGS_PKG = --pkg gstreamer-0.10 +LIBRYGEL_RENDERER_GST_VALAFLAGS_PKG = --pkg gstreamer-1.0 diff --git a/src/librygel-renderer-gst/rygel-playbin-player.vala b/src/librygel-renderer-gst/rygel-playbin-player.vala index 1f49de69..098255f9 100644 --- a/src/librygel-renderer-gst/rygel-playbin-player.vala +++ b/src/librygel-renderer-gst/rygel-playbin-player.vala @@ -243,10 +243,9 @@ public class Rygel.Playbin.Player : GLib.Object, Rygel.MediaPlayer { public int64 duration { get { - var format = Format.TIME; int64 dur; - if (this.playbin.query_duration (ref format, out dur)) { + if (this.playbin.query_duration (Format.TIME, out dur)) { return dur / Gst.USECOND; } else { return 0; @@ -256,10 +255,9 @@ public class Rygel.Playbin.Player : GLib.Object, Rygel.MediaPlayer { public int64 position { get { - var format = Format.TIME; int64 pos; - if (this.playbin.query_position (ref format, out pos)) { + if (this.playbin.query_position (Format.TIME, out pos)) { return pos / Gst.USECOND; } else { return 0; @@ -268,7 +266,7 @@ public class Rygel.Playbin.Player : GLib.Object, Rygel.MediaPlayer { } private Player () { - this.playbin = ElementFactory.make ("playbin2", null); + this.playbin = ElementFactory.make ("playbin", null); this.foreign = false; this.setup_playbin (); } @@ -276,7 +274,7 @@ public class Rygel.Playbin.Player : GLib.Object, Rygel.MediaPlayer { public Player.wrap (Gst.Element playbin) { return_if_fail (playbin != null); - return_if_fail (playbin.get_type ().name() == "GstPlayBin2"); + return_if_fail (playbin.get_type ().name() == "GstPlayBin"); this.playbin = playbin; this.foreign = true; @@ -323,7 +321,7 @@ public class Rygel.Playbin.Player : GLib.Object, Rygel.MediaPlayer { private void bus_handler (Gst.Bus bus, Message message) { switch (message.type) { - case MessageType.DURATION: + case MessageType.DURATION_CHANGED: this.duration_hint = true; break; case MessageType.STATE_CHANGED: @@ -341,8 +339,8 @@ public class Rygel.Playbin.Player : GLib.Object, Rygel.MediaPlayer { if (this.uri_update_hint) { this.uri_update_hint = false; - string uri = this.playbin.uri; - if (this._uri != uri) { + string uri = this.playbin.current_uri; + if (this._uri != uri && uri != "") { // uri changed externally this._uri = this.playbin.uri; this.notify_property ("uri"); @@ -426,7 +424,7 @@ public class Rygel.Playbin.Player : GLib.Object, Rygel.MediaPlayer { this.transfer_mode != null) { debug ("Setting transfer mode to %s", this.transfer_mode); - var structure = new Structure.empty ("Extra Headers"); + var structure = new Structure.empty ("HTTPHeaders"); structure.set_value ("transferMode.dlna.org", this.transfer_mode); source.extra_headers = structure; diff --git a/src/librygel-renderer-gst/rygel-playbin-renderer.vala b/src/librygel-renderer-gst/rygel-playbin-renderer.vala index 740401c6..ea3c13a3 100644 --- a/src/librygel-renderer-gst/rygel-playbin-renderer.vala +++ b/src/librygel-renderer-gst/rygel-playbin-renderer.vala @@ -29,7 +29,7 @@ internal class Rygel.Playbin.WrappingPlugin : Rygel.MediaRendererPlugin { base ("LibRygel-Renderer", _("LibRygel Renderer")); return_val_if_fail (playbin != null, null); - return_val_if_fail (playbin.get_type ().name() == "GstPlayBin2", null); + return_val_if_fail (playbin.get_type ().name() == "GstPlayBin", null); this.player = new Player.wrap (playbin); } @@ -84,7 +84,7 @@ public class Rygel.Playbin.Renderer : Rygel.MediaDevice { base (); return_val_if_fail (pipeline != null, null); - return_val_if_fail (pipeline.get_type ().name() == "GstPlayBin2", null); + return_val_if_fail (pipeline.get_type ().name() == "GstPlayBin", null); this.plugin = new WrappingPlugin (pipeline); this.prepare_upnp (title); diff --git a/src/media-engines/gstreamer/Makefile.am b/src/media-engines/gstreamer/Makefile.am index b853a6af..255b3090 100644 --- a/src/media-engines/gstreamer/Makefile.am +++ b/src/media-engines/gstreamer/Makefile.am @@ -22,9 +22,10 @@ librygel_media_engine_gst_la_SOURCES = \ rygel-wmv-transcoder.vala librygel_media_engine_gst_la_VALAFLAGS = \ - --pkg gstreamer-base-0.10 \ - --pkg gstreamer-pbutils-0.10 \ - --pkg gupnp-dlna-1.0 \ + --enable-experimental \ + --pkg gstreamer-base-1.0 \ + --pkg gstreamer-pbutils-1.0 \ + --pkg gupnp-dlna-1.1 \ --library rygel-media-engine-gst \ --use-header \ --header=rygel-media-engine-gst.h \ diff --git a/src/media-engines/gstreamer/rygel-audio-transcoder.vala b/src/media-engines/gstreamer/rygel-audio-transcoder.vala index d46880c9..76a503c3 100644 --- a/src/media-engines/gstreamer/rygel-audio-transcoder.vala +++ b/src/media-engines/gstreamer/rygel-audio-transcoder.vala @@ -21,6 +21,7 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ using Gst; +using Gst.PbUtils; using GUPnP; /** diff --git a/src/media-engines/gstreamer/rygel-avc-transcoder.vala b/src/media-engines/gstreamer/rygel-avc-transcoder.vala index d1a4e615..3e48efcf 100644 --- a/src/media-engines/gstreamer/rygel-avc-transcoder.vala +++ b/src/media-engines/gstreamer/rygel-avc-transcoder.vala @@ -35,7 +35,7 @@ internal class Rygel.AVCTranscoder : Rygel.VideoTranscoder { "video/x-h264,stream-format=avc"; private const string RESTRICTIONS = - "video/x-raw-yuv,framerate=(fraction)15/1,width=352,height=288"; + "framerate=(fraction)15/1,width=352,height=288"; public AVCTranscoder () { base ("video/mp4", diff --git a/src/media-engines/gstreamer/rygel-gst-data-source.vala b/src/media-engines/gstreamer/rygel-gst-data-source.vala index 3a94caf4..1e536f6c 100644 --- a/src/media-engines/gstreamer/rygel-gst-data-source.vala +++ b/src/media-engines/gstreamer/rygel-gst-data-source.vala @@ -108,11 +108,11 @@ internal class Rygel.GstDataSource : Rygel.DataSource, GLib.Object { // Bus handler var bus = this.pipeline.get_bus (); - this.bus_watch_id = bus.add_watch (this.bus_handler); + this.bus_watch_id = bus.add_watch (Priority.DEFAULT, this.bus_handler); } private void src_pad_added (Element src, Pad src_pad) { - var caps = src_pad.get_caps_reffed (); + var caps = src_pad.query_caps (null); var sink = this.pipeline.get_by_name (GstSink.NAME); Pad sink_pad; diff --git a/src/media-engines/gstreamer/rygel-gst-media-engine.vala b/src/media-engines/gstreamer/rygel-gst-media-engine.vala index af5b4cbb..867b9c2a 100644 --- a/src/media-engines/gstreamer/rygel-gst-media-engine.vala +++ b/src/media-engines/gstreamer/rygel-gst-media-engine.vala @@ -35,13 +35,12 @@ public class Rygel.GstMediaEngine : Rygel.MediaEngine { private GLib.List<Transcoder> transcoders = null; public GstMediaEngine () { - // Work-around vapi bug, fixed for GStreamer 1.0 unowned string[] args = null; Gst.init (ref args); gst_preset_set_app_dir (PRESET_DIR); - var discoverer = new GUPnP.DLNADiscoverer ((ClockTime) SECOND, + var discoverer = new GUPnPDLNA.Discoverer ((ClockTime) SECOND, true, false); foreach (var profile in discoverer.list_profiles ()) { diff --git a/src/media-engines/gstreamer/rygel-gst-sink.vala b/src/media-engines/gstreamer/rygel-gst-sink.vala index 690977e4..67e582da 100644 --- a/src/media-engines/gstreamer/rygel-gst-sink.vala +++ b/src/media-engines/gstreamer/rygel-gst-sink.vala @@ -24,8 +24,9 @@ */ using Gst; +using Gst.Base; -internal class Rygel.GstSink : BaseSink { +internal class Rygel.GstSink : Sink { public const string NAME = "http-gst-sink"; public const string PAD_NAME = "sink"; // High and low threshold for number of buffered chunks @@ -127,11 +128,16 @@ internal class Rygel.GstSink : BaseSink { return false; } - var to_send = int64.min (buffer.size, left); + var bufsize = buffer.get_size (); + var to_send = int64.min (bufsize, left); + MapInfo info; - this.source.data_available (buffer.data[0:to_send]); + buffer.map (out info, MapFlags.READ); + + this.source.data_available (info.data[0:to_send]); this.chunks_buffered++; this.bytes_sent += to_send; + buffer.unmap (info); return false; } diff --git a/src/media-engines/gstreamer/rygel-gst-transcoder.vala b/src/media-engines/gstreamer/rygel-gst-transcoder.vala index 1faea72c..70ccf619 100644 --- a/src/media-engines/gstreamer/rygel-gst-transcoder.vala +++ b/src/media-engines/gstreamer/rygel-gst-transcoder.vala @@ -24,6 +24,7 @@ */ using Gst; +using Gst.PbUtils; using GUPnP; /** @@ -35,7 +36,7 @@ internal abstract class Rygel.GstTranscoder : Rygel.Transcoder { protected set; default = DEFAULT_ENCODING_PRESET; } - private const string DECODE_BIN = "decodebin2"; + private const string DECODE_BIN = "decodebin"; private const string ENCODE_BIN = "encodebin"; private const string DEFAULT_ENCODING_PRESET = "Rygel DLNA preset"; @@ -121,7 +122,7 @@ internal abstract class Rygel.GstTranscoder : Rygel.Transcoder { sinkpad = this.encoder.get_compatible_pad (new_pad, null); if (sinkpad == null) { - var caps = new_pad.get_caps_reffed (); + var caps = new_pad.query_caps (null); Signal.emit_by_name (this.encoder, "request-pad", caps, out sinkpad); } diff --git a/src/media-engines/gstreamer/rygel-gst-utils.vala b/src/media-engines/gstreamer/rygel-gst-utils.vala index bbef78b1..4a440b3b 100644 --- a/src/media-engines/gstreamer/rygel-gst-utils.vala +++ b/src/media-engines/gstreamer/rygel-gst-utils.vala @@ -22,6 +22,7 @@ */ using Gst; +using Gst.PbUtils; internal errordomain Rygel.GstError { MISSING_PLUGIN, @@ -43,11 +44,8 @@ internal abstract class Rygel.GstUtils { } public static Element? create_source_for_uri (string uri) { - dynamic Element src = Element.make_from_uri (URIType.SRC, uri, null); - if (src != null) { - if (src.is_floating ()) { - src.ref_sink (); - } + try { + dynamic Element src = Element.make_from_uri (URIType.SRC, uri, null); if (src.get_class ().find_property ("blocksize") != null) { // The default is usually 4KiB which is not really big enough @@ -60,9 +58,11 @@ internal abstract class Rygel.GstUtils { // transmitting src.tcp_timeout = (int64) 60000000; } - } - return src; + return src; + } catch (Error error) { + return null; + } } public static void dump_encoding_profile (EncodingProfile profile, @@ -89,7 +89,7 @@ internal abstract class Rygel.GstUtils { } var features = ElementFactory.list_get_elements - (ELEMENT_FACTORY_TYPE_DEPAYLOADER, + (ElementFactoryType.DEPAYLOADER, Rank.NONE); features = ElementFactory.list_filter (features, caps, diff --git a/src/media-engines/gstreamer/rygel-l16-transcoder.vala b/src/media-engines/gstreamer/rygel-l16-transcoder.vala index 54516f5f..538d4052 100644 --- a/src/media-engines/gstreamer/rygel-l16-transcoder.vala +++ b/src/media-engines/gstreamer/rygel-l16-transcoder.vala @@ -40,13 +40,9 @@ internal class Rygel.L16Transcoder : Rygel.AudioTranscoder { ";rate=" + L16Transcoder.FREQUENCY.to_string () + ";channels=" + L16Transcoder.CHANNELS.to_string (); - var caps_str = "audio/x-raw-int" + + var caps_str = "audio/x-raw,format=S16BE" + ",channels=" + CHANNELS.to_string () + - ",rate=" + FREQUENCY.to_string () + - ",width=" + WIDTH.to_string () + - ",depth=" + DEPTH.to_string () + - ",signed=" + SIGNED.to_string () + - ",endianness=" + ENDIANNESS.to_string(); + ",rate=" + FREQUENCY.to_string (); base (mime_type, "LPCM", diff --git a/src/media-engines/gstreamer/rygel-mp2ts-transcoder.vala b/src/media-engines/gstreamer/rygel-mp2ts-transcoder.vala index b3ffd70b..da59e924 100644 --- a/src/media-engines/gstreamer/rygel-mp2ts-transcoder.vala +++ b/src/media-engines/gstreamer/rygel-mp2ts-transcoder.vala @@ -51,7 +51,7 @@ internal class Rygel.MP2TSTranscoder : Rygel.VideoTranscoder { "video/mpeg,mpegversion=2,systemstream=false"; private const string RESTRICTION_TEMPLATE = - "video/x-raw-yuv,framerate=(fraction)%d/1,width=%d,height=%d"; + "framerate=(fraction)%d/1,width=%d,height=%d"; private MP2TSProfile profile; diff --git a/src/media-engines/gstreamer/rygel-video-transcoder.vala b/src/media-engines/gstreamer/rygel-video-transcoder.vala index f01da21b..7589ded2 100644 --- a/src/media-engines/gstreamer/rygel-video-transcoder.vala +++ b/src/media-engines/gstreamer/rygel-video-transcoder.vala @@ -20,6 +20,7 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ using Gst; +using Gst.PbUtils; using GUPnP; /** diff --git a/src/plugins/gst-launch/Makefile.am b/src/plugins/gst-launch/Makefile.am index 07009bae..bdc26193 100644 --- a/src/plugins/gst-launch/Makefile.am +++ b/src/plugins/gst-launch/Makefile.am @@ -15,7 +15,8 @@ librygel_gst_launch_la_SOURCES = \ $(top_srcdir)/src/media-engines/gstreamer/rygel-media-engine-gst.vapi librygel_gst_launch_la_VALAFLAGS = \ - --pkg gstreamer-0.10 \ + --enable-experimental \ + --pkg gstreamer-1.0 \ $(RYGEL_COMMON_SERVER_PLUGIN_VALAFLAGS) librygel_gst_launch_la_LIBADD = \ $(LIBGSTREAMER_LIBS) \ diff --git a/src/plugins/media-export/Makefile.am b/src/plugins/media-export/Makefile.am index 3294d1fe..5c9338b8 100644 --- a/src/plugins/media-export/Makefile.am +++ b/src/plugins/media-export/Makefile.am @@ -42,9 +42,10 @@ librygel_media_export_la_SOURCES = \ rygel-media-export-collate.c librygel_media_export_la_VALAFLAGS = \ - --pkg gupnp-dlna-1.0 \ - --pkg gstreamer-tag-0.10 \ - --pkg gstreamer-app-0.10 \ + --enable-experimental \ + --pkg gupnp-dlna-1.1 \ + --pkg gstreamer-tag-1.0 \ + --pkg gstreamer-app-1.0 \ --pkg sqlite3 \ $(RYGEL_COMMON_SERVER_PLUGIN_VALAFLAGS) diff --git a/src/plugins/media-export/rygel-media-export-harvesting-task.vala b/src/plugins/media-export/rygel-media-export-harvesting-task.vala index a0fdb67b..40470faa 100644 --- a/src/plugins/media-export/rygel-media-export-harvesting-task.vala +++ b/src/plugins/media-export/rygel-media-export-harvesting-task.vala @@ -282,7 +282,7 @@ public class Rygel.MediaExport.HarvestingTask : Rygel.StateMachine, } private void on_extracted_cb (File file, - GUPnP.DLNAInformation? dlna, + GUPnPDLNA.Information? dlna, FileInfo file_info) { if (this.cancellable.is_cancelled ()) { this.completed (); diff --git a/src/plugins/media-export/rygel-media-export-item.vala b/src/plugins/media-export/rygel-media-export-item.vala index c8b46e35..90c100b2 100644 --- a/src/plugins/media-export/rygel-media-export-item.vala +++ b/src/plugins/media-export/rygel-media-export-item.vala @@ -23,6 +23,7 @@ using GUPnP; using Gst; +using Gst.PbUtils; /** * Represents MediaExport item. @@ -55,15 +56,17 @@ namespace Rygel.MediaExport.ItemFactory { public static MediaItem? create_from_info (MediaContainer parent, File file, - GUPnP.DLNAInformation dlna_info, + GUPnPDLNA.Information dlna_info, FileInfo file_info) { MediaItem item; string id = MediaCache.get_id (file); GLib.List<DiscovererAudioInfo> audio_streams; GLib.List<DiscovererVideoInfo> video_streams; - audio_streams = dlna_info.info.get_audio_streams (); - video_streams = dlna_info.info.get_video_streams (); + audio_streams = (GLib.List<DiscovererAudioInfo>) + dlna_info.info.get_audio_streams (); + video_streams = (GLib.List<DiscovererVideoInfo>) + dlna_info.info.get_video_streams (); if (audio_streams == null && video_streams == null) { debug ("%s had neither audio nor video/picture " + @@ -106,9 +109,9 @@ namespace Rygel.MediaExport.ItemFactory { } } - private static void fill_audio_item (AudioItem item, - DLNAInformation dlna_info, - DiscovererAudioInfo? audio_info) { + private static void fill_audio_item (AudioItem item, + GUPnPDLNA.Information dlna_info, + DiscovererAudioInfo? audio_info) { if (dlna_info.info.get_duration () > 0) { item.duration = (long) (dlna_info.info.get_duration () / Gst.SECOND); } else { @@ -118,7 +121,7 @@ namespace Rygel.MediaExport.ItemFactory { if (audio_info != null) { if (audio_info.get_tags () != null) { uint tmp; - audio_info.get_tags ().get_uint (TAG_BITRATE, out tmp); + audio_info.get_tags ().get_uint (Tags.BITRATE, out tmp); item.bitrate = (int) tmp / 8; } item.channels = (int) audio_info.get_channels (); @@ -127,12 +130,12 @@ namespace Rygel.MediaExport.ItemFactory { } - private static MediaItem fill_video_item (VideoItem item, - File file, - DLNAInformation dlna_info, - DiscovererVideoInfo video_info, - DiscovererAudioInfo? audio_info, - FileInfo file_info) { + private static MediaItem fill_video_item (VideoItem item, + File file, + GUPnPDLNA.Information dlna_info, + DiscovererVideoInfo video_info, + DiscovererAudioInfo? audio_info, + FileInfo file_info) { fill_audio_item (item as AudioItem, dlna_info, audio_info); fill_media_item (item, file, dlna_info, file_info); @@ -145,11 +148,11 @@ namespace Rygel.MediaExport.ItemFactory { return item; } - private static MediaItem fill_photo_item (PhotoItem item, - File file, - DLNAInformation dlna_info, - DiscovererVideoInfo video_info, - FileInfo file_info) { + private static MediaItem fill_photo_item (PhotoItem item, + File file, + GUPnPDLNA.Information dlna_info, + DiscovererVideoInfo video_info, + FileInfo file_info) { fill_media_item (item, file, dlna_info, file_info); item.width = (int) video_info.get_width (); @@ -161,74 +164,77 @@ namespace Rygel.MediaExport.ItemFactory { return item; } - private static MediaItem fill_music_item (MusicItem item, - File file, - DLNAInformation dlna_info, - DiscovererAudioInfo? audio_info, - FileInfo file_info) { + private static MediaItem fill_music_item (MusicItem item, + File file, + GUPnPDLNA.Information dlna_info, + DiscovererAudioInfo? audio_info, + FileInfo file_info) { fill_audio_item (item as AudioItem, dlna_info, audio_info); fill_media_item (item, file, dlna_info, file_info); - if (audio_info != null) { - if (audio_info.get_tags () != null) { - unowned Gst.Buffer buffer; - audio_info.get_tags ().get_buffer (TAG_IMAGE, out buffer); - if (buffer != null) { - var structure = buffer.caps.get_structure (0); - int image_type; - structure.get_enum ("image-type", - typeof (Gst.TagImageType), - out image_type); - switch (image_type) { - case TagImageType.UNDEFINED: - case TagImageType.FRONT_COVER: - var store = MediaArtStore.get_default (); - var thumb = store.get_media_art_file ("album", - item, - true); - try { - var writer = new JPEGWriter (); - writer.write (buffer, thumb); - } catch (Error error) {} - break; - default: - break; - } - } - } + if (audio_info == null) { + return item; + } + string artist; + dlna_info.info.get_tags ().get_string (Tags.ARTIST, out artist); + item.artist = artist; - string artist; - dlna_info.info.get_tags ().get_string (TAG_ARTIST, out artist); - item.artist = artist; + string album; + dlna_info.info.get_tags ().get_string (Tags.ALBUM, out album); + item.album = album; - string album; - dlna_info.info.get_tags ().get_string (TAG_ALBUM, out album); - item.album = album; + string genre; + dlna_info.info.get_tags ().get_string (Tags.GENRE, out genre); + item.genre = genre; - string genre; - dlna_info.info.get_tags ().get_string (TAG_GENRE, out genre); - item.genre = genre; + uint tmp; + dlna_info.info.get_tags ().get_uint (Tags.ALBUM_VOLUME_NUMBER, + out tmp); + item.disc = (int) tmp; - uint tmp; - dlna_info.info.get_tags ().get_uint (TAG_ALBUM_VOLUME_NUMBER, - out tmp); - item.disc = (int) tmp; + dlna_info.info.get_tags() .get_uint (Tags.TRACK_NUMBER, out tmp); + item.track_number = (int) tmp; - dlna_info.info.get_tags() .get_uint (TAG_TRACK_NUMBER, out tmp); - item.track_number = (int) tmp; + if (audio_info.get_tags () == null) { + return item; } +/* Sample sample; + audio_info.get_tags ().get_sample (Tags.IMAGE, out sample); + if (sample == null) { + return item; + } + var structure = sample.get_caps ().get_structure (0); + + int image_type; + structure.get_enum ("image-type", + typeof (Gst.Tag.ImageType), + out image_type); + switch (image_type) { + case Tag.ImageType.UNDEFINED: + case Tag.ImageType.FRONT_COVER: + var store = MediaArtStore.get_default (); + var thumb = store.get_media_art_file ("album", item, true); + try { + var writer = new JPEGWriter (); + writer.write (sample.get_buffer (), thumb); + } catch (Error error) {} + break; + default: + break; + } */ + return item; } - private static void fill_media_item (MediaItem item, - File file, - DLNAInformation dlna_info, - FileInfo file_info) { + private static void fill_media_item (MediaItem item, + File file, + GUPnPDLNA.Information dlna_info, + FileInfo file_info) { string title = null; if (dlna_info.info.get_tags () == null || - !dlna_info.info.get_tags ().get_string (TAG_TITLE, out title)) { + !dlna_info.info.get_tags ().get_string (Tags.TITLE, out title)) { title = file_info.get_display_name (); } @@ -236,7 +242,8 @@ namespace Rygel.MediaExport.ItemFactory { if (dlna_info.info.get_tags () != null) { GLib.Date? date; - if (dlna_info.info.get_tags ().get_date (TAG_DATE, out date)) { + if (dlna_info.info.get_tags ().get_date (Tags.DATE, out date) && + date.valid ()) { char[] datestr = new char[30]; date.strftime (datestr, "%F"); item.date = (string) datestr; diff --git a/src/plugins/media-export/rygel-media-export-jpeg-writer.vala b/src/plugins/media-export/rygel-media-export-jpeg-writer.vala index 675bfd26..d5162fa9 100644 --- a/src/plugins/media-export/rygel-media-export-jpeg-writer.vala +++ b/src/plugins/media-export/rygel-media-export-jpeg-writer.vala @@ -30,15 +30,15 @@ using Gst; */ internal class Rygel.MediaExport.JPEGWriter : GLib.Object { private Bin bin; - private AppSrc appsrc; + private App.Src appsrc; private MainLoop loop; private dynamic Element sink; public JPEGWriter () throws Error { - this.bin = Gst.parse_launch ("appsrc name=src ! decodebin2 ! " + - "ffmpegcolorspace ! " + + this.bin = Gst.parse_launch ("appsrc name=src ! decodebin ! " + + "autovideoconvert ! " + "jpegenc ! giosink name=sink") as Bin; - this.appsrc = bin.get_by_name ("src") as AppSrc; + this.appsrc = bin.get_by_name ("src") as App.Src; this.sink = bin.get_by_name ("sink"); var bus = bin.get_bus (); bus.add_signal_watch (); @@ -55,12 +55,13 @@ internal class Rygel.MediaExport.JPEGWriter : GLib.Object { * * FIXME This uses a nested main-loop to block which is ugly. */ - public void write (Gst.Buffer buffer, File file) { +/* public void write (Gst.Buffer buffer, File file) { this.sink.file = file; - this.appsrc.push_buffer (buffer); + var new_buffer = Gst.buffer_copy (buffer); + this.appsrc.push_buffer (new_buffer); this.appsrc.end_of_stream (); this.bin.set_state (State.PLAYING); this.loop.run (); this.bin.set_state (State.NULL); - } + } */ } diff --git a/src/plugins/media-export/rygel-media-export-metadata-extractor.vala b/src/plugins/media-export/rygel-media-export-metadata-extractor.vala index 8c292126..7185ac79 100644 --- a/src/plugins/media-export/rygel-media-export-metadata-extractor.vala +++ b/src/plugins/media-export/rygel-media-export-metadata-extractor.vala @@ -24,6 +24,7 @@ using Gst; +using Gst.PbUtils; using Gee; using GUPnP; @@ -35,7 +36,7 @@ using GUPnP; public class Rygel.MediaExport.MetadataExtractor: GLib.Object { /* Signals */ public signal void extraction_done (File file, - GUPnP.DLNAInformation? dlna, + GUPnPDLNA.Information? dlna, FileInfo file_info); /** @@ -43,7 +44,7 @@ public class Rygel.MediaExport.MetadataExtractor: GLib.Object { */ public signal void error (File file, Error err); - private GUPnP.DLNADiscoverer discoverer; + private GUPnPDLNA.Discoverer discoverer; /** * We export a GLib.File-based API but GstDiscoverer works with URIs, so * we store uri->GLib.File mappings in this hashmap, so that we can get @@ -76,7 +77,7 @@ public class Rygel.MediaExport.MetadataExtractor: GLib.Object { string uri = file.get_uri (); this.file_hash.set (uri, file); var gst_timeout = (ClockTime) (this.timeout * Gst.SECOND); - this.discoverer = new GUPnP.DLNADiscoverer (gst_timeout, + this.discoverer = new GUPnPDLNA.Discoverer (gst_timeout, true, true); this.discoverer.done.connect (on_done); @@ -87,7 +88,7 @@ public class Rygel.MediaExport.MetadataExtractor: GLib.Object { } } - private void on_done (GUPnP.DLNAInformation dlna, + private void on_done (GUPnPDLNA.Information dlna, GLib.Error err) { this.discoverer.done.disconnect (on_done); this.discoverer = null; @@ -101,13 +102,13 @@ public class Rygel.MediaExport.MetadataExtractor: GLib.Object { this.file_hash.unset (dlna.info.get_uri ()); - if ((dlna.info.get_result () & Gst.DiscovererResult.TIMEOUT) != 0) { + if ((dlna.info.get_result () & DiscovererResult.TIMEOUT) != 0) { debug ("Extraction timed out on %s", file.get_uri ()); // set dlna to null to extract basic file information dlna = null; } else if ((dlna.info.get_result () & - Gst.DiscovererResult.ERROR) != 0) { + DiscovererResult.ERROR) != 0) { this.error (file, err); return; @@ -116,8 +117,9 @@ public class Rygel.MediaExport.MetadataExtractor: GLib.Object { this.extract_basic_information (file, dlna); } - private void extract_basic_information (File file, - DLNAInformation? dlna = null) { + private void extract_basic_information + (File file, + GUPnPDLNA.Information? dlna = null) { try { FileInfo file_info; diff --git a/tests/Makefile.am b/tests/Makefile.am index 95f05c8b..d0955476 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -16,6 +16,7 @@ AM_CFLAGS = $(LIBGUPNP_CFLAGS) \ LDADD = $(LIBGUPNP_LIBS) \ $(LIBGSSDP_LIBS) \ + $(LIBXML_LIBS) \ $(LIBGUPNP_AV_LIBS) \ $(LIBGSTREAMER_LIBS) \ $(GSTREAMER_BASE_LIBS) \ diff --git a/tests/rygel-playbin-renderer-test.vala b/tests/rygel-playbin-renderer-test.vala index 94d35ea7..194ed5d4 100644 --- a/tests/rygel-playbin-renderer-test.vala +++ b/tests/rygel-playbin-renderer-test.vala @@ -29,21 +29,21 @@ private class Rygel.PlaybinRendererTest : GLib.Object { Gst.init (ref args); var test = new PlaybinRendererTest (); - test.test_with_default_gstplaybin2 (); - test.test_with_existing_gstplaybin2 (); + test.test_with_default_gstplaybin (); + test.test_with_existing_gstplaybin (); return 0; } - public void test_with_default_gstplaybin2() { + public void test_with_default_gstplaybin() { var renderer = new Rygel.Playbin.Renderer ("test playbin renderer"); assert (renderer != null); var player = Rygel.Playbin.Player.get_default (); assert (player.playbin != null); } - public void test_with_existing_gstplaybin2() { - var element = Gst.ElementFactory.make ("playbin2", null); + public void test_with_existing_gstplaybin() { + var element = Gst.ElementFactory.make ("playbin", null); var renderer = new Rygel.Playbin.Renderer.wrap (element, "test playbin renderer"); assert (renderer != null); var player = Rygel.Playbin.Player.get_default (); |