Reorganization, replacing CPU debayering entirely
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
#endif
|
||||
|
||||
uniform sampler2D texture;
|
||||
|
||||
|
@@ -1,4 +1,6 @@
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
#endif
|
||||
|
||||
attribute vec2 vert;
|
||||
attribute vec2 tex_coord;
|
||||
|
8
data/camera.css
Normal file
8
data/camera.css
Normal file
@@ -0,0 +1,8 @@
|
||||
.errorbox {
|
||||
background: #dd0000;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.controlbox {
|
||||
background: rgba(0,0,0,0.2);
|
||||
}
|
336
data/camera.ui
Normal file
336
data/camera.ui
Normal file
@@ -0,0 +1,336 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<requires lib="gtk" version="4.0"/>
|
||||
<object class="GtkAdjustment" id="control_adj">
|
||||
<property name="upper">100</property>
|
||||
<property name="step-increment">1</property>
|
||||
<property name="page-increment">10</property>
|
||||
</object>
|
||||
<object class="GtkWindow" id="window">
|
||||
<property name="can-focus">0</property>
|
||||
<property name="default-width">360</property>
|
||||
<property name="default-height">640</property>
|
||||
<property name="decorated">0</property>
|
||||
<property name="child">
|
||||
<object class="GtkStack" id="main_stack">
|
||||
<property name="can-focus">0</property>
|
||||
<child>
|
||||
<object class="GtkStackPage">
|
||||
<property name="name">main</property>
|
||||
<property name="child">
|
||||
<object class="GtkBox" id="page_main">
|
||||
<property name="can-focus">0</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<object class="GtkGLArea" id="preview">
|
||||
<property name="vexpand">1</property>
|
||||
<property name="can-focus">0</property>
|
||||
<property name="use-es">1</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="control_box">
|
||||
<property name="visible">0</property>
|
||||
<property name="can-focus">0</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="hexpand">1</property>
|
||||
<property name="can-focus">0</property>
|
||||
<property name="margin-start">10</property>
|
||||
<property name="margin-end">10</property>
|
||||
<property name="margin-top">10</property>
|
||||
<property name="margin-bottom">10</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="control_name">
|
||||
<property name="can-focus">0</property>
|
||||
<property name="margin-end">10</property>
|
||||
<property name="label" translatable="yes">ISO</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScale" id="control_slider">
|
||||
<property name="hexpand">1</property>
|
||||
<property name="adjustment">control_adj</property>
|
||||
<property name="round-digits">1</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkToggleButton" id="control_auto">
|
||||
<property name="label" translatable="yes">Auto</property>
|
||||
<property name="receives-default">1</property>
|
||||
<property name="margin-start">10</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<style>
|
||||
<class name="controlbox"/>
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkActionBar" id="controls_box">
|
||||
<property name="can-focus">0</property>
|
||||
<child type="start">
|
||||
<object class="GtkButton" id="settings">
|
||||
<property name="receives-default">1</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="can-focus">0</property>
|
||||
<property name="resource">/org/postmarketos/Megapixels/settings-symbolic.svg</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child type="start">
|
||||
<object class="GtkButton" id="switch_camera">
|
||||
<property name="receives-default">1</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="can-focus">0</property>
|
||||
<property name="resource">/org/postmarketos/Megapixels/switch-camera.svg</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child type="center">
|
||||
<object class="GtkButton" id="shutter">
|
||||
<property name="width-request">48</property>
|
||||
<property name="height-request">48</property>
|
||||
<property name="receives-default">1</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="can-focus">0</property>
|
||||
<property name="resource">/org/postmarketos/Megapixels/shutter-button.svg</property>
|
||||
</object>
|
||||
</child>
|
||||
<style>
|
||||
<class name="circular"/>
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
<child type="end">
|
||||
<object class="GtkButton" id="open_directory">
|
||||
<property name="receives-default">1</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="can-focus">0</property>
|
||||
<property name="resource">/org/postmarketos/Megapixels/folder-symbolic.svg</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child type="end">
|
||||
<object class="GtkButton" id="open_last">
|
||||
<property name="receives-default">1</property>
|
||||
<child>
|
||||
<object class="GtkStack" id="open_last_stack">
|
||||
<property name="can-focus">0</property>
|
||||
<child>
|
||||
<object class="GtkImage" id="thumb_last">
|
||||
<property name="width-request">24</property>
|
||||
<property name="height-request">24</property>
|
||||
<property name="can-focus">0</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinner" id="process_spinner">
|
||||
<property name="width-request">24</property>
|
||||
<property name="height-request">24</property>
|
||||
<property name="can-focus">0</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="error_box">
|
||||
<property name="visible">0</property>
|
||||
<property name="can-focus">0</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="hexpand">1</property>
|
||||
<property name="can-focus">0</property>
|
||||
<property name="margin-start">10</property>
|
||||
<property name="margin-end">10</property>
|
||||
<property name="margin-top">10</property>
|
||||
<property name="margin-bottom">10</property>
|
||||
<property name="spacing">10</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="error_message">
|
||||
<property name="hexpand">1</property>
|
||||
<property name="can-focus">0</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="label" translatable="yes">No error</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="error_close">
|
||||
<property name="label">gtk-close</property>
|
||||
<property name="receives-default">1</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<style>
|
||||
<class name="errorbox"/>
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</property>
|
||||
</object>
|
||||
</child>
|
||||
<!-- <child>
|
||||
<object class="GtkStackPage">
|
||||
<property name="name">settings</property>
|
||||
<property name="title" translatable="yes">page1</property>
|
||||
<property name="position">1</property>
|
||||
<property name="child">
|
||||
<object class="GtkScrolledWindow" id="page_settings">
|
||||
<property name="shadow-type">in</property>
|
||||
<property name="child">
|
||||
<object class="GtkViewport">
|
||||
<property name="can-focus">0</property>
|
||||
<property name="shadow-type">none</property>
|
||||
<property name="child">
|
||||
<object class="GtkBox">
|
||||
<property name="can-focus">0</property>
|
||||
<property name="margin-start">10</property>
|
||||
<property name="margin-end">10</property>
|
||||
<property name="margin-top">10</property>
|
||||
<property name="margin-bottom">10</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="spacing">10</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="can-focus">0</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="settings_back">
|
||||
<property name="label" translatable="yes">Back</property>
|
||||
<property name="receives-default">1</property>
|
||||
<property name="margin-start">10</property>
|
||||
<property name="margin-end">10</property>
|
||||
<style>
|
||||
<class name="suggested-action"/>
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="can-focus">0</property>
|
||||
<property name="label" translatable="yes">Settings aren't functional yet</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="can-focus">0</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="spacing">4</property>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="can-focus">0</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="label" translatable="yes">Photos</property>
|
||||
<style>
|
||||
<class name="heading"/>
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkFrame">
|
||||
<property name="can-focus">0</property>
|
||||
<property name="shadow-type">in</property>
|
||||
<child>
|
||||
<object class="GtkAlignment">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="left-padding">12</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="can-focus">0</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="can-focus">0</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="label" translatable="yes">Resolution</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox">
|
||||
<property name="can-focus">0</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="can-focus">0</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="label" translatable="yes">Storage mode</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="can-focus">0</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="store_vng">
|
||||
<property name="label" translatable="yes">Debayer with VNG (slowest)</property>
|
||||
<property name="active">1</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="store_simple">
|
||||
<property name="label" translatable="yes">Debayer with linear interpolation</property>
|
||||
<property name="group">store_vng</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="store_raw">
|
||||
<property name="label" translatable="yes">Raw</property>
|
||||
<property name="group">store_vng</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child type="label_item">
|
||||
<placeholder/>
|
||||
</child>
|
||||
<style>
|
||||
<class name="view"/>
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
</property>
|
||||
</object>
|
||||
</property>
|
||||
</object>
|
||||
</property>
|
||||
</object>
|
||||
</child> -->
|
||||
</object>
|
||||
</property>
|
||||
</object>
|
||||
</interface>
|
@@ -1,37 +1,28 @@
|
||||
precision highp float;
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
#endif
|
||||
|
||||
uniform sampler2D texture;
|
||||
uniform sampler2D pixel_layout;
|
||||
uniform mat3 color_matrix;
|
||||
|
||||
uniform vec2 pixel_size;
|
||||
|
||||
// varying vec2 uv1;
|
||||
// varying vec2 uv2;
|
||||
varying vec2 top_left_uv;
|
||||
varying vec2 top_right_uv;
|
||||
varying vec2 bottom_left_uv;
|
||||
varying vec2 bottom_right_uv;
|
||||
varying vec2 half_pixel_coord;
|
||||
|
||||
#define fetch(p) texture2D(texture, p).r
|
||||
|
||||
void main() {
|
||||
vec4 pixels = vec4(
|
||||
fetch(top_left_uv),
|
||||
fetch(top_right_uv),
|
||||
fetch(bottom_right_uv),
|
||||
fetch(bottom_left_uv));
|
||||
// Note the coordinates for texture samples need to be a varying, as the
|
||||
// Mali-400 has this as a fast path allowing 32-bit floats. Otherwise
|
||||
// they end up as 16-bit floats and that's not accurate enough.
|
||||
vec4 samples = vec4(
|
||||
texture2D(texture, top_left_uv).r,
|
||||
texture2D(texture, top_right_uv).r,
|
||||
texture2D(texture, bottom_left_uv).r,
|
||||
texture2D(texture, bottom_right_uv).r);
|
||||
|
||||
vec2 arrangement = floor(half_pixel_coord);
|
||||
|
||||
vec2 is_bottom_left = step(1.0, arrangement);
|
||||
|
||||
// vec3 color = mix(
|
||||
// mix(pixels.xyz, pixels.yzw, is_bottom_left.y),
|
||||
// mix(pixels.wzy, pixels.zyx, is_bottom_left.y),
|
||||
// is_bottom_left.x);
|
||||
vec3 color = pixels.zyx;
|
||||
// Assume BGGR for now. Currently this just takes 3 of the four samples
|
||||
// for each pixel, there's room here to do some better debayering.
|
||||
vec3 color = samples.wyx;
|
||||
|
||||
// Fast SRGB estimate. See https://mimosa-pudica.net/fast-gamma/
|
||||
vec3 srgb_color = (vec3(1.138) * inversesqrt(color) - vec3(0.138)) * color;
|
||||
|
@@ -1,20 +1,17 @@
|
||||
precision highp float;
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
#endif
|
||||
|
||||
attribute vec2 vert;
|
||||
attribute vec2 tex_coord;
|
||||
|
||||
uniform mat3 transform;
|
||||
uniform vec2 pixel_size;
|
||||
uniform vec2 half_image_size;
|
||||
|
||||
// varying vec2 uv1;
|
||||
// varying vec2 uv2;
|
||||
|
||||
varying vec2 top_left_uv;
|
||||
varying vec2 top_right_uv;
|
||||
varying vec2 bottom_left_uv;
|
||||
varying vec2 bottom_right_uv;
|
||||
varying vec2 half_pixel_coord;
|
||||
|
||||
void main() {
|
||||
top_left_uv = tex_coord - pixel_size / 2.0;
|
||||
@@ -22,11 +19,5 @@ void main() {
|
||||
top_right_uv = vec2(top_left_uv.x, bottom_right_uv.y);
|
||||
bottom_left_uv = vec2(bottom_right_uv.x, top_left_uv.y);
|
||||
|
||||
// uv1 = tex_coord - pixel_size / 2.0;
|
||||
// uv2 = tex_coord + pixel_size / 2.0;
|
||||
// uv1 += pixel_size;
|
||||
// uv2 += pixel_size;
|
||||
half_pixel_coord = top_left_uv * half_image_size;
|
||||
|
||||
gl_Position = vec4(transform * vec3(vert, 1), 1);
|
||||
}
|
||||
|
36
data/folder-symbolic.svg
Normal file
36
data/folder-symbolic.svg
Normal file
@@ -0,0 +1,36 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="16"
|
||||
height="16"
|
||||
version="1.1"
|
||||
id="svg945">
|
||||
<metadata
|
||||
id="metadata951">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs949" />
|
||||
<path
|
||||
d="M1 1a1 1 0 00-1 1v11s-.014.459.23.947C.476 14.436 1.168 15 2 15h12s.459.014.947-.23C15.436 14.525 16 13.833 16 13V6H3v7H2V6s0-1 1-1h11v-.832A1 1 0 0013 3H8.414L6.707 1.293A1 1 0 006 1z"
|
||||
style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000;solid-opacity:1;fill-opacity:1;fill:#bebebe"
|
||||
color="#000"
|
||||
font-weight="400"
|
||||
font-family="sans-serif"
|
||||
overflow="visible"
|
||||
fill="#2e3436"
|
||||
fill-rule="evenodd"
|
||||
id="path943" />
|
||||
</svg>
|
After Width: | Height: | Size: 1.5 KiB |
15
data/meson.build
Normal file
15
data/meson.build
Normal file
@@ -0,0 +1,15 @@
|
||||
resources = gnome.compile_resources('megapixels-resources',
|
||||
'org.postmarketos.Megapixels.gresource.xml')
|
||||
|
||||
install_data(['org.postmarketos.Megapixels.desktop'],
|
||||
install_dir: get_option('datadir') / 'applications')
|
||||
|
||||
install_data(['org.postmarketos.Megapixels.metainfo.xml'],
|
||||
install_dir: get_option('datadir') / 'metainfo')
|
||||
|
||||
install_data('org.postmarketos.Megapixels.svg',
|
||||
install_dir: join_paths(get_option('datadir'), 'icons/hicolor/scalable/apps'))
|
||||
|
||||
install_data(['postprocess.sh'],
|
||||
install_dir: get_option('datadir') / 'megapixels/',
|
||||
install_mode: 'rwxr-xr-x')
|
15
data/org.postmarketos.Megapixels.gresource.xml
Normal file
15
data/org.postmarketos.Megapixels.gresource.xml
Normal file
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<gresources>
|
||||
<gresource prefix="/org/postmarketos/Megapixels">
|
||||
<file preprocess="xml-stripblanks">camera.ui</file>
|
||||
<file>camera.css</file>
|
||||
<file preprocess="xml-stripblanks">switch-camera.svg</file>
|
||||
<file preprocess="xml-stripblanks">shutter-button.svg</file>
|
||||
<file preprocess="xml-stripblanks">folder-symbolic.svg</file>
|
||||
<file preprocess="xml-stripblanks">settings-symbolic.svg</file>
|
||||
<file>blit.vert</file>
|
||||
<file>blit.frag</file>
|
||||
<file>debayer.vert</file>
|
||||
<file>debayer.frag</file>
|
||||
</gresource>
|
||||
</gresources>
|
94
data/postprocess.sh
Executable file
94
data/postprocess.sh
Executable file
@@ -0,0 +1,94 @@
|
||||
#!/bin/sh
|
||||
|
||||
# The post-processing script gets called after taking a burst of
|
||||
# pictures into a temporary directory. The first argument is the
|
||||
# directory containing the raw files in the burst. The contents
|
||||
# are 1.dng, 2.dng.... up to the number of photos in the burst.
|
||||
#
|
||||
# The second argument is the filename for the final photo without
|
||||
# the extension, like "/home/user/Pictures/IMG202104031234"
|
||||
#
|
||||
# The post-processing script is responsible for cleaning up
|
||||
# temporary directory for the burst.
|
||||
|
||||
if [ "$#" -ne 2 ]; then
|
||||
echo "Usage: $0 [burst-dir] [target-name]"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
BURST_DIR="$1"
|
||||
TARGET_NAME="$2"
|
||||
|
||||
MAIN_PICTURE="$BURST_DIR"/1
|
||||
|
||||
# Copy the first frame of the burst as the raw photo
|
||||
cp "$BURST_DIR"/1.dng "$TARGET_NAME.dng"
|
||||
|
||||
# Create a .jpg if raw processing tools are installed
|
||||
DCRAW=""
|
||||
TIFF_EXT="dng.tiff"
|
||||
if command -v "dcraw_emu" > /dev/null
|
||||
then
|
||||
DCRAW=dcraw_emu
|
||||
# -fbdd 1 Raw denoising with FBDD
|
||||
set -- -fbdd 1
|
||||
elif [ -x "/usr/lib/libraw/dcraw_emu" ]; then
|
||||
DCRAW=/usr/lib/libraw/dcraw_emu
|
||||
# -fbdd 1 Raw denoising with FBDD
|
||||
set -- -fbdd 1
|
||||
elif command -v "dcraw" > /dev/null
|
||||
then
|
||||
DCRAW=dcraw
|
||||
TIFF_EXT="tiff"
|
||||
set --
|
||||
fi
|
||||
|
||||
CONVERT=""
|
||||
if command -v "convert" > /dev/null
|
||||
then
|
||||
CONVERT="convert"
|
||||
# -fbdd 1 Raw denoising with FBDD
|
||||
set -- -fbdd 1
|
||||
elif command -v "gm" > /dev/null
|
||||
then
|
||||
CONVERT="gm"
|
||||
fi
|
||||
|
||||
|
||||
if [ -n "$DCRAW" ]; then
|
||||
# +M use embedded color matrix
|
||||
# -H 4 Recover highlights by rebuilding them
|
||||
# -o 1 Output in sRGB colorspace
|
||||
# -q 3 Debayer with AHD algorithm
|
||||
# -T Output TIFF
|
||||
$DCRAW +M -H 4 -o 1 -q 3 -T "$@" "$MAIN_PICTURE.dng"
|
||||
|
||||
# If imagemagick is available, convert the tiff to jpeg and apply slight sharpening
|
||||
if [ -n "$CONVERT" ];
|
||||
then
|
||||
if [ "$CONVERT" = "convert" ]; then
|
||||
convert "$MAIN_PICTURE.$TIFF_EXT" -sharpen 0x1.0 "$TARGET_NAME.jpg"
|
||||
else
|
||||
gm convert "$MAIN_PICTURE.$TIFF_EXT" -sharpen 0x1.0 "$TARGET_NAME.jpg"
|
||||
fi
|
||||
|
||||
# If exiftool is installed copy the exif data over from the tiff to the jpeg
|
||||
# since imagemagick is stupid
|
||||
if command -v exiftool > /dev/null
|
||||
then
|
||||
exiftool -tagsFromfile "$MAIN_PICTURE.$TIFF_EXT" \
|
||||
-software="Megapixels" \
|
||||
-overwrite_original "$TARGET_NAME.jpg"
|
||||
fi
|
||||
|
||||
echo "$TARGET_NAME.jpg"
|
||||
else
|
||||
cp "$MAIN_PICTURE.$TIFF_EXT" "$TARGET_NAME.tiff"
|
||||
|
||||
echo "$TARGET_NAME.tiff"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Clean up the temp dir containing the burst
|
||||
rm -rf "$BURST_DIR"
|
||||
|
31
data/settings-symbolic.svg
Normal file
31
data/settings-symbolic.svg
Normal file
@@ -0,0 +1,31 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="16"
|
||||
height="16"
|
||||
version="1.1"
|
||||
id="svg881">
|
||||
<metadata
|
||||
id="metadata887">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs885" />
|
||||
<path
|
||||
d="M7.502 1.019a.996.996 0 0 0-.998.998v.451a5.734 5.734 0 0 0-1.356.566l-.322-.322a.995.995 0 0 0-1.41 0l-.705.705a.995.995 0 0 0 0 1.41l.32.32a5.734 5.734 0 0 0-.56 1.358h-.454a.995.995 0 0 0-.998.996V8.5c0 .553.446.996.998.996h.45a5.734 5.734 0 0 0 .566 1.356l-.322.322a.995.995 0 0 0 0 1.41l.705.705c.39.391 1.02.391 1.41 0l.32-.32a5.734 5.734 0 0 0 1.358.56v.456c0 .552.445.996.998.996h.996a.995.995 0 0 0 .998-.996v-.451a5.734 5.734 0 0 0 1.355-.567l.323.322c.39.391 1.02.391 1.41 0l.705-.705a.995.995 0 0 0 0-1.41l-.32-.32a5.734 5.734 0 0 0 .56-1.358h.453a.995.995 0 0 0 .998-.996v-.998a.995.995 0 0 0-.998-.996h-.449a5.734 5.734 0 0 0-.566-1.355l.322-.323a.995.995 0 0 0 0-1.41l-.705-.705a.995.995 0 0 0-1.41 0l-.32.32a5.734 5.734 0 0 0-1.358-.56v-.455a.996.996 0 0 0-.998-.998zm.515 3.976a3 3 0 0 1 3 3 3 3 0 0 1-3 3 3 3 0 0 1-3-3 3 3 0 0 1 3-3z"
|
||||
style="marker:none;fill-opacity:1;fill:#bebebe"
|
||||
fill="#2e3436"
|
||||
id="path879" />
|
||||
</svg>
|
After Width: | Height: | Size: 1.6 KiB |
42
data/shutter-button.svg
Normal file
42
data/shutter-button.svg
Normal file
@@ -0,0 +1,42 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="32"
|
||||
height="32"
|
||||
viewBox="0 0 8.4666665 8.466667"
|
||||
version="1.1"
|
||||
id="svg8">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
transform="matrix(0.49996357,0,0,0.49996357,0.01938007,0.00978634)">
|
||||
<path
|
||||
id="path833"
|
||||
style="fill:#bebebe;fill-opacity:1;stroke-width:0.999999"
|
||||
d="M 31.810547,0.07421875 A 31.916231,31.916231 0 0 0 0.14648438,31.990234 31.916231,31.916231 0 0 0 32.0625,63.90625 31.916231,31.916231 0 0 0 63.978516,31.990234 31.916231,31.916231 0 0 0 32.0625,0.07421875 a 31.916231,31.916231 0 0 0 -0.251953,0 z M 31.919922,3.578125 A 28.472441,28.472441 0 0 1 60.392578,32.050781 28.472441,28.472441 0 0 1 31.919922,60.523438 28.472441,28.472441 0 0 1 3.4472656,32.050781 28.472441,28.472441 0 0 1 31.919922,3.578125 Z"
|
||||
transform="scale(0.26458333)" />
|
||||
<circle
|
||||
style="fill:#bebebe;fill-opacity:1;stroke-width:0.254438"
|
||||
id="path840"
|
||||
cx="8.3893003"
|
||||
cy="8.432106"
|
||||
r="7.0744858" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.5 KiB |
51
data/switch-camera.svg
Normal file
51
data/switch-camera.svg
Normal file
@@ -0,0 +1,51 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 6.3499999 6.3500002"
|
||||
version="1.1"
|
||||
id="svg8">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1">
|
||||
<path
|
||||
id="rect10"
|
||||
style="fill:#bebebe;fill-rule:evenodd;stroke-width:0.981721;fill-opacity:1"
|
||||
d="M 6.2675781 7 C 5.642948 7 5.0792263 7.250453 4.6699219 7.65625 L 5.0527344 8.1835938 L 6.7832031 7 L 6.2675781 7 z M 7.7753906 7 L 6.6464844 12.794922 L 4 12.832031 L 4 14.732422 C 4 15.988737 5.0112635 17 6.2675781 17 L 15.414062 17 L 18.443359 12.070312 L 20 12.646484 L 20 9.2675781 C 20 8.0112632 18.988737 7 17.732422 7 L 7.7753906 7 z M 11.984375 8.4414062 A 3.4999999 3.4999999 0 0 1 15.484375 11.941406 A 3.4999999 3.4999999 0 0 1 11.984375 15.441406 A 3.4999999 3.4999999 0 0 1 8.484375 11.941406 A 3.4999999 3.4999999 0 0 1 11.984375 8.4414062 z "
|
||||
transform="scale(0.26458333)" />
|
||||
<rect
|
||||
style="fill:#bebebe;stroke-width:0.430371;fill-opacity:1"
|
||||
id="rect32"
|
||||
width="2.1166666"
|
||||
x="2.1166666"
|
||||
y="1.3229167"
|
||||
rx="2.7755576e-17"
|
||||
height="0.79374999" />
|
||||
<path
|
||||
style="fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="M 2.9104166,0.79374999 C 1.0262128,0.90909341 0.00928708,1.445563 0.8274781,2.7119284 0.70723812,2.8613287 0.26458333,3.175 0.26458333,3.175 H 1.5875 L 1.8521525,2.0440428 c 0,0 -0.035266,0.029416 -0.5759985,0.4042251 C 0.2287544,1.4462035 1.9079139,1.1486032 2.9104166,0.79374999 Z"
|
||||
id="path864" />
|
||||
<path
|
||||
style="fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="M 2.9647831,5.3081179 C 4.7938353,5.7751257 5.9261679,5.5757251 5.5349326,4.119685 5.6951359,4.0142668 6.2125632,3.8511655 6.2125632,3.8511655 L 4.9531606,3.4461794 4.3549929,4.4418202 c 0,0 0.042578,-0.017208 0.6720904,-0.2084869 0.69035,1.2745964 -0.9992967,1.0438655 -2.0623002,1.0747846 z"
|
||||
id="path864-0" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.6 KiB |
Reference in New Issue
Block a user