diff options
author | Jörg Frings-Fürst <debian@jff.email> | 2022-10-01 21:55:21 +0200 |
---|---|---|
committer | Jörg Frings-Fürst <debian@jff.email> | 2022-10-01 21:55:21 +0200 |
commit | 0ac74d65f16aa7eb70669b07c25cb90114eb9435 (patch) | |
tree | 31cd86e358bc70e6d83955fdcc0d8e05fc32c325 /thumbnailer | |
parent | 0b99aa7b114b6c8eb0d55742c4be2f3a73f44e39 (diff) | |
parent | f542481df58f3222143bc260feb34b5cf537d8e0 (diff) |
Merge branch 'feature/upstream' into develop
Diffstat (limited to 'thumbnailer')
-rw-r--r-- | thumbnailer/meson.build | 2 | ||||
-rw-r--r-- | thumbnailer/shotwell-video-thumbnailer.vala | 34 |
2 files changed, 31 insertions, 5 deletions
diff --git a/thumbnailer/meson.build b/thumbnailer/meson.build index 29acb1f..f1b0ad4 100644 --- a/thumbnailer/meson.build +++ b/thumbnailer/meson.build @@ -1,5 +1,5 @@ executable('shotwell-video-thumbnailer', 'shotwell-video-thumbnailer.vala', - dependencies : [posix, gstreamer, gee, gdk_pixbuf], + dependencies : [posix, gstreamer, gee, gdk_pixbuf, gio], install : true, install_dir : join_paths(get_option('libexecdir'), 'shotwell')) diff --git a/thumbnailer/shotwell-video-thumbnailer.vala b/thumbnailer/shotwell-video-thumbnailer.vala index ac14d7d..db5a096 100644 --- a/thumbnailer/shotwell-video-thumbnailer.vala +++ b/thumbnailer/shotwell-video-thumbnailer.vala @@ -13,7 +13,7 @@ class ShotwellThumbnailer { const string caps_string = """video/x-raw,format=RGB,pixel-aspect-ratio=1/1"""; public static int main(string[] args) { - Gst.Element pipeline, sink; + dynamic Gst.Element pipeline, sink; string descr; Gdk.Pixbuf pixbuf; uint8[]? pngdata; @@ -41,15 +41,14 @@ class ShotwellThumbnailer { return 1; } - descr = "filesrc location=\"%s\" ! decodebin ! videoconvert ! videoscale ! ".printf(args[1]) + - "%s ! gdkpixbufsink name=sink".printf(caps_string); + descr = "playbin uri=\"%s\" audio-sink=fakesink video-sink=\"gdkpixbufsink name=sink\"".printf(File.new_for_commandline_arg(args[1]).get_uri()); try { // Create new pipeline. pipeline = Gst.parse_launch(descr); // Get sink. - sink = ((Gst.Bin) pipeline).get_by_name("sink"); + sink = pipeline.video_sink; // Set to PAUSED to make the first frame arrive in the sink. ret = pipeline.set_state(Gst.State.PAUSED); @@ -92,7 +91,34 @@ class ShotwellThumbnailer { sink.get ("last-pixbuf", out pixbuf); + Gst.TagList tags; + Signal.emit_by_name(pipeline, "get-video-tags", 0, out tags); + var direction = Gdk.PixbufRotation.NONE; + if (tags != null) { + string orientation = null; + if (tags.get_string_index (Gst.Tags.IMAGE_ORIENTATION, 0, out orientation)) { + if (orientation != null) { + switch (orientation) { + case "rotate-90": + direction = Gdk.PixbufRotation.CLOCKWISE; + break; + case "rotate-180": + direction = Gdk.PixbufRotation.UPSIDEDOWN; + break; + case "rotate-270": + direction = Gdk.PixbufRotation.COUNTERCLOCKWISE; + break; + default: + break; + } + } + } + } + // Save the pixbuf. + if (direction != Gdk.PixbufRotation.NONE) { + pixbuf = pixbuf.rotate_simple(direction); + } pixbuf.save_to_buffer(out pngdata, "png"); stdout.write(pngdata); |