diff options
author | root <root@rshg054.dnsready.net> | 2013-03-20 00:06:15 -0700 |
---|---|---|
committer | root <root@rshg054.dnsready.net> | 2013-03-20 00:06:15 -0700 |
commit | 3cdbec41955c7232e91ef149f77ce9ed215a10fa (patch) | |
tree | fed17e099ae656f291e56a1d4a7be731210b6a09 /community/shotwell | |
parent | b54c21859be3590a319ceade1f58d0b89ac5ef32 (diff) |
Wed Mar 20 00:06:15 PDT 2013
Diffstat (limited to 'community/shotwell')
-rw-r--r-- | community/shotwell/0001-Port-to-GStreamer-1.0.patch | 219 | ||||
-rw-r--r-- | community/shotwell/PKGBUILD | 26 | ||||
-rw-r--r-- | community/shotwell/regenerate-video-thumbnails.patch | 154 |
3 files changed, 7 insertions, 392 deletions
diff --git a/community/shotwell/0001-Port-to-GStreamer-1.0.patch b/community/shotwell/0001-Port-to-GStreamer-1.0.patch deleted file mode 100644 index a7a2cbf4c..000000000 --- a/community/shotwell/0001-Port-to-GStreamer-1.0.patch +++ /dev/null @@ -1,219 +0,0 @@ -From 4db67e385c9c2d89947077f1520aa31af2538d65 Mon Sep 17 00:00:00 2001 -From: Alban Browaeys <prahal@yahoo.com> -Date: Wed, 09 Jan 2013 01:11:27 +0000 -Subject: Ports Shotwell to GStreamer 1.0. Closes #6055. - ---- -diff --git a/Makefile b/Makefile -index 2488f82..5a7e262 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 --fatal-warnings --enable-deprecated --enable-experimental $(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,8 @@ endif - THUMBNAILER_PKGS = \ - gtk+-3.0 \ - gee-1.0 \ -- gstreamer-0.10 \ -- gstreamer-base-0.10 -+ gstreamer-1.0 \ -+ gstreamer-base-1.0 - - DIRECT_LIBS = - -@@ -325,10 +325,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 \ -@@ -683,7 +683,7 @@ $(VALA_STAMP): $(EXPANDED_SRC_FILES) $(EXPANDED_VAPI_FILES) $(GPHOTO_VAPI_FILE) - $(call check_valac_version) - @echo Compiling Vala code... - @mkdir -p $(BUILD_DIR) -- @$(VALAC) --ccode --directory=$(BUILD_DIR) --basedir=src \ -+ $(VALAC) --ccode --directory=$(BUILD_DIR) --basedir=src \ - $(foreach pkg,$(VALA_PKGS),--pkg=$(pkg)) \ - $(foreach vapidir,$(VAPI_DIRS),--vapidir=$(vapidir)) \ - $(foreach def,$(DEFINES),-X -D$(def)) \ -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 79a2d7e..ae1e537 100644 ---- a/thumbnailer/shotwell-video-thumbnailer.vala -+++ b/thumbnailer/shotwell-video-thumbnailer.vala -@@ -10,22 +10,15 @@ - // 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, -- width = (int) [ 1, max ], -- height = (int) [ 1, max ], -- framerate = (fraction) [ 0, max ]"""; -+ const string caps_string = """video/x-raw,format=RGB,bpp=32,depth=32,pixel-aspect-ratio=1/1"""; - - public static int main(string[] args) { - Gst.Element pipeline, sink; - int width, height; -- Gst.Buffer buffer; -+ Gst.Sample sample; - string descr; - Gdk.Pixbuf pixbuf; -- int64 position; -+ int64 duration, position; - Gst.StateChangeReturn ret; - bool res; - -@@ -36,7 +29,7 @@ class ShotwellThumbnailer { - return 1; - } - -- descr = "filesrc location=\"%s\" ! decodebin2 ! ffmpegcolorspace ! ".printf(args[1]) + -+ descr = "filesrc location=\"%s\" ! decodebin ! videoconvert ! videoscale ! ".printf(args[1]) + - "appsink name=sink caps=\"%s\"".printf(caps_string); - - try { -@@ -64,29 +57,41 @@ class ShotwellThumbnailer { - stderr.printf("Failed to play the file: couldn't get state.\n"); - return 3; - } -- -- // Seek to the a position in the file. Most files have a black first frame so -- // 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); -- 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 -- // prerolls. -- GLib.Signal.emit_by_name(sink, "pull-preroll", out buffer, null); -- -+ -+ /* get the duration */ -+ pipeline.query_duration (Gst.Format.TIME, out duration); -+ -+ if (duration != -1) { -+ /* we have a duration, seek to 5% */ -+ position = duration * 5 / 100; -+ } else { -+ /* no duration, seek to 1 second, this could EOS */ -+ position = 1 * Gst.SECOND; -+ } -+ -+ /* seek to the a position in the file. Most files have a black first frame so -+ * by seeking to somewhere else we have a bigger chance of getting something -+ * more interesting. An optimisation would be to detect black images and then -+ * seek a little more */ -+ pipeline.seek_simple (Gst.Format.TIME, Gst.SeekFlags.KEY_UNIT | Gst.SeekFlags.FLUSH, position); -+ -+ /* get the preroll buffer from appsink, this block untils appsink really -+ * prerolls */ -+ GLib.Signal.emit_by_name (sink, "pull-preroll", out sample, null); -+ - // if we have a buffer now, convert it to a pixbuf. It's possible that we - // don't have a buffer because we went EOS right away or had an error. -- if (buffer != null) { -+ if (sample != null) { -+ Gst.Buffer buffer; - Gst.Caps caps; - Gst.Structure s; -+ Gst.MapInfo mapinfo; - - // Get the snapshot buffer format now. We set the caps on the appsink so - // 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 = sample.get_caps(); - if (caps == null) { - stderr.printf("could not get snapshot format\n"); - return 5; -@@ -101,14 +106,18 @@ class ShotwellThumbnailer { - stderr.printf("Could not get snapshot dimension\n"); - return 6; - } -- -+ -+ buffer = sample.get_buffer(); -+ buffer.map(out mapinfo, Gst.MapFlags.READ); -+ - // 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, -- width, height, width * 4, null); -+ pixbuf = new Gdk.Pixbuf.from_data(mapinfo.data, Gdk.Colorspace.RGB, false, 8, -+ width, height, (((width * 3)+3)&~3), null); - - // Save the pixbuf. - pixbuf.save("/dev/stdout", "png"); -+ buffer.unmap(mapinfo); - } else { - stderr.printf("Could not make snapshot\n"); - return 10; --- -cgit v0.9 diff --git a/community/shotwell/PKGBUILD b/community/shotwell/PKGBUILD index 8ff178ab2..e791e168d 100644 --- a/community/shotwell/PKGBUILD +++ b/community/shotwell/PKGBUILD @@ -1,11 +1,11 @@ -# $Id: PKGBUILD 85690 2013-03-05 07:36:48Z bgyorgy $ +# $Id: PKGBUILD 86560 2013-03-19 11:35:15Z spupykin $ # Maintainer: Sergej Pupykin <pupykin.s+arch@gmail.com> # Maintainer : Ionut Biru <ibiru@archlinux.org> # Contributor: Joeny Ang <ang(dot)joeny(at)gmail(dot)com> pkgname=shotwell -pkgver=0.13.1 -pkgrel=6 +pkgver=0.14.0 +pkgrel=1 pkgdesc="A digital photo organizer designed for the GNOME desktop environment" arch=('i686' 'x86_64') url="http://yorba.org/shotwell/" @@ -15,28 +15,16 @@ depends=('libgee' 'libwebkit3' 'libgexiv2' 'libraw' 'rest' 'gst-plugins-base' 'libgphoto2') makedepends=('intltool' 'vala>=0.17.2' 'libunique3') install=shotwell.install -source=("http://yorba.org/download/shotwell/0.13/shotwell-${pkgver}.tar.xz" - "no-libexec.patch" - "0001-Port-to-GStreamer-1.0.patch" - "regenerate-video-thumbnails.patch") -md5sums=('71eb1346093705ca2b37c12a21994d14' - 'b4124e022c98b4382530e6fbcef965e2' - '666d28c2a1b78632df8ab5f24c3aa3cd' - '4b70442c6d9c04f3be23426ef92adb43') +source=("http://yorba.org/download/shotwell/stable/shotwell-$pkgver.tar.xz" + "no-libexec.patch") +md5sums=('14b8e02091376fa69ac0a04ba61ea608' + 'b4124e022c98b4382530e6fbcef965e2') build() { cd "${srcdir}/${pkgname}-${pkgver}" patch -p1 <$srcdir/no-libexec.patch - # Port to GSreamer 1.0 (video thumbnailer) - # http://redmine.yorba.org/issues/6055 - patch -p1 <$srcdir/0001-Port-to-GStreamer-1.0.patch - - # Regenerate video thumbnails on lost - # http://redmine.yorba.org/issues/6152 - patch -p1 <$srcdir/regenerate-video-thumbnails.patch - ./configure --prefix=/usr \ --disable-schemas-compile \ --disable-desktop-update \ diff --git a/community/shotwell/regenerate-video-thumbnails.patch b/community/shotwell/regenerate-video-thumbnails.patch deleted file mode 100644 index 8a399355e..000000000 --- a/community/shotwell/regenerate-video-thumbnails.patch +++ /dev/null @@ -1,154 +0,0 @@ -From 05c10b9c6107dc785808732216498ef5f3f6b87d Mon Sep 17 00:00:00 2001 -From: Clint Rogers <clinton@yorba.org> -Date: Wed, 16 Jan 2013 00:09:42 +0000 -Subject: Causes video thumbnails to get regenerated if lost; closes #6152. - -Also moves some code around so regeneration for both stills and videos happens in the same spot, improving code navigability. ---- -diff --git a/src/PhotoMonitor.vala b/src/PhotoMonitor.vala -index 40416d1..3dcc481 100644 ---- a/src/PhotoMonitor.vala -+++ b/src/PhotoMonitor.vala -@@ -287,16 +287,7 @@ private class PhotoMonitor : MediaMonitor { - - return MediaMonitor.DiscoveredFile.UNKNOWN; - } -- -- if (!ThumbnailCache.exists(photo)) { -- try { -- ThumbnailCache.import_from_source(photo, true); -- photo.notify_altered(new Alteration("image","thumbnail")); -- } catch (Error e) { -- // thumbnail for this object was already broken, so nothing got worse. -- } -- } -- -+ - switch (state) { - case LibraryPhotoSourceCollection.State.ONLINE: - case LibraryPhotoSourceCollection.State.OFFLINE: -diff --git a/src/ThumbnailCache.vala b/src/ThumbnailCache.vala -index be97183..2a2c716 100644 ---- a/src/ThumbnailCache.vala -+++ b/src/ThumbnailCache.vala -@@ -1,7 +1,7 @@ --/* Copyright 2009-2012 Yorba Foundation -+/* Copyright 2009-2013 Yorba Foundation - * - * This software is licensed under the GNU LGPL (version 2.1 or later). -- * See the COPYING file in this distribution. -+ * See the COPYING file in this distribution. - */ - - public class Thumbnails { -@@ -74,6 +74,7 @@ public class ThumbnailCache : Object { - private class AsyncFetchJob : BackgroundJob { - public ThumbnailCache cache; - public string thumbnail_name; -+ public ThumbnailSource source; - public PhotoFileFormat source_format; - public Dimensions dim; - public Gdk.InterpType interp; -@@ -84,13 +85,14 @@ public class ThumbnailCache : Object { - public bool fetched = false; - - public AsyncFetchJob(ThumbnailCache cache, string thumbnail_name, -- PhotoFileFormat source_format, Gdk.Pixbuf? prefetched, Dimensions dim, -+ ThumbnailSource source, Gdk.Pixbuf? prefetched, Dimensions dim, - Gdk.InterpType interp, AsyncFetchCallback callback, Cancellable? cancellable) { - base(cache, async_fetch_completion_callback, cancellable); - - this.cache = cache; - this.thumbnail_name = thumbnail_name; -- this.source_format = source_format; -+ this.source = source; -+ this.source_format = source.get_preferred_thumbnail_format(); - this.unscaled = prefetched; - this.dim = dim; - this.interp = interp; -@@ -126,11 +128,42 @@ public class ThumbnailCache : Object { - // scale if specified - scaled = dim.has_area() ? resize_pixbuf(unscaled, dim, interp) : unscaled; - } catch (Error err) { -+ // Is the problem that the thumbnail couldn't be read? If so, it's recoverable; -+ // we'll just create it and leave this.err as null if creation works. -+ if (err is FileError) { -+ try { -+ Photo photo = source as Photo; -+ Video video = source as Video; -+ -+ if (photo != null) { -+ unscaled = photo.get_pixbuf(Scaling.for_best_fit(dim.width, true)); -+ photo.notify_altered(new Alteration("image","thumbnail")); -+ return; -+ } -+ -+ if (video != null) { -+ unscaled = video.create_thumbnail(dim.width); -+ scaled = resize_pixbuf(unscaled, dim, interp); -+ cache.save_thumbnail(cache.get_source_cached_file(source), -+ unscaled, source); -+ replace(source, cache.size, unscaled); -+ return; -+ } -+ -+ } catch (Error e) { -+ // Creating the thumbnail failed; tell the rest of the app. -+ this.err = e; -+ return; -+ } -+ } -+ -+ // ...the original error wasn't from reading the file, but something else; -+ // tell the rest of the app. - this.err = err; - } - } - } -- -+ - private static Workers fetch_workers = null; - - public const ulong MAX_BIG_CACHED_BYTES = 40 * 1024 * 1024; -@@ -230,13 +263,13 @@ public class ThumbnailCache : Object { - - public static void fetch_async(ThumbnailSource source, int scale, AsyncFetchCallback callback, - Cancellable? cancellable = null) { -- get_best_cache(scale)._fetch_async(source.get_source_id(), source.get_preferred_thumbnail_format(), -+ get_best_cache(scale)._fetch_async(source, source.get_preferred_thumbnail_format(), - Dimensions(), DEFAULT_INTERP, callback, cancellable); - } - -- public static void fetch_async_scaled(ThumbnailSource source, int scale, Dimensions dim, -+ public static void fetch_async_scaled(ThumbnailSource source, int scale, Dimensions dim, - Gdk.InterpType interp, AsyncFetchCallback callback, Cancellable? cancellable = null) { -- get_best_cache(scale)._fetch_async(source.get_source_id(), -+ get_best_cache(scale)._fetch_async(source, - source.get_preferred_thumbnail_format(), dim, interp, callback, cancellable); - } - -@@ -343,9 +376,10 @@ public class ThumbnailCache : Object { - return pixbuf; - } - -- private void _fetch_async(string thumbnail_name, PhotoFileFormat format, Dimensions dim, -+ private void _fetch_async(ThumbnailSource source, PhotoFileFormat format, Dimensions dim, - Gdk.InterpType interp, AsyncFetchCallback callback, Cancellable? cancellable) { - // check if the pixbuf is already in memory -+ string thumbnail_name = source.get_source_id(); - Gdk.Pixbuf pixbuf = fetch_from_memory(thumbnail_name); - if (pixbuf != null && (!dim.has_area() || Dimensions.for_pixbuf(pixbuf).equals(dim))) { - // if no scaling operation required, callback in this context and done (otherwise, -@@ -365,8 +399,8 @@ public class ThumbnailCache : Object { - // situation. This may change in the future, and the caching situation will need to be - // handled. - -- fetch_workers.enqueue(new AsyncFetchJob(this, thumbnail_name, format, pixbuf, dim, interp, -- callback, cancellable)); -+ fetch_workers.enqueue(new AsyncFetchJob(this, thumbnail_name, source, pixbuf, dim, -+ interp, callback, cancellable)); - } - - // Called within Gtk.main's thread context --- -cgit v0.9 |