diff options
-rw-r--r-- | configure.ac | 3 | ||||
-rw-r--r-- | src/plugins/media-export/Makefile.am | 2 | ||||
-rw-r--r-- | src/plugins/media-export/rygel-media-export-extractor.vala | 5 | ||||
-rw-r--r-- | src/plugins/media-export/rygel-media-export-image-extractor.vala | 67 |
4 files changed, 76 insertions, 1 deletions
diff --git a/configure.ac b/configure.ac index 35e77a73..50812e1d 100644 --- a/configure.ac +++ b/configure.ac @@ -264,7 +264,8 @@ AS_IF([test "x$with_media_engine" = "xgstreamer"], libsoup-2.4 >= $LIBSOUP_REQUIRED sqlite3 >= $LIBSQLITE3_REQUIRED libxml-2.0 >= $LIBXML_REQUIRED - libmediaart-2.0 >= $MEDIAART_REQUIRED]) + libmediaart-2.0 >= $MEDIAART_REQUIRED + gdk-pixbuf-2.0]) RYGEL_PLUGIN_MEDIA_EXPORT_DEPS_VALAFLAGS="$RYGEL_COMMON_MODULES_VALAFLAGS --pkg gupnp-dlna-2.0 --pkg gupnp-dlna-gst-2.0 --pkg gstreamer-tag-1.0 --pkg gstreamer-app-1.0 --pkg gstreamer-pbutils-1.0 --pkg sqlite3 --pkg libmediaart-2.0" AC_SUBST([RYGEL_PLUGIN_MEDIA_EXPORT_DEPS_VALAFLAGS]) ]) diff --git a/src/plugins/media-export/Makefile.am b/src/plugins/media-export/Makefile.am index c6817979..3724edac 100644 --- a/src/plugins/media-export/Makefile.am +++ b/src/plugins/media-export/Makefile.am @@ -12,6 +12,7 @@ mx_extract_SOURCES = \ rygel-media-export-extract.vala \ rygel-media-export-dvd-parser.vala \ rygel-media-export-playlist-extractor.vala \ + rygel-media-export-image-extractor.vala \ rygel-media-export-extractor.vala \ rygel-media-export-generic-extractor.vala @@ -19,6 +20,7 @@ mx_extract_VALAFLAGS = \ --enable-experimental \ --pkg posix \ --pkg gio-unix-2.0 \ + --pkg gdk-pixbuf-2.0 \ $(RYGEL_PLUGIN_MEDIA_EXPORT_DEPS_VALAFLAGS) \ $(RYGEL_COMMON_VALAFLAGS) diff --git a/src/plugins/media-export/rygel-media-export-extractor.vala b/src/plugins/media-export/rygel-media-export-extractor.vala index 3f1fc834..97dfed1f 100644 --- a/src/plugins/media-export/rygel-media-export-extractor.vala +++ b/src/plugins/media-export/rygel-media-export-extractor.vala @@ -72,6 +72,11 @@ public class Rygel.MediaExport.Extractor : Object { return new PlaylistExtractor (file); } + if (content_type == "image/jpeg" || + content_type == "image/png") { + return new ImageExtractor (file); + } + return new GenericExtractor (file); } diff --git a/src/plugins/media-export/rygel-media-export-image-extractor.vala b/src/plugins/media-export/rygel-media-export-image-extractor.vala new file mode 100644 index 00000000..7652266b --- /dev/null +++ b/src/plugins/media-export/rygel-media-export-image-extractor.vala @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2016 Jens Georg <mail@jensge.org> + * + * Author: Jens Georg <mail@jensge.org> + * + * This file is part of Rygel. + * + * Rygel is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * Rygel is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +using Gdk; + +internal class Rygel.MediaExport.ImageExtractor : Extractor { + public ImageExtractor (File file) { + GLib.Object (file : file); + } + + public override async void run () throws Error { + int width; + int height; + + var format = yield Pixbuf.get_file_info_async (file.get_path (), + null, + out width, + out height); + + var mime = format.get_mime_types ()[0]; + // TODO: Use enhanced EXIF information? + this.serialized_info.insert ("UPnPClass", "s", UPNP_CLASS_PHOTO); + this.serialized_info.insert ("MimeType", "s", mime); + + this.serialized_info.insert ("VideoWidth", "i", width); + this.serialized_info.insert ("VideoHeight", "i", height); + + if (mime == "image/png") { + if (width <= 4096 && height <= 4096) { + this.serialized_info.insert ("DLNAProfile", "s", "PNG_LRG"); + } else { + var profile = "PNG_RES_%d_%d".printf (width, height); + this.serialized_info.insert ("DLNAProfile", "s", profile); + } + } else { + if (width <= 640 && height <= 480) { + this.serialized_info.insert ("DLNAProfile", "s", "JPG_SM"); + } else if (width <= 1024 && height <= 768) { + this.serialized_info.insert ("DLNAProfile", "s", "JPG_MED"); + } else if (width <= 4096 && height <= 4096) { + this.serialized_info.insert ("DLNAProfile", "s", "JPEG_LRG"); + } else { + var profile = "JPEG_RES_%d_%d".printf (width, height); + this.serialized_info.insert ("DLNAProfile", "s", profile); + } + } + } +} |