[shotwell] Port to GStreamer 1.0 (Shotwell already links against webkitgtk3

Thomas Moschny thm at fedoraproject.org
Fri Oct 5 22:16:31 UTC 2012


commit 0e7365114defffdb8426b0fd9105530ad0fb3cff
Author: Bastien Nocera <hadess at hadess.net>
Date:   Thu Sep 27 13:25:36 2012 +0200

    Port to GStreamer 1.0 (Shotwell already links against webkitgtk3
    
      which uses GStreamer 1.0)

 0001-Port-to-GStreamer-1.0.patch |  159 ++++++++++++++++++++++++++++++++++++++
 shotwell.spec                    |   13 +++-
 2 files changed, 169 insertions(+), 3 deletions(-)
---
diff --git a/0001-Port-to-GStreamer-1.0.patch b/0001-Port-to-GStreamer-1.0.patch
new file mode 100644
index 0000000..7d7ac74
--- /dev/null
+++ b/0001-Port-to-GStreamer-1.0.patch
@@ -0,0 +1,159 @@
+From 9cb0726dd0873e3664f3589aabadea8bb7c8ff37 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Olivier=20Cr=C3=AAte?= <olivier.crete at collabora.com>
+Date: Tue, 25 Sep 2012 18:15:02 -0400
+Subject: [PATCH] Port to GStreamer 1.0
+
+---
+ Makefile                                    | 21 +++++++++++----------
+ src/VideoSupport.vala                       |  8 ++++----
+ src/libshotwell.deps                        |  5 +++--
+ thumbnailer/shotwell-video-thumbnailer.vala | 18 ++++++++----------
+ 4 files changed, 26 insertions(+), 26 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 1bd09e0..06059e3 100644
+--- a/Makefile
++++ b/Makefile
+@@ -37,7 +37,7 @@ EXTRAS_SUPPORTED_LANGUAGES=fr de it es pl et sv sk lv pt bg bn nl da zh_CN el ru
+ LOCAL_LANG_DIR=locale-langpack
+ SYSTEM_LANG_DIR := $(DESTDIR)$(PREFIX)/share/locale
+ 
+-VALAFLAGS := -g --enable-checking --thread --fatal-warnings --enable-deprecated $(USER_VALAFLAGS)
++VALAFLAGS := -g --enable-checking --thread --enable-deprecated $(USER_VALAFLAGS)
+ ifdef UNITY_SUPPORT
+ VALAFLAGS := $(VALAFLAGS) --define UNITY_SUPPORT
+ endif
+@@ -293,9 +293,9 @@ EXT_PKGS = \
+ 	gio-unix-2.0 \
+ 	glib-2.0 \
+ 	gmodule-2.0 \
+-	gstreamer-0.10 \
+-	gstreamer-base-0.10 \
+-	gstreamer-pbutils-0.10 \
++	gstreamer-1.0 \
++	gstreamer-base-1.0 \
++	gstreamer-pbutils-1.0 \
+ 	gtk+-3.0 \
+ 	gudev-1.0 \
+ 	libexif \
+@@ -314,8 +314,9 @@ endif
+ THUMBNAILER_PKGS = \
+     gtk+-3.0 \
+     gee-1.0 \
+-    gstreamer-0.10 \
+-    gstreamer-base-0.10
++    gstreamer-1.0 \
++    gstreamer-base-1.0 \
++    gstreamer-app-1.0 \
+ 
+ DIRECT_LIBS =
+ 
+@@ -325,10 +326,10 @@ EXT_PKG_VERSIONS = \
+ 	gio-unix-2.0 >= 2.20 \
+ 	glib-2.0 >= $(MIN_GLIB_VERSION) \
+ 	gmodule-2.0 >= 2.24.0 \
+-	gstreamer-0.10 >= 0.10.28 \
+-	gstreamer-base-0.10 >= 0.10.28 \
+-	gstreamer-plugins-base-0.10 >= 0.10.32 \
+-	gstreamer-pbutils-0.10 >= 0.10.32 \
++	gstreamer-1.0 >= 1.0.0 \
++	gstreamer-base-1.0 >= 1.0.0 \
++	gstreamer-plugins-base-1.0 >= 1.0.0 \
++	gstreamer-pbutils-1.0 >= 1.0.0 \
+ 	gtk+-3.0 >= 3.0.11 \
+ 	gudev-1.0 >= 145 \
+ 	libexif >= 0.6.16 \
+diff --git a/src/VideoSupport.vala b/src/VideoSupport.vala
+index deb45e2..f679bd0 100644
+--- a/src/VideoSupport.vala
++++ b/src/VideoSupport.vala
+@@ -163,8 +163,8 @@ public class VideoReader {
+                 file.get_path()));
+         
+         try {
+-            Gst.Discoverer d = new Gst.Discoverer((Gst.ClockTime) (Gst.SECOND * 5));
+-            Gst.DiscovererInfo info = d.discover_uri(file.get_uri());
++            Gst.PbUtils.Discoverer d = new Gst.PbUtils.Discoverer((Gst.ClockTime) (Gst.SECOND * 5));
++            Gst.PbUtils.DiscovererInfo info = d.discover_uri(file.get_uri());
+             
+             clip_duration = ((double) info.get_duration()) / 1000000000.0;
+             
+@@ -172,7 +172,7 @@ public class VideoReader {
+             // TODO: Note that TAG_DATE can be changed to TAG_DATE_TIME in the future
+             // (and the corresponding output struct) in order to implement #2836.
+             Date? video_date = null;
+-            if (info.get_tags() != null && info.get_tags().get_date(Gst.TAG_DATE, out video_date)) {
++            if (info.get_tags() != null && info.get_tags().get_date(Gst.Tags.DATE, out video_date)) {
+                 timestamp = new DateTime.local(video_date.get_year(), video_date.get_month(), 
+                     video_date.get_day(), 0, 0, 0);
+             }
+@@ -323,7 +323,7 @@ public class Video : VideoSource, Flaggable, Monitorable, Dateable {
+         Gst.init(ref fake_unowned_args);
+         
+         int saved_state = Config.Facade.get_instance().get_video_interpreter_state_cookie();
+-        current_state = (int) Gst.Registry.get_default().get_feature_list_cookie();
++        current_state = (int) Gst.Registry.get().get_feature_list_cookie();
+         if (saved_state == Config.Facade.NO_VIDEO_INTERPRETER_STATE) {
+             message("interpreter state cookie not found; assuming all video thumbnails are out of date");
+             interpreter_state_changed = true;
+diff --git a/thumbnailer/shotwell-video-thumbnailer.vala b/thumbnailer/shotwell-video-thumbnailer.vala
+index a4d7dc2..c12784e 100644
+--- a/thumbnailer/shotwell-video-thumbnailer.vala
++++ b/thumbnailer/shotwell-video-thumbnailer.vala
+@@ -10,11 +10,7 @@
+ // Shotwell Thumbnailer takes in a video file and returns a thumbnail to stdout.  This is
+ // a replacement for totem-video-thumbnailer
+ class ShotwellThumbnailer {
+-    const string caps_string = """video/x-raw-rgb,bpp = (int) 32, depth = (int) 32,
+-                                      endianness = (int) BIG_ENDIAN,
+-                                      red_mask = (int)   0xFF000000,
+-                                      green_mask = (int) 0x00FF0000,
+-                                      blue_mask = (int)  0x0000FF00,
++    const string caps_string = """video/x-raw, format=RGBA,
+                                       width = (int) [ 1, max ],
+                                       height = (int) [ 1, max ],
+                                       framerate = (fraction) [ 0, max ]""";
+@@ -36,7 +32,7 @@ class ShotwellThumbnailer {
+             return 1;
+         }
+         
+-        descr = "filesrc location=\"%s\" ! decodebin2 ! ffmpegcolorspace ! ".printf(args[1]) + 
++        descr = "filesrc location=\"%s\" ! decodebin ! videoconvert ! ".printf(args[1]) + 
+             "appsink name=sink caps=\"%s\"".printf(caps_string);
+         
+         try {
+@@ -69,7 +65,7 @@ class ShotwellThumbnailer {
+             // by seeking to somewhere else we have a bigger chance of getting something
+             // more interesting. An optimization would be to detect black images and then
+             // seek a little more.
+-            position = (int64) (Gst.Format.PERCENT_MAX * 0.05);
++            position = (int64) (Gst.FORMAT_PERCENT_MAX * 0.05);
+             pipeline.seek_simple(Gst.Format.PERCENT, Gst.SeekFlags.KEY_UNIT | Gst.SeekFlags.FLUSH , position);
+             
+             // Get the preroll buffer from appsink, this block untils appsink really
+@@ -86,7 +82,7 @@ class ShotwellThumbnailer {
+                 // that it can only be an rgb buffer. The only thing we have not specified
+                 // on the caps is the height, which is dependant on the pixel-aspect-ratio
+                 // of the source material.
+-                caps = buffer.get_caps();
++                caps = (sink as Gst.App.Sink).caps;
+                 if (caps == null) {
+                     stderr.printf("could not get snapshot format\n");
+                     return 5;
+@@ -104,9 +100,11 @@ class ShotwellThumbnailer {
+                 
+                 // Create pixmap from buffer and save, gstreamer video buffers have a stride
+                 // that is rounded up to the nearest multiple of 4.
+-                pixbuf = new Gdk.Pixbuf.from_data(buffer.data, Gdk.Colorspace.RGB, true, 8, 
++		Gst.MapInfo info;
++		buffer.map(out info, Gst.MapFlags.READ);
++                pixbuf = new Gdk.Pixbuf.from_data(info.data, Gdk.Colorspace.RGB, true, 8, 
+                     width, height, width * 4, null);
+-                
++                buffer.unmap(info);
+                 // Save the pixbuf.
+                 pixbuf.save("/dev/stdout", "png");
+             } else {
+-- 
+1.7.11.4
+
diff --git a/shotwell.spec b/shotwell.spec
index c926266..ccd044f 100644
--- a/shotwell.spec
+++ b/shotwell.spec
@@ -1,6 +1,6 @@
 Name:           shotwell
 Version:        0.13.0
-Release:        1%{?dist}
+Release:        2%{?dist}
 Summary:        A photo organizer for the GNOME desktop
 
 Group:          Applications/Multimedia
@@ -18,6 +18,8 @@ Source1:        shotwell-icons.tar.bz2
 Patch0:         shotwell-usrmove.patch
 # http://redmine.yorba.org/issues/5860
 Patch1:         shotwell-0.13.0-po.patch
+# http://redmine.yorba.org/issues/5548
+Patch2:         0001-Port-to-GStreamer-1.0.patch
 
 BuildRequires:  vala-devel >= 0.17.2
 BuildRequires:  LibRaw-devel
@@ -27,8 +29,8 @@ BuildRequires:  pkgconfig(glib-2.0)
 BuildRequires:  pkgconfig(atk)
 BuildRequires:  pkgconfig(gee-1.0)
 BuildRequires:  pkgconfig(gexiv2)
-BuildRequires:  pkgconfig(gstreamer-base-0.10)
-BuildRequires:  pkgconfig(gstreamer-plugins-base-0.10)
+BuildRequires:  pkgconfig(gstreamer-base-1.0)
+BuildRequires:  pkgconfig(gstreamer-plugins-base-1.0)
 BuildRequires:  pkgconfig(gtk+-3.0)
 BuildRequires:  pkgconfig(gudev-1.0)
 BuildRequires:  pkgconfig(json-glib-1.0)
@@ -53,6 +55,7 @@ them, and share them with others.
 %setup -q
 %patch0 -p1 -b .usrmove
 %patch1 -p1
+%patch2 -p1
 
 %build
 ./configure \
@@ -115,6 +118,10 @@ gtk-update-icon-cache --quiet %{_datadir}/icons/hicolor &>/dev/null || :
 
 
 %changelog
+* Thu Sep 27 2012 Bastien Nocera <bnocera at redhat.com> 0.13.0-2
+- Port to GStreamer 1.0 (Shotwell already links against webkitgtk3
+  which uses GStreamer 1.0)
+
 * Thu Sep 20 2012 Thomas Moschny <thomas.moschny at gmx.de> - 0.13.0-1
 - Update to 0.13.0.
 - Remove patches applied upstream.


More information about the scm-commits mailing list