125 lines
4.7 KiB
Plaintext
125 lines
4.7 KiB
Plaintext
GoPro HERO/Fusion .GPR files are DNG files by nature, but with own wavelet-based codec.
|
|
|
|
GoPro provides GPR SDK for reading these files, available at https://github.com/gopro/gpr
|
|
|
|
LibRaw is able to use this GPR SDK to read GoPro HERO/Fusion files.
|
|
|
|
To enable this support:
|
|
|
|
1. Build GPR SDK (see NOTES section below)
|
|
2. Build LibRaw with -DUSE_DNGSDK and -DUSE_GPRSDK compiler flags
|
|
(you'll need to adjust INCLUDE path and linker flags to add GPR SDK files to compile/link).
|
|
|
|
|
|
NOTES:
|
|
I. GPR SDK comes with (patched) Adobe DNG SDK source (v1.4 but outdated).
|
|
This DNG SDK is *NOT* compatible with LibRaw since 0.20 due to
|
|
internals change .
|
|
|
|
II. So, you need to patch latest Adobe DNG SDK v1.4 (dated 2015), this version
|
|
is available from Adobe:
|
|
http://download.adobe.com/pub/adobe/dng/dng_sdk_1_4.zip
|
|
or use Adobe DNG SDK v1.6 or v1.7
|
|
|
|
(most likely, this apply for v1.5 too, but not tested/checked):
|
|
|
|
a) For Adobe DNG SDK v1.4 you'll need to enable dng_ifd.fCompression value == 9 in
|
|
dng_ifd::IsValidCFA() call
|
|
Use provided patch: LibRaw/GoPro/dng-sdk-1_4-allow-VC5-validate.diff
|
|
(it may not apply to any Adobe DNG SDK version, if so apply it by hands).
|
|
|
|
This compression type is already handled (passed via validation)
|
|
in Adobe DNG SDK v1.6/1.7
|
|
|
|
b) Adobe DNG SDK v1.6/1.7 defines the ccVc5 constant in dng_tag_values.h
|
|
so GPR SDK's gpr_read_image.cpp will not compile due to constant redefinition
|
|
so use provided patch:
|
|
|
|
For Adobe DNG SDK 1.6 (only): LibRaw/GoPro/dng-sdk-1_6-hide-ccVc5-definitiion.diff
|
|
For Adobe DNG SDK 1.6 or 1.7: LibRaw/GoPro/dng-sdk-1_6-1_7-hide-ccVc5-definitiion.diff
|
|
|
|
to use Adobe's definitiion
|
|
|
|
c) Newer (than supplied w/ GPR SDK) Adobe SDK versions changes
|
|
dng_read_image::ReadTile interface, please apply patches
|
|
* For all versions of Adobe DNG SDK:
|
|
|
|
LibRaw/GoPro/gpr_read_image.cpp-dng16.diff
|
|
and LibRaw/GoPro/gpr_read_image.h-dng16.diff to your GPR SDK code
|
|
|
|
* For Adone DNG SDK 1.7 (in addition to two -dng16.diff patches listed in previous section):
|
|
LibRaw/GoPro/gpr_read_image.h-dng16.diff
|
|
LibRaw/GoPro/gpr_read_image.h-dng17.diff
|
|
|
|
d) GPR SDK's gpr_sdk/private/gpr.cpp uses own (added) dng_host method
|
|
GetGPMFPayload so it will not compile with Adobes (not patched)
|
|
dng_host.h
|
|
LibRaw does not use high-level interface provided by gpr.cpp, so
|
|
possible problem solutions are:
|
|
- either compile GPR SDK without gpr_sdk/private/gpr.cpp file
|
|
- or provide GPR's dng_host.h while building GPR SDK.
|
|
(in our software we use 1st method).
|
|
|
|
|
|
|
|
See Note VII below for detailed GPR SDK build instructions w/ Cmake
|
|
|
|
III. LibRaw uses private gpr_read_image() interface
|
|
So you'll need to add PATH_TO/gpr_sdk/gpr_sdk/private to -I compiler flags.
|
|
|
|
IV. -DUSE_GPRSDK LibRaw build flag requires -DUSE_DNGSDK. LibRaw will not
|
|
compile if USE_GPRSDK is set, but USE_DNGSDK is not
|
|
|
|
V. LibRaw will use DNG SDK to unpack GoPro files even if imgdata.params.use_dng_sdk is set to 0.
|
|
|
|
VI. If LibRaw is built with -DUSE_GPRSDK, LibRaw::capabilities will return LIBRAW_CAPS_GPRSDK flag.
|
|
|
|
VII. GPR SDK build using cmake (contributed by our user, great thanks)
|
|
|
|
1. replace gopro's toplevel CMakeLists.txt with this one (this builds only a subset of the libraries):
|
|
------------------------------------
|
|
# minimum required cmake version
|
|
cmake_minimum_required( VERSION 3.5 FATAL_ERROR )
|
|
|
|
set(CMAKE_SUPPRESS_REGENERATION true)
|
|
set(CMAKE_C_FLAGS "-std=c99")
|
|
|
|
# project name
|
|
project( gpr )
|
|
|
|
option(DNGINCLUDEDIR "Adobe DNG toolkit include directory")
|
|
INCLUDE_DIRECTORIES( ${DNGINCLUDEDIR} )
|
|
|
|
# DNG toolkit requires C++11 minimum:
|
|
set_property(GLOBAL PROPERTY CXX_STANDARD 17)
|
|
|
|
# add needed subdirectories
|
|
add_subdirectory( "source/lib/common" )
|
|
add_subdirectory( "source/lib/vc5_common" )
|
|
add_subdirectory( "source/lib/vc5_decoder" )
|
|
add_subdirectory( "source/lib/gpr_sdk" )
|
|
|
|
set_property(TARGET gpr_sdk PROPERTY CXX_STANDARD 17)
|
|
|
|
IF (WIN32)
|
|
TARGET_COMPILE_DEFINITIONS( gpr_sdk PUBLIC -DqWinOS=1 -DqMacOS=0 -DqLinux=0)
|
|
ELSEIF (APPLE)
|
|
TARGET_COMPILE_DEFINITIONS( gpr_sdk PUBLIC -DqWinOS=0 -DqMacOS=1 -DqLinux=0)
|
|
ELSE()
|
|
TARGET_COMPILE_DEFINITIONS( gpr_sdk PUBLIC -DqWinOS=0 -DqMacOS=0 -DqLinux=1)
|
|
ENDIF()
|
|
----------------------------------------
|
|
|
|
2. apply the two patches of README.GoPro.txt section II b.
|
|
the patch of section IIa is not needed with libdng1.5.
|
|
|
|
3. delete these two files:
|
|
/source/lib/gpr_sdk/private/gpr.cpp
|
|
/source/lib/gpr_sdk/private/gpr_image_writer.cpp
|
|
|
|
4. run CMAKE with -DDNGINCLUDEDIR, pointing to the headers from Adobe dng 1.5.
|
|
|
|
5. build. You get 4 libraries "gpr_sdk", "vc5_common", "vc5_decoder", "common", the rest is ignored.
|
|
|
|
|