Merge branch 'dev' into libraw-copylib
This commit is contained in:
commit
abbaddbabd
25
.github/workflows/appimage.yml
vendored
25
.github/workflows/appimage.yml
vendored
@ -26,7 +26,7 @@ jobs:
|
||||
build_type: [release, debug]
|
||||
steps:
|
||||
- name: Checkout source
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
@ -35,7 +35,20 @@ jobs:
|
||||
echo "Running apt update."
|
||||
sudo apt update
|
||||
echo "Installing dependencies with apt."
|
||||
DEBIAN_FRONTEND=noninteractive sudo apt install -y cmake libgtk-3-dev libgtkmm-3.0-dev liblensfun-dev librsvg2-dev liblcms2-dev libfftw3-dev libiptcdata0-dev libtiff5-dev libcanberra-gtk3-dev liblensfun-bin libexpat1-dev libbrotli-dev zlib1g-dev libinih-dev adwaita-icon-theme-full
|
||||
DEBIAN_FRONTEND=noninteractive sudo apt install -y cmake libgtk-3-dev libgtkmm-3.0-dev liblensfun-dev librsvg2-dev liblcms2-dev libfftw3-dev libiptcdata0-dev libtiff5-dev libcanberra-gtk3-dev liblensfun-bin libexpat1-dev libbrotli-dev zlib1g-dev libinih-dev adwaita-icon-theme-full gettext libarchive-tools zstd libgif-dev libwebp-dev libwebpdemux2
|
||||
|
||||
- name: Install makedeb
|
||||
run: |
|
||||
echo "Installing makedeb..."
|
||||
curl -Ss -qgb "" -fLC - --retry 3 --retry-delay 3 -o makedeb.deb \
|
||||
"https://github.com/makedeb/makedeb/releases/download/v16.1.0-beta1/makedeb-beta_16.1.0-beta1_amd64_focal.deb"
|
||||
DEBIAN_FRONTEND=noninteractive sudo dpkg -i makedeb.deb
|
||||
|
||||
- name: Install libjxl
|
||||
working-directory: tools/makedeb
|
||||
run: |
|
||||
echo "Building and installing libjxl..."
|
||||
makedeb -si --no-confirm -p PKGBUILD.libjxl
|
||||
|
||||
- name: Install Exiv2
|
||||
run: |
|
||||
@ -150,7 +163,7 @@ jobs:
|
||||
|
||||
- name: Restore AppImage tools from cache
|
||||
id: appimage-tools-cache
|
||||
uses: actions/cache@v3
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
key: appimage-tools-1
|
||||
path: |
|
||||
@ -203,7 +216,7 @@ jobs:
|
||||
echo "ARTIFACT_NAME=$ARTIFACT_NAME" >> $GITHUB_ENV
|
||||
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ${{env.ARTIFACT_NAME}}.AppImage
|
||||
path: ${{github.workspace}}/build/${{env.ARTIFACT_NAME}}.AppImage
|
||||
@ -225,7 +238,7 @@ jobs:
|
||||
echo "PUBLISH_NAME=$PUBLISH_NAME" >> $GITHUB_ENV
|
||||
|
||||
- name: Publish artifacts
|
||||
uses: softprops/action-gh-release@v1
|
||||
uses: softprops/action-gh-release@v2
|
||||
if: ${{github.ref_type == 'tag' || github.ref_name == 'dev'}}
|
||||
with:
|
||||
tag_name: nightly-github-actions
|
||||
@ -255,7 +268,7 @@ jobs:
|
||||
echo "PUBLISH_NAME=$PUBLISH_NAME" >> $GITHUB_ENV
|
||||
|
||||
- name: Publish pre-dev artifacts
|
||||
uses: softprops/action-gh-release@v1
|
||||
uses: softprops/action-gh-release@v2
|
||||
if: ${{steps.prepare-publish-pre-dev.outcome == 'success'}}
|
||||
with:
|
||||
tag_name: pre-dev-github-actions
|
||||
|
14
.github/workflows/codeql.yml
vendored
14
.github/workflows/codeql.yml
vendored
@ -32,7 +32,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout source
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
@ -41,7 +41,17 @@ jobs:
|
||||
echo "Running apt update."
|
||||
sudo apt update
|
||||
echo "Installing dependencies with apt."
|
||||
DEBIAN_FRONTEND=noninteractive sudo apt install -y cmake libgtk-3-dev libgtkmm-3.0-dev liblensfun-dev librsvg2-dev liblcms2-dev libfftw3-dev libiptcdata0-dev libtiff5-dev libcanberra-gtk3-dev liblensfun-bin libexiv2-dev
|
||||
DEBIAN_FRONTEND=noninteractive sudo apt install -y cmake libgtk-3-dev libgtkmm-3.0-dev liblensfun-dev librsvg2-dev liblcms2-dev libfftw3-dev libiptcdata0-dev libtiff5-dev libcanberra-gtk3-dev liblensfun-bin libexiv2-dev libtcmalloc-minimal4 libhwy0 libhwy-dev
|
||||
|
||||
- name: Install libjxl
|
||||
run: |
|
||||
echo "Downloading and installing libjxl..."
|
||||
VERSION_UBUNTU=22.04
|
||||
VERSION_JXL=0.10.2
|
||||
curl -Ss -qgb "" -fLC - --retry 3 --retry-delay 3 -o libjxl-debs.tar.gz \
|
||||
"https://github.com/libjxl/libjxl/releases/download/v${VERSION_JXL}/jxl-debs-amd64-ubuntu-${VERSION_UBUNTU}-v${VERSION_JXL}.tar.gz"
|
||||
tar xf libjxl-debs.tar.gz
|
||||
DEBIAN_FRONTEND=noninteractive sudo dpkg -i jxl_${VERSION_JXL}_amd64.deb libjxl-dev_${VERSION_JXL}_amd64.deb libjxl_${VERSION_JXL}_amd64.deb
|
||||
|
||||
- name: Configure build
|
||||
run: |
|
||||
|
8
.github/workflows/macos.yml
vendored
8
.github/workflows/macos.yml
vendored
@ -18,14 +18,14 @@ jobs:
|
||||
build:
|
||||
runs-on: macos-12
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
date -u
|
||||
mkdir build
|
||||
date +%s > build/stamp
|
||||
brew uninstall --ignore-dependencies libtiff
|
||||
brew install libtiff gtk+3 gtkmm3 gtk-mac-integration adwaita-icon-theme libsigc++@2 little-cms2 libiptcdata fftw lensfun expat pkgconfig llvm shared-mime-info exiv2 automake | tee -a depslog
|
||||
brew install libtiff gtk+3 gtkmm3 gtk-mac-integration adwaita-icon-theme libsigc++@2 little-cms2 libiptcdata fftw lensfun expat pkgconfig llvm shared-mime-info exiv2 jpeg-xl automake | tee -a depslog
|
||||
date -u
|
||||
echo "----====Pourage====----"
|
||||
cat depslog | grep Pouring
|
||||
@ -97,7 +97,7 @@ jobs:
|
||||
"ARTIFACT_FILE: ${ARTIFACT_FILE}" \
|
||||
"PUBLISH_NAME: ${PUBLISH_NAME}"
|
||||
exit
|
||||
- uses: actions/upload-artifact@v3
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ${{env.ARTIFACT_FILE}}
|
||||
path: ${{env.ARTIFACT_PATH}}
|
||||
@ -107,7 +107,7 @@ jobs:
|
||||
zsh -c 'echo "Build completed in $(printf "%0.2f" $(($[$(date +%s)-$(cat build/stamp)]/$((60.))))) minutes"'
|
||||
|
||||
- name: Publish artifacts
|
||||
uses: softprops/action-gh-release@v1
|
||||
uses: softprops/action-gh-release@v2
|
||||
if: ${{github.ref_type == 'tag' || github.ref_name == 'dev'}}
|
||||
with:
|
||||
tag_name: nightly-github-actions
|
||||
|
15
.github/workflows/windows.yml
vendored
15
.github/workflows/windows.yml
vendored
@ -30,7 +30,7 @@ jobs:
|
||||
build_type: [release, debug]
|
||||
steps:
|
||||
- name: Checkout source
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
@ -54,6 +54,7 @@ jobs:
|
||||
fftw:p
|
||||
lensfun:p
|
||||
libiptcdata:p
|
||||
libjxl:p
|
||||
exiv2:p
|
||||
|
||||
- name: Configure build
|
||||
@ -190,14 +191,14 @@ jobs:
|
||||
7z a -tzip "%ARTIFACT_NAME%.zip" "./%ARTIFACT_NAME%"
|
||||
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ${{env.ARTIFACT_NAME}}
|
||||
path: build\${{env.ARTIFACT_NAME}}
|
||||
|
||||
- name: Upload installer
|
||||
if: ${{matrix.build_type == 'release' && (github.ref_type == 'tag' || github.ref_name == 'dev')}}
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ${{env.ARTIFACT_NAME}}.exe
|
||||
path: build\${{env.ARTIFACT_NAME}}.exe
|
||||
@ -223,7 +224,7 @@ jobs:
|
||||
echo "PUBLISH_NAME=$PUBLISH_NAME" >> "$(cygpath -u $GITHUB_ENV)"
|
||||
|
||||
- name: Publish artifacts
|
||||
uses: softprops/action-gh-release@v1
|
||||
uses: softprops/action-gh-release@v2
|
||||
if: ${{github.ref_type == 'tag' || github.ref_name == 'dev'}}
|
||||
with:
|
||||
tag_name: nightly-github-actions
|
||||
@ -232,7 +233,7 @@ jobs:
|
||||
build/${{env.PUBLISH_NAME}}-AboutThisBuild.txt
|
||||
|
||||
- name: Publish installer
|
||||
uses: softprops/action-gh-release@v1
|
||||
uses: softprops/action-gh-release@v2
|
||||
if: ${{matrix.build_type == 'release' && (github.ref_type == 'tag' || github.ref_name == 'dev')}}
|
||||
with:
|
||||
tag_name: nightly-github-actions
|
||||
@ -264,7 +265,7 @@ jobs:
|
||||
echo "PUBLISH_NAME=$PUBLISH_NAME" >> "$(cygpath -u $GITHUB_ENV)"
|
||||
|
||||
- name: Publish pre-dev artifacts
|
||||
uses: softprops/action-gh-release@v1
|
||||
uses: softprops/action-gh-release@v2
|
||||
if: ${{steps.prepare-publish-pre-dev.outcome == 'success'}}
|
||||
with:
|
||||
tag_name: pre-dev-github-actions
|
||||
@ -274,7 +275,7 @@ jobs:
|
||||
build/${{env.PUBLISH_NAME}}-AboutThisBuild.txt
|
||||
|
||||
- name: Publish pre-dev installer
|
||||
uses: softprops/action-gh-release@v1
|
||||
uses: softprops/action-gh-release@v2
|
||||
if: ${{steps.prepare-publish-pre-dev.outcome == 'success' && matrix.build_type == 'release'}}
|
||||
with:
|
||||
tag_name: pre-dev-github-actions
|
||||
|
@ -6,8 +6,9 @@ Compiler: ${COMPILER_INFO}
|
||||
Processor: ${PROC_LABEL}
|
||||
System: ${SYSTEM}
|
||||
Bit depth: ${PROC_BIT_DEPTH}
|
||||
Gtkmm: V${GTKMM_VERSION}
|
||||
Lensfun: V${LENSFUN_VERSION}
|
||||
Gtkmm: ${GTKMM_VERSION}
|
||||
Lensfun: ${LENSFUN_VERSION}
|
||||
libjxl: ${JXL_VERSION}
|
||||
Build type: ${BUILD_TYPE}
|
||||
Build flags: ${CXX_FLAGS}
|
||||
Link flags: ${LFLAGS}
|
||||
|
@ -248,6 +248,9 @@ set(TCMALLOC_LIB_DIR
|
||||
""
|
||||
CACHE PATH "Custom path for the tcmalloc library")
|
||||
|
||||
set(WITH_JXL "AUTO" CACHE STRING "Build with JPEG XL support")
|
||||
set_property(CACHE WITH_JXL PROPERTY STRINGS AUTO ON OFF)
|
||||
|
||||
# Set installation directories:
|
||||
if(WIN32 OR APPLE)
|
||||
if(BUILD_BUNDLE)
|
||||
@ -563,6 +566,32 @@ if(WITH_SYSTEM_LIBRAW)
|
||||
pkg_check_modules(LIBRAW REQUIRED libraw_r>=0.21)
|
||||
endif()
|
||||
|
||||
if(WITH_JXL AND NOT WITH_JXL STREQUAL "AUTO")
|
||||
set(JXL_REQUIRED "REQUIRED")
|
||||
else()
|
||||
set(JXL_REQUIRED "")
|
||||
endif()
|
||||
pkg_check_modules(JXL ${JXL_REQUIRED} IMPORTED_TARGET libjxl)
|
||||
pkg_check_modules(JXLTHREADS ${JXL_REQUIRED} IMPORTED_TARGET libjxl_threads)
|
||||
if(JXL_FOUND)
|
||||
if(WITH_JXL OR WITH_JXL STREQUAL "AUTO")
|
||||
add_definitions(-DLIBJXL)
|
||||
list(APPEND JXL_INCLUDE_DIRS ${JXLTHREADS_INCLUDE_DIRS})
|
||||
list(APPEND JXL_LIBRARIES ${JXLTHREADS_LIBRARIES})
|
||||
else()
|
||||
message(STATUS " JXL support disabled by WITH_JXL = ${WITH_JXL}")
|
||||
string(APPEND JXL_VERSION " - Disabled")
|
||||
set(JXL_INCLUDE_DIRS "")
|
||||
set(JXL_LIBRARIES "")
|
||||
set(JXLTHREADS_INCLUDE_DIRS "")
|
||||
set(JXLTHREADS_LIBRARIES "")
|
||||
endif()
|
||||
elseif(WITH_JXL STREQUAL "AUTO")
|
||||
set(JXL_VERSION "Disabled, Auto")
|
||||
else()
|
||||
set(JXL_VERSION "Disabled")
|
||||
endif()
|
||||
|
||||
# Check for libcanberra-gtk3 (sound events on Linux):
|
||||
if(UNIX AND (NOT APPLE))
|
||||
option(USE_LIBCANBERRA "Build with libcanberra" ON)
|
||||
@ -743,6 +772,7 @@ if(NOT APPLE)
|
||||
-DGTKMM_VERSION:STRING=${GTKMM_VERSION}
|
||||
-DOPTION_OMP:STRING=${OPTION_OMP}
|
||||
-DWITH_MYFILE_MMAP:STRING=${WITH_MYFILE_MMAP}
|
||||
-DJXL_VERSION:STRING=${JXL_VERSION}
|
||||
-DLENSFUN_VERSION:STRING=${LENSFUN_VERSION})
|
||||
endif()
|
||||
|
||||
@ -772,6 +802,7 @@ elseif(APPLE)
|
||||
-DGTKMM_VERSION:STRING=${GTKMM_VERSION}
|
||||
-DOPTION_OMP:STRING=${OPTION_OMP}
|
||||
-DWITH_MYFILE_MMAP:STRING=${WITH_MYFILE_MMAP}
|
||||
-DJXL_VERSION:STRING=${JXL_VERSION}
|
||||
-DLENSFUN_VERSION:STRING=${LENSFUN_VERSION}
|
||||
-P ${PROJECT_SOURCE_DIR}/UpdateInfo.cmake)
|
||||
else()
|
||||
|
@ -10,6 +10,8 @@ set(PROC_TARGET_2_LABEL native CACHE STRING "Processor-2 label - use it for your
|
||||
# The flag is different on x86 and Arm based processors
|
||||
if(CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL arm64)
|
||||
set(PROC_TARGET_2_FLAGS "-mcpu=native" CACHE STRING "Processor-2 flags")
|
||||
elseif(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "ppc|powerpc")
|
||||
set(PROC_TARGET_2_FLAGS "-mtune=native" CACHE STRING "Processor-2 flags")
|
||||
else()
|
||||
set(PROC_TARGET_2_FLAGS "-march=native" CACHE STRING "Processor-2 flags")
|
||||
endif()
|
||||
|
@ -555,6 +555,7 @@ PROFILEPANEL_TOOLTIPSAVE;Desa l'actual com a perfil.\n<b>Ctrl-click</b> per sele
|
||||
PROGRESSBAR_LOADING;Carregant imatge...
|
||||
PROGRESSBAR_LOADINGTHUMBS;Carregant minifotos...
|
||||
PROGRESSBAR_LOADJPEG;Carregant fitxer JPEG...
|
||||
PROGRESSBAR_LOADJXL;Carregant fitxer JXL...
|
||||
PROGRESSBAR_LOADPNG;Carregant fitxer PNG...
|
||||
PROGRESSBAR_LOADTIFF;Carregant fitxer TIFF...
|
||||
PROGRESSBAR_PROCESSING;Processant imatge...
|
||||
|
@ -1244,6 +1244,7 @@ PROGRESSBAR_LINEDENOISE;线状噪点过滤...
|
||||
PROGRESSBAR_LOADING;图片加载中...
|
||||
PROGRESSBAR_LOADINGTHUMBS;读取缩略图...
|
||||
PROGRESSBAR_LOADJPEG;JPEG文件加载中...
|
||||
PROGRESSBAR_LOADJXL;JXL文件加载中...
|
||||
PROGRESSBAR_LOADPNG;PNG文件加载中...
|
||||
PROGRESSBAR_LOADTIFF;TIFF文件加载中...
|
||||
PROGRESSBAR_NOIMAGES;未找到图片
|
||||
|
@ -1306,6 +1306,7 @@ PROGRESSBAR_LINEDENOISE;Filtr linkového rušení…
|
||||
PROGRESSBAR_LOADING;Načítání obrázku...
|
||||
PROGRESSBAR_LOADINGTHUMBS;Načítání náhledů...
|
||||
PROGRESSBAR_LOADJPEG;Načítání JPEG...
|
||||
PROGRESSBAR_LOADJXL;Načítání JXL...
|
||||
PROGRESSBAR_LOADPNG;Načítání PNG...
|
||||
PROGRESSBAR_LOADTIFF;Načítání TIFF...
|
||||
PROGRESSBAR_NOIMAGES;Složka neobsahuje obrázky
|
||||
|
@ -1224,6 +1224,7 @@ PROGRESSBAR_LINEDENOISE;Linje støjfilter...
|
||||
PROGRESSBAR_LOADING;Indlæser billede...
|
||||
PROGRESSBAR_LOADINGTHUMBS;Indlæser thumbnails...
|
||||
PROGRESSBAR_LOADJPEG; Indlæser JPEG fil...
|
||||
PROGRESSBAR_LOADJXL; Indlæser JXL fil...
|
||||
PROGRESSBAR_LOADPNG; Indlæser PNG fil...
|
||||
PROGRESSBAR_LOADTIFF;Indlæser TIFF fil...
|
||||
PROGRESSBAR_NOIMAGES;Ingen billeder fundet
|
||||
|
@ -2147,6 +2147,7 @@ PROGRESSBAR_LINEDENOISE;Linienrauschfilter...
|
||||
PROGRESSBAR_LOADING;Lade Bild...
|
||||
PROGRESSBAR_LOADINGTHUMBS;Lade Miniaturbilder...
|
||||
PROGRESSBAR_LOADJPEG;Lade JPEG...
|
||||
PROGRESSBAR_LOADJXL;Lade JXL...
|
||||
PROGRESSBAR_LOADPNG;Lade PNG...
|
||||
PROGRESSBAR_LOADTIFF;Lade TIFF...
|
||||
PROGRESSBAR_NOIMAGES;Keine Bilder gefunden
|
||||
|
@ -2259,6 +2259,7 @@ TP_WBALANCE_PATCHLABEL_TOOLTIP;Display number of read colours (max=237).\nDispla
|
||||
!PROGRESSBAR_LOADING;Loading image...
|
||||
!PROGRESSBAR_LOADINGTHUMBS;Loading thumbnails...
|
||||
!PROGRESSBAR_LOADJPEG;Loading JPEG file...
|
||||
!PROGRESSBAR_LOADJXL;Loading JXL file...
|
||||
!PROGRESSBAR_LOADPNG;Loading PNG file...
|
||||
!PROGRESSBAR_LOADTIFF;Loading TIFF file...
|
||||
!PROGRESSBAR_NOIMAGES;No images found
|
||||
|
@ -2082,6 +2082,7 @@
|
||||
!PROGRESSBAR_LOADING;Loading image...
|
||||
!PROGRESSBAR_LOADINGTHUMBS;Loading thumbnails...
|
||||
!PROGRESSBAR_LOADJPEG;Loading JPEG file...
|
||||
!PROGRESSBAR_LOADJXL;Loading JXL file...
|
||||
!PROGRESSBAR_LOADPNG;Loading PNG file...
|
||||
!PROGRESSBAR_LOADTIFF;Loading TIFF file...
|
||||
!PROGRESSBAR_NOIMAGES;No images found
|
||||
|
@ -2006,6 +2006,7 @@ PROGRESSBAR_LINEDENOISE;Filtro de ruido de línea...
|
||||
PROGRESSBAR_LOADING;Cargando imagen...
|
||||
PROGRESSBAR_LOADINGTHUMBS;Cargando miniaturas...
|
||||
PROGRESSBAR_LOADJPEG;Cargando archivo JPEG...
|
||||
PROGRESSBAR_LOADJXL;Cargando archivo JXL...
|
||||
PROGRESSBAR_LOADPNG;Cargando archivo PNG...
|
||||
PROGRESSBAR_LOADTIFF;Cargando archivo TIFF...
|
||||
PROGRESSBAR_NOIMAGES;No se encuentran imágenes
|
||||
|
@ -1253,6 +1253,7 @@ PROFILEPANEL_TOOLTIPSAVE;Guardar perfil actual.\n<b>Ctrl-click</b> para seleccio
|
||||
PROGRESSBAR_LOADING;Abriendo imagen...
|
||||
PROGRESSBAR_LOADINGTHUMBS;Cargando miniaturas...
|
||||
PROGRESSBAR_LOADJPEG;Abriendo archivo JPEG...
|
||||
PROGRESSBAR_LOADJXL;Abriendo archivo JXL...
|
||||
PROGRESSBAR_LOADPNG;Abriendo archivo PNG...
|
||||
PROGRESSBAR_LOADTIFF;Abriendo archivo TIFF...
|
||||
PROGRESSBAR_NOIMAGES;No se han encontrado imágenes
|
||||
|
@ -1210,6 +1210,7 @@ PROFILEPANEL_TOOLTIPSAVE;Enregistrer le profil actuel\n<b>CTRL-clic</b> pour sé
|
||||
PROGRESSBAR_LOADING;Chargement de l'Image...
|
||||
PROGRESSBAR_LOADINGTHUMBS;Chargement des vignettes...
|
||||
PROGRESSBAR_LOADJPEG;Chargement du fichier JPEG...
|
||||
PROGRESSBAR_LOADJXL;Chargement du fichier JXL...
|
||||
PROGRESSBAR_LOADPNG;Chargement du fichier PNG...
|
||||
PROGRESSBAR_LOADTIFF;Chargement du fichier TIFF...
|
||||
PROGRESSBAR_NOIMAGES;Pas d'image trouvée
|
||||
|
@ -2088,6 +2088,7 @@ PROGRESSBAR_LINEDENOISE;Filtro antirumore di linea...
|
||||
PROGRESSBAR_LOADING;Caricamento immagine...
|
||||
PROGRESSBAR_LOADINGTHUMBS;Caricamento miniature...
|
||||
PROGRESSBAR_LOADJPEG;Caricamento JPEG...
|
||||
PROGRESSBAR_LOADJXL;Caricamento JXL...
|
||||
PROGRESSBAR_LOADPNG;Caricamento PNG...
|
||||
PROGRESSBAR_LOADTIFF;Caricamento TIFF...
|
||||
PROGRESSBAR_NOIMAGES;Nessuna immagine trovata
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1084,6 +1084,7 @@ PROGRESSBAR_LINEDENOISE;Sorzajszűrő...
|
||||
PROGRESSBAR_LOADING;Kép betöltése...
|
||||
PROGRESSBAR_LOADINGTHUMBS;Előnézeti képek betöltése...
|
||||
PROGRESSBAR_LOADJPEG;JPEG fájl betöltése...
|
||||
PROGRESSBAR_LOADJXL;JXL fájl betöltése...
|
||||
PROGRESSBAR_LOADPNG;PNG fájl betöltése...
|
||||
PROGRESSBAR_LOADTIFF;TIFF fájl betöltése...
|
||||
PROGRESSBAR_NOIMAGES;Nem találhatóak képek
|
||||
|
@ -1242,6 +1242,7 @@ PROGRESSBAR_LINEDENOISE;Lijnruisfilter...
|
||||
PROGRESSBAR_LOADING;Afbeelding laden...
|
||||
PROGRESSBAR_LOADINGTHUMBS;Miniaturen laden...
|
||||
PROGRESSBAR_LOADJPEG;Laden JPEG-bestand...
|
||||
PROGRESSBAR_LOADJXL;Laden JXL-bestand...
|
||||
PROGRESSBAR_LOADPNG;Laden PNG-bestand...
|
||||
PROGRESSBAR_LOADTIFF;Laden TIFF-bestand...
|
||||
PROGRESSBAR_NOIMAGES;Geen afbeeldingen
|
||||
|
@ -1192,6 +1192,7 @@ PROGRESSBAR_LINEDENOISE;Liniowy filtr szumu...
|
||||
PROGRESSBAR_LOADING;Wczytywanie obrazu...
|
||||
PROGRESSBAR_LOADINGTHUMBS;Wczytywanie miniatur...
|
||||
PROGRESSBAR_LOADJPEG;Ładowanie pliku JPEG...
|
||||
PROGRESSBAR_LOADJXL;Ładowanie pliku JXL...
|
||||
PROGRESSBAR_LOADPNG;Ładowanie pliku PNG...
|
||||
PROGRESSBAR_LOADTIFF;Ładowanie pliku TIFF...
|
||||
PROGRESSBAR_NOIMAGES;Nie znaleziono żadnych obrazów
|
||||
|
@ -1197,6 +1197,7 @@ PROFILEPANEL_TOOLTIPSAVE;Guardar o perfil atual.\n<b>Ctrl-click</b> para selecio
|
||||
PROGRESSBAR_LOADING;A carregar a imagem...
|
||||
PROGRESSBAR_LOADINGTHUMBS;A carregar as miniaturas...
|
||||
PROGRESSBAR_LOADJPEG;A carregar o ficheiro JPEG...
|
||||
PROGRESSBAR_LOADJXL;A carregar o ficheiro JXL...
|
||||
PROGRESSBAR_LOADPNG;A carregar o ficheiro PNG...
|
||||
PROGRESSBAR_LOADTIFF;A carregar o ficheiro TIFF...
|
||||
PROGRESSBAR_NOIMAGES;Não foi encontrada nenhuma imagem
|
||||
|
@ -1207,6 +1207,7 @@ PROGRESSBAR_LINEDENOISE;Filtro de ruído de linha...
|
||||
PROGRESSBAR_LOADING;Carregando imagem...
|
||||
PROGRESSBAR_LOADINGTHUMBS;Carregando miniaturas...
|
||||
PROGRESSBAR_LOADJPEG;Carregando arquivo JPEG...
|
||||
PROGRESSBAR_LOADJXL;Carregando arquivo JXL...
|
||||
PROGRESSBAR_LOADPNG;Carregando arquivo PNG...
|
||||
PROGRESSBAR_LOADTIFF;Carregando arquivo TIFF...
|
||||
PROGRESSBAR_NOIMAGES;Nenhuma imagem encontrada
|
||||
|
@ -843,6 +843,7 @@ PROFILEPANEL_TOOLTIPSAVE;Сохранить текущий профиль\n<b>Ct
|
||||
PROGRESSBAR_LOADING;Загрузка изображения...
|
||||
PROGRESSBAR_LOADINGTHUMBS;Загрузка миниатюр...
|
||||
PROGRESSBAR_LOADJPEG;Чтение JPEG файла...
|
||||
PROGRESSBAR_LOADJXL;Чтение JXL файла...
|
||||
PROGRESSBAR_LOADPNG;Чтение PNG файла...
|
||||
PROGRESSBAR_LOADTIFF;Чтение TIFF файла...
|
||||
PROGRESSBAR_NOIMAGES;Изображения не найдены
|
||||
|
@ -670,6 +670,7 @@ PROFILEPANEL_TOOLTIPSAVE;Чува тренутни профил
|
||||
PROGRESSBAR_LOADING;Учитавам слику...
|
||||
PROGRESSBAR_LOADINGTHUMBS;Учитавам приказе...
|
||||
PROGRESSBAR_LOADJPEG;Учитавам JPEG датотеку...
|
||||
PROGRESSBAR_LOADJPEG;Учитавам JXL датотеку...
|
||||
PROGRESSBAR_LOADPNG;Учитавам PNG датотеку...
|
||||
PROGRESSBAR_LOADTIFF;Учитавам TIFF датотеку...
|
||||
PROGRESSBAR_NOIMAGES;Нису пронађене слике
|
||||
|
@ -1221,6 +1221,7 @@ PROGRESSBAR_LINEDENOISE;Filter linijskega šuma...
|
||||
PROGRESSBAR_LOADING;Nalagam sliko...
|
||||
PROGRESSBAR_LOADINGTHUMBS;Nalagam predogledne sličice...
|
||||
PROGRESSBAR_LOADJPEG;Nalagam datoteko JPEG...
|
||||
PROGRESSBAR_LOADJXL;Nalagam datoteko JXL...
|
||||
PROGRESSBAR_LOADPNG;Nalagam datoteko PNG...
|
||||
PROGRESSBAR_LOADTIFF;Nalagam datoteko TIFF...
|
||||
PROGRESSBAR_NOIMAGES;Ne najdem nobene slike
|
||||
|
@ -911,6 +911,7 @@ PROFILEPANEL_TOOLTIPSAVE;Spara nuvarande profil.\n<b>Ctrl-klicka</b> för att v
|
||||
PROGRESSBAR_LOADING;Laddar bild...
|
||||
PROGRESSBAR_LOADINGTHUMBS;Laddar miniatyrbilder...
|
||||
PROGRESSBAR_LOADJPEG;Laddar JPEG-fil...
|
||||
PROGRESSBAR_LOADJXL;Laddar JXL-fil...
|
||||
PROGRESSBAR_LOADPNG;Laddar PNG-fil...
|
||||
PROGRESSBAR_LOADTIFF;Laddar TIFF-fil...
|
||||
PROGRESSBAR_NOIMAGES;Inga bilder funna.
|
||||
|
@ -2153,6 +2153,7 @@ PROGRESSBAR_LINEDENOISE;Line noise filter...
|
||||
PROGRESSBAR_LOADING;Loading image...
|
||||
PROGRESSBAR_LOADINGTHUMBS;Loading thumbnails...
|
||||
PROGRESSBAR_LOADJPEG;Loading JPEG file...
|
||||
PROGRESSBAR_LOADJXL;Loading JXL file...
|
||||
PROGRESSBAR_LOADPNG;Loading PNG file...
|
||||
PROGRESSBAR_LOADTIFF;Loading TIFF file...
|
||||
PROGRESSBAR_NOIMAGES;No images found
|
||||
|
@ -12,8 +12,8 @@ MultiUser=true
|
||||
|
||||
[File Browser]
|
||||
# Image filename extensions to be looked for, and their corresponding search state (0/1 -> skip/include)
|
||||
ParseExtensions=3fr;arw;arq;cr2;cr3;crf;crw;dcr;dng;fff;iiq;jpg;jpeg;kdc;mef;mos;mrw;nef;nrw;orf;ori;pef;png;raf;raw;rw2;rwl;rwz;sr2;srf;srw;tif;tiff;x3f;
|
||||
ParseExtensionsEnabled=1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;1;
|
||||
ParseExtensions=3fr;arw;arq;cr2;cr3;crf;crw;dcr;dng;fff;iiq;jpg;jpeg;jxl;kdc;mef;mos;mrw;nef;nrw;orf;ori;pef;png;raf;raw;rw2;rwl;rwz;sr2;srf;srw;tif;tiff;x3f;
|
||||
ParseExtensionsEnabled=1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;1;
|
||||
|
||||
[Output]
|
||||
PathTemplate=%p1/converted/%f
|
||||
|
@ -13,8 +13,8 @@ UseSystemTheme=false
|
||||
|
||||
[File Browser]
|
||||
# Image filename extensions to be looked for, and their corresponding search state (0/1 -> skip/include)
|
||||
ParseExtensions=3fr;arw;arq;cr2;cr3;crf;crw;dcr;dng;fff;iiq;jpg;jpeg;kdc;mef;mos;mrw;nef;nrw;orf;ori;pef;png;raf;raw;rw2;rwl;rwz;sr2;srf;srw;tif;tiff;x3f;
|
||||
ParseExtensionsEnabled=1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;1;
|
||||
ParseExtensions=3fr;arw;arq;cr2;cr3;crf;crw;dcr;dng;fff;iiq;jpg;jpeg;jxl;kdc;mef;mos;mrw;nef;nrw;orf;ori;pef;png;raf;raw;rw2;rwl;rwz;sr2;srf;srw;tif;tiff;x3f;
|
||||
ParseExtensionsEnabled=1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;1;
|
||||
|
||||
[Output]
|
||||
PathTemplate=%p1/converted/%f
|
||||
|
@ -14,8 +14,8 @@ UseSystemTheme=false
|
||||
|
||||
[File Browser]
|
||||
# Image filename extensions to be looked for, and their corresponding search state (0/1 -> skip/include)
|
||||
ParseExtensions=3fr;arw;arq;cr2;cr3;crf;crw;dcr;dng;fff;iiq;jpg;jpeg;kdc;mef;mos;mrw;nef;nrw;orf;ori;pef;png;raf;raw;rw2;rwl;rwz;sr2;srf;srw;tif;tiff;x3f;
|
||||
ParseExtensionsEnabled=1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;1;
|
||||
ParseExtensions=3fr;arw;arq;cr2;cr3;crf;crw;dcr;dng;fff;iiq;jpg;jpeg;jxl;kdc;mef;mos;mrw;nef;nrw;orf;ori;pef;png;raf;raw;rw2;rwl;rwz;sr2;srf;srw;tif;tiff;x3f;
|
||||
ParseExtensionsEnabled=1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;1;
|
||||
|
||||
[Output]
|
||||
PathTemplate=%p1/converted/%f
|
||||
|
@ -45,6 +45,9 @@ endif()
|
||||
if(EXIV2_INCLUDE_DIRS)
|
||||
include_directories("${EXIV2_INCLUDE_DIRS}")
|
||||
endif()
|
||||
if(JXL_INCLUDE_DIRS)
|
||||
include_directories("${JXL_INCLUDE_DIRS}")
|
||||
endif()
|
||||
if(NOT WITH_SYSTEM_LIBRAW)
|
||||
include_directories("${CMAKE_SOURCE_DIR}/rtengine/libraw")
|
||||
else()
|
||||
@ -251,6 +254,7 @@ target_link_libraries(rtengine
|
||||
${RSVG_LIBRARIES}
|
||||
${KLT_LIBRARIES}
|
||||
${EXIV2_LIBRARIES}
|
||||
${JXL_LIBRARIES}
|
||||
${LIBRAW_LIBRARIES}
|
||||
)
|
||||
|
||||
|
@ -25,6 +25,11 @@
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
#ifdef LIBJXL
|
||||
#include "jxl/decode_cxx.h"
|
||||
#include "jxl/resizable_parallel_runner_cxx.h"
|
||||
#endif
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <glib/gstdio.h>
|
||||
#include <png.h>
|
||||
@ -823,6 +828,171 @@ int ImageIO::loadTIFF (const Glib::ustring &fname)
|
||||
return IMIO_SUCCESS;
|
||||
}
|
||||
|
||||
#ifdef LIBJXL
|
||||
#define _PROFILE_ JXL_COLOR_PROFILE_TARGET_ORIGINAL
|
||||
// adapted from libjxl
|
||||
int ImageIO::loadJXL(const Glib::ustring &fname)
|
||||
{
|
||||
if (pl) {
|
||||
pl->setProgressStr("PROGRESSBAR_LOADJXL");
|
||||
pl->setProgress(0.0);
|
||||
}
|
||||
|
||||
std::vector<std::uint8_t> icc_profile;
|
||||
std::vector<std::uint8_t> buffer;
|
||||
std::size_t buffer_size = 0;
|
||||
|
||||
JxlBasicInfo info = {};
|
||||
JxlPixelFormat format = {};
|
||||
|
||||
format.num_channels = 3;
|
||||
format.data_type = JXL_TYPE_FLOAT;
|
||||
format.endianness = JXL_NATIVE_ENDIAN;
|
||||
format.align = 0;
|
||||
|
||||
std::vector<std::uint8_t> const compressed = getFileData(fname);
|
||||
|
||||
if (compressed.empty()) {
|
||||
std::cerr << "Error: loadJXL failed to get data from file" << std::endl;
|
||||
return IMIO_READERROR;
|
||||
}
|
||||
|
||||
// multi-threaded parallel runner.
|
||||
auto runner = JxlResizableParallelRunnerMake(nullptr);
|
||||
|
||||
auto dec = JxlDecoderMake(nullptr);
|
||||
|
||||
if (JXL_DEC_SUCCESS !=
|
||||
JxlDecoderSubscribeEvents(dec.get(), JXL_DEC_BASIC_INFO |
|
||||
JXL_DEC_COLOR_ENCODING |
|
||||
JXL_DEC_FULL_IMAGE)) {
|
||||
std::cerr << "Error: JxlDecoderSubscribeEvents failed" << std::endl;
|
||||
return IMIO_HEADERERROR;
|
||||
}
|
||||
|
||||
if (JXL_DEC_SUCCESS !=
|
||||
JxlDecoderSetParallelRunner(dec.get(), JxlResizableParallelRunner,
|
||||
runner.get())) {
|
||||
std::cerr << "Error: JxlDecoderSetParallelRunner failed" << std::endl;
|
||||
return IMIO_HEADERERROR;
|
||||
}
|
||||
|
||||
// grand decode loop...
|
||||
JxlDecoderSetInput(dec.get(), compressed.data(), compressed.size());
|
||||
|
||||
while (true) {
|
||||
JxlDecoderStatus status = JxlDecoderProcessInput(dec.get());
|
||||
|
||||
if (status == JXL_DEC_BASIC_INFO) {
|
||||
if (JXL_DEC_SUCCESS != JxlDecoderGetBasicInfo(dec.get(), &info)) {
|
||||
std::cerr << "Error: JxlDecoderGetBasicInfo failed" << std::endl;
|
||||
return IMIO_HEADERERROR;
|
||||
}
|
||||
|
||||
JxlResizableParallelRunnerSetThreads(
|
||||
runner.get(),
|
||||
JxlResizableParallelRunnerSuggestThreads(info.xsize, info.ysize));
|
||||
} else if (status == JXL_DEC_COLOR_ENCODING) {
|
||||
// check for ICC profile
|
||||
deleteLoadedProfileData();
|
||||
embProfile = nullptr;
|
||||
std::size_t icc_size = 0;
|
||||
|
||||
if (JXL_DEC_SUCCESS !=
|
||||
#if JPEGXL_NUMERIC_VERSION < JPEGXL_COMPUTE_NUMERIC_VERSION(0, 9, 0)
|
||||
JxlDecoderGetICCProfileSize(dec.get(), &format, _PROFILE_, &icc_size)
|
||||
#else
|
||||
JxlDecoderGetICCProfileSize(dec.get(), _PROFILE_, &icc_size)
|
||||
#endif
|
||||
) {
|
||||
std::cerr << "Warning: JxlDecoderGetICCProfileSize failed" << std::endl;
|
||||
}
|
||||
|
||||
if (icc_size > 0) {
|
||||
icc_profile.resize(icc_size);
|
||||
|
||||
if (JXL_DEC_SUCCESS !=
|
||||
#if JPEGXL_NUMERIC_VERSION < JPEGXL_COMPUTE_NUMERIC_VERSION(0, 9, 0)
|
||||
JxlDecoderGetColorAsICCProfile(
|
||||
dec.get(), &format, _PROFILE_,
|
||||
icc_profile.data(), icc_profile.size())
|
||||
#else
|
||||
JxlDecoderGetColorAsICCProfile(
|
||||
dec.get(), _PROFILE_,
|
||||
icc_profile.data(), icc_profile.size())
|
||||
#endif
|
||||
) {
|
||||
std::cerr << "Warning: JxlDecoderGetColorAsICCProfile failed" << std::endl;
|
||||
} else {
|
||||
embProfile = cmsOpenProfileFromMem(icc_profile.data(),
|
||||
icc_profile.size());
|
||||
}
|
||||
} else {
|
||||
std::cerr << "Warning: Empty ICC data." << std::endl;
|
||||
}
|
||||
} else if (status == JXL_DEC_NEED_IMAGE_OUT_BUFFER) {
|
||||
// Note: If assert is triggered, change to assignment.
|
||||
// We want maximum bit depth from the decoder,
|
||||
// regardless of the original encoding intent.
|
||||
assert(format.data_type == JXL_TYPE_FLOAT);
|
||||
|
||||
if (JXL_DEC_SUCCESS !=
|
||||
JxlDecoderImageOutBufferSize(dec.get(), &format, &buffer_size)) {
|
||||
std::cerr << "Error: JxlDecoderImageOutBufferSize failed" << std::endl;
|
||||
return IMIO_READERROR;
|
||||
}
|
||||
|
||||
buffer.resize(buffer_size);
|
||||
|
||||
if (JXL_DEC_SUCCESS != JxlDecoderSetImageOutBuffer(dec.get(), &format, buffer.data(), buffer.size())) {
|
||||
std::cerr << "Error: JxlDecoderSetImageOutBuffer failed" << std::endl;
|
||||
return IMIO_READERROR;
|
||||
}
|
||||
} else if (status == JXL_DEC_FULL_IMAGE ||
|
||||
status == JXL_DEC_FRAME) {
|
||||
// Nothing to do. If the image is an animation, more full frames
|
||||
// may be decoded. This example only keeps the first one.
|
||||
break;
|
||||
} else if (status == JXL_DEC_SUCCESS) {
|
||||
// Decoding complete. Decoder will be released automatically.
|
||||
break;
|
||||
} else if (status == JXL_DEC_NEED_MORE_INPUT) {
|
||||
std::cerr << "Error: Decoder needs more input data" << std::endl;
|
||||
return IMIO_READERROR;
|
||||
} else if (status == JXL_DEC_ERROR) {
|
||||
std::cerr << "Error: Decoder error" << std::endl;
|
||||
return IMIO_READERROR;
|
||||
} else {
|
||||
std::cerr << "Error: Unknown decoder status" << std::endl;
|
||||
return IMIO_READERROR;
|
||||
}
|
||||
} // end grand decode loop
|
||||
|
||||
std::size_t width = info.xsize;
|
||||
std::size_t height = info.ysize;
|
||||
|
||||
allocate(width, height);
|
||||
|
||||
std::size_t line_length = width * 3 * 4;
|
||||
|
||||
for (std::size_t row = 0; row < height; ++row) {
|
||||
setScanline(row, buffer.data() + (row * line_length), 32);
|
||||
|
||||
if (pl && !(row % 100)) {
|
||||
pl->setProgress((double)(row + 1) / height);
|
||||
}
|
||||
}
|
||||
|
||||
if (pl) {
|
||||
pl->setProgressStr("PROGRESSBAR_READY");
|
||||
pl->setProgress(1.0);
|
||||
}
|
||||
|
||||
return IMIO_SUCCESS;
|
||||
}
|
||||
#undef _PROFILE_
|
||||
#endif // LIBJXL
|
||||
|
||||
int ImageIO::loadPPMFromMemory(const char* buffer, int width, int height, bool swap, int bps)
|
||||
{
|
||||
allocate (width, height);
|
||||
@ -1311,6 +1481,10 @@ int ImageIO::load (const Glib::ustring &fname)
|
||||
return loadPNG (fname);
|
||||
} else if (hasJpegExtension(fname)) {
|
||||
return loadJPEG (fname);
|
||||
#ifdef LIBJXL
|
||||
} else if (hasJxlExtension(fname)) {
|
||||
return loadJXL(fname);
|
||||
#endif
|
||||
} else if (hasTiffExtension(fname)) {
|
||||
return loadTIFF (fname);
|
||||
} else {
|
||||
|
@ -90,6 +90,10 @@ public:
|
||||
int load (const Glib::ustring &fname);
|
||||
int save (const Glib::ustring &fname) const;
|
||||
|
||||
#ifdef LIBJXL
|
||||
int loadJXL (const Glib::ustring &fname);
|
||||
#endif
|
||||
|
||||
int loadPNG (const Glib::ustring &fname);
|
||||
int loadJPEG (const Glib::ustring &fname);
|
||||
int loadTIFF (const Glib::ustring &fname);
|
||||
|
@ -90,6 +90,12 @@ void StdImageSource::getSampleFormat (const Glib::ustring &fname, IIOSampleForma
|
||||
if (result == IMIO_SUCCESS) {
|
||||
return;
|
||||
}
|
||||
#ifdef LIBJXL
|
||||
} else if (hasJxlExtension(fname)) {
|
||||
sFormat = IIOSF_FLOAT32;
|
||||
sArrangement = IIOSA_CHUNKY;
|
||||
return;
|
||||
#endif
|
||||
} else if (hasTiffExtension(fname)) {
|
||||
int result = ImageIO::getTIFFSampleFormat (fname, sFormat, sArrangement);
|
||||
|
||||
|
@ -19,6 +19,8 @@
|
||||
#include <cmath>
|
||||
#include <cstring>
|
||||
#include <cstdio>
|
||||
#include <fstream>
|
||||
#include <glibmm/convert.h>
|
||||
#include "rt_math.h"
|
||||
|
||||
#include "utils.h"
|
||||
@ -222,6 +224,23 @@ void vflip(unsigned char* img, int w, int h)
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<std::uint8_t> getFileData(const Glib::ustring &filename)
|
||||
{
|
||||
try {
|
||||
const std::string fn = Glib::filename_from_utf8(filename);
|
||||
std::ifstream instream(fn, std::ios::in | std::ios::binary);
|
||||
|
||||
std::vector<std::uint8_t> contents(
|
||||
(std::istreambuf_iterator<char>(instream)),
|
||||
std::istreambuf_iterator<char>());
|
||||
|
||||
instream.close();
|
||||
return contents;
|
||||
} catch (...) {
|
||||
return {};
|
||||
}
|
||||
}
|
||||
|
||||
Glib::ustring getFileExtension(const Glib::ustring& filename)
|
||||
{
|
||||
const Glib::ustring::size_type lastdot_pos = filename.find_last_of('.');
|
||||
@ -237,6 +256,13 @@ bool hasJpegExtension(const Glib::ustring& filename)
|
||||
return extension == "jpg" || extension == "jpeg";
|
||||
}
|
||||
|
||||
#ifdef LIBJXL
|
||||
bool hasJxlExtension(const Glib::ustring& filename)
|
||||
{
|
||||
return getFileExtension(filename) == "jxl";
|
||||
}
|
||||
#endif
|
||||
|
||||
bool hasTiffExtension(const Glib::ustring& filename)
|
||||
{
|
||||
const Glib::ustring extension = getFileExtension(filename);
|
||||
|
@ -18,6 +18,8 @@
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include <type_traits>
|
||||
#include <glibmm/ustring.h>
|
||||
|
||||
@ -43,6 +45,8 @@ constexpr typename std::underlying_type<ENUM>::type toUnderlying(ENUM value)
|
||||
return static_cast<typename std::underlying_type<ENUM>::type>(value);
|
||||
}
|
||||
|
||||
std::vector<std::uint8_t> getFileData(const Glib::ustring &filename);
|
||||
|
||||
// Return lower case extension without the "." or "" if the given name contains no "."
|
||||
Glib::ustring getFileExtension(const Glib::ustring& filename);
|
||||
// Return true if file has .jpeg or .jpg extension (ignoring case)
|
||||
@ -52,6 +56,11 @@ bool hasTiffExtension(const Glib::ustring& filename);
|
||||
// Return true if file has .png extension (ignoring case)
|
||||
bool hasPngExtension(const Glib::ustring& filename);
|
||||
|
||||
#ifdef LIBJXL
|
||||
// Return true if file has .jxl extension (ignoring case)
|
||||
bool hasJxlExtension(const Glib::ustring& filename);
|
||||
#endif
|
||||
|
||||
void swab(const void* from, void* to, ssize_t n);
|
||||
|
||||
}
|
||||
|
@ -226,13 +226,12 @@ Glib::ustring Thumbnail::xmpSidecarPath(const Glib::ustring &imagePath)
|
||||
return rtengine::Exiv2Metadata::xmpSidecarPath(imagePath);
|
||||
}
|
||||
|
||||
void Thumbnail::_generateThumbnailImage ()
|
||||
void Thumbnail::_generateThumbnailImage()
|
||||
{
|
||||
|
||||
// delete everything loaded into memory
|
||||
delete tpp;
|
||||
tpp = nullptr;
|
||||
delete [] lastImg;
|
||||
delete[] lastImg;
|
||||
lastImg = nullptr;
|
||||
tw = options.maxThumbnailWidth;
|
||||
th = options.maxThumbnailHeight;
|
||||
@ -249,64 +248,55 @@ void Thumbnail::_generateThumbnailImage ()
|
||||
cfs.exifValid = false;
|
||||
cfs.timeValid = false;
|
||||
|
||||
if (ext == "jpg" || ext == "jpeg") {
|
||||
infoFromImage (fname);
|
||||
tpp = rtengine::Thumbnail::loadFromImage (fname, tw, th, -1, pparams->wb.equal, pparams->wb.observer);
|
||||
// RAW works like this:
|
||||
// 1. if we are here it's because we aren't in the cache so load the JPG
|
||||
// image out of the RAW. Mark as "quick".
|
||||
// 2. if we don't find that then just grab the real image.
|
||||
bool quick = false;
|
||||
|
||||
rtengine::eSensorType sensorType = rtengine::ST_NONE;
|
||||
|
||||
if (initial_ && options.internalThumbIfUntouched) {
|
||||
quick = true;
|
||||
tpp = rtengine::Thumbnail::loadQuickFromRaw(fname, sensorType, tw, th, 1, TRUE);
|
||||
}
|
||||
|
||||
if (!tpp) {
|
||||
quick = false;
|
||||
tpp = rtengine::Thumbnail::loadFromRaw(fname, sensorType, tw, th, 1, pparams->wb.equal, pparams->wb.observer, TRUE, &(pparams->raw));
|
||||
}
|
||||
|
||||
cfs.sensortype = sensorType;
|
||||
|
||||
if (tpp) {
|
||||
cfs.format = FT_Raw;
|
||||
cfs.thumbImgType = quick ? CacheImageData::QUICK_THUMBNAIL : CacheImageData::FULL_THUMBNAIL;
|
||||
infoFromImage(fname);
|
||||
|
||||
if (!quick) {
|
||||
cfs.width = tpp->full_width;
|
||||
cfs.height = tpp->full_height;
|
||||
}
|
||||
}
|
||||
|
||||
if (!tpp) {
|
||||
// this will load formats supported by imagio (jpg, png, jxl, and tiff)
|
||||
tpp = rtengine::Thumbnail::loadFromImage(fname, tw, th, -1, pparams->wb.equal, pparams->wb.observer);
|
||||
|
||||
if (tpp) {
|
||||
cfs.format = FT_Jpeg;
|
||||
}
|
||||
} else if (ext == "png") {
|
||||
tpp = rtengine::Thumbnail::loadFromImage (fname, tw, th, -1, pparams->wb.equal, pparams->wb.observer);
|
||||
|
||||
if (tpp) {
|
||||
cfs.format = FT_Png;
|
||||
}
|
||||
} else if (ext == "tif" || ext == "tiff") {
|
||||
infoFromImage (fname);
|
||||
tpp = rtengine::Thumbnail::loadFromImage (fname, tw, th, -1, pparams->wb.equal, pparams->wb.observer);
|
||||
|
||||
if (tpp) {
|
||||
cfs.format = FT_Tiff;
|
||||
}
|
||||
} else {
|
||||
// RAW works like this:
|
||||
// 1. if we are here it's because we aren't in the cache so load the JPG
|
||||
// image out of the RAW. Mark as "quick".
|
||||
// 2. if we don't find that then just grab the real image.
|
||||
bool quick = false;
|
||||
|
||||
rtengine::eSensorType sensorType = rtengine::ST_NONE;
|
||||
if ( initial_ && options.internalThumbIfUntouched) {
|
||||
quick = true;
|
||||
tpp = rtengine::Thumbnail::loadQuickFromRaw (fname, sensorType, tw, th, 1, TRUE);
|
||||
}
|
||||
|
||||
if ( tpp == nullptr ) {
|
||||
quick = false;
|
||||
tpp = rtengine::Thumbnail::loadFromRaw (fname, sensorType, tw, th, 1, pparams->wb.equal, pparams->wb.observer, TRUE, &(pparams->raw));
|
||||
}
|
||||
|
||||
cfs.sensortype = sensorType;
|
||||
if (tpp) {
|
||||
cfs.format = FT_Raw;
|
||||
cfs.thumbImgType = quick ? CacheImageData::QUICK_THUMBNAIL : CacheImageData::FULL_THUMBNAIL;
|
||||
infoFromImage (fname);
|
||||
if (!quick) {
|
||||
cfs.width = tpp->full_width;
|
||||
cfs.height = tpp->full_height;
|
||||
}
|
||||
cfs.format = FT_Custom;
|
||||
infoFromImage(fname);
|
||||
}
|
||||
}
|
||||
|
||||
if (tpp) {
|
||||
tpp->getAutoWBMultipliers(cfs.redAWBMul, cfs.greenAWBMul, cfs.blueAWBMul);
|
||||
_saveThumbnail ();
|
||||
_saveThumbnail();
|
||||
cfs.supported = true;
|
||||
|
||||
cfs.save (getCacheFileName ("data", ".txt"));
|
||||
cfs.save(getCacheFileName("data", ".txt"));
|
||||
|
||||
generateExifDateTimeStrings ();
|
||||
generateExifDateTimeStrings();
|
||||
}
|
||||
}
|
||||
|
||||
@ -761,10 +751,10 @@ rtengine::IImage8* Thumbnail::processThumbImage (const rtengine::procparams::Pro
|
||||
|
||||
MyMutex::MyLock lock(mutex);
|
||||
|
||||
if ( tpp == nullptr ) {
|
||||
if (!tpp) {
|
||||
_loadThumbnail();
|
||||
|
||||
if ( tpp == nullptr ) {
|
||||
if (!tpp) {
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
@ -798,7 +788,7 @@ rtengine::IImage8* Thumbnail::upgradeThumbImage (const rtengine::procparams::Pro
|
||||
|
||||
_generateThumbnailImage();
|
||||
|
||||
if ( tpp == nullptr ) {
|
||||
if (!tpp) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
@ -1004,7 +994,7 @@ void Thumbnail::_loadThumbnail(bool firstTrial)
|
||||
_loadThumbnail (false);
|
||||
}
|
||||
|
||||
if (tpp == nullptr) {
|
||||
if (!tpp) {
|
||||
return;
|
||||
}
|
||||
} else if (!succ) {
|
||||
|
41
tools/makedeb/PKGBUILD.libjxl
Normal file
41
tools/makedeb/PKGBUILD.libjxl
Normal file
@ -0,0 +1,41 @@
|
||||
# Maintainer: RawTherapee Developers
|
||||
|
||||
_pkgname="libjxl"
|
||||
pkgname="$_pkgname"
|
||||
pkgver='0.10.2'
|
||||
pkgrel='1'
|
||||
pkgdesc='JPEG XL image format reference implementation'
|
||||
url='https://github.com/libjxl/libjxl'
|
||||
license=('BSD')
|
||||
arch=('amd64')
|
||||
|
||||
depends=('libgif-dev' 'libjpeg-dev' 'libopenexr-dev' 'libpng-dev' 'libwebp-dev')
|
||||
makedepends=('cmake' 'pkg-config' 'libbrotli-dev' 'libgflags-dev')
|
||||
|
||||
_pkgsrc="$_pkgname"
|
||||
source=("git+$url.git#tag=v$pkgver")
|
||||
sha256sums=('SKIP')
|
||||
|
||||
prepare() {
|
||||
cd "$_pkgsrc"
|
||||
git submodule update --init --recursive --depth 1 --recommend-shallow
|
||||
}
|
||||
|
||||
build() {
|
||||
local _cmake_options=(
|
||||
-B build
|
||||
-S "$_pkgsrc"
|
||||
-DCMAKE_BUILD_TYPE=Release
|
||||
-DCMAKE_INSTALL_PREFIX='/usr'
|
||||
-DJPEGXL_FORCE_SYSTEM_BROTLI=ON
|
||||
-DBUILD_TESTING=OFF
|
||||
-Wno-dev
|
||||
)
|
||||
|
||||
cmake "${_cmake_options[@]}"
|
||||
cmake --build build --parallel
|
||||
}
|
||||
|
||||
package() {
|
||||
DESTDIR="$pkgdir" cmake --install build
|
||||
}
|
@ -119,6 +119,7 @@ Source: "{#MyBuildBasePath}\options"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "{#MyBuildBasePath}\*.dll"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "{#MyBuildBasePath}\gspawn-win{#MyBitDepth}-helper.exe"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "{#MyBuildBasePath}\gspawn-win{#MyBitDepth}-helper-console.exe"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "{#MyBuildBasePath}\gdbus.exe"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "{#MyBuildBasePath}\gdb.exe"; DestDir: "{app}"; Flags: skipifsourcedoesntexist ignoreversion
|
||||
;Source: "{#MyBuildBasePath}\fonts\DroidSansMonoSlashed.ttf"; DestDir: "{fonts}"; FontInstall: "Droid Sans Mono Slashed"; Flags: onlyifdoesntexist uninsneveruninstall
|
||||
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
|
||||
|
Loading…
x
Reference in New Issue
Block a user