subsurface/core
Berthold Stoeger cc4f48be3f Metadata: rudimentary support for XMP metadataa in MP4-based videos
XMP is a media-metadata standard based on XML which may be used
across a variety of media formats. Some video-processing software
writes XMP data without updating the native metadata fields.
Therefore, we should aim at reading XMP metadata and give priority
of XMP data over native fields.

Pros:
	- Support for *all* common media formats.
Cons:
	- XML (complex, verbose, chaotic).
	- Does not even come close to fulfilling its promise of being
	  well defined (see below).

Implement a simple XMP-parser using libxml2. Connect the XMP-parser to
the existing Quicktime/MP4 parser.

First problem encountered: According to the spec, XMP data supposed
to be put in the 'XMP_' atom. But for example exiftools instead
writes an 'uuid' atom with a special 16-byte uid. Implement both,
more options will probably follow.

Second problem: two versions of recording the creation date were found
  1) The content of a <exif:DateTimeOriginal> tag.
  2) The xmp::CreateDate attribute of a <rdf:Description> tag.

Here too, more versions are expected to surface and will have
to be supported in due course (with an obvious priority problem).

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2018-09-25 14:59:14 -07:00
..
settings cleanup: do not compare doubles like this 2018-09-25 16:01:39 +02:00
subsurface-qt Cleanup: pass gasmix by value 2018-08-23 05:16:38 -07:00
android.cpp Make device enumeration use the device transport data 2018-08-27 22:10:38 -07:00
btdiscovery.cpp BLE: add Teric to list of auto-detected Shearwater computers 2018-09-12 14:00:49 -07:00
btdiscovery.h Cleanup: Use QString as parameter for [get|save]BtDeviceInfo() 2018-02-26 08:52:34 +01:00
checkcloudconnection.cpp prefs: git_local_only is not a preference 2018-09-10 16:26:49 -07:00
checkcloudconnection.h Remove self-include of core/checkcloudconnection.h 2017-12-06 02:23:47 +01:00
cloudstorage.cpp core/settings ... : remove qPref* includes in qPref.h 2018-09-11 17:25:00 -07:00
cloudstorage.h prefs: cloud_new_password is not a preference 2018-09-10 16:26:49 -07:00
CMakeLists.txt Metadata: rudimentary support for XMP metadataa in MP4-based videos 2018-09-25 14:59:14 -07:00
cochran.c core: replace (void) with UNUSED(x) and include ssrf.h 2018-05-24 08:34:14 -07:00
cochran.h
color.cpp Cleanup: silence clang missing braces warning in core/color.cpp 2018-09-01 11:31:18 -07:00
color.h Cleanups to core/color.[c|hpp] 2018-07-18 02:09:15 +03:00
compressibility.r
configuredivecomputer.cpp Actually tie in the new libdivecomputer IO model to open the dive computer device 2018-04-24 17:54:08 -07:00
configuredivecomputer.h
configuredivecomputerthreads.cpp core: Change Q_UNUSED to no parameter name 2018-05-21 12:48:04 -07:00
configuredivecomputerthreads.h
connectionlistmodel.cpp Mobile/remember DCs: try to match device names 2018-09-23 11:49:30 -07:00
connectionlistmodel.h core: add indexOf member to ConnectionListModel 2018-08-11 11:14:22 -07:00
datatrak.c Core: remove dive.h from files that don't need it 2018-05-14 10:13:39 -07:00
datatrak.h Cleanup: const-ify functions taking dives and divecomputers 2018-08-23 14:41:01 -07:00
deco.c Cleanup: const-ify functions taking pointers to events 2018-08-23 05:16:38 -07:00
deco.h Cleanup: const-ify functions taking pointers to events 2018-08-23 05:16:38 -07:00
device.c core: replace (void) with UNUSED(x) and include ssrf.h 2018-05-24 08:34:14 -07:00
device.h Core: remove dive.h from files that don't need it 2018-05-14 10:13:39 -07:00
devicedetails.cpp
devicedetails.h
display.h Make device enumeration use the device transport data 2018-08-27 22:10:38 -07:00
dive.c Dive media: on import read metadata only once 2018-09-19 14:44:34 -07:00
dive.h Dive media: on import read metadata only once 2018-09-19 14:44:34 -07:00
divecomputer.cpp core: remove SettingsObjectWrapper and update qPref calls 2018-08-15 16:11:39 -07:00
divecomputer.h Dive computers: turn QMultiMap into sorted vector 2018-06-17 06:53:13 +09:00
divelist.c Core: split process_dives() in post-import and post-load versions 2018-09-23 11:50:53 -07:00
divelist.h Core: split process_dives() in post-import and post-load versions 2018-09-23 11:50:53 -07:00
divelogexportlogic.cpp divelogexportlogic: show warning on missing 'theme' folder 2018-08-17 00:58:01 +02:00
divelogexportlogic.h
divesite-helper.cpp Translations: unify gettextFromC::tr() and QObject::tr() 2018-07-04 05:33:31 +08:00
divesite.c core: remove clang warning in divesite.c 2018-07-11 12:59:33 +02:00
divesite.h Tags for geo references: Nicer look, translations and warning message 2017-10-17 06:12:07 -04:00
divesitehelpers.cpp Cleanup: fold core/helpers.h into core/qthelper.h 2018-06-04 08:50:10 -07:00
divesitehelpers.h Cleanup: remove all override modifiers 2018-08-01 06:30:00 -07:00
downloadfromdcthread.cpp Desktop/remember DCs: move non-UI-specific code into the core layer 2018-09-23 11:49:30 -07:00
downloadfromdcthread.h Make device enumeration use the device transport data 2018-08-27 22:10:38 -07:00
equipment.c Cleanup: user properly typed pointers 2018-08-23 05:21:08 -07:00
errorhelper.c Make report_error() reentrant 2018-01-31 14:47:26 +01:00
exif.cpp Coding-style: remove superfluous parentheses 2018-02-17 19:38:52 -08:00
exif.h
file.c Parse: pass dive_table argument to parse_file() 2018-08-23 10:17:12 -07:00
file.h Parse: pass dive_table argument to parse_file() 2018-08-23 10:17:12 -07:00
format.cpp Cleanup: Slightly shorten code in vqasprintf_loc() 2018-04-09 11:29:43 -07:00
format.h Cleanup: Move *_loc formatting functions into new format.cpp file 2018-04-09 11:29:43 -07:00
gas-model.c Cleanup: pass gasmix by value 2018-08-23 05:16:38 -07:00
gaspressures.c Cleanup: const-ify functions taking pointers to events 2018-08-23 05:16:38 -07:00
gaspressures.h
gettext.h
gettextfromc.cpp Localization: make cache thread safe and robust against use-after-free 2018-06-24 20:31:14 +02:00
gettextfromc.h Localization: remove gettextFromC::instance() 2018-06-24 20:31:14 +02:00
git-access.c prefs: git_local_only is not a preference 2018-09-10 16:26:49 -07:00
git-access.h prefs: git_local_only is not a preference 2018-09-10 16:26:49 -07:00
gpslocation.cpp cleanup: remove more GPS webservice code 2018-09-24 07:20:25 -07:00
gpslocation.h core: fix connect call 2018-09-24 07:20:25 -07:00
imagedownloader.cpp Dive media: Extract thumbnails from videos with ffmpeg 2018-07-28 15:31:25 -07:00
imagedownloader.h Dive media: Extract thumbnails from videos with ffmpeg 2018-07-28 15:31:25 -07:00
import-cobalt.c core: replace (void) with UNUSED(x) and include ssrf.h 2018-05-24 08:34:14 -07:00
import-csv.c Core: split process_dives() in post-import and post-load versions 2018-09-23 11:50:53 -07:00
import-csv.h Make a few functions of static linkage 2018-01-08 09:52:55 +02:00
import-divinglog.c Cleanup: pass gasmix by value 2018-08-23 05:16:38 -07:00
import-shearwater.c Remove unnecessary {} 2018-05-27 23:18:01 +03:00
import-suunto.c DM5 import: support for larger sample size 2018-06-15 17:45:33 -07:00
ios.cpp Make device enumeration use the device transport data 2018-08-27 22:10:38 -07:00
isocialnetworkintegration.cpp
isocialnetworkintegration.h
libdivecomputer.c Actually create a UUID when creating a dive site during download 2018-09-22 14:17:24 -07:00
libdivecomputer.h Add support for opening a DC_TRANSPORT_USBSTORAGE stream 2018-08-27 22:11:05 -07:00
liquivision.c core: replace (void) with UNUSED(x) and include ssrf.h 2018-05-24 08:34:14 -07:00
load-git.c cleanup[1/6]: do not set userid/save_userid_local from storage 2018-09-11 15:38:20 -07:00
macos.c macOS: always list 'FTDI' as a serial connection 2018-09-24 18:51:21 +02:00
membuffer.c Localization: Make Qt's locale-aware formatting accessible from C 2018-03-05 16:23:55 +01:00
membuffer.h Add usage documentation for membuffer helper functions 2018-04-10 08:18:32 -07:00
metadata.cpp Metadata: rudimentary support for XMP metadataa in MP4-based videos 2018-09-25 14:59:14 -07:00
metadata.h Metadata: extract duration fom QuickTime/MP4-style containers 2018-07-14 08:32:30 +02:00
metrics.cpp
metrics.h
ostctools.c Core: introduce new subsurface-string header 2018-05-14 10:13:39 -07:00
parse-xml.c Trivial: un-static function-local buffer 2018-09-22 14:44:34 -07:00
parse.c cleanup[1/6]: do not set userid/save_userid_local from storage 2018-09-11 15:38:20 -07:00
parse.h Parser: move match() into core/parse-xml.c 2018-08-30 13:32:09 -07:00
planner.c Cleanup: const-ify functions taking pointers to events 2018-08-23 05:16:38 -07:00
planner.h Cleanup: pass gasmix by value 2018-08-23 05:16:38 -07:00
plannernotes.c Planner: fix display of "overlapping dives" message 2018-09-12 14:17:55 -07:00
pluginmanager.cpp Unused code: remove PluginManager::socialNetworkIntegrationPlugins() 2018-01-10 16:45:42 +01:00
pluginmanager.h Unused code: remove PluginManager::socialNetworkIntegrationPlugins() 2018-01-10 16:45:42 +01:00
pref.h qPref: add mobile_scale preference 2018-09-25 15:58:17 +02:00
profile.c Profile: fix SAC calculation for air dives 2018-09-10 14:23:59 -07:00
profile.h Cleanup: const-ify functions taking pointers to events 2018-08-23 05:16:38 -07:00
qt-ble.cpp qt-ble: re-organize how we pick the GATT characteristics to read and write 2018-09-24 17:12:58 -07:00
qt-ble.h qt-ble: set up infrastructure for better preferred service choice 2018-09-23 17:29:05 -07:00
qt-gui.h core,tests: change qml register function 2018-09-11 17:22:58 -07:00
qt-init.cpp Set desktop file name to avoid a broken icon under KDE Wayland 2018-09-09 18:44:40 -07:00
qthelper.cpp core: remove QSettings from qthelper 2018-08-25 11:49:47 -07:00
qthelper.h For media file open dialog add different file filters 2018-07-15 09:38:12 -07:00
qtserialbluetooth.cpp Make sure our libdivecomputer custom IO interfaces have sleep functions 2018-07-13 11:25:38 -07:00
save-git.c cleanup[3/6]: do not save the userid any more 2018-09-11 15:38:20 -07:00
save-html.c Cleanup: constify get_units() 2018-09-07 11:03:30 -07:00
save-html.h
save-xml.c Optional anonymization upon export 2018-09-13 08:16:54 -07:00
serial_ftdi.c serial_ftdi: use Sleep() on Win32 2018-09-12 17:18:47 -07:00
sha1.c
sha1.h
ssrf.h mobile: add timer to measure startup. 2018-05-30 21:47:07 -07:00
statistics.c Cleanup: const-ify functions taking dives and divecomputers 2018-08-23 14:41:01 -07:00
statistics.h Cleanup: fold core/helpers.h into core/qthelper.h 2018-06-04 08:50:10 -07:00
strndup.h
strtod.c Core: introduce new subsurface-string header 2018-05-14 10:13:39 -07:00
subsurface-string.h Core: don't inline rarely used function 2018-05-14 10:13:39 -07:00
subsurfacestartup.c qPref: add mobile_scale preference 2018-09-25 15:58:17 +02:00
subsurfacestartup.h Fix ownership issues in preferences code 2017-11-25 07:41:09 -08:00
subsurfacesysinfo.cpp
subsurfacesysinfo.h
taxonomy.c
taxonomy.h
time.c
uemis-downloader.c Core: introduce new subsurface-string header 2018-05-14 10:13:39 -07:00
uemis.c Core: remove dive.h from files that don't need it 2018-05-14 10:13:39 -07:00
uemis.h
units.h core: removed clang warnings from units.h 2018-05-18 21:27:37 +03:00
unix.c Make device enumeration use the device transport data 2018-08-27 22:10:38 -07:00
version.c
version.h
videoframeextractor.cpp Dive media: Extract thumbnails from videos with ffmpeg 2018-07-28 15:31:25 -07:00
videoframeextractor.h Dive media: Extract thumbnails from videos with ffmpeg 2018-07-28 15:31:25 -07:00
webservice.h
windows.c core/windows.c: write logs to the user path 2018-09-03 13:29:03 -07:00
windowtitleupdate.cpp Cleanup: Make WindowsTitleUpdate a global object 2018-07-30 13:55:23 -07:00
windowtitleupdate.h Cleanup: Make WindowsTitleUpdate a global object 2018-07-30 13:55:23 -07:00
worldmap-options.h
worldmap-save.c Core: remove dive.h from files that don't need it 2018-05-14 10:13:39 -07:00
worldmap-save.h
xmp_parser.cpp Metadata: rudimentary support for XMP metadataa in MP4-based videos 2018-09-25 14:59:14 -07:00
xmp_parser.h Metadata: rudimentary support for XMP metadataa in MP4-based videos 2018-09-25 14:59:14 -07:00