diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 00000000..4928ac02
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,2 @@
+# Don't touch line endings for all files
+* -text
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
new file mode 100644
index 00000000..68aa92a3
--- /dev/null
+++ b/.github/FUNDING.yml
@@ -0,0 +1 @@
+github: StefanOltmann
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 0118fce1..633c0c80 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -13,7 +13,7 @@ on:
jobs:
build:
name: Build & Test
- runs-on: macos-15
+ runs-on: macos-26
steps:
- name: Checkout workspace
uses: actions/checkout@v4
@@ -24,10 +24,10 @@ jobs:
uses: actions/setup-java@v4
with:
distribution: 'temurin'
- java-version: '17.0.16+8'
- - name: Select XCode 16.4
+ java-version: '17'
+ - name: Select XCode 26.4
run: |
- sudo xcode-select -s /Applications/Xcode_16.4.app/Contents/Developer
+ sudo xcode-select -s /Applications/Xcode_26.4.app/Contents/Developer
xcodebuild -version
- name: Gradle Cache
uses: actions/cache@v4
@@ -99,12 +99,6 @@ jobs:
if-no-files-found: error
name: kim.exe
path: build/bin/win/releaseExecutable/kim.exe
- - name: Upload kim-macosX64.kexe
- uses: actions/upload-artifact@v4
- with:
- if-no-files-found: error
- name: kim-macosX64.kexe
- path: build/bin/macosX64/releaseExecutable/kim.kexe
- name: Upload kim-macosArm64.kexe
uses: actions/upload-artifact@v4
with:
diff --git a/.gitignore b/.gitignore
index 3e5d7d45..8220e6fa 100644
--- a/.gitignore
+++ b/.gitignore
@@ -25,4 +25,4 @@
/.kotlin/
/build/
/local.properties
-/src/commonTest/resources/com/ashampoo/kim/testdata/full/*.html
+/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/*.html
diff --git a/.idea/runConfigurations/Check_dependency_updates.xml b/.idea/runConfigurations/Check_dependency_updates.xml
index be922287..3039a10a 100644
--- a/.idea/runConfigurations/Check_dependency_updates.xml
+++ b/.idea/runConfigurations/Check_dependency_updates.xml
@@ -4,7 +4,7 @@
-
+
@@ -17,8 +17,11 @@
true
true
+ false
false
- false
+ false
+ false
+ false
\ No newline at end of file
diff --git a/NOTICE.txt b/NOTICE.txt
index 481426f7..cc0d5ef2 100644
--- a/NOTICE.txt
+++ b/NOTICE.txt
@@ -1,22 +1,42 @@
-Ashampoo Kim - Kotlin Image Metadata
+Kim - Kotlin Image Metadata
+Copyright 2026 Stefan Oltmann
+
+-----------------------------------------------------------------------
+
+This project is a continuation of the work originally created by
+Stefan Oltmann during his employment at Ashampoo GmbH & Co. KG.
+
Copyright 2025 Ashampoo GmbH & Co. KG
+Copyright 2026 Stefan Oltmann
+
+The usage rights to the original contributions (up to August 2025)
+are held by Ashampoo GmbH & Co. KG and are licensed under the
+Apache License, Version 2.0.
+
+Since 2026, the project is independently maintained and
+developed by Stefan Oltmann.
+
+-----------------------------------------------------------------------
This product includes a modified portion of 'Apache Commons Imaging'
developed by the Apache Software Foundation (https://www.apache.org/).
-The metadata handling logic, originally implemented in Java, has been rewritten in Kotlin.
+The metadata handling logic, originally implemented in Java, has
+been rewritten in Kotlin.
Copyright 2007-2023 The Apache Software Foundation
Logic for reading ISOBMFF containers was derived from 'metadata-extractor'
developed by Drew Noakes (https://github.com/drewnoakes/metadata-extractor).
Copyright 2002-2023 Drew Noakes and contributors
+-----------------------------------------------------------------------
+
This product includes images from Unsplash provided under
the Unsplash license (https://unsplash.com/license).
These files are used as test data.
-The sample images photo_62.nef, photo_63.arw, photo_64.rw2,
-photo_56.orf, photo_72.hif and photo_83.cr3 are taken from
+The sample images media_62.nef, media_63.arw, media_64.rw2,
+media_56.orf, media_72.hif and media_83.cr3 are taken from
https://github.com/drewnoakes/metadata-extractor-images
under the note "You are free to use these media files however you wish".
-The sample image photo_77.heic was contributed by Miroslav Sobotka.
+The sample image media_77.heic was contributed by Miroslav Sobotka.
diff --git a/README.md b/README.md
index 1a752cf3..de444386 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
# Kim - Kotlin Image Metadata
-[](httpw://kotlinlang.org)
+[](httpw://kotlinlang.org)



@@ -12,8 +12,6 @@
Kim is a Kotlin Multiplatform library for reading and writing image metadata.
-It's part of [Ashampoo Photo Organizer](https://ashampoo.com/photo-organizer).
-
## Features
* JPG: Read & Write EXIF, IPTC & XMP
@@ -21,6 +19,7 @@ It's part of [Ashampoo Photo Organizer](https://ashampoo.com/photo-organizer).
+ Also read non-standard EXIF & IPTC from `tEXt`/`zTXt` chunk
* WebP: Read & Write EXIF & XMP
* HEIC / AVIF: Read EXIF & XMP
+ + Support for animated AVIF files (AV1 Image Sequence)
* JXL: Read & Write EXIF & XMP of uncompressed files
* TIFF / RAW: Read EXIF & XMP
+ Full support for Adobe DNG, Canon CR2, Canon CR3 & Fujifilm RAF
@@ -29,17 +28,14 @@ It's part of [Ashampoo Photo Organizer](https://ashampoo.com/photo-organizer).
+ API for preview image extraction of DNG, CR2, CR3, RAF, NEF, ARW & RW2
* GIF: Read & Write XMP
* Handling of XMP content through
- [XMP Core for Kotlin Multiplatform](https://github.com/Ashampoo/xmpcore)
+ [XMP Core for Kotlin Multiplatform](https://github.com/StefanOltmann/xmpcore)
* Convenient `Kim.update()` API to perform updates to the relevant places
+ JPG: Lossless rotation by modifying only one byte (where present)
-The future development of features on our part is driven entirely by the needs
-of Ashampoo Photo Organizer, which, in turn, is driven by user community feedback.
-
## Installation
```
-implementation("com.ashampoo:kim:0.26.2")
+implementation("de.stefan-oltmann:kim:0.29.0")
```
For the targets `wasmJs` & `js` you also need to specify this:
@@ -53,8 +49,8 @@ implementation(npm("pako", "2.1.0"))
### Read metadata
`Kim.readMetadata()` takes `kotlin.ByteArray` on all platforms and depending on
-the platform also `kotlinx.io.files.Path`, Ktor `Source` & `ByteReadChannel`,
-`java.io.File`, `java.io.InputStream`, `NSData` and `String` paths.
+the platform also `kotlinx.io.files.Path`, `kotlinx.io.Source` (for usage with Ktor) & `ByteReadChannel`,
+`java.io.File`, `java.io.InputStream`, `NSData` (iOS) and `String` paths.
```kotlin
val bytes: ByteArray = loadBytes()
@@ -75,7 +71,7 @@ println("Taken date: $takenDate")
### Create high level summary object
-This creates an instance of [PhotoMetadata](src/commonMain/kotlin/com/ashampoo/kim/model/PhotoMetadata.kt).
+This creates an instance of [MetadataSummary](src/commonMain/kotlin/de/stefan_oltmann/kim/model/MetadataSummary.kt).
It contains the following:
- Image size
@@ -95,7 +91,7 @@ It contains the following:
```kotlin
val bytes: ByteArray = loadBytes()
-val photoMetadata = Kim.readMetadata(bytes).convertToPhotoMetadata()
+val summary = Kim.readMetadata(bytes).convertToSummary()
```
### Change orientation using low level API
@@ -136,7 +132,7 @@ val newBytes = Kim.update(
)
```
-See [AbstractUpdaterTest](src/commonTest/kotlin/com/ashampoo/kim/format/AbstractUpdaterTest.kt) for more samples.
+See [AbstractUpdaterTest](src/commonTest/kotlin/de/stefan_oltmann/kim/format/AbstractUpdaterTest.kt) for more samples.
### Update thumbnail using Kim.update() API
@@ -156,7 +152,7 @@ See the [Java example project](examples/kim-java-sample/src/main/java/Main.java)
## Limitations
-* Inability to update EXIF, IPTC and XMP in JPG files simultaneously.
+* Inability to update EXIF, IPTC, and XMP in JPG files simultaneously.
* Does not read the image size and orientation for HEIC, AVIF & JPEG XL.
* Does not read brotli compressed metadata of JPEG XL due to missing brotli KMP libs.
* MakerNote support is experimental and limited.
@@ -175,7 +171,7 @@ This approach extends to AVIF images, as they repurpose the same boxes.
## Contributions
-Contributions to Ashampoo Kim are welcome! If you encounter any issues,
+Contributions to Kim are welcome! If you encounter any issues,
have suggestions for improvements, or would like to contribute new features,
please feel free to submit a pull request.
diff --git a/build.gradle.kts b/build.gradle.kts
index 49246ca4..33a21a83 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -21,10 +21,10 @@ repositories {
mavenCentral()
}
-val productName: String = "Ashampoo Kim"
+val productName: String = "Kim"
-description = productName
-group = "com.ashampoo"
+group = "de.stefan_oltmann.kim"
+description = "Kotlin Image Metadata manipulation library"
version = "0.0.0"
gitVersioning.apply {
@@ -85,7 +85,7 @@ kotlin {
binaries {
executable(setOf(NativeBuildType.RELEASE)) {
baseName = "kim"
- entryPoint = "com.ashampoo.kim.main"
+ entryPoint = "de.stefan_oltmann.kim.main"
}
staticLib(namePrefix = "", setOf(NativeBuildType.RELEASE)) {
baseName = "kim"
@@ -96,7 +96,7 @@ kotlin {
linuxX64 {
binaries {
executable(setOf(NativeBuildType.RELEASE)) {
- entryPoint = "com.ashampoo.kim.main"
+ entryPoint = "de.stefan_oltmann.kim.main"
}
staticLib(namePrefix = "", setOf(NativeBuildType.RELEASE)) {
baseName = "kim"
@@ -107,7 +107,7 @@ kotlin {
linuxArm64 {
binaries {
executable(setOf(NativeBuildType.RELEASE)) {
- entryPoint = "com.ashampoo.kim.main"
+ entryPoint = "de.stefan_oltmann.kim.main"
}
staticLib(namePrefix = "", setOf(NativeBuildType.RELEASE)) {
baseName = "kim"
@@ -151,7 +151,11 @@ kotlin {
/* Kotlin Test */
implementation(kotlin("test"))
+ /* Multiplatform file access */
implementation(libs.kotlinx.io.core)
+
+ /* Test resources */
+ implementation(libs.resources)
}
}
@@ -165,13 +169,12 @@ kotlin {
/* Apple Silicon iOS Simulator */
iosSimulatorArm64(),
/* macOS Devices */
- macosX64(),
macosArm64()
).forEach {
it.binaries.executable(setOf(NativeBuildType.RELEASE)) {
baseName = "kim"
- entryPoint = "com.ashampoo.kim.main"
+ entryPoint = "de.stefan_oltmann.kim.main"
}
it.binaries.framework(
@@ -246,7 +249,6 @@ kotlin {
val iosArm64Main by sourceSets.getting
val iosX64Main by sourceSets.getting
val iosSimulatorArm64Main by sourceSets.getting
- val macosX64Main by sourceSets.getting
val macosArm64Main by sourceSets.getting
@Suppress("UnusedPrivateMember") // False positive
@@ -259,14 +261,12 @@ kotlin {
iosArm64Main.dependsOn(this)
iosX64Main.dependsOn(this)
iosSimulatorArm64Main.dependsOn(this)
- macosX64Main.dependsOn(this)
macosArm64Main.dependsOn(this)
}
val iosArm64Test by sourceSets.getting
val iosX64Test by sourceSets.getting
val iosSimulatorArm64Test by sourceSets.getting
- val macosX64Test by sourceSets.getting
val macosArm64Test by sourceSets.getting
@Suppress("UnusedPrivateMember") // False positive
@@ -277,7 +277,6 @@ kotlin {
iosArm64Test.dependsOn(this)
iosX64Test.dependsOn(this)
iosSimulatorArm64Test.dependsOn(this)
- macosX64Test.dependsOn(this)
macosArm64Test.dependsOn(this)
}
@@ -324,7 +323,7 @@ tasks.getByPath("build").finalizedBy(writeVersion)
// region Android setup
android {
- namespace = "com.ashampoo.kim"
+ namespace = "de.stefan_oltmann.kim"
compileSdk = libs.versions.android.compile.sdk.get().toInt()
buildToolsVersion = libs.versions.android.build.tools.get()
@@ -361,7 +360,7 @@ mavenPublishing {
signAllPublications()
coordinates(
- groupId = "com.ashampoo",
+ groupId = "de.stefan-oltmann",
artifactId = "kim",
version = version.toString()
)
@@ -370,7 +369,7 @@ mavenPublishing {
name = productName
description = "Kotlin Multiplatform library for image metadata manipulation"
- url = "https://github.com/Software-Rangers/kim"
+ url = "https://github.com/StefanOltmann/kim"
licenses {
license {
@@ -379,25 +378,18 @@ mavenPublishing {
}
}
- organization {
- name = "Software Rangers GmbH"
- url = "https://software-rangers.com/"
- }
-
developers {
developer {
name = "Stefan Oltmann"
url = "https://stefan-oltmann.de/"
- organization = "Software Rangers GmbH"
- organizationUrl = "https://software-rangers.com/"
roles = listOf("maintainer", "developer")
properties = mapOf("github" to "StefanOltmann")
}
}
scm {
- url = "https://github.com/Software-Rangers/kim"
- connection = "scm:git:git://github.com/Software-Rangers/kim.git"
+ url = "https://github.com/StefanOltmann/kim"
+ connection = "scm:git:git://github.com/StefanOltmann/kim.git"
}
}
}
diff --git a/detekt.yml b/detekt.yml
index f6a4576a..f2fa033b 100644
--- a/detekt.yml
+++ b/detekt.yml
@@ -366,7 +366,7 @@ naming:
privatePropertyPattern: '(_)?[A-Za-z][_A-Za-z0-9]*'
PackageNaming:
active: true
- packagePattern: '[a-z]+(\.[a-z][A-Za-z0-9]*)*'
+ packagePattern: '[a-z]+(\.[a-z][A-Za-z0-9_]*)*'
TopLevelPropertyNaming:
active: true
constantPattern: '[A-Z][_A-Z0-9]*'
diff --git a/examples/kim-java-sample/build.gradle b/examples/kim-java-sample/build.gradle
index 435e6834..8dbaba2c 100644
--- a/examples/kim-java-sample/build.gradle
+++ b/examples/kim-java-sample/build.gradle
@@ -2,7 +2,7 @@ plugins {
id 'java'
}
-group = 'com.ashampoo'
+group = 'de.stefan-oltmann'
version = '1.0-SNAPSHOT'
repositories {
@@ -10,7 +10,7 @@ repositories {
}
dependencies {
- implementation 'com.ashampoo:kim:0.18.4'
+ implementation 'de.stefan-oltmann:kim:0.27.0'
}
// Needed to make it work for the Gradle java plugin
diff --git a/examples/kim-java-sample/src/main/java/Main.java b/examples/kim-java-sample/src/main/java/Main.java
index 4c923c25..0fdbb535 100644
--- a/examples/kim-java-sample/src/main/java/Main.java
+++ b/examples/kim-java-sample/src/main/java/Main.java
@@ -1,10 +1,10 @@
-import com.ashampoo.kim.Kim;
-import com.ashampoo.kim.format.ImageMetadata;
-import com.ashampoo.kim.input.ByteReader;
-import com.ashampoo.kim.input.JvmInputStreamByteReader;
-import com.ashampoo.kim.jvm.KimJvm;
-import com.ashampoo.kim.model.MetadataUpdate;
-import com.ashampoo.kim.output.ByteArrayByteWriter;
+import de.stefan_oltmann.kim.Kim;
+import de.stefan_oltmann.kim.format.ImageMetadata;
+import de.stefan_oltmann.kim.input.ByteReader;
+import de.stefan_oltmann.kim.input.JvmInputStreamByteReader;
+import de.stefan_oltmann.kim.jvm.KimJvm;
+import de.stefan_oltmann.kim.model.MetadataUpdate;
+import de.stefan_oltmann.kim.output.ByteArrayByteWriter;
import java.io.File;
import java.io.FileInputStream;
diff --git a/examples/kim-kotlin-jvm-sample/build.gradle.kts b/examples/kim-kotlin-jvm-sample/build.gradle.kts
index bc44f067..d647d9e9 100644
--- a/examples/kim-kotlin-jvm-sample/build.gradle.kts
+++ b/examples/kim-kotlin-jvm-sample/build.gradle.kts
@@ -2,7 +2,7 @@ plugins {
kotlin("jvm") version "2.0.0"
}
-group = "com.ashampoo"
+group = "de.stefan-oltmann"
version = "1.0-SNAPSHOT"
repositories {
@@ -10,5 +10,5 @@ repositories {
}
dependencies {
- implementation("com.ashampoo:kim:0.18.4")
+ implementation("de.stefan-oltmann:kim:0.27.0")
}
diff --git a/examples/kim-kotlin-jvm-sample/src/main/kotlin/Main.kt b/examples/kim-kotlin-jvm-sample/src/main/kotlin/Main.kt
index 050ce50b..41627baa 100644
--- a/examples/kim-kotlin-jvm-sample/src/main/kotlin/Main.kt
+++ b/examples/kim-kotlin-jvm-sample/src/main/kotlin/Main.kt
@@ -1,20 +1,20 @@
-import com.ashampoo.kim.Kim
-import com.ashampoo.kim.common.writeBytes
-import com.ashampoo.kim.format.jpeg.JpegRewriter
-import com.ashampoo.kim.format.tiff.TiffContents
-import com.ashampoo.kim.format.tiff.TiffReader
-import com.ashampoo.kim.format.tiff.constant.ExifTag
-import com.ashampoo.kim.format.tiff.constant.GeoTiffTag
-import com.ashampoo.kim.format.tiff.write.TiffOutputSet
-import com.ashampoo.kim.format.tiff.write.TiffWriterLossy
-import com.ashampoo.kim.input.DefaultRandomAccessByteReader
-import com.ashampoo.kim.input.JvmInputStreamByteReader
-import com.ashampoo.kim.input.KotlinIoSourceByteReader
-import com.ashampoo.kim.input.use
-import com.ashampoo.kim.jvm.readMetadata
-import com.ashampoo.kim.model.MetadataUpdate
-import com.ashampoo.kim.output.ByteArrayByteWriter
-import com.ashampoo.kim.output.OutputStreamByteWriter
+import de.stefan_oltmann.kim.Kim
+import de.stefan_oltmann.kim.common.writeBytes
+import de.stefan_oltmann.kim.format.jpeg.JpegRewriter
+import de.stefan_oltmann.kim.format.tiff.TiffContents
+import de.stefan_oltmann.kim.format.tiff.TiffReader
+import de.stefan_oltmann.kim.format.tiff.constant.ExifTag
+import de.stefan_oltmann.kim.format.tiff.constant.GeoTiffTag
+import de.stefan_oltmann.kim.format.tiff.write.TiffOutputSet
+import de.stefan_oltmann.kim.format.tiff.write.TiffWriterLossy
+import de.stefan_oltmann.kim.input.DefaultRandomAccessByteReader
+import de.stefan_oltmann.kim.input.JvmInputStreamByteReader
+import de.stefan_oltmann.kim.input.KotlinIoSourceByteReader
+import de.stefan_oltmann.kim.input.use
+import de.stefan_oltmann.kim.jvm.readMetadata
+import de.stefan_oltmann.kim.model.MetadataUpdate
+import de.stefan_oltmann.kim.output.ByteArrayByteWriter
+import de.stefan_oltmann.kim.output.OutputStreamByteWriter
import java.io.File
fun main() {
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index f8da53ff..bb67d39d 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -1,31 +1,32 @@
[versions]
-kotlin = "2.2.0"
-android-gradle = "8.9.3"
+kotlin = "2.3.20"
+android-gradle = "8.13.2"
android-compile-sdk = "36"
android-build-tools = "36.0.0"
android-min-sdk = "21"
detekt = "1.23.8"
-kover = "0.9.1"
+kover = "0.9.8"
build-time-tracker = "5.0.1"
git-versioning = "6.4.4"
-resources = "0.10.1"
-versions-plugin = "0.52.0"
-maven-publish = "0.34.0"
+resources = "0.15.0"
+versions-plugin = "0.53.0"
+maven-publish = "0.36.0"
-ktor = "3.2.3"
-xmpcore = "1.6.1"
+ktor = "3.4.2"
+xmpcore = "1.7.0"
kotlinx-datetime = "0.7.1"
-kotlinx-io = "0.8.0"
+kotlinx-io = "0.9.0"
kotlinx-browser = "0.3"
pako = "2.1.0"
[libraries]
kotlinx-datetime = { module = "org.jetbrains.kotlinx:kotlinx-datetime", version.ref = "kotlinx-datetime" }
-xmpcore = { module = "com.ashampoo:xmpcore", version.ref = "xmpcore" }
+xmpcore = { module = "de.stefan-oltmann:xmpcore", version.ref = "xmpcore" }
kotlinx-io-core = { module = "org.jetbrains.kotlinx:kotlinx-io-core", version.ref = "kotlinx-io" }
ktor-io = { module = "io.ktor:ktor-io", version.ref = "ktor" }
kotlinx-browser = { module = "org.jetbrains.kotlinx:kotlinx-browser", version.ref = "kotlinx-browser" }
detekt-formatting = { module = "io.gitlab.arturbosch.detekt:detekt-formatting", version.ref = "detekt" }
+resources = { module = "com.goncalossilva:resources", version.ref = "resources" }
[plugins]
kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index aa02b02f..5b59ea8e 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-bin.zip
networkTimeout=10000
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/src/androidMain/kotlin/com/ashampoo/kim/android/ContentResolverExtensions.kt b/src/androidMain/kotlin/de/stefan_oltmann/kim/android/ContentResolverExtensions.kt
similarity index 98%
rename from src/androidMain/kotlin/com/ashampoo/kim/android/ContentResolverExtensions.kt
rename to src/androidMain/kotlin/de/stefan_oltmann/kim/android/ContentResolverExtensions.kt
index 9a657f6f..0d6fcb37 100644
--- a/src/androidMain/kotlin/com/ashampoo/kim/android/ContentResolverExtensions.kt
+++ b/src/androidMain/kotlin/de/stefan_oltmann/kim/android/ContentResolverExtensions.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.android
+package de.stefan_oltmann.kim.android
import android.content.ContentResolver
import android.net.Uri
diff --git a/src/androidMain/kotlin/com/ashampoo/kim/android/KimAndroid.kt b/src/androidMain/kotlin/de/stefan_oltmann/kim/android/KimAndroid.kt
similarity index 88%
rename from src/androidMain/kotlin/com/ashampoo/kim/android/KimAndroid.kt
rename to src/androidMain/kotlin/de/stefan_oltmann/kim/android/KimAndroid.kt
index 4073c83f..21ea94a2 100644
--- a/src/androidMain/kotlin/com/ashampoo/kim/android/KimAndroid.kt
+++ b/src/androidMain/kotlin/de/stefan_oltmann/kim/android/KimAndroid.kt
@@ -13,20 +13,20 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.android
+package de.stefan_oltmann.kim.android
import android.content.ContentResolver
import android.content.Context
import android.net.Uri
import android.os.Build
-import com.ashampoo.kim.Kim
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.common.ImageWriteException
-import com.ashampoo.kim.format.ImageMetadata
-import com.ashampoo.kim.input.AndroidInputStreamByteReader
-import com.ashampoo.kim.input.ByteReader
-import com.ashampoo.kim.output.ByteWriter
-import com.ashampoo.kim.output.OutputStreamByteWriter
+import de.stefan_oltmann.kim.Kim
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.common.ImageWriteException
+import de.stefan_oltmann.kim.format.MediaMetadata
+import de.stefan_oltmann.kim.input.AndroidInputStreamByteReader
+import de.stefan_oltmann.kim.input.ByteReader
+import de.stefan_oltmann.kim.output.ByteWriter
+import de.stefan_oltmann.kim.output.OutputStreamByteWriter
import java.io.File
import java.io.InputStream
@@ -37,7 +37,7 @@ public object KimAndroid {
@JvmStatic
@Throws(ImageReadException::class)
- public fun readMetadata(inputStream: InputStream, length: Long): ImageMetadata? =
+ public fun readMetadata(inputStream: InputStream, length: Long): MediaMetadata? =
Kim.readMetadata(
byteReader = AndroidInputStreamByteReader(
inputStream = inputStream,
@@ -47,12 +47,12 @@ public object KimAndroid {
@JvmStatic
@Throws(ImageReadException::class)
- public fun readMetadata(path: String): ImageMetadata? =
+ public fun readMetadata(path: String): MediaMetadata? =
readMetadata(File(path))
@JvmStatic
@Throws(ImageReadException::class)
- public fun readMetadata(file: File): ImageMetadata? {
+ public fun readMetadata(file: File): MediaMetadata? {
if (!file.exists())
throw ImageReadException("File does not exist: $file")
@@ -69,7 +69,7 @@ public object KimAndroid {
context: Context,
uri: String,
length: Long? = null
- ): ImageMetadata? =
+ ): MediaMetadata? =
Kim.readMetadata(
byteReader = createByteReader(
contentResolver = context.contentResolver,
@@ -84,7 +84,7 @@ public object KimAndroid {
contentResolver: ContentResolver,
uri: String,
length: Long? = null
- ): ImageMetadata? =
+ ): MediaMetadata? =
Kim.readMetadata(
byteReader = createByteReader(
contentResolver = contentResolver,
@@ -209,15 +209,15 @@ public object KimAndroid {
}
@Throws(ImageReadException::class)
-public fun Kim.readMetadata(inputStream: InputStream, length: Long): ImageMetadata? =
+public fun Kim.readMetadata(inputStream: InputStream, length: Long): MediaMetadata? =
KimAndroid.readMetadata(inputStream, length)
@Throws(ImageReadException::class)
-public fun Kim.readMetadata(path: String): ImageMetadata? =
+public fun Kim.readMetadata(path: String): MediaMetadata? =
KimAndroid.readMetadata(path)
@Throws(ImageReadException::class)
-public fun Kim.readMetadata(file: File): ImageMetadata? =
+public fun Kim.readMetadata(file: File): MediaMetadata? =
KimAndroid.readMetadata(file)
@Throws(ImageReadException::class)
@@ -225,7 +225,7 @@ public fun Kim.readMetadata(
context: Context,
uri: String,
length: Long? = null
-): ImageMetadata? =
+): MediaMetadata? =
KimAndroid.readMetadata(context, uri, length)
@Throws(ImageReadException::class)
@@ -233,5 +233,5 @@ public fun Kim.readMetadata(
contentResolver: ContentResolver,
uri: String,
length: Long? = null
-): ImageMetadata? =
+): MediaMetadata? =
KimAndroid.readMetadata(contentResolver, uri, length)
diff --git a/src/androidMain/kotlin/com/ashampoo/kim/common/ZLib.android.kt b/src/androidMain/kotlin/de/stefan_oltmann/kim/common/ZLib.android.kt
similarity index 97%
rename from src/androidMain/kotlin/com/ashampoo/kim/common/ZLib.android.kt
rename to src/androidMain/kotlin/de/stefan_oltmann/kim/common/ZLib.android.kt
index 3f71f198..4a6ae517 100644
--- a/src/androidMain/kotlin/com/ashampoo/kim/common/ZLib.android.kt
+++ b/src/androidMain/kotlin/de/stefan_oltmann/kim/common/ZLib.android.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.common
+package de.stefan_oltmann.kim.common
import java.io.ByteArrayOutputStream
import java.util.zip.Deflater
diff --git a/src/androidMain/kotlin/com/ashampoo/kim/input/AndroidInputStreamByteReader.kt b/src/androidMain/kotlin/de/stefan_oltmann/kim/input/AndroidInputStreamByteReader.kt
similarity index 95%
rename from src/androidMain/kotlin/com/ashampoo/kim/input/AndroidInputStreamByteReader.kt
rename to src/androidMain/kotlin/de/stefan_oltmann/kim/input/AndroidInputStreamByteReader.kt
index fecabd6f..8b430f8e 100644
--- a/src/androidMain/kotlin/com/ashampoo/kim/input/AndroidInputStreamByteReader.kt
+++ b/src/androidMain/kotlin/de/stefan_oltmann/kim/input/AndroidInputStreamByteReader.kt
@@ -13,10 +13,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.input
+package de.stefan_oltmann.kim.input
import android.os.Build
-import com.ashampoo.kim.common.slice
+import de.stefan_oltmann.kim.common.slice
import java.io.InputStream
/**
diff --git a/src/androidMain/kotlin/com/ashampoo/kim/output/OutputStreamByteWriter.kt b/src/androidMain/kotlin/de/stefan_oltmann/kim/output/OutputStreamByteWriter.kt
similarity index 96%
rename from src/androidMain/kotlin/com/ashampoo/kim/output/OutputStreamByteWriter.kt
rename to src/androidMain/kotlin/de/stefan_oltmann/kim/output/OutputStreamByteWriter.kt
index 946198a8..93656e58 100644
--- a/src/androidMain/kotlin/com/ashampoo/kim/output/OutputStreamByteWriter.kt
+++ b/src/androidMain/kotlin/de/stefan_oltmann/kim/output/OutputStreamByteWriter.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.output
+package de.stefan_oltmann.kim.output
import java.io.OutputStream
diff --git a/src/androidUnitTest/kotlin/com/ashampoo/kim/ResourcePath.android.kt b/src/androidUnitTest/kotlin/com/ashampoo/kim/ResourcePath.android.kt
deleted file mode 100644
index 067606ef..00000000
--- a/src/androidUnitTest/kotlin/com/ashampoo/kim/ResourcePath.android.kt
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * Copyright 2025 Ashampoo GmbH & Co. KG
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.ashampoo.kim
-
-actual fun getPathForResource(path: String): String = path
diff --git a/src/appleMain/kotlin/com/ashampoo/kim/apple/KimApple.kt b/src/appleMain/kotlin/de/stefan_oltmann/kim/apple/KimApple.kt
similarity index 78%
rename from src/appleMain/kotlin/com/ashampoo/kim/apple/KimApple.kt
rename to src/appleMain/kotlin/de/stefan_oltmann/kim/apple/KimApple.kt
index 19417fc6..a8f30268 100644
--- a/src/appleMain/kotlin/com/ashampoo/kim/apple/KimApple.kt
+++ b/src/appleMain/kotlin/de/stefan_oltmann/kim/apple/KimApple.kt
@@ -13,13 +13,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.apple
+package de.stefan_oltmann.kim.apple
-import com.ashampoo.kim.Kim
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.common.readFileAsByteArray
-import com.ashampoo.kim.format.ImageMetadata
-import com.ashampoo.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.Kim
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.common.readFileAsByteArray
+import de.stefan_oltmann.kim.format.MediaMetadata
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
import kotlinx.cinterop.ExperimentalForeignApi
import kotlinx.cinterop.addressOf
import kotlinx.cinterop.usePinned
@@ -32,11 +32,11 @@ import platform.posix.memcpy
public object KimApple {
@Throws(ImageReadException::class)
- public fun readMetadata(data: NSData): ImageMetadata? =
+ public fun readMetadata(data: NSData): MediaMetadata? =
Kim.readMetadata(ByteArrayByteReader(convertDataToByteArray(data)))
@Throws(ImageReadException::class)
- public fun readMetadata(path: String): ImageMetadata? {
+ public fun readMetadata(path: String): MediaMetadata? {
val fileBytes = readFileAsByteArray(path) ?: return null
@@ -45,11 +45,11 @@ public object KimApple {
}
@Throws(ImageReadException::class)
-public fun Kim.readMetadata(data: NSData): ImageMetadata? =
+public fun Kim.readMetadata(data: NSData): MediaMetadata? =
KimApple.readMetadata(data)
@Throws(ImageReadException::class)
-public fun Kim.readMetadata(path: String): ImageMetadata? =
+public fun Kim.readMetadata(path: String): MediaMetadata? =
KimApple.readMetadata(path)
@OptIn(ExperimentalForeignApi::class)
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/ImageParser.kt b/src/commonMain/kotlin/com/ashampoo/kim/format/ImageParser.kt
deleted file mode 100644
index 5bcb66da..00000000
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/ImageParser.kt
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright 2025 Ashampoo GmbH & Co. KG
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.ashampoo.kim.format
-
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.format.bmff.BaseMediaFileFormatImageParser
-import com.ashampoo.kim.format.gif.GifImageParser
-import com.ashampoo.kim.format.jpeg.JpegImageParser
-import com.ashampoo.kim.format.png.PngImageParser
-import com.ashampoo.kim.format.raf.RafImageParser
-import com.ashampoo.kim.format.tiff.TiffImageParser
-import com.ashampoo.kim.format.webp.WebPImageParser
-import com.ashampoo.kim.input.ByteReader
-import com.ashampoo.kim.model.ImageFormat
-import kotlin.jvm.JvmStatic
-
-public fun interface ImageParser {
-
- @Throws(ImageReadException::class)
- public fun parseMetadata(byteReader: ByteReader): ImageMetadata
-
- public companion object {
-
- @JvmStatic
- public fun forFormat(imageFormat: ImageFormat): ImageParser? =
- when (imageFormat) {
-
- ImageFormat.JPEG -> JpegImageParser
-
- ImageFormat.PNG -> PngImageParser
-
- ImageFormat.WEBP -> WebPImageParser
-
- ImageFormat.TIFF,
- ImageFormat.CR2,
- ImageFormat.NEF,
- ImageFormat.ARW,
- ImageFormat.RW2,
- ImageFormat.ORF -> TiffImageParser
-
- ImageFormat.RAF -> RafImageParser
-
- ImageFormat.HEIC,
- ImageFormat.AVIF,
- ImageFormat.CR3,
- ImageFormat.JXL -> BaseMediaFileFormatImageParser
-
- ImageFormat.GIF -> GifImageParser
-
- else -> null
- }
- }
-}
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/Kim.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/Kim.kt
similarity index 56%
rename from src/commonMain/kotlin/com/ashampoo/kim/Kim.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/Kim.kt
index e50fde38..4951a738 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/Kim.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/Kim.kt
@@ -13,40 +13,40 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim
-
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.common.ImageWriteException
-import com.ashampoo.kim.common.tryWithImageReadException
-import com.ashampoo.kim.common.tryWithImageWriteException
-import com.ashampoo.kim.format.ImageMetadata
-import com.ashampoo.kim.format.ImageParser
-import com.ashampoo.kim.format.arw.ArwPreviewExtractor
-import com.ashampoo.kim.format.cr2.Cr2PreviewExtractor
-import com.ashampoo.kim.format.cr3.Cr3PreviewExtractor
-import com.ashampoo.kim.format.dng.DngPreviewExtractor
-import com.ashampoo.kim.format.gif.GifMetadataExtractor
-import com.ashampoo.kim.format.gif.GifUpdater
-import com.ashampoo.kim.format.jpeg.JpegMetadataExtractor
-import com.ashampoo.kim.format.jpeg.JpegUpdater
-import com.ashampoo.kim.format.jxl.JxlUpdater
-import com.ashampoo.kim.format.nef.NefPreviewExtractor
-import com.ashampoo.kim.format.png.PngMetadataExtractor
-import com.ashampoo.kim.format.png.PngUpdater
-import com.ashampoo.kim.format.raf.RafMetadataExtractor
-import com.ashampoo.kim.format.raf.RafPreviewExtractor
-import com.ashampoo.kim.format.rw2.Rw2PreviewExtractor
-import com.ashampoo.kim.format.tiff.TiffReader
-import com.ashampoo.kim.format.webp.WebPUpdater
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.input.ByteReader
-import com.ashampoo.kim.input.DefaultRandomAccessByteReader
-import com.ashampoo.kim.input.PrePendingByteReader
-import com.ashampoo.kim.input.use
-import com.ashampoo.kim.model.ImageFormat
-import com.ashampoo.kim.model.MetadataUpdate
-import com.ashampoo.kim.output.ByteArrayByteWriter
-import com.ashampoo.kim.output.ByteWriter
+package de.stefan_oltmann.kim
+
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.common.ImageWriteException
+import de.stefan_oltmann.kim.common.tryWithImageReadException
+import de.stefan_oltmann.kim.common.tryWithImageWriteException
+import de.stefan_oltmann.kim.format.MediaMetadata
+import de.stefan_oltmann.kim.format.ImageParser
+import de.stefan_oltmann.kim.format.arw.ArwPreviewExtractor
+import de.stefan_oltmann.kim.format.cr2.Cr2PreviewExtractor
+import de.stefan_oltmann.kim.format.cr3.Cr3PreviewExtractor
+import de.stefan_oltmann.kim.format.dng.DngPreviewExtractor
+import de.stefan_oltmann.kim.format.gif.GifMetadataExtractor
+import de.stefan_oltmann.kim.format.gif.GifUpdater
+import de.stefan_oltmann.kim.format.jpeg.JpegMetadataExtractor
+import de.stefan_oltmann.kim.format.jpeg.JpegUpdater
+import de.stefan_oltmann.kim.format.jxl.JxlUpdater
+import de.stefan_oltmann.kim.format.nef.NefPreviewExtractor
+import de.stefan_oltmann.kim.format.png.PngMetadataExtractor
+import de.stefan_oltmann.kim.format.png.PngUpdater
+import de.stefan_oltmann.kim.format.raf.RafMetadataExtractor
+import de.stefan_oltmann.kim.format.raf.RafPreviewExtractor
+import de.stefan_oltmann.kim.format.rw2.Rw2PreviewExtractor
+import de.stefan_oltmann.kim.format.tiff.TiffReader
+import de.stefan_oltmann.kim.format.webp.WebPUpdater
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.input.ByteReader
+import de.stefan_oltmann.kim.input.DefaultRandomAccessByteReader
+import de.stefan_oltmann.kim.input.PrePendingByteReader
+import de.stefan_oltmann.kim.input.use
+import de.stefan_oltmann.kim.model.MediaFormat
+import de.stefan_oltmann.kim.model.MetadataUpdate
+import de.stefan_oltmann.kim.output.ByteArrayByteWriter
+import de.stefan_oltmann.kim.output.ByteWriter
public object Kim {
@@ -54,7 +54,7 @@ public object Kim {
@kotlin.jvm.JvmStatic
@Throws(ImageReadException::class)
- public fun readMetadata(bytes: ByteArray): ImageMetadata? =
+ public fun readMetadata(bytes: ByteArray): MediaMetadata? =
if (bytes.isEmpty())
null
else
@@ -64,54 +64,54 @@ public object Kim {
@Throws(ImageReadException::class)
public fun readMetadata(
byteReader: ByteReader
- ): ImageMetadata? = tryWithImageReadException {
+ ): MediaMetadata? = tryWithImageReadException {
byteReader.use {
- val headerBytes = it.readBytes(ImageFormat.REQUIRED_HEADER_BYTE_COUNT_FOR_DETECTION)
+ val headerBytes = it.readBytes(MediaFormat.REQUIRED_HEADER_BYTE_COUNT_FOR_DETECTION)
- val imageFormat = ImageFormat.detect(headerBytes) ?: return@use null
+ val mediaFormat = MediaFormat.detect(headerBytes) ?: return@use null
- val imageParser = ImageParser.forFormat(imageFormat)
- ?: return@use ImageMetadata(imageFormat, null, null, null, null, null)
+ val imageParser = ImageParser.forFormat(mediaFormat)
+ ?: return@use MediaMetadata.createEmpty (mediaFormat)
val newReader = PrePendingByteReader(it, headerBytes.toList())
/*
- * We re-apply the ImageFormat, because we don't want to report
+ * We re-apply the MediaFormat here, because we don't want to report
* "TIFF" for every TIFF-based RAW format like CR2.
*/
return@use imageParser
- .parseMetadata(newReader)
- .copy(imageFormat = imageFormat)
+ .parseMetadata(byteReader = newReader)
+ .withMediaFormat(mediaFormat = mediaFormat)
}
}
/**
* Determines the file type based on file header and returns metadata bytes.
*
- * Cloud services can not reliably tell the mime type, and so we must determine it.
+ * Cloud services can not reliably tell the mime type, so we must determine it.
*/
@kotlin.jvm.JvmStatic
@Throws(ImageReadException::class)
public fun extractMetadataBytes(
byteReader: ByteReader
- ): Pair = tryWithImageReadException {
+ ): Pair = tryWithImageReadException {
byteReader.use {
- val headerBytes = it.readBytes(ImageFormat.REQUIRED_HEADER_BYTE_COUNT_FOR_DETECTION)
+ val headerBytes = it.readBytes(MediaFormat.REQUIRED_HEADER_BYTE_COUNT_FOR_DETECTION)
- val imageFormat = ImageFormat.detect(headerBytes)
+ val mediaFormat = MediaFormat.detect(headerBytes)
val newReader = PrePendingByteReader(it, headerBytes.toList())
- return@use when (imageFormat) {
- ImageFormat.JPEG -> imageFormat to JpegMetadataExtractor.extractMetadataBytes(newReader)
- ImageFormat.PNG -> imageFormat to PngMetadataExtractor.extractMetadataBytes(newReader)
- ImageFormat.RAF -> imageFormat to RafMetadataExtractor.extractMetadataBytes(newReader)
- ImageFormat.GIF -> imageFormat to GifMetadataExtractor.extractMetadataBytes(newReader)
- else -> imageFormat to byteArrayOf()
+ return@use when (mediaFormat) {
+ MediaFormat.JPEG -> mediaFormat to JpegMetadataExtractor.extractMetadataBytes(newReader)
+ MediaFormat.PNG -> mediaFormat to PngMetadataExtractor.extractMetadataBytes(newReader)
+ MediaFormat.RAF -> mediaFormat to RafMetadataExtractor.extractMetadataBytes(newReader)
+ MediaFormat.GIF -> mediaFormat to GifMetadataExtractor.extractMetadataBytes(newReader)
+ else -> mediaFormat to byteArrayOf()
}
}
}
@@ -124,16 +124,16 @@ public object Kim {
byteReader.use {
- val headerBytes = it.readBytes(ImageFormat.REQUIRED_HEADER_BYTE_COUNT_FOR_DETECTION)
+ val headerBytes = it.readBytes(MediaFormat.REQUIRED_HEADER_BYTE_COUNT_FOR_DETECTION)
- val imageFormat = ImageFormat.detect(headerBytes)
+ val mediaFormat = MediaFormat.detect(headerBytes)
val prePendingByteReader = PrePendingByteReader(it, headerBytes.toList())
- if (imageFormat == ImageFormat.RAF)
+ if (mediaFormat == MediaFormat.RAF)
return@use RafPreviewExtractor.extractPreviewImage(prePendingByteReader)
- if (imageFormat == ImageFormat.CR3)
+ if (mediaFormat == MediaFormat.CR3)
return@use Cr3PreviewExtractor.extractPreviewImage(prePendingByteReader)
val reader = DefaultRandomAccessByteReader(prePendingByteReader)
@@ -144,13 +144,13 @@ public object Kim {
* *Note:* Olympus ORF is currently unsupported because the preview offset
* is burried in the Olympus MakerNotes, which are currently not interpreted.
*/
- return@use when (imageFormat) {
+ return@use when (mediaFormat) {
- ImageFormat.CR2 -> Cr2PreviewExtractor.extractPreviewImage(tiffContents, reader)
+ MediaFormat.CR2 -> Cr2PreviewExtractor.extractPreviewImage(tiffContents, reader)
- ImageFormat.RW2 -> Rw2PreviewExtractor.extractPreviewImage(tiffContents, reader)
+ MediaFormat.RW2 -> Rw2PreviewExtractor.extractPreviewImage(tiffContents, reader)
- ImageFormat.TIFF -> {
+ MediaFormat.TIFF -> {
/* It can now be DNG, NEF or ARW. */
DngPreviewExtractor.extractPreviewImage(tiffContents, reader)?.let { return@use it }
@@ -206,20 +206,20 @@ public object Kim {
update: MetadataUpdate
): Unit = tryWithImageWriteException {
- val headerBytes = byteReader.readBytes(ImageFormat.REQUIRED_HEADER_BYTE_COUNT_FOR_DETECTION)
+ val headerBytes = byteReader.readBytes(MediaFormat.REQUIRED_HEADER_BYTE_COUNT_FOR_DETECTION)
- val imageFormat = ImageFormat.detect(headerBytes)
+ val mediaFormat = MediaFormat.detect(headerBytes)
val prePendingByteReader = PrePendingByteReader(byteReader, headerBytes.toList())
- return@tryWithImageWriteException when (imageFormat) {
- ImageFormat.JPEG -> JpegUpdater.update(prePendingByteReader, byteWriter, update)
- ImageFormat.PNG -> PngUpdater.update(prePendingByteReader, byteWriter, update)
- ImageFormat.WEBP -> WebPUpdater.update(prePendingByteReader, byteWriter, update)
- ImageFormat.JXL -> JxlUpdater.update(prePendingByteReader, byteWriter, update)
- ImageFormat.GIF -> GifUpdater.update(prePendingByteReader, byteWriter, update)
+ return@tryWithImageWriteException when (mediaFormat) {
+ MediaFormat.JPEG -> JpegUpdater.update(prePendingByteReader, byteWriter, update)
+ MediaFormat.PNG -> PngUpdater.update(prePendingByteReader, byteWriter, update)
+ MediaFormat.WEBP -> WebPUpdater.update(prePendingByteReader, byteWriter, update)
+ MediaFormat.JXL -> JxlUpdater.update(prePendingByteReader, byteWriter, update)
+ MediaFormat.GIF -> GifUpdater.update(prePendingByteReader, byteWriter, update)
null -> throw ImageWriteException("Unknown or unsupported file format.")
- else -> throw ImageWriteException("Can't embed metadata into $imageFormat.")
+ else -> throw ImageWriteException("Can't embed metadata into $mediaFormat.")
}
}
@@ -230,15 +230,15 @@ public object Kim {
thumbnailBytes: ByteArray
): ByteArray = tryWithImageWriteException {
- val imageFormat = ImageFormat.detect(bytes)
+ val mediaFormat = MediaFormat.detect(bytes)
- return@tryWithImageWriteException when (imageFormat) {
- ImageFormat.JPEG -> JpegUpdater.updateThumbnail(bytes, thumbnailBytes)
- ImageFormat.PNG -> PngUpdater.updateThumbnail(bytes, thumbnailBytes)
- ImageFormat.WEBP -> WebPUpdater.updateThumbnail(bytes, thumbnailBytes)
- ImageFormat.JXL -> JxlUpdater.updateThumbnail(bytes, thumbnailBytes)
+ return@tryWithImageWriteException when (mediaFormat) {
+ MediaFormat.JPEG -> JpegUpdater.updateThumbnail(bytes, thumbnailBytes)
+ MediaFormat.PNG -> PngUpdater.updateThumbnail(bytes, thumbnailBytes)
+ MediaFormat.WEBP -> WebPUpdater.updateThumbnail(bytes, thumbnailBytes)
+ MediaFormat.JXL -> JxlUpdater.updateThumbnail(bytes, thumbnailBytes)
null -> throw ImageWriteException("Unknown or unsupported file format.")
- else -> throw ImageWriteException("Can't embed thumbnail into $imageFormat.")
+ else -> throw ImageWriteException("Can't embed thumbnail into $mediaFormat.")
}
}
}
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/common/ByteArrayExtensions.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/ByteArrayExtensions.kt
similarity index 97%
rename from src/commonMain/kotlin/com/ashampoo/kim/common/ByteArrayExtensions.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/common/ByteArrayExtensions.kt
index 88f6433f..2b682bef 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/common/ByteArrayExtensions.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/ByteArrayExtensions.kt
@@ -15,7 +15,7 @@
*/
@file:Suppress("MagicNumber", "TooManyFunctions")
-package com.ashampoo.kim.common
+package de.stefan_oltmann.kim.common
internal const val HEX_RADIX: Int = 16
@@ -53,7 +53,7 @@ internal fun ByteArray.indexOfNullTerminator(): Int =
indexOfNullTerminator(0)
/**
- * NUL is often used in image formats to terminate a string.
+ * NUL is often used in media formats to terminate a string.
*/
internal fun ByteArray.indexOfNullTerminator(start: Int): Int {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/common/ByteConversions.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/ByteConversions.kt
similarity index 99%
rename from src/commonMain/kotlin/com/ashampoo/kim/common/ByteConversions.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/common/ByteConversions.kt
index 53743c32..476fadea 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/common/ByteConversions.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/ByteConversions.kt
@@ -16,7 +16,7 @@
*/
@file:Suppress("MagicNumber", "TooManyFunctions")
-package com.ashampoo.kim.common
+package de.stefan_oltmann.kim.common
/**
* Convenience methods for converting data types to and from
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/common/ByteOrder.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/ByteOrder.kt
similarity index 95%
rename from src/commonMain/kotlin/com/ashampoo/kim/common/ByteOrder.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/common/ByteOrder.kt
index 95cd7e36..db96b6fd 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/common/ByteOrder.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/ByteOrder.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.common
+package de.stefan_oltmann.kim.common
public enum class ByteOrder(
public val displayName: String
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/common/Exceptions.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/Exceptions.kt
similarity index 98%
rename from src/commonMain/kotlin/com/ashampoo/kim/common/Exceptions.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/common/Exceptions.kt
index 887291fe..03d99ded 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/common/Exceptions.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/Exceptions.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.common
+package de.stefan_oltmann.kim.common
public open class ImageException(message: String? = null, cause: Throwable? = null) :
RuntimeException(message, cause)
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/common/ExifDateUtil.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/ExifDateUtil.kt
similarity index 98%
rename from src/commonMain/kotlin/com/ashampoo/kim/common/ExifDateUtil.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/common/ExifDateUtil.kt
index 3507be05..ecedaf2b 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/common/ExifDateUtil.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/ExifDateUtil.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.common
+package de.stefan_oltmann.kim.common
private val emptyExifDateStrings = setOf(
"0000:00:00 00:00:00",
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/common/FourCC.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/FourCC.kt
similarity index 97%
rename from src/commonMain/kotlin/com/ashampoo/kim/common/FourCC.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/common/FourCC.kt
index 386d3c94..afd4dd55 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/common/FourCC.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/FourCC.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.common
+package de.stefan_oltmann.kim.common
/**
* See https://en.wikipedia.org/wiki/FourCC
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/common/GpsUtil.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/GpsUtil.kt
similarity index 98%
rename from src/commonMain/kotlin/com/ashampoo/kim/common/GpsUtil.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/common/GpsUtil.kt
index f996c639..15fa2ae6 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/common/GpsUtil.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/GpsUtil.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.common
+package de.stefan_oltmann.kim.common
import kotlin.math.abs
import kotlin.math.pow
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/common/PhotoValueFormatter.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/KimValueFormatter.kt
similarity index 98%
rename from src/commonMain/kotlin/com/ashampoo/kim/common/PhotoValueFormatter.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/common/KimValueFormatter.kt
index e980f451..d65d999b 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/common/PhotoValueFormatter.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/KimValueFormatter.kt
@@ -1,4 +1,5 @@
/*
+ * Copyright 2026 Stefan Oltmann
* Copyright 2025 Ashampoo GmbH & Co. KG
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -13,11 +14,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.common
+package de.stefan_oltmann.kim.common
import kotlin.math.round
-public object PhotoValueFormatter {
+public object KimValueFormatter {
public const val MEGA_PIXEL_COUNT: Int = 1_000_000
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/common/Latin1EncodingExtensions.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/Latin1EncodingExtensions.kt
similarity index 95%
rename from src/commonMain/kotlin/com/ashampoo/kim/common/Latin1EncodingExtensions.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/common/Latin1EncodingExtensions.kt
index d04d10d3..a6b7e93c 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/common/Latin1EncodingExtensions.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/Latin1EncodingExtensions.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.common
+package de.stefan_oltmann.kim.common
internal expect fun ByteArray.decodeLatin1BytesToString(): String
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/common/LocalDateTimeExtensions.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/LocalDateTimeExtensions.kt
similarity index 96%
rename from src/commonMain/kotlin/com/ashampoo/kim/common/LocalDateTimeExtensions.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/common/LocalDateTimeExtensions.kt
index 80e3bc53..daa8e468 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/common/LocalDateTimeExtensions.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/LocalDateTimeExtensions.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.common
+package de.stefan_oltmann.kim.common
import kotlinx.datetime.LocalDateTime
import kotlinx.datetime.number
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/common/MetadataOffset.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/MetadataOffset.kt
similarity index 95%
rename from src/commonMain/kotlin/com/ashampoo/kim/common/MetadataOffset.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/common/MetadataOffset.kt
index ac9c7136..674bc71b 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/common/MetadataOffset.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/MetadataOffset.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.common
+package de.stefan_oltmann.kim.common
public data class MetadataOffset(
val type: MetadataType,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/common/PhotoMetadataConverter.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/MetadataSummaryConverter.kt
similarity index 73%
rename from src/commonMain/kotlin/com/ashampoo/kim/common/PhotoMetadataConverter.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/common/MetadataSummaryConverter.kt
index 95c2f5bf..4ba4975b 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/common/PhotoMetadataConverter.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/MetadataSummaryConverter.kt
@@ -13,22 +13,22 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.common
-
-import com.ashampoo.kim.Kim.underUnitTesting
-import com.ashampoo.kim.format.ImageMetadata
-import com.ashampoo.kim.format.jpeg.JpegImageParser
-import com.ashampoo.kim.format.jpeg.iptc.IptcTypes
-import com.ashampoo.kim.format.tiff.GPSInfo
-import com.ashampoo.kim.format.tiff.constant.ExifTag
-import com.ashampoo.kim.format.tiff.constant.TiffConstants
-import com.ashampoo.kim.format.tiff.constant.TiffTag
-import com.ashampoo.kim.format.xmp.XmpReader
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.model.GpsCoordinates
-import com.ashampoo.kim.model.LocationShown
-import com.ashampoo.kim.model.PhotoMetadata
-import com.ashampoo.kim.model.TiffOrientation
+package de.stefan_oltmann.kim.common
+
+import de.stefan_oltmann.kim.Kim.underUnitTesting
+import de.stefan_oltmann.kim.format.MediaMetadata
+import de.stefan_oltmann.kim.format.jpeg.JpegImageParser
+import de.stefan_oltmann.kim.format.jpeg.iptc.IptcTypes
+import de.stefan_oltmann.kim.format.tiff.GPSInfo
+import de.stefan_oltmann.kim.format.tiff.constant.ExifTag
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants
+import de.stefan_oltmann.kim.format.tiff.constant.TiffTag
+import de.stefan_oltmann.kim.format.xmp.XmpReader
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.model.GpsCoordinates
+import de.stefan_oltmann.kim.model.LocationShown
+import de.stefan_oltmann.kim.model.MetadataSummary
+import de.stefan_oltmann.kim.model.TiffOrientation
import kotlinx.datetime.LocalDateTime
import kotlinx.datetime.TimeZone
import kotlinx.datetime.toInstant
@@ -40,50 +40,50 @@ import kotlin.time.ExperimentalTime
* This is a dedicated object with @JvmStatic methods
* to provide a better API to pure Java projects.
*/
-public object PhotoMetadataConverter {
+public object MetadataSummaryConverter {
@JvmStatic
@JvmOverloads
@Suppress("LongMethod")
- public fun convertToPhotoMetadata(
- imageMetadata: ImageMetadata,
+ public fun convertToSummary(
+ mediaMetadata: MediaMetadata,
ignoreOrientation: Boolean = false
- ): PhotoMetadata {
+ ): MetadataSummary {
- val xmpMetadata: PhotoMetadata? = imageMetadata.xmp?.let {
+ val xmpMetadata: MetadataSummary? = mediaMetadata.xmp?.let {
XmpReader.readMetadata(it)
}
val orientation = if (ignoreOrientation)
TiffOrientation.STANDARD
else
- TiffOrientation.of(imageMetadata.findShortValue(TiffTag.TIFF_TAG_ORIENTATION)?.toInt())
+ TiffOrientation.of(mediaMetadata.findShortValue(TiffTag.TIFF_TAG_ORIENTATION)?.toInt())
val takenDateMillis: Long? = xmpMetadata?.takenDate
- ?: extractTakenDateMillisFromExif(imageMetadata)
+ ?: extractTakenDateMillisFromExif(mediaMetadata)
val gpsCoordinates: GpsCoordinates? = xmpMetadata?.gpsCoordinates
- ?: extractGpsCoordinatesFromExif(imageMetadata)
+ ?: extractGpsCoordinatesFromExif(mediaMetadata)
- val cameraMake = imageMetadata.findStringValue(TiffTag.TIFF_TAG_MAKE)
- val cameraModel = imageMetadata.findStringValue(TiffTag.TIFF_TAG_MODEL)
+ val cameraMake = mediaMetadata.findStringValue(TiffTag.TIFF_TAG_MAKE)
+ val cameraModel = mediaMetadata.findStringValue(TiffTag.TIFF_TAG_MODEL)
- val lensMake = imageMetadata.findStringValue(ExifTag.EXIF_TAG_LENS_MAKE)
- val lensModel = imageMetadata.findStringValue(ExifTag.EXIF_TAG_LENS_MODEL)
+ val lensMake = mediaMetadata.findStringValue(ExifTag.EXIF_TAG_LENS_MAKE)
+ val lensModel = mediaMetadata.findStringValue(ExifTag.EXIF_TAG_LENS_MODEL)
/* Look for ISO at the standard place and fall back to test RW2 logic. */
- val iso = imageMetadata.findShortValue(ExifTag.EXIF_TAG_ISO)
- ?: imageMetadata.findShortValue(ExifTag.EXIF_TAG_ISO_PANASONIC)
+ val iso = mediaMetadata.findShortValue(ExifTag.EXIF_TAG_ISO)
+ ?: mediaMetadata.findShortValue(ExifTag.EXIF_TAG_ISO_PANASONIC)
- val exposureTime = imageMetadata.findDoubleValue(ExifTag.EXIF_TAG_EXPOSURE_TIME)
- val fNumber = imageMetadata.findDoubleValue(ExifTag.EXIF_TAG_FNUMBER)
- val focalLength = imageMetadata.findDoubleValue(ExifTag.EXIF_TAG_FOCAL_LENGTH)
+ val exposureTime = mediaMetadata.findDoubleValue(ExifTag.EXIF_TAG_EXPOSURE_TIME)
+ val fNumber = mediaMetadata.findDoubleValue(ExifTag.EXIF_TAG_FNUMBER)
+ val focalLength = mediaMetadata.findDoubleValue(ExifTag.EXIF_TAG_FOCAL_LENGTH)
val keywords = xmpMetadata?.keywords?.ifEmpty {
- extractKeywordsFromIptc(imageMetadata)
- } ?: extractKeywordsFromIptc(imageMetadata)
+ extractKeywordsFromIptc(mediaMetadata)
+ } ?: extractKeywordsFromIptc(mediaMetadata)
- val iptcRecords = imageMetadata.iptc?.records
+ val iptcRecords = mediaMetadata.iptc?.records
val title = xmpMetadata?.title ?: iptcRecords
?.find { it.iptcType == IptcTypes.OBJECT_NAME }
@@ -94,9 +94,9 @@ public object PhotoMetadataConverter {
?.value
val location = xmpMetadata?.locationShown
- ?: extractLocationFromIptc(imageMetadata)
+ ?: extractLocationFromIptc(mediaMetadata)
- val thumbnailBytes = imageMetadata.getExifThumbnailBytes()
+ val thumbnailBytes = mediaMetadata.getExifThumbnailBytes()
val thumbnailImageSize = thumbnailBytes?.let {
JpegImageParser.getImageSize(
@@ -112,10 +112,10 @@ public object PhotoMetadataConverter {
* Resolution, orientation and capture parameters (camera make,
* iso, exposure time, etc.) are always taken from EXIF.
*/
- return PhotoMetadata(
- imageFormat = imageMetadata.imageFormat,
- widthPx = imageMetadata.imageSize?.width,
- heightPx = imageMetadata.imageSize?.height,
+ return MetadataSummary(
+ mediaFormat = mediaMetadata.mediaFormat,
+ widthPx = mediaMetadata.imageSize?.width,
+ heightPx = mediaMetadata.imageSize?.height,
orientation = orientation,
takenDate = takenDateMillis,
gpsCoordinates = gpsCoordinates,
@@ -135,14 +135,13 @@ public object PhotoMetadataConverter {
keywords = keywords,
faces = xmpMetadata?.faces ?: emptyMap(),
personsInImage = xmpMetadata?.personsInImage ?: emptySet(),
- albums = xmpMetadata?.albums ?: emptySet(),
thumbnailImageSize = thumbnailImageSize,
thumbnailBytes = thumbnailBytes
)
}
@JvmStatic
- private fun extractTakenDateAsIsoString(metadata: ImageMetadata): String? {
+ private fun extractTakenDateAsIsoString(metadata: MediaMetadata): String? {
val takenDateField = metadata.findTiffField(ExifTag.EXIF_TAG_DATE_TIME_ORIGINAL)
?: return null
@@ -164,7 +163,7 @@ public object PhotoMetadataConverter {
@OptIn(ExperimentalTime::class)
@JvmStatic
private fun extractTakenDateMillisFromExif(
- metadata: ImageMetadata
+ metadata: MediaMetadata
): Long? {
try {
@@ -208,7 +207,7 @@ public object PhotoMetadataConverter {
@JvmStatic
private fun extractGpsCoordinatesFromExif(
- metadata: ImageMetadata
+ metadata: MediaMetadata
): GpsCoordinates? {
val gpsDirectory = metadata.findTiffDirectory(TiffConstants.TIFF_DIRECTORY_GPS)
@@ -229,7 +228,7 @@ public object PhotoMetadataConverter {
@JvmStatic
private fun extractKeywordsFromIptc(
- metadata: ImageMetadata
+ metadata: MediaMetadata
): Set {
return metadata.iptc?.records
@@ -241,7 +240,7 @@ public object PhotoMetadataConverter {
@JvmStatic
private fun extractLocationFromIptc(
- metadata: ImageMetadata
+ metadata: MediaMetadata
): LocationShown? {
val iptcRecords = metadata.iptc?.records
@@ -273,11 +272,11 @@ public object PhotoMetadataConverter {
}
}
-public fun ImageMetadata.convertToPhotoMetadata(
+public fun MediaMetadata.convertToSummary(
ignoreOrientation: Boolean = false
-): PhotoMetadata =
- PhotoMetadataConverter.convertToPhotoMetadata(
- imageMetadata = this,
+): MetadataSummary =
+ MetadataSummaryConverter.convertToSummary(
+ mediaMetadata = this,
ignoreOrientation = ignoreOrientation
)
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/common/MetadataType.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/MetadataType.kt
similarity index 94%
rename from src/commonMain/kotlin/com/ashampoo/kim/common/MetadataType.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/common/MetadataType.kt
index 6fd5dd6f..3216da31 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/common/MetadataType.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/MetadataType.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.common
+package de.stefan_oltmann.kim.common
public enum class MetadataType {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/common/RationalNumber.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/RationalNumber.kt
similarity index 99%
rename from src/commonMain/kotlin/com/ashampoo/kim/common/RationalNumber.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/common/RationalNumber.kt
index de798dcd..01e1cc8d 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/common/RationalNumber.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/RationalNumber.kt
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.common
+package de.stefan_oltmann.kim.common
import kotlin.math.abs
import kotlin.math.absoluteValue
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/common/RationalNumbers.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/RationalNumbers.kt
similarity index 97%
rename from src/commonMain/kotlin/com/ashampoo/kim/common/RationalNumbers.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/common/RationalNumbers.kt
index 0a5d8ced..3858358e 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/common/RationalNumbers.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/RationalNumbers.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.common
+package de.stefan_oltmann.kim.common
/**
* To avoid rather unsafe "Array<*>" in instance checking we have this
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/common/ZLib.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/ZLib.kt
similarity index 95%
rename from src/commonMain/kotlin/com/ashampoo/kim/common/ZLib.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/common/ZLib.kt
index f5e28c30..8a653282 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/common/ZLib.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/common/ZLib.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.common
+package de.stefan_oltmann.kim.common
internal expect fun compress(input: String): ByteArray
diff --git a/src/commonMain/kotlin/de/stefan_oltmann/kim/format/ImageParser.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/ImageParser.kt
new file mode 100644
index 00000000..bd1fd292
--- /dev/null
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/ImageParser.kt
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2025 Ashampoo GmbH & Co. KG
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package de.stefan_oltmann.kim.format
+
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.format.bmff.BaseMediaFileFormatImageParser
+import de.stefan_oltmann.kim.format.gif.GifImageParser
+import de.stefan_oltmann.kim.format.jpeg.JpegImageParser
+import de.stefan_oltmann.kim.format.png.PngImageParser
+import de.stefan_oltmann.kim.format.raf.RafImageParser
+import de.stefan_oltmann.kim.format.tiff.TiffImageParser
+import de.stefan_oltmann.kim.format.webp.WebPImageParser
+import de.stefan_oltmann.kim.input.ByteReader
+import de.stefan_oltmann.kim.model.MediaFormat
+import kotlin.jvm.JvmStatic
+
+public fun interface ImageParser {
+
+ @Throws(ImageReadException::class)
+ public fun parseMetadata(byteReader: ByteReader): MediaMetadata
+
+ public companion object {
+
+ @JvmStatic
+ public fun forFormat(mediaFormat: MediaFormat): ImageParser? =
+ when (mediaFormat) {
+
+ MediaFormat.JPEG -> JpegImageParser
+
+ MediaFormat.PNG -> PngImageParser
+
+ MediaFormat.WEBP -> WebPImageParser
+
+ MediaFormat.TIFF,
+ MediaFormat.CR2,
+ MediaFormat.NEF,
+ MediaFormat.ARW,
+ MediaFormat.RW2,
+ MediaFormat.ORF -> TiffImageParser
+
+ MediaFormat.RAF -> RafImageParser
+
+ MediaFormat.HEIC,
+ MediaFormat.AVIF,
+ MediaFormat.CR3,
+ MediaFormat.JXL -> BaseMediaFileFormatImageParser
+
+ MediaFormat.GIF -> GifImageParser
+
+ else -> null
+ }
+ }
+}
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/ImageFormatMagicNumbers.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/MediaFormatMagicNumbers.kt
similarity index 67%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/ImageFormatMagicNumbers.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/MediaFormatMagicNumbers.kt
index 0ae9311b..ab25d01b 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/ImageFormatMagicNumbers.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/MediaFormatMagicNumbers.kt
@@ -1,4 +1,6 @@
/*
+ * Copyright 2026 Ramon Bouckaert
+ * Copyright 2026 Stefan Oltmann
* Copyright 2025 Ashampoo GmbH & Co. KG
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -13,7 +15,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format
+package de.stefan_oltmann.kim.format
/**
* See https://en.wikipedia.org/wiki/List_of_file_signatures
@@ -22,7 +24,7 @@ package com.ashampoo.kim.format
* For example HEIC has a broad number of different headers bytes.
*/
@Suppress("MagicNumber")
-public object ImageFormatMagicNumbers {
+public object MediaFormatMagicNumbers {
public val jpeg: List = byteListOf(
0xFF, 0xD8
@@ -78,56 +80,96 @@ public object ImageFormatMagicNumbers {
0x52, 0x49, 0x46, 0x46, null, null, null, null, 0x57, 0x45, 0x42, 0x50
)
- /* 4 bytes + "ftypheic" */
+ /** 4 bytes + "ftypheic" */
public val heic: List = byteListOf(
null, null, null, null
).plus("ftypheic".encodeToByteArray().toList())
- /* A HEIC brand */
+ /** A HEIC brand */
public val mif1: List = byteListOf(
null, null, null, null
).plus("ftypmif1".encodeToByteArray().toList())
- /* A HEIC brand */
+ /** A HEIC brand */
public val msf1: List = byteListOf(
null, null, null, null
).plus("ftypmsf1".encodeToByteArray().toList())
- /* A HEIC brand */
+ /** A HEIC brand */
public val heix: List = byteListOf(
null, null, null, null
).plus("ftypheix".encodeToByteArray().toList())
- /* A HEIC brand */
+ /** A HEIC brand */
public val hevc: List = byteListOf(
null, null, null, null
).plus("ftyphevc".encodeToByteArray().toList())
- /* A HEIC brand */
+ /** A HEIC brand */
public val hevx: List = byteListOf(
null, null, null, null
).plus("ftyphevx".encodeToByteArray().toList())
- /* 4 bytes + "ftypavif" */
+ /** 4 bytes + "ftypavif" */
public val avif: List = byteListOf(
null, null, null, null
).plus("ftypavif".encodeToByteArray().toList())
- /* 4 bytes + "ftypcrx" */
+ /** 4 bytes + "ftypavis" */
+ public val avis: List = byteListOf(
+ null, null, null, null
+ ).plus("ftypavis".encodeToByteArray().toList())
+
+ /** 4 bytes + "ftypcrx" */
public val cr3: List = byteListOf(
null, null, null, null
).plus("ftypcrx".encodeToByteArray().toList())
- /* The regular ISOBMFF-based JPEG XL */
+ /** The regular ISOBMFF-based JPEG XL */
public val jxl: List = byteListOf(
0x00, 0x00, 0x00, 0x0C, 0x4A, 0x58, 0x4C, 0x20, 0x0D, 0x0A, 0x87, 0x0A
)
- /* The 'naked' code stream without metadata. */
+ /** The 'naked' code stream without metadata. */
public val jxlCodeStream: List = byteListOf(
0xFF, 0x0A
)
+ /** The current MP4 standard */
+ public val mp42: List = byteListOf(
+ null, null, null, null
+ ).plus("ftypmp42".encodeToByteArray().toList())
+
+ /** The older MP4 standard */
+ public val mp41: List = byteListOf(
+ null, null, null, null
+ ).plus("ftypmp42".encodeToByteArray().toList())
+
+ /** The generic MP4 format (without closer specification) */
+ public val isom: List = byteListOf(
+ null, null, null, null
+ ).plus("ftypisom".encodeToByteArray().toList())
+
+ /** MP4, similar to ISOM */
+ public val iso2: List = byteListOf(
+ null, null, null, null
+ ).plus("ftypisom".encodeToByteArray().toList())
+
+ /** MP4, often used for H.264 encoded files */
+ public val avc1: List = byteListOf(
+ null, null, null, null
+ ).plus("ftypavc1".encodeToByteArray().toList())
+
+ /** QuickTime video, the usual ftyp for MOV files. */
+ public val qt: List = byteListOf(
+ null, null, null, null
+ ).plus("ftypqt ".encodeToByteArray().toList())
+
+ /** The 'naked' code stream without metadata. */
+ public val pdf: List = byteListOf(
+ 0x25, 0x50, 0x44, 0x46, 0x2D
+ )
+
private fun byteListOf(vararg ints: Int?): List =
ints.map { it?.toByte() }
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/ImageMetadata.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/MediaMetadata.kt
similarity index 60%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/ImageMetadata.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/MediaMetadata.kt
index 97e93fc6..a7f309da 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/ImageMetadata.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/MediaMetadata.kt
@@ -1,4 +1,5 @@
/*
+ * Copyright 2026 Stefan Oltmann
* Copyright 2025 Ashampoo GmbH & Co. KG
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -13,23 +14,23 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format
-
-import com.ashampoo.kim.format.jpeg.iptc.IptcMetadata
-import com.ashampoo.kim.format.tiff.TiffContents
-import com.ashampoo.kim.format.tiff.TiffDirectory
-import com.ashampoo.kim.format.tiff.TiffField
-import com.ashampoo.kim.format.tiff.taginfo.TagInfo
-import com.ashampoo.kim.model.ImageFormat
-import com.ashampoo.kim.model.ImageSize
-
-public data class ImageMetadata(
- val imageFormat: ImageFormat?,
- val imageSize: ImageSize?,
- val exif: TiffContents?,
- val exifBytes: ByteArray?,
- val iptc: IptcMetadata?,
- val xmp: String?
+package de.stefan_oltmann.kim.format
+
+import de.stefan_oltmann.kim.format.jpeg.iptc.IptcMetadata
+import de.stefan_oltmann.kim.format.tiff.TiffContents
+import de.stefan_oltmann.kim.format.tiff.TiffDirectory
+import de.stefan_oltmann.kim.format.tiff.TiffField
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfo
+import de.stefan_oltmann.kim.model.MediaFormat
+import de.stefan_oltmann.kim.model.ImageSize
+
+public class MediaMetadata internal constructor(
+ public val mediaFormat: MediaFormat?,
+ public val imageSize: ImageSize?,
+ public val exif: TiffContents?,
+ public val exifBytes: ByteArray?,
+ public val iptc: IptcMetadata?,
+ public val xmp: String?
) {
public fun findStringValue(tagInfo: TagInfo): String? {
@@ -61,7 +62,7 @@ public data class ImageMetadata(
override fun toString(): String {
val sb = StringBuilder()
- sb.appendLine("File format : $imageFormat")
+ sb.appendLine("File format : $mediaFormat")
sb.appendLine("Resolution : $imageSize")
if (exif != null)
@@ -78,4 +79,20 @@ public data class ImageMetadata(
return sb.toString()
}
+
+ internal fun withMediaFormat(mediaFormat: MediaFormat) =
+ MediaMetadata(
+ mediaFormat = mediaFormat,
+ imageSize = imageSize,
+ exif = exif,
+ exifBytes = exifBytes,
+ iptc = iptc,
+ xmp = xmp
+ )
+
+ internal companion object {
+
+ fun createEmpty(mediaFormat: MediaFormat?) =
+ MediaMetadata(mediaFormat, null, null, null, null, null)
+ }
}
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/MetadataExtractor.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/MetadataExtractor.kt
similarity index 84%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/MetadataExtractor.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/MetadataExtractor.kt
index 1ef51207..f21ae66b 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/MetadataExtractor.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/MetadataExtractor.kt
@@ -13,10 +13,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format
+package de.stefan_oltmann.kim.format
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.input.ByteReader
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.input.ByteReader
public fun interface MetadataExtractor {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/MetadataUpdater.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/MetadataUpdater.kt
similarity index 80%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/MetadataUpdater.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/MetadataUpdater.kt
index 874c8d77..d405ba06 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/MetadataUpdater.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/MetadataUpdater.kt
@@ -13,12 +13,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format
+package de.stefan_oltmann.kim.format
-import com.ashampoo.kim.common.ImageWriteException
-import com.ashampoo.kim.input.ByteReader
-import com.ashampoo.kim.model.MetadataUpdate
-import com.ashampoo.kim.output.ByteWriter
+import de.stefan_oltmann.kim.common.ImageWriteException
+import de.stefan_oltmann.kim.input.ByteReader
+import de.stefan_oltmann.kim.model.MetadataUpdate
+import de.stefan_oltmann.kim.output.ByteWriter
public interface MetadataUpdater {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/TiffPreviewExtractor.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/TiffPreviewExtractor.kt
similarity index 80%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/TiffPreviewExtractor.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/TiffPreviewExtractor.kt
index 4f99d137..aea05ac0 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/TiffPreviewExtractor.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/TiffPreviewExtractor.kt
@@ -13,11 +13,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format
+package de.stefan_oltmann.kim.format
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.format.tiff.TiffContents
-import com.ashampoo.kim.input.RandomAccessByteReader
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.format.tiff.TiffContents
+import de.stefan_oltmann.kim.input.RandomAccessByteReader
public fun interface TiffPreviewExtractor {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/arw/ArwPreviewExtractor.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/arw/ArwPreviewExtractor.kt
similarity index 78%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/arw/ArwPreviewExtractor.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/arw/ArwPreviewExtractor.kt
index abbbe39c..01eeeaca 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/arw/ArwPreviewExtractor.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/arw/ArwPreviewExtractor.kt
@@ -13,14 +13,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.arw
-
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.common.tryWithImageReadException
-import com.ashampoo.kim.format.TiffPreviewExtractor
-import com.ashampoo.kim.format.tiff.TiffContents
-import com.ashampoo.kim.format.tiff.constant.TiffTag
-import com.ashampoo.kim.input.RandomAccessByteReader
+package de.stefan_oltmann.kim.format.arw
+
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.common.tryWithImageReadException
+import de.stefan_oltmann.kim.format.TiffPreviewExtractor
+import de.stefan_oltmann.kim.format.tiff.TiffContents
+import de.stefan_oltmann.kim.format.tiff.constant.TiffTag
+import de.stefan_oltmann.kim.input.RandomAccessByteReader
public object ArwPreviewExtractor : TiffPreviewExtractor {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/BMFFConstants.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/BMFFConstants.kt
similarity index 82%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/bmff/BMFFConstants.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/BMFFConstants.kt
index 2b22e05b..819a7d8f 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/BMFFConstants.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/BMFFConstants.kt
@@ -1,4 +1,5 @@
/*
+ * Copyright 2026 Ramon Bouckaert
* Copyright 2025 Ashampoo GmbH & Co. KG
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -13,9 +14,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.bmff
+package de.stefan_oltmann.kim.format.bmff
-import com.ashampoo.kim.common.ByteOrder
+import de.stefan_oltmann.kim.common.ByteOrder
internal object BMFFConstants {
@@ -35,4 +36,7 @@ internal object BMFFConstants {
const val ITEM_TYPE_EXIF = 1_165_519_206
const val ITEM_TYPE_MIME = 1_835_625_829
const val ITEM_TYPE_JPEG = 1_785_750_887
+
+ /** Standard UUID for XMP metadata embedded in a uuid box */
+ const val XMP_UUID = "be7acfcb97a942e89c71999491e3afac"
}
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/BaseMediaFileFormatImageParser.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/BaseMediaFileFormatImageParser.kt
similarity index 75%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/bmff/BaseMediaFileFormatImageParser.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/BaseMediaFileFormatImageParser.kt
index e991bc42..476ef036 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/BaseMediaFileFormatImageParser.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/BaseMediaFileFormatImageParser.kt
@@ -1,4 +1,5 @@
/*
+ * Copyright 2026 Ramon Bouckaert
* Copyright 2025 Ashampoo GmbH & Co. KG
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -13,27 +14,29 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.bmff
-
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.common.MetadataOffset
-import com.ashampoo.kim.common.MetadataType
-import com.ashampoo.kim.format.ImageMetadata
-import com.ashampoo.kim.format.ImageParser
-import com.ashampoo.kim.format.bmff.BMFFConstants.BMFF_BYTE_ORDER
-import com.ashampoo.kim.format.bmff.BMFFConstants.TIFF_HEADER_OFFSET_BYTE_COUNT
-import com.ashampoo.kim.format.bmff.box.FileTypeBox
-import com.ashampoo.kim.format.bmff.box.MetaBox
-import com.ashampoo.kim.format.cr3.Cr3Reader
-import com.ashampoo.kim.format.jxl.JxlReader
-import com.ashampoo.kim.format.tiff.TiffContents
-import com.ashampoo.kim.format.tiff.TiffReader
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.input.ByteReader
-import com.ashampoo.kim.input.read4BytesAsInt
-import com.ashampoo.kim.input.readBytes
-import com.ashampoo.kim.input.readRemainingBytes
-import com.ashampoo.kim.input.skipBytes
+package de.stefan_oltmann.kim.format.bmff
+
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.common.MetadataOffset
+import de.stefan_oltmann.kim.common.MetadataType
+import de.stefan_oltmann.kim.format.ImageParser
+import de.stefan_oltmann.kim.format.MediaMetadata
+import de.stefan_oltmann.kim.format.bmff.BMFFConstants.BMFF_BYTE_ORDER
+import de.stefan_oltmann.kim.format.bmff.BMFFConstants.TIFF_HEADER_OFFSET_BYTE_COUNT
+import de.stefan_oltmann.kim.format.bmff.box.BoxContainer
+import de.stefan_oltmann.kim.format.bmff.box.FileTypeBox
+import de.stefan_oltmann.kim.format.bmff.box.MetaBoxTopLevel
+import de.stefan_oltmann.kim.format.bmff.box.UuidBox
+import de.stefan_oltmann.kim.format.cr3.Cr3Reader
+import de.stefan_oltmann.kim.format.jxl.JxlReader
+import de.stefan_oltmann.kim.format.tiff.TiffContents
+import de.stefan_oltmann.kim.format.tiff.TiffReader
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.input.ByteReader
+import de.stefan_oltmann.kim.input.read4BytesAsInt
+import de.stefan_oltmann.kim.input.readBytes
+import de.stefan_oltmann.kim.input.readRemainingBytes
+import de.stefan_oltmann.kim.input.skipBytes
/**
* Reads containers that follow the ISO base media file format
@@ -44,7 +47,7 @@ import com.ashampoo.kim.input.skipBytes
*/
public object BaseMediaFileFormatImageParser : ImageParser {
- override fun parseMetadata(byteReader: ByteReader): ImageMetadata {
+ override fun parseMetadata(byteReader: ByteReader): MediaMetadata {
val copyByteReader = CopyByteReader(byteReader)
@@ -78,21 +81,16 @@ public object BaseMediaFileFormatImageParser : ImageParser {
if (fileTypeBox.majorBrand == FileTypeBox.CR3_BRAND)
return Cr3Reader.createMetadata(allBoxes)
- val metaBox = allBoxes.filterIsInstance().firstOrNull()
- ?: throw ImageReadException("Illegal ISOBMFF: Has no 'meta' Box.")
+ val metaBox = allBoxes.filterIsInstance().firstOrNull()
+ ?: throw ImageReadException("Illegal ISOBMFF: Has no top-level 'meta' Box.")
+
+ val uuidBoxes = BoxContainer.findAllBoxesRecursive(allBoxes).filterIsInstance()
val metadataOffsets = metaBox.findMetadataOffsets()
/* Return empty object if no metadata is found. */
- if (metadataOffsets.isEmpty())
- return ImageMetadata(
- imageFormat = null,
- imageSize = null,
- exif = null,
- exifBytes = null,
- iptc = null,
- xmp = null
- )
+ if (metadataOffsets.isEmpty() && uuidBoxes.none { it.isXmp() })
+ return MediaMetadata.createEmpty(mediaFormat = null)
val minOffset = metadataOffsets.first().offset
@@ -163,8 +161,13 @@ public object BaseMediaFileFormatImageParser : ImageParser {
}
}
- return ImageMetadata(
- imageFormat = null, // could be any ISO BMFF
+ /* XMP data can also be found in a UUID box, if we didn't find it in the META box. */
+ if (xmp == null) {
+ xmp = uuidBoxes.firstOrNull { it.isXmp() }?.data?.decodeToString()
+ }
+
+ return MediaMetadata(
+ mediaFormat = null, // could be any ISO BMFF
imageSize = null, // not covered by ISO BMFF
exif = exif,
exifBytes = exifBytes,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/BoxReader.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/BoxReader.kt
similarity index 58%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/bmff/BoxReader.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/BoxReader.kt
index b15cf3b7..bd94b0ad 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/BoxReader.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/BoxReader.kt
@@ -1,4 +1,6 @@
/*
+ * Copyright 2026 Ramon Bouckaert
+ * Copyright 2026 Stefan Oltmann
* Copyright 2025 Ashampoo GmbH & Co. KG
* Copyright 2002-2023 Drew Noakes and contributors
*
@@ -14,30 +16,33 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.bmff
-
-import com.ashampoo.kim.format.bmff.BMFFConstants.BMFF_BYTE_ORDER
-import com.ashampoo.kim.format.bmff.box.Box
-import com.ashampoo.kim.format.bmff.box.FileTypeBox
-import com.ashampoo.kim.format.bmff.box.HandlerReferenceBox
-import com.ashampoo.kim.format.bmff.box.ItemInfoEntryBox
-import com.ashampoo.kim.format.bmff.box.ItemInformationBox
-import com.ashampoo.kim.format.bmff.box.ItemLocationBox
-import com.ashampoo.kim.format.bmff.box.MediaBox
-import com.ashampoo.kim.format.bmff.box.MediaDataBox
-import com.ashampoo.kim.format.bmff.box.MetaBox
-import com.ashampoo.kim.format.bmff.box.MovieBox
-import com.ashampoo.kim.format.bmff.box.PrimaryItemBox
-import com.ashampoo.kim.format.bmff.box.TrackBox
-import com.ashampoo.kim.format.bmff.box.UuidBox
-import com.ashampoo.kim.format.jxl.box.CompressedBox
-import com.ashampoo.kim.format.jxl.box.ExifBox
-import com.ashampoo.kim.format.jxl.box.JxlParticalCodestreamBox
-import com.ashampoo.kim.format.jxl.box.XmlBox
-import com.ashampoo.kim.input.ByteReader
-import com.ashampoo.kim.input.read4BytesAsInt
-import com.ashampoo.kim.input.read8BytesAsLong
-import com.ashampoo.kim.input.readBytes
+package de.stefan_oltmann.kim.format.bmff
+
+import de.stefan_oltmann.kim.format.bmff.BMFFConstants.BMFF_BYTE_ORDER
+import de.stefan_oltmann.kim.format.bmff.box.Box
+import de.stefan_oltmann.kim.format.bmff.box.FileTypeBox
+import de.stefan_oltmann.kim.format.bmff.box.HandlerReferenceBox
+import de.stefan_oltmann.kim.format.bmff.box.ItemInfoEntryBox
+import de.stefan_oltmann.kim.format.bmff.box.ItemInformationBox
+import de.stefan_oltmann.kim.format.bmff.box.ItemLocationBox
+import de.stefan_oltmann.kim.format.bmff.box.MediaBox
+import de.stefan_oltmann.kim.format.bmff.box.MediaDataBox
+import de.stefan_oltmann.kim.format.bmff.box.MetaBox
+import de.stefan_oltmann.kim.format.bmff.box.MetaBoxTopLevel
+import de.stefan_oltmann.kim.format.bmff.box.MovieBox
+import de.stefan_oltmann.kim.format.bmff.box.PrimaryItemBox
+import de.stefan_oltmann.kim.format.bmff.box.TrackBox
+import de.stefan_oltmann.kim.format.bmff.box.TrackHeaderBox
+import de.stefan_oltmann.kim.format.bmff.box.UserDataBox
+import de.stefan_oltmann.kim.format.bmff.box.UuidBox
+import de.stefan_oltmann.kim.format.jxl.box.CompressedBox
+import de.stefan_oltmann.kim.format.jxl.box.ExifBox
+import de.stefan_oltmann.kim.format.jxl.box.JxlParticalCodestreamBox
+import de.stefan_oltmann.kim.format.jxl.box.XmlBox
+import de.stefan_oltmann.kim.input.ByteReader
+import de.stefan_oltmann.kim.input.read4BytesAsInt
+import de.stefan_oltmann.kim.input.read8BytesAsLong
+import de.stefan_oltmann.kim.input.readBytes
/**
* Reads ISOBMFF boxes
@@ -47,19 +52,27 @@ public object BoxReader {
/**
* @param byteReader The reader as source for the bytes
* @param stopAfterMetadataRead If reading the file for metadata on the highest level we
- * want to stop reading after the meta boxes to prevent reading the whole image data block in.
- * For iPhone HEIC this is possible, but Samsung HEIC has "meta" coming after "mdat"
+ * want to stop reading after the top-level meta boxes to prevent reading the whole image data
+ * block in. For iPhone HEIC this is possible, but Samsung HEIC has "meta" coming after "mdat"
+ * @param parentBoxType can be used to specify the type of the parent box - used when traversing
+ * through sub boxes. This can change the logic for parsing boxes as "meta" boxes within a sub
+ * box need to be treated differently to "meta" boxes at the top level.
*/
public fun readBoxes(
byteReader: ByteReader,
stopAfterMetadataRead: Boolean = false,
positionOffset: Long = 0,
offsetShift: Long = 0,
- updatePosition: ((Long) -> Unit)? = null
+ updatePosition: ((Long) -> Unit)? = null,
+ parentBoxType: BoxType? = null
): List {
var haveSeenJxlHeaderBox = false
+ var haveSeenTopLevelMetaBox = false
+
+ var haveSeenXmpDataInUuid = false
+
val boxes = mutableListOf()
var position: Long = positionOffset
@@ -128,7 +141,11 @@ public object BoxReader {
val box = when (type) {
/* Generic EIC/ISO 14496-12 boxes. */
BoxType.FTYP -> FileTypeBox(globalOffset, size, largeSize, bytes)
- BoxType.META -> MetaBox(globalOffset, size, largeSize, bytes)
+ BoxType.META -> if (parentBoxType == null) {
+ MetaBoxTopLevel(globalOffset, size, largeSize, bytes)
+ } else {
+ MetaBox(globalOffset, size, largeSize, bytes)
+ }
BoxType.HDLR -> HandlerReferenceBox(globalOffset, size, largeSize, bytes)
BoxType.IINF -> ItemInformationBox(globalOffset, size, largeSize, bytes)
BoxType.INFE -> ItemInfoEntryBox(globalOffset, size, largeSize, bytes)
@@ -137,8 +154,10 @@ public object BoxReader {
BoxType.MDAT -> MediaDataBox(globalOffset, size, largeSize, bytes)
BoxType.MOOV -> MovieBox(globalOffset, size, largeSize, bytes)
BoxType.TRAK -> TrackBox(globalOffset, size, largeSize, bytes)
+ BoxType.TKHD -> TrackHeaderBox(globalOffset, size, largeSize, bytes)
BoxType.MDIA -> MediaBox(globalOffset, size, largeSize, bytes)
BoxType.UUID -> UuidBox(globalOffset, size, largeSize, bytes)
+ BoxType.UDTA -> UserDataBox(globalOffset, size, largeSize, bytes)
/* JXL boxes */
BoxType.EXIF -> ExifBox(globalOffset, size, largeSize, bytes)
BoxType.XML -> XmlBox(globalOffset, size, largeSize, bytes)
@@ -152,9 +171,35 @@ public object BoxReader {
if (stopAfterMetadataRead) {
- /* This is the case for HEIC & AVIF */
- if (type == BoxType.META)
- break
+ /* Metadata is here for most HEIC & AVIF */
+ if (type == BoxType.META && parentBoxType == null) {
+ haveSeenTopLevelMetaBox = true
+
+ box as MetaBoxTopLevel
+
+ /*
+ * If this box has XMP, we can break. If it's missing XMP, we should continue
+ * reading the file to search for an XMP UUID box (or break now if we've already
+ * seen it)
+ */
+ if (box.hasXmp() || haveSeenXmpDataInUuid) {
+ break
+ }
+ }
+
+ /* Some store XMP data in a UUID box instead */
+ if (type == BoxType.UUID) {
+ box as UuidBox
+
+ /*
+ * If this box contains XMP, we can break as soon as we also find the top-level
+ * META box (or break now if we've already seen it)
+ */
+ if (box.isXmp()) {
+ haveSeenXmpDataInUuid = true
+ if (haveSeenTopLevelMetaBox) break
+ }
+ }
/*
* When parsing JXL we need to take a note that we saw the header.
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/BoxType.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/BoxType.kt
similarity index 81%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/bmff/BoxType.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/BoxType.kt
index 9168d59f..c9667272 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/BoxType.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/BoxType.kt
@@ -1,4 +1,6 @@
/*
+ * Copyright 2026 Ramon Bouckaert
+ * Copyright 2026 Stefan Oltmann
* Copyright 2025 Ashampoo GmbH & Co. KG
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -13,9 +15,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.bmff
+package de.stefan_oltmann.kim.format.bmff
-import com.ashampoo.kim.common.toFourCCTypeString
+import de.stefan_oltmann.kim.common.toFourCCTypeString
public data class BoxType(
val bytes: ByteArray,
@@ -99,15 +101,30 @@ public data class BoxType(
public val MOOV: BoxType = of("moov".encodeToByteArray())
/**
- * ISOBMFF Track Box, used by CR3
+ * ISOBMFF Track Box, used by CR3 and AVIS
*/
public val TRAK: BoxType = of("trak".encodeToByteArray())
/**
- * ISOBMFF Media Box, used by CR3
+ * ISOBMFF Track Header Box, used by CR3 and AVIS
+ */
+ public val TKHD: BoxType = of("tkhd".encodeToByteArray())
+
+ /**
+ * ISOBMFF Media Box, used by CR3 amd AVIS
*/
public val MDIA: BoxType = of("mdia".encodeToByteArray())
+ /**
+ * ISOBMFF Media Header Box
+ */
+ public val MDHD: BoxType = of("mdhd".encodeToByteArray())
+
+ /**
+ * ISOBMFF User Data Box
+ */
+ public val UDTA: BoxType = of("udta".encodeToByteArray())
+
/**
* ISOBMFF Media Information Container, used by CR3
*/
@@ -178,6 +195,26 @@ public data class BoxType(
*/
public val THMB: BoxType = of("THMB".encodeToByteArray())
+ /**
+ * Apple information box (format) - byte 0xa9 followed by "fmt"
+ */
+ public val FMT: BoxType = of(byteArrayOf(0xA9.toByte(), 'f'.code.toByte(), 'm'.code.toByte(), 't'.code.toByte()))
+
+ /**
+ * Apple information box (information) - byte 0xa9 followed by "inf"
+ */
+ public val AINF: BoxType = of(byteArrayOf(0xA9.toByte(), 'i'.code.toByte(), 'n'.code.toByte(), 'f'.code.toByte()))
+
+ /**
+ * FujiFilm Movie Stream Name
+ */
+ public val FFMV: BoxType = of("FFMV".encodeToByteArray())
+
+ /**
+ * FujiFilm Metadata
+ */
+ public val MVTG: BoxType = of("MVTG".encodeToByteArray())
+
@Suppress("MagicNumber")
public fun of(typeBytes: ByteArray): BoxType {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/CopyByteReader.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/CopyByteReader.kt
similarity index 89%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/bmff/CopyByteReader.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/CopyByteReader.kt
index 48b471ba..9e4274bc 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/CopyByteReader.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/CopyByteReader.kt
@@ -13,10 +13,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.bmff
+package de.stefan_oltmann.kim.format.bmff
-import com.ashampoo.kim.input.ByteReader
-import com.ashampoo.kim.output.ByteArrayByteWriter
+import de.stefan_oltmann.kim.input.ByteReader
+import de.stefan_oltmann.kim.output.ByteArrayByteWriter
internal class CopyByteReader(
val byteReader: ByteReader
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/Extent.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/Extent.kt
similarity index 94%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/bmff/Extent.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/Extent.kt
index 082f60a9..2c1a79ce 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/Extent.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/Extent.kt
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.bmff
+package de.stefan_oltmann.kim.format.bmff
public data class Extent(
val itemId: Int,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/Box.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/Box.kt
similarity index 90%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/Box.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/Box.kt
index 3324163e..981f587f 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/Box.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/Box.kt
@@ -14,10 +14,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.bmff.box
+package de.stefan_oltmann.kim.format.bmff.box
-import com.ashampoo.kim.format.bmff.BMFFConstants.BOX_HEADER_LENGTH
-import com.ashampoo.kim.format.bmff.BoxType
+import de.stefan_oltmann.kim.format.bmff.BMFFConstants.BOX_HEADER_LENGTH
+import de.stefan_oltmann.kim.format.bmff.BoxType
public open class Box(
public val type: BoxType,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/BoxContainer.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/BoxContainer.kt
similarity index 96%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/BoxContainer.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/BoxContainer.kt
index 8c895682..6fedfbd7 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/BoxContainer.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/BoxContainer.kt
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.bmff.box
+package de.stefan_oltmann.kim.format.bmff.box
public interface BoxContainer {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/FileTypeBox.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/FileTypeBox.kt
similarity index 79%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/FileTypeBox.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/FileTypeBox.kt
index 3dc2bba4..77db51cf 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/FileTypeBox.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/FileTypeBox.kt
@@ -1,4 +1,5 @@
/*
+ * Copyright 2026 Stefan Oltmann
* Copyright 2025 Ashampoo GmbH & Co. KG
* Copyright 2002-2023 Drew Noakes and contributors
*
@@ -14,14 +15,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.bmff.box
+package de.stefan_oltmann.kim.format.bmff.box
-import com.ashampoo.kim.common.toFourCCTypeString
-import com.ashampoo.kim.format.bmff.BMFFConstants.BMFF_BYTE_ORDER
-import com.ashampoo.kim.format.bmff.BMFFConstants.BOX_HEADER_LENGTH
-import com.ashampoo.kim.format.bmff.BoxType
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.input.read4BytesAsInt
+import de.stefan_oltmann.kim.common.toFourCCTypeString
+import de.stefan_oltmann.kim.format.bmff.BMFFConstants.BMFF_BYTE_ORDER
+import de.stefan_oltmann.kim.format.bmff.BMFFConstants.BOX_HEADER_LENGTH
+import de.stefan_oltmann.kim.format.bmff.BoxType
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.input.read4BytesAsInt
/**
* EIC/ISO 14496-12 ftyp box
@@ -72,5 +73,7 @@ public class FileTypeBox(
internal companion object {
const val JXL_BRAND = "jxl "
const val CR3_BRAND = "crx "
+ const val MP4V2_BRAND = "mp42"
+ const val MOV_BRAND = "qt "
}
}
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/HandlerReferenceBox.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/HandlerReferenceBox.kt
similarity index 80%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/HandlerReferenceBox.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/HandlerReferenceBox.kt
index e623aa06..4801d30c 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/HandlerReferenceBox.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/HandlerReferenceBox.kt
@@ -14,15 +14,15 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.bmff.box
+package de.stefan_oltmann.kim.format.bmff.box
-import com.ashampoo.kim.common.toHex
-import com.ashampoo.kim.format.bmff.BoxType
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.input.readByteAsInt
-import com.ashampoo.kim.input.readBytes
-import com.ashampoo.kim.input.readNullTerminatedString
-import com.ashampoo.kim.input.skipBytes
+import de.stefan_oltmann.kim.common.toHex
+import de.stefan_oltmann.kim.format.bmff.BoxType
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.input.readByteAsInt
+import de.stefan_oltmann.kim.input.readBytes
+import de.stefan_oltmann.kim.input.readNullTerminatedString
+import de.stefan_oltmann.kim.input.skipBytes
/**
* EIC/ISO 14496-12 hdlr box
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/ItemInfoEntryBox.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/ItemInfoEntryBox.kt
similarity index 79%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/ItemInfoEntryBox.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/ItemInfoEntryBox.kt
index 7f20d2e4..d027b5a6 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/ItemInfoEntryBox.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/ItemInfoEntryBox.kt
@@ -14,18 +14,18 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.bmff.box
-
-import com.ashampoo.kim.common.toFourCCTypeString
-import com.ashampoo.kim.common.toHex
-import com.ashampoo.kim.format.bmff.BMFFConstants.BMFF_BYTE_ORDER
-import com.ashampoo.kim.format.bmff.BoxType
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.input.read2BytesAsInt
-import com.ashampoo.kim.input.read4BytesAsInt
-import com.ashampoo.kim.input.readByteAsInt
-import com.ashampoo.kim.input.readBytes
-import com.ashampoo.kim.input.readNullTerminatedString
+package de.stefan_oltmann.kim.format.bmff.box
+
+import de.stefan_oltmann.kim.common.toFourCCTypeString
+import de.stefan_oltmann.kim.common.toHex
+import de.stefan_oltmann.kim.format.bmff.BMFFConstants.BMFF_BYTE_ORDER
+import de.stefan_oltmann.kim.format.bmff.BoxType
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.input.read2BytesAsInt
+import de.stefan_oltmann.kim.input.read4BytesAsInt
+import de.stefan_oltmann.kim.input.readByteAsInt
+import de.stefan_oltmann.kim.input.readBytes
+import de.stefan_oltmann.kim.input.readNullTerminatedString
/**
* EIC/ISO 14496-12 infe box
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/ItemInformationBox.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/ItemInformationBox.kt
similarity index 74%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/ItemInformationBox.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/ItemInformationBox.kt
index fb07745f..cabe2aaa 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/ItemInformationBox.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/ItemInformationBox.kt
@@ -1,4 +1,5 @@
/*
+ * Copyright 2026 Ramon Bouckaert
* Copyright 2025 Ashampoo GmbH & Co. KG
* Copyright 2002-2023 Drew Noakes and contributors
*
@@ -14,17 +15,17 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.bmff.box
-
-import com.ashampoo.kim.common.toHex
-import com.ashampoo.kim.format.bmff.BMFFConstants.BMFF_BYTE_ORDER
-import com.ashampoo.kim.format.bmff.BoxReader
-import com.ashampoo.kim.format.bmff.BoxType
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.input.read2BytesAsInt
-import com.ashampoo.kim.input.read4BytesAsInt
-import com.ashampoo.kim.input.readByteAsInt
-import com.ashampoo.kim.input.readBytes
+package de.stefan_oltmann.kim.format.bmff.box
+
+import de.stefan_oltmann.kim.common.toHex
+import de.stefan_oltmann.kim.format.bmff.BMFFConstants.BMFF_BYTE_ORDER
+import de.stefan_oltmann.kim.format.bmff.BoxReader
+import de.stefan_oltmann.kim.format.bmff.BoxType
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.input.read2BytesAsInt
+import de.stefan_oltmann.kim.input.read4BytesAsInt
+import de.stefan_oltmann.kim.input.readByteAsInt
+import de.stefan_oltmann.kim.input.readBytes
/**
* EIC/ISO 14496-12 iinf box
@@ -63,7 +64,8 @@ public class ItemInformationBox(
byteReader = byteReader,
stopAfterMetadataRead = false,
positionOffset = 4L + if (version == 0) 2 else 4,
- offsetShift = offset + 4 + if (version == 0) 2 else 4
+ offsetShift = offset + 4 + if (version == 0) 2 else 4,
+ parentBoxType = type
)
val map = mutableMapOf()
@@ -79,5 +81,5 @@ public class ItemInformationBox(
}
override fun toString(): String =
- "$type version=$version flags=${flags.toHex()} ($entryCount entries)"
+ "$type Box version=$version flags=${flags.toHex()} ($entryCount entries)"
}
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/ItemLocationBox.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/ItemLocationBox.kt
similarity index 88%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/ItemLocationBox.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/ItemLocationBox.kt
index 585fa33a..4feaabed 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/ItemLocationBox.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/ItemLocationBox.kt
@@ -14,19 +14,19 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.bmff.box
-
-import com.ashampoo.kim.format.bmff.BMFFConstants.BMFF_BYTE_ORDER
-import com.ashampoo.kim.format.bmff.BoxType
-import com.ashampoo.kim.format.bmff.Extent
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.input.read2BytesAsInt
-import com.ashampoo.kim.input.read4BytesAsInt
-import com.ashampoo.kim.input.read8BytesAsLong
-import com.ashampoo.kim.input.readByteAsInt
-import com.ashampoo.kim.input.readBytes
-import com.ashampoo.kim.input.readXBytesAtInt
-import com.ashampoo.kim.input.skipBytes
+package de.stefan_oltmann.kim.format.bmff.box
+
+import de.stefan_oltmann.kim.format.bmff.BMFFConstants.BMFF_BYTE_ORDER
+import de.stefan_oltmann.kim.format.bmff.BoxType
+import de.stefan_oltmann.kim.format.bmff.Extent
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.input.read2BytesAsInt
+import de.stefan_oltmann.kim.input.read4BytesAsInt
+import de.stefan_oltmann.kim.input.read8BytesAsLong
+import de.stefan_oltmann.kim.input.readByteAsInt
+import de.stefan_oltmann.kim.input.readBytes
+import de.stefan_oltmann.kim.input.readXBytesAtInt
+import de.stefan_oltmann.kim.input.skipBytes
/**
* EIC/ISO 14496-12 iloc box
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/MediaBox.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/MediaBox.kt
similarity index 77%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/MediaBox.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/MediaBox.kt
index d7674f3e..817c832a 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/MediaBox.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/MediaBox.kt
@@ -1,4 +1,5 @@
/*
+ * Copyright 2026 Ramon Bouckaert
* Copyright 2025 Ashampoo GmbH & Co. KG
* Copyright 2002-2023 Drew Noakes and contributors
*
@@ -14,11 +15,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.bmff.box
+package de.stefan_oltmann.kim.format.bmff.box
-import com.ashampoo.kim.format.bmff.BoxReader
-import com.ashampoo.kim.format.bmff.BoxType
-import com.ashampoo.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.format.bmff.BoxReader
+import de.stefan_oltmann.kim.format.bmff.BoxType
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
/**
* EIC/ISO 14496-12 movie box
@@ -42,10 +43,11 @@ public class MediaBox(
byteReader = byteReader,
stopAfterMetadataRead = false,
positionOffset = 4,
- offsetShift = offset + 8
+ offsetShift = offset + 8,
+ parentBoxType = type
)
}
override fun toString(): String =
- "Box '$type' @$offset boxes=${boxes.map { it.type }}"
+ "$type Box @$offset boxes=${boxes.map { it.type }}"
}
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/MediaDataBox.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/MediaDataBox.kt
similarity index 91%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/MediaDataBox.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/MediaDataBox.kt
index 0ad1d414..ecdcc18a 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/MediaDataBox.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/MediaDataBox.kt
@@ -14,9 +14,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.bmff.box
+package de.stefan_oltmann.kim.format.bmff.box
-import com.ashampoo.kim.format.bmff.BoxType
+import de.stefan_oltmann.kim.format.bmff.BoxType
/**
* EIC/ISO 14496-12 mdat box
diff --git a/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/MetaBox.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/MetaBox.kt
new file mode 100644
index 00000000..ca5fee78
--- /dev/null
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/MetaBox.kt
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2026 Ramon Bouckaert
+ * Copyright 2025 Ashampoo GmbH & Co. KG
+ * Copyright 2002-2023 Drew Noakes and contributors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package de.stefan_oltmann.kim.format.bmff.box
+
+import de.stefan_oltmann.kim.common.MetadataOffset
+import de.stefan_oltmann.kim.common.MetadataType
+import de.stefan_oltmann.kim.common.toHex
+import de.stefan_oltmann.kim.format.bmff.BMFFConstants
+import de.stefan_oltmann.kim.format.bmff.BoxReader
+import de.stefan_oltmann.kim.format.bmff.BoxType
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.input.readByteAsInt
+import de.stefan_oltmann.kim.input.readBytes
+
+/**
+ * EIC/ISO 14496-12 meta box
+ *
+ * The Meta Box is a container for several metadata boxes.
+ */
+public open class MetaBox(
+ offset: Long,
+ size: Long,
+ largeSize: Long?,
+ payload: ByteArray
+) : Box(BoxType.META, offset, size, largeSize, payload), BoxContainer {
+
+ public val version: Int
+
+ public val flags: ByteArray
+
+ /* Mandatory boxes in META */
+ public val handlerReferenceBox: HandlerReferenceBox
+
+ final override val boxes: List
+
+ init {
+
+ val byteReader = ByteArrayByteReader(payload)
+
+ version = byteReader.readByteAsInt()
+
+ flags = byteReader.readBytes("flags", 3)
+
+ boxes = BoxReader.readBoxes(
+ byteReader = byteReader,
+ stopAfterMetadataRead = false,
+ positionOffset = 4,
+ offsetShift = offset + 8
+ )
+
+ /* Find & set mandatory box */
+ handlerReferenceBox = boxes.find { it.type == BoxType.HDLR } as HandlerReferenceBox
+ }
+
+ override fun toString(): String =
+ "$type Box version=$version flags=${flags.toHex()} boxes=${boxes.map { it.type }}"
+}
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/MetaBox.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/MetaBoxTopLevel.kt
similarity index 51%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/MetaBox.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/MetaBoxTopLevel.kt
index 7d7a5425..0b798fca 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/MetaBox.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/MetaBoxTopLevel.kt
@@ -1,6 +1,5 @@
/*
- * Copyright 2025 Ashampoo GmbH & Co. KG
- * Copyright 2002-2023 Drew Noakes and contributors
+ * Copyright 2026 Ramon Bouckaert
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,63 +13,31 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.bmff.box
+package de.stefan_oltmann.kim.format.bmff.box
-import com.ashampoo.kim.common.MetadataOffset
-import com.ashampoo.kim.common.MetadataType
-import com.ashampoo.kim.common.toHex
-import com.ashampoo.kim.format.bmff.BMFFConstants
-import com.ashampoo.kim.format.bmff.BoxReader
-import com.ashampoo.kim.format.bmff.BoxType
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.input.readByteAsInt
-import com.ashampoo.kim.input.readBytes
+import de.stefan_oltmann.kim.common.MetadataOffset
+import de.stefan_oltmann.kim.common.MetadataType
+import de.stefan_oltmann.kim.common.toHex
+import de.stefan_oltmann.kim.format.bmff.BMFFConstants
+import de.stefan_oltmann.kim.format.bmff.BoxType
/**
* EIC/ISO 14496-12 meta box
*
- * The Meta Box is a container for several metadata boxes.
+ * The Meta Box is a container for several metadata boxes. This class represents a top-level Meta
+ * Box that is not a sub-box of some other box.
*/
-public class MetaBox(
+public class MetaBoxTopLevel(
offset: Long,
size: Long,
largeSize: Long?,
payload: ByteArray
-) : Box(BoxType.META, offset, size, largeSize, payload), BoxContainer {
+) : MetaBox(offset, size, largeSize, payload), BoxContainer {
- public val version: Int
-
- public val flags: ByteArray
-
- /* Mandatory boxes in META */
- public val handlerReferenceBox: HandlerReferenceBox
- public val primaryItemBox: PrimaryItemBox
- public val itemInfoBox: ItemInformationBox
- public val itemLocationBox: ItemLocationBox
-
- override val boxes: List
-
- init {
-
- val byteReader = ByteArrayByteReader(payload)
-
- version = byteReader.readByteAsInt()
-
- flags = byteReader.readBytes("flags", 3)
-
- boxes = BoxReader.readBoxes(
- byteReader = byteReader,
- stopAfterMetadataRead = false,
- positionOffset = 4,
- offsetShift = offset + 8
- )
-
- /* Find & set mandatory boxes. */
- handlerReferenceBox = boxes.find { it.type == BoxType.HDLR } as HandlerReferenceBox
- primaryItemBox = boxes.find { it.type == BoxType.PITM } as PrimaryItemBox
- itemInfoBox = boxes.find { it.type == BoxType.IINF } as ItemInformationBox
- itemLocationBox = boxes.find { it.type == BoxType.ILOC } as ItemLocationBox
- }
+ /* Mandatory boxes in top-level META */
+ public val primaryItemBox: PrimaryItemBox = boxes.find { it.type == BoxType.PITM } as PrimaryItemBox
+ public val itemInfoBox: ItemInformationBox = boxes.find { it.type == BoxType.IINF } as ItemInformationBox
+ public val itemLocationBox: ItemLocationBox = boxes.find { it.type == BoxType.ILOC } as ItemLocationBox
public fun findMetadataOffsets(): List {
@@ -108,6 +75,14 @@ public class MetaBox(
return offsets
}
+ public fun hasXmp(): Boolean {
+ for (extent in itemLocationBox.extents) {
+ val itemInfo = itemInfoBox.map.get(extent.itemId) ?: continue
+ if (itemInfo.itemType == BMFFConstants.ITEM_TYPE_MIME) return true
+ }
+ return false
+ }
+
override fun toString(): String =
"$type Box version=$version flags=${flags.toHex()} boxes=${boxes.map { it.type }}"
}
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/MovieBox.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/MovieBox.kt
similarity index 77%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/MovieBox.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/MovieBox.kt
index 38d4d5eb..9c8e6f32 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/MovieBox.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/MovieBox.kt
@@ -1,4 +1,5 @@
/*
+ * Copyright 2026 Ramon Bouckaert
* Copyright 2025 Ashampoo GmbH & Co. KG
* Copyright 2002-2023 Drew Noakes and contributors
*
@@ -14,11 +15,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.bmff.box
+package de.stefan_oltmann.kim.format.bmff.box
-import com.ashampoo.kim.format.bmff.BoxReader
-import com.ashampoo.kim.format.bmff.BoxType
-import com.ashampoo.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.format.bmff.BoxReader
+import de.stefan_oltmann.kim.format.bmff.BoxType
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
/**
* EIC/ISO 14496-12 movie box
@@ -42,10 +43,11 @@ public class MovieBox(
byteReader = byteReader,
stopAfterMetadataRead = false,
positionOffset = 4,
- offsetShift = offset + 8
+ offsetShift = offset + 8,
+ parentBoxType = type
)
}
override fun toString(): String =
- "Box '$type' @$offset boxes=${boxes.map { it.type }}"
+ "$type Box @$offset boxes=${boxes.map { it.type }}"
}
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/PrimaryItemBox.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/PrimaryItemBox.kt
similarity index 76%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/PrimaryItemBox.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/PrimaryItemBox.kt
index 96294599..9859b1c5 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/PrimaryItemBox.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/PrimaryItemBox.kt
@@ -14,16 +14,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.bmff.box
-
-import com.ashampoo.kim.common.toHex
-import com.ashampoo.kim.format.bmff.BMFFConstants.BMFF_BYTE_ORDER
-import com.ashampoo.kim.format.bmff.BoxType
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.input.read2BytesAsInt
-import com.ashampoo.kim.input.read4BytesAsInt
-import com.ashampoo.kim.input.readByteAsInt
-import com.ashampoo.kim.input.readBytes
+package de.stefan_oltmann.kim.format.bmff.box
+
+import de.stefan_oltmann.kim.common.toHex
+import de.stefan_oltmann.kim.format.bmff.BMFFConstants.BMFF_BYTE_ORDER
+import de.stefan_oltmann.kim.format.bmff.BoxType
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.input.read2BytesAsInt
+import de.stefan_oltmann.kim.input.read4BytesAsInt
+import de.stefan_oltmann.kim.input.readByteAsInt
+import de.stefan_oltmann.kim.input.readBytes
/**
* EIC/ISO 14496-12 pitm box
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/TrackBox.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/TrackBox.kt
similarity index 57%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/TrackBox.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/TrackBox.kt
index aa70386a..7ebf8364 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/TrackBox.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/TrackBox.kt
@@ -1,4 +1,6 @@
/*
+ * Copyright 2026 Ramon Bouckaert
+ * Copyright 2026 Stefan Oltmann
* Copyright 2025 Ashampoo GmbH & Co. KG
* Copyright 2002-2023 Drew Noakes and contributors
*
@@ -14,12 +16,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.bmff.box
+package de.stefan_oltmann.kim.format.bmff.box
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.format.bmff.BoxReader
-import com.ashampoo.kim.format.bmff.BoxType
-import com.ashampoo.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.format.bmff.BoxReader
+import de.stefan_oltmann.kim.format.bmff.BoxType
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
/**
* EIC/ISO 14496-12 movie box
@@ -35,7 +37,7 @@ public class TrackBox(
override val boxes: List
- public val trackHeaderBox: Box
+ public val trackHeaderBox: TrackHeaderBox
public val mediaBox: MediaBox
init {
@@ -46,16 +48,19 @@ public class TrackBox(
byteReader = byteReader,
stopAfterMetadataRead = false,
positionOffset = 4,
- offsetShift = offset + 8
+ offsetShift = offset + 8,
+ parentBoxType = type
)
- if (boxes.size != 2)
- throw ImageReadException("Track box should contain two boxes: $boxes")
+ if (boxes.size < 2)
+ throw ImageReadException("Track box should contain at least two boxes: $boxes")
- trackHeaderBox = boxes[0]
- mediaBox = boxes[1] as MediaBox
+ trackHeaderBox = boxes.filterIsInstance().firstOrNull()
+ ?: throw ImageReadException("Track box should contain a track header box: $boxes")
+ mediaBox = boxes.filterIsInstance().firstOrNull()
+ ?: throw ImageReadException("Track box should contain a media box: $boxes")
}
override fun toString(): String =
- "Box '$type' @$offset boxes=${boxes.map { it.type }}"
+ "$type Box @$offset boxes=${boxes.map { it.type }}"
}
diff --git a/src/appleTest/kotlin/com/ashampoo/kim/ResourcePath.apple.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/TrackHeaderBox.kt
similarity index 53%
rename from src/appleTest/kotlin/com/ashampoo/kim/ResourcePath.apple.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/TrackHeaderBox.kt
index 8d31b7b5..9e3ab9a9 100644
--- a/src/appleTest/kotlin/com/ashampoo/kim/ResourcePath.apple.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/TrackHeaderBox.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2025 Ashampoo GmbH & Co. KG
+ * Copyright 2026 Ramon Bouckaert
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -13,16 +13,22 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim
+package de.stefan_oltmann.kim.format.bmff.box
-import platform.Foundation.NSBundle
+import de.stefan_oltmann.kim.format.bmff.BoxType
-actual fun getPathForResource(path: String): String {
-
- val pathForResource = NSBundle.mainBundle.pathForResource(
- path.substringBeforeLast("."),
- path.substringAfterLast(".")
- ).toString()
+/**
+ * EIC/ISO 14496-12 movie box
+ *
+ * The Track Header Box appears within a Track Box and contains track metadata
+ */
+public class TrackHeaderBox(
+ offset: Long,
+ size: Long,
+ largeSize: Long?,
+ payload: ByteArray
+) : Box(BoxType.TKHD, offset, size, largeSize, payload) {
- return pathForResource
+ override fun toString(): String =
+ "$type Box @$offset ($actualLength bytes)"
}
diff --git a/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/UserDataBox.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/UserDataBox.kt
new file mode 100644
index 00000000..fc3cb8ab
--- /dev/null
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/UserDataBox.kt
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2026 Stefan Oltmann
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package de.stefan_oltmann.kim.format.bmff.box
+
+import de.stefan_oltmann.kim.format.bmff.BoxReader
+import de.stefan_oltmann.kim.format.bmff.BoxType
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+
+/**
+ * User Data box
+ *
+ * This box contains multiple UUID boxes.
+ */
+public class UserDataBox(
+ offset: Long,
+ size: Long,
+ largeSize: Long?,
+ payload: ByteArray
+) : Box(BoxType.UDTA, offset, size, largeSize, payload), BoxContainer {
+
+ override val boxes: List
+
+ init {
+
+ val byteReader = ByteArrayByteReader(payload)
+
+ boxes = BoxReader.readBoxes(
+ byteReader = byteReader,
+ stopAfterMetadataRead = false,
+ positionOffset = 0,
+ offsetShift = offset + 8
+ )
+ }
+}
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/UuidBox.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/UuidBox.kt
similarity index 76%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/UuidBox.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/UuidBox.kt
index 24a4cd3d..e36e7e19 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/bmff/box/UuidBox.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/bmff/box/UuidBox.kt
@@ -1,4 +1,5 @@
/*
+ * Copyright 2026 Ramon Bouckaert
* Copyright 2025 Ashampoo GmbH & Co. KG
* Copyright 2002-2023 Drew Noakes and contributors
*
@@ -14,12 +15,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.bmff.box
+package de.stefan_oltmann.kim.format.bmff.box
-import com.ashampoo.kim.common.toHex
-import com.ashampoo.kim.format.bmff.BoxType
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.input.readRemainingBytes
+import de.stefan_oltmann.kim.common.toHex
+import de.stefan_oltmann.kim.format.bmff.BMFFConstants
+import de.stefan_oltmann.kim.format.bmff.BoxType
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.input.readRemainingBytes
/**
* EIC/ISO 14496-12 UUID box
@@ -49,6 +51,8 @@ public class UuidBox(
data = byteReader.readRemainingBytes()
}
+ public fun isXmp(): Boolean = uuidAsHex == BMFFConstants.XMP_UUID
+
override fun toString(): String =
"Box '$type' @$offset uuid=$uuidAsHex (${actualLength} bytes)"
}
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/cr2/Cr2PreviewExtractor.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/cr2/Cr2PreviewExtractor.kt
similarity index 78%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/cr2/Cr2PreviewExtractor.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/cr2/Cr2PreviewExtractor.kt
index a06c8ba1..c46bafce 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/cr2/Cr2PreviewExtractor.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/cr2/Cr2PreviewExtractor.kt
@@ -13,14 +13,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.cr2
-
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.common.tryWithImageReadException
-import com.ashampoo.kim.format.TiffPreviewExtractor
-import com.ashampoo.kim.format.tiff.TiffContents
-import com.ashampoo.kim.format.tiff.constant.ExifTag
-import com.ashampoo.kim.input.RandomAccessByteReader
+package de.stefan_oltmann.kim.format.cr2
+
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.common.tryWithImageReadException
+import de.stefan_oltmann.kim.format.TiffPreviewExtractor
+import de.stefan_oltmann.kim.format.tiff.TiffContents
+import de.stefan_oltmann.kim.format.tiff.constant.ExifTag
+import de.stefan_oltmann.kim.input.RandomAccessByteReader
public object Cr2PreviewExtractor : TiffPreviewExtractor {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/cr3/Cr3PreviewExtractor.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/cr3/Cr3PreviewExtractor.kt
similarity index 84%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/cr3/Cr3PreviewExtractor.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/cr3/Cr3PreviewExtractor.kt
index 5dc749c5..a3776ac9 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/cr3/Cr3PreviewExtractor.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/cr3/Cr3PreviewExtractor.kt
@@ -13,24 +13,24 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.cr3
-
-import com.ashampoo.kim.common.ByteOrder
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.common.slice
-import com.ashampoo.kim.common.tryWithImageReadException
-import com.ashampoo.kim.format.bmff.BoxReader
-import com.ashampoo.kim.format.bmff.BoxType
-import com.ashampoo.kim.format.bmff.box.MediaDataBox
-import com.ashampoo.kim.format.bmff.box.MovieBox
-import com.ashampoo.kim.format.bmff.box.TrackBox
-import com.ashampoo.kim.format.bmff.box.UuidBox
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.input.ByteReader
-import com.ashampoo.kim.input.read4BytesAsInt
-import com.ashampoo.kim.input.read8BytesAsLong
-import com.ashampoo.kim.input.readBytes
-import com.ashampoo.kim.input.skipBytes
+package de.stefan_oltmann.kim.format.cr3
+
+import de.stefan_oltmann.kim.common.ByteOrder
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.common.slice
+import de.stefan_oltmann.kim.common.tryWithImageReadException
+import de.stefan_oltmann.kim.format.bmff.BoxReader
+import de.stefan_oltmann.kim.format.bmff.BoxType
+import de.stefan_oltmann.kim.format.bmff.box.MediaDataBox
+import de.stefan_oltmann.kim.format.bmff.box.MovieBox
+import de.stefan_oltmann.kim.format.bmff.box.TrackBox
+import de.stefan_oltmann.kim.format.bmff.box.UuidBox
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.input.ByteReader
+import de.stefan_oltmann.kim.input.read4BytesAsInt
+import de.stefan_oltmann.kim.input.read8BytesAsLong
+import de.stefan_oltmann.kim.input.readBytes
+import de.stefan_oltmann.kim.input.skipBytes
import kotlin.jvm.JvmStatic
public object Cr3PreviewExtractor {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/cr3/Cr3Reader.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/cr3/Cr3Reader.kt
similarity index 80%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/cr3/Cr3Reader.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/cr3/Cr3Reader.kt
index b6256272..32cc6055 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/cr3/Cr3Reader.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/cr3/Cr3Reader.kt
@@ -13,23 +13,23 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.cr3
-
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.format.ImageMetadata
-import com.ashampoo.kim.format.bmff.BoxReader
-import com.ashampoo.kim.format.bmff.BoxType
-import com.ashampoo.kim.format.bmff.box.Box
-import com.ashampoo.kim.format.bmff.box.MovieBox
-import com.ashampoo.kim.format.bmff.box.UuidBox
-import com.ashampoo.kim.format.tiff.TiffContents
-import com.ashampoo.kim.format.tiff.TiffDirectory
-import com.ashampoo.kim.format.tiff.TiffReader
-import com.ashampoo.kim.format.tiff.constant.TiffConstants
-import com.ashampoo.kim.format.tiff.constant.TiffTag
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.model.ImageFormat
-import com.ashampoo.kim.model.ImageSize
+package de.stefan_oltmann.kim.format.cr3
+
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.format.MediaMetadata
+import de.stefan_oltmann.kim.format.bmff.BoxReader
+import de.stefan_oltmann.kim.format.bmff.BoxType
+import de.stefan_oltmann.kim.format.bmff.box.Box
+import de.stefan_oltmann.kim.format.bmff.box.MovieBox
+import de.stefan_oltmann.kim.format.bmff.box.UuidBox
+import de.stefan_oltmann.kim.format.tiff.TiffContents
+import de.stefan_oltmann.kim.format.tiff.TiffDirectory
+import de.stefan_oltmann.kim.format.tiff.TiffReader
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants
+import de.stefan_oltmann.kim.format.tiff.constant.TiffTag
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.model.MediaFormat
+import de.stefan_oltmann.kim.model.ImageSize
/**
* Parses CR3 as documented on https://github.com/lclevy/canon_cr3
@@ -40,7 +40,7 @@ internal object Cr3Reader {
const val CR3_XMP_UUID = "be7acfcb97a942e89c71999491e3afac"
const val CR3_PREVIEW_UUID = "eaf42b5e1c984b88b9fbb7dc406e4d16"
- fun createMetadata(allBoxes: List): ImageMetadata {
+ fun createMetadata(allBoxes: List): MediaMetadata {
val subBoxes = findMetadaSubBoxes(allBoxes)
@@ -52,8 +52,8 @@ internal object Cr3Reader {
if (idf0 == null) {
- return ImageMetadata(
- imageFormat = ImageFormat.CR3,
+ return MediaMetadata(
+ mediaFormat = MediaFormat.CR3,
imageSize = null,
exif = null,
exifBytes = null,
@@ -104,8 +104,8 @@ internal object Cr3Reader {
else
null
- return ImageMetadata(
- imageFormat = ImageFormat.CR3,
+ return MediaMetadata(
+ mediaFormat = MediaFormat.CR3,
imageSize = imageSize,
exif = tiffContents,
exifBytes = null, // TODO Generate bytes?
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/dng/DngPreviewExtractor.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/dng/DngPreviewExtractor.kt
similarity index 77%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/dng/DngPreviewExtractor.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/dng/DngPreviewExtractor.kt
index 8e4822aa..56a5535c 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/dng/DngPreviewExtractor.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/dng/DngPreviewExtractor.kt
@@ -13,16 +13,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.dng
-
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.common.tryWithImageReadException
-import com.ashampoo.kim.format.TiffPreviewExtractor
-import com.ashampoo.kim.format.tiff.TiffContents
-import com.ashampoo.kim.format.tiff.constant.ExifTag
-import com.ashampoo.kim.format.tiff.constant.TiffConstants
-import com.ashampoo.kim.format.tiff.constant.TiffTag
-import com.ashampoo.kim.input.RandomAccessByteReader
+package de.stefan_oltmann.kim.format.dng
+
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.common.tryWithImageReadException
+import de.stefan_oltmann.kim.format.TiffPreviewExtractor
+import de.stefan_oltmann.kim.format.tiff.TiffContents
+import de.stefan_oltmann.kim.format.tiff.constant.ExifTag
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants
+import de.stefan_oltmann.kim.format.tiff.constant.TiffTag
+import de.stefan_oltmann.kim.input.RandomAccessByteReader
public object DngPreviewExtractor : TiffPreviewExtractor {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/GifChunkType.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/GifChunkType.kt
similarity index 95%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/gif/GifChunkType.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/GifChunkType.kt
index 0b83f153..71025199 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/GifChunkType.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/GifChunkType.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.ashampoo.kim.format.gif
+package de.stefan_oltmann.kim.format.gif
public enum class GifChunkType {
HEADER,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/GifConstants.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/GifConstants.kt
similarity index 94%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/gif/GifConstants.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/GifConstants.kt
index 4e312d47..45a5eab0 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/GifConstants.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/GifConstants.kt
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package com.ashampoo.kim.format.gif
+package de.stefan_oltmann.kim.format.gif
-import com.ashampoo.kim.common.ByteOrder
+import de.stefan_oltmann.kim.common.ByteOrder
public object GifConstants {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/GifImageParser.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/GifImageParser.kt
similarity index 87%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/gif/GifImageParser.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/GifImageParser.kt
index 68063807..f62f823a 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/GifImageParser.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/GifImageParser.kt
@@ -14,26 +14,26 @@
* limitations under the License.
*/
-package com.ashampoo.kim.format.gif
-
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.common.tryWithImageReadException
-import com.ashampoo.kim.format.ImageMetadata
-import com.ashampoo.kim.format.ImageParser
-import com.ashampoo.kim.format.gif.chunk.GifChunk
-import com.ashampoo.kim.format.gif.chunk.GifChunkApplicationExtension
-import com.ashampoo.kim.format.gif.chunk.GifChunkCommentExtension
-import com.ashampoo.kim.format.gif.chunk.GifChunkHeader
-import com.ashampoo.kim.format.gif.chunk.GifChunkImageData
-import com.ashampoo.kim.format.gif.chunk.GifChunkImageDescriptor
-import com.ashampoo.kim.format.gif.chunk.GifChunkLogicalScreenDescriptor
-import com.ashampoo.kim.format.gif.chunk.GifChunkPlainTextExtension
-import com.ashampoo.kim.format.gif.chunk.GifChunkTerminator
-import com.ashampoo.kim.input.ByteReader
-import com.ashampoo.kim.input.readByte
-import com.ashampoo.kim.input.readByteAsInt
-import com.ashampoo.kim.input.readBytes
-import com.ashampoo.kim.model.ImageFormat
+package de.stefan_oltmann.kim.format.gif
+
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.common.tryWithImageReadException
+import de.stefan_oltmann.kim.format.MediaMetadata
+import de.stefan_oltmann.kim.format.ImageParser
+import de.stefan_oltmann.kim.format.gif.chunk.GifChunk
+import de.stefan_oltmann.kim.format.gif.chunk.GifChunkApplicationExtension
+import de.stefan_oltmann.kim.format.gif.chunk.GifChunkCommentExtension
+import de.stefan_oltmann.kim.format.gif.chunk.GifChunkHeader
+import de.stefan_oltmann.kim.format.gif.chunk.GifChunkImageData
+import de.stefan_oltmann.kim.format.gif.chunk.GifChunkImageDescriptor
+import de.stefan_oltmann.kim.format.gif.chunk.GifChunkLogicalScreenDescriptor
+import de.stefan_oltmann.kim.format.gif.chunk.GifChunkPlainTextExtension
+import de.stefan_oltmann.kim.format.gif.chunk.GifChunkTerminator
+import de.stefan_oltmann.kim.input.ByteReader
+import de.stefan_oltmann.kim.input.readByte
+import de.stefan_oltmann.kim.input.readByteAsInt
+import de.stefan_oltmann.kim.input.readBytes
+import de.stefan_oltmann.kim.model.MediaFormat
import kotlin.jvm.JvmStatic
public object GifImageParser : ImageParser {
@@ -45,7 +45,7 @@ public object GifImageParser : ImageParser {
)
@Throws(ImageReadException::class)
- override fun parseMetadata(byteReader: ByteReader): ImageMetadata =
+ override fun parseMetadata(byteReader: ByteReader): MediaMetadata =
tryWithImageReadException {
val chunks = readChunks(byteReader, metadataChunkTypes)
@@ -58,7 +58,7 @@ public object GifImageParser : ImageParser {
@Throws(ImageReadException::class)
@JvmStatic
- public fun parseMetadataFromChunks(chunks: List): ImageMetadata = tryWithImageReadException {
+ public fun parseMetadataFromChunks(chunks: List): MediaMetadata = tryWithImageReadException {
require(chunks.isNotEmpty()) {
"Given chunk list was empty."
@@ -88,8 +88,8 @@ public object GifImageParser : ImageParser {
else
null
- return@tryWithImageReadException ImageMetadata(
- imageFormat = ImageFormat.GIF,
+ return@tryWithImageReadException MediaMetadata(
+ mediaFormat = MediaFormat.GIF,
imageSize = imageSize,
exif = null,
exifBytes = null, // GIF does not support EXIF data
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/GifMetadataExtractor.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/GifMetadataExtractor.kt
similarity index 90%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/gif/GifMetadataExtractor.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/GifMetadataExtractor.kt
index e0c7c611..4aa35e8e 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/GifMetadataExtractor.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/GifMetadataExtractor.kt
@@ -14,19 +14,19 @@
* limitations under the License.
*/
-package com.ashampoo.kim.format.gif
-
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.common.toSingleNumberHexes
-import com.ashampoo.kim.common.tryWithImageReadException
-import com.ashampoo.kim.format.MetadataExtractor
-import com.ashampoo.kim.format.gif.GifImageParser.parseGifSubChunksUntilEmpty
-import com.ashampoo.kim.format.gif.chunk.GifChunkImageDescriptor
-import com.ashampoo.kim.format.gif.chunk.GifChunkLogicalScreenDescriptor
-import com.ashampoo.kim.input.ByteReader
-import com.ashampoo.kim.input.readByte
-import com.ashampoo.kim.input.readBytes
-import com.ashampoo.kim.model.ImageSize
+package de.stefan_oltmann.kim.format.gif
+
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.common.toSingleNumberHexes
+import de.stefan_oltmann.kim.common.tryWithImageReadException
+import de.stefan_oltmann.kim.format.MetadataExtractor
+import de.stefan_oltmann.kim.format.gif.GifImageParser.parseGifSubChunksUntilEmpty
+import de.stefan_oltmann.kim.format.gif.chunk.GifChunkImageDescriptor
+import de.stefan_oltmann.kim.format.gif.chunk.GifChunkLogicalScreenDescriptor
+import de.stefan_oltmann.kim.input.ByteReader
+import de.stefan_oltmann.kim.input.readByte
+import de.stefan_oltmann.kim.input.readBytes
+import de.stefan_oltmann.kim.model.ImageSize
public object GifMetadataExtractor : MetadataExtractor {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/GifUpdater.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/GifUpdater.kt
similarity index 75%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/gif/GifUpdater.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/GifUpdater.kt
index a82235ee..ab5ee1e4 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/GifUpdater.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/GifUpdater.kt
@@ -14,17 +14,17 @@
* limitations under the License.
*/
-package com.ashampoo.kim.format.gif
-
-import com.ashampoo.kim.common.ImageWriteException
-import com.ashampoo.kim.common.tryWithImageWriteException
-import com.ashampoo.kim.format.MetadataUpdater
-import com.ashampoo.kim.format.xmp.XmpWriter
-import com.ashampoo.kim.input.ByteReader
-import com.ashampoo.kim.model.MetadataUpdate
-import com.ashampoo.kim.output.ByteWriter
-import com.ashampoo.xmp.XMPMeta
-import com.ashampoo.xmp.XMPMetaFactory
+package de.stefan_oltmann.kim.format.gif
+
+import de.stefan_oltmann.kim.common.ImageWriteException
+import de.stefan_oltmann.kim.common.tryWithImageWriteException
+import de.stefan_oltmann.kim.format.MetadataUpdater
+import de.stefan_oltmann.kim.format.xmp.XmpWriter
+import de.stefan_oltmann.kim.input.ByteReader
+import de.stefan_oltmann.kim.model.MetadataUpdate
+import de.stefan_oltmann.kim.output.ByteWriter
+import de.stefan_oltmann.xmp.XMPMeta
+import de.stefan_oltmann.xmp.XMPMetaFactory
internal object GifUpdater : MetadataUpdater {
override fun update(
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/GifVersion.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/GifVersion.kt
similarity index 96%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/gif/GifVersion.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/GifVersion.kt
index 3676c874..8a401005 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/GifVersion.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/GifVersion.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.ashampoo.kim.format.gif
+package de.stefan_oltmann.kim.format.gif
public enum class GifVersion(public val bytes: ByteArray) {
GIF87A(
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/GifWriter.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/GifWriter.kt
similarity index 88%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/gif/GifWriter.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/GifWriter.kt
index 2812ba23..4277eb12 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/GifWriter.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/GifWriter.kt
@@ -14,13 +14,13 @@
* limitations under the License.
*/
-package com.ashampoo.kim.format.gif
+package de.stefan_oltmann.kim.format.gif
-import com.ashampoo.kim.format.gif.chunk.GifChunk
-import com.ashampoo.kim.format.gif.chunk.GifChunkApplicationExtension
-import com.ashampoo.kim.input.ByteReader
-import com.ashampoo.kim.output.ByteWriter
-import com.ashampoo.kim.output.writeString
+import de.stefan_oltmann.kim.format.gif.chunk.GifChunk
+import de.stefan_oltmann.kim.format.gif.chunk.GifChunkApplicationExtension
+import de.stefan_oltmann.kim.input.ByteReader
+import de.stefan_oltmann.kim.output.ByteWriter
+import de.stefan_oltmann.kim.output.writeString
public object GifWriter {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunk.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunk.kt
similarity index 87%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunk.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunk.kt
index 56a87a0f..58fbdec1 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunk.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunk.kt
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package com.ashampoo.kim.format.gif.chunk
+package de.stefan_oltmann.kim.format.gif.chunk
-import com.ashampoo.kim.format.gif.GifChunkType
+import de.stefan_oltmann.kim.format.gif.GifChunkType
public open class GifChunk(
public val type: GifChunkType,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkApplicationExtension.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkApplicationExtension.kt
similarity index 90%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkApplicationExtension.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkApplicationExtension.kt
index cb1db438..533a0276 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkApplicationExtension.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkApplicationExtension.kt
@@ -14,13 +14,13 @@
* limitations under the License.
*/
-package com.ashampoo.kim.format.gif.chunk
+package de.stefan_oltmann.kim.format.gif.chunk
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.format.gif.GifChunkType
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.input.readByte
-import com.ashampoo.kim.input.readBytes
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.format.gif.GifChunkType
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.input.readByte
+import de.stefan_oltmann.kim.input.readBytes
public class GifChunkApplicationExtension(
header: ByteArray,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkCommentExtension.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkCommentExtension.kt
similarity index 89%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkCommentExtension.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkCommentExtension.kt
index d0e6f7d7..00aeea63 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkCommentExtension.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkCommentExtension.kt
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package com.ashampoo.kim.format.gif.chunk
+package de.stefan_oltmann.kim.format.gif.chunk
-import com.ashampoo.kim.format.gif.GifChunkType
+import de.stefan_oltmann.kim.format.gif.GifChunkType
public class GifChunkCommentExtension(
header: ByteArray,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkHeader.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkHeader.kt
similarity index 81%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkHeader.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkHeader.kt
index 77309dce..1180406c 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkHeader.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkHeader.kt
@@ -14,14 +14,14 @@
* limitations under the License.
*/
-package com.ashampoo.kim.format.gif.chunk
-
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.format.gif.GifChunkType
-import com.ashampoo.kim.format.gif.GifConstants.GIF_SIGNATURE
-import com.ashampoo.kim.format.gif.GifVersion
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.input.readBytes
+package de.stefan_oltmann.kim.format.gif.chunk
+
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.format.gif.GifChunkType
+import de.stefan_oltmann.kim.format.gif.GifConstants.GIF_SIGNATURE
+import de.stefan_oltmann.kim.format.gif.GifVersion
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.input.readBytes
public class GifChunkHeader(
bytes: ByteArray
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkImageData.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkImageData.kt
similarity index 89%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkImageData.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkImageData.kt
index e324e397..0f8edbb4 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkImageData.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkImageData.kt
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package com.ashampoo.kim.format.gif.chunk
+package de.stefan_oltmann.kim.format.gif.chunk
-import com.ashampoo.kim.format.gif.GifChunkType
+import de.stefan_oltmann.kim.format.gif.GifChunkType
public class GifChunkImageData(
lzwMinimumCodeSize: Byte,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkImageDescriptor.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkImageDescriptor.kt
similarity index 86%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkImageDescriptor.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkImageDescriptor.kt
index 9eeb5913..af81251b 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkImageDescriptor.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkImageDescriptor.kt
@@ -14,17 +14,17 @@
* limitations under the License.
*/
-package com.ashampoo.kim.format.gif.chunk
-
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.format.gif.GifChunkType
-import com.ashampoo.kim.format.gif.GifConstants
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.input.read2BytesAsInt
-import com.ashampoo.kim.input.readByte
-import com.ashampoo.kim.model.ImageSize
-import com.ashampoo.kim.output.ByteArrayByteWriter
-import com.ashampoo.kim.output.write2BytesAsInt
+package de.stefan_oltmann.kim.format.gif.chunk
+
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.format.gif.GifChunkType
+import de.stefan_oltmann.kim.format.gif.GifConstants
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.input.read2BytesAsInt
+import de.stefan_oltmann.kim.input.readByte
+import de.stefan_oltmann.kim.model.ImageSize
+import de.stefan_oltmann.kim.output.ByteArrayByteWriter
+import de.stefan_oltmann.kim.output.write2BytesAsInt
import kotlin.jvm.JvmStatic
public class GifChunkImageDescriptor(
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkLogicalScreenDescriptor.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkLogicalScreenDescriptor.kt
similarity index 85%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkLogicalScreenDescriptor.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkLogicalScreenDescriptor.kt
index 23438359..73e5afba 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkLogicalScreenDescriptor.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkLogicalScreenDescriptor.kt
@@ -14,18 +14,18 @@
* limitations under the License.
*/
-package com.ashampoo.kim.format.gif.chunk
-
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.format.gif.GifChunkType
-import com.ashampoo.kim.format.gif.GifConstants
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.input.read2BytesAsInt
-import com.ashampoo.kim.input.readByte
-import com.ashampoo.kim.input.readByteAsInt
-import com.ashampoo.kim.model.ImageSize
-import com.ashampoo.kim.output.ByteArrayByteWriter
-import com.ashampoo.kim.output.write2BytesAsInt
+package de.stefan_oltmann.kim.format.gif.chunk
+
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.format.gif.GifChunkType
+import de.stefan_oltmann.kim.format.gif.GifConstants
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.input.read2BytesAsInt
+import de.stefan_oltmann.kim.input.readByte
+import de.stefan_oltmann.kim.input.readByteAsInt
+import de.stefan_oltmann.kim.model.ImageSize
+import de.stefan_oltmann.kim.output.ByteArrayByteWriter
+import de.stefan_oltmann.kim.output.write2BytesAsInt
import kotlin.jvm.JvmStatic
public class GifChunkLogicalScreenDescriptor(
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkPlainTextExtension.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkPlainTextExtension.kt
similarity index 89%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkPlainTextExtension.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkPlainTextExtension.kt
index 44936b7b..3a7917a2 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkPlainTextExtension.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkPlainTextExtension.kt
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package com.ashampoo.kim.format.gif.chunk
+package de.stefan_oltmann.kim.format.gif.chunk
-import com.ashampoo.kim.format.gif.GifChunkType
+import de.stefan_oltmann.kim.format.gif.GifChunkType
public class GifChunkPlainTextExtension(
header: ByteArray,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkTerminator.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkTerminator.kt
similarity index 80%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkTerminator.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkTerminator.kt
index 56e1a16f..f9030b4c 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkTerminator.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkTerminator.kt
@@ -14,11 +14,11 @@
* limitations under the License.
*/
-package com.ashampoo.kim.format.gif.chunk
+package de.stefan_oltmann.kim.format.gif.chunk
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.format.gif.GifChunkType
-import com.ashampoo.kim.format.gif.GifConstants
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.format.gif.GifChunkType
+import de.stefan_oltmann.kim.format.gif.GifConstants
public class GifChunkTerminator(
bytes: ByteArray
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegConstants.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegConstants.kt
similarity index 99%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegConstants.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegConstants.kt
index 96dec45b..3a5b0b1b 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegConstants.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegConstants.kt
@@ -14,9 +14,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jpeg
+package de.stefan_oltmann.kim.format.jpeg
-import com.ashampoo.kim.common.ByteOrder
+import de.stefan_oltmann.kim.common.ByteOrder
@Suppress("MagicNumber")
public object JpegConstants {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegImageParser.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegImageParser.kt
similarity index 83%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegImageParser.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegImageParser.kt
index b251ba3c..371077c5 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegImageParser.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegImageParser.kt
@@ -14,42 +14,42 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jpeg
-
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.common.getRemainingBytes
-import com.ashampoo.kim.common.startsWith
-import com.ashampoo.kim.common.toSingleNumberHexes
-import com.ashampoo.kim.common.tryWithImageReadException
-import com.ashampoo.kim.format.ImageFormatMagicNumbers
-import com.ashampoo.kim.format.ImageMetadata
-import com.ashampoo.kim.format.ImageParser
-import com.ashampoo.kim.format.jpeg.iptc.IptcMetadata
-import com.ashampoo.kim.format.jpeg.segment.App13Segment
-import com.ashampoo.kim.format.jpeg.segment.AppnSegment
-import com.ashampoo.kim.format.jpeg.segment.GenericSegment
-import com.ashampoo.kim.format.jpeg.segment.JfifSegment
-import com.ashampoo.kim.format.jpeg.segment.Segment
-import com.ashampoo.kim.format.jpeg.segment.SofnSegment
-import com.ashampoo.kim.format.jpeg.segment.UnknownSegment
-import com.ashampoo.kim.format.jpeg.xmp.JpegXmpParser
-import com.ashampoo.kim.format.tiff.TiffContents
-import com.ashampoo.kim.format.tiff.TiffReader
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.input.ByteReader
-import com.ashampoo.kim.input.read2BytesAsInt
-import com.ashampoo.kim.input.skipBytes
-import com.ashampoo.kim.model.ImageFormat
-import com.ashampoo.kim.model.ImageSize
+package de.stefan_oltmann.kim.format.jpeg
+
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.common.getRemainingBytes
+import de.stefan_oltmann.kim.common.startsWith
+import de.stefan_oltmann.kim.common.toSingleNumberHexes
+import de.stefan_oltmann.kim.common.tryWithImageReadException
+import de.stefan_oltmann.kim.format.MediaFormatMagicNumbers
+import de.stefan_oltmann.kim.format.MediaMetadata
+import de.stefan_oltmann.kim.format.ImageParser
+import de.stefan_oltmann.kim.format.jpeg.iptc.IptcMetadata
+import de.stefan_oltmann.kim.format.jpeg.segment.App13Segment
+import de.stefan_oltmann.kim.format.jpeg.segment.AppnSegment
+import de.stefan_oltmann.kim.format.jpeg.segment.GenericSegment
+import de.stefan_oltmann.kim.format.jpeg.segment.JfifSegment
+import de.stefan_oltmann.kim.format.jpeg.segment.Segment
+import de.stefan_oltmann.kim.format.jpeg.segment.SofnSegment
+import de.stefan_oltmann.kim.format.jpeg.segment.UnknownSegment
+import de.stefan_oltmann.kim.format.jpeg.xmp.JpegXmpParser
+import de.stefan_oltmann.kim.format.tiff.TiffContents
+import de.stefan_oltmann.kim.format.tiff.TiffReader
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.input.ByteReader
+import de.stefan_oltmann.kim.input.read2BytesAsInt
+import de.stefan_oltmann.kim.input.skipBytes
+import de.stefan_oltmann.kim.model.MediaFormat
+import de.stefan_oltmann.kim.model.ImageSize
public object JpegImageParser : ImageParser {
public fun getImageSize(byteReader: ByteReader): ImageSize? {
- val magicNumberBytes = byteReader.readBytes(ImageFormatMagicNumbers.jpeg.size).toList()
+ val magicNumberBytes = byteReader.readBytes(MediaFormatMagicNumbers.jpeg.size).toList()
/* Ensure it's actually a JPEG. */
- require(magicNumberBytes == ImageFormatMagicNumbers.jpeg) {
+ require(magicNumberBytes == MediaFormatMagicNumbers.jpeg) {
"JPEG magic number mismatch: ${magicNumberBytes.toSingleNumberHexes()}"
}
@@ -132,7 +132,7 @@ public object JpegImageParser : ImageParser {
}
@Throws(ImageReadException::class)
- override fun parseMetadata(byteReader: ByteReader): ImageMetadata =
+ override fun parseMetadata(byteReader: ByteReader): MediaMetadata =
tryWithImageReadException {
val segments = readSegments(
@@ -151,8 +151,8 @@ public object JpegImageParser : ImageParser {
val xmp = getXmpXml(segments)
- return@tryWithImageReadException ImageMetadata(
- imageFormat = ImageFormat.JPEG,
+ return@tryWithImageReadException MediaMetadata(
+ mediaFormat = MediaFormat.JPEG,
imageSize = imageSize,
exif = exif,
exifBytes = exifBytes,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegMetadataExtractor.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegMetadataExtractor.kt
similarity index 87%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegMetadataExtractor.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegMetadataExtractor.kt
index 3f951be9..40de60bb 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegMetadataExtractor.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegMetadataExtractor.kt
@@ -13,16 +13,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jpeg
+package de.stefan_oltmann.kim.format.jpeg
-import com.ashampoo.kim.common.ByteOrder
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.common.toSingleNumberHexes
-import com.ashampoo.kim.common.toUInt16
-import com.ashampoo.kim.common.tryWithImageReadException
-import com.ashampoo.kim.format.ImageFormatMagicNumbers
-import com.ashampoo.kim.format.MetadataExtractor
-import com.ashampoo.kim.input.ByteReader
+import de.stefan_oltmann.kim.common.ByteOrder
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.common.toSingleNumberHexes
+import de.stefan_oltmann.kim.common.toUInt16
+import de.stefan_oltmann.kim.common.tryWithImageReadException
+import de.stefan_oltmann.kim.format.MediaFormatMagicNumbers
+import de.stefan_oltmann.kim.format.MetadataExtractor
+import de.stefan_oltmann.kim.input.ByteReader
public object JpegMetadataExtractor : MetadataExtractor {
@@ -40,10 +40,10 @@ public object JpegMetadataExtractor : MetadataExtractor {
val bytes = mutableListOf()
- val magicNumberBytes = byteReader.readBytes(ImageFormatMagicNumbers.jpeg.size).toList()
+ val magicNumberBytes = byteReader.readBytes(MediaFormatMagicNumbers.jpeg.size).toList()
/* Ensure it's actually a JPEG. */
- require(magicNumberBytes == ImageFormatMagicNumbers.jpeg) {
+ require(magicNumberBytes == MediaFormatMagicNumbers.jpeg) {
"JPEG magic number mismatch: ${magicNumberBytes.toSingleNumberHexes()}"
}
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegOrientationOffsetFinder.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegOrientationOffsetFinder.kt
similarity index 79%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegOrientationOffsetFinder.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegOrientationOffsetFinder.kt
index 4ae8b860..335099ef 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegOrientationOffsetFinder.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegOrientationOffsetFinder.kt
@@ -13,25 +13,25 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jpeg
-
-import com.ashampoo.kim.common.ByteOrder
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.common.toSingleNumberHexes
-import com.ashampoo.kim.common.tryWithImageReadException
-import com.ashampoo.kim.format.ImageFormatMagicNumbers
-import com.ashampoo.kim.format.jpeg.JpegConstants.JPEG_BYTE_ORDER
-import com.ashampoo.kim.format.jpeg.JpegMetadataExtractor.MARKER_END_OF_IMAGE
-import com.ashampoo.kim.format.jpeg.JpegMetadataExtractor.SEGMENT_IDENTIFIER
-import com.ashampoo.kim.format.jpeg.JpegMetadataExtractor.SEGMENT_START_OF_SCAN
-import com.ashampoo.kim.format.tiff.TiffReader
-import com.ashampoo.kim.format.tiff.constant.TiffConstants.TIFF_ENTRY_LENGTH
-import com.ashampoo.kim.format.tiff.constant.TiffConstants.TIFF_HEADER_SIZE
-import com.ashampoo.kim.format.tiff.constant.TiffTag
-import com.ashampoo.kim.input.ByteReader
-import com.ashampoo.kim.input.read2BytesAsInt
-import com.ashampoo.kim.input.readBytes
-import com.ashampoo.kim.input.skipBytes
+package de.stefan_oltmann.kim.format.jpeg
+
+import de.stefan_oltmann.kim.common.ByteOrder
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.common.toSingleNumberHexes
+import de.stefan_oltmann.kim.common.tryWithImageReadException
+import de.stefan_oltmann.kim.format.MediaFormatMagicNumbers
+import de.stefan_oltmann.kim.format.jpeg.JpegConstants.JPEG_BYTE_ORDER
+import de.stefan_oltmann.kim.format.jpeg.JpegMetadataExtractor.MARKER_END_OF_IMAGE
+import de.stefan_oltmann.kim.format.jpeg.JpegMetadataExtractor.SEGMENT_IDENTIFIER
+import de.stefan_oltmann.kim.format.jpeg.JpegMetadataExtractor.SEGMENT_START_OF_SCAN
+import de.stefan_oltmann.kim.format.tiff.TiffReader
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.TIFF_ENTRY_LENGTH
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.TIFF_HEADER_SIZE
+import de.stefan_oltmann.kim.format.tiff.constant.TiffTag
+import de.stefan_oltmann.kim.input.ByteReader
+import de.stefan_oltmann.kim.input.read2BytesAsInt
+import de.stefan_oltmann.kim.input.readBytes
+import de.stefan_oltmann.kim.input.skipBytes
/**
* This algorithm quickly identifies the EXIF orientation offset.
@@ -48,14 +48,14 @@ public object JpegOrientationOffsetFinder {
byteReader: ByteReader
): Long? = tryWithImageReadException {
- val magicNumberBytes = byteReader.readBytes(ImageFormatMagicNumbers.jpeg.size).toList()
+ val magicNumberBytes = byteReader.readBytes(MediaFormatMagicNumbers.jpeg.size).toList()
/* Ensure it's actually a JPEG. */
- require(magicNumberBytes == ImageFormatMagicNumbers.jpeg) {
+ require(magicNumberBytes == MediaFormatMagicNumbers.jpeg) {
"JPEG magic number mismatch: ${magicNumberBytes.toSingleNumberHexes()}"
}
- var positionCounter: Long = ImageFormatMagicNumbers.jpeg.size.toLong()
+ var positionCounter: Long = MediaFormatMagicNumbers.jpeg.size.toLong()
@Suppress("LoopWithTooManyJumpStatements")
do {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegRewriter.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegRewriter.kt
similarity index 88%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegRewriter.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegRewriter.kt
index a46f613d..b7f5bef0 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegRewriter.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegRewriter.kt
@@ -14,28 +14,28 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jpeg
-
-import com.ashampoo.kim.common.ImageWriteException
-import com.ashampoo.kim.common.getRemainingBytes
-import com.ashampoo.kim.common.toBytes
-import com.ashampoo.kim.format.jpeg.JpegConstants.JPEG_BYTE_ORDER
-import com.ashampoo.kim.format.jpeg.iptc.IptcBlock
-import com.ashampoo.kim.format.jpeg.iptc.IptcConstants
-import com.ashampoo.kim.format.jpeg.iptc.IptcMetadata
-import com.ashampoo.kim.format.jpeg.iptc.IptcParser
-import com.ashampoo.kim.format.jpeg.iptc.IptcWriter
-import com.ashampoo.kim.format.jpeg.jfif.JFIFPiece
-import com.ashampoo.kim.format.jpeg.jfif.JFIFPieceImageData
-import com.ashampoo.kim.format.jpeg.jfif.JFIFPieceSegment
-import com.ashampoo.kim.format.jpeg.jfif.JFIFPieceSegmentExif
-import com.ashampoo.kim.format.tiff.write.TiffOutputSet
-import com.ashampoo.kim.format.tiff.write.TiffWriterBase
-import com.ashampoo.kim.format.tiff.write.TiffWriterLossless
-import com.ashampoo.kim.format.tiff.write.TiffWriterLossy
-import com.ashampoo.kim.input.ByteReader
-import com.ashampoo.kim.output.ByteArrayByteWriter
-import com.ashampoo.kim.output.ByteWriter
+package de.stefan_oltmann.kim.format.jpeg
+
+import de.stefan_oltmann.kim.common.ImageWriteException
+import de.stefan_oltmann.kim.common.getRemainingBytes
+import de.stefan_oltmann.kim.common.toBytes
+import de.stefan_oltmann.kim.format.jpeg.JpegConstants.JPEG_BYTE_ORDER
+import de.stefan_oltmann.kim.format.jpeg.iptc.IptcBlock
+import de.stefan_oltmann.kim.format.jpeg.iptc.IptcConstants
+import de.stefan_oltmann.kim.format.jpeg.iptc.IptcMetadata
+import de.stefan_oltmann.kim.format.jpeg.iptc.IptcParser
+import de.stefan_oltmann.kim.format.jpeg.iptc.IptcWriter
+import de.stefan_oltmann.kim.format.jpeg.jfif.JFIFPiece
+import de.stefan_oltmann.kim.format.jpeg.jfif.JFIFPieceImageData
+import de.stefan_oltmann.kim.format.jpeg.jfif.JFIFPieceSegment
+import de.stefan_oltmann.kim.format.jpeg.jfif.JFIFPieceSegmentExif
+import de.stefan_oltmann.kim.format.tiff.write.TiffOutputSet
+import de.stefan_oltmann.kim.format.tiff.write.TiffWriterBase
+import de.stefan_oltmann.kim.format.tiff.write.TiffWriterLossless
+import de.stefan_oltmann.kim.format.tiff.write.TiffWriterLossy
+import de.stefan_oltmann.kim.input.ByteReader
+import de.stefan_oltmann.kim.output.ByteArrayByteWriter
+import de.stefan_oltmann.kim.output.ByteWriter
import kotlin.jvm.JvmStatic
/**
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegSegmentAnalyzer.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegSegmentAnalyzer.kt
similarity index 83%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegSegmentAnalyzer.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegSegmentAnalyzer.kt
index b288c1ff..ade482d4 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegSegmentAnalyzer.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegSegmentAnalyzer.kt
@@ -13,21 +13,21 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jpeg
-
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.common.toUInt16
-import com.ashampoo.kim.common.tryWithImageReadException
-import com.ashampoo.kim.format.ImageFormatMagicNumbers
-import com.ashampoo.kim.format.jpeg.JpegConstants.EOI_MARKER
-import com.ashampoo.kim.format.jpeg.JpegConstants.JPEG_BYTE_ORDER
-import com.ashampoo.kim.format.jpeg.JpegConstants.SOI_MARKER
-import com.ashampoo.kim.format.jpeg.JpegConstants.markerDescription
-import com.ashampoo.kim.format.jpeg.JpegMetadataExtractor.SEGMENT_IDENTIFIER
-import com.ashampoo.kim.format.jpeg.JpegMetadataExtractor.SEGMENT_START_OF_SCAN
-import com.ashampoo.kim.input.ByteReader
-import com.ashampoo.kim.input.read2BytesAsInt
-import com.ashampoo.kim.input.skipBytes
+package de.stefan_oltmann.kim.format.jpeg
+
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.common.toUInt16
+import de.stefan_oltmann.kim.common.tryWithImageReadException
+import de.stefan_oltmann.kim.format.MediaFormatMagicNumbers
+import de.stefan_oltmann.kim.format.jpeg.JpegConstants.EOI_MARKER
+import de.stefan_oltmann.kim.format.jpeg.JpegConstants.JPEG_BYTE_ORDER
+import de.stefan_oltmann.kim.format.jpeg.JpegConstants.SOI_MARKER
+import de.stefan_oltmann.kim.format.jpeg.JpegConstants.markerDescription
+import de.stefan_oltmann.kim.format.jpeg.JpegMetadataExtractor.SEGMENT_IDENTIFIER
+import de.stefan_oltmann.kim.format.jpeg.JpegMetadataExtractor.SEGMENT_START_OF_SCAN
+import de.stefan_oltmann.kim.input.ByteReader
+import de.stefan_oltmann.kim.input.read2BytesAsInt
+import de.stefan_oltmann.kim.input.skipBytes
import kotlin.jvm.JvmStatic
/**
@@ -59,7 +59,7 @@ public object JpegSegmentAnalyzer {
)
)
- var positionCounter: Int = ImageFormatMagicNumbers.jpeg.size
+ var positionCounter: Int = MediaFormatMagicNumbers.jpeg.size
@Suppress("LoopWithTooManyJumpStatements")
do {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegUpdater.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegUpdater.kt
similarity index 88%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegUpdater.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegUpdater.kt
index 0eb63ffb..cf37d9b0 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegUpdater.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegUpdater.kt
@@ -13,28 +13,28 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jpeg
-
-import com.ashampoo.kim.common.ImageWriteException
-import com.ashampoo.kim.common.startsWith
-import com.ashampoo.kim.common.tryWithImageWriteException
-import com.ashampoo.kim.format.ImageFormatMagicNumbers
-import com.ashampoo.kim.format.MetadataUpdater
-import com.ashampoo.kim.format.jpeg.iptc.IptcMetadata
-import com.ashampoo.kim.format.jpeg.iptc.IptcRecord
-import com.ashampoo.kim.format.jpeg.iptc.IptcTypes
-import com.ashampoo.kim.format.tiff.TiffContents
-import com.ashampoo.kim.format.tiff.write.TiffOutputSet
-import com.ashampoo.kim.format.xmp.XmpWriter
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.input.ByteReader
-import com.ashampoo.kim.input.readRemainingBytes
-import com.ashampoo.kim.model.MetadataUpdate
-import com.ashampoo.kim.model.TiffOrientation
-import com.ashampoo.kim.output.ByteArrayByteWriter
-import com.ashampoo.kim.output.ByteWriter
-import com.ashampoo.xmp.XMPMeta
-import com.ashampoo.xmp.XMPMetaFactory
+package de.stefan_oltmann.kim.format.jpeg
+
+import de.stefan_oltmann.kim.common.ImageWriteException
+import de.stefan_oltmann.kim.common.startsWith
+import de.stefan_oltmann.kim.common.tryWithImageWriteException
+import de.stefan_oltmann.kim.format.MediaFormatMagicNumbers
+import de.stefan_oltmann.kim.format.MetadataUpdater
+import de.stefan_oltmann.kim.format.jpeg.iptc.IptcMetadata
+import de.stefan_oltmann.kim.format.jpeg.iptc.IptcRecord
+import de.stefan_oltmann.kim.format.jpeg.iptc.IptcTypes
+import de.stefan_oltmann.kim.format.tiff.TiffContents
+import de.stefan_oltmann.kim.format.tiff.write.TiffOutputSet
+import de.stefan_oltmann.kim.format.xmp.XmpWriter
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.input.ByteReader
+import de.stefan_oltmann.kim.input.readRemainingBytes
+import de.stefan_oltmann.kim.model.MetadataUpdate
+import de.stefan_oltmann.kim.model.TiffOrientation
+import de.stefan_oltmann.kim.output.ByteArrayByteWriter
+import de.stefan_oltmann.kim.output.ByteWriter
+import de.stefan_oltmann.xmp.XMPMeta
+import de.stefan_oltmann.xmp.XMPMetaFactory
internal object JpegUpdater : MetadataUpdater {
@@ -51,7 +51,7 @@ internal object JpegUpdater : MetadataUpdater {
*/
val bytes = byteReader.readRemainingBytes()
- if (!bytes.startsWith(ImageFormatMagicNumbers.jpeg))
+ if (!bytes.startsWith(MediaFormatMagicNumbers.jpeg))
throw ImageWriteException("Provided input bytes are not JPEG!")
val kimMetadata = JpegImageParser.parseMetadata(
@@ -73,7 +73,7 @@ internal object JpegUpdater : MetadataUpdater {
thumbnailBytes: ByteArray
): ByteArray = tryWithImageWriteException {
- if (!bytes.startsWith(ImageFormatMagicNumbers.jpeg))
+ if (!bytes.startsWith(MediaFormatMagicNumbers.jpeg))
throw ImageWriteException("Provided input bytes are not JPEG!")
val metadata = JpegImageParser.parseMetadata(ByteArrayByteReader(bytes))
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegUtils.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegUtils.kt
similarity index 89%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegUtils.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegUtils.kt
index 76b85e1d..78c55d0f 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegUtils.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegUtils.kt
@@ -14,14 +14,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jpeg
-
-import com.ashampoo.kim.common.toUInt16
-import com.ashampoo.kim.format.jpeg.JpegConstants.JPEG_BYTE_ORDER
-import com.ashampoo.kim.input.ByteReader
-import com.ashampoo.kim.input.readAndVerifyBytes
-import com.ashampoo.kim.input.readBytes
-import com.ashampoo.kim.input.readRemainingBytes
+package de.stefan_oltmann.kim.format.jpeg
+
+import de.stefan_oltmann.kim.common.toUInt16
+import de.stefan_oltmann.kim.format.jpeg.JpegConstants.JPEG_BYTE_ORDER
+import de.stefan_oltmann.kim.input.ByteReader
+import de.stefan_oltmann.kim.input.readAndVerifyBytes
+import de.stefan_oltmann.kim.input.readBytes
+import de.stefan_oltmann.kim.input.readRemainingBytes
internal object JpegUtils {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegVisitor.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegVisitor.kt
similarity index 96%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegVisitor.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegVisitor.kt
index 0eef5371..3ab700bb 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/JpegVisitor.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegVisitor.kt
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jpeg
+package de.stefan_oltmann.kim.format.jpeg
internal interface JpegVisitor {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcBlock.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcBlock.kt
similarity index 95%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcBlock.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcBlock.kt
index f2d1e89a..66697a86 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcBlock.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcBlock.kt
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jpeg.iptc
+package de.stefan_oltmann.kim.format.jpeg.iptc
/**
* Represents an IPTC block, a set of key-value pairs of Photoshop IPTC data.
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcConstants.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcConstants.kt
similarity index 99%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcConstants.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcConstants.kt
index 0871b3d6..f83f2a04 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcConstants.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcConstants.kt
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jpeg.iptc
+package de.stefan_oltmann.kim.format.jpeg.iptc
internal object IptcConstants {
const val IPTC_NON_EXTENDED_RECORD_MAXIMUM_SIZE = 32_767
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcMetadata.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcMetadata.kt
similarity index 96%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcMetadata.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcMetadata.kt
index d6dd05db..47cc6a07 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcMetadata.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcMetadata.kt
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jpeg.iptc
+package de.stefan_oltmann.kim.format.jpeg.iptc
/**
* IPTC as located in JPEG APP13 segments
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcParser.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcParser.kt
similarity index 91%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcParser.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcParser.kt
index 7c379b82..d1fe69a5 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcParser.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcParser.kt
@@ -14,24 +14,24 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jpeg.iptc
-
-import com.ashampoo.kim.common.ByteOrder
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.common.decodeLatin1BytesToString
-import com.ashampoo.kim.common.slice
-import com.ashampoo.kim.common.startsWith
-import com.ashampoo.kim.common.toInt
-import com.ashampoo.kim.common.toUInt16
-import com.ashampoo.kim.common.toUInt8
-import com.ashampoo.kim.format.jpeg.JpegConstants
-import com.ashampoo.kim.format.jpeg.iptc.IptcTypes.Companion.getIptcType
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.input.read2BytesAsInt
-import com.ashampoo.kim.input.read4BytesAsInt
-import com.ashampoo.kim.input.readByte
-import com.ashampoo.kim.input.readBytes
-import com.ashampoo.kim.input.skipToQuad
+package de.stefan_oltmann.kim.format.jpeg.iptc
+
+import de.stefan_oltmann.kim.common.ByteOrder
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.common.decodeLatin1BytesToString
+import de.stefan_oltmann.kim.common.slice
+import de.stefan_oltmann.kim.common.startsWith
+import de.stefan_oltmann.kim.common.toInt
+import de.stefan_oltmann.kim.common.toUInt16
+import de.stefan_oltmann.kim.common.toUInt8
+import de.stefan_oltmann.kim.format.jpeg.JpegConstants
+import de.stefan_oltmann.kim.format.jpeg.iptc.IptcTypes.Companion.getIptcType
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.input.read2BytesAsInt
+import de.stefan_oltmann.kim.input.read4BytesAsInt
+import de.stefan_oltmann.kim.input.readByte
+import de.stefan_oltmann.kim.input.readBytes
+import de.stefan_oltmann.kim.input.skipToQuad
import kotlin.jvm.JvmStatic
public object IptcParser {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcRecord.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcRecord.kt
similarity index 95%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcRecord.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcRecord.kt
index e9feae34..ff16152e 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcRecord.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcRecord.kt
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jpeg.iptc
+package de.stefan_oltmann.kim.format.jpeg.iptc
/*
* Represents an IPTC record, a single key-value pair of Photoshop IPTC data.
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcType.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcType.kt
similarity index 94%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcType.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcType.kt
index 2917e9e1..962b398e 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcType.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcType.kt
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jpeg.iptc
+package de.stefan_oltmann.kim.format.jpeg.iptc
public interface IptcType {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcTypes.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcTypes.kt
similarity index 98%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcTypes.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcTypes.kt
index b8290593..2dc9d5a5 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcTypes.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcTypes.kt
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jpeg.iptc
+package de.stefan_oltmann.kim.format.jpeg.iptc
@Suppress("MagicNumber")
internal enum class IptcTypes(
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcWriter.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcWriter.kt
similarity index 91%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcWriter.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcWriter.kt
index a630a945..921aa79c 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcWriter.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcWriter.kt
@@ -14,14 +14,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jpeg.iptc
-
-import com.ashampoo.kim.common.ImageWriteException
-import com.ashampoo.kim.format.jpeg.JpegConstants
-import com.ashampoo.kim.format.jpeg.iptc.IptcParser.APP13_BYTE_ORDER
-import com.ashampoo.kim.output.BigEndianBinaryByteWriter
-import com.ashampoo.kim.output.BinaryByteWriter
-import com.ashampoo.kim.output.ByteArrayByteWriter
+package de.stefan_oltmann.kim.format.jpeg.iptc
+
+import de.stefan_oltmann.kim.common.ImageWriteException
+import de.stefan_oltmann.kim.format.jpeg.JpegConstants
+import de.stefan_oltmann.kim.format.jpeg.iptc.IptcParser.APP13_BYTE_ORDER
+import de.stefan_oltmann.kim.output.BigEndianBinaryByteWriter
+import de.stefan_oltmann.kim.output.BinaryByteWriter
+import de.stefan_oltmann.kim.output.ByteArrayByteWriter
import kotlin.jvm.JvmStatic
public object IptcWriter {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/jfif/JFIFPiece.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/jfif/JFIFPiece.kt
similarity index 88%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/jfif/JFIFPiece.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/jfif/JFIFPiece.kt
index 2b650e5f..470e60f2 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/jfif/JFIFPiece.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/jfif/JFIFPiece.kt
@@ -14,9 +14,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jpeg.jfif
+package de.stefan_oltmann.kim.format.jpeg.jfif
-import com.ashampoo.kim.output.ByteWriter
+import de.stefan_oltmann.kim.output.ByteWriter
internal fun interface JFIFPiece {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/jfif/JFIFPieceImageData.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/jfif/JFIFPieceImageData.kt
similarity index 90%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/jfif/JFIFPieceImageData.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/jfif/JFIFPieceImageData.kt
index dd5144e6..5229e1f9 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/jfif/JFIFPieceImageData.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/jfif/JFIFPieceImageData.kt
@@ -14,9 +14,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jpeg.jfif
+package de.stefan_oltmann.kim.format.jpeg.jfif
-import com.ashampoo.kim.output.ByteWriter
+import de.stefan_oltmann.kim.output.ByteWriter
internal class JFIFPieceImageData(
private val markerBytes: ByteArray,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/jfif/JFIFPieceSegment.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/jfif/JFIFPieceSegment.kt
similarity index 87%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/jfif/JFIFPieceSegment.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/jfif/JFIFPieceSegment.kt
index c275525a..9201982b 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/jfif/JFIFPieceSegment.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/jfif/JFIFPieceSegment.kt
@@ -14,13 +14,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jpeg.jfif
+package de.stefan_oltmann.kim.format.jpeg.jfif
-import com.ashampoo.kim.common.startsWith
-import com.ashampoo.kim.common.toBytes
-import com.ashampoo.kim.format.jpeg.JpegConstants
-import com.ashampoo.kim.format.jpeg.iptc.IptcParser
-import com.ashampoo.kim.output.ByteWriter
+import de.stefan_oltmann.kim.common.startsWith
+import de.stefan_oltmann.kim.common.toBytes
+import de.stefan_oltmann.kim.format.jpeg.JpegConstants
+import de.stefan_oltmann.kim.format.jpeg.iptc.IptcParser
+import de.stefan_oltmann.kim.output.ByteWriter
internal open class JFIFPieceSegment(
val marker: Int,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/jfif/JFIFPieceSegmentExif.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/jfif/JFIFPieceSegmentExif.kt
similarity index 94%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/jfif/JFIFPieceSegmentExif.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/jfif/JFIFPieceSegmentExif.kt
index fe775d2c..92e4ab2b 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/jfif/JFIFPieceSegmentExif.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/jfif/JFIFPieceSegmentExif.kt
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jpeg.jfif
+package de.stefan_oltmann.kim.format.jpeg.jfif
internal class JFIFPieceSegmentExif(
marker: Int,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/segment/App13Segment.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/segment/App13Segment.kt
similarity index 84%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/segment/App13Segment.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/segment/App13Segment.kt
index 4c8ffe11..218a1ac7 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/segment/App13Segment.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/segment/App13Segment.kt
@@ -14,12 +14,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jpeg.segment
+package de.stefan_oltmann.kim.format.jpeg.segment
-import com.ashampoo.kim.format.jpeg.iptc.IptcMetadata
-import com.ashampoo.kim.format.jpeg.iptc.IptcParser
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.input.ByteReader
+import de.stefan_oltmann.kim.format.jpeg.iptc.IptcMetadata
+import de.stefan_oltmann.kim.format.jpeg.iptc.IptcParser
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.input.ByteReader
internal class App13Segment(marker: Int, markerLength: Int, byteReader: ByteReader) :
AppnSegment(marker, markerLength, byteReader) {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/segment/AppnSegment.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/segment/AppnSegment.kt
similarity index 83%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/segment/AppnSegment.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/segment/AppnSegment.kt
index 28c5517c..a54325dc 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/segment/AppnSegment.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/segment/AppnSegment.kt
@@ -14,11 +14,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jpeg.segment
+package de.stefan_oltmann.kim.format.jpeg.segment
-import com.ashampoo.kim.format.jpeg.JpegConstants
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.input.ByteReader
+import de.stefan_oltmann.kim.format.jpeg.JpegConstants
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.input.ByteReader
internal open class AppnSegment(marker: Int, markerLength: Int, byteReader: ByteReader) :
GenericSegment(marker, markerLength, byteReader) {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/segment/GenericSegment.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/segment/GenericSegment.kt
similarity index 88%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/segment/GenericSegment.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/segment/GenericSegment.kt
index b36f4839..2d1d629f 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/segment/GenericSegment.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/segment/GenericSegment.kt
@@ -14,10 +14,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jpeg.segment
+package de.stefan_oltmann.kim.format.jpeg.segment
-import com.ashampoo.kim.input.ByteReader
-import com.ashampoo.kim.input.readBytes
+import de.stefan_oltmann.kim.input.ByteReader
+import de.stefan_oltmann.kim.input.readBytes
internal abstract class GenericSegment : Segment {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/segment/JfifSegment.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/segment/JfifSegment.kt
similarity index 81%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/segment/JfifSegment.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/segment/JfifSegment.kt
index 400b1987..6c49d2a3 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/segment/JfifSegment.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/segment/JfifSegment.kt
@@ -14,17 +14,17 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jpeg.segment
+package de.stefan_oltmann.kim.format.jpeg.segment
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.format.jpeg.JpegConstants
-import com.ashampoo.kim.format.jpeg.JpegConstants.JPEG_BYTE_ORDER
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.input.ByteReader
-import com.ashampoo.kim.input.read2BytesAsInt
-import com.ashampoo.kim.input.readByte
-import com.ashampoo.kim.input.readBytes
-import com.ashampoo.kim.input.skipBytes
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.format.jpeg.JpegConstants
+import de.stefan_oltmann.kim.format.jpeg.JpegConstants.JPEG_BYTE_ORDER
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.input.ByteReader
+import de.stefan_oltmann.kim.input.read2BytesAsInt
+import de.stefan_oltmann.kim.input.readByte
+import de.stefan_oltmann.kim.input.readBytes
+import de.stefan_oltmann.kim.input.skipBytes
internal class JfifSegment(
marker: Int,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/segment/Segment.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/segment/Segment.kt
similarity index 94%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/segment/Segment.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/segment/Segment.kt
index 45a4e8f6..80f3d049 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/segment/Segment.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/segment/Segment.kt
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jpeg.segment
+package de.stefan_oltmann.kim.format.jpeg.segment
internal abstract class Segment(val marker: Int, val length: Int) {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/segment/SofnSegment.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/segment/SofnSegment.kt
similarity index 77%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/segment/SofnSegment.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/segment/SofnSegment.kt
index 1b45f3eb..f3eb12b2 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/segment/SofnSegment.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/segment/SofnSegment.kt
@@ -14,14 +14,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jpeg.segment
-
-import com.ashampoo.kim.format.jpeg.JpegConstants
-import com.ashampoo.kim.format.jpeg.JpegConstants.JPEG_BYTE_ORDER
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.input.ByteReader
-import com.ashampoo.kim.input.read2BytesAsInt
-import com.ashampoo.kim.input.skipBytes
+package de.stefan_oltmann.kim.format.jpeg.segment
+
+import de.stefan_oltmann.kim.format.jpeg.JpegConstants
+import de.stefan_oltmann.kim.format.jpeg.JpegConstants.JPEG_BYTE_ORDER
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.input.ByteReader
+import de.stefan_oltmann.kim.input.read2BytesAsInt
+import de.stefan_oltmann.kim.input.skipBytes
internal class SofnSegment(marker: Int, markerLength: Int, byteReader: ByteReader) : Segment(marker, markerLength) {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/segment/UnknownSegment.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/segment/UnknownSegment.kt
similarity index 94%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/segment/UnknownSegment.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/segment/UnknownSegment.kt
index 36fd7863..56bbb0ae 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/segment/UnknownSegment.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/segment/UnknownSegment.kt
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jpeg.segment
+package de.stefan_oltmann.kim.format.jpeg.segment
internal class UnknownSegment(marker: Int, bytes: ByteArray) : GenericSegment(marker, bytes) {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/xmp/JpegXmpParser.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/xmp/JpegXmpParser.kt
similarity index 83%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/xmp/JpegXmpParser.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/xmp/JpegXmpParser.kt
index bbbdf758..7892dc58 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/jpeg/xmp/JpegXmpParser.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jpeg/xmp/JpegXmpParser.kt
@@ -14,12 +14,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jpeg.xmp
+package de.stefan_oltmann.kim.format.jpeg.xmp
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.common.slice
-import com.ashampoo.kim.common.startsWith
-import com.ashampoo.kim.format.jpeg.JpegConstants
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.common.slice
+import de.stefan_oltmann.kim.common.startsWith
+import de.stefan_oltmann.kim.format.jpeg.JpegConstants
internal object JpegXmpParser {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jxl/JxlReader.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jxl/JxlReader.kt
similarity index 71%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/jxl/JxlReader.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jxl/JxlReader.kt
index 9315be8f..243f97c0 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/jxl/JxlReader.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jxl/JxlReader.kt
@@ -13,23 +13,23 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jxl
+package de.stefan_oltmann.kim.format.jxl
-import com.ashampoo.kim.format.ImageMetadata
-import com.ashampoo.kim.format.bmff.box.Box
-import com.ashampoo.kim.format.jxl.box.ExifBox
-import com.ashampoo.kim.format.jxl.box.XmlBox
-import com.ashampoo.kim.model.ImageFormat
+import de.stefan_oltmann.kim.format.MediaMetadata
+import de.stefan_oltmann.kim.format.bmff.box.Box
+import de.stefan_oltmann.kim.format.jxl.box.ExifBox
+import de.stefan_oltmann.kim.format.jxl.box.XmlBox
+import de.stefan_oltmann.kim.model.MediaFormat
internal object JxlReader {
- fun createMetadata(allBoxes: List): ImageMetadata {
+ fun createMetadata(allBoxes: List): MediaMetadata {
val exifBox = allBoxes.filterIsInstance().firstOrNull()
val xmlBox = allBoxes.filterIsInstance().firstOrNull()
- return ImageMetadata(
- imageFormat = ImageFormat.JXL,
+ return MediaMetadata(
+ mediaFormat = MediaFormat.JXL,
imageSize = null, // TODO https://github.com/Ashampoo/kim/issues/65
exif = exifBox?.tiffContents,
exifBytes = exifBox?.exifBytes,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jxl/JxlUpdater.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jxl/JxlUpdater.kt
similarity index 79%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/jxl/JxlUpdater.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jxl/JxlUpdater.kt
index c663685a..65e6ce10 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/jxl/JxlUpdater.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jxl/JxlUpdater.kt
@@ -13,24 +13,24 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jxl
-
-import com.ashampoo.kim.common.ImageWriteException
-import com.ashampoo.kim.common.startsWith
-import com.ashampoo.kim.common.tryWithImageWriteException
-import com.ashampoo.kim.format.ImageFormatMagicNumbers
-import com.ashampoo.kim.format.MetadataUpdater
-import com.ashampoo.kim.format.bmff.BoxReader
-import com.ashampoo.kim.format.tiff.write.TiffOutputSet
-import com.ashampoo.kim.format.tiff.write.TiffWriterBase
-import com.ashampoo.kim.format.xmp.XmpWriter
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.input.ByteReader
-import com.ashampoo.kim.model.MetadataUpdate
-import com.ashampoo.kim.output.ByteArrayByteWriter
-import com.ashampoo.kim.output.ByteWriter
-import com.ashampoo.xmp.XMPMeta
-import com.ashampoo.xmp.XMPMetaFactory
+package de.stefan_oltmann.kim.format.jxl
+
+import de.stefan_oltmann.kim.common.ImageWriteException
+import de.stefan_oltmann.kim.common.startsWith
+import de.stefan_oltmann.kim.common.tryWithImageWriteException
+import de.stefan_oltmann.kim.format.MediaFormatMagicNumbers
+import de.stefan_oltmann.kim.format.MetadataUpdater
+import de.stefan_oltmann.kim.format.bmff.BoxReader
+import de.stefan_oltmann.kim.format.tiff.write.TiffOutputSet
+import de.stefan_oltmann.kim.format.tiff.write.TiffWriterBase
+import de.stefan_oltmann.kim.format.xmp.XmpWriter
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.input.ByteReader
+import de.stefan_oltmann.kim.model.MetadataUpdate
+import de.stefan_oltmann.kim.output.ByteArrayByteWriter
+import de.stefan_oltmann.kim.output.ByteWriter
+import de.stefan_oltmann.xmp.XMPMeta
+import de.stefan_oltmann.xmp.XMPMetaFactory
internal object JxlUpdater : MetadataUpdater {
@@ -97,7 +97,7 @@ internal object JxlUpdater : MetadataUpdater {
thumbnailBytes: ByteArray
): ByteArray = tryWithImageWriteException {
- if (!bytes.startsWith(ImageFormatMagicNumbers.jxl))
+ if (!bytes.startsWith(MediaFormatMagicNumbers.jxl))
throw ImageWriteException("Provided input bytes are not JXL!")
val byteReader = ByteArrayByteReader(bytes)
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jxl/JxlWriter.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jxl/JxlWriter.kt
similarity index 87%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/jxl/JxlWriter.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jxl/JxlWriter.kt
index abb30589..d1f9e0c3 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/jxl/JxlWriter.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jxl/JxlWriter.kt
@@ -13,19 +13,19 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jxl
-
-import com.ashampoo.kim.common.ImageWriteException
-import com.ashampoo.kim.format.bmff.BMFFConstants
-import com.ashampoo.kim.format.bmff.BoxReader
-import com.ashampoo.kim.format.bmff.BoxType
-import com.ashampoo.kim.format.bmff.box.Box
-import com.ashampoo.kim.format.jxl.box.CompressedBox
-import com.ashampoo.kim.format.jxl.box.JxlParticalCodestreamBox
-import com.ashampoo.kim.input.ByteReader
-import com.ashampoo.kim.output.ByteWriter
-import com.ashampoo.kim.output.writeInt
-import com.ashampoo.kim.output.writeLong
+package de.stefan_oltmann.kim.format.jxl
+
+import de.stefan_oltmann.kim.common.ImageWriteException
+import de.stefan_oltmann.kim.format.bmff.BMFFConstants
+import de.stefan_oltmann.kim.format.bmff.BoxReader
+import de.stefan_oltmann.kim.format.bmff.BoxType
+import de.stefan_oltmann.kim.format.bmff.box.Box
+import de.stefan_oltmann.kim.format.jxl.box.CompressedBox
+import de.stefan_oltmann.kim.format.jxl.box.JxlParticalCodestreamBox
+import de.stefan_oltmann.kim.input.ByteReader
+import de.stefan_oltmann.kim.output.ByteWriter
+import de.stefan_oltmann.kim.output.writeInt
+import de.stefan_oltmann.kim.output.writeLong
import kotlin.jvm.JvmStatic
public object JxlWriter {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jxl/box/CompressedBox.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jxl/box/CompressedBox.kt
similarity index 82%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/jxl/box/CompressedBox.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jxl/box/CompressedBox.kt
index 606072e0..8955cd3d 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/jxl/box/CompressedBox.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jxl/box/CompressedBox.kt
@@ -13,11 +13,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jxl.box
+package de.stefan_oltmann.kim.format.jxl.box
-import com.ashampoo.kim.format.bmff.BMFFConstants
-import com.ashampoo.kim.format.bmff.BoxType
-import com.ashampoo.kim.format.bmff.box.Box
+import de.stefan_oltmann.kim.format.bmff.BMFFConstants
+import de.stefan_oltmann.kim.format.bmff.BoxType
+import de.stefan_oltmann.kim.format.bmff.box.Box
/**
* JPEG XL brob box for brotli compressed Exif or XMP
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jxl/box/ExifBox.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jxl/box/ExifBox.kt
similarity index 73%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/jxl/box/ExifBox.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jxl/box/ExifBox.kt
index 2594bf31..89a3183d 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/jxl/box/ExifBox.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jxl/box/ExifBox.kt
@@ -13,16 +13,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jxl.box
-
-import com.ashampoo.kim.format.bmff.BoxType
-import com.ashampoo.kim.format.bmff.box.Box
-import com.ashampoo.kim.format.tiff.TiffContents
-import com.ashampoo.kim.format.tiff.TiffReader
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.input.readByteAsInt
-import com.ashampoo.kim.input.readBytes
-import com.ashampoo.kim.input.readRemainingBytes
+package de.stefan_oltmann.kim.format.jxl.box
+
+import de.stefan_oltmann.kim.format.bmff.BoxType
+import de.stefan_oltmann.kim.format.bmff.box.Box
+import de.stefan_oltmann.kim.format.tiff.TiffContents
+import de.stefan_oltmann.kim.format.tiff.TiffReader
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.input.readByteAsInt
+import de.stefan_oltmann.kim.input.readBytes
+import de.stefan_oltmann.kim.input.readRemainingBytes
/**
* JPEG XL Exif box
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jxl/box/JxlParticalCodestreamBox.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jxl/box/JxlParticalCodestreamBox.kt
similarity index 88%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/jxl/box/JxlParticalCodestreamBox.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jxl/box/JxlParticalCodestreamBox.kt
index 549d4f21..310fd51d 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/jxl/box/JxlParticalCodestreamBox.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jxl/box/JxlParticalCodestreamBox.kt
@@ -13,10 +13,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jxl.box
+package de.stefan_oltmann.kim.format.jxl.box
-import com.ashampoo.kim.format.bmff.BoxType
-import com.ashampoo.kim.format.bmff.box.Box
+import de.stefan_oltmann.kim.format.bmff.BoxType
+import de.stefan_oltmann.kim.format.bmff.box.Box
/**
* JPEG XL jxlp box
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/jxl/box/XmlBox.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jxl/box/XmlBox.kt
similarity index 85%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/jxl/box/XmlBox.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/jxl/box/XmlBox.kt
index 4134fe6a..c2b97269 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/jxl/box/XmlBox.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/jxl/box/XmlBox.kt
@@ -13,10 +13,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jxl.box
+package de.stefan_oltmann.kim.format.jxl.box
-import com.ashampoo.kim.format.bmff.BoxType
-import com.ashampoo.kim.format.bmff.box.Box
+import de.stefan_oltmann.kim.format.bmff.BoxType
+import de.stefan_oltmann.kim.format.bmff.box.Box
/**
* JPEG XL XML box
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/nef/NefPreviewExtractor.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/nef/NefPreviewExtractor.kt
similarity index 77%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/nef/NefPreviewExtractor.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/nef/NefPreviewExtractor.kt
index 17b0d24c..b93f649b 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/nef/NefPreviewExtractor.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/nef/NefPreviewExtractor.kt
@@ -13,15 +13,15 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.nef
-
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.common.tryWithImageReadException
-import com.ashampoo.kim.format.TiffPreviewExtractor
-import com.ashampoo.kim.format.tiff.TiffContents
-import com.ashampoo.kim.format.tiff.constant.TiffConstants
-import com.ashampoo.kim.format.tiff.constant.TiffTag
-import com.ashampoo.kim.input.RandomAccessByteReader
+package de.stefan_oltmann.kim.format.nef
+
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.common.tryWithImageReadException
+import de.stefan_oltmann.kim.format.TiffPreviewExtractor
+import de.stefan_oltmann.kim.format.tiff.TiffContents
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants
+import de.stefan_oltmann.kim.format.tiff.constant.TiffTag
+import de.stefan_oltmann.kim.input.RandomAccessByteReader
public object NefPreviewExtractor : TiffPreviewExtractor {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/png/PngChunkType.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/PngChunkType.kt
similarity index 94%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/png/PngChunkType.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/PngChunkType.kt
index 50eb9ac1..2dbeef3e 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/png/PngChunkType.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/PngChunkType.kt
@@ -14,10 +14,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.png
+package de.stefan_oltmann.kim.format.png
-import com.ashampoo.kim.common.toFourCCTypeString
-import com.ashampoo.kim.format.png.PngConstants.TPYE_LENGTH
+import de.stefan_oltmann.kim.common.toFourCCTypeString
+import de.stefan_oltmann.kim.format.png.PngConstants.TPYE_LENGTH
/**
* Type of a PNG chunk.
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/png/PngConstants.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/PngConstants.kt
similarity index 94%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/png/PngConstants.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/PngConstants.kt
index 8d1dd004..31d4ac3b 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/png/PngConstants.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/PngConstants.kt
@@ -14,9 +14,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.png
+package de.stefan_oltmann.kim.format.png
-import com.ashampoo.kim.common.ByteOrder
+import de.stefan_oltmann.kim.common.ByteOrder
public object PngConstants {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/png/PngCrc.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/PngCrc.kt
similarity index 97%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/png/PngCrc.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/PngCrc.kt
index 32b9fa43..4bed2f46 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/png/PngCrc.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/PngCrc.kt
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.png
+package de.stefan_oltmann.kim.format.png
@Suppress("MagicNumber")
internal object PngCrc {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/png/PngImageParser.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/PngImageParser.kt
similarity index 85%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/png/PngImageParser.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/PngImageParser.kt
index 7103dfc8..0a5a6c2e 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/png/PngImageParser.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/PngImageParser.kt
@@ -14,32 +14,32 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.png
-
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.common.convertHexStringToByteArray
-import com.ashampoo.kim.common.tryWithImageReadException
-import com.ashampoo.kim.format.ImageMetadata
-import com.ashampoo.kim.format.ImageParser
-import com.ashampoo.kim.format.jpeg.JpegConstants
-import com.ashampoo.kim.format.jpeg.iptc.IptcMetadata
-import com.ashampoo.kim.format.jpeg.iptc.IptcParser
-import com.ashampoo.kim.format.png.PngConstants.PNG_BYTE_ORDER
-import com.ashampoo.kim.format.png.chunk.PngChunk
-import com.ashampoo.kim.format.png.chunk.PngChunkExif
-import com.ashampoo.kim.format.png.chunk.PngChunkIhdr
-import com.ashampoo.kim.format.png.chunk.PngChunkItxt
-import com.ashampoo.kim.format.png.chunk.PngChunkText
-import com.ashampoo.kim.format.png.chunk.PngChunkZtxt
-import com.ashampoo.kim.format.png.chunk.PngTextChunk
-import com.ashampoo.kim.format.tiff.TiffContents
-import com.ashampoo.kim.format.tiff.TiffReader
-import com.ashampoo.kim.input.ByteReader
-import com.ashampoo.kim.input.read4BytesAsInt
-import com.ashampoo.kim.input.readAndVerifyBytes
-import com.ashampoo.kim.input.readBytes
-import com.ashampoo.kim.input.skipBytes
-import com.ashampoo.kim.model.ImageFormat
+package de.stefan_oltmann.kim.format.png
+
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.common.convertHexStringToByteArray
+import de.stefan_oltmann.kim.common.tryWithImageReadException
+import de.stefan_oltmann.kim.format.MediaMetadata
+import de.stefan_oltmann.kim.format.ImageParser
+import de.stefan_oltmann.kim.format.jpeg.JpegConstants
+import de.stefan_oltmann.kim.format.jpeg.iptc.IptcMetadata
+import de.stefan_oltmann.kim.format.jpeg.iptc.IptcParser
+import de.stefan_oltmann.kim.format.png.PngConstants.PNG_BYTE_ORDER
+import de.stefan_oltmann.kim.format.png.chunk.PngChunk
+import de.stefan_oltmann.kim.format.png.chunk.PngChunkExif
+import de.stefan_oltmann.kim.format.png.chunk.PngChunkIhdr
+import de.stefan_oltmann.kim.format.png.chunk.PngChunkItxt
+import de.stefan_oltmann.kim.format.png.chunk.PngChunkText
+import de.stefan_oltmann.kim.format.png.chunk.PngChunkZtxt
+import de.stefan_oltmann.kim.format.png.chunk.PngTextChunk
+import de.stefan_oltmann.kim.format.tiff.TiffContents
+import de.stefan_oltmann.kim.format.tiff.TiffReader
+import de.stefan_oltmann.kim.input.ByteReader
+import de.stefan_oltmann.kim.input.read4BytesAsInt
+import de.stefan_oltmann.kim.input.readAndVerifyBytes
+import de.stefan_oltmann.kim.input.readBytes
+import de.stefan_oltmann.kim.input.skipBytes
+import de.stefan_oltmann.kim.model.MediaFormat
import kotlin.jvm.JvmStatic
public object PngImageParser : ImageParser {
@@ -56,7 +56,7 @@ public object PngImageParser : ImageParser {
)
@Throws(ImageReadException::class)
- override fun parseMetadata(byteReader: ByteReader): ImageMetadata =
+ override fun parseMetadata(byteReader: ByteReader): MediaMetadata =
tryWithImageReadException {
val chunks = readChunks(byteReader, metadataChunkTypes)
@@ -69,7 +69,7 @@ public object PngImageParser : ImageParser {
@Throws(ImageReadException::class)
@JvmStatic
- public fun parseMetadataFromChunks(chunks: List): ImageMetadata =
+ public fun parseMetadataFromChunks(chunks: List): MediaMetadata =
tryWithImageReadException {
require(chunks.isNotEmpty()) {
@@ -99,8 +99,8 @@ public object PngImageParser : ImageParser {
val xmp = getXmpXml(chunks)
- return@tryWithImageReadException ImageMetadata(
- imageFormat = ImageFormat.PNG,
+ return@tryWithImageReadException MediaMetadata(
+ mediaFormat = MediaFormat.PNG,
imageSize = imageSize,
exif = exifPair?.second,
exifBytes = exifPair?.first,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/png/PngMetadataExtractor.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/PngMetadataExtractor.kt
similarity index 92%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/png/PngMetadataExtractor.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/PngMetadataExtractor.kt
index d8be9b19..cfe201fc 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/png/PngMetadataExtractor.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/PngMetadataExtractor.kt
@@ -13,14 +13,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.png
+package de.stefan_oltmann.kim.format.png
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.common.toSingleNumberHexes
-import com.ashampoo.kim.common.tryWithImageReadException
-import com.ashampoo.kim.format.ImageFormatMagicNumbers
-import com.ashampoo.kim.format.MetadataExtractor
-import com.ashampoo.kim.input.ByteReader
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.common.toSingleNumberHexes
+import de.stefan_oltmann.kim.common.tryWithImageReadException
+import de.stefan_oltmann.kim.format.MediaFormatMagicNumbers
+import de.stefan_oltmann.kim.format.MetadataExtractor
+import de.stefan_oltmann.kim.input.ByteReader
public object PngMetadataExtractor : MetadataExtractor {
@@ -59,10 +59,10 @@ public object PngMetadataExtractor : MetadataExtractor {
val bytes = mutableListOf()
- val magicNumberBytes = byteReader.readBytes(ImageFormatMagicNumbers.png.size).toList()
+ val magicNumberBytes = byteReader.readBytes(MediaFormatMagicNumbers.png.size).toList()
/* Ensure it's actually a PNG. */
- require(magicNumberBytes == ImageFormatMagicNumbers.png) {
+ require(magicNumberBytes == MediaFormatMagicNumbers.png) {
"PNG magic number mismatch: ${magicNumberBytes.toSingleNumberHexes()}"
}
@@ -132,10 +132,10 @@ public object PngMetadataExtractor : MetadataExtractor {
val bytes = mutableListOf()
- val magicNumberBytes = reader.readBytes(ImageFormatMagicNumbers.png.size).toList()
+ val magicNumberBytes = reader.readBytes(MediaFormatMagicNumbers.png.size).toList()
/* Ensure it's actually a PNG. */
- require(magicNumberBytes == ImageFormatMagicNumbers.png) {
+ require(magicNumberBytes == MediaFormatMagicNumbers.png) {
"PNG magic number mismatch: ${magicNumberBytes.toSingleNumberHexes()}"
}
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/png/PngUpdater.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/PngUpdater.kt
similarity index 81%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/png/PngUpdater.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/PngUpdater.kt
index 66e972fc..320579cc 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/png/PngUpdater.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/PngUpdater.kt
@@ -13,23 +13,23 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.png
-
-import com.ashampoo.kim.common.ImageWriteException
-import com.ashampoo.kim.common.startsWith
-import com.ashampoo.kim.common.tryWithImageWriteException
-import com.ashampoo.kim.format.ImageFormatMagicNumbers
-import com.ashampoo.kim.format.MetadataUpdater
-import com.ashampoo.kim.format.tiff.write.TiffOutputSet
-import com.ashampoo.kim.format.tiff.write.TiffWriterBase
-import com.ashampoo.kim.format.xmp.XmpWriter
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.input.ByteReader
-import com.ashampoo.kim.model.MetadataUpdate
-import com.ashampoo.kim.output.ByteArrayByteWriter
-import com.ashampoo.kim.output.ByteWriter
-import com.ashampoo.xmp.XMPMeta
-import com.ashampoo.xmp.XMPMetaFactory
+package de.stefan_oltmann.kim.format.png
+
+import de.stefan_oltmann.kim.common.ImageWriteException
+import de.stefan_oltmann.kim.common.startsWith
+import de.stefan_oltmann.kim.common.tryWithImageWriteException
+import de.stefan_oltmann.kim.format.MediaFormatMagicNumbers
+import de.stefan_oltmann.kim.format.MetadataUpdater
+import de.stefan_oltmann.kim.format.tiff.write.TiffOutputSet
+import de.stefan_oltmann.kim.format.tiff.write.TiffWriterBase
+import de.stefan_oltmann.kim.format.xmp.XmpWriter
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.input.ByteReader
+import de.stefan_oltmann.kim.model.MetadataUpdate
+import de.stefan_oltmann.kim.output.ByteArrayByteWriter
+import de.stefan_oltmann.kim.output.ByteWriter
+import de.stefan_oltmann.xmp.XMPMeta
+import de.stefan_oltmann.xmp.XMPMetaFactory
internal object PngUpdater : MetadataUpdater {
@@ -99,7 +99,7 @@ internal object PngUpdater : MetadataUpdater {
thumbnailBytes: ByteArray
): ByteArray = tryWithImageWriteException {
- if (!bytes.startsWith(ImageFormatMagicNumbers.png))
+ if (!bytes.startsWith(MediaFormatMagicNumbers.png))
throw ImageWriteException("Provided input bytes are not PNG!")
val byteReader = ByteArrayByteReader(bytes)
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/png/PngWriter.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/PngWriter.kt
similarity index 90%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/png/PngWriter.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/PngWriter.kt
index 35dfc51a..5d4de1ea 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/png/PngWriter.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/PngWriter.kt
@@ -14,19 +14,19 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.png
-
-import com.ashampoo.kim.common.toHex
-import com.ashampoo.kim.format.png.PngConstants.PNG_BYTE_ORDER
-import com.ashampoo.kim.format.png.PngCrc.continuePartialCrc
-import com.ashampoo.kim.format.png.PngCrc.finishPartialCrc
-import com.ashampoo.kim.format.png.PngCrc.startPartialCrc
-import com.ashampoo.kim.format.png.chunk.PngChunk
-import com.ashampoo.kim.format.png.chunk.PngTextChunk
-import com.ashampoo.kim.input.ByteReader
-import com.ashampoo.kim.output.ByteArrayByteWriter
-import com.ashampoo.kim.output.ByteWriter
-import com.ashampoo.kim.output.writeInt
+package de.stefan_oltmann.kim.format.png
+
+import de.stefan_oltmann.kim.common.toHex
+import de.stefan_oltmann.kim.format.png.PngConstants.PNG_BYTE_ORDER
+import de.stefan_oltmann.kim.format.png.PngCrc.continuePartialCrc
+import de.stefan_oltmann.kim.format.png.PngCrc.finishPartialCrc
+import de.stefan_oltmann.kim.format.png.PngCrc.startPartialCrc
+import de.stefan_oltmann.kim.format.png.chunk.PngChunk
+import de.stefan_oltmann.kim.format.png.chunk.PngTextChunk
+import de.stefan_oltmann.kim.input.ByteReader
+import de.stefan_oltmann.kim.output.ByteArrayByteWriter
+import de.stefan_oltmann.kim.output.ByteWriter
+import de.stefan_oltmann.kim.output.writeInt
public object PngWriter {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/png/chunk/PngChunk.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/chunk/PngChunk.kt
similarity index 94%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/png/chunk/PngChunk.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/chunk/PngChunk.kt
index 404a59c5..55de22e2 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/png/chunk/PngChunk.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/chunk/PngChunk.kt
@@ -14,9 +14,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.png.chunk
+package de.stefan_oltmann.kim.format.png.chunk
-import com.ashampoo.kim.format.png.PngChunkType
+import de.stefan_oltmann.kim.format.png.PngChunkType
@Suppress("MagicNumber")
public open class PngChunk(
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/png/chunk/PngChunkExif.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/chunk/PngChunkExif.kt
similarity index 79%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/png/chunk/PngChunkExif.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/chunk/PngChunkExif.kt
index 0fdb7377..445626e2 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/png/chunk/PngChunkExif.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/chunk/PngChunkExif.kt
@@ -13,11 +13,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.png.chunk
+package de.stefan_oltmann.kim.format.png.chunk
-import com.ashampoo.kim.format.png.PngChunkType
-import com.ashampoo.kim.format.tiff.TiffContents
-import com.ashampoo.kim.format.tiff.TiffReader
+import de.stefan_oltmann.kim.format.png.PngChunkType
+import de.stefan_oltmann.kim.format.tiff.TiffContents
+import de.stefan_oltmann.kim.format.tiff.TiffReader
public class PngChunkExif(
bytes: ByteArray,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/png/chunk/PngChunkIhdr.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/chunk/PngChunkIhdr.kt
similarity index 77%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/png/chunk/PngChunkIhdr.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/chunk/PngChunkIhdr.kt
index a4045833..673473e1 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/png/chunk/PngChunkIhdr.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/chunk/PngChunkIhdr.kt
@@ -14,13 +14,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.png.chunk
+package de.stefan_oltmann.kim.format.png.chunk
-import com.ashampoo.kim.format.png.PngChunkType
-import com.ashampoo.kim.format.png.PngConstants.PNG_BYTE_ORDER
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.input.read4BytesAsInt
-import com.ashampoo.kim.model.ImageSize
+import de.stefan_oltmann.kim.format.png.PngChunkType
+import de.stefan_oltmann.kim.format.png.PngConstants.PNG_BYTE_ORDER
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.input.read4BytesAsInt
+import de.stefan_oltmann.kim.model.ImageSize
public class PngChunkIhdr(
bytes: ByteArray,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/png/chunk/PngChunkItxt.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/chunk/PngChunkItxt.kt
similarity index 87%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/png/chunk/PngChunkItxt.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/chunk/PngChunkItxt.kt
index 7ddebff5..6ded59d3 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/png/chunk/PngChunkItxt.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/chunk/PngChunkItxt.kt
@@ -14,15 +14,15 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.png.chunk
-
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.common.decodeLatin1BytesToString
-import com.ashampoo.kim.common.decompress
-import com.ashampoo.kim.common.indexOfNullTerminator
-import com.ashampoo.kim.common.slice
-import com.ashampoo.kim.format.png.PngChunkType
-import com.ashampoo.kim.format.png.PngConstants
+package de.stefan_oltmann.kim.format.png.chunk
+
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.common.decodeLatin1BytesToString
+import de.stefan_oltmann.kim.common.decompress
+import de.stefan_oltmann.kim.common.indexOfNullTerminator
+import de.stefan_oltmann.kim.common.slice
+import de.stefan_oltmann.kim.format.png.PngChunkType
+import de.stefan_oltmann.kim.format.png.PngConstants
public class PngChunkItxt(
bytes: ByteArray,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/png/chunk/PngChunkText.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/chunk/PngChunkText.kt
similarity index 84%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/png/chunk/PngChunkText.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/chunk/PngChunkText.kt
index 22b20fa9..3fba774a 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/png/chunk/PngChunkText.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/chunk/PngChunkText.kt
@@ -14,12 +14,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.png.chunk
+package de.stefan_oltmann.kim.format.png.chunk
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.common.decodeLatin1BytesToString
-import com.ashampoo.kim.common.indexOfNullTerminator
-import com.ashampoo.kim.format.png.PngChunkType
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.common.decodeLatin1BytesToString
+import de.stefan_oltmann.kim.common.indexOfNullTerminator
+import de.stefan_oltmann.kim.format.png.PngChunkType
public class PngChunkText(
chunkType: PngChunkType,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/png/chunk/PngChunkZtxt.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/chunk/PngChunkZtxt.kt
similarity index 82%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/png/chunk/PngChunkZtxt.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/chunk/PngChunkZtxt.kt
index a5564784..670ea3d0 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/png/chunk/PngChunkZtxt.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/chunk/PngChunkZtxt.kt
@@ -14,14 +14,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.png.chunk
+package de.stefan_oltmann.kim.format.png.chunk
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.common.decodeLatin1BytesToString
-import com.ashampoo.kim.common.decompress
-import com.ashampoo.kim.common.indexOfNullTerminator
-import com.ashampoo.kim.format.png.PngChunkType
-import com.ashampoo.kim.format.png.PngConstants
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.common.decodeLatin1BytesToString
+import de.stefan_oltmann.kim.common.decompress
+import de.stefan_oltmann.kim.common.indexOfNullTerminator
+import de.stefan_oltmann.kim.format.png.PngChunkType
+import de.stefan_oltmann.kim.format.png.PngConstants
public class PngChunkZtxt(
bytes: ByteArray,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/png/chunk/PngTextChunk.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/chunk/PngTextChunk.kt
similarity index 90%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/png/chunk/PngTextChunk.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/chunk/PngTextChunk.kt
index 1d1c29e1..1e5a3ba0 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/png/chunk/PngTextChunk.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/png/chunk/PngTextChunk.kt
@@ -14,9 +14,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.png.chunk
+package de.stefan_oltmann.kim.format.png.chunk
-import com.ashampoo.kim.format.png.PngChunkType
+import de.stefan_oltmann.kim.format.png.PngChunkType
public abstract class PngTextChunk(
chunkType: PngChunkType,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/raf/RafImageParser.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/raf/RafImageParser.kt
similarity index 63%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/raf/RafImageParser.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/raf/RafImageParser.kt
index a3134221..c79928ea 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/raf/RafImageParser.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/raf/RafImageParser.kt
@@ -13,20 +13,20 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.raf
-
-import com.ashampoo.kim.common.ByteOrder
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.common.tryWithImageReadException
-import com.ashampoo.kim.format.ImageFormatMagicNumbers
-import com.ashampoo.kim.format.ImageMetadata
-import com.ashampoo.kim.format.ImageParser
-import com.ashampoo.kim.format.jpeg.JpegImageParser
-import com.ashampoo.kim.input.ByteReader
-import com.ashampoo.kim.input.read4BytesAsInt
-import com.ashampoo.kim.input.readAndVerifyBytes
-import com.ashampoo.kim.input.skipBytes
-import com.ashampoo.kim.model.ImageFormat
+package de.stefan_oltmann.kim.format.raf
+
+import de.stefan_oltmann.kim.common.ByteOrder
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.common.tryWithImageReadException
+import de.stefan_oltmann.kim.format.MediaFormatMagicNumbers
+import de.stefan_oltmann.kim.format.MediaMetadata
+import de.stefan_oltmann.kim.format.ImageParser
+import de.stefan_oltmann.kim.format.jpeg.JpegImageParser
+import de.stefan_oltmann.kim.input.ByteReader
+import de.stefan_oltmann.kim.input.read4BytesAsInt
+import de.stefan_oltmann.kim.input.readAndVerifyBytes
+import de.stefan_oltmann.kim.input.skipBytes
+import de.stefan_oltmann.kim.model.MediaFormat
public object RafImageParser : ImageParser {
@@ -36,12 +36,12 @@ public object RafImageParser : ImageParser {
*/
@Throws(ImageReadException::class)
@Suppress("ComplexCondition", "LoopWithTooManyJumpStatements")
- override fun parseMetadata(byteReader: ByteReader): ImageMetadata =
+ override fun parseMetadata(byteReader: ByteReader): MediaMetadata =
tryWithImageReadException {
byteReader.readAndVerifyBytes(
"RAF magic number",
- ImageFormatMagicNumbers.raf.toByteArray()
+ MediaFormatMagicNumbers.raf.toByteArray()
)
byteReader.skipBytes("86 header bytes", RafMetadataExtractor.REMAINING_HEADER_BYTE_COUNT)
@@ -50,12 +50,12 @@ public object RafImageParser : ImageParser {
@Suppress("MagicNumber")
val remainingBytesToOffset = offset -
- (RafMetadataExtractor.REMAINING_HEADER_BYTE_COUNT + ImageFormatMagicNumbers.raf.size + 4)
+ (RafMetadataExtractor.REMAINING_HEADER_BYTE_COUNT + MediaFormatMagicNumbers.raf.size + 4)
byteReader.skipBytes("Skip JPEG offset", remainingBytesToOffset)
return@tryWithImageReadException JpegImageParser
.parseMetadata(byteReader)
- .copy(imageFormat = ImageFormat.RAF)
+ .withMediaFormat(mediaFormat = MediaFormat.RAF)
}
}
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/raf/RafMetadataExtractor.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/raf/RafMetadataExtractor.kt
similarity index 68%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/raf/RafMetadataExtractor.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/raf/RafMetadataExtractor.kt
index 7604c1b8..5417a68e 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/raf/RafMetadataExtractor.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/raf/RafMetadataExtractor.kt
@@ -13,18 +13,18 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.raf
-
-import com.ashampoo.kim.common.ByteOrder
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.common.tryWithImageReadException
-import com.ashampoo.kim.format.ImageFormatMagicNumbers
-import com.ashampoo.kim.format.MetadataExtractor
-import com.ashampoo.kim.format.jpeg.JpegMetadataExtractor
-import com.ashampoo.kim.input.ByteReader
-import com.ashampoo.kim.input.read4BytesAsInt
-import com.ashampoo.kim.input.readAndVerifyBytes
-import com.ashampoo.kim.input.skipBytes
+package de.stefan_oltmann.kim.format.raf
+
+import de.stefan_oltmann.kim.common.ByteOrder
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.common.tryWithImageReadException
+import de.stefan_oltmann.kim.format.MediaFormatMagicNumbers
+import de.stefan_oltmann.kim.format.MetadataExtractor
+import de.stefan_oltmann.kim.format.jpeg.JpegMetadataExtractor
+import de.stefan_oltmann.kim.input.ByteReader
+import de.stefan_oltmann.kim.input.read4BytesAsInt
+import de.stefan_oltmann.kim.input.readAndVerifyBytes
+import de.stefan_oltmann.kim.input.skipBytes
public object RafMetadataExtractor : MetadataExtractor {
@@ -42,7 +42,7 @@ public object RafMetadataExtractor : MetadataExtractor {
byteReader.readAndVerifyBytes(
"RAF magic number",
- ImageFormatMagicNumbers.raf.toByteArray()
+ MediaFormatMagicNumbers.raf.toByteArray()
)
byteReader.skipBytes("86 header bytes", REMAINING_HEADER_BYTE_COUNT)
@@ -51,7 +51,7 @@ public object RafMetadataExtractor : MetadataExtractor {
@Suppress("MagicNumber")
val remainingBytesToOffset = offset -
- (REMAINING_HEADER_BYTE_COUNT + ImageFormatMagicNumbers.raf.size + 4)
+ (REMAINING_HEADER_BYTE_COUNT + MediaFormatMagicNumbers.raf.size + 4)
byteReader.skipBytes("Skip JPEG offset", remainingBytesToOffset)
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/raf/RafPreviewExtractor.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/raf/RafPreviewExtractor.kt
similarity index 72%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/raf/RafPreviewExtractor.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/raf/RafPreviewExtractor.kt
index 7e962c10..e447c38a 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/raf/RafPreviewExtractor.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/raf/RafPreviewExtractor.kt
@@ -13,16 +13,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.raf
-
-import com.ashampoo.kim.common.ByteOrder
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.common.tryWithImageReadException
-import com.ashampoo.kim.format.ImageFormatMagicNumbers
-import com.ashampoo.kim.input.ByteReader
-import com.ashampoo.kim.input.read4BytesAsInt
-import com.ashampoo.kim.input.readAndVerifyBytes
-import com.ashampoo.kim.input.skipBytes
+package de.stefan_oltmann.kim.format.raf
+
+import de.stefan_oltmann.kim.common.ByteOrder
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.common.tryWithImageReadException
+import de.stefan_oltmann.kim.format.MediaFormatMagicNumbers
+import de.stefan_oltmann.kim.input.ByteReader
+import de.stefan_oltmann.kim.input.read4BytesAsInt
+import de.stefan_oltmann.kim.input.readAndVerifyBytes
+import de.stefan_oltmann.kim.input.skipBytes
import kotlin.jvm.JvmStatic
public object RafPreviewExtractor {
@@ -35,7 +35,7 @@ public object RafPreviewExtractor {
reader.readAndVerifyBytes(
"RAF magic number",
- ImageFormatMagicNumbers.raf.toByteArray()
+ MediaFormatMagicNumbers.raf.toByteArray()
)
reader.skipBytes("86 header bytes", RafMetadataExtractor.REMAINING_HEADER_BYTE_COUNT)
@@ -46,7 +46,7 @@ public object RafPreviewExtractor {
@Suppress("MagicNumber")
val remainingBytesToOffset = offset -
- (RafMetadataExtractor.REMAINING_HEADER_BYTE_COUNT + ImageFormatMagicNumbers.raf.size + 8)
+ (RafMetadataExtractor.REMAINING_HEADER_BYTE_COUNT + MediaFormatMagicNumbers.raf.size + 8)
reader.skipBytes("Skip JPEG offset", remainingBytesToOffset)
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/rw2/Rw2PreviewExtractor.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/rw2/Rw2PreviewExtractor.kt
similarity index 78%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/rw2/Rw2PreviewExtractor.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/rw2/Rw2PreviewExtractor.kt
index f0209c0a..6dbdb88f 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/rw2/Rw2PreviewExtractor.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/rw2/Rw2PreviewExtractor.kt
@@ -13,12 +13,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.rw2
+package de.stefan_oltmann.kim.format.rw2
-import com.ashampoo.kim.format.TiffPreviewExtractor
-import com.ashampoo.kim.format.tiff.TiffContents
-import com.ashampoo.kim.format.tiff.constant.TiffTag
-import com.ashampoo.kim.input.RandomAccessByteReader
+import de.stefan_oltmann.kim.format.TiffPreviewExtractor
+import de.stefan_oltmann.kim.format.tiff.TiffContents
+import de.stefan_oltmann.kim.format.tiff.constant.TiffTag
+import de.stefan_oltmann.kim.input.RandomAccessByteReader
public object Rw2PreviewExtractor : TiffPreviewExtractor {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/GPSInfo.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/GPSInfo.kt
similarity index 91%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/GPSInfo.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/GPSInfo.kt
index 802a4ba0..eca4f147 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/GPSInfo.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/GPSInfo.kt
@@ -14,13 +14,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff
+package de.stefan_oltmann.kim.format.tiff
-import com.ashampoo.kim.common.GpsUtil.MINUTES_PER_HOUR
-import com.ashampoo.kim.common.GpsUtil.SECONDS_PER_HOUR
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.common.RationalNumbers
-import com.ashampoo.kim.format.tiff.constant.GpsTag
+import de.stefan_oltmann.kim.common.GpsUtil.MINUTES_PER_HOUR
+import de.stefan_oltmann.kim.common.GpsUtil.SECONDS_PER_HOUR
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.common.RationalNumbers
+import de.stefan_oltmann.kim.format.tiff.constant.GpsTag
internal data class GPSInfo(
private val latitudeRef: String,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/ImageDataElement.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/ImageDataElement.kt
similarity index 95%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/ImageDataElement.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/ImageDataElement.kt
index 83f53661..59d0b2e9 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/ImageDataElement.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/ImageDataElement.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff
+package de.stefan_oltmann.kim.format.tiff
public open class ImageDataElement(
offset: Int,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffContents.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffContents.kt
similarity index 91%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffContents.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffContents.kt
index fe2059f9..b8434aae 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffContents.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffContents.kt
@@ -14,11 +14,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff
+package de.stefan_oltmann.kim.format.tiff
-import com.ashampoo.kim.format.tiff.geotiff.GeoTiffDirectory
-import com.ashampoo.kim.format.tiff.taginfo.TagInfo
-import com.ashampoo.kim.format.tiff.write.TiffOutputSet
+import de.stefan_oltmann.kim.format.tiff.geotiff.GeoTiffDirectory
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfo
+import de.stefan_oltmann.kim.format.tiff.write.TiffOutputSet
public data class TiffContents(
val header: TiffHeader,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffDirectory.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffDirectory.kt
similarity index 90%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffDirectory.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffDirectory.kt
index f2db8e8e..ef1d05f0 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffDirectory.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffDirectory.kt
@@ -14,25 +14,25 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff
-
-import com.ashampoo.kim.common.ByteOrder
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.common.ImageWriteException
-import com.ashampoo.kim.common.toInt
-import com.ashampoo.kim.common.toInts
-import com.ashampoo.kim.format.tiff.constant.ExifTag
-import com.ashampoo.kim.format.tiff.constant.TiffConstants
-import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType
-import com.ashampoo.kim.format.tiff.constant.TiffTag
-import com.ashampoo.kim.format.tiff.taginfo.TagInfo
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoBytes
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoGpsText
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoLong
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoLongs
-import com.ashampoo.kim.format.tiff.write.TiffOutputDirectory
-import com.ashampoo.kim.format.tiff.write.TiffOutputField
-import com.ashampoo.kim.model.TiffOrientation
+package de.stefan_oltmann.kim.format.tiff
+
+import de.stefan_oltmann.kim.common.ByteOrder
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.common.ImageWriteException
+import de.stefan_oltmann.kim.common.toInt
+import de.stefan_oltmann.kim.common.toInts
+import de.stefan_oltmann.kim.format.tiff.constant.ExifTag
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants
+import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType
+import de.stefan_oltmann.kim.format.tiff.constant.TiffTag
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfo
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoBytes
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoGpsText
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoLong
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoLongs
+import de.stefan_oltmann.kim.format.tiff.write.TiffOutputDirectory
+import de.stefan_oltmann.kim.format.tiff.write.TiffOutputField
+import de.stefan_oltmann.kim.model.TiffOrientation
/**
* Provides methods and elements for accessing an Image File Directory (IFD)
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffElement.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffElement.kt
similarity index 95%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffElement.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffElement.kt
index 1d2da4d3..03647a8d 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffElement.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffElement.kt
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff
+package de.stefan_oltmann.kim.format.tiff
public open class TiffElement(
public val debugDescription: String,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffField.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffField.kt
similarity index 92%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffField.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffField.kt
index f7ad7591..787b5e60 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffField.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffField.kt
@@ -14,18 +14,18 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff
-
-import com.ashampoo.kim.common.ByteOrder
-import com.ashampoo.kim.common.HEX_RADIX
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.common.RationalNumber
-import com.ashampoo.kim.common.RationalNumbers
-import com.ashampoo.kim.common.toSingleNumberHexes
-import com.ashampoo.kim.format.tiff.TiffTags.getTag
-import com.ashampoo.kim.format.tiff.fieldtype.FieldType
-import com.ashampoo.kim.format.tiff.taginfo.TagInfo
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoGpsText
+package de.stefan_oltmann.kim.format.tiff
+
+import de.stefan_oltmann.kim.common.ByteOrder
+import de.stefan_oltmann.kim.common.HEX_RADIX
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.common.RationalNumber
+import de.stefan_oltmann.kim.common.RationalNumbers
+import de.stefan_oltmann.kim.common.toSingleNumberHexes
+import de.stefan_oltmann.kim.format.tiff.TiffTags.getTag
+import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldType
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfo
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoGpsText
/**
* A TIFF field in a TIFF directory.
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffHeader.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffHeader.kt
similarity index 86%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffHeader.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffHeader.kt
index 8e09684a..0d9e9a0e 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffHeader.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffHeader.kt
@@ -14,10 +14,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff
+package de.stefan_oltmann.kim.format.tiff
-import com.ashampoo.kim.common.ByteOrder
-import com.ashampoo.kim.format.tiff.constant.TiffConstants
+import de.stefan_oltmann.kim.common.ByteOrder
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants
public data class TiffHeader(
val byteOrder: ByteOrder,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffImageParser.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffImageParser.kt
similarity index 80%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffImageParser.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffImageParser.kt
index fbbf0d06..5dd4bef5 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffImageParser.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffImageParser.kt
@@ -14,24 +14,24 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff
-
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.common.tryWithImageReadException
-import com.ashampoo.kim.format.ImageMetadata
-import com.ashampoo.kim.format.ImageParser
-import com.ashampoo.kim.format.tiff.constant.ExifTag
-import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType
-import com.ashampoo.kim.format.tiff.constant.TiffTag
-import com.ashampoo.kim.input.ByteReader
-import com.ashampoo.kim.input.DefaultRandomAccessByteReader
-import com.ashampoo.kim.model.ImageFormat
-import com.ashampoo.kim.model.ImageSize
+package de.stefan_oltmann.kim.format.tiff
+
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.common.tryWithImageReadException
+import de.stefan_oltmann.kim.format.MediaMetadata
+import de.stefan_oltmann.kim.format.ImageParser
+import de.stefan_oltmann.kim.format.tiff.constant.ExifTag
+import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType
+import de.stefan_oltmann.kim.format.tiff.constant.TiffTag
+import de.stefan_oltmann.kim.input.ByteReader
+import de.stefan_oltmann.kim.input.DefaultRandomAccessByteReader
+import de.stefan_oltmann.kim.model.MediaFormat
+import de.stefan_oltmann.kim.model.ImageSize
public object TiffImageParser : ImageParser {
@Throws(ImageReadException::class)
- override fun parseMetadata(byteReader: ByteReader): ImageMetadata =
+ override fun parseMetadata(byteReader: ByteReader): MediaMetadata =
tryWithImageReadException {
/**
@@ -45,8 +45,8 @@ public object TiffImageParser : ImageParser {
val imageSize = getImageSize(exif)
val xmp = getXmpXml(exif)
- return@tryWithImageReadException ImageMetadata(
- imageFormat = ImageFormat.TIFF,
+ return@tryWithImageReadException MediaMetadata(
+ mediaFormat = MediaFormat.TIFF,
imageSize = imageSize,
exif = exif,
exifBytes = null,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffReader.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffReader.kt
similarity index 91%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffReader.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffReader.kt
index dff43d24..23f96bfc 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffReader.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffReader.kt
@@ -1,4 +1,5 @@
/*
+ * Copyright 2026 Stefan Oltmann
* Copyright 2025 Ashampoo GmbH & Co. KG
* Copyright 2007-2023 The Apache Software Foundation
*
@@ -14,36 +15,36 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff
-
-import com.ashampoo.kim.common.ByteOrder
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.common.head
-import com.ashampoo.kim.common.startsWith
-import com.ashampoo.kim.common.toInt
-import com.ashampoo.kim.format.ImageFormatMagicNumbers
-import com.ashampoo.kim.format.tiff.constant.ExifTag
-import com.ashampoo.kim.format.tiff.constant.GeoTiffTag
-import com.ashampoo.kim.format.tiff.constant.TiffConstants
-import com.ashampoo.kim.format.tiff.constant.TiffConstants.EXIF_SUB_IFD1
-import com.ashampoo.kim.format.tiff.constant.TiffConstants.EXIF_SUB_IFD2
-import com.ashampoo.kim.format.tiff.constant.TiffConstants.EXIF_SUB_IFD3
-import com.ashampoo.kim.format.tiff.constant.TiffConstants.TIFF_DIRECTORY_TYPE_IFD1
-import com.ashampoo.kim.format.tiff.constant.TiffTag
-import com.ashampoo.kim.format.tiff.fieldtype.FieldType.Companion.getFieldType
-import com.ashampoo.kim.format.tiff.geotiff.GeoTiffDirectory
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoLong
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoLongs
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.input.ByteReader
-import com.ashampoo.kim.input.RandomAccessByteReader
-import com.ashampoo.kim.input.read2BytesAsInt
-import com.ashampoo.kim.input.read4BytesAsInt
-import com.ashampoo.kim.input.readByte
-import com.ashampoo.kim.input.readByteAsInt
-import com.ashampoo.kim.input.readBytes
-import com.ashampoo.kim.input.skipBytes
-import com.ashampoo.kim.output.ByteArrayByteWriter
+package de.stefan_oltmann.kim.format.tiff
+
+import de.stefan_oltmann.kim.common.ByteOrder
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.common.head
+import de.stefan_oltmann.kim.common.startsWith
+import de.stefan_oltmann.kim.common.toInt
+import de.stefan_oltmann.kim.format.MediaFormatMagicNumbers
+import de.stefan_oltmann.kim.format.tiff.constant.ExifTag
+import de.stefan_oltmann.kim.format.tiff.constant.GeoTiffTag
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.EXIF_SUB_IFD1
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.EXIF_SUB_IFD2
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.EXIF_SUB_IFD3
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.TIFF_DIRECTORY_TYPE_IFD1
+import de.stefan_oltmann.kim.format.tiff.constant.TiffTag
+import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldType.Companion.getFieldType
+import de.stefan_oltmann.kim.format.tiff.geotiff.GeoTiffDirectory
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoLong
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoLongs
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.input.ByteReader
+import de.stefan_oltmann.kim.input.RandomAccessByteReader
+import de.stefan_oltmann.kim.input.read2BytesAsInt
+import de.stefan_oltmann.kim.input.read4BytesAsInt
+import de.stefan_oltmann.kim.input.readByte
+import de.stefan_oltmann.kim.input.readByteAsInt
+import de.stefan_oltmann.kim.input.readBytes
+import de.stefan_oltmann.kim.input.skipBytes
+import de.stefan_oltmann.kim.output.ByteArrayByteWriter
import kotlin.jvm.JvmStatic
@Suppress("TooManyFunctions")
@@ -376,7 +377,7 @@ public object TiffReader {
if (valueOrOffset < 0 || endPos < 0 || endPos > byteReader.contentLength)
continue
- byteReader.readBytes(valueOrOffset.toInt(), valueLength.toInt())
+ byteReader.readBytes(valueOrOffset, valueLength)
} else {
@@ -429,7 +430,7 @@ public object TiffReader {
if (length <= 0)
return null
- val bytes = byteReader.readBytes(offset.toInt(), length)
+ val bytes = byteReader.readBytes(offset, length)
if (bytes.size != length)
return null
@@ -438,7 +439,7 @@ public object TiffReader {
* Ignore it if it's not a JPEG.
* Some files have random garbage bytes here.
*/
- if (!bytes.startsWith(ImageFormatMagicNumbers.jpeg))
+ if (!bytes.startsWith(MediaFormatMagicNumbers.jpeg))
return null
/*
@@ -478,7 +479,7 @@ public object TiffReader {
if (length <= 0)
continue
- val bytes = byteReader.readBytes(offset.toInt(), length)
+ val bytes = byteReader.readBytes(offset, length)
/*
* Break if something is wrong.
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffTags.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffTags.kt
similarity index 82%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffTags.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffTags.kt
index e1643f25..e4bb3236 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/TiffTags.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/TiffTags.kt
@@ -14,17 +14,17 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff
+package de.stefan_oltmann.kim.format.tiff
-import com.ashampoo.kim.format.tiff.constant.CanonTag
-import com.ashampoo.kim.format.tiff.constant.ExifTag
-import com.ashampoo.kim.format.tiff.constant.ExifTag.EXIF_DIRECTORY_UNKNOWN
-import com.ashampoo.kim.format.tiff.constant.GeoTiffTag
-import com.ashampoo.kim.format.tiff.constant.GpsTag
-import com.ashampoo.kim.format.tiff.constant.NikonTag
-import com.ashampoo.kim.format.tiff.constant.TiffConstants
-import com.ashampoo.kim.format.tiff.constant.TiffTag
-import com.ashampoo.kim.format.tiff.taginfo.TagInfo
+import de.stefan_oltmann.kim.format.tiff.constant.CanonTag
+import de.stefan_oltmann.kim.format.tiff.constant.ExifTag
+import de.stefan_oltmann.kim.format.tiff.constant.ExifTag.EXIF_DIRECTORY_UNKNOWN
+import de.stefan_oltmann.kim.format.tiff.constant.GeoTiffTag
+import de.stefan_oltmann.kim.format.tiff.constant.GpsTag
+import de.stefan_oltmann.kim.format.tiff.constant.NikonTag
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants
+import de.stefan_oltmann.kim.format.tiff.constant.TiffTag
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfo
internal object TiffTags {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/CanonTag.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/CanonTag.kt
similarity index 90%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/CanonTag.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/CanonTag.kt
index e8f59027..99ec2603 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/CanonTag.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/CanonTag.kt
@@ -13,12 +13,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.constant
+package de.stefan_oltmann.kim.format.tiff.constant
-import com.ashampoo.kim.format.tiff.taginfo.TagInfo
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoAscii
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoLong
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoUndefineds
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfo
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoAscii
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoLong
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoUndefineds
/**
* Canon MakerNote Tags
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/ExifTag.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/ExifTag.kt
similarity index 96%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/ExifTag.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/ExifTag.kt
index e71548c9..6b4d80af 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/ExifTag.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/ExifTag.kt
@@ -14,28 +14,28 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.constant
-
-import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType.TIFF_DIRECTORY_IFD0
-import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType.TIFF_DIRECTORY_IFD1
-import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType.TIFF_DIRECTORY_IFD2
-import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType.TIFF_DIRECTORY_IFD3
-import com.ashampoo.kim.format.tiff.taginfo.TagInfo
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoAscii
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoByte
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoBytes
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoDouble
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoGpsText
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoLong
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoLongs
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoRational
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoRationals
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoSLong
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoSRational
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoShort
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoShorts
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoUndefined
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoUndefineds
+package de.stefan_oltmann.kim.format.tiff.constant
+
+import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType.TIFF_DIRECTORY_IFD0
+import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType.TIFF_DIRECTORY_IFD1
+import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType.TIFF_DIRECTORY_IFD2
+import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType.TIFF_DIRECTORY_IFD3
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfo
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoAscii
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoByte
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoBytes
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoDouble
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoGpsText
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoLong
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoLongs
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoRational
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoRationals
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoSLong
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoSRational
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoShort
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoShorts
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoUndefined
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoUndefineds
/**
* Standard Exif Tags as defined in EXIF 2.3 standard
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/GeoTiffTag.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/GeoTiffTag.kt
similarity index 85%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/GeoTiffTag.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/GeoTiffTag.kt
index a6787a53..c2262609 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/GeoTiffTag.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/GeoTiffTag.kt
@@ -14,13 +14,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.constant
+package de.stefan_oltmann.kim.format.tiff.constant
-import com.ashampoo.kim.format.tiff.constant.ExifTag.EXIF_DIRECTORY_UNKNOWN
-import com.ashampoo.kim.format.tiff.taginfo.TagInfo
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoAscii
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoDoubles
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoShorts
+import de.stefan_oltmann.kim.format.tiff.constant.ExifTag.EXIF_DIRECTORY_UNKNOWN
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfo
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoAscii
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoDoubles
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoShorts
/**
* See https://exiftool.org/TagNames/GeoTiff.html
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/GpsTag.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/GpsTag.kt
similarity index 93%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/GpsTag.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/GpsTag.kt
index ed33e682..e2d5b846 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/GpsTag.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/GpsTag.kt
@@ -14,16 +14,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.constant
-
-import com.ashampoo.kim.format.tiff.taginfo.TagInfo
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoAscii
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoByte
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoBytes
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoGpsText
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoRational
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoRationals
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoShort
+package de.stefan_oltmann.kim.format.tiff.constant
+
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfo
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoAscii
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoByte
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoBytes
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoGpsText
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoRational
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoRationals
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoShort
@Suppress("MagicNumber")
public object GpsTag {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/NikonTag.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/NikonTag.kt
similarity index 82%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/NikonTag.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/NikonTag.kt
index 7c32325e..50928aad 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/NikonTag.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/NikonTag.kt
@@ -13,14 +13,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.constant
+package de.stefan_oltmann.kim.format.tiff.constant
-import com.ashampoo.kim.format.tiff.taginfo.TagInfo
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoAscii
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoByte
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoLong
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoRationals
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoUndefineds
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfo
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoAscii
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoByte
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoLong
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoRationals
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoUndefineds
/**
* Nikon MakerNote Tags
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/TiffConstants.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/TiffConstants.kt
similarity index 96%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/TiffConstants.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/TiffConstants.kt
index 09b19d40..ac27fed0 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/TiffConstants.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/TiffConstants.kt
@@ -14,9 +14,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.constant
+package de.stefan_oltmann.kim.format.tiff.constant
-import com.ashampoo.kim.common.ByteOrder
+import de.stefan_oltmann.kim.common.ByteOrder
/**
* Defines constants for internal elements from TIFF files and for allowing
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/TiffDirectoryType.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/TiffDirectoryType.kt
similarity index 97%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/TiffDirectoryType.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/TiffDirectoryType.kt
index 3a60d21f..05829fff 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/TiffDirectoryType.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/TiffDirectoryType.kt
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.constant
+package de.stefan_oltmann.kim.format.tiff.constant
public enum class TiffDirectoryType(
public val typeId: Int,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/TiffTag.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/TiffTag.kt
similarity index 96%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/TiffTag.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/TiffTag.kt
index 8dd6fbef..6ddedf43 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/constant/TiffTag.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/constant/TiffTag.kt
@@ -14,19 +14,19 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.constant
-
-import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType.TIFF_DIRECTORY_IFD0
-import com.ashampoo.kim.format.tiff.taginfo.TagInfo
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoAscii
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoByte
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoBytes
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoLong
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoLongs
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoRational
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoRationals
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoShort
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoShorts
+package de.stefan_oltmann.kim.format.tiff.constant
+
+import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType.TIFF_DIRECTORY_IFD0
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfo
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoAscii
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoByte
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoBytes
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoLong
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoLongs
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoRational
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoRationals
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoShort
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoShorts
/**
* Standard Tiff Tags
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldType.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldType.kt
similarity index 59%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldType.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldType.kt
index 5c57a74f..e3e0b698 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldType.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldType.kt
@@ -14,23 +14,23 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.fieldtype
+package de.stefan_oltmann.kim.format.tiff.fieldtype
-import com.ashampoo.kim.common.ByteOrder
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_ASCII_INDEX
-import com.ashampoo.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_BYTE_INDEX
-import com.ashampoo.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_DOUBLE_INDEX
-import com.ashampoo.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_FLOAT_INDEX
-import com.ashampoo.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_IFD_INDEX
-import com.ashampoo.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_LONG_INDEX
-import com.ashampoo.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_RATIONAL_INDEX
-import com.ashampoo.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_SBYTE_INDEX
-import com.ashampoo.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_SHORT_INDEX
-import com.ashampoo.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_SLONG_INDEX
-import com.ashampoo.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_SRATIONAL_INDEX
-import com.ashampoo.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_SSHORT_INDEX
-import com.ashampoo.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_UNDEFINED_INDEX
+import de.stefan_oltmann.kim.common.ByteOrder
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_ASCII_INDEX
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_BYTE_INDEX
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_DOUBLE_INDEX
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_FLOAT_INDEX
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_IFD_INDEX
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_LONG_INDEX
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_RATIONAL_INDEX
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_SBYTE_INDEX
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_SHORT_INDEX
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_SLONG_INDEX
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_SRATIONAL_INDEX
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_SSHORT_INDEX
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_UNDEFINED_INDEX
public interface FieldType {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeAscii.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeAscii.kt
similarity index 88%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeAscii.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeAscii.kt
index f12928f0..3a690430 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeAscii.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeAscii.kt
@@ -14,13 +14,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.fieldtype
+package de.stefan_oltmann.kim.format.tiff.fieldtype
-import com.ashampoo.kim.common.ByteOrder
-import com.ashampoo.kim.common.ImageWriteException
-import com.ashampoo.kim.common.indexOfNullTerminator
-import com.ashampoo.kim.common.slice
-import com.ashampoo.kim.format.tiff.constant.TiffConstants
+import de.stefan_oltmann.kim.common.ByteOrder
+import de.stefan_oltmann.kim.common.ImageWriteException
+import de.stefan_oltmann.kim.common.indexOfNullTerminator
+import de.stefan_oltmann.kim.common.slice
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants
/**
* 8-bit byte that contains a 7-bit ASCII code;
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeByte.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeByte.kt
similarity index 85%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeByte.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeByte.kt
index 8bb2da0c..5e7a4797 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeByte.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeByte.kt
@@ -14,11 +14,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.fieldtype
+package de.stefan_oltmann.kim.format.tiff.fieldtype
-import com.ashampoo.kim.common.ByteOrder
-import com.ashampoo.kim.common.ImageWriteException
-import com.ashampoo.kim.format.tiff.constant.TiffConstants
+import de.stefan_oltmann.kim.common.ByteOrder
+import de.stefan_oltmann.kim.common.ImageWriteException
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants
/**
* 8-bit unsigned integer.
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeDouble.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeDouble.kt
similarity index 80%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeDouble.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeDouble.kt
index 093733e5..a6c357ec 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeDouble.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeDouble.kt
@@ -14,13 +14,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.fieldtype
+package de.stefan_oltmann.kim.format.tiff.fieldtype
-import com.ashampoo.kim.common.ByteOrder
-import com.ashampoo.kim.common.ImageWriteException
-import com.ashampoo.kim.common.toBytes
-import com.ashampoo.kim.common.toDoubles
-import com.ashampoo.kim.format.tiff.constant.TiffConstants
+import de.stefan_oltmann.kim.common.ByteOrder
+import de.stefan_oltmann.kim.common.ImageWriteException
+import de.stefan_oltmann.kim.common.toBytes
+import de.stefan_oltmann.kim.common.toDoubles
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants
/**
* Double precision (8-byte) IEEE format.
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeFloat.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeFloat.kt
similarity index 80%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeFloat.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeFloat.kt
index 8d3e9062..b6d63e02 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeFloat.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeFloat.kt
@@ -14,13 +14,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.fieldtype
+package de.stefan_oltmann.kim.format.tiff.fieldtype
-import com.ashampoo.kim.common.ByteOrder
-import com.ashampoo.kim.common.ImageWriteException
-import com.ashampoo.kim.common.toBytes
-import com.ashampoo.kim.common.toFloats
-import com.ashampoo.kim.format.tiff.constant.TiffConstants
+import de.stefan_oltmann.kim.common.ByteOrder
+import de.stefan_oltmann.kim.common.ImageWriteException
+import de.stefan_oltmann.kim.common.toBytes
+import de.stefan_oltmann.kim.common.toFloats
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants
/**
* Single precision (4-byte) IEEE format.
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeIfd.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeIfd.kt
similarity index 80%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeIfd.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeIfd.kt
index 89fce83b..16106e9c 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeIfd.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeIfd.kt
@@ -14,13 +14,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.fieldtype
+package de.stefan_oltmann.kim.format.tiff.fieldtype
-import com.ashampoo.kim.common.ByteOrder
-import com.ashampoo.kim.common.ImageWriteException
-import com.ashampoo.kim.common.toBytes
-import com.ashampoo.kim.common.toInts
-import com.ashampoo.kim.format.tiff.constant.TiffConstants
+import de.stefan_oltmann.kim.common.ByteOrder
+import de.stefan_oltmann.kim.common.ImageWriteException
+import de.stefan_oltmann.kim.common.toBytes
+import de.stefan_oltmann.kim.common.toInts
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants
public data object FieldTypeIfd : FieldType {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeLong.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeLong.kt
similarity index 79%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeLong.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeLong.kt
index 9e26b422..09db4944 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeLong.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeLong.kt
@@ -14,13 +14,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.fieldtype
+package de.stefan_oltmann.kim.format.tiff.fieldtype
-import com.ashampoo.kim.common.ByteOrder
-import com.ashampoo.kim.common.ImageWriteException
-import com.ashampoo.kim.common.toBytes
-import com.ashampoo.kim.common.toInts
-import com.ashampoo.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_LONG_INDEX
+import de.stefan_oltmann.kim.common.ByteOrder
+import de.stefan_oltmann.kim.common.ImageWriteException
+import de.stefan_oltmann.kim.common.toBytes
+import de.stefan_oltmann.kim.common.toInts
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.FIELD_TYPE_LONG_INDEX
/**
* 32-bit (4-byte) unsigned integer.
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeRational.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeRational.kt
similarity index 80%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeRational.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeRational.kt
index 864e3d88..5bab070c 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeRational.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeRational.kt
@@ -14,13 +14,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.fieldtype
+package de.stefan_oltmann.kim.format.tiff.fieldtype
-import com.ashampoo.kim.common.ByteOrder
-import com.ashampoo.kim.common.RationalNumbers
-import com.ashampoo.kim.common.toBytes
-import com.ashampoo.kim.common.toRationals
-import com.ashampoo.kim.format.tiff.constant.TiffConstants
+import de.stefan_oltmann.kim.common.ByteOrder
+import de.stefan_oltmann.kim.common.RationalNumbers
+import de.stefan_oltmann.kim.common.toBytes
+import de.stefan_oltmann.kim.common.toRationals
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants
/**
* Two LONGs: the first represents the numerator of a
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeSByte.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeSByte.kt
similarity index 85%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeSByte.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeSByte.kt
index cdc86d6b..f4b87204 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeSByte.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeSByte.kt
@@ -14,11 +14,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.fieldtype
+package de.stefan_oltmann.kim.format.tiff.fieldtype
-import com.ashampoo.kim.common.ByteOrder
-import com.ashampoo.kim.common.ImageWriteException
-import com.ashampoo.kim.format.tiff.constant.TiffConstants
+import de.stefan_oltmann.kim.common.ByteOrder
+import de.stefan_oltmann.kim.common.ImageWriteException
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants
/**
* An 8-bit signed (twos-complement) integer.
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeSLong.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeSLong.kt
similarity index 81%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeSLong.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeSLong.kt
index a1cda7ea..18d7e699 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeSLong.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeSLong.kt
@@ -14,13 +14,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.fieldtype
+package de.stefan_oltmann.kim.format.tiff.fieldtype
-import com.ashampoo.kim.common.ByteOrder
-import com.ashampoo.kim.common.ImageWriteException
-import com.ashampoo.kim.common.toBytes
-import com.ashampoo.kim.common.toInts
-import com.ashampoo.kim.format.tiff.constant.TiffConstants
+import de.stefan_oltmann.kim.common.ByteOrder
+import de.stefan_oltmann.kim.common.ImageWriteException
+import de.stefan_oltmann.kim.common.toBytes
+import de.stefan_oltmann.kim.common.toInts
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants
/**
* A 32-bit (4-byte) signed (twos-complement) integer.
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeSRational.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeSRational.kt
similarity index 80%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeSRational.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeSRational.kt
index bf8234fc..f2b336e3 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeSRational.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeSRational.kt
@@ -14,13 +14,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.fieldtype
+package de.stefan_oltmann.kim.format.tiff.fieldtype
-import com.ashampoo.kim.common.ByteOrder
-import com.ashampoo.kim.common.RationalNumbers
-import com.ashampoo.kim.common.toBytes
-import com.ashampoo.kim.common.toRationals
-import com.ashampoo.kim.format.tiff.constant.TiffConstants
+import de.stefan_oltmann.kim.common.ByteOrder
+import de.stefan_oltmann.kim.common.RationalNumbers
+import de.stefan_oltmann.kim.common.toBytes
+import de.stefan_oltmann.kim.common.toRationals
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants
/**
* Two SLONG’s: the first represents the numerator of a
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeSShort.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeSShort.kt
similarity index 81%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeSShort.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeSShort.kt
index 8be4d19f..b319656b 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeSShort.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeSShort.kt
@@ -14,13 +14,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.fieldtype
+package de.stefan_oltmann.kim.format.tiff.fieldtype
-import com.ashampoo.kim.common.ByteOrder
-import com.ashampoo.kim.common.ImageWriteException
-import com.ashampoo.kim.common.toBytes
-import com.ashampoo.kim.common.toShorts
-import com.ashampoo.kim.format.tiff.constant.TiffConstants
+import de.stefan_oltmann.kim.common.ByteOrder
+import de.stefan_oltmann.kim.common.ImageWriteException
+import de.stefan_oltmann.kim.common.toBytes
+import de.stefan_oltmann.kim.common.toShorts
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants
/**
* A 16-bit (2-byte) signed (twos-complement) integer.
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeShort.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeShort.kt
similarity index 80%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeShort.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeShort.kt
index 1e8c6af5..19c21c00 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeShort.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeShort.kt
@@ -14,13 +14,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.fieldtype
+package de.stefan_oltmann.kim.format.tiff.fieldtype
-import com.ashampoo.kim.common.ByteOrder
-import com.ashampoo.kim.common.ImageWriteException
-import com.ashampoo.kim.common.toBytes
-import com.ashampoo.kim.common.toShorts
-import com.ashampoo.kim.format.tiff.constant.TiffConstants
+import de.stefan_oltmann.kim.common.ByteOrder
+import de.stefan_oltmann.kim.common.ImageWriteException
+import de.stefan_oltmann.kim.common.toBytes
+import de.stefan_oltmann.kim.common.toShorts
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants
/**
* 16-bit (2-byte) unsigned integer.
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeUndefined.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeUndefined.kt
similarity index 85%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeUndefined.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeUndefined.kt
index 6d242192..a23d6ee7 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/fieldtype/FieldTypeUndefined.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/fieldtype/FieldTypeUndefined.kt
@@ -14,11 +14,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.fieldtype
+package de.stefan_oltmann.kim.format.tiff.fieldtype
-import com.ashampoo.kim.common.ByteOrder
-import com.ashampoo.kim.common.ImageWriteException
-import com.ashampoo.kim.format.tiff.constant.TiffConstants
+import de.stefan_oltmann.kim.common.ByteOrder
+import de.stefan_oltmann.kim.common.ImageWriteException
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants
/**
* An 8-bit byte that may contain anything,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/geotiff/GeoKey.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/geotiff/GeoKey.kt
similarity index 98%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/geotiff/GeoKey.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/geotiff/GeoKey.kt
index a8526758..648c7596 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/geotiff/GeoKey.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/geotiff/GeoKey.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.geotiff
+package de.stefan_oltmann.kim.format.tiff.geotiff
import kotlin.jvm.JvmStatic
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/geotiff/GeoTiffDirectory.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/geotiff/GeoTiffDirectory.kt
similarity index 98%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/geotiff/GeoTiffDirectory.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/geotiff/GeoTiffDirectory.kt
index 2233be28..627a6852 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/geotiff/GeoTiffDirectory.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/geotiff/GeoTiffDirectory.kt
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.geotiff
+package de.stefan_oltmann.kim.format.tiff.geotiff
-import com.ashampoo.kim.common.ImageReadException
+import de.stefan_oltmann.kim.common.ImageReadException
/**
* See http://geotiff.maptools.org/spec/geotiff2.4.html
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/geotiff/GeoTiffGeographicType.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/geotiff/GeoTiffGeographicType.kt
similarity index 99%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/geotiff/GeoTiffGeographicType.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/geotiff/GeoTiffGeographicType.kt
index 764c61e2..edc0ebd5 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/geotiff/GeoTiffGeographicType.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/geotiff/GeoTiffGeographicType.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.geotiff
+package de.stefan_oltmann.kim.format.tiff.geotiff
import kotlin.jvm.JvmStatic
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/geotiff/GeoTiffModelType.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/geotiff/GeoTiffModelType.kt
similarity index 96%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/geotiff/GeoTiffModelType.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/geotiff/GeoTiffModelType.kt
index 6fb7f4f0..5f8447a0 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/geotiff/GeoTiffModelType.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/geotiff/GeoTiffModelType.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.geotiff
+package de.stefan_oltmann.kim.format.tiff.geotiff
import kotlin.jvm.JvmStatic
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/geotiff/GeoTiffRasterType.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/geotiff/GeoTiffRasterType.kt
similarity index 96%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/geotiff/GeoTiffRasterType.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/geotiff/GeoTiffRasterType.kt
index dc6b445d..60254945 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/geotiff/GeoTiffRasterType.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/geotiff/GeoTiffRasterType.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.geotiff
+package de.stefan_oltmann.kim.format.tiff.geotiff
import kotlin.jvm.JvmStatic
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfo.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfo.kt
similarity index 88%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfo.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfo.kt
index 69dad563..f82319ab 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfo.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfo.kt
@@ -14,12 +14,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.taginfo
+package de.stefan_oltmann.kim.format.tiff.taginfo
-import com.ashampoo.kim.common.HEX_RADIX
-import com.ashampoo.kim.format.tiff.constant.ExifTag.EXIF_DIRECTORY_UNKNOWN
-import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType
-import com.ashampoo.kim.format.tiff.fieldtype.FieldType
+import de.stefan_oltmann.kim.common.HEX_RADIX
+import de.stefan_oltmann.kim.format.tiff.constant.ExifTag.EXIF_DIRECTORY_UNKNOWN
+import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType
+import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldType
public abstract class TagInfo(
public val tag: Int,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoAscii.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoAscii.kt
similarity index 81%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoAscii.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoAscii.kt
index 6b499823..16227cf1 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoAscii.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoAscii.kt
@@ -14,10 +14,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.taginfo
+package de.stefan_oltmann.kim.format.tiff.taginfo
-import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType
-import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeAscii
+import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType
+import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeAscii
public class TagInfoAscii(
tag: Int,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoByte.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoByte.kt
similarity index 81%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoByte.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoByte.kt
index 45d21ed7..de2d8de4 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoByte.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoByte.kt
@@ -14,11 +14,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.taginfo
+package de.stefan_oltmann.kim.format.tiff.taginfo
-import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType
-import com.ashampoo.kim.format.tiff.fieldtype.FieldType
-import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeByte
+import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType
+import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldType
+import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeByte
public open class TagInfoByte : TagInfo {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoBytes.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoBytes.kt
similarity index 82%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoBytes.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoBytes.kt
index 01e8b312..2451a05a 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoBytes.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoBytes.kt
@@ -14,11 +14,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.taginfo
+package de.stefan_oltmann.kim.format.tiff.taginfo
-import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType
-import com.ashampoo.kim.format.tiff.fieldtype.FieldType
-import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeByte
+import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType
+import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldType
+import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeByte
public open class TagInfoBytes : TagInfo {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoDouble.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoDouble.kt
similarity index 81%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoDouble.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoDouble.kt
index 0287dbfd..b2205295 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoDouble.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoDouble.kt
@@ -14,10 +14,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.taginfo
+package de.stefan_oltmann.kim.format.tiff.taginfo
-import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType
-import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeDouble
+import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType
+import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeDouble
public class TagInfoDouble(
tag: Int,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoDoubles.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoDoubles.kt
similarity index 81%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoDoubles.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoDoubles.kt
index de81f1d3..689fbf88 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoDoubles.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoDoubles.kt
@@ -14,10 +14,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.taginfo
+package de.stefan_oltmann.kim.format.tiff.taginfo
-import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType
-import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeDouble
+import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType
+import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeDouble
public class TagInfoDoubles(
tag: Int,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoFloat.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoFloat.kt
similarity index 81%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoFloat.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoFloat.kt
index e6048a0c..9ed7635c 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoFloat.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoFloat.kt
@@ -14,10 +14,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.taginfo
+package de.stefan_oltmann.kim.format.tiff.taginfo
-import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType
-import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeFloat
+import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType
+import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeFloat
public class TagInfoFloat(
tag: Int,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoFloats.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoFloats.kt
similarity index 82%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoFloats.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoFloats.kt
index 5667beb7..0672e9a7 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoFloats.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoFloats.kt
@@ -14,10 +14,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.taginfo
+package de.stefan_oltmann.kim.format.tiff.taginfo
-import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType
-import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeFloat
+import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType
+import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeFloat
public class TagInfoFloats(
tag: Int,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoGpsText.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoGpsText.kt
similarity index 85%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoGpsText.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoGpsText.kt
index a2461096..662bdf1e 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoGpsText.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoGpsText.kt
@@ -14,19 +14,19 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.taginfo
-
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.common.ImageWriteException
-import com.ashampoo.kim.common.decodeLatin1BytesToString
-import com.ashampoo.kim.common.encodeToLatin1Bytes
-import com.ashampoo.kim.common.isEquals
-import com.ashampoo.kim.common.slice
-import com.ashampoo.kim.format.tiff.TiffField
-import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType
-import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeAscii
-import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeByte
-import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeUndefined
+package de.stefan_oltmann.kim.format.tiff.taginfo
+
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.common.ImageWriteException
+import de.stefan_oltmann.kim.common.decodeLatin1BytesToString
+import de.stefan_oltmann.kim.common.encodeToLatin1Bytes
+import de.stefan_oltmann.kim.common.isEquals
+import de.stefan_oltmann.kim.common.slice
+import de.stefan_oltmann.kim.format.tiff.TiffField
+import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType
+import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeAscii
+import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeByte
+import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeUndefined
/**
* Used by some GPS tags and the EXIF user comment tag,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoLong.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoLong.kt
similarity index 85%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoLong.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoLong.kt
index 96f105d2..efa665f5 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoLong.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoLong.kt
@@ -14,10 +14,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.taginfo
+package de.stefan_oltmann.kim.format.tiff.taginfo
-import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType
-import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeLong
+import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType
+import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeLong
public class TagInfoLong : TagInfo {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoLongs.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoLongs.kt
similarity index 85%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoLongs.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoLongs.kt
index 1128ff4e..2b8c1570 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoLongs.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoLongs.kt
@@ -14,10 +14,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.taginfo
+package de.stefan_oltmann.kim.format.tiff.taginfo
-import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType
-import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeLong
+import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType
+import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeLong
public class TagInfoLongs : TagInfo {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoRational.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoRational.kt
similarity index 81%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoRational.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoRational.kt
index 3a25e9ae..60d7ed2d 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoRational.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoRational.kt
@@ -14,10 +14,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.taginfo
+package de.stefan_oltmann.kim.format.tiff.taginfo
-import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType
-import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeRational
+import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType
+import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeRational
public class TagInfoRational(
tag: Int,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoRationals.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoRationals.kt
similarity index 81%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoRationals.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoRationals.kt
index afe95d89..78f3f6fd 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoRationals.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoRationals.kt
@@ -14,10 +14,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.taginfo
+package de.stefan_oltmann.kim.format.tiff.taginfo
-import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType
-import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeRational
+import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType
+import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeRational
public class TagInfoRationals(
tag: Int,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSByte.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSByte.kt
similarity index 81%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSByte.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSByte.kt
index b4b4f4c2..79f4511a 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSByte.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSByte.kt
@@ -14,10 +14,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.taginfo
+package de.stefan_oltmann.kim.format.tiff.taginfo
-import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType
-import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeSByte
+import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType
+import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeSByte
public class TagInfoSByte(
tag: Int,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSBytes.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSBytes.kt
similarity index 82%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSBytes.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSBytes.kt
index cd8e6645..6ddcdaa6 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSBytes.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSBytes.kt
@@ -14,10 +14,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.taginfo
+package de.stefan_oltmann.kim.format.tiff.taginfo
-import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType
-import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeSByte
+import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType
+import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeSByte
public class TagInfoSBytes(
tag: Int,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSLong.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSLong.kt
similarity index 81%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSLong.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSLong.kt
index 18f5b335..6b1c5663 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSLong.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSLong.kt
@@ -14,10 +14,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.taginfo
+package de.stefan_oltmann.kim.format.tiff.taginfo
-import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType
-import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeSLong
+import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType
+import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeSLong
public class TagInfoSLong(
tag: Int,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSLongs.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSLongs.kt
similarity index 82%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSLongs.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSLongs.kt
index e2147dd8..38ad90e0 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSLongs.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSLongs.kt
@@ -14,10 +14,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.taginfo
+package de.stefan_oltmann.kim.format.tiff.taginfo
-import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType
-import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeSLong
+import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType
+import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeSLong
public class TagInfoSLongs(
tag: Int,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSRational.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSRational.kt
similarity index 81%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSRational.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSRational.kt
index 59043f18..cad47f7e 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSRational.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSRational.kt
@@ -14,10 +14,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.taginfo
+package de.stefan_oltmann.kim.format.tiff.taginfo
-import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType
-import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeSRational
+import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType
+import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeSRational
public class TagInfoSRational(
tag: Int,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSRationals.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSRationals.kt
similarity index 81%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSRationals.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSRationals.kt
index e0df0f08..99a391f2 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSRationals.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSRationals.kt
@@ -14,10 +14,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.taginfo
+package de.stefan_oltmann.kim.format.tiff.taginfo
-import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType
-import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeSRational
+import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType
+import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeSRational
public class TagInfoSRationals(
tag: Int,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSShort.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSShort.kt
similarity index 81%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSShort.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSShort.kt
index 2074079d..f5fb66c0 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSShort.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSShort.kt
@@ -14,10 +14,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.taginfo
+package de.stefan_oltmann.kim.format.tiff.taginfo
-import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType
-import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeShort
+import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType
+import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeShort
public class TagInfoSShort(
tag: Int,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSShorts.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSShorts.kt
similarity index 82%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSShorts.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSShorts.kt
index 5732f460..dcea3f2a 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoSShorts.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoSShorts.kt
@@ -14,10 +14,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.taginfo
+package de.stefan_oltmann.kim.format.tiff.taginfo
-import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType
-import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeShort
+import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType
+import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeShort
public class TagInfoSShorts(
tag: Int,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoShort.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoShort.kt
similarity index 81%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoShort.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoShort.kt
index 0b6f94b7..dcd7148c 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoShort.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoShort.kt
@@ -14,10 +14,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.taginfo
+package de.stefan_oltmann.kim.format.tiff.taginfo
-import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType
-import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeShort
+import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType
+import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeShort
public class TagInfoShort(
tag: Int,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoShorts.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoShorts.kt
similarity index 82%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoShorts.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoShorts.kt
index ee03f40b..03ef6ac7 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoShorts.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoShorts.kt
@@ -14,10 +14,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.taginfo
+package de.stefan_oltmann.kim.format.tiff.taginfo
-import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType
-import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeShort
+import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType
+import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeShort
public class TagInfoShorts(
tag: Int,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoUndefined.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoUndefined.kt
similarity index 81%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoUndefined.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoUndefined.kt
index 898ab6a6..560a9015 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoUndefined.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoUndefined.kt
@@ -14,10 +14,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.taginfo
+package de.stefan_oltmann.kim.format.tiff.taginfo
-import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType
-import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeUndefined
+import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType
+import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeUndefined
public class TagInfoUndefined(
tag: Int,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoUndefineds.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoUndefineds.kt
similarity index 81%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoUndefineds.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoUndefineds.kt
index 733a0a40..772a95a3 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/taginfo/TagInfoUndefineds.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/taginfo/TagInfoUndefineds.kt
@@ -14,10 +14,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.taginfo
+package de.stefan_oltmann.kim.format.tiff.taginfo
-import com.ashampoo.kim.format.tiff.constant.TiffDirectoryType
-import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeUndefined
+import de.stefan_oltmann.kim.format.tiff.constant.TiffDirectoryType
+import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeUndefined
public class TagInfoUndefineds(
tag: Int,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/RewritableSpaceRange.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/RewritableSpaceRange.kt
similarity index 95%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/RewritableSpaceRange.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/RewritableSpaceRange.kt
index 0ff7d16e..d69d693a 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/RewritableSpaceRange.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/RewritableSpaceRange.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.write
+package de.stefan_oltmann.kim.format.tiff.write
/**
* Represents a marker for space in an EXIF that we can safely
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffOffsetItem.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffOffsetItem.kt
similarity index 94%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffOffsetItem.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffOffsetItem.kt
index 924ba2a2..ff872e25 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffOffsetItem.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffOffsetItem.kt
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.write
+package de.stefan_oltmann.kim.format.tiff.write
/**
* This class combines an Directory like the GPS directory with it's offset value.
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffOffsetItems.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffOffsetItems.kt
similarity index 87%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffOffsetItems.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffOffsetItems.kt
index 6b043690..fdd59fe5 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffOffsetItems.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffOffsetItems.kt
@@ -14,10 +14,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.write
+package de.stefan_oltmann.kim.format.tiff.write
-import com.ashampoo.kim.common.ByteOrder
-import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeLong
+import de.stefan_oltmann.kim.common.ByteOrder
+import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeLong
internal class TiffOffsetItems(val byteOrder: ByteOrder) {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffOutputDirectory.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffOutputDirectory.kt
similarity index 81%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffOutputDirectory.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffOutputDirectory.kt
index 1a0bd537..25c293a3 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffOutputDirectory.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffOutputDirectory.kt
@@ -14,55 +14,55 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.write
-
-import com.ashampoo.kim.common.ByteOrder
-import com.ashampoo.kim.common.ImageWriteException
-import com.ashampoo.kim.common.RationalNumber
-import com.ashampoo.kim.common.RationalNumbers
-import com.ashampoo.kim.common.toBytes
-import com.ashampoo.kim.format.tiff.TiffDirectory.Companion.description
-import com.ashampoo.kim.format.tiff.constant.TiffConstants.TIFF_DIRECTORY_FOOTER_LENGTH
-import com.ashampoo.kim.format.tiff.constant.TiffConstants.TIFF_DIRECTORY_HEADER_LENGTH
-import com.ashampoo.kim.format.tiff.constant.TiffConstants.TIFF_ENTRY_LENGTH
-import com.ashampoo.kim.format.tiff.constant.TiffConstants.TIFF_ENTRY_MAX_VALUE_LENGTH
-import com.ashampoo.kim.format.tiff.constant.TiffTag
-import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeAscii
-import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeByte
-import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeDouble
-import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeFloat
-import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeLong
-import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeRational
-import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeSByte
-import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeSLong
-import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeSRational
-import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeSShort
-import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeShort
-import com.ashampoo.kim.format.tiff.taginfo.TagInfo
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoAscii
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoByte
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoBytes
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoDouble
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoDoubles
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoFloat
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoFloats
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoGpsText
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoLong
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoLongs
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoRational
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoRationals
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoSByte
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoSBytes
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoSLong
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoSLongs
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoSRational
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoSRationals
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoSShort
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoSShorts
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoShort
-import com.ashampoo.kim.format.tiff.taginfo.TagInfoShorts
-import com.ashampoo.kim.format.tiff.write.TiffOutputItem.Companion.UNDEFINED_VALUE
-import com.ashampoo.kim.output.BinaryByteWriter
+package de.stefan_oltmann.kim.format.tiff.write
+
+import de.stefan_oltmann.kim.common.ByteOrder
+import de.stefan_oltmann.kim.common.ImageWriteException
+import de.stefan_oltmann.kim.common.RationalNumber
+import de.stefan_oltmann.kim.common.RationalNumbers
+import de.stefan_oltmann.kim.common.toBytes
+import de.stefan_oltmann.kim.format.tiff.TiffDirectory.Companion.description
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.TIFF_DIRECTORY_FOOTER_LENGTH
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.TIFF_DIRECTORY_HEADER_LENGTH
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.TIFF_ENTRY_LENGTH
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.TIFF_ENTRY_MAX_VALUE_LENGTH
+import de.stefan_oltmann.kim.format.tiff.constant.TiffTag
+import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeAscii
+import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeByte
+import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeDouble
+import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeFloat
+import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeLong
+import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeRational
+import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeSByte
+import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeSLong
+import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeSRational
+import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeSShort
+import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeShort
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfo
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoAscii
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoByte
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoBytes
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoDouble
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoDoubles
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoFloat
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoFloats
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoGpsText
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoLong
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoLongs
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoRational
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoRationals
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoSByte
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoSBytes
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoSLong
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoSLongs
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoSRational
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoSRationals
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoSShort
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoSShorts
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoShort
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfoShorts
+import de.stefan_oltmann.kim.format.tiff.write.TiffOutputItem.Companion.UNDEFINED_VALUE
+import de.stefan_oltmann.kim.output.BinaryByteWriter
@Suppress("TooManyFunctions", "MethodOverloading")
public class TiffOutputDirectory(
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffOutputField.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffOutputField.kt
similarity index 83%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffOutputField.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffOutputField.kt
index aabba063..75290882 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffOutputField.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffOutputField.kt
@@ -14,17 +14,17 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.write
-
-import com.ashampoo.kim.common.ByteOrder
-import com.ashampoo.kim.common.HEX_RADIX
-import com.ashampoo.kim.common.ImageWriteException
-import com.ashampoo.kim.common.toHex
-import com.ashampoo.kim.format.tiff.constant.TiffConstants.TIFF_ENTRY_MAX_VALUE_LENGTH
-import com.ashampoo.kim.format.tiff.fieldtype.FieldType
-import com.ashampoo.kim.format.tiff.fieldtype.FieldTypeLong
-import com.ashampoo.kim.format.tiff.taginfo.TagInfo
-import com.ashampoo.kim.output.BinaryByteWriter
+package de.stefan_oltmann.kim.format.tiff.write
+
+import de.stefan_oltmann.kim.common.ByteOrder
+import de.stefan_oltmann.kim.common.HEX_RADIX
+import de.stefan_oltmann.kim.common.ImageWriteException
+import de.stefan_oltmann.kim.common.toHex
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.TIFF_ENTRY_MAX_VALUE_LENGTH
+import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldType
+import de.stefan_oltmann.kim.format.tiff.fieldtype.FieldTypeLong
+import de.stefan_oltmann.kim.format.tiff.taginfo.TagInfo
+import de.stefan_oltmann.kim.output.BinaryByteWriter
public class TiffOutputField(
public val tag: Int,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffOutputItem.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffOutputItem.kt
similarity index 90%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffOutputItem.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffOutputItem.kt
index 22a8462f..3708bd05 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffOutputItem.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffOutputItem.kt
@@ -14,9 +14,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.write
+package de.stefan_oltmann.kim.format.tiff.write
-import com.ashampoo.kim.output.BinaryByteWriter
+import de.stefan_oltmann.kim.output.BinaryByteWriter
public interface TiffOutputItem {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffOutputSet.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffOutputSet.kt
similarity index 90%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffOutputSet.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffOutputSet.kt
index de01d563..d8f5492f 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffOutputSet.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffOutputSet.kt
@@ -14,22 +14,22 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.write
-
-import com.ashampoo.kim.Kim
-import com.ashampoo.kim.common.ByteOrder
-import com.ashampoo.kim.common.GpsUtil.MINUTES_PER_HOUR
-import com.ashampoo.kim.common.ImageWriteException
-import com.ashampoo.kim.common.RationalNumber.Companion.valueOf
-import com.ashampoo.kim.common.RationalNumbers
-import com.ashampoo.kim.common.toExifDateString
-import com.ashampoo.kim.format.tiff.constant.ExifTag
-import com.ashampoo.kim.format.tiff.constant.GpsTag
-import com.ashampoo.kim.format.tiff.constant.TiffConstants
-import com.ashampoo.kim.format.tiff.constant.TiffConstants.DEFAULT_TIFF_BYTE_ORDER
-import com.ashampoo.kim.format.tiff.constant.TiffTag
-import com.ashampoo.kim.model.GpsCoordinates
-import com.ashampoo.kim.model.MetadataUpdate
+package de.stefan_oltmann.kim.format.tiff.write
+
+import de.stefan_oltmann.kim.Kim
+import de.stefan_oltmann.kim.common.ByteOrder
+import de.stefan_oltmann.kim.common.GpsUtil.MINUTES_PER_HOUR
+import de.stefan_oltmann.kim.common.ImageWriteException
+import de.stefan_oltmann.kim.common.RationalNumber.Companion.valueOf
+import de.stefan_oltmann.kim.common.RationalNumbers
+import de.stefan_oltmann.kim.common.toExifDateString
+import de.stefan_oltmann.kim.format.tiff.constant.ExifTag
+import de.stefan_oltmann.kim.format.tiff.constant.GpsTag
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.DEFAULT_TIFF_BYTE_ORDER
+import de.stefan_oltmann.kim.format.tiff.constant.TiffTag
+import de.stefan_oltmann.kim.model.GpsCoordinates
+import de.stefan_oltmann.kim.model.MetadataUpdate
import kotlinx.datetime.TimeZone
import kotlinx.datetime.toLocalDateTime
import kotlin.math.abs
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffOutputValue.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffOutputValue.kt
similarity index 87%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffOutputValue.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffOutputValue.kt
index 004cd344..12f92d16 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffOutputValue.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffOutputValue.kt
@@ -14,11 +14,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.write
+package de.stefan_oltmann.kim.format.tiff.write
-import com.ashampoo.kim.common.ImageWriteException
-import com.ashampoo.kim.common.toHex
-import com.ashampoo.kim.output.BinaryByteWriter
+import de.stefan_oltmann.kim.common.ImageWriteException
+import de.stefan_oltmann.kim.common.toHex
+import de.stefan_oltmann.kim.output.BinaryByteWriter
public class TiffOutputValue internal constructor(
private val description: String,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffWriterBase.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffWriterBase.kt
similarity index 94%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffWriterBase.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffWriterBase.kt
index 1e91d673..8bd818c0 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffWriterBase.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffWriterBase.kt
@@ -14,16 +14,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.write
-
-import com.ashampoo.kim.common.ByteOrder
-import com.ashampoo.kim.common.ImageWriteException
-import com.ashampoo.kim.format.tiff.constant.ExifTag
-import com.ashampoo.kim.format.tiff.constant.TiffConstants
-import com.ashampoo.kim.format.tiff.constant.TiffConstants.TIFF_HEADER_SIZE
-import com.ashampoo.kim.format.tiff.constant.TiffConstants.TIFF_VERSION
-import com.ashampoo.kim.output.BinaryByteWriter
-import com.ashampoo.kim.output.ByteWriter
+package de.stefan_oltmann.kim.format.tiff.write
+
+import de.stefan_oltmann.kim.common.ByteOrder
+import de.stefan_oltmann.kim.common.ImageWriteException
+import de.stefan_oltmann.kim.format.tiff.constant.ExifTag
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.TIFF_HEADER_SIZE
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.TIFF_VERSION
+import de.stefan_oltmann.kim.output.BinaryByteWriter
+import de.stefan_oltmann.kim.output.ByteWriter
public abstract class TiffWriterBase(
public val byteOrder: ByteOrder
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffWriterLossless.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffWriterLossless.kt
similarity index 95%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffWriterLossless.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffWriterLossless.kt
index b614969b..6ee29c26 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffWriterLossless.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffWriterLossless.kt
@@ -14,18 +14,18 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.write
-
-import com.ashampoo.kim.common.ByteOrder
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.common.ImageWriteException
-import com.ashampoo.kim.format.tiff.TiffContents
-import com.ashampoo.kim.format.tiff.TiffElement
-import com.ashampoo.kim.format.tiff.TiffReader
-import com.ashampoo.kim.format.tiff.constant.TiffConstants.TIFF_HEADER_SIZE
-import com.ashampoo.kim.output.BinaryByteWriter.Companion.createBinaryByteWriter
-import com.ashampoo.kim.output.BufferByteWriter
-import com.ashampoo.kim.output.ByteWriter
+package de.stefan_oltmann.kim.format.tiff.write
+
+import de.stefan_oltmann.kim.common.ByteOrder
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.common.ImageWriteException
+import de.stefan_oltmann.kim.format.tiff.TiffContents
+import de.stefan_oltmann.kim.format.tiff.TiffElement
+import de.stefan_oltmann.kim.format.tiff.TiffReader
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.TIFF_HEADER_SIZE
+import de.stefan_oltmann.kim.output.BinaryByteWriter.Companion.createBinaryByteWriter
+import de.stefan_oltmann.kim.output.BufferByteWriter
+import de.stefan_oltmann.kim.output.ByteWriter
public class TiffWriterLossless(
byteOrder: ByteOrder,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffWriterLossy.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffWriterLossy.kt
similarity index 85%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffWriterLossy.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffWriterLossy.kt
index 1a8b9d9f..23b10fd3 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/tiff/write/TiffWriterLossy.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/tiff/write/TiffWriterLossy.kt
@@ -14,13 +14,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff.write
+package de.stefan_oltmann.kim.format.tiff.write
-import com.ashampoo.kim.common.ByteOrder
-import com.ashampoo.kim.format.tiff.constant.TiffConstants.TIFF_HEADER_SIZE
-import com.ashampoo.kim.output.BinaryByteWriter
-import com.ashampoo.kim.output.BinaryByteWriter.Companion.createBinaryByteWriter
-import com.ashampoo.kim.output.ByteWriter
+import de.stefan_oltmann.kim.common.ByteOrder
+import de.stefan_oltmann.kim.format.tiff.constant.TiffConstants.TIFF_HEADER_SIZE
+import de.stefan_oltmann.kim.output.BinaryByteWriter
+import de.stefan_oltmann.kim.output.BinaryByteWriter.Companion.createBinaryByteWriter
+import de.stefan_oltmann.kim.output.ByteWriter
import kotlin.jvm.JvmStatic
public class TiffWriterLossy(
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/WebPChunkType.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/WebPChunkType.kt
similarity index 96%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/webp/WebPChunkType.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/WebPChunkType.kt
index 997cb7ae..1194396e 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/WebPChunkType.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/WebPChunkType.kt
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.webp
+package de.stefan_oltmann.kim.format.webp
-import com.ashampoo.kim.common.toFourCCTypeString
+import de.stefan_oltmann.kim.common.toFourCCTypeString
/**
* Type of a WebP chunk.
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/WebPConstants.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/WebPConstants.kt
similarity index 93%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/webp/WebPConstants.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/WebPConstants.kt
index 1b468286..4ae830ea 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/WebPConstants.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/WebPConstants.kt
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.webp
+package de.stefan_oltmann.kim.format.webp
-import com.ashampoo.kim.common.ByteOrder
+import de.stefan_oltmann.kim.common.ByteOrder
public object WebPConstants {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/WebPImageParser.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/WebPImageParser.kt
similarity index 77%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/webp/WebPImageParser.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/WebPImageParser.kt
index 6e2f5187..291b40da 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/WebPImageParser.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/WebPImageParser.kt
@@ -13,30 +13,30 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.webp
-
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.common.tryWithImageReadException
-import com.ashampoo.kim.format.ImageMetadata
-import com.ashampoo.kim.format.ImageParser
-import com.ashampoo.kim.format.webp.WebPConstants.CHUNK_SIZE_LENGTH
-import com.ashampoo.kim.format.webp.WebPConstants.RIFF_SIGNATURE
-import com.ashampoo.kim.format.webp.WebPConstants.TPYE_LENGTH
-import com.ashampoo.kim.format.webp.WebPConstants.WEBP_BYTE_ORDER
-import com.ashampoo.kim.format.webp.WebPConstants.WEBP_SIGNATURE
-import com.ashampoo.kim.format.webp.chunk.ImageSizeAware
-import com.ashampoo.kim.format.webp.chunk.WebPChunk
-import com.ashampoo.kim.format.webp.chunk.WebPChunkExif
-import com.ashampoo.kim.format.webp.chunk.WebPChunkVP8
-import com.ashampoo.kim.format.webp.chunk.WebPChunkVP8L
-import com.ashampoo.kim.format.webp.chunk.WebPChunkVP8X
-import com.ashampoo.kim.format.webp.chunk.WebPChunkXmp
-import com.ashampoo.kim.input.ByteReader
-import com.ashampoo.kim.input.read4BytesAsInt
-import com.ashampoo.kim.input.readAndVerifyBytes
-import com.ashampoo.kim.input.readBytes
-import com.ashampoo.kim.input.skipBytes
-import com.ashampoo.kim.model.ImageFormat
+package de.stefan_oltmann.kim.format.webp
+
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.common.tryWithImageReadException
+import de.stefan_oltmann.kim.format.MediaMetadata
+import de.stefan_oltmann.kim.format.ImageParser
+import de.stefan_oltmann.kim.format.webp.WebPConstants.CHUNK_SIZE_LENGTH
+import de.stefan_oltmann.kim.format.webp.WebPConstants.RIFF_SIGNATURE
+import de.stefan_oltmann.kim.format.webp.WebPConstants.TPYE_LENGTH
+import de.stefan_oltmann.kim.format.webp.WebPConstants.WEBP_BYTE_ORDER
+import de.stefan_oltmann.kim.format.webp.WebPConstants.WEBP_SIGNATURE
+import de.stefan_oltmann.kim.format.webp.chunk.ImageSizeAware
+import de.stefan_oltmann.kim.format.webp.chunk.WebPChunk
+import de.stefan_oltmann.kim.format.webp.chunk.WebPChunkExif
+import de.stefan_oltmann.kim.format.webp.chunk.WebPChunkVP8
+import de.stefan_oltmann.kim.format.webp.chunk.WebPChunkVP8L
+import de.stefan_oltmann.kim.format.webp.chunk.WebPChunkVP8X
+import de.stefan_oltmann.kim.format.webp.chunk.WebPChunkXmp
+import de.stefan_oltmann.kim.input.ByteReader
+import de.stefan_oltmann.kim.input.read4BytesAsInt
+import de.stefan_oltmann.kim.input.readAndVerifyBytes
+import de.stefan_oltmann.kim.input.readBytes
+import de.stefan_oltmann.kim.input.skipBytes
+import de.stefan_oltmann.kim.model.MediaFormat
import kotlin.jvm.JvmStatic
public object WebPImageParser : ImageParser {
@@ -44,7 +44,7 @@ public object WebPImageParser : ImageParser {
/*
* https://developers.google.com/speed/webp/docs/riff_container
*/
- override fun parseMetadata(byteReader: ByteReader): ImageMetadata =
+ override fun parseMetadata(byteReader: ByteReader): MediaMetadata =
tryWithImageReadException {
val chunks = readChunks(
@@ -60,7 +60,7 @@ public object WebPImageParser : ImageParser {
@Throws(ImageReadException::class)
@JvmStatic
- public fun parseMetadataFromChunks(chunks: List): ImageMetadata =
+ public fun parseMetadataFromChunks(chunks: List): MediaMetadata =
tryWithImageReadException {
val imageSizeAwareChunk = chunks.filterIsInstance().firstOrNull()
@@ -75,8 +75,8 @@ public object WebPImageParser : ImageParser {
val exifChunk = chunks.filterIsInstance().firstOrNull()
val xmpChunk = chunks.filterIsInstance().firstOrNull()
- return@tryWithImageReadException ImageMetadata(
- imageFormat = ImageFormat.WEBP,
+ return@tryWithImageReadException MediaMetadata(
+ mediaFormat = MediaFormat.WEBP,
imageSize = imageSize,
exif = exifChunk?.tiffContents,
exifBytes = exifChunk?.bytes,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/WebPUpdater.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/WebPUpdater.kt
similarity index 79%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/webp/WebPUpdater.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/WebPUpdater.kt
index 0a2a8bf5..1b0c1a06 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/WebPUpdater.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/WebPUpdater.kt
@@ -13,23 +13,23 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.webp
-
-import com.ashampoo.kim.common.ImageWriteException
-import com.ashampoo.kim.common.startsWithNullable
-import com.ashampoo.kim.common.tryWithImageWriteException
-import com.ashampoo.kim.format.ImageFormatMagicNumbers
-import com.ashampoo.kim.format.MetadataUpdater
-import com.ashampoo.kim.format.tiff.write.TiffOutputSet
-import com.ashampoo.kim.format.tiff.write.TiffWriterBase
-import com.ashampoo.kim.format.xmp.XmpWriter
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.input.ByteReader
-import com.ashampoo.kim.model.MetadataUpdate
-import com.ashampoo.kim.output.ByteArrayByteWriter
-import com.ashampoo.kim.output.ByteWriter
-import com.ashampoo.xmp.XMPMeta
-import com.ashampoo.xmp.XMPMetaFactory
+package de.stefan_oltmann.kim.format.webp
+
+import de.stefan_oltmann.kim.common.ImageWriteException
+import de.stefan_oltmann.kim.common.startsWithNullable
+import de.stefan_oltmann.kim.common.tryWithImageWriteException
+import de.stefan_oltmann.kim.format.MediaFormatMagicNumbers
+import de.stefan_oltmann.kim.format.MetadataUpdater
+import de.stefan_oltmann.kim.format.tiff.write.TiffOutputSet
+import de.stefan_oltmann.kim.format.tiff.write.TiffWriterBase
+import de.stefan_oltmann.kim.format.xmp.XmpWriter
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.input.ByteReader
+import de.stefan_oltmann.kim.model.MetadataUpdate
+import de.stefan_oltmann.kim.output.ByteArrayByteWriter
+import de.stefan_oltmann.kim.output.ByteWriter
+import de.stefan_oltmann.xmp.XMPMeta
+import de.stefan_oltmann.xmp.XMPMetaFactory
internal object WebPUpdater : MetadataUpdater {
@@ -93,7 +93,7 @@ internal object WebPUpdater : MetadataUpdater {
thumbnailBytes: ByteArray
): ByteArray = tryWithImageWriteException {
- if (!bytes.startsWithNullable(ImageFormatMagicNumbers.webP))
+ if (!bytes.startsWithNullable(MediaFormatMagicNumbers.webP))
throw ImageWriteException("Provided input bytes are not WebP!")
val byteReader = ByteArrayByteReader(bytes)
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/WebPWriter.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/WebPWriter.kt
similarity index 91%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/webp/WebPWriter.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/WebPWriter.kt
index 707b756d..46bb5d4e 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/WebPWriter.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/WebPWriter.kt
@@ -13,17 +13,17 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.webp
-
-import com.ashampoo.kim.common.ImageWriteException
-import com.ashampoo.kim.format.webp.WebPConstants.WEBP_BYTE_ORDER
-import com.ashampoo.kim.format.webp.chunk.ImageSizeAware
-import com.ashampoo.kim.format.webp.chunk.WebPChunk
-import com.ashampoo.kim.format.webp.chunk.WebPChunkVP8X
-import com.ashampoo.kim.input.ByteReader
-import com.ashampoo.kim.output.ByteArrayByteWriter
-import com.ashampoo.kim.output.ByteWriter
-import com.ashampoo.kim.output.writeInt
+package de.stefan_oltmann.kim.format.webp
+
+import de.stefan_oltmann.kim.common.ImageWriteException
+import de.stefan_oltmann.kim.format.webp.WebPConstants.WEBP_BYTE_ORDER
+import de.stefan_oltmann.kim.format.webp.chunk.ImageSizeAware
+import de.stefan_oltmann.kim.format.webp.chunk.WebPChunk
+import de.stefan_oltmann.kim.format.webp.chunk.WebPChunkVP8X
+import de.stefan_oltmann.kim.input.ByteReader
+import de.stefan_oltmann.kim.output.ByteArrayByteWriter
+import de.stefan_oltmann.kim.output.ByteWriter
+import de.stefan_oltmann.kim.output.writeInt
import kotlin.jvm.JvmStatic
public object WebPWriter {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/chunk/ImageSizeAware.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/chunk/ImageSizeAware.kt
similarity index 89%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/webp/chunk/ImageSizeAware.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/chunk/ImageSizeAware.kt
index d41e5d97..0727bdc3 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/chunk/ImageSizeAware.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/chunk/ImageSizeAware.kt
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.webp.chunk
+package de.stefan_oltmann.kim.format.webp.chunk
-import com.ashampoo.kim.model.ImageSize
+import de.stefan_oltmann.kim.model.ImageSize
/**
* Effectively a marker interface for VP8, VP8L & VP8X.
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/chunk/WebPChunk.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/chunk/WebPChunk.kt
similarity index 88%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/webp/chunk/WebPChunk.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/chunk/WebPChunk.kt
index 1f4fbd59..2ade7a49 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/chunk/WebPChunk.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/chunk/WebPChunk.kt
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.webp.chunk
+package de.stefan_oltmann.kim.format.webp.chunk
-import com.ashampoo.kim.format.webp.WebPChunkType
+import de.stefan_oltmann.kim.format.webp.WebPChunkType
public open class WebPChunk(
public val type: WebPChunkType,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/chunk/WebPChunkExif.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/chunk/WebPChunkExif.kt
similarity index 79%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/webp/chunk/WebPChunkExif.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/chunk/WebPChunkExif.kt
index 5099f83e..2c1ae136 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/chunk/WebPChunkExif.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/chunk/WebPChunkExif.kt
@@ -13,11 +13,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.webp.chunk
+package de.stefan_oltmann.kim.format.webp.chunk
-import com.ashampoo.kim.format.tiff.TiffContents
-import com.ashampoo.kim.format.tiff.TiffReader
-import com.ashampoo.kim.format.webp.WebPChunkType
+import de.stefan_oltmann.kim.format.tiff.TiffContents
+import de.stefan_oltmann.kim.format.tiff.TiffReader
+import de.stefan_oltmann.kim.format.webp.WebPChunkType
public class WebPChunkExif(
bytes: ByteArray
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/chunk/WebPChunkVP8.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/chunk/WebPChunkVP8.kt
similarity index 93%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/webp/chunk/WebPChunkVP8.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/chunk/WebPChunkVP8.kt
index 84612613..7ee9e081 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/chunk/WebPChunkVP8.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/chunk/WebPChunkVP8.kt
@@ -14,12 +14,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.webp.chunk
+package de.stefan_oltmann.kim.format.webp.chunk
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.format.webp.WebPChunkType
-import com.ashampoo.kim.format.webp.WebPConstants
-import com.ashampoo.kim.model.ImageSize
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.format.webp.WebPChunkType
+import de.stefan_oltmann.kim.format.webp.WebPConstants
+import de.stefan_oltmann.kim.model.ImageSize
/*
* https://developers.google.com/speed/webp/docs/riff_container#simple_file_format_lossy
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/chunk/WebPChunkVP8L.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/chunk/WebPChunkVP8L.kt
similarity index 87%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/webp/chunk/WebPChunkVP8L.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/chunk/WebPChunkVP8L.kt
index 511b5b2d..13fea905 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/chunk/WebPChunkVP8L.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/chunk/WebPChunkVP8L.kt
@@ -14,12 +14,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.webp.chunk
+package de.stefan_oltmann.kim.format.webp.chunk
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.format.webp.WebPChunkType
-import com.ashampoo.kim.format.webp.WebPConstants
-import com.ashampoo.kim.model.ImageSize
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.format.webp.WebPChunkType
+import de.stefan_oltmann.kim.format.webp.WebPConstants
+import de.stefan_oltmann.kim.model.ImageSize
/*
* https://developers.google.com/speed/webp/docs/riff_container#simple_file_format_lossless
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/chunk/WebPChunkVP8X.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/chunk/WebPChunkVP8X.kt
similarity index 91%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/webp/chunk/WebPChunkVP8X.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/chunk/WebPChunkVP8X.kt
index 67bb19b5..9daf2c8d 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/chunk/WebPChunkVP8X.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/chunk/WebPChunkVP8X.kt
@@ -14,13 +14,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.webp.chunk
+package de.stefan_oltmann.kim.format.webp.chunk
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.format.webp.WebPChunkType
-import com.ashampoo.kim.format.webp.WebPConstants
-import com.ashampoo.kim.format.webp.WebPConstants.VP8X_PAYLOAD_LENGTH
-import com.ashampoo.kim.model.ImageSize
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.format.webp.WebPChunkType
+import de.stefan_oltmann.kim.format.webp.WebPConstants
+import de.stefan_oltmann.kim.format.webp.WebPConstants.VP8X_PAYLOAD_LENGTH
+import de.stefan_oltmann.kim.model.ImageSize
/*
* https://developers.google.com/speed/webp/docs/riff_container#extended_file_format
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/chunk/WebPChunkXmp.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/chunk/WebPChunkXmp.kt
similarity index 87%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/webp/chunk/WebPChunkXmp.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/chunk/WebPChunkXmp.kt
index a8e2a740..51933cba 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/webp/chunk/WebPChunkXmp.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/webp/chunk/WebPChunkXmp.kt
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.webp.chunk
+package de.stefan_oltmann.kim.format.webp.chunk
-import com.ashampoo.kim.format.webp.WebPChunkType
+import de.stefan_oltmann.kim.format.webp.WebPChunkType
public class WebPChunkXmp(
bytes: ByteArray
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/xmp/XmpReader.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/xmp/XmpReader.kt
similarity index 81%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/xmp/XmpReader.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/xmp/XmpReader.kt
index a5d1040b..2a581025 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/xmp/XmpReader.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/xmp/XmpReader.kt
@@ -13,17 +13,17 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.xmp
-
-import com.ashampoo.kim.Kim.underUnitTesting
-import com.ashampoo.kim.common.GpsUtil
-import com.ashampoo.kim.model.GpsCoordinates
-import com.ashampoo.kim.model.LocationShown
-import com.ashampoo.kim.model.PhotoMetadata
-import com.ashampoo.kim.model.PhotoRating
-import com.ashampoo.kim.model.TiffOrientation
-import com.ashampoo.xmp.XMPException
-import com.ashampoo.xmp.XMPMetaFactory
+package de.stefan_oltmann.kim.format.xmp
+
+import de.stefan_oltmann.kim.Kim.underUnitTesting
+import de.stefan_oltmann.kim.common.GpsUtil
+import de.stefan_oltmann.kim.model.GpsCoordinates
+import de.stefan_oltmann.kim.model.LocationShown
+import de.stefan_oltmann.kim.model.MetadataSummary
+import de.stefan_oltmann.kim.model.ExifRating
+import de.stefan_oltmann.kim.model.TiffOrientation
+import de.stefan_oltmann.xmp.XMPException
+import de.stefan_oltmann.xmp.XMPMetaFactory
import kotlinx.datetime.LocalDateTime
import kotlinx.datetime.TimeZone
import kotlinx.datetime.toInstant
@@ -43,7 +43,7 @@ public object XmpReader {
@Suppress("LoopWithTooManyJumpStatements")
@Throws(XMPException::class)
@JvmStatic
- public fun readMetadata(xmp: String): PhotoMetadata {
+ public fun readMetadata(xmp: String): MetadataSummary {
val xmpMeta = XMPMetaFactory.parseFromString(xmp)
@@ -98,10 +98,10 @@ public object XmpReader {
}
/*
- * Compile into PhotoMetadata object
+ * Compile into MetadataSummary object
*/
- return PhotoMetadata(
+ return MetadataSummary(
orientation = TiffOrientation.of(xmpMeta.getOrientation()),
takenDate = takenDate,
gpsCoordinates = gpsCoordinates,
@@ -109,13 +109,12 @@ public object XmpReader {
title = xmpMeta.getTitle(),
description = xmpMeta.getDescription(),
flagged = xmpMeta.isFlagged(),
- rating = xmpMeta.getRating()?.let { PhotoRating.of(it) },
+ rating = xmpMeta.getRating()?.let { ExifRating.of(it) },
keywords = xmpMeta.getKeywords().ifEmpty {
xmpMeta.getAcdSeeKeywords()
},
faces = xmpMeta.getFaces(),
- personsInImage = xmpMeta.getPersonsInImage(),
- albums = xmpMeta.getAlbums()
+ personsInImage = xmpMeta.getPersonsInImage()
)
}
}
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/format/xmp/XmpWriter.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/xmp/XmpWriter.kt
similarity index 89%
rename from src/commonMain/kotlin/com/ashampoo/kim/format/xmp/XmpWriter.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/format/xmp/XmpWriter.kt
index 4e898b2f..6d00639f 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/format/xmp/XmpWriter.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/format/xmp/XmpWriter.kt
@@ -13,17 +13,17 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.xmp
-
-import com.ashampoo.kim.Kim.underUnitTesting
-import com.ashampoo.kim.common.GpsUtil
-import com.ashampoo.kim.model.MetadataUpdate
-import com.ashampoo.kim.model.PhotoRating
-import com.ashampoo.xmp.XMPException
-import com.ashampoo.xmp.XMPLocation
-import com.ashampoo.xmp.XMPMeta
-import com.ashampoo.xmp.XMPMetaFactory
-import com.ashampoo.xmp.options.SerializeOptions
+package de.stefan_oltmann.kim.format.xmp
+
+import de.stefan_oltmann.kim.Kim.underUnitTesting
+import de.stefan_oltmann.kim.common.GpsUtil
+import de.stefan_oltmann.kim.model.MetadataUpdate
+import de.stefan_oltmann.kim.model.ExifRating
+import de.stefan_oltmann.xmp.XMPException
+import de.stefan_oltmann.xmp.XMPLocation
+import de.stefan_oltmann.xmp.XMPMeta
+import de.stefan_oltmann.xmp.XMPMetaFactory
+import de.stefan_oltmann.xmp.options.SerializeOptions
import kotlinx.datetime.TimeZone
import kotlinx.datetime.toLocalDateTime
import kotlin.jvm.JvmStatic
@@ -148,19 +148,19 @@ public object XmpWriter {
* In the case of flagging/picking a photo a rejected
* rating will be reset to UNRATED for logical consistency.
*/
- if (update.flagged && getRating() == PhotoRating.REJECTED.value)
- setRating(PhotoRating.UNRATED.value)
+ if (update.flagged && getRating() == ExifRating.REJECTED.value)
+ setRating(ExifRating.UNRATED.value)
}
is MetadataUpdate.Rating -> {
- setRating(update.photoRating.value)
+ setRating(update.exifRating.value)
/*
* In the case of rejecting a photo a flag/pick marker
* will be removed for logical consistency.
*/
- if (update.photoRating == PhotoRating.REJECTED && isFlagged())
+ if (update.exifRating == ExifRating.REJECTED && isFlagged())
setFlagged(false)
}
@@ -172,9 +172,6 @@ public object XmpWriter {
is MetadataUpdate.Persons ->
setPersonsInImage(update.personsInImage)
-
- is MetadataUpdate.Albums ->
- setAlbums(update.albums)
}
}
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/input/ByteArrayByteReader.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/input/ByteArrayByteReader.kt
similarity index 98%
rename from src/commonMain/kotlin/com/ashampoo/kim/input/ByteArrayByteReader.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/input/ByteArrayByteReader.kt
index a2d8dd23..a1baa562 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/input/ByteArrayByteReader.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/input/ByteArrayByteReader.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.input
+package de.stefan_oltmann.kim.input
import kotlin.math.min
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/input/ByteReader.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/input/ByteReader.kt
similarity index 92%
rename from src/commonMain/kotlin/com/ashampoo/kim/input/ByteReader.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/input/ByteReader.kt
index 766eb4f1..ff0dd8b5 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/input/ByteReader.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/input/ByteReader.kt
@@ -1,4 +1,5 @@
/*
+ * Copyright 2026 Stefan Oltmann
* Copyright 2025 Ashampoo GmbH & Co. KG
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -13,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.input
+package de.stefan_oltmann.kim.input
public interface ByteReader : Closeable {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/input/ByteReaderExtensions.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/input/ByteReaderExtensions.kt
similarity index 95%
rename from src/commonMain/kotlin/com/ashampoo/kim/input/ByteReaderExtensions.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/input/ByteReaderExtensions.kt
index f0556b77..3189bf4c 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/input/ByteReaderExtensions.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/input/ByteReaderExtensions.kt
@@ -15,13 +15,13 @@
*/
@file:Suppress("TooManyFunctions")
-package com.ashampoo.kim.input
+package de.stefan_oltmann.kim.input
-import com.ashampoo.kim.common.ByteOrder
-import com.ashampoo.kim.common.ImageReadException
-import com.ashampoo.kim.common.quadsToByteArray
-import com.ashampoo.kim.common.toHex
-import com.ashampoo.kim.output.ByteArrayByteWriter
+import de.stefan_oltmann.kim.common.ByteOrder
+import de.stefan_oltmann.kim.common.ImageReadException
+import de.stefan_oltmann.kim.common.quadsToByteArray
+import de.stefan_oltmann.kim.common.toHex
+import de.stefan_oltmann.kim.output.ByteArrayByteWriter
/*
* For easier implementation of the [ByteReader] in
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/input/Closeable.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/input/Closeable.kt
similarity index 96%
rename from src/commonMain/kotlin/com/ashampoo/kim/input/Closeable.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/input/Closeable.kt
index 29614527..82ba5fa1 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/input/Closeable.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/input/Closeable.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.input
+package de.stefan_oltmann.kim.input
public fun interface Closeable {
public fun close()
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/input/Constants.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/input/Constants.kt
similarity index 95%
rename from src/commonMain/kotlin/com/ashampoo/kim/input/Constants.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/input/Constants.kt
index 58b1208d..aa4be1ea 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/input/Constants.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/input/Constants.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.input
+package de.stefan_oltmann.kim.input
/** Same as kotlin.io.DEFAULT_BUFFER_SIZE */
internal const val DEFAULT_BUFFER_SIZE: Int = 8 * 1024
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/input/DefaultRandomAccessByteReader.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/input/DefaultRandomAccessByteReader.kt
similarity index 97%
rename from src/commonMain/kotlin/com/ashampoo/kim/input/DefaultRandomAccessByteReader.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/input/DefaultRandomAccessByteReader.kt
index d593f241..e671e50c 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/input/DefaultRandomAccessByteReader.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/input/DefaultRandomAccessByteReader.kt
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.input
+package de.stefan_oltmann.kim.input
-import com.ashampoo.kim.format.jpeg.JpegConstants
+import de.stefan_oltmann.kim.format.jpeg.JpegConstants
import kotlin.math.max
/**
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/input/PrePendingByteReader.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/input/PrePendingByteReader.kt
similarity index 98%
rename from src/commonMain/kotlin/com/ashampoo/kim/input/PrePendingByteReader.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/input/PrePendingByteReader.kt
index fc871911..b2e80aa9 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/input/PrePendingByteReader.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/input/PrePendingByteReader.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.input
+package de.stefan_oltmann.kim.input
/**
* Prepends the given list of [Byte]s and continues to
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/input/RandomAccessByteReader.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/input/RandomAccessByteReader.kt
similarity index 96%
rename from src/commonMain/kotlin/com/ashampoo/kim/input/RandomAccessByteReader.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/input/RandomAccessByteReader.kt
index 6010202d..8089a7b2 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/input/RandomAccessByteReader.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/input/RandomAccessByteReader.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.input
+package de.stefan_oltmann.kim.input
/**
* Random access to the bytes are required to read TIFF files
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/model/PhotoRating.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/model/ExifRating.kt
similarity index 91%
rename from src/commonMain/kotlin/com/ashampoo/kim/model/PhotoRating.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/model/ExifRating.kt
index 34999383..b6762139 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/model/PhotoRating.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/model/ExifRating.kt
@@ -1,4 +1,5 @@
/*
+ * Copyright 2026 Stefan Oltmann
* Copyright 2025 Ashampoo GmbH & Co. KG
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -13,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.model
+package de.stefan_oltmann.kim.model
private const val REJECTED_VALUE: Int = -1
private const val UNRATED_VALUE: Int = 0
@@ -36,7 +37,7 @@ private const val FIVE_STARS_STRING: String = "★★★★★"
* which is a 5-star-system with 0 for unrated
* and -1 for rejected images.
*/
-public enum class PhotoRating(
+public enum class ExifRating(
public val value: Int,
public val string: String
) {
@@ -54,7 +55,7 @@ public enum class PhotoRating(
public val validIntRange: IntRange = REJECTED.value..FIVE_STARS.value
/* **Note:** Swift problems if parameter value is of type Int? */
- public fun of(value: Int): PhotoRating? = when (value) {
+ public fun of(value: Int): ExifRating? = when (value) {
REJECTED_VALUE -> REJECTED
UNRATED_VALUE -> UNRATED
ONE_STAR_VALUE -> ONE_STAR
@@ -65,7 +66,7 @@ public enum class PhotoRating(
else -> null
}
- public fun of(value: String?): PhotoRating? = when (value) {
+ public fun of(value: String?): ExifRating? = when (value) {
"-1" -> REJECTED
"0" -> UNRATED
"1" -> ONE_STAR
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/model/GpsCoordinates.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/model/GpsCoordinates.kt
similarity index 98%
rename from src/commonMain/kotlin/com/ashampoo/kim/model/GpsCoordinates.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/model/GpsCoordinates.kt
index 6ab390dd..1067d2fa 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/model/GpsCoordinates.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/model/GpsCoordinates.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.model
+package de.stefan_oltmann.kim.model
import kotlin.math.round
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/model/ImageSize.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/model/ImageSize.kt
similarity index 95%
rename from src/commonMain/kotlin/com/ashampoo/kim/model/ImageSize.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/model/ImageSize.kt
index caf07ff7..1a595930 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/model/ImageSize.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/model/ImageSize.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.model
+package de.stefan_oltmann.kim.model
import kotlin.math.max
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/model/LocationShown.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/model/LocationShown.kt
similarity index 97%
rename from src/commonMain/kotlin/com/ashampoo/kim/model/LocationShown.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/model/LocationShown.kt
index c901daa8..ce3cc1c3 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/model/LocationShown.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/model/LocationShown.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.model
+package de.stefan_oltmann.kim.model
/**
* Iptc4xmpExt:LocationShown
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/model/ImageFormat.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/model/MediaFormat.kt
similarity index 52%
rename from src/commonMain/kotlin/com/ashampoo/kim/model/ImageFormat.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/model/MediaFormat.kt
index 0aa52c58..34a41dd4 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/model/ImageFormat.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/model/MediaFormat.kt
@@ -1,4 +1,6 @@
/*
+ * Copyright 2026 Ramon Bouckaert
+ * Copyright 2026 Stefan Oltmann
* Copyright 2025 Ashampoo GmbH & Co. KG
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -13,40 +15,59 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.model
+package de.stefan_oltmann.kim.model
-import com.ashampoo.kim.common.startsWith
-import com.ashampoo.kim.common.startsWithNullable
-import com.ashampoo.kim.common.toSingleNumberHexes
-import com.ashampoo.kim.format.ImageFormatMagicNumbers
+import de.stefan_oltmann.kim.common.startsWith
+import de.stefan_oltmann.kim.common.startsWithNullable
+import de.stefan_oltmann.kim.common.toSingleNumberHexes
+import de.stefan_oltmann.kim.format.MediaFormatMagicNumbers
import kotlin.jvm.JvmStatic
-public enum class ImageFormat(
+public enum class MediaFormat(
+ public val type: MediaFormatType,
public val mimeType: String,
public val uniformTypeIdentifier: String,
public val fileNameExtensions: Set
) {
- JPEG("image/jpeg", "public.jpeg", setOf("jpg", "jpeg")),
- GIF("image/gif", "com.compuserve.gif", setOf("gif")),
- PNG("image/png", "public.png", setOf("png")),
- WEBP("image/webp", "org.webmproject.webp", setOf("webp")),
- TIFF("image/tiff", "public.tiff", setOf("tif", "tiff")),
- HEIC("image/heic", "public.heic", setOf("heic")),
- AVIF("image/avif", "public.avif", setOf("avif")),
- CR2("image/x-canon-cr2", "com.canon.cr2-raw-image", setOf("cr2")),
- CR3("image/x-canon-cr3", "com.canon.cr3", setOf("cr3")),
- RAF("image/x-fuji-raf", "com.fuji.raw-image", setOf("raf")),
- NEF("image/x-nikon-nef", "com.nikon.raw-image", setOf("nef")),
- ARW("image/x-sony-arw", "com.sony.raw-image", setOf("arw")),
- RW2("image/x-panasonic-rw2", "com.panasonic.raw-image", setOf("rw2")),
- ORF("image/x-olympus-orf", "com.olympus.raw-image", setOf("orf")),
- DNG("image/x-adobe-dng", "com.adobe.raw-image", setOf("dng")),
- JXL("image/jxl", "public.jxl", setOf("jxl"));
-
+ /* Images */
+ JPEG(MediaFormatType.IMAGE, "image/jpeg", "public.jpeg", setOf("jpg", "jpeg")),
+ GIF(MediaFormatType.IMAGE, "image/gif", "com.compuserve.gif", setOf("gif")),
+ PNG(MediaFormatType.IMAGE, "image/png", "public.png", setOf("png")),
+ WEBP(MediaFormatType.IMAGE, "image/webp", "org.webmproject.webp", setOf("webp")),
+ TIFF(MediaFormatType.IMAGE, "image/tiff", "public.tiff", setOf("tif", "tiff")),
+ HEIC(MediaFormatType.IMAGE, "image/heic", "public.heic", setOf("heic")),
+ AVIF(MediaFormatType.IMAGE, "image/avif", "public.avif", setOf("avif")),
+ CR2(MediaFormatType.IMAGE, "image/x-canon-cr2", "com.canon.cr2-raw-image", setOf("cr2")),
+ CR3(MediaFormatType.IMAGE, "image/x-canon-cr3", "com.canon.cr3", setOf("cr3")),
+ RAF(MediaFormatType.IMAGE, "image/x-fuji-raf", "com.fuji.raw-image", setOf("raf")),
+ NEF(MediaFormatType.IMAGE, "image/x-nikon-nef", "com.nikon.raw-image", setOf("nef")),
+ ARW(MediaFormatType.IMAGE, "image/x-sony-arw", "com.sony.raw-image", setOf("arw")),
+ RW2(MediaFormatType.IMAGE, "image/x-panasonic-rw2", "com.panasonic.raw-image", setOf("rw2")),
+ ORF(MediaFormatType.IMAGE, "image/x-olympus-orf", "com.olympus.raw-image", setOf("orf")),
+ DNG(MediaFormatType.IMAGE, "image/x-adobe-dng", "com.adobe.raw-image", setOf("dng")),
+ JXL(MediaFormatType.IMAGE, "image/jxl", "public.jxl", setOf("jxl")),
+
+ /* Videos */
+ MOV(MediaFormatType.VIDEO, "video/quicktime", "com.apple.quicktime-movie", setOf("mov")),
+ MP4(MediaFormatType.VIDEO, "video/mp4", "public.mpeg-4", setOf("mp4")),
+
+ /* Documents */
+ PDF(MediaFormatType.DOCUMENT, "application/pdf", "com.adobe.pdf", setOf("pdf"));
+
+ /**
+ * If true, KIM can embedd metadata into this kind of file.
+ */
public fun isMetadataEmbeddable(): Boolean =
this == JPEG || this == PNG || this == WEBP || this == JXL
+ /**
+ * If true, this kind of file usually contains a preview image that we can extract.
+ * Use Kim.extractPreviewImage() API for this.
+ */
+ public fun hasPreview(): Boolean =
+ this == CR2 || this == CR3 || this == RAF || this == NEF || this == ARW || this == RW2 // || this == ORF
+
public companion object {
/**
@@ -55,7 +76,7 @@ public enum class ImageFormat(
*/
public const val REQUIRED_HEADER_BYTE_COUNT_FOR_DETECTION: Int = 16
- private val allImageFormats = ImageFormat.entries
+ private val allMediaFormats = MediaFormat.entries
public val allFileNameExtensions: Set = computeAllFileNameExtensions()
@@ -75,7 +96,7 @@ public enum class ImageFormat(
val fileNameExtensions = mutableSetOf()
- for (fileType in allImageFormats)
+ for (fileType in allMediaFormats)
for (extension in fileType.fileNameExtensions)
fileNameExtensions.add(extension)
@@ -93,9 +114,9 @@ public enum class ImageFormat(
}
@JvmStatic
- public fun byMimeType(mimeType: String): ImageFormat? {
+ public fun byMimeType(mimeType: String): MediaFormat? {
- for (fileType in allImageFormats)
+ for (fileType in allMediaFormats)
if (mimeType.contentEquals(fileType.mimeType, ignoreCase = true))
return fileType
@@ -115,9 +136,9 @@ public enum class ImageFormat(
@JvmStatic
public fun byUniformTypeIdentifier(
uniformTypeIdentifier: String
- ): ImageFormat? {
+ ): MediaFormat? {
- for (fileType in allImageFormats)
+ for (fileType in allMediaFormats)
if (uniformTypeIdentifier.contentEquals(fileType.uniformTypeIdentifier, ignoreCase = true))
return fileType
@@ -125,9 +146,9 @@ public enum class ImageFormat(
}
@JvmStatic
- public fun byFileNameExtension(fileName: String): ImageFormat? {
+ public fun byFileNameExtension(fileName: String): MediaFormat? {
- for (fileType in allImageFormats)
+ for (fileType in allMediaFormats)
for (extension in fileType.fileNameExtensions)
if (fileName.endsWith(".$extension", ignoreCase = true))
return fileType
@@ -142,7 +163,7 @@ public enum class ImageFormat(
* (for example empty) than the detection returns null.
*/
@JvmStatic
- public fun detect(bytes: ByteArray): ImageFormat? {
+ public fun detect(bytes: ByteArray): MediaFormat? {
/*
* If empty or not enough bytes we can't detect the format and will return NULL.
@@ -157,37 +178,60 @@ public enum class ImageFormat(
* detections in a way that the first checks most likely hit.
*/
return when {
+
/* JPG is the most common format. Check this first. */
- bytes.startsWith(ImageFormatMagicNumbers.jpeg) -> JPEG
+ bytes.startsWith(MediaFormatMagicNumbers.jpeg) -> JPEG
+
/* Check other common formats. */
- bytes.startsWith(ImageFormatMagicNumbers.png) -> PNG
- bytes.startsWithNullable(ImageFormatMagicNumbers.webP) -> WEBP
+ bytes.startsWith(MediaFormatMagicNumbers.png) -> PNG
+ bytes.startsWithNullable(MediaFormatMagicNumbers.webP) -> WEBP
+
/* Canon CR2 et al *must* be checked before TIFF, because they are based on TIFF */
- bytes.startsWith(ImageFormatMagicNumbers.cr2) -> CR2
- bytes.startsWith(ImageFormatMagicNumbers.rw2) -> RW2
- bytes.startsWith(ImageFormatMagicNumbers.orf_iiro) -> ORF
- bytes.startsWith(ImageFormatMagicNumbers.orf_mmor) -> ORF
- bytes.startsWith(ImageFormatMagicNumbers.orf_iirs) -> ORF
- bytes.startsWith(ImageFormatMagicNumbers.raf) -> RAF
+ bytes.startsWith(MediaFormatMagicNumbers.cr2) -> CR2
+ bytes.startsWith(MediaFormatMagicNumbers.rw2) -> RW2
+ bytes.startsWith(MediaFormatMagicNumbers.orf_iiro) -> ORF
+ bytes.startsWith(MediaFormatMagicNumbers.orf_mmor) -> ORF
+ bytes.startsWith(MediaFormatMagicNumbers.orf_iirs) -> ORF
+ bytes.startsWith(MediaFormatMagicNumbers.raf) -> RAF
+
/* Check TIFF after the RAW files. */
- bytes.startsWith(ImageFormatMagicNumbers.tiffLittleEndian) -> TIFF
- bytes.startsWith(ImageFormatMagicNumbers.tiffBigEndian) -> TIFF
+ bytes.startsWith(MediaFormatMagicNumbers.tiffLittleEndian) -> TIFF
+ bytes.startsWith(MediaFormatMagicNumbers.tiffBigEndian) -> TIFF
+
/* Check JXL ISOBMFF */
- bytes.startsWith(ImageFormatMagicNumbers.jxl) -> JXL
+ bytes.startsWith(MediaFormatMagicNumbers.jxl) -> JXL
+
/* Check HEIC variants */
- bytes.startsWithNullable(ImageFormatMagicNumbers.heic) -> HEIC
- bytes.startsWithNullable(ImageFormatMagicNumbers.mif1) -> HEIC
- bytes.startsWithNullable(ImageFormatMagicNumbers.msf1) -> HEIC
- bytes.startsWithNullable(ImageFormatMagicNumbers.heix) -> HEIC
- bytes.startsWithNullable(ImageFormatMagicNumbers.hevc) -> HEIC
- bytes.startsWithNullable(ImageFormatMagicNumbers.hevx) -> HEIC
+ bytes.startsWithNullable(MediaFormatMagicNumbers.heic) -> HEIC
+ bytes.startsWithNullable(MediaFormatMagicNumbers.mif1) -> HEIC
+ bytes.startsWithNullable(MediaFormatMagicNumbers.msf1) -> HEIC
+ bytes.startsWithNullable(MediaFormatMagicNumbers.heix) -> HEIC
+ bytes.startsWithNullable(MediaFormatMagicNumbers.hevc) -> HEIC
+ bytes.startsWithNullable(MediaFormatMagicNumbers.hevx) -> HEIC
+
/* Check AVIF */
- bytes.startsWithNullable(ImageFormatMagicNumbers.avif) -> AVIF
+ bytes.startsWithNullable(MediaFormatMagicNumbers.avif) -> AVIF
+ bytes.startsWithNullable(MediaFormatMagicNumbers.avis) -> AVIF
/* Check CR3 */
- bytes.startsWithNullable(ImageFormatMagicNumbers.cr3) -> CR3
+ bytes.startsWithNullable(MediaFormatMagicNumbers.cr3) -> CR3
+
/* Check GIF and other unlikely formats... */
- bytes.startsWith(ImageFormatMagicNumbers.gif87a) -> GIF
- bytes.startsWith(ImageFormatMagicNumbers.gif89a) -> GIF
+ bytes.startsWith(MediaFormatMagicNumbers.gif87a) -> GIF
+ bytes.startsWith(MediaFormatMagicNumbers.gif89a) -> GIF
+
+ /* Check MP4 video formats */
+ bytes.startsWithNullable(MediaFormatMagicNumbers.mp42) -> MP4
+ bytes.startsWithNullable(MediaFormatMagicNumbers.mp41) -> MP4
+ bytes.startsWithNullable(MediaFormatMagicNumbers.isom) -> MP4
+ bytes.startsWithNullable(MediaFormatMagicNumbers.iso2) -> MP4
+ bytes.startsWithNullable(MediaFormatMagicNumbers.avc1) -> MP4
+
+ /* Check QuickTime video format */
+ bytes.startsWithNullable(MediaFormatMagicNumbers.qt) -> MOV
+
+ /* Check document formats */
+ bytes.startsWith(MediaFormatMagicNumbers.pdf) -> PDF
+
else -> null
}
}
diff --git a/src/jsTest/kotlin/com/ashampoo/kim/ResourcePath.js.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/model/MediaFormatType.kt
similarity index 73%
rename from src/jsTest/kotlin/com/ashampoo/kim/ResourcePath.js.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/model/MediaFormatType.kt
index 067606ef..e6a4c919 100644
--- a/src/jsTest/kotlin/com/ashampoo/kim/ResourcePath.js.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/model/MediaFormatType.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2025 Ashampoo GmbH & Co. KG
+ * Copyright 2026 Stefan Oltmann
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -13,6 +13,15 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim
+package de.stefan_oltmann.kim.model
-actual fun getPathForResource(path: String): String = path
+/**
+ * Describes the kind of media format.
+ */
+public enum class MediaFormatType {
+
+ IMAGE,
+ VIDEO,
+ AUDIO,
+ DOCUMENT
+}
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/model/PhotoMetadata.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/model/MetadataSummary.kt
similarity index 81%
rename from src/commonMain/kotlin/com/ashampoo/kim/model/PhotoMetadata.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/model/MetadataSummary.kt
index 4df75782..da86fec6 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/model/PhotoMetadata.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/model/MetadataSummary.kt
@@ -1,4 +1,5 @@
/*
+ * Copyright 2026 Stefan Oltmann
* Copyright 2025 Ashampoo GmbH & Co. KG
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -13,18 +14,17 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.model
+package de.stefan_oltmann.kim.model
-import com.ashampoo.kim.common.PhotoValueFormatter
-import com.ashampoo.xmp.XMPRegionArea
+import de.stefan_oltmann.kim.common.KimValueFormatter
+import de.stefan_oltmann.xmp.XMPRegionArea
/**
- * Represents a high-level summary of image metadata extracted from raw ImageMetadata.
- * This summary is used by Ashampoo Photo Organizer.
+ * Represents a high-level summary of image metadata extracted from raw MediaMetadata.
*/
-public data class PhotoMetadata(
+public data class MetadataSummary(
- val imageFormat: ImageFormat? = null,
+ val mediaFormat: MediaFormat? = null,
/* Image resolution */
val widthPx: Int? = null,
@@ -52,16 +52,13 @@ public data class PhotoMetadata(
/* Ratings & Tags */
val flagged: Boolean = false,
- val rating: PhotoRating? = null,
+ val rating: ExifRating? = null,
val keywords: Set = emptySet(),
/* Persons */
val faces: Map = emptyMap(),
val personsInImage: Set = emptySet(),
- /* Albums */
- val albums: Set = emptySet(),
-
/* EXIF Thumbnail (IFD1) */
val thumbnailImageSize: ImageSize? = null,
val thumbnailBytes: ByteArray? = null
@@ -72,23 +69,23 @@ public data class PhotoMetadata(
get() = if (widthPx == null || heightPx == null)
0
else
- (widthPx * heightPx).div(PhotoValueFormatter.MEGA_PIXEL_COUNT)
+ (widthPx * heightPx).div(KimValueFormatter.MEGA_PIXEL_COUNT)
val locationDisplay: String?
get() = locationShown?.displayString
?: gpsCoordinates?.let { "GPS: " + gpsCoordinates.latLongString }
val cameraName: String?
- get() = PhotoValueFormatter.createCameraOrLensName(cameraMake, cameraModel)
+ get() = KimValueFormatter.createCameraOrLensName(cameraMake, cameraModel)
val lensName: String?
- get() = PhotoValueFormatter.createModifiedLensName(
+ get() = KimValueFormatter.createModifiedLensName(
cameraName = cameraName,
- lensName = PhotoValueFormatter.createCameraOrLensName(lensMake, lensModel)
+ lensName = KimValueFormatter.createCameraOrLensName(lensMake, lensModel)
)
val cameraAndLensName: String?
- get() = PhotoValueFormatter.createCameraAndLensName(
+ get() = KimValueFormatter.createCameraAndLensName(
cameraName = cameraName,
lensName = lensName
)
@@ -102,7 +99,7 @@ public data class PhotoMetadata(
@Suppress("DataClassContainsFunctions")
public fun isEmpty(): Boolean =
- this == emptyPhotoMetadata
+ this == emptySummary
/**
* Combine the current metadata with the given one,
@@ -114,14 +111,14 @@ public data class PhotoMetadata(
* If the other metadata is NULL the same object is returned.
* This API is provided to chain it.
*/
- public fun merge(other: PhotoMetadata?): PhotoMetadata {
+ public fun merge(other: MetadataSummary?): MetadataSummary {
if (other == null)
return this
return this.copy(
- imageFormat = imageFormat ?: other.imageFormat,
+ mediaFormat = mediaFormat ?: other.mediaFormat,
/* Image resolution */
widthPx = widthPx ?: other.widthPx,
@@ -156,9 +153,6 @@ public data class PhotoMetadata(
faces = faces.ifEmpty { other.faces },
personsInImage = personsInImage.ifEmpty { other.personsInImage },
- /* Albums */
- albums = albums.ifEmpty { other.albums },
-
/* EXIF Thumbnail (IFD1) */
thumbnailImageSize = thumbnailImageSize ?: other.thumbnailImageSize,
thumbnailBytes = thumbnailBytes ?: other.thumbnailBytes
@@ -167,6 +161,6 @@ public data class PhotoMetadata(
public companion object {
- public val emptyPhotoMetadata: PhotoMetadata = PhotoMetadata()
+ public val emptySummary: MetadataSummary = MetadataSummary()
}
}
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/model/MetadataUpdate.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/model/MetadataUpdate.kt
similarity index 85%
rename from src/commonMain/kotlin/com/ashampoo/kim/model/MetadataUpdate.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/model/MetadataUpdate.kt
index 0de7effe..fff12b75 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/model/MetadataUpdate.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/model/MetadataUpdate.kt
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.model
+package de.stefan_oltmann.kim.model
-import com.ashampoo.xmp.XMPRegionArea
+import de.stefan_oltmann.xmp.XMPRegionArea
/**
* Represents possible updates that can be performed.
@@ -40,7 +40,7 @@ public sealed interface MetadataUpdate {
* New GPS coordinates or NULL to remove it (if the location is wrong and/or not known)
*/
public data class GpsCoordinates(
- val gpsCoordinates: com.ashampoo.kim.model.GpsCoordinates?
+ val gpsCoordinates: de.stefan_oltmann.kim.model.GpsCoordinates?
) : MetadataUpdate
/**
@@ -49,15 +49,15 @@ public sealed interface MetadataUpdate {
* This is in the sense of Iptc4xmpExt:LocationShown
*/
public data class LocationShown(
- val locationShown: com.ashampoo.kim.model.LocationShown?
+ val locationShown: de.stefan_oltmann.kim.model.LocationShown?
) : MetadataUpdate
/*
* One-shot update GPS coordinates & location
*/
public data class GpsCoordinatesAndLocationShown(
- val gpsCoordinates: com.ashampoo.kim.model.GpsCoordinates?,
- val locationShown: com.ashampoo.kim.model.LocationShown?
+ val gpsCoordinates: de.stefan_oltmann.kim.model.GpsCoordinates?,
+ val locationShown: de.stefan_oltmann.kim.model.LocationShown?
) : MetadataUpdate
/**
@@ -92,7 +92,7 @@ public sealed interface MetadataUpdate {
* will be removed for logical consistency.
*/
public data class Rating(
- val photoRating: PhotoRating
+ val exifRating: ExifRating
) : MetadataUpdate
/**
@@ -118,11 +118,4 @@ public sealed interface MetadataUpdate {
val personsInImage: Set
) : MetadataUpdate
- /**
- * List of new albums to set. An empty list removes all albums.
- */
- public data class Albums(
- val albums: Set
- ) : MetadataUpdate
-
}
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/model/TiffOrientation.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/model/TiffOrientation.kt
similarity index 99%
rename from src/commonMain/kotlin/com/ashampoo/kim/model/TiffOrientation.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/model/TiffOrientation.kt
index d4a911f9..887332a8 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/model/TiffOrientation.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/model/TiffOrientation.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.model
+package de.stefan_oltmann.kim.model
@Suppress("MagicNumber")
public enum class TiffOrientation(
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/output/BigEndianBinaryByteWriter.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/output/BigEndianBinaryByteWriter.kt
similarity index 97%
rename from src/commonMain/kotlin/com/ashampoo/kim/output/BigEndianBinaryByteWriter.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/output/BigEndianBinaryByteWriter.kt
index df160acc..020af559 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/output/BigEndianBinaryByteWriter.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/output/BigEndianBinaryByteWriter.kt
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.output
+package de.stefan_oltmann.kim.output
@Suppress("MagicNumber")
internal class BigEndianBinaryByteWriter(byteWriter: ByteWriter) : BinaryByteWriter(byteWriter) {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/output/BinaryByteWriter.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/output/BinaryByteWriter.kt
similarity index 93%
rename from src/commonMain/kotlin/com/ashampoo/kim/output/BinaryByteWriter.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/output/BinaryByteWriter.kt
index f5e50497..ed0862fe 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/output/BinaryByteWriter.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/output/BinaryByteWriter.kt
@@ -14,9 +14,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.output
+package de.stefan_oltmann.kim.output
-import com.ashampoo.kim.common.ByteOrder
+import de.stefan_oltmann.kim.common.ByteOrder
public abstract class BinaryByteWriter(
public val byteWriter: ByteWriter
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/output/BufferByteWriter.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/output/BufferByteWriter.kt
similarity index 93%
rename from src/commonMain/kotlin/com/ashampoo/kim/output/BufferByteWriter.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/output/BufferByteWriter.kt
index 231dd938..512d7055 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/output/BufferByteWriter.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/output/BufferByteWriter.kt
@@ -14,9 +14,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.output
+package de.stefan_oltmann.kim.output
-import com.ashampoo.kim.common.ImageWriteException
+import de.stefan_oltmann.kim.common.ImageWriteException
internal class BufferByteWriter(
private val buffer: ByteArray,
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/output/ByteArrayByteWriter.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/output/ByteArrayByteWriter.kt
similarity index 92%
rename from src/commonMain/kotlin/com/ashampoo/kim/output/ByteArrayByteWriter.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/output/ByteArrayByteWriter.kt
index 210cafcb..7e0ba75b 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/output/ByteArrayByteWriter.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/output/ByteArrayByteWriter.kt
@@ -14,10 +14,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.output
+package de.stefan_oltmann.kim.output
-import com.ashampoo.kim.input.Closeable
-import com.ashampoo.kim.input.DEFAULT_BUFFER_SIZE
+import de.stefan_oltmann.kim.input.Closeable
+import de.stefan_oltmann.kim.input.DEFAULT_BUFFER_SIZE
public class ByteArrayByteWriter : ByteWriter, Closeable {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/output/ByteWriter.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/output/ByteWriter.kt
similarity index 90%
rename from src/commonMain/kotlin/com/ashampoo/kim/output/ByteWriter.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/output/ByteWriter.kt
index 8d53292f..371519f3 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/output/ByteWriter.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/output/ByteWriter.kt
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.output
+package de.stefan_oltmann.kim.output
-import com.ashampoo.kim.input.Closeable
+import de.stefan_oltmann.kim.input.Closeable
public interface ByteWriter : Closeable {
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/output/ByteWriterExtensions.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/output/ByteWriterExtensions.kt
similarity index 96%
rename from src/commonMain/kotlin/com/ashampoo/kim/output/ByteWriterExtensions.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/output/ByteWriterExtensions.kt
index 98d17c29..33cd2983 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/output/ByteWriterExtensions.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/output/ByteWriterExtensions.kt
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.output
+package de.stefan_oltmann.kim.output
-import com.ashampoo.kim.common.ByteOrder
+import de.stefan_oltmann.kim.common.ByteOrder
/*
* For easier implementation of the [ByteWriter] in
diff --git a/src/commonMain/kotlin/com/ashampoo/kim/output/LittleEndianBinaryByteWriter.kt b/src/commonMain/kotlin/de/stefan_oltmann/kim/output/LittleEndianBinaryByteWriter.kt
similarity index 97%
rename from src/commonMain/kotlin/com/ashampoo/kim/output/LittleEndianBinaryByteWriter.kt
rename to src/commonMain/kotlin/de/stefan_oltmann/kim/output/LittleEndianBinaryByteWriter.kt
index 8c671f09..9d2670de 100644
--- a/src/commonMain/kotlin/com/ashampoo/kim/output/LittleEndianBinaryByteWriter.kt
+++ b/src/commonMain/kotlin/de/stefan_oltmann/kim/output/LittleEndianBinaryByteWriter.kt
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.output
+package de.stefan_oltmann.kim.output
@Suppress("MagicNumber")
internal class LittleEndianBinaryByteWriter(byteWriter: ByteWriter) : BinaryByteWriter(byteWriter) {
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/ResourcePath.kt b/src/commonTest/kotlin/com/ashampoo/kim/ResourcePath.kt
deleted file mode 100644
index 63ff5691..00000000
--- a/src/commonTest/kotlin/com/ashampoo/kim/ResourcePath.kt
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * Copyright 2025 Ashampoo GmbH & Co. KG
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.ashampoo.kim
-
-expect fun getPathForResource(path: String): String
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/bmff/BoxReaderTest.kt b/src/commonTest/kotlin/com/ashampoo/kim/format/bmff/BoxReaderTest.kt
deleted file mode 100644
index 4f9238ab..00000000
--- a/src/commonTest/kotlin/com/ashampoo/kim/format/bmff/BoxReaderTest.kt
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright 2025 Ashampoo GmbH & Co. KG
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.ashampoo.kim.format.bmff
-
-import com.ashampoo.kim.format.bmff.box.BoxContainer
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.testdata.KimTestData
-import kotlin.test.Test
-import kotlin.test.assertEquals
-
-class BoxReaderTest {
-
- @Test
- fun testExtractMetadataBytes() {
-
- val bytes = KimTestData.getBytesOf(KimTestData.HEIC_TEST_IMAGE_INDEX)
-
- val byteReader = ByteArrayByteReader(bytes)
-
- val boxes = BoxReader.readBoxes(
- byteReader = byteReader,
- stopAfterMetadataRead = false
- )
-
- val allBoxes = BoxContainer.findAllBoxesRecursive(boxes)
-
- assertEquals(0, allBoxes.first { it.type == BoxType.FTYP }.offset)
- assertEquals(36, allBoxes.first { it.type == BoxType.META }.offset)
- assertEquals(48, allBoxes.first { it.type == BoxType.HDLR }.offset)
- assertEquals(118, allBoxes.first { it.type == BoxType.PITM }.offset)
- assertEquals(132, allBoxes.first { it.type == BoxType.IINF }.offset)
- assertEquals(144, allBoxes.first { it.type == BoxType.INFE }.offset)
- assertEquals(2572, allBoxes.first { it.type == BoxType.ILOC }.offset)
- assertEquals(3404, allBoxes.first { it.type == BoxType.MDAT }.offset)
- }
-}
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_description.jxl.txt b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_description.jxl.txt
deleted file mode 100644
index 5b58f8f2..00000000
--- a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_description.jxl.txt
+++ /dev/null
@@ -1,290 +0,0 @@
-File format : JXL
-Resolution : null
----- TIFF ----
-Version 42
-Little-endian (Intel, II)
----- Directory IFD0 @ 8 ----
-0000000010 0x010e ImageDescription = Äußerst süße Vögel fliegen durch die Lüfte.
-0000000022 0x010f Make = SONY
-0000000034 0x0110 Model = DSC-RX100
-0000000046 0x0112 Orientation = 1
-0000000058 0x011a XResolution = 240/1 (240.0)
-0000000070 0x011b YResolution = 240/1 (240.0)
-0000000082 0x0128 ResolutionUnit = 2
-0000000094 0x0131 Software = Adobe Photoshop Lightroom Classic 8.3.1 (Windows)
-0000000106 0x0132 ModifyDate = 2019:08:04 21:22:41
-0000000118 0x8769 ExifOffset = 286
-
----- Directory ExifIFD @ 286 ----
-0000000288 0x829a ExposureTime = 1/250 (0.004)
-0000000300 0x829d FNumber = 8/1 (8.0)
-0000000312 0x8822 ExposureProgram = 1
-0000000324 0x8827 ISO = 125
-0000000336 0x8830 SensitivityType = 2
-0000000348 0x8832 RecommendedExposureIndex = 125
-0000000360 0x9000 ExifVersion = [0x30, 0x32, 0x33, 0x31]
-0000000372 0x9003 DateTimeOriginal = 2019:02:25 06:14:16
-0000000384 0x9004 DateTimeDigitized = 2019:02:25 06:14:16
-0000000396 0x9010 OffsetTime = +02:00
-0000000408 0x9201 ShutterSpeedValue = 7965784/1000000 (7.965784)
-0000000420 0x9202 ApertureValue = 6/1 (6.0)
-0000000432 0x9203 BrightnessValue = 17574/2560 (6.864844)
-0000000444 0x9204 ExposureCompensation = 0/10 (0.0)
-0000000456 0x9205 MaxApertureValue = 434/256 (1.695313)
-0000000468 0x9207 MeteringMode = 3
-0000000480 0x9208 LightSource = 0
-0000000492 0x9209 Flash = 15
-0000000504 0x920a FocalLength = 1040/100 (10.4)
-0000000516 0xa001 ColorSpace = 1
-0000000528 0xa20e FocalPlaneXResolution = 135838255/32768 (4145.454559)
-0000000540 0xa20f FocalPlaneYResolution = 135838255/32768 (4145.454559)
-0000000552 0xa210 FocalPlaneResolutionUnit = 3
-0000000564 0xa300 FileSource = 3
-0000000576 0xa301 SceneType = 1
-0000000588 0xa401 CustomRendered = 0
-0000000600 0xa402 ExposureMode = 1
-0000000612 0xa403 WhiteBalance = 0
-0000000624 0xa404 DigitalZoomRatio = 16/16 (1.0)
-0000000636 0xa405 FocalLengthIn35mmFormat = 28
-0000000648 0xa406 SceneCaptureType = 0
-0000000660 0xa408 Contrast = 0
-0000000672 0xa409 Saturation = 0
-0000000684 0xa40a Sharpness = 0
-0000000696 0xa432 LensSpecification = [1040/100 (10.4), 3710/100 (37.1), 18/10 (1.8), 49/10 (4.9)]
-0000000708 0xa434 LensModel = 28-100mm F1.8-4.9
-
----- Directory IFD1 @ 910 ----
-0000000912 0x0103 Compression = 6
-0000000924 0x011a XResolution = 72/1 (72.0)
-0000000936 0x011b YResolution = 72/1 (72.0)
-0000000948 0x0128 ResolutionUnit = 2
-0000000960 0x0201 JpgFromRawStart = 1004
-0000000972 0x0202 JpgFromRawLength = 11246
-
----- XMP ----
-
-
-
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- Äußerst süße Vögel fliegen durch die Lüfte.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_flagged.jxl b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_flagged.jxl
deleted file mode 100644
index b9d3a885..00000000
Binary files a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_flagged.jxl and /dev/null differ
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_flagged.jxl.txt b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_flagged.jxl.txt
deleted file mode 100644
index 69b76c27..00000000
--- a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_flagged.jxl.txt
+++ /dev/null
@@ -1,291 +0,0 @@
-File format : JXL
-Resolution : null
----- TIFF ----
-Version 42
-Little-endian (Intel, II)
----- Directory IFD0 @ 8 ----
-0000000010 0x010f Make = SONY
-0000000022 0x0110 Model = DSC-RX100
-0000000034 0x011a XResolution = 240/1 (240.0)
-0000000046 0x011b YResolution = 240/1 (240.0)
-0000000058 0x0128 ResolutionUnit = 2
-0000000070 0x0131 Software = Adobe Photoshop Lightroom Classic 8.3.1 (Windows)
-0000000082 0x0132 ModifyDate = 2019:08:04 21:22:41
-0000000094 0x8769 ExifOffset = 212
-
----- Directory ExifIFD @ 212 ----
-0000000214 0x829a ExposureTime = 1/250 (0.004)
-0000000226 0x829d FNumber = 8/1 (8.0)
-0000000238 0x8822 ExposureProgram = 1
-0000000250 0x8827 ISO = 125
-0000000262 0x8830 SensitivityType = 2
-0000000274 0x8832 RecommendedExposureIndex = 125
-0000000286 0x9000 ExifVersion = [0x30, 0x32, 0x33, 0x31]
-0000000298 0x9003 DateTimeOriginal = 2019:02:25 06:14:16
-0000000310 0x9004 DateTimeDigitized = 2019:02:25 06:14:16
-0000000322 0x9010 OffsetTime = +02:00
-0000000334 0x9201 ShutterSpeedValue = 7965784/1000000 (7.965784)
-0000000346 0x9202 ApertureValue = 6/1 (6.0)
-0000000358 0x9203 BrightnessValue = 17574/2560 (6.864844)
-0000000370 0x9204 ExposureCompensation = 0/10 (0.0)
-0000000382 0x9205 MaxApertureValue = 434/256 (1.695313)
-0000000394 0x9207 MeteringMode = 3
-0000000406 0x9208 LightSource = 0
-0000000418 0x9209 Flash = 15
-0000000430 0x920a FocalLength = 1040/100 (10.4)
-0000000442 0xa001 ColorSpace = 1
-0000000454 0xa20e FocalPlaneXResolution = 135838255/32768 (4145.454559)
-0000000466 0xa20f FocalPlaneYResolution = 135838255/32768 (4145.454559)
-0000000478 0xa210 FocalPlaneResolutionUnit = 3
-0000000490 0xa300 FileSource = 3
-0000000502 0xa301 SceneType = 1
-0000000514 0xa401 CustomRendered = 0
-0000000526 0xa402 ExposureMode = 1
-0000000538 0xa403 WhiteBalance = 0
-0000000550 0xa404 DigitalZoomRatio = 16/16 (1.0)
-0000000562 0xa405 FocalLengthIn35mmFormat = 28
-0000000574 0xa406 SceneCaptureType = 0
-0000000586 0xa408 Contrast = 0
-0000000598 0xa409 Saturation = 0
-0000000610 0xa40a Sharpness = 0
-0000000622 0xa432 LensSpecification = [1040/100 (10.4), 3710/100 (37.1), 18/10 (1.8), 49/10 (4.9)]
-0000000634 0xa434 LensModel = 28-100mm F1.8-4.9
-
----- Directory IFD1 @ 836 ----
-0000000838 0x0103 Compression = 6
-0000000850 0x011a XResolution = 72/1 (72.0)
-0000000862 0x011b YResolution = 72/1 (72.0)
-0000000874 0x0128 ResolutionUnit = 2
-0000000886 0x0201 JpgFromRawStart = 930
-0000000898 0x0202 JpgFromRawLength = 11246
-
----- XMP ----
-
-
-
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_flagged.no_metadata.jxl b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_flagged.no_metadata.jxl
deleted file mode 100644
index c1d62432..00000000
Binary files a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_flagged.no_metadata.jxl and /dev/null differ
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_flagged.no_metadata.jxl.txt b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_flagged.no_metadata.jxl.txt
deleted file mode 100644
index 7e06ac22..00000000
--- a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_flagged.no_metadata.jxl.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-File format : JXL
-Resolution : null
----- XMP ----
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_gps_coordinates.jxl b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_gps_coordinates.jxl
deleted file mode 100644
index b77cbe27..00000000
Binary files a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_gps_coordinates.jxl and /dev/null differ
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_gps_coordinates_and_location_shown.no_metadata.jxl b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_gps_coordinates_and_location_shown.no_metadata.jxl
deleted file mode 100644
index 87451330..00000000
Binary files a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_gps_coordinates_and_location_shown.no_metadata.jxl and /dev/null differ
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_gps_coordinates_and_location_shown.no_metadata.jxl.txt b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_gps_coordinates_and_location_shown.no_metadata.jxl.txt
deleted file mode 100644
index da268bbb..00000000
--- a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_gps_coordinates_and_location_shown.no_metadata.jxl.txt
+++ /dev/null
@@ -1,55 +0,0 @@
-File format : JXL
-Resolution : null
----- TIFF ----
-Version 42
-Big-endian (Motorola, MM)
----- Directory IFD0 @ 8 ----
-0000000010 0x8769 ExifOffset = 40
-0000000022 0x8825 GPSInfo = 48
-
----- Directory ExifIFD @ 40 ----
-
----- Directory GPS @ 48 ----
-0000000050 0x0000 GPSVersionID = [0x02, 0x03, 0x00, 0x00]
-0000000062 0x0001 GPSLatitudeRef = N
-0000000074 0x0002 GPSLatitude = [53/1 (53.0), 13/1 (13.0), 24519/2500 (9.8076)]
-0000000086 0x0003 GPSLongitudeRef = E
-0000000098 0x0004 GPSLongitude = [8/1 (8.0), 14/1 (14.0), 56949/2500 (22.7796)]
-
----- XMP ----
-
-
-
-
-
-
-
-
-
-
- //CRASH
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_keywords.jxl b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_keywords.jxl
deleted file mode 100644
index 7749c5aa..00000000
Binary files a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_keywords.jxl and /dev/null differ
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_keywords.no_metadata.jxl.txt b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_keywords.no_metadata.jxl.txt
deleted file mode 100644
index 240572b7..00000000
--- a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_keywords.no_metadata.jxl.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-File format : JXL
-Resolution : null
----- XMP ----
-
-
-
-
-
-
- hello
- test
- Äußerst öffentlich
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_location_shown.no_metadata.jxl b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_location_shown.no_metadata.jxl
deleted file mode 100644
index 7ae84cbf..00000000
Binary files a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_location_shown.no_metadata.jxl and /dev/null differ
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_persons.no_metadata.jxl.txt b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_persons.no_metadata.jxl.txt
deleted file mode 100644
index 174ce279..00000000
--- a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_persons.no_metadata.jxl.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-File format : JXL
-Resolution : null
----- XMP ----
-
-
-
-
-
-
- Dora
- Swiper
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_rating.jxl b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_rating.jxl
deleted file mode 100644
index dd5d3365..00000000
Binary files a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_rating.jxl and /dev/null differ
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_rating.jxl.txt b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_rating.jxl.txt
deleted file mode 100644
index 057374bb..00000000
--- a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_rating.jxl.txt
+++ /dev/null
@@ -1,283 +0,0 @@
-File format : JXL
-Resolution : null
----- TIFF ----
-Version 42
-Little-endian (Intel, II)
----- Directory IFD0 @ 8 ----
-0000000010 0x010f Make = SONY
-0000000022 0x0110 Model = DSC-RX100
-0000000034 0x011a XResolution = 240/1 (240.0)
-0000000046 0x011b YResolution = 240/1 (240.0)
-0000000058 0x0128 ResolutionUnit = 2
-0000000070 0x0131 Software = Adobe Photoshop Lightroom Classic 8.3.1 (Windows)
-0000000082 0x0132 ModifyDate = 2019:08:04 21:22:41
-0000000094 0x8769 ExifOffset = 212
-
----- Directory ExifIFD @ 212 ----
-0000000214 0x829a ExposureTime = 1/250 (0.004)
-0000000226 0x829d FNumber = 8/1 (8.0)
-0000000238 0x8822 ExposureProgram = 1
-0000000250 0x8827 ISO = 125
-0000000262 0x8830 SensitivityType = 2
-0000000274 0x8832 RecommendedExposureIndex = 125
-0000000286 0x9000 ExifVersion = [0x30, 0x32, 0x33, 0x31]
-0000000298 0x9003 DateTimeOriginal = 2019:02:25 06:14:16
-0000000310 0x9004 DateTimeDigitized = 2019:02:25 06:14:16
-0000000322 0x9010 OffsetTime = +02:00
-0000000334 0x9201 ShutterSpeedValue = 7965784/1000000 (7.965784)
-0000000346 0x9202 ApertureValue = 6/1 (6.0)
-0000000358 0x9203 BrightnessValue = 17574/2560 (6.864844)
-0000000370 0x9204 ExposureCompensation = 0/10 (0.0)
-0000000382 0x9205 MaxApertureValue = 434/256 (1.695313)
-0000000394 0x9207 MeteringMode = 3
-0000000406 0x9208 LightSource = 0
-0000000418 0x9209 Flash = 15
-0000000430 0x920a FocalLength = 1040/100 (10.4)
-0000000442 0xa001 ColorSpace = 1
-0000000454 0xa20e FocalPlaneXResolution = 135838255/32768 (4145.454559)
-0000000466 0xa20f FocalPlaneYResolution = 135838255/32768 (4145.454559)
-0000000478 0xa210 FocalPlaneResolutionUnit = 3
-0000000490 0xa300 FileSource = 3
-0000000502 0xa301 SceneType = 1
-0000000514 0xa401 CustomRendered = 0
-0000000526 0xa402 ExposureMode = 1
-0000000538 0xa403 WhiteBalance = 0
-0000000550 0xa404 DigitalZoomRatio = 16/16 (1.0)
-0000000562 0xa405 FocalLengthIn35mmFormat = 28
-0000000574 0xa406 SceneCaptureType = 0
-0000000586 0xa408 Contrast = 0
-0000000598 0xa409 Saturation = 0
-0000000610 0xa40a Sharpness = 0
-0000000622 0xa432 LensSpecification = [1040/100 (10.4), 3710/100 (37.1), 18/10 (1.8), 49/10 (4.9)]
-0000000634 0xa434 LensModel = 28-100mm F1.8-4.9
-
----- Directory IFD1 @ 836 ----
-0000000838 0x0103 Compression = 6
-0000000850 0x011a XResolution = 72/1 (72.0)
-0000000862 0x011b YResolution = 72/1 (72.0)
-0000000874 0x0128 ResolutionUnit = 2
-0000000886 0x0201 JpgFromRawStart = 930
-0000000898 0x0202 JpgFromRawLength = 11246
-
----- XMP ----
-
-
-
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_rating.no_metadata.jxl.txt b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_rating.no_metadata.jxl.txt
deleted file mode 100644
index c42f0d0b..00000000
--- a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_rating.no_metadata.jxl.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-File format : JXL
-Resolution : null
----- XMP ----
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_taken_date.jxl b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_taken_date.jxl
deleted file mode 100644
index ba90b3ec..00000000
Binary files a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_taken_date.jxl and /dev/null differ
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_taken_date.jxl.txt b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_taken_date.jxl.txt
deleted file mode 100644
index 167671b8..00000000
--- a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_taken_date.jxl.txt
+++ /dev/null
@@ -1,286 +0,0 @@
-File format : JXL
-Resolution : null
----- TIFF ----
-Version 42
-Little-endian (Intel, II)
----- Directory IFD0 @ 8 ----
-0000000010 0x010f Make = SONY
-0000000022 0x0110 Model = DSC-RX100
-0000000034 0x0112 Orientation = 1
-0000000046 0x011a XResolution = 240/1 (240.0)
-0000000058 0x011b YResolution = 240/1 (240.0)
-0000000070 0x0128 ResolutionUnit = 2
-0000000082 0x0131 Software = Adobe Photoshop Lightroom Classic 8.3.1 (Windows)
-0000000094 0x0132 ModifyDate = 2019:08:04 21:22:41
-0000000106 0x8769 ExifOffset = 224
-
----- Directory ExifIFD @ 224 ----
-0000000226 0x829a ExposureTime = 1/250 (0.004)
-0000000238 0x829d FNumber = 8/1 (8.0)
-0000000250 0x8822 ExposureProgram = 1
-0000000262 0x8827 ISO = 125
-0000000274 0x8830 SensitivityType = 2
-0000000286 0x8832 RecommendedExposureIndex = 125
-0000000298 0x9000 ExifVersion = [0x30, 0x32, 0x33, 0x31]
-0000000310 0x9003 DateTimeOriginal = 2023:07:12 14:48:45
-0000000322 0x9004 DateTimeDigitized = 2023:07:12 14:48:45
-0000000334 0x9010 OffsetTime = +02:00
-0000000346 0x9201 ShutterSpeedValue = 7965784/1000000 (7.965784)
-0000000358 0x9202 ApertureValue = 6/1 (6.0)
-0000000370 0x9203 BrightnessValue = 17574/2560 (6.864844)
-0000000382 0x9204 ExposureCompensation = 0/10 (0.0)
-0000000394 0x9205 MaxApertureValue = 434/256 (1.695313)
-0000000406 0x9207 MeteringMode = 3
-0000000418 0x9208 LightSource = 0
-0000000430 0x9209 Flash = 15
-0000000442 0x920a FocalLength = 1040/100 (10.4)
-0000000454 0xa001 ColorSpace = 1
-0000000466 0xa20e FocalPlaneXResolution = 135838255/32768 (4145.454559)
-0000000478 0xa20f FocalPlaneYResolution = 135838255/32768 (4145.454559)
-0000000490 0xa210 FocalPlaneResolutionUnit = 3
-0000000502 0xa300 FileSource = 3
-0000000514 0xa301 SceneType = 1
-0000000526 0xa401 CustomRendered = 0
-0000000538 0xa402 ExposureMode = 1
-0000000550 0xa403 WhiteBalance = 0
-0000000562 0xa404 DigitalZoomRatio = 16/16 (1.0)
-0000000574 0xa405 FocalLengthIn35mmFormat = 28
-0000000586 0xa406 SceneCaptureType = 0
-0000000598 0xa408 Contrast = 0
-0000000610 0xa409 Saturation = 0
-0000000622 0xa40a Sharpness = 0
-0000000634 0xa432 LensSpecification = [1040/100 (10.4), 3710/100 (37.1), 18/10 (1.8), 49/10 (4.9)]
-0000000646 0xa434 LensModel = 28-100mm F1.8-4.9
-
----- Directory IFD1 @ 848 ----
-0000000850 0x0103 Compression = 6
-0000000862 0x011a XResolution = 72/1 (72.0)
-0000000874 0x011b YResolution = 72/1 (72.0)
-0000000886 0x0128 ResolutionUnit = 2
-0000000898 0x0201 JpgFromRawStart = 942
-0000000910 0x0202 JpgFromRawLength = 11246
-
----- XMP ----
-
-
-
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_taken_date.no_metadata.jxl b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_taken_date.no_metadata.jxl
deleted file mode 100644
index 382a2f72..00000000
Binary files a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_taken_date.no_metadata.jxl and /dev/null differ
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_taken_date.no_metadata.jxl.txt b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_taken_date.no_metadata.jxl.txt
deleted file mode 100644
index 5aa0245c..00000000
--- a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_taken_date.no_metadata.jxl.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-File format : JXL
-Resolution : null
----- TIFF ----
-Version 42
-Big-endian (Motorola, MM)
----- Directory IFD0 @ 8 ----
-0000000010 0x8769 ExifOffset = 28
-
----- Directory ExifIFD @ 28 ----
-0000000030 0x9003 DateTimeOriginal = 2023:07:12 14:48:45
-0000000042 0x9004 DateTimeDigitized = 2023:07:12 14:48:45
-
----- XMP ----
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_title.jxl b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_title.jxl
deleted file mode 100644
index 2476f7fc..00000000
Binary files a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_title.jxl and /dev/null differ
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_title.jxl.txt b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_title.jxl.txt
deleted file mode 100644
index ecfc3689..00000000
--- a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/new_title.jxl.txt
+++ /dev/null
@@ -1,288 +0,0 @@
-File format : JXL
-Resolution : null
----- TIFF ----
-Version 42
-Little-endian (Intel, II)
----- Directory IFD0 @ 8 ----
-0000000010 0x010f Make = SONY
-0000000022 0x0110 Model = DSC-RX100
-0000000034 0x011a XResolution = 240/1 (240.0)
-0000000046 0x011b YResolution = 240/1 (240.0)
-0000000058 0x0128 ResolutionUnit = 2
-0000000070 0x0131 Software = Adobe Photoshop Lightroom Classic 8.3.1 (Windows)
-0000000082 0x0132 ModifyDate = 2019:08:04 21:22:41
-0000000094 0x8769 ExifOffset = 212
-
----- Directory ExifIFD @ 212 ----
-0000000214 0x829a ExposureTime = 1/250 (0.004)
-0000000226 0x829d FNumber = 8/1 (8.0)
-0000000238 0x8822 ExposureProgram = 1
-0000000250 0x8827 ISO = 125
-0000000262 0x8830 SensitivityType = 2
-0000000274 0x8832 RecommendedExposureIndex = 125
-0000000286 0x9000 ExifVersion = [0x30, 0x32, 0x33, 0x31]
-0000000298 0x9003 DateTimeOriginal = 2019:02:25 06:14:16
-0000000310 0x9004 DateTimeDigitized = 2019:02:25 06:14:16
-0000000322 0x9010 OffsetTime = +02:00
-0000000334 0x9201 ShutterSpeedValue = 7965784/1000000 (7.965784)
-0000000346 0x9202 ApertureValue = 6/1 (6.0)
-0000000358 0x9203 BrightnessValue = 17574/2560 (6.864844)
-0000000370 0x9204 ExposureCompensation = 0/10 (0.0)
-0000000382 0x9205 MaxApertureValue = 434/256 (1.695313)
-0000000394 0x9207 MeteringMode = 3
-0000000406 0x9208 LightSource = 0
-0000000418 0x9209 Flash = 15
-0000000430 0x920a FocalLength = 1040/100 (10.4)
-0000000442 0xa001 ColorSpace = 1
-0000000454 0xa20e FocalPlaneXResolution = 135838255/32768 (4145.454559)
-0000000466 0xa20f FocalPlaneYResolution = 135838255/32768 (4145.454559)
-0000000478 0xa210 FocalPlaneResolutionUnit = 3
-0000000490 0xa300 FileSource = 3
-0000000502 0xa301 SceneType = 1
-0000000514 0xa401 CustomRendered = 0
-0000000526 0xa402 ExposureMode = 1
-0000000538 0xa403 WhiteBalance = 0
-0000000550 0xa404 DigitalZoomRatio = 16/16 (1.0)
-0000000562 0xa405 FocalLengthIn35mmFormat = 28
-0000000574 0xa406 SceneCaptureType = 0
-0000000586 0xa408 Contrast = 0
-0000000598 0xa409 Saturation = 0
-0000000610 0xa40a Sharpness = 0
-0000000622 0xa432 LensSpecification = [1040/100 (10.4), 3710/100 (37.1), 18/10 (1.8), 49/10 (4.9)]
-0000000634 0xa434 LensModel = 28-100mm F1.8-4.9
-
----- Directory IFD1 @ 836 ----
-0000000838 0x0103 Compression = 6
-0000000850 0x011a XResolution = 72/1 (72.0)
-0000000862 0x011b YResolution = 72/1 (72.0)
-0000000874 0x0128 ResolutionUnit = 2
-0000000886 0x0201 JpgFromRawStart = 930
-0000000898 0x0202 JpgFromRawLength = 11246
-
----- XMP ----
-
-
-
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- Süße Vögelchen
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/rotated_right.no_metadata.jxl b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/rotated_right.no_metadata.jxl
deleted file mode 100644
index c27f695f..00000000
Binary files a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/rotated_right.no_metadata.jxl and /dev/null differ
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/rotated_right.no_metadata.jxl.txt b/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/rotated_right.no_metadata.jxl.txt
deleted file mode 100644
index c5ca0f85..00000000
--- a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/rotated_right.no_metadata.jxl.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-File format : JXL
-Resolution : null
----- TIFF ----
-Version 42
-Big-endian (Motorola, MM)
----- Directory IFD0 @ 8 ----
-0000000010 0x0112 Orientation = 6
-0000000022 0x8769 ExifOffset = 40
-
----- Directory ExifIFD @ 40 ----
-
----- XMP ----
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/model/ImageFormatTest.kt b/src/commonTest/kotlin/com/ashampoo/kim/model/ImageFormatTest.kt
deleted file mode 100644
index 55f52ba6..00000000
--- a/src/commonTest/kotlin/com/ashampoo/kim/model/ImageFormatTest.kt
+++ /dev/null
@@ -1,310 +0,0 @@
-/*
- * Copyright 2025 Ashampoo GmbH & Co. KG
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.ashampoo.kim.model
-
-import com.ashampoo.kim.testdata.KimTestData
-import kotlin.test.Test
-import kotlin.test.assertEquals
-import kotlin.test.assertNull
-
-class ImageFormatTest {
-
- @Test
- fun testDetect() {
-
- for (index in 1..KimTestData.TEST_PHOTO_COUNT) {
-
- val expectedFileType = when {
- index <= KimTestData.HIGHEST_JPEG_INDEX -> ImageFormat.JPEG
- index == KimTestData.GIF_TEST_IMAGE_INDEX -> ImageFormat.GIF
- index == KimTestData.WEBP_TEST_IMAGE_INDEX -> ImageFormat.WEBP
- index == KimTestData.PNG_TEST_IMAGE_INDEX -> ImageFormat.PNG
- index == KimTestData.TIFF_NONE_TEST_IMAGE_INDEX -> ImageFormat.TIFF
- index == KimTestData.TIFF_ZIP_TEST_IMAGE_INDEX -> ImageFormat.TIFF
- index == KimTestData.TIFF_LZW_TEST_IMAGE_INDEX -> ImageFormat.TIFF
- index == KimTestData.PNG_APPLE_PREVIEW_TEST_IMAGE_INDEX -> ImageFormat.PNG
- index == KimTestData.PNG_GIMP_TEST_IMAGE_INDEX -> ImageFormat.PNG
- index == KimTestData.CR2_TEST_IMAGE_INDEX -> ImageFormat.CR2
- index == KimTestData.RAF_TEST_IMAGE_INDEX -> ImageFormat.RAF
- index == KimTestData.RW2_TEST_IMAGE_INDEX -> ImageFormat.RW2
- index == KimTestData.ORF_TEST_IMAGE_INDEX -> ImageFormat.ORF
- /* NEF, ARW and DNG do not have unique magic bytes and recognized as TIFF. */
- index == KimTestData.NEF_TEST_IMAGE_INDEX -> ImageFormat.TIFF
- index == KimTestData.ARW_TEST_IMAGE_INDEX -> ImageFormat.TIFF
- index == KimTestData.DNG_CR2_TEST_IMAGE_INDEX -> ImageFormat.TIFF
- index == KimTestData.DNG_RAF_TEST_IMAGE_INDEX -> ImageFormat.TIFF
- index == KimTestData.DNG_NEF_TEST_IMAGE_INDEX -> ImageFormat.TIFF
- index == KimTestData.DNG_ARW_TEST_IMAGE_INDEX -> ImageFormat.TIFF
- index == KimTestData.DNG_RW2_TEST_IMAGE_INDEX -> ImageFormat.TIFF
- index == KimTestData.DNG_ORF_TEST_IMAGE_INDEX -> ImageFormat.TIFF
- index == KimTestData.HEIC_TEST_IMAGE_INDEX -> ImageFormat.HEIC
- index == KimTestData.HIF_TEST_IMAGE_INDEX -> ImageFormat.HEIC
- index == KimTestData.HEIC_TEST_IMAGE_WITH_XMP_INDEX -> ImageFormat.HEIC
- index == KimTestData.AVIF_TEST_IMAGE_FROM_JPG_USING_IMAGEMAGICK_INDEX -> ImageFormat.AVIF
- index == KimTestData.HEIC_TEST_IMAGE_FROM_JPG_USING_IMAGEMAGICK_INDEX -> ImageFormat.HEIC
- index == KimTestData.HEIC_TEST_IMAGE_FROM_JPG_USING_APPLE_INDEX -> ImageFormat.HEIC
- index == KimTestData.HEIC_TEST_IMAGE_FROM_SAMSUNG_INDEX -> ImageFormat.HEIC
- index == KimTestData.JXL_CONTAINER_DARKTABLE_INDEX -> ImageFormat.JXL
- index == KimTestData.JXL_CONTAINER_UNCOMPRESSED_INDEX -> ImageFormat.JXL
- index == KimTestData.JXL_CONTAINER_COMPRESSED_INDEX -> ImageFormat.JXL
- index == KimTestData.GEOTIFF_PIXEL_SCALING_INDEX -> ImageFormat.TIFF
- index == KimTestData.GEOTIFF_AFFINE_TRANSFORM_INDEX -> ImageFormat.TIFF
- index == KimTestData.CR3_TEST_IMAGE_INDEX -> ImageFormat.CR3
- else -> null
- }
-
- val bytes = KimTestData.getBytesOf(index)
-
- val actualFileType = ImageFormat.detect(bytes)
-
- assertEquals(expectedFileType, actualFileType, "Photo $index has a different type.")
- }
- }
-
- @Test
- fun testByMimeType() {
-
- assertNull(ImageFormat.byMimeType("invalid"))
-
- assertEquals(
- expected = ImageFormat.JPEG,
- actual = ImageFormat.byMimeType("image/jpeg")
- )
-
- assertEquals(
- expected = ImageFormat.GIF,
- actual = ImageFormat.byMimeType("image/gif")
- )
-
- assertEquals(
- expected = ImageFormat.PNG,
- actual = ImageFormat.byMimeType("image/png")
- )
-
- assertEquals(
- expected = ImageFormat.WEBP,
- actual = ImageFormat.byMimeType("image/webp")
- )
-
- assertEquals(
- expected = ImageFormat.TIFF,
- actual = ImageFormat.byMimeType("image/tiff")
- )
-
- assertEquals(
- expected = ImageFormat.HEIC,
- actual = ImageFormat.byMimeType("image/heic")
- )
-
- assertEquals(
- expected = ImageFormat.CR2,
- actual = ImageFormat.byMimeType("image/x-canon-cr2")
- )
-
- /* OneDrive returns this wrong mime type. */
- assertEquals(
- expected = ImageFormat.CR2,
- actual = ImageFormat.byMimeType("image/CR2")
- )
-
- assertEquals(
- expected = ImageFormat.RAF,
- actual = ImageFormat.byMimeType("image/x-fuji-raf")
- )
-
- assertEquals(
- expected = ImageFormat.NEF,
- actual = ImageFormat.byMimeType("image/x-nikon-nef")
- )
-
- assertEquals(
- expected = ImageFormat.ARW,
- actual = ImageFormat.byMimeType("image/x-sony-arw")
- )
-
- assertEquals(
- expected = ImageFormat.RW2,
- actual = ImageFormat.byMimeType("image/x-panasonic-rw2")
- )
-
- assertEquals(
- expected = ImageFormat.ORF,
- actual = ImageFormat.byMimeType("image/x-olympus-orf")
- )
-
- assertEquals(
- expected = ImageFormat.DNG,
- actual = ImageFormat.byMimeType("image/x-adobe-dng")
- )
- }
-
- @Test
- fun testByUniformTypeIdentifier() {
-
- assertNull(ImageFormat.byUniformTypeIdentifier("invalid"))
-
- assertEquals(
- expected = ImageFormat.JPEG,
- actual = ImageFormat.byUniformTypeIdentifier("public.jpeg")
- )
-
- assertEquals(
- expected = ImageFormat.GIF,
- actual = ImageFormat.byUniformTypeIdentifier("com.compuserve.gif")
- )
-
- assertEquals(
- expected = ImageFormat.PNG,
- actual = ImageFormat.byUniformTypeIdentifier("public.png")
- )
-
- assertEquals(
- expected = ImageFormat.WEBP,
- actual = ImageFormat.byUniformTypeIdentifier("org.webmproject.webp")
- )
-
- assertEquals(
- expected = ImageFormat.TIFF,
- actual = ImageFormat.byUniformTypeIdentifier("public.tiff")
- )
-
- assertEquals(
- expected = ImageFormat.HEIC,
- actual = ImageFormat.byUniformTypeIdentifier("public.heic")
- )
-
- assertEquals(
- expected = ImageFormat.CR2,
- actual = ImageFormat.byUniformTypeIdentifier("com.canon.cr2-raw-image")
- )
-
- assertEquals(
- expected = ImageFormat.RAF,
- actual = ImageFormat.byUniformTypeIdentifier("com.fuji.raw-image")
- )
-
- assertEquals(
- expected = ImageFormat.NEF,
- actual = ImageFormat.byUniformTypeIdentifier("com.nikon.raw-image")
- )
-
- assertEquals(
- expected = ImageFormat.ARW,
- actual = ImageFormat.byUniformTypeIdentifier("com.sony.raw-image")
- )
-
- assertEquals(
- expected = ImageFormat.RW2,
- actual = ImageFormat.byUniformTypeIdentifier("com.panasonic.raw-image")
- )
-
- assertEquals(
- expected = ImageFormat.ORF,
- actual = ImageFormat.byUniformTypeIdentifier("com.olympus.raw-image")
- )
-
- assertEquals(
- expected = ImageFormat.DNG,
- actual = ImageFormat.byUniformTypeIdentifier("com.adobe.raw-image")
- )
- }
-
- @Test
- fun testByFileNameExtension() {
-
- assertNull(ImageFormat.byFileNameExtension("invalid"))
-
- assertEquals(
- expected = ImageFormat.JPEG,
- actual = ImageFormat.byFileNameExtension("image.jpeg")
- )
-
- assertEquals(
- expected = ImageFormat.JPEG,
- actual = ImageFormat.byFileNameExtension("image.jpg")
- )
-
- assertEquals(
- expected = ImageFormat.JPEG,
- actual = ImageFormat.byFileNameExtension("image.JPG")
- )
-
- assertEquals(
- expected = ImageFormat.GIF,
- actual = ImageFormat.byFileNameExtension("image.gif")
- )
-
- assertEquals(
- expected = ImageFormat.PNG,
- actual = ImageFormat.byFileNameExtension("image.png")
- )
-
- assertEquals(
- expected = ImageFormat.WEBP,
- actual = ImageFormat.byFileNameExtension("image.webp")
- )
-
- assertEquals(
- expected = ImageFormat.TIFF,
- actual = ImageFormat.byFileNameExtension("image.tif")
- )
-
- assertEquals(
- expected = ImageFormat.TIFF,
- actual = ImageFormat.byFileNameExtension("image.tiff")
- )
-
- assertEquals(
- expected = ImageFormat.HEIC,
- actual = ImageFormat.byFileNameExtension("image.heic")
- )
-
- assertEquals(
- expected = ImageFormat.CR2,
- actual = ImageFormat.byFileNameExtension("image.cr2")
- )
-
- assertEquals(
- expected = ImageFormat.RAF,
- actual = ImageFormat.byFileNameExtension("image.raf")
- )
-
- assertEquals(
- expected = ImageFormat.NEF,
- actual = ImageFormat.byFileNameExtension("image.nef")
- )
-
- assertEquals(
- expected = ImageFormat.ARW,
- actual = ImageFormat.byFileNameExtension("image.arw")
- )
-
- assertEquals(
- expected = ImageFormat.RW2,
- actual = ImageFormat.byFileNameExtension("image.rw2")
- )
-
- assertEquals(
- expected = ImageFormat.ORF,
- actual = ImageFormat.byFileNameExtension("image.orf")
- )
-
- assertEquals(
- expected = ImageFormat.DNG,
- actual = ImageFormat.byFileNameExtension("image.dng")
- )
- }
-}
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/model/PhotoRatingTest.kt b/src/commonTest/kotlin/com/ashampoo/kim/model/PhotoRatingTest.kt
deleted file mode 100644
index 1119cbcf..00000000
--- a/src/commonTest/kotlin/com/ashampoo/kim/model/PhotoRatingTest.kt
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright 2025 Ashampoo GmbH & Co. KG
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.ashampoo.kim.model
-
-import kotlin.test.Test
-import kotlin.test.assertEquals
-import kotlin.test.assertNull
-
-class PhotoRatingTest {
-
- private val nullString: String? = null
-
- @Test
- fun testOfInt() {
-
- assertNull(PhotoRating.Companion.of(-2))
- assertNull(PhotoRating.Companion.of(6))
-
- assertEquals(
- PhotoRating.REJECTED,
- PhotoRating.Companion.of(-1)
- )
-
- assertEquals(
- PhotoRating.UNRATED,
- PhotoRating.Companion.of(0)
- )
-
- assertEquals(
- PhotoRating.ONE_STAR,
- PhotoRating.Companion.of(1)
- )
-
- assertEquals(
- PhotoRating.TWO_STARS,
- PhotoRating.Companion.of(2)
- )
-
- assertEquals(
- PhotoRating.THREE_STARS,
- PhotoRating.Companion.of(3)
- )
-
- assertEquals(
- PhotoRating.FOUR_STARS,
- PhotoRating.Companion.of(4)
- )
-
- assertEquals(
- PhotoRating.FIVE_STARS,
- PhotoRating.Companion.of(5)
- )
- }
-
- @Test
- fun testOfString() {
-
- assertNull(PhotoRating.Companion.of(nullString))
- assertNull(PhotoRating.Companion.of(""))
- assertNull(PhotoRating.Companion.of(" "))
- assertNull(PhotoRating.Companion.of("hello"))
- assertNull(PhotoRating.Companion.of("-2"))
- assertNull(PhotoRating.Companion.of("6"))
-
- assertEquals(
- PhotoRating.REJECTED,
- PhotoRating.Companion.of("-1")
- )
-
- assertEquals(
- PhotoRating.UNRATED,
- PhotoRating.Companion.of("0")
- )
-
- assertEquals(
- PhotoRating.ONE_STAR,
- PhotoRating.Companion.of("1")
- )
-
- assertEquals(
- PhotoRating.TWO_STARS,
- PhotoRating.Companion.of("2")
- )
-
- assertEquals(
- PhotoRating.THREE_STARS,
- PhotoRating.Companion.of("3")
- )
-
- assertEquals(
- PhotoRating.FOUR_STARS,
- PhotoRating.Companion.of("4")
- )
-
- assertEquals(
- PhotoRating.FIVE_STARS,
- PhotoRating.Companion.of("5")
- )
- }
-}
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/ImageMetadataTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/MediaMetadataTest.kt
similarity index 80%
rename from src/commonTest/kotlin/com/ashampoo/kim/ImageMetadataTest.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/MediaMetadataTest.kt
index 35f4bbcb..e4a66b4f 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/ImageMetadataTest.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/MediaMetadataTest.kt
@@ -13,15 +13,15 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim
+package de.stefan_oltmann.kim
-import com.ashampoo.kim.common.writeBytes
-import com.ashampoo.kim.testdata.KimTestData
+import de.stefan_oltmann.kim.common.writeBytes
+import de.stefan_oltmann.kim.testdata.KimTestData
import kotlinx.io.files.Path
import kotlin.test.Test
import kotlin.test.fail
-class ImageMetadataTest {
+class MediaMetadataTest {
/**
* Regression test based on a fixed small set of test files.
@@ -30,7 +30,7 @@ class ImageMetadataTest {
@Test
fun testToString() {
- for (index in 1..KimTestData.TEST_PHOTO_COUNT) {
+ for (index in 1..KimTestData.TEST_MEDIA_COUNT) {
val bytes = KimTestData.getBytesOf(index)
@@ -44,10 +44,10 @@ class ImageMetadataTest {
if (!equals) {
- Path("build/photo_$index.txt")
+ Path("build/media_$index.txt")
.writeBytes(actualToString)
- fail("photo_$index.txt is different.")
+ fail("media_$index.txt is different.")
}
}
}
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/PreviewImageExtractionTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/PreviewImageExtractionTest.kt
similarity index 87%
rename from src/commonTest/kotlin/com/ashampoo/kim/PreviewImageExtractionTest.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/PreviewImageExtractionTest.kt
index 4a79088a..27908659 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/PreviewImageExtractionTest.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/PreviewImageExtractionTest.kt
@@ -13,11 +13,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim
+package de.stefan_oltmann.kim
-import com.ashampoo.kim.common.writeBytes
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.testdata.KimTestData
+import de.stefan_oltmann.kim.common.writeBytes
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.testdata.KimTestData
import kotlinx.io.files.Path
import kotlin.test.Test
import kotlin.test.assertNotNull
@@ -65,10 +65,10 @@ class PreviewImageExtractionTest {
if (!equals) {
- Path("build/photo_${index}_preview.jpg")
+ Path("build/media_${index}_preview.jpg")
.writeBytes(previewImageBytes)
- fail("Photo $index has not the expected bytes!")
+ fail("Media $index has not the expected bytes!")
}
}
}
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/XmpExtractionTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/XmpExtractionTest.kt
similarity index 81%
rename from src/commonTest/kotlin/com/ashampoo/kim/XmpExtractionTest.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/XmpExtractionTest.kt
index 0f377f44..080832da 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/XmpExtractionTest.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/XmpExtractionTest.kt
@@ -13,10 +13,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim
+package de.stefan_oltmann.kim
-import com.ashampoo.kim.common.writeBytes
-import com.ashampoo.kim.testdata.KimTestData
+import de.stefan_oltmann.kim.common.writeBytes
+import de.stefan_oltmann.kim.testdata.KimTestData
import kotlinx.io.files.Path
import kotlin.test.Test
import kotlin.test.assertNotNull
@@ -34,7 +34,11 @@ class XmpExtractionTest {
KimTestData.ORF_TEST_IMAGE_INDEX,
KimTestData.HEIC_TEST_IMAGE_FROM_SAMSUNG_INDEX,
KimTestData.GEOTIFF_PIXEL_SCALING_INDEX,
- KimTestData.GEOTIFF_AFFINE_TRANSFORM_INDEX
+ KimTestData.GEOTIFF_AFFINE_TRANSFORM_INDEX,
+
+ // TODO Support XMP extraction for these files
+ KimTestData.MP4_TEST_VIDEO_INDEX,
+ KimTestData.MOV_TEST_VIDEO_INDEX
)
// TODO Support these files as they have XMP
@@ -50,7 +54,7 @@ class XmpExtractionTest {
fun testExtractXmp() {
@Suppress("LoopWithTooManyJumpStatements")
- for (index in 1..KimTestData.TEST_PHOTO_COUNT) {
+ for (index in 1..KimTestData.TEST_MEDIA_COUNT) {
/* Skip files without embedded XMP */
if (indicesWithoutXmp.contains(index) || indicesUnsupported.contains(index))
@@ -70,10 +74,10 @@ class XmpExtractionTest {
if (!equals) {
- Path("build/photo_$index.xmp")
+ Path("build/media_$index.xmp")
.writeBytes(actualXmpBytes)
- fail("Photo $index has not the expected bytes!")
+ fail("Media $index has not the expected bytes!")
}
}
}
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/common/ByteArrayExtensionsTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/common/ByteArrayExtensionsTest.kt
similarity index 98%
rename from src/commonTest/kotlin/com/ashampoo/kim/common/ByteArrayExtensionsTest.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/common/ByteArrayExtensionsTest.kt
index 05f0d4e9..fdf9b3e9 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/common/ByteArrayExtensionsTest.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/common/ByteArrayExtensionsTest.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.common
+package de.stefan_oltmann.kim.common
import kotlin.test.Test
import kotlin.test.assertContentEquals
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/common/ByteConversionsTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/common/ByteConversionsTest.kt
similarity index 97%
rename from src/commonTest/kotlin/com/ashampoo/kim/common/ByteConversionsTest.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/common/ByteConversionsTest.kt
index 6ae94138..1654d6a6 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/common/ByteConversionsTest.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/common/ByteConversionsTest.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.common
+package de.stefan_oltmann.kim.common
import kotlin.test.Test
import kotlin.test.assertEquals
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/common/ExifDateUtilTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/common/ExifDateUtilTest.kt
similarity index 98%
rename from src/commonTest/kotlin/com/ashampoo/kim/common/ExifDateUtilTest.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/common/ExifDateUtilTest.kt
index 1bb18b11..b4c3945f 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/common/ExifDateUtilTest.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/common/ExifDateUtilTest.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.common
+package de.stefan_oltmann.kim.common
import kotlin.test.Test
import kotlin.test.assertEquals
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/common/GpsUtilTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/common/GpsUtilTest.kt
similarity index 98%
rename from src/commonTest/kotlin/com/ashampoo/kim/common/GpsUtilTest.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/common/GpsUtilTest.kt
index 5ddb3ebc..78b2b2f9 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/common/GpsUtilTest.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/common/GpsUtilTest.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.common
+package de.stefan_oltmann.kim.common
import kotlin.test.Test
import kotlin.test.assertEquals
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/common/PhotoValueFormatterTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/common/KimValueFormatterTest.kt
similarity index 61%
rename from src/commonTest/kotlin/com/ashampoo/kim/common/PhotoValueFormatterTest.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/common/KimValueFormatterTest.kt
index f95e4b34..466161ab 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/common/PhotoValueFormatterTest.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/common/KimValueFormatterTest.kt
@@ -13,68 +13,68 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.common
+package de.stefan_oltmann.kim.common
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertNull
-class PhotoValueFormatterTest {
+class KimValueFormatterTest {
@Test
fun testFormatFileLength() {
assertEquals(
"60 B",
- PhotoValueFormatter.formatFileLength(60)
+ KimValueFormatter.formatFileLength(60)
)
assertEquals(
"999 B",
- PhotoValueFormatter.formatFileLength(999)
+ KimValueFormatter.formatFileLength(999)
)
assertEquals(
"1 KB",
- PhotoValueFormatter.formatFileLength(1000)
+ KimValueFormatter.formatFileLength(1000)
)
/* Ensure no fractions! */
assertEquals(
"1 KB",
- PhotoValueFormatter.formatFileLength(1024)
+ KimValueFormatter.formatFileLength(1024)
)
assertEquals(
"300 KB",
- PhotoValueFormatter.formatFileLength(300_000)
+ KimValueFormatter.formatFileLength(300_000)
)
/* Ensure no fractions! */
assertEquals(
"301 KB",
- PhotoValueFormatter.formatFileLength(300_600)
+ KimValueFormatter.formatFileLength(300_600)
)
assertEquals(
"8 MB",
- PhotoValueFormatter.formatFileLength(8_000_000)
+ KimValueFormatter.formatFileLength(8_000_000)
)
/* Only one fraction */
assertEquals(
"8.2 MB",
- PhotoValueFormatter.formatFileLength(8_230_000)
+ KimValueFormatter.formatFileLength(8_230_000)
)
assertEquals(
"1 GB",
- PhotoValueFormatter.formatFileLength(1_000_000_000)
+ KimValueFormatter.formatFileLength(1_000_000_000)
)
assertEquals(
"1.5 GB",
- PhotoValueFormatter.formatFileLength(1_500_000_000)
+ KimValueFormatter.formatFileLength(1_500_000_000)
)
}
@@ -82,28 +82,28 @@ class PhotoValueFormatterTest {
fun testCreateCameraOrLensName() {
assertNull(
- PhotoValueFormatter.createCameraOrLensName(
+ KimValueFormatter.createCameraOrLensName(
make = null,
model = null
)
)
assertNull(
- PhotoValueFormatter.createCameraOrLensName(
+ KimValueFormatter.createCameraOrLensName(
make = "",
model = ""
)
)
assertNull(
- PhotoValueFormatter.createCameraOrLensName(
+ KimValueFormatter.createCameraOrLensName(
make = null,
model = ""
)
)
assertNull(
- PhotoValueFormatter.createCameraOrLensName(
+ KimValueFormatter.createCameraOrLensName(
make = "",
model = null
)
@@ -114,7 +114,7 @@ class PhotoValueFormatterTest {
*/
assertEquals(
"Canon EOS 60D",
- PhotoValueFormatter.createCameraOrLensName(
+ KimValueFormatter.createCameraOrLensName(
make = "Canon",
model = "Canon EOS 60D"
)
@@ -122,7 +122,7 @@ class PhotoValueFormatterTest {
assertEquals(
"Olympus E-M10",
- PhotoValueFormatter.createCameraOrLensName(
+ KimValueFormatter.createCameraOrLensName(
make = "OLYMPUS IMAGING CORP.",
model = "E-M10"
)
@@ -133,7 +133,7 @@ class PhotoValueFormatterTest {
*/
assertEquals(
"Olympus M.40-150mm F4.0-5.6 R",
- PhotoValueFormatter.createCameraOrLensName(
+ KimValueFormatter.createCameraOrLensName(
make = null,
model = "OLYMPUS M.40-150mm F4.0-5.6 R"
)
@@ -141,7 +141,7 @@ class PhotoValueFormatterTest {
assertEquals(
"Sony DSLR-A200",
- PhotoValueFormatter.createCameraOrLensName(
+ KimValueFormatter.createCameraOrLensName(
make = "SONY",
model = "DSLR-A200"
)
@@ -152,7 +152,7 @@ class PhotoValueFormatterTest {
*/
assertEquals(
"Nikon D800",
- PhotoValueFormatter.createCameraOrLensName(
+ KimValueFormatter.createCameraOrLensName(
make = "NIKON CORPORATION",
model = "NIKON D800"
)
@@ -160,7 +160,7 @@ class PhotoValueFormatterTest {
assertEquals(
"Fujifilm X-T4",
- PhotoValueFormatter.createCameraOrLensName(
+ KimValueFormatter.createCameraOrLensName(
make = "FUJIFILM",
model = "X-T4"
)
@@ -172,17 +172,17 @@ class PhotoValueFormatterTest {
assertEquals(
"ISO 32",
- PhotoValueFormatter.formatIso(32)
+ KimValueFormatter.formatIso(32)
)
assertEquals(
"ISO 100",
- PhotoValueFormatter.formatIso(100)
+ KimValueFormatter.formatIso(100)
)
assertEquals(
"ISO 400",
- PhotoValueFormatter.formatIso(400)
+ KimValueFormatter.formatIso(400)
)
}
@@ -192,162 +192,162 @@ class PhotoValueFormatterTest {
assertEquals(
"1/8000 s",
- PhotoValueFormatter.formatExposureTime(0.000125)
+ KimValueFormatter.formatExposureTime(0.000125)
)
assertEquals(
"1/4000 s",
- PhotoValueFormatter.formatExposureTime(0.00025)
+ KimValueFormatter.formatExposureTime(0.00025)
)
assertEquals(
"1/2000 s",
- PhotoValueFormatter.formatExposureTime(0.0005)
+ KimValueFormatter.formatExposureTime(0.0005)
)
assertEquals(
"1/1250 s",
- PhotoValueFormatter.formatExposureTime(0.0008)
+ KimValueFormatter.formatExposureTime(0.0008)
)
assertEquals(
"1/1000 s",
- PhotoValueFormatter.formatExposureTime(0.001)
+ KimValueFormatter.formatExposureTime(0.001)
)
assertEquals(
"1/640 s",
- PhotoValueFormatter.formatExposureTime(0.0015625)
+ KimValueFormatter.formatExposureTime(0.0015625)
)
assertEquals(
"1/500 s",
- PhotoValueFormatter.formatExposureTime(0.002)
+ KimValueFormatter.formatExposureTime(0.002)
)
assertEquals(
"1/400 s",
- PhotoValueFormatter.formatExposureTime(0.0025)
+ KimValueFormatter.formatExposureTime(0.0025)
)
assertEquals(
"1/320 s",
- PhotoValueFormatter.formatExposureTime(0.003125)
+ KimValueFormatter.formatExposureTime(0.003125)
)
assertEquals(
"1/250 s",
- PhotoValueFormatter.formatExposureTime(0.004)
+ KimValueFormatter.formatExposureTime(0.004)
)
assertEquals(
"1/200 s",
- PhotoValueFormatter.formatExposureTime(0.005)
+ KimValueFormatter.formatExposureTime(0.005)
)
assertEquals(
"1/125 s",
- PhotoValueFormatter.formatExposureTime(0.008)
+ KimValueFormatter.formatExposureTime(0.008)
)
assertEquals(
"1/100 s",
- PhotoValueFormatter.formatExposureTime(0.01)
+ KimValueFormatter.formatExposureTime(0.01)
)
assertEquals(
"1/80 s",
- PhotoValueFormatter.formatExposureTime(0.0125)
+ KimValueFormatter.formatExposureTime(0.0125)
)
assertEquals(
"1/60 s",
- PhotoValueFormatter.formatExposureTime(0.0166)
+ KimValueFormatter.formatExposureTime(0.0166)
)
assertEquals(
"1/40 s",
- PhotoValueFormatter.formatExposureTime(0.025)
+ KimValueFormatter.formatExposureTime(0.025)
)
assertEquals(
"1/30 s",
- PhotoValueFormatter.formatExposureTime(0.033)
+ KimValueFormatter.formatExposureTime(0.033)
)
assertEquals(
"1/25 s",
- PhotoValueFormatter.formatExposureTime(0.04)
+ KimValueFormatter.formatExposureTime(0.04)
)
assertEquals(
"1/15 s",
- PhotoValueFormatter.formatExposureTime(0.066)
+ KimValueFormatter.formatExposureTime(0.066)
)
assertEquals(
"1/10 s",
- PhotoValueFormatter.formatExposureTime(0.1)
+ KimValueFormatter.formatExposureTime(0.1)
)
assertEquals(
"1/8 s",
- PhotoValueFormatter.formatExposureTime(0.125)
+ KimValueFormatter.formatExposureTime(0.125)
)
assertEquals(
"1/4 s",
- PhotoValueFormatter.formatExposureTime(0.25)
+ KimValueFormatter.formatExposureTime(0.25)
)
assertEquals(
"1/2 s",
- PhotoValueFormatter.formatExposureTime(0.5)
+ KimValueFormatter.formatExposureTime(0.5)
)
assertEquals(
"1'' s",
- PhotoValueFormatter.formatExposureTime(1.0)
+ KimValueFormatter.formatExposureTime(1.0)
)
assertEquals(
"1'' 1/8 s",
- PhotoValueFormatter.formatExposureTime(1.125)
+ KimValueFormatter.formatExposureTime(1.125)
)
assertEquals(
"1'' 1/4 s",
- PhotoValueFormatter.formatExposureTime(1.25)
+ KimValueFormatter.formatExposureTime(1.25)
)
assertEquals(
"1'' 1/2 s",
- PhotoValueFormatter.formatExposureTime(1.5)
+ KimValueFormatter.formatExposureTime(1.5)
)
assertEquals(
"2'' s",
- PhotoValueFormatter.formatExposureTime(2.0)
+ KimValueFormatter.formatExposureTime(2.0)
)
assertEquals(
"2'' 1/2 s",
- PhotoValueFormatter.formatExposureTime(2.5)
+ KimValueFormatter.formatExposureTime(2.5)
)
assertEquals(
"10'' s",
- PhotoValueFormatter.formatExposureTime(10.0)
+ KimValueFormatter.formatExposureTime(10.0)
)
assertEquals(
"15'' s",
- PhotoValueFormatter.formatExposureTime(15.0)
+ KimValueFormatter.formatExposureTime(15.0)
)
assertEquals(
"30'' s",
- PhotoValueFormatter.formatExposureTime(30.0)
+ KimValueFormatter.formatExposureTime(30.0)
)
}
@@ -356,17 +356,17 @@ class PhotoValueFormatterTest {
assertEquals(
"ƒ2",
- PhotoValueFormatter.formatFNumber(2.0)
+ KimValueFormatter.formatFNumber(2.0)
)
assertEquals(
"ƒ2.8",
- PhotoValueFormatter.formatFNumber(2.8)
+ KimValueFormatter.formatFNumber(2.8)
)
assertEquals(
"ƒ8",
- PhotoValueFormatter.formatFNumber(8.0)
+ KimValueFormatter.formatFNumber(8.0)
)
}
@@ -375,12 +375,12 @@ class PhotoValueFormatterTest {
assertEquals(
"4.2 mm",
- PhotoValueFormatter.formatFocalLength(4.2)
+ KimValueFormatter.formatFocalLength(4.2)
)
assertEquals(
"18 mm",
- PhotoValueFormatter.formatFocalLength(18.0)
+ KimValueFormatter.formatFocalLength(18.0)
)
}
}
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/common/KotlinIoExtensions.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/common/KotlinIoExtensions.kt
similarity index 98%
rename from src/commonTest/kotlin/com/ashampoo/kim/common/KotlinIoExtensions.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/common/KotlinIoExtensions.kt
index 9a4cd9bb..fad21a80 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/common/KotlinIoExtensions.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/common/KotlinIoExtensions.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.common
+package de.stefan_oltmann.kim.common
import kotlinx.io.buffered
import kotlinx.io.files.Path
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/common/Latin1EncodingTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/common/Latin1EncodingTest.kt
similarity index 99%
rename from src/commonTest/kotlin/com/ashampoo/kim/common/Latin1EncodingTest.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/common/Latin1EncodingTest.kt
index 55064479..4ed244ea 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/common/Latin1EncodingTest.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/common/Latin1EncodingTest.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.common
+package de.stefan_oltmann.kim.common
import kotlin.test.Test
import kotlin.test.assertContentEquals
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/common/LocalDateTimeExtensionsTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/common/LocalDateTimeExtensionsTest.kt
similarity index 97%
rename from src/commonTest/kotlin/com/ashampoo/kim/common/LocalDateTimeExtensionsTest.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/common/LocalDateTimeExtensionsTest.kt
index a8c6e869..76a61b05 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/common/LocalDateTimeExtensionsTest.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/common/LocalDateTimeExtensionsTest.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.common
+package de.stefan_oltmann.kim.common
import kotlinx.datetime.LocalDate
import kotlinx.datetime.LocalDateTime
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/common/PhotoMetadataConverterTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/common/MetadataSummaryConverterTest.kt
similarity index 80%
rename from src/commonTest/kotlin/com/ashampoo/kim/common/PhotoMetadataConverterTest.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/common/MetadataSummaryConverterTest.kt
index 70439130..1c01a7e3 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/common/PhotoMetadataConverterTest.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/common/MetadataSummaryConverterTest.kt
@@ -1,4 +1,5 @@
/*
+ * Copyright 2026 Stefan Oltmann
* Copyright 2025 Ashampoo GmbH & Co. KG
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -13,17 +14,17 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.common
+package de.stefan_oltmann.kim.common
-import com.ashampoo.kim.Kim
-import com.ashampoo.kim.model.PhotoMetadata
-import com.ashampoo.kim.testdata.KimTestData
+import de.stefan_oltmann.kim.Kim
+import de.stefan_oltmann.kim.model.MetadataSummary
+import de.stefan_oltmann.kim.testdata.KimTestData
import kotlin.test.BeforeTest
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertNotNull
-class PhotoMetadataConverterTest {
+class MetadataSummaryConverterTest {
@BeforeTest
fun setUp() {
@@ -36,9 +37,9 @@ class PhotoMetadataConverterTest {
@Test
fun testReadMetadataFromBytes() {
- val metadataMap = mutableMapOf()
+ val metadataMap = mutableMapOf()
- for (index in 1..KimTestData.TEST_PHOTO_COUNT)
+ for (index in 1..KimTestData.TEST_MEDIA_COUNT)
calculateAndAppendMetadata(index, metadataMap)
assertEquals(
@@ -49,7 +50,7 @@ class PhotoMetadataConverterTest {
private fun calculateAndAppendMetadata(
index: Int,
- metadataMap: MutableMap
+ metadataMap: MutableMap
) {
/* For Non-JPG we get the full bytes. */
@@ -62,22 +63,22 @@ class PhotoMetadataConverterTest {
if (index == KimTestData.HEIC_TEST_IMAGE_INDEX)
return
- val photoMetadata = Kim.readMetadata(bytes)?.convertToPhotoMetadata()
+ val summary = Kim.readMetadata(bytes)?.convertToSummary()
- assertNotNull(photoMetadata)
+ assertNotNull(summary)
- metadataMap[KimTestData.getFileName(index)] = photoMetadata
+ metadataMap[KimTestData.getFileName(index)] = summary
}
- private fun createCsvString(metadataMap: Map): String {
+ private fun createCsvString(metadataMap: Map): String {
val stringBuilder = StringBuilder()
stringBuilder.appendLine(
- "name;imageFormat;widthPx;heightPx;orientation;takenDate;latitude;longitude;" +
+ "name;mediaFormat;widthPx;heightPx;orientation;takenDate;latitude;longitude;" +
"locationName;location;city;state;country;" +
"cameraMake;cameraModel;lensMake;lensModel;iso;exposureTime;fNumber;focalLength;" +
- "title;description;flagged;rating;keywords;personsInAlbums;albums;" +
+ "title;description;flagged;rating;keywords;personsInAlbums;" +
"thumbnailImageSize;thumbnailBytes.size;orientedSize.width;orientedSize.height"
)
@@ -87,7 +88,7 @@ class PhotoMetadataConverterTest {
val metadata = entry.value
stringBuilder.appendLine(
- "$name;${metadata.imageFormat};${metadata.widthPx};${metadata.heightPx};" +
+ "$name;${metadata.mediaFormat};${metadata.widthPx};${metadata.heightPx};" +
"${metadata.orientation};${metadata.takenDate};" +
"${metadata.gpsCoordinates?.latitude};${metadata.gpsCoordinates?.longitude};" +
"${metadata.locationShown?.name};${metadata.locationShown?.street};" +
@@ -98,7 +99,7 @@ class PhotoMetadataConverterTest {
"${metadata.fNumber};${metadata.focalLength};" +
"${metadata.title};${metadata.description};" +
"${metadata.flagged};${metadata.rating?.value};" +
- "${metadata.keywords};${metadata.personsInImage};${metadata.albums};" +
+ "${metadata.keywords};${metadata.personsInImage};" +
"${metadata.thumbnailImageSize};${metadata.thumbnailBytes?.size};" +
"${metadata.orientedSize?.width};${metadata.orientedSize?.height}"
)
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/common/ZLibTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/common/ZLibTest.kt
similarity index 90%
rename from src/commonTest/kotlin/com/ashampoo/kim/common/ZLibTest.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/common/ZLibTest.kt
index 3fd0b41e..c45c094f 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/common/ZLibTest.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/common/ZLibTest.kt
@@ -1,4 +1,5 @@
/*
+ * Copyright 2026 Stefan Oltmann
* Copyright 2025 Ashampoo GmbH & Co. KG
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -13,10 +14,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.common
+package de.stefan_oltmann.kim.common
-import com.ashampoo.kim.getPathForResource
-import kotlinx.io.files.Path
+import com.goncalossilva.resources.Resource
import kotlin.test.Test
import kotlin.test.assertContentEquals
import kotlin.test.assertEquals
@@ -37,13 +37,6 @@ class ZLibTest {
0xc9.toByte(), 0xc9.toByte(), 0xcc.toByte(), 0x53.toByte(), 0x04.toByte(), 0x00.toByte(),
0x23.toByte(), 0x7d.toByte(), 0x04.toByte(), 0xd2.toByte()
),
- "Ashampoo GmbH & Co. KG" to byteArrayOf(
- 0x78.toByte(), 0x9c.toByte(), 0x73.toByte(), 0x2c.toByte(), 0xce.toByte(), 0x48.toByte(),
- 0xcc.toByte(), 0x2d.toByte(), 0xc8.toByte(), 0xcf.toByte(), 0x57.toByte(), 0x70.toByte(),
- 0xcf.toByte(), 0x4d.toByte(), 0xf2.toByte(), 0x50.toByte(), 0x50.toByte(), 0x53.toByte(),
- 0x70.toByte(), 0xce.toByte(), 0xd7.toByte(), 0x53.toByte(), 0xf0.toByte(), 0x76.toByte(),
- 0x07.toByte(), 0x00.toByte(), 0x55.toByte(), 0x58.toByte(), 0x06.toByte(), 0xaf.toByte()
- ),
"The quick brown fox jumps over the lazy dog." to byteArrayOf(
0x78.toByte(), 0x9c.toByte(), 0x0b.toByte(), 0xc9.toByte(), 0x48.toByte(), 0x55.toByte(),
0x28.toByte(), 0x2c.toByte(), 0xcd.toByte(), 0x4c.toByte(), 0xce.toByte(), 0x56.toByte(),
@@ -136,7 +129,7 @@ class ZLibTest {
@Test
fun testRoundtripWithLongText() {
- val testString = Path(getPathForResource(RESOURCE_PATH)).readBytes().decodeToString()
+ val testString = Resource(RESOURCE_PATH).readBytes().decodeToString()
val compressed = compress(testString)
@@ -151,7 +144,6 @@ class ZLibTest {
companion object {
- private const val RESOURCE_PATH: String =
- "src/commonTest/resources/com/ashampoo/kim/testdata/alice_in_wonderland.txt"
+ private const val RESOURCE_PATH: String = "de/stefan_oltmann/kim/testdata/alice_in_wonderland.txt"
}
}
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/AbstractUpdaterTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/AbstractUpdaterTest.kt
similarity index 88%
rename from src/commonTest/kotlin/com/ashampoo/kim/format/AbstractUpdaterTest.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/AbstractUpdaterTest.kt
index 614ec144..ac97c3b4 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/format/AbstractUpdaterTest.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/AbstractUpdaterTest.kt
@@ -1,4 +1,5 @@
/*
+ * Copyright 2026 Stefan Oltmann
* Copyright 2025 Ashampoo GmbH & Co. KG
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -13,18 +14,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format
-
-import com.ashampoo.kim.Kim
-import com.ashampoo.kim.common.exists
-import com.ashampoo.kim.common.readBytes
-import com.ashampoo.kim.common.writeBytes
-import com.ashampoo.kim.getPathForResource
-import com.ashampoo.kim.model.GpsCoordinates
-import com.ashampoo.kim.model.LocationShown
-import com.ashampoo.kim.model.MetadataUpdate
-import com.ashampoo.kim.model.PhotoRating
-import com.ashampoo.kim.model.TiffOrientation
+package de.stefan_oltmann.kim.format
+
+import com.goncalossilva.resources.Resource
+import de.stefan_oltmann.kim.Kim
+import de.stefan_oltmann.kim.common.writeBytes
+import de.stefan_oltmann.kim.model.GpsCoordinates
+import de.stefan_oltmann.kim.model.LocationShown
+import de.stefan_oltmann.kim.model.MetadataUpdate
+import de.stefan_oltmann.kim.model.ExifRating
+import de.stefan_oltmann.kim.model.TiffOrientation
import kotlinx.io.files.Path
import kotlin.test.BeforeTest
import kotlin.test.Test
@@ -57,19 +56,13 @@ abstract class AbstractUpdaterTest(
private val timestamp = 1_689_166_125_401 // 2023:07:12 12:48:45
- private val resourcePath: String = "src/commonTest/resources/com/ashampoo/kim/updates_$format"
+ private val resourcePath: String = "de/stefan_oltmann/kim/updates_$format"
- private val originalBytes = Path(
- getPathForResource("$resourcePath/original.$format")
- ).readBytes()
+ private val originalBytes = Resource("$resourcePath/original.$format").readBytes()
- private val noMetadataBytes = Path(
- getPathForResource("$resourcePath/no_metadata.$format")
- ).readBytes()
+ private val noMetadataBytes = Resource("$resourcePath/no_metadata.$format").readBytes()
- private val thumbnailBytes = Path(
- getPathForResource("$resourcePath/../testdata/test_thumb.jpg")
- ).readBytes()
+ private val thumbnailBytes = Resource("$resourcePath/../testdata/test_thumb.jpg").readBytes()
@BeforeTest
fun setUp() {
@@ -265,7 +258,7 @@ abstract class AbstractUpdaterTest(
val newBytes = Kim.update(
bytes = originalBytes,
- update = MetadataUpdate.Rating(PhotoRating.FOUR_STARS)
+ update = MetadataUpdate.Rating(ExifRating.FOUR_STARS)
)
compare("new_rating.$format", newBytes)
@@ -276,7 +269,7 @@ abstract class AbstractUpdaterTest(
val newBytes = Kim.update(
bytes = noMetadataBytes,
- update = MetadataUpdate.Rating(PhotoRating.FOUR_STARS)
+ update = MetadataUpdate.Rating(ExifRating.FOUR_STARS)
)
compare("new_rating.no_metadata.$format", newBytes)
@@ -352,9 +345,9 @@ abstract class AbstractUpdaterTest(
private fun compare(fileName: String, actualBytes: ByteArray) {
- val path = Path(getPathForResource("$resourcePath/$fileName"))
+ val resource = Resource("$resourcePath/$fileName")
- if (!path.exists()) {
+ if (!resource.exists()) {
Path("build/$fileName")
.writeBytes(actualBytes)
@@ -362,7 +355,7 @@ abstract class AbstractUpdaterTest(
fail("Reference image $fileName does not exist.")
}
- val expectedBytes = path.readBytes()
+ val expectedBytes = resource.readBytes()
val equals = expectedBytes.contentEquals(actualBytes)
diff --git a/src/commonTest/kotlin/de/stefan_oltmann/kim/format/bmff/BoxReaderTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/bmff/BoxReaderTest.kt
new file mode 100644
index 00000000..3b8243e9
--- /dev/null
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/bmff/BoxReaderTest.kt
@@ -0,0 +1,103 @@
+/*
+ * Copyright 2026 Ramon Bouckaert
+ * Copyright 2025 Ashampoo GmbH & Co. KG
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package de.stefan_oltmann.kim.format.bmff
+
+import de.stefan_oltmann.kim.format.bmff.box.BoxContainer
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.testdata.KimTestData
+import kotlin.test.Test
+import kotlin.test.assertEquals
+
+class BoxReaderTest {
+
+ @Test
+ fun readsBoxesFromHeic() {
+
+ val bytes = KimTestData.getBytesOf(KimTestData.HEIC_TEST_IMAGE_INDEX)
+
+ val byteReader = ByteArrayByteReader(bytes)
+
+ val boxes = BoxReader.readBoxes(
+ byteReader = byteReader,
+ stopAfterMetadataRead = false
+ )
+
+ val allBoxes = BoxContainer.findAllBoxesRecursive(boxes)
+
+ assertEquals(0, allBoxes.first { it.type == BoxType.FTYP }.offset)
+ assertEquals(36, allBoxes.first { it.type == BoxType.META }.offset)
+ assertEquals(48, allBoxes.first { it.type == BoxType.HDLR }.offset)
+ assertEquals(118, allBoxes.first { it.type == BoxType.PITM }.offset)
+ assertEquals(132, allBoxes.first { it.type == BoxType.IINF }.offset)
+ assertEquals(144, allBoxes.first { it.type == BoxType.INFE }.offset)
+ assertEquals(2572, allBoxes.first { it.type == BoxType.ILOC }.offset)
+ assertEquals(3404, allBoxes.first { it.type == BoxType.MDAT }.offset)
+ }
+
+ @Test
+ fun readsBoxesFromAvif() {
+
+ val bytes = KimTestData.getBytesOf(KimTestData.AVIF_TEST_IMAGE_FROM_JPG_USING_IMAGEMAGICK_INDEX)
+
+ val byteReader = ByteArrayByteReader(bytes)
+
+ val boxes = BoxReader.readBoxes(
+ byteReader = byteReader,
+ stopAfterMetadataRead = false
+ )
+
+ val allBoxes = BoxContainer.findAllBoxesRecursive(boxes)
+
+ assertEquals(0, allBoxes.first { it.type == BoxType.FTYP }.offset)
+ assertEquals(28, allBoxes.first { it.type == BoxType.META }.offset)
+ assertEquals(40, allBoxes.first { it.type == BoxType.HDLR }.offset)
+ assertEquals(73, allBoxes.first { it.type == BoxType.PITM }.offset)
+ assertEquals(87, allBoxes.first { it.type == BoxType.ILOC }.offset)
+ assertEquals(157, allBoxes.first { it.type == BoxType.IINF }.offset)
+ assertEquals(169, allBoxes.first { it.type == BoxType.INFE }.offset)
+ assertEquals(401, allBoxes.first { it.type == BoxType.MDAT }.offset)
+ }
+
+ @Test
+ fun readsBoxesFromAnimatedAvif() {
+
+ val bytes = KimTestData.getBytesOf(KimTestData.ANIMATED_AVIF_TEST_IMAGE_INDEX)
+
+ val byteReader = ByteArrayByteReader(bytes)
+
+ val boxes = BoxReader.readBoxes(
+ byteReader = byteReader,
+ stopAfterMetadataRead = false
+ )
+
+ val allBoxes = BoxContainer.findAllBoxesRecursive(boxes)
+
+ assertEquals(0, allBoxes.first { it.type == BoxType.FTYP }.offset)
+ assertEquals(44, allBoxes.first { it.type == BoxType.META }.offset)
+ assertEquals(56, allBoxes.first { it.type == BoxType.HDLR }.offset)
+ assertEquals(89, allBoxes.first { it.type == BoxType.PITM }.offset)
+ assertEquals(103, allBoxes.first { it.type == BoxType.ILOC }.offset)
+ assertEquals(161, allBoxes.first { it.type == BoxType.IINF }.offset)
+ assertEquals(173, allBoxes.first { it.type == BoxType.INFE }.offset)
+ assertEquals(416, allBoxes.first { it.type == BoxType.MOOV }.offset)
+ assertEquals(548, allBoxes.first { it.type == BoxType.TRAK }.offset)
+ assertEquals(560, allBoxes.first { it.type == BoxType.TKHD }.offset)
+ assertEquals(880, allBoxes.first { it.type == BoxType.MDIA }.offset)
+ assertEquals(969, allBoxes.first { it.type == BoxType.MINF }.offset)
+ assertEquals(1298, allBoxes.first { it.type == BoxType.MDAT }.offset)
+ }
+}
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/gif/GifImageParserTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/gif/GifImageParserTest.kt
similarity index 89%
rename from src/commonTest/kotlin/com/ashampoo/kim/format/gif/GifImageParserTest.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/gif/GifImageParserTest.kt
index c5beaac9..852e15cd 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/format/gif/GifImageParserTest.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/gif/GifImageParserTest.kt
@@ -14,11 +14,11 @@
* limitations under the License.
*/
-package com.ashampoo.kim.format.gif
+package de.stefan_oltmann.kim.format.gif
-import com.ashampoo.kim.format.gif.chunk.GifChunkApplicationExtension
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.testdata.KimTestData
+import de.stefan_oltmann.kim.format.gif.chunk.GifChunkApplicationExtension
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.testdata.KimTestData
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertNotNull
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/gif/GifMetadataExtractorTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/gif/GifMetadataExtractorTest.kt
similarity index 87%
rename from src/commonTest/kotlin/com/ashampoo/kim/format/gif/GifMetadataExtractorTest.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/gif/GifMetadataExtractorTest.kt
index 58f1d50b..c310b1a5 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/format/gif/GifMetadataExtractorTest.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/gif/GifMetadataExtractorTest.kt
@@ -14,11 +14,11 @@
* limitations under the License.
*/
-package com.ashampoo.kim.format.gif
+package de.stefan_oltmann.kim.format.gif
-import com.ashampoo.kim.Kim
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.testdata.KimTestData
+import de.stefan_oltmann.kim.Kim
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.testdata.KimTestData
import kotlin.test.Test
import kotlin.test.assertTrue
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/gif/GifUpdaterTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/gif/GifUpdaterTest.kt
similarity index 88%
rename from src/commonTest/kotlin/com/ashampoo/kim/format/gif/GifUpdaterTest.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/gif/GifUpdaterTest.kt
index fd4684f4..046490f3 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/format/gif/GifUpdaterTest.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/gif/GifUpdaterTest.kt
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package com.ashampoo.kim.format.gif
+package de.stefan_oltmann.kim.format.gif
-import com.ashampoo.kim.format.AbstractUpdaterTest
+import de.stefan_oltmann.kim.format.AbstractUpdaterTest
class GifUpdaterTest : AbstractUpdaterTest(
format = "gif",
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/gif/GifWriterTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/gif/GifWriterTest.kt
similarity index 89%
rename from src/commonTest/kotlin/com/ashampoo/kim/format/gif/GifWriterTest.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/gif/GifWriterTest.kt
index 32977a77..16b6a999 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/format/gif/GifWriterTest.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/gif/GifWriterTest.kt
@@ -14,13 +14,13 @@
* limitations under the License.
*/
-package com.ashampoo.kim.format.gif
+package de.stefan_oltmann.kim.format.gif
-import com.ashampoo.kim.Kim
-import com.ashampoo.kim.common.writeBytes
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.output.ByteArrayByteWriter
-import com.ashampoo.kim.testdata.KimTestData
+import de.stefan_oltmann.kim.Kim
+import de.stefan_oltmann.kim.common.writeBytes
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.output.ByteArrayByteWriter
+import de.stefan_oltmann.kim.testdata.KimTestData
import kotlinx.io.files.Path
import kotlin.test.BeforeTest
import kotlin.test.Test
@@ -116,11 +116,11 @@ class GifWriterTest {
if (!equals) {
- Path("build/photo_${KimTestData.GIF_TEST_IMAGE_INDEX}_modified.gif")
+ Path("build/media_${KimTestData.GIF_TEST_IMAGE_INDEX}_modified.gif")
.writeBytes(newBytes)
/* Also write a string representation to see differences more quickly. */
- Path("build/photo_${KimTestData.GIF_TEST_IMAGE_INDEX}_modified.txt")
+ Path("build/media_${KimTestData.GIF_TEST_IMAGE_INDEX}_modified.txt")
.writeBytes(Kim.readMetadata(newBytes).toString().encodeToByteArray())
fail("Bytes for test image #${KimTestData.GIF_TEST_IMAGE_INDEX} are different.")
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkImageDescriptorTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkImageDescriptorTest.kt
similarity index 95%
rename from src/commonTest/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkImageDescriptorTest.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkImageDescriptorTest.kt
index 9db2ba40..645d8db9 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkImageDescriptorTest.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkImageDescriptorTest.kt
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package com.ashampoo.kim.format.gif.chunk
+package de.stefan_oltmann.kim.format.gif.chunk
-import com.ashampoo.kim.model.ImageSize
+import de.stefan_oltmann.kim.model.ImageSize
import kotlin.random.Random
import kotlin.test.Test
import kotlin.test.assertEquals
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkLogicalScreenDescriptorTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkLogicalScreenDescriptorTest.kt
similarity index 95%
rename from src/commonTest/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkLogicalScreenDescriptorTest.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkLogicalScreenDescriptorTest.kt
index dbd790b1..9971c289 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/format/gif/chunk/GifChunkLogicalScreenDescriptorTest.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/gif/chunk/GifChunkLogicalScreenDescriptorTest.kt
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package com.ashampoo.kim.format.gif.chunk
+package de.stefan_oltmann.kim.format.gif.chunk
-import com.ashampoo.kim.model.ImageSize
+import de.stefan_oltmann.kim.model.ImageSize
import kotlin.random.Random
import kotlin.test.Test
import kotlin.test.assertEquals
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/ExifThumbnailExtractionTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/ExifThumbnailExtractionTest.kt
similarity index 79%
rename from src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/ExifThumbnailExtractionTest.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/ExifThumbnailExtractionTest.kt
index 5ebce53c..1ccbc333 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/ExifThumbnailExtractionTest.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/ExifThumbnailExtractionTest.kt
@@ -13,11 +13,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jpeg
+package de.stefan_oltmann.kim.format.jpeg
-import com.ashampoo.kim.Kim
-import com.ashampoo.kim.common.writeBytes
-import com.ashampoo.kim.testdata.KimTestData
+import de.stefan_oltmann.kim.Kim
+import de.stefan_oltmann.kim.common.writeBytes
+import de.stefan_oltmann.kim.testdata.KimTestData
import kotlinx.io.files.Path
import kotlin.test.Test
import kotlin.test.assertNotNull
@@ -32,7 +32,7 @@ class ExifThumbnailExtractionTest {
@Test
fun testExtractJpegThumbnail() {
- for (index in KimTestData.photoIdsWithExifThumbnail) {
+ for (index in KimTestData.mediaIdsWithExifThumbnail) {
/* Thumbnail directory IFD1 is corrupt. */
if (index == 21)
@@ -48,7 +48,7 @@ class ExifThumbnailExtractionTest {
val actualThumbnailBytes = metadata?.getExifThumbnailBytes()
- assertNotNull(actualThumbnailBytes, "Photo $index has no thumbnail bytes.")
+ assertNotNull(actualThumbnailBytes, "Media $index has no thumbnail bytes.")
val expectedThumbnailBytes = KimTestData.getExifThumbnailBytesOf(index)
@@ -56,10 +56,10 @@ class ExifThumbnailExtractionTest {
if (!equals) {
- Path("build/photo_${index}_exifthumb.jpg")
+ Path("build/media_${index}_exifthumb.jpg")
.writeBytes(actualThumbnailBytes)
- fail("Photo $index has not the expected bytes!")
+ fail("Media $index has not the expected bytes!")
}
}
}
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/JpegImageParserTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegImageParserTest.kt
similarity index 94%
rename from src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/JpegImageParserTest.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegImageParserTest.kt
index e3bab951..7fc8c71d 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/JpegImageParserTest.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegImageParserTest.kt
@@ -13,11 +13,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jpeg
+package de.stefan_oltmann.kim.format.jpeg
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.model.ImageSize
-import com.ashampoo.kim.testdata.KimTestData
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.model.ImageSize
+import de.stefan_oltmann.kim.testdata.KimTestData
import kotlin.test.Test
import kotlin.test.assertEquals
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/JpegMetadataExtractorTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegMetadataExtractorTest.kt
similarity index 81%
rename from src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/JpegMetadataExtractorTest.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegMetadataExtractorTest.kt
index 3ece3336..7debafe3 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/JpegMetadataExtractorTest.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegMetadataExtractorTest.kt
@@ -13,12 +13,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jpeg
+package de.stefan_oltmann.kim.format.jpeg
-import com.ashampoo.kim.Kim
-import com.ashampoo.kim.common.writeBytes
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.testdata.KimTestData
+import de.stefan_oltmann.kim.Kim
+import de.stefan_oltmann.kim.common.writeBytes
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.testdata.KimTestData
import kotlinx.io.files.Path
import kotlin.test.Test
import kotlin.test.fail
@@ -47,10 +47,10 @@ class JpegMetadataExtractorTest {
if (!equals) {
- Path("build/photo_${index}_header.jpg")
+ Path("build/media_${index}_header.jpg")
.writeBytes(actualMetadataBytes)
- fail("Photo $index has not the expected bytes!")
+ fail("Media $index has not the expected bytes!")
}
}
}
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/JpegOrientationOffsetFinderTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegOrientationOffsetFinderTest.kt
similarity index 92%
rename from src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/JpegOrientationOffsetFinderTest.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegOrientationOffsetFinderTest.kt
index c266157e..c6a820cd 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/JpegOrientationOffsetFinderTest.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegOrientationOffsetFinderTest.kt
@@ -13,10 +13,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jpeg
+package de.stefan_oltmann.kim.format.jpeg
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.testdata.KimTestData
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.testdata.KimTestData
import kotlin.test.Test
import kotlin.test.assertEquals
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/JpegRewriterTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegRewriterTest.kt
similarity index 92%
rename from src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/JpegRewriterTest.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegRewriterTest.kt
index bd0e3629..828e0595 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/JpegRewriterTest.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegRewriterTest.kt
@@ -13,22 +13,22 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jpeg
-
-import com.ashampoo.kim.Kim
-import com.ashampoo.kim.common.writeBytes
-import com.ashampoo.kim.format.ImageMetadata
-import com.ashampoo.kim.format.jpeg.iptc.IptcMetadata
-import com.ashampoo.kim.format.jpeg.iptc.IptcRecord
-import com.ashampoo.kim.format.jpeg.iptc.IptcTypes
-import com.ashampoo.kim.format.tiff.TiffContents
-import com.ashampoo.kim.format.tiff.constant.ExifTag
-import com.ashampoo.kim.format.tiff.constant.TiffTag
-import com.ashampoo.kim.format.tiff.write.TiffOutputSet
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.model.GpsCoordinates
-import com.ashampoo.kim.output.ByteArrayByteWriter
-import com.ashampoo.kim.testdata.KimTestData
+package de.stefan_oltmann.kim.format.jpeg
+
+import de.stefan_oltmann.kim.Kim
+import de.stefan_oltmann.kim.common.writeBytes
+import de.stefan_oltmann.kim.format.MediaMetadata
+import de.stefan_oltmann.kim.format.jpeg.iptc.IptcMetadata
+import de.stefan_oltmann.kim.format.jpeg.iptc.IptcRecord
+import de.stefan_oltmann.kim.format.jpeg.iptc.IptcTypes
+import de.stefan_oltmann.kim.format.tiff.TiffContents
+import de.stefan_oltmann.kim.format.tiff.constant.ExifTag
+import de.stefan_oltmann.kim.format.tiff.constant.TiffTag
+import de.stefan_oltmann.kim.format.tiff.write.TiffOutputSet
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.model.GpsCoordinates
+import de.stefan_oltmann.kim.output.ByteArrayByteWriter
+import de.stefan_oltmann.kim.testdata.KimTestData
import kotlinx.io.files.Path
import kotlin.test.BeforeTest
import kotlin.test.Test
@@ -166,14 +166,14 @@ class JpegRewriterTest {
if (!equals) {
- Path("build/photo_${index}_modified.jpg")
+ Path("build/media_${index}_modified.jpg")
.writeBytes(actualMetadataBytes)
/* Also write a string representation to see differences more quickly. */
- Path("build/photo_${index}_modified.txt")
+ Path("build/media_${index}_modified.txt")
.writeBytes(Kim.readMetadata(actualMetadataBytes).toString().encodeToByteArray())
- fail("Photo $index has not the expected bytes!")
+ fail("Media $index has not the expected bytes!")
}
}
}
@@ -203,7 +203,7 @@ class JpegRewriterTest {
val bytes = KimTestData.getBytesOf(index)
- val expectedMetadata = Kim.readMetadata(bytes) as ImageMetadata
+ val expectedMetadata = Kim.readMetadata(bytes) as MediaMetadata
val expectedOutputSet = expectedMetadata.exif?.createOutputSet() ?: continue
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/JpegSegmentAnalyzerTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegSegmentAnalyzerTest.kt
similarity index 99%
rename from src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/JpegSegmentAnalyzerTest.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegSegmentAnalyzerTest.kt
index 93dd1f17..730cf836 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/JpegSegmentAnalyzerTest.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegSegmentAnalyzerTest.kt
@@ -13,12 +13,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jpeg
+package de.stefan_oltmann.kim.format.jpeg
-import com.ashampoo.kim.common.toUInt16
-import com.ashampoo.kim.format.jpeg.JpegConstants.JPEG_BYTE_ORDER
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.testdata.KimTestData
+import de.stefan_oltmann.kim.common.toUInt16
+import de.stefan_oltmann.kim.format.jpeg.JpegConstants.JPEG_BYTE_ORDER
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.testdata.KimTestData
import kotlin.test.Test
import kotlin.test.assertEquals
@@ -667,7 +667,7 @@ class JpegSegmentAnalyzerTest {
/* Check that markers are correct. */
for (segmentInfo in segmentInfos) {
- val offset = segmentInfo.offset.toInt()
+ val offset = segmentInfo.offset
val markerAtOffset = byteArrayOf(
bytes[offset],
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/JpegUpdaterTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegUpdaterTest.kt
similarity index 87%
rename from src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/JpegUpdaterTest.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegUpdaterTest.kt
index f9a1a052..6c7d5820 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/JpegUpdaterTest.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/JpegUpdaterTest.kt
@@ -13,8 +13,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jpeg
+package de.stefan_oltmann.kim.format.jpeg
-import com.ashampoo.kim.format.AbstractUpdaterTest
+import de.stefan_oltmann.kim.format.AbstractUpdaterTest
class JpegUpdaterTest : AbstractUpdaterTest("jpg")
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcParserTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcParserTest.kt
similarity index 91%
rename from src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcParserTest.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcParserTest.kt
index 02d687c3..524d4d77 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcParserTest.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcParserTest.kt
@@ -13,10 +13,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jpeg.iptc
+package de.stefan_oltmann.kim.format.jpeg.iptc
-import com.ashampoo.kim.common.convertHexStringToByteArray
-import com.ashampoo.kim.common.toHex
+import de.stefan_oltmann.kim.common.convertHexStringToByteArray
+import de.stefan_oltmann.kim.common.toHex
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertTrue
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcTestConstants.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcTestConstants.kt
similarity index 90%
rename from src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcTestConstants.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcTestConstants.kt
index e1a7e25c..c260230b 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcTestConstants.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcTestConstants.kt
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jpeg.iptc
+package de.stefan_oltmann.kim.format.jpeg.iptc
-import com.ashampoo.kim.format.jpeg.JpegConstants
+import de.stefan_oltmann.kim.format.jpeg.JpegConstants
/** A keyword with umlauts, great to test encoding. */
internal const val TEST_KEYWORD = "Äußerst schön!"
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcWriterTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcWriterTest.kt
similarity index 94%
rename from src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcWriterTest.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcWriterTest.kt
index b063342d..1d12937d 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/format/jpeg/iptc/IptcWriterTest.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jpeg/iptc/IptcWriterTest.kt
@@ -13,10 +13,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jpeg.iptc
+package de.stefan_oltmann.kim.format.jpeg.iptc
-import com.ashampoo.kim.common.toHex
-import com.ashampoo.kim.format.jpeg.JpegConstants
+import de.stefan_oltmann.kim.common.toHex
+import de.stefan_oltmann.kim.format.jpeg.JpegConstants
import kotlin.test.Test
import kotlin.test.assertEquals
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/JxlUpdaterTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jxl/JxlUpdaterTest.kt
similarity index 87%
rename from src/commonTest/kotlin/com/ashampoo/kim/format/jxl/JxlUpdaterTest.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/jxl/JxlUpdaterTest.kt
index 7ca52965..0279cd3c 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/JxlUpdaterTest.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jxl/JxlUpdaterTest.kt
@@ -13,8 +13,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jxl
+package de.stefan_oltmann.kim.format.jxl
-import com.ashampoo.kim.format.AbstractUpdaterTest
+import de.stefan_oltmann.kim.format.AbstractUpdaterTest
class JxlUpdaterTest : AbstractUpdaterTest("jxl")
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/JxlWriterTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jxl/JxlWriterTest.kt
similarity index 88%
rename from src/commonTest/kotlin/com/ashampoo/kim/format/jxl/JxlWriterTest.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/jxl/JxlWriterTest.kt
index 46444303..de349c14 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/format/jxl/JxlWriterTest.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/jxl/JxlWriterTest.kt
@@ -13,17 +13,17 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.jxl
-
-import com.ashampoo.kim.Kim
-import com.ashampoo.kim.common.writeBytes
-import com.ashampoo.kim.format.tiff.constant.ExifTag
-import com.ashampoo.kim.format.tiff.write.TiffOutputSet
-import com.ashampoo.kim.format.tiff.write.TiffWriterLossless
-import com.ashampoo.kim.format.tiff.write.TiffWriterLossy
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.output.ByteArrayByteWriter
-import com.ashampoo.kim.testdata.KimTestData
+package de.stefan_oltmann.kim.format.jxl
+
+import de.stefan_oltmann.kim.Kim
+import de.stefan_oltmann.kim.common.writeBytes
+import de.stefan_oltmann.kim.format.tiff.constant.ExifTag
+import de.stefan_oltmann.kim.format.tiff.write.TiffOutputSet
+import de.stefan_oltmann.kim.format.tiff.write.TiffWriterLossless
+import de.stefan_oltmann.kim.format.tiff.write.TiffWriterLossy
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.output.ByteArrayByteWriter
+import de.stefan_oltmann.kim.testdata.KimTestData
import kotlinx.io.files.Path
import kotlin.test.BeforeTest
import kotlin.test.Test
@@ -166,11 +166,11 @@ class JxlWriterTest {
if (!equals) {
- Path("build/photo_${index}_modified.jxl")
+ Path("build/media_${index}_modified.jxl")
.writeBytes(newBytes)
/* Also write a string representation to see differences more quickly. */
- Path("build/photo_${index}_modified.txt")
+ Path("build/media_${index}_modified.txt")
.writeBytes(Kim.readMetadata(newBytes).toString().encodeToByteArray())
fail("Bytes for test image #$index are different.")
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/png/PngImageParserTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/png/PngImageParserTest.kt
similarity index 89%
rename from src/commonTest/kotlin/com/ashampoo/kim/format/png/PngImageParserTest.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/png/PngImageParserTest.kt
index df9379d0..8c38a92f 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/format/png/PngImageParserTest.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/png/PngImageParserTest.kt
@@ -13,12 +13,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.png
+package de.stefan_oltmann.kim.format.png
-import com.ashampoo.kim.format.png.chunk.PngChunkItxt
-import com.ashampoo.kim.format.png.chunk.PngChunkZtxt
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.testdata.KimTestData
+import de.stefan_oltmann.kim.format.png.chunk.PngChunkItxt
+import de.stefan_oltmann.kim.format.png.chunk.PngChunkZtxt
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.testdata.KimTestData
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertNotNull
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/png/PngMetadataExtractorTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/png/PngMetadataExtractorTest.kt
similarity index 92%
rename from src/commonTest/kotlin/com/ashampoo/kim/format/png/PngMetadataExtractorTest.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/png/PngMetadataExtractorTest.kt
index d35aa980..9904cd90 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/format/png/PngMetadataExtractorTest.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/png/PngMetadataExtractorTest.kt
@@ -13,11 +13,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.png
+package de.stefan_oltmann.kim.format.png
-import com.ashampoo.kim.Kim
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.testdata.KimTestData
+import de.stefan_oltmann.kim.Kim
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.testdata.KimTestData
import kotlin.test.Test
import kotlin.test.assertTrue
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/png/PngUpdaterTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/png/PngUpdaterTest.kt
similarity index 87%
rename from src/commonTest/kotlin/com/ashampoo/kim/format/png/PngUpdaterTest.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/png/PngUpdaterTest.kt
index d40ff16f..015b6622 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/format/png/PngUpdaterTest.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/png/PngUpdaterTest.kt
@@ -13,8 +13,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.png
+package de.stefan_oltmann.kim.format.png
-import com.ashampoo.kim.format.AbstractUpdaterTest
+import de.stefan_oltmann.kim.format.AbstractUpdaterTest
class PngUpdaterTest : AbstractUpdaterTest("png")
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/png/PngWriterTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/png/PngWriterTest.kt
similarity index 85%
rename from src/commonTest/kotlin/com/ashampoo/kim/format/png/PngWriterTest.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/png/PngWriterTest.kt
index e07f313c..eeaf7ab0 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/format/png/PngWriterTest.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/png/PngWriterTest.kt
@@ -13,23 +13,23 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.png
-
-import com.ashampoo.kim.Kim
-import com.ashampoo.kim.common.writeBytes
-import com.ashampoo.kim.format.jpeg.iptc.IptcBlock
-import com.ashampoo.kim.format.jpeg.iptc.IptcConstants
-import com.ashampoo.kim.format.jpeg.iptc.IptcParser
-import com.ashampoo.kim.format.jpeg.iptc.IptcRecord
-import com.ashampoo.kim.format.jpeg.iptc.IptcTypes
-import com.ashampoo.kim.format.jpeg.iptc.IptcWriter
-import com.ashampoo.kim.format.tiff.constant.ExifTag
-import com.ashampoo.kim.format.tiff.write.TiffOutputSet
-import com.ashampoo.kim.format.tiff.write.TiffWriterLossless
-import com.ashampoo.kim.format.tiff.write.TiffWriterLossy
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.output.ByteArrayByteWriter
-import com.ashampoo.kim.testdata.KimTestData
+package de.stefan_oltmann.kim.format.png
+
+import de.stefan_oltmann.kim.Kim
+import de.stefan_oltmann.kim.common.writeBytes
+import de.stefan_oltmann.kim.format.jpeg.iptc.IptcBlock
+import de.stefan_oltmann.kim.format.jpeg.iptc.IptcConstants
+import de.stefan_oltmann.kim.format.jpeg.iptc.IptcParser
+import de.stefan_oltmann.kim.format.jpeg.iptc.IptcRecord
+import de.stefan_oltmann.kim.format.jpeg.iptc.IptcTypes
+import de.stefan_oltmann.kim.format.jpeg.iptc.IptcWriter
+import de.stefan_oltmann.kim.format.tiff.constant.ExifTag
+import de.stefan_oltmann.kim.format.tiff.write.TiffOutputSet
+import de.stefan_oltmann.kim.format.tiff.write.TiffWriterLossless
+import de.stefan_oltmann.kim.format.tiff.write.TiffWriterLossy
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.output.ByteArrayByteWriter
+import de.stefan_oltmann.kim.testdata.KimTestData
import kotlinx.io.files.Path
import kotlin.test.BeforeTest
import kotlin.test.Test
@@ -188,11 +188,11 @@ class PngWriterTest {
if (!equals) {
- Path("build/photo_${index}_modified.png")
+ Path("build/media_${index}_modified.png")
.writeBytes(newBytes)
/* Also write a string representation to see differences more quickly. */
- Path("build/photo_${index}_modified.txt")
+ Path("build/media_${index}_modified.txt")
.writeBytes(Kim.readMetadata(newBytes).toString().encodeToByteArray())
fail("Bytes for test image #$index are different.")
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/raf/RafMetadataExtractorTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/raf/RafMetadataExtractorTest.kt
similarity index 87%
rename from src/commonTest/kotlin/com/ashampoo/kim/format/raf/RafMetadataExtractorTest.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/raf/RafMetadataExtractorTest.kt
index c34f9b44..d90be10b 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/format/raf/RafMetadataExtractorTest.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/raf/RafMetadataExtractorTest.kt
@@ -13,11 +13,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.raf
+package de.stefan_oltmann.kim.format.raf
-import com.ashampoo.kim.Kim
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.testdata.KimTestData
+import de.stefan_oltmann.kim.Kim
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.testdata.KimTestData
import kotlin.test.Test
import kotlin.test.assertTrue
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/tiff/GeoTiffUpdateTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/tiff/GeoTiffUpdateTest.kt
similarity index 73%
rename from src/commonTest/kotlin/com/ashampoo/kim/format/tiff/GeoTiffUpdateTest.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/tiff/GeoTiffUpdateTest.kt
index 99a3176a..ae0fa6f6 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/format/tiff/GeoTiffUpdateTest.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/tiff/GeoTiffUpdateTest.kt
@@ -1,4 +1,5 @@
/*
+ * Copyright 2026 Stefan Oltmann
* Copyright 2025 Ashampoo GmbH & Co. KG
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -13,31 +14,26 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff
-
-import com.ashampoo.kim.common.readBytes
-import com.ashampoo.kim.common.writeBytes
-import com.ashampoo.kim.format.tiff.constant.GeoTiffTag
-import com.ashampoo.kim.format.tiff.write.TiffOutputSet
-import com.ashampoo.kim.format.tiff.write.TiffWriterLossy
-import com.ashampoo.kim.getPathForResource
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.output.ByteArrayByteWriter
+package de.stefan_oltmann.kim.format.tiff
+
+import com.goncalossilva.resources.Resource
+import de.stefan_oltmann.kim.common.writeBytes
+import de.stefan_oltmann.kim.format.tiff.constant.GeoTiffTag
+import de.stefan_oltmann.kim.format.tiff.write.TiffOutputSet
+import de.stefan_oltmann.kim.format.tiff.write.TiffWriterLossy
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.output.ByteArrayByteWriter
import kotlinx.io.files.Path
import kotlin.test.Test
import kotlin.test.fail
class GeoTiffUpdateTest {
- private val resourcePath: String = "src/commonTest/resources/com/ashampoo/kim/updates_tif"
+ private val resourcePath: String = "de/stefan_oltmann/kim/updates_tif"
- private val originalBytes = Path(
- getPathForResource("$resourcePath/empty.tif")
- ).readBytes()
+ private val originalBytes = Resource("$resourcePath/empty.tif").readBytes()
- private val expectedBytes = Path(
- getPathForResource("$resourcePath/geotiff.tif")
- ).readBytes()
+ private val expectedBytes = Resource("$resourcePath/geotiff.tif").readBytes()
@Test
fun testSetGeoTiff() {
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/tiff/TiffOrientationTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/tiff/TiffOrientationTest.kt
similarity index 98%
rename from src/commonTest/kotlin/com/ashampoo/kim/format/tiff/TiffOrientationTest.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/tiff/TiffOrientationTest.kt
index 4817334b..ddb886b9 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/format/tiff/TiffOrientationTest.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/tiff/TiffOrientationTest.kt
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.tiff
+package de.stefan_oltmann.kim.format.tiff
-import com.ashampoo.kim.model.TiffOrientation
+import de.stefan_oltmann.kim.model.TiffOrientation
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertNull
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/webp/WebPWriterTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/webp/WebPWriterTest.kt
similarity index 88%
rename from src/commonTest/kotlin/com/ashampoo/kim/format/webp/WebPWriterTest.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/webp/WebPWriterTest.kt
index da4ea89b..c1410f6e 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/format/webp/WebPWriterTest.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/webp/WebPWriterTest.kt
@@ -13,17 +13,17 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.webp
-
-import com.ashampoo.kim.Kim
-import com.ashampoo.kim.common.writeBytes
-import com.ashampoo.kim.format.tiff.constant.ExifTag
-import com.ashampoo.kim.format.tiff.write.TiffOutputSet
-import com.ashampoo.kim.format.tiff.write.TiffWriterLossless
-import com.ashampoo.kim.format.tiff.write.TiffWriterLossy
-import com.ashampoo.kim.input.ByteArrayByteReader
-import com.ashampoo.kim.output.ByteArrayByteWriter
-import com.ashampoo.kim.testdata.KimTestData
+package de.stefan_oltmann.kim.format.webp
+
+import de.stefan_oltmann.kim.Kim
+import de.stefan_oltmann.kim.common.writeBytes
+import de.stefan_oltmann.kim.format.tiff.constant.ExifTag
+import de.stefan_oltmann.kim.format.tiff.write.TiffOutputSet
+import de.stefan_oltmann.kim.format.tiff.write.TiffWriterLossless
+import de.stefan_oltmann.kim.format.tiff.write.TiffWriterLossy
+import de.stefan_oltmann.kim.input.ByteArrayByteReader
+import de.stefan_oltmann.kim.output.ByteArrayByteWriter
+import de.stefan_oltmann.kim.testdata.KimTestData
import kotlinx.io.files.Path
import kotlin.test.BeforeTest
import kotlin.test.Test
@@ -162,11 +162,11 @@ class WebPWriterTest {
if (!equals) {
- Path("build/photo_${index}_modified.webp")
+ Path("build/media_${index}_modified.webp")
.writeBytes(newBytes)
/* Also write a string representation to see differences more quickly. */
- Path("build/photo_${index}_modified.txt")
+ Path("build/media_${index}_modified.txt")
.writeBytes(Kim.readMetadata(newBytes).toString().encodeToByteArray())
fail("Bytes for test image #$index are different.")
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/webp/WebpUpdaterTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/webp/WebpUpdaterTest.kt
similarity index 87%
rename from src/commonTest/kotlin/com/ashampoo/kim/format/webp/WebpUpdaterTest.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/webp/WebpUpdaterTest.kt
index 82577f78..990fa6b5 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/format/webp/WebpUpdaterTest.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/webp/WebpUpdaterTest.kt
@@ -13,8 +13,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.webp
+package de.stefan_oltmann.kim.format.webp
-import com.ashampoo.kim.format.AbstractUpdaterTest
+import de.stefan_oltmann.kim.format.AbstractUpdaterTest
class WebpUpdaterTest : AbstractUpdaterTest("webp")
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/webp/chunk/WebPChunkVP8XTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/webp/chunk/WebPChunkVP8XTest.kt
similarity index 95%
rename from src/commonTest/kotlin/com/ashampoo/kim/format/webp/chunk/WebPChunkVP8XTest.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/webp/chunk/WebPChunkVP8XTest.kt
index b4cc10ff..a0fb37a5 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/format/webp/chunk/WebPChunkVP8XTest.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/webp/chunk/WebPChunkVP8XTest.kt
@@ -13,11 +13,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.webp.chunk
+package de.stefan_oltmann.kim.format.webp.chunk
-import com.ashampoo.kim.common.convertHexStringToByteArray
-import com.ashampoo.kim.format.webp.WebPConstants
-import com.ashampoo.kim.model.ImageSize
+import de.stefan_oltmann.kim.common.convertHexStringToByteArray
+import de.stefan_oltmann.kim.format.webp.WebPConstants
+import de.stefan_oltmann.kim.model.ImageSize
import kotlin.test.Test
import kotlin.test.assertEquals
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/format/xmp/XmpReaderTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/xmp/XmpReaderTest.kt
similarity index 83%
rename from src/commonTest/kotlin/com/ashampoo/kim/format/xmp/XmpReaderTest.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/format/xmp/XmpReaderTest.kt
index b6ccdcbf..8d6b1847 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/format/xmp/XmpReaderTest.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/format/xmp/XmpReaderTest.kt
@@ -1,4 +1,5 @@
/*
+ * Copyright 2026 Stefan Oltmann
* Copyright 2025 Ashampoo GmbH & Co. KG
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -13,16 +14,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.format.xmp
-
-import com.ashampoo.kim.Kim
-import com.ashampoo.kim.model.GpsCoordinates
-import com.ashampoo.kim.model.LocationShown
-import com.ashampoo.kim.model.PhotoMetadata
-import com.ashampoo.kim.model.PhotoRating
-import com.ashampoo.kim.model.TiffOrientation
-import com.ashampoo.kim.testdata.KimTestData
-import com.ashampoo.xmp.XMPRegionArea
+package de.stefan_oltmann.kim.format.xmp
+
+import de.stefan_oltmann.kim.Kim
+import de.stefan_oltmann.kim.model.GpsCoordinates
+import de.stefan_oltmann.kim.model.LocationShown
+import de.stefan_oltmann.kim.model.MetadataSummary
+import de.stefan_oltmann.kim.model.ExifRating
+import de.stefan_oltmann.kim.model.TiffOrientation
+import de.stefan_oltmann.kim.testdata.KimTestData
+import de.stefan_oltmann.xmp.XMPRegionArea
import kotlin.test.BeforeTest
import kotlin.test.Test
import kotlin.test.assertEquals
@@ -40,10 +41,10 @@ class XmpReaderTest {
val xmp = KimTestData.getXmp("acdsee_sample.xmp")
assertEquals(
- expected = PhotoMetadata(
+ expected = MetadataSummary(
orientation = TiffOrientation.STANDARD,
takenDate = 1_664_279_361_000,
- rating = PhotoRating.THREE_STARS,
+ rating = ExifRating.THREE_STARS,
keywords = setOf("Braut", "Bräutigam", "Paar", "After-Party")
),
actual = XmpReader.readMetadata(xmp)
@@ -56,7 +57,7 @@ class XmpReaderTest {
val xmp = KimTestData.getXmp("digikam_sample.xmp")
assertEquals(
- expected = PhotoMetadata(
+ expected = MetadataSummary(
orientation = TiffOrientation.STANDARD,
takenDate = 1_664_279_361_000,
description = "Standard caption",
@@ -71,7 +72,7 @@ class XmpReaderTest {
state = "Niedersachsen",
country = "Germany"
),
- rating = PhotoRating.FOUR_STARS,
+ rating = ExifRating.FOUR_STARS,
keywords = setOf("Pflanze", "Ecke", "MacBook"),
faces = mapOf(
"MacBook" to XMPRegionArea(0.581172, 0.66247, 0.583093, 0.502398)
@@ -87,10 +88,10 @@ class XmpReaderTest {
val xmp = KimTestData.getXmp("exiftool_sample.xmp")
assertEquals(
- expected = PhotoMetadata(
+ expected = MetadataSummary(
takenDate = 1_540_041_598_000,
description = "orange fox walking on street",
- rating = PhotoRating.THREE_STARS,
+ rating = ExifRating.THREE_STARS,
keywords = setOf(
"\"fuchs\"",
"",
@@ -103,8 +104,7 @@ class XmpReaderTest {
faces = mapOf(
"Swiper" to XMPRegionArea(0.404336, 0.422313, 0.124503, 0.240097)
),
- personsInImage = setOf("Swiper"),
- albums = emptySet()
+ personsInImage = setOf("Swiper")
),
actual = XmpReader.readMetadata(xmp)
)
@@ -116,7 +116,7 @@ class XmpReaderTest {
val xmp = KimTestData.getXmp("mylio_sample.xmp")
assertEquals(
- expected = PhotoMetadata(
+ expected = MetadataSummary(
orientation = TiffOrientation.STANDARD,
takenDate = 1_456_064_625_420,
gpsCoordinates = GpsCoordinates(
@@ -125,7 +125,7 @@ class XmpReaderTest {
),
title = "sample title",
description = "This is the description",
- rating = PhotoRating.REJECTED,
+ rating = ExifRating.REJECTED,
keywords = setOf("animal", "bird"),
faces = mapOf(
"Eye Left" to XMPRegionArea(0.295179, 0.278880, 0.033245, 0.05),
@@ -144,9 +144,9 @@ class XmpReaderTest {
val xmp = KimTestData.getXmp("narrative_sample.xmp")
assertEquals(
- expected = PhotoMetadata(
+ expected = MetadataSummary(
orientation = TiffOrientation.ROTATE_RIGHT,
- rating = PhotoRating.FOUR_STARS,
+ rating = ExifRating.FOUR_STARS,
keywords = emptySet(),
faces = emptyMap(),
personsInImage = emptySet()
@@ -161,10 +161,10 @@ class XmpReaderTest {
val xmp = KimTestData.getXmp("narrative_from_mylio_sample.xmp")
assertEquals(
- expected = PhotoMetadata(
+ expected = MetadataSummary(
takenDate = 1_540_041_598_620,
description = "orange fox walking on street",
- rating = PhotoRating.FIVE_STARS,
+ rating = ExifRating.FIVE_STARS,
keywords = setOf(
"\"fuchs\"",
"",
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/input/PrePendingByteReaderTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/input/PrePendingByteReaderTest.kt
similarity index 98%
rename from src/commonTest/kotlin/com/ashampoo/kim/input/PrePendingByteReaderTest.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/input/PrePendingByteReaderTest.kt
index 66d6772b..faa67dac 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/input/PrePendingByteReaderTest.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/input/PrePendingByteReaderTest.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.input
+package de.stefan_oltmann.kim.input
import kotlin.test.Test
import kotlin.test.assertEquals
diff --git a/src/commonTest/kotlin/de/stefan_oltmann/kim/model/ExifRatingTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/model/ExifRatingTest.kt
new file mode 100644
index 00000000..3b3891df
--- /dev/null
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/model/ExifRatingTest.kt
@@ -0,0 +1,113 @@
+/*
+ * Copyright 2025 Ashampoo GmbH & Co. KG
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package de.stefan_oltmann.kim.model
+
+import kotlin.test.Test
+import kotlin.test.assertEquals
+import kotlin.test.assertNull
+
+class ExifRatingTest {
+
+ private val nullString: String? = null
+
+ @Test
+ fun testOfInt() {
+
+ assertNull(ExifRating.Companion.of(-2))
+ assertNull(ExifRating.Companion.of(6))
+
+ assertEquals(
+ ExifRating.REJECTED,
+ ExifRating.Companion.of(-1)
+ )
+
+ assertEquals(
+ ExifRating.UNRATED,
+ ExifRating.Companion.of(0)
+ )
+
+ assertEquals(
+ ExifRating.ONE_STAR,
+ ExifRating.Companion.of(1)
+ )
+
+ assertEquals(
+ ExifRating.TWO_STARS,
+ ExifRating.Companion.of(2)
+ )
+
+ assertEquals(
+ ExifRating.THREE_STARS,
+ ExifRating.Companion.of(3)
+ )
+
+ assertEquals(
+ ExifRating.FOUR_STARS,
+ ExifRating.Companion.of(4)
+ )
+
+ assertEquals(
+ ExifRating.FIVE_STARS,
+ ExifRating.Companion.of(5)
+ )
+ }
+
+ @Test
+ fun testOfString() {
+
+ assertNull(ExifRating.Companion.of(nullString))
+ assertNull(ExifRating.Companion.of(""))
+ assertNull(ExifRating.Companion.of(" "))
+ assertNull(ExifRating.Companion.of("hello"))
+ assertNull(ExifRating.Companion.of("-2"))
+ assertNull(ExifRating.Companion.of("6"))
+
+ assertEquals(
+ ExifRating.REJECTED,
+ ExifRating.Companion.of("-1")
+ )
+
+ assertEquals(
+ ExifRating.UNRATED,
+ ExifRating.Companion.of("0")
+ )
+
+ assertEquals(
+ ExifRating.ONE_STAR,
+ ExifRating.Companion.of("1")
+ )
+
+ assertEquals(
+ ExifRating.TWO_STARS,
+ ExifRating.Companion.of("2")
+ )
+
+ assertEquals(
+ ExifRating.THREE_STARS,
+ ExifRating.Companion.of("3")
+ )
+
+ assertEquals(
+ ExifRating.FOUR_STARS,
+ ExifRating.Companion.of("4")
+ )
+
+ assertEquals(
+ ExifRating.FIVE_STARS,
+ ExifRating.Companion.of("5")
+ )
+ }
+}
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/model/GpsCoordinatesTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/model/GpsCoordinatesTest.kt
similarity index 99%
rename from src/commonTest/kotlin/com/ashampoo/kim/model/GpsCoordinatesTest.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/model/GpsCoordinatesTest.kt
index bdd1ba7b..5c23969e 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/model/GpsCoordinatesTest.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/model/GpsCoordinatesTest.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.model
+package de.stefan_oltmann.kim.model
import kotlin.test.Test
import kotlin.test.assertEquals
diff --git a/src/commonTest/kotlin/de/stefan_oltmann/kim/model/MediaFormatTest.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/model/MediaFormatTest.kt
new file mode 100644
index 00000000..525f9dcb
--- /dev/null
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/model/MediaFormatTest.kt
@@ -0,0 +1,316 @@
+/*
+ * Copyright 2026 Ramon Bouckaert
+ * Copyright 2025 Ashampoo GmbH & Co. KG
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package de.stefan_oltmann.kim.model
+
+import de.stefan_oltmann.kim.testdata.KimTestData
+import kotlin.test.Test
+import kotlin.test.assertEquals
+import kotlin.test.assertNull
+
+class MediaFormatTest {
+
+ @Test
+ fun testDetect() {
+
+ for (index in 1..KimTestData.TEST_MEDIA_COUNT) {
+
+ val expectedFileType = when {
+ index <= KimTestData.HIGHEST_JPEG_INDEX -> MediaFormat.JPEG
+ index == KimTestData.GIF_TEST_IMAGE_INDEX -> MediaFormat.GIF
+ index == KimTestData.WEBP_TEST_IMAGE_INDEX -> MediaFormat.WEBP
+ index == KimTestData.PNG_TEST_IMAGE_INDEX -> MediaFormat.PNG
+ index == KimTestData.TIFF_NONE_TEST_IMAGE_INDEX -> MediaFormat.TIFF
+ index == KimTestData.TIFF_ZIP_TEST_IMAGE_INDEX -> MediaFormat.TIFF
+ index == KimTestData.TIFF_LZW_TEST_IMAGE_INDEX -> MediaFormat.TIFF
+ index == KimTestData.PNG_APPLE_PREVIEW_TEST_IMAGE_INDEX -> MediaFormat.PNG
+ index == KimTestData.PNG_GIMP_TEST_IMAGE_INDEX -> MediaFormat.PNG
+ index == KimTestData.CR2_TEST_IMAGE_INDEX -> MediaFormat.CR2
+ index == KimTestData.RAF_TEST_IMAGE_INDEX -> MediaFormat.RAF
+ index == KimTestData.RW2_TEST_IMAGE_INDEX -> MediaFormat.RW2
+ index == KimTestData.ORF_TEST_IMAGE_INDEX -> MediaFormat.ORF
+ /* NEF, ARW and DNG do not have unique magic bytes and recognized as TIFF. */
+ index == KimTestData.NEF_TEST_IMAGE_INDEX -> MediaFormat.TIFF
+ index == KimTestData.ARW_TEST_IMAGE_INDEX -> MediaFormat.TIFF
+ index == KimTestData.DNG_CR2_TEST_IMAGE_INDEX -> MediaFormat.TIFF
+ index == KimTestData.DNG_RAF_TEST_IMAGE_INDEX -> MediaFormat.TIFF
+ index == KimTestData.DNG_NEF_TEST_IMAGE_INDEX -> MediaFormat.TIFF
+ index == KimTestData.DNG_ARW_TEST_IMAGE_INDEX -> MediaFormat.TIFF
+ index == KimTestData.DNG_RW2_TEST_IMAGE_INDEX -> MediaFormat.TIFF
+ index == KimTestData.DNG_ORF_TEST_IMAGE_INDEX -> MediaFormat.TIFF
+ index == KimTestData.HEIC_TEST_IMAGE_INDEX -> MediaFormat.HEIC
+ index == KimTestData.HIF_TEST_IMAGE_INDEX -> MediaFormat.HEIC
+ index == KimTestData.HEIC_TEST_IMAGE_WITH_XMP_INDEX -> MediaFormat.HEIC
+ index == KimTestData.AVIF_TEST_IMAGE_FROM_JPG_USING_IMAGEMAGICK_INDEX -> MediaFormat.AVIF
+ index == KimTestData.HEIC_TEST_IMAGE_FROM_JPG_USING_IMAGEMAGICK_INDEX -> MediaFormat.HEIC
+ index == KimTestData.HEIC_TEST_IMAGE_FROM_JPG_USING_APPLE_INDEX -> MediaFormat.HEIC
+ index == KimTestData.HEIC_TEST_IMAGE_FROM_SAMSUNG_INDEX -> MediaFormat.HEIC
+ index == KimTestData.JXL_CONTAINER_DARKTABLE_INDEX -> MediaFormat.JXL
+ index == KimTestData.JXL_CONTAINER_UNCOMPRESSED_INDEX -> MediaFormat.JXL
+ index == KimTestData.JXL_CONTAINER_COMPRESSED_INDEX -> MediaFormat.JXL
+ index == KimTestData.GEOTIFF_PIXEL_SCALING_INDEX -> MediaFormat.TIFF
+ index == KimTestData.GEOTIFF_AFFINE_TRANSFORM_INDEX -> MediaFormat.TIFF
+ index == KimTestData.CR3_TEST_IMAGE_INDEX -> MediaFormat.CR3
+ index == KimTestData.MP4_TEST_VIDEO_INDEX -> MediaFormat.MP4
+ index == KimTestData.MOV_TEST_VIDEO_INDEX -> MediaFormat.MOV
+ index == KimTestData.ANIMATED_AVIF_TEST_IMAGE_INDEX -> MediaFormat.AVIF
+ index == KimTestData.ANIMATED_AVIF_TEST_IMAGE_WITH_LEGACY_ADOBE_XMP_INDEX -> MediaFormat.AVIF
+ index == KimTestData.ANIMATED_AVIF_TEST_IMAGE_WITH_ALT_LEGACY_ADOBE_XMP_INDEX -> MediaFormat.AVIF
+ else -> null
+ }
+
+ val bytes = KimTestData.getBytesOf(index)
+
+ val actualFileType = MediaFormat.detect(bytes)
+
+ assertEquals(expectedFileType, actualFileType, "Media $index has a different type.")
+ }
+ }
+
+ @Test
+ fun testByMimeType() {
+
+ assertNull(MediaFormat.byMimeType("invalid"))
+
+ assertEquals(
+ expected = MediaFormat.JPEG,
+ actual = MediaFormat.byMimeType("image/jpeg")
+ )
+
+ assertEquals(
+ expected = MediaFormat.GIF,
+ actual = MediaFormat.byMimeType("image/gif")
+ )
+
+ assertEquals(
+ expected = MediaFormat.PNG,
+ actual = MediaFormat.byMimeType("image/png")
+ )
+
+ assertEquals(
+ expected = MediaFormat.WEBP,
+ actual = MediaFormat.byMimeType("image/webp")
+ )
+
+ assertEquals(
+ expected = MediaFormat.TIFF,
+ actual = MediaFormat.byMimeType("image/tiff")
+ )
+
+ assertEquals(
+ expected = MediaFormat.HEIC,
+ actual = MediaFormat.byMimeType("image/heic")
+ )
+
+ assertEquals(
+ expected = MediaFormat.CR2,
+ actual = MediaFormat.byMimeType("image/x-canon-cr2")
+ )
+
+ /* OneDrive returns this wrong mime type. */
+ assertEquals(
+ expected = MediaFormat.CR2,
+ actual = MediaFormat.byMimeType("image/CR2")
+ )
+
+ assertEquals(
+ expected = MediaFormat.RAF,
+ actual = MediaFormat.byMimeType("image/x-fuji-raf")
+ )
+
+ assertEquals(
+ expected = MediaFormat.NEF,
+ actual = MediaFormat.byMimeType("image/x-nikon-nef")
+ )
+
+ assertEquals(
+ expected = MediaFormat.ARW,
+ actual = MediaFormat.byMimeType("image/x-sony-arw")
+ )
+
+ assertEquals(
+ expected = MediaFormat.RW2,
+ actual = MediaFormat.byMimeType("image/x-panasonic-rw2")
+ )
+
+ assertEquals(
+ expected = MediaFormat.ORF,
+ actual = MediaFormat.byMimeType("image/x-olympus-orf")
+ )
+
+ assertEquals(
+ expected = MediaFormat.DNG,
+ actual = MediaFormat.byMimeType("image/x-adobe-dng")
+ )
+ }
+
+ @Test
+ fun testByUniformTypeIdentifier() {
+
+ assertNull(MediaFormat.byUniformTypeIdentifier("invalid"))
+
+ assertEquals(
+ expected = MediaFormat.JPEG,
+ actual = MediaFormat.byUniformTypeIdentifier("public.jpeg")
+ )
+
+ assertEquals(
+ expected = MediaFormat.GIF,
+ actual = MediaFormat.byUniformTypeIdentifier("com.compuserve.gif")
+ )
+
+ assertEquals(
+ expected = MediaFormat.PNG,
+ actual = MediaFormat.byUniformTypeIdentifier("public.png")
+ )
+
+ assertEquals(
+ expected = MediaFormat.WEBP,
+ actual = MediaFormat.byUniformTypeIdentifier("org.webmproject.webp")
+ )
+
+ assertEquals(
+ expected = MediaFormat.TIFF,
+ actual = MediaFormat.byUniformTypeIdentifier("public.tiff")
+ )
+
+ assertEquals(
+ expected = MediaFormat.HEIC,
+ actual = MediaFormat.byUniformTypeIdentifier("public.heic")
+ )
+
+ assertEquals(
+ expected = MediaFormat.CR2,
+ actual = MediaFormat.byUniformTypeIdentifier("com.canon.cr2-raw-image")
+ )
+
+ assertEquals(
+ expected = MediaFormat.RAF,
+ actual = MediaFormat.byUniformTypeIdentifier("com.fuji.raw-image")
+ )
+
+ assertEquals(
+ expected = MediaFormat.NEF,
+ actual = MediaFormat.byUniformTypeIdentifier("com.nikon.raw-image")
+ )
+
+ assertEquals(
+ expected = MediaFormat.ARW,
+ actual = MediaFormat.byUniformTypeIdentifier("com.sony.raw-image")
+ )
+
+ assertEquals(
+ expected = MediaFormat.RW2,
+ actual = MediaFormat.byUniformTypeIdentifier("com.panasonic.raw-image")
+ )
+
+ assertEquals(
+ expected = MediaFormat.ORF,
+ actual = MediaFormat.byUniformTypeIdentifier("com.olympus.raw-image")
+ )
+
+ assertEquals(
+ expected = MediaFormat.DNG,
+ actual = MediaFormat.byUniformTypeIdentifier("com.adobe.raw-image")
+ )
+ }
+
+ @Test
+ fun testByFileNameExtension() {
+
+ assertNull(MediaFormat.byFileNameExtension("invalid"))
+
+ assertEquals(
+ expected = MediaFormat.JPEG,
+ actual = MediaFormat.byFileNameExtension("image.jpeg")
+ )
+
+ assertEquals(
+ expected = MediaFormat.JPEG,
+ actual = MediaFormat.byFileNameExtension("image.jpg")
+ )
+
+ assertEquals(
+ expected = MediaFormat.JPEG,
+ actual = MediaFormat.byFileNameExtension("image.JPG")
+ )
+
+ assertEquals(
+ expected = MediaFormat.GIF,
+ actual = MediaFormat.byFileNameExtension("image.gif")
+ )
+
+ assertEquals(
+ expected = MediaFormat.PNG,
+ actual = MediaFormat.byFileNameExtension("image.png")
+ )
+
+ assertEquals(
+ expected = MediaFormat.WEBP,
+ actual = MediaFormat.byFileNameExtension("image.webp")
+ )
+
+ assertEquals(
+ expected = MediaFormat.TIFF,
+ actual = MediaFormat.byFileNameExtension("image.tif")
+ )
+
+ assertEquals(
+ expected = MediaFormat.TIFF,
+ actual = MediaFormat.byFileNameExtension("image.tiff")
+ )
+
+ assertEquals(
+ expected = MediaFormat.HEIC,
+ actual = MediaFormat.byFileNameExtension("image.heic")
+ )
+
+ assertEquals(
+ expected = MediaFormat.CR2,
+ actual = MediaFormat.byFileNameExtension("image.cr2")
+ )
+
+ assertEquals(
+ expected = MediaFormat.RAF,
+ actual = MediaFormat.byFileNameExtension("image.raf")
+ )
+
+ assertEquals(
+ expected = MediaFormat.NEF,
+ actual = MediaFormat.byFileNameExtension("image.nef")
+ )
+
+ assertEquals(
+ expected = MediaFormat.ARW,
+ actual = MediaFormat.byFileNameExtension("image.arw")
+ )
+
+ assertEquals(
+ expected = MediaFormat.RW2,
+ actual = MediaFormat.byFileNameExtension("image.rw2")
+ )
+
+ assertEquals(
+ expected = MediaFormat.ORF,
+ actual = MediaFormat.byFileNameExtension("image.orf")
+ )
+
+ assertEquals(
+ expected = MediaFormat.DNG,
+ actual = MediaFormat.byFileNameExtension("image.dng")
+ )
+ }
+}
diff --git a/src/commonTest/kotlin/com/ashampoo/kim/testdata/KimTestData.kt b/src/commonTest/kotlin/de/stefan_oltmann/kim/testdata/KimTestData.kt
similarity index 75%
rename from src/commonTest/kotlin/com/ashampoo/kim/testdata/KimTestData.kt
rename to src/commonTest/kotlin/de/stefan_oltmann/kim/testdata/KimTestData.kt
index 8dd73dc3..a1944e00 100644
--- a/src/commonTest/kotlin/com/ashampoo/kim/testdata/KimTestData.kt
+++ b/src/commonTest/kotlin/de/stefan_oltmann/kim/testdata/KimTestData.kt
@@ -1,4 +1,6 @@
/*
+ * Copyright 2026 Ramon Bouckaert
+ * Copyright 2026 Stefan Oltmann
* Copyright 2025 Ashampoo GmbH & Co. KG
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -13,11 +15,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.ashampoo.kim.testdata
+package de.stefan_oltmann.kim.testdata
-import com.ashampoo.kim.common.readBytes
-import com.ashampoo.kim.getPathForResource
-import kotlinx.io.files.Path
+import com.goncalossilva.resources.Resource
/**
* This object extracts the bundled test
@@ -28,9 +28,9 @@ import kotlinx.io.files.Path
@Suppress("TooManyFunctions")
object KimTestData {
- private const val RESOURCE_PATH: String = "src/commonTest/resources/com/ashampoo/kim/testdata"
+ private const val RESOURCE_PATH: String = "de/stefan_oltmann/kim/testdata"
- const val TEST_PHOTO_COUNT: Int = 83
+ const val TEST_MEDIA_COUNT: Int = 88
const val HIGHEST_JPEG_INDEX: Int = 50
const val PNG_TEST_IMAGE_INDEX: Int = 51
@@ -66,9 +66,14 @@ object KimTestData {
const val GEOTIFF_PIXEL_SCALING_INDEX: Int = 81
const val GEOTIFF_AFFINE_TRANSFORM_INDEX: Int = 82
const val CR3_TEST_IMAGE_INDEX: Int = 83
+ const val MP4_TEST_VIDEO_INDEX: Int = 84
+ const val MOV_TEST_VIDEO_INDEX: Int = 85
+ const val ANIMATED_AVIF_TEST_IMAGE_INDEX: Int = 86
+ const val ANIMATED_AVIF_TEST_IMAGE_WITH_LEGACY_ADOBE_XMP_INDEX: Int = 87
+ const val ANIMATED_AVIF_TEST_IMAGE_WITH_ALT_LEGACY_ADOBE_XMP_INDEX: Int = 88
@Suppress("MagicNumber")
- val photoIdsWithExifThumbnail: Set = setOf(
+ val mediaIdsWithExifThumbnail: Set = setOf(
2, 3, 4, 5, 6, 7, 10, 12, 15, 16, 19, 20, 21,
22, 24, 25, 27, 28, 29, 30, 31, 32, 33, 35, 37,
38, 39, 40, 41, 42, 46, 48, 49, 50,
@@ -145,51 +150,52 @@ object KimTestData {
GEOTIFF_PIXEL_SCALING_INDEX -> "tif"
GEOTIFF_AFFINE_TRANSFORM_INDEX -> "tif"
CR3_TEST_IMAGE_INDEX -> "cr3"
+ MP4_TEST_VIDEO_INDEX -> "mp4"
+ MOV_TEST_VIDEO_INDEX -> "mov"
+ ANIMATED_AVIF_TEST_IMAGE_INDEX -> "avif"
+ ANIMATED_AVIF_TEST_IMAGE_WITH_LEGACY_ADOBE_XMP_INDEX -> "avif"
+ ANIMATED_AVIF_TEST_IMAGE_WITH_ALT_LEGACY_ADOBE_XMP_INDEX -> "avif"
else -> "jpg"
}
- fun getFileName(index: Int): String = "photo_$index.${getExtension(index)}"
-
- fun getFullImageDiskPath(index: Int): String =
- getPathForResource("$RESOURCE_PATH/full/${getFileName(index)}")
+ fun getFileName(index: Int): String = "media_$index.${getExtension(index)}"
fun getBytesOf(index: Int): ByteArray =
getBytesOf(getFileName(index))
fun getBytesOf(fileName: String): ByteArray =
- Path(getPathForResource("$RESOURCE_PATH/full/$fileName")).readBytes()
+ Resource("$RESOURCE_PATH/full/$fileName").readBytes()
fun getHeaderBytesOf(index: Int): ByteArray =
- Path(getPathForResource("$RESOURCE_PATH/headers/photo_${index}_header.${getExtension(index)}")).readBytes()
+ Resource("$RESOURCE_PATH/headers/media_${index}_header.${getExtension(index)}").readBytes()
fun getModifiedBytesOf(index: Int): ByteArray =
- Path(getPathForResource("$RESOURCE_PATH/modified/photo_${index}_modified.${getExtension(index)}")).readBytes()
+ Resource("$RESOURCE_PATH/modified/media_${index}_modified.${getExtension(index)}").readBytes()
fun getExifThumbnailBytesOf(index: Int): ByteArray =
- Path(getPathForResource("$RESOURCE_PATH/exifthumbs/photo_${index}_exifthumb.jpg")).readBytes()
+ Resource("$RESOURCE_PATH/exifthumbs/media_${index}_exifthumb.jpg").readBytes()
fun getPreviewBytesOf(index: Int): ByteArray =
- Path(getPathForResource("$RESOURCE_PATH/previews/photo_${index}_preview.jpg")).readBytes()
+ Resource("$RESOURCE_PATH/previews/media_${index}_preview.jpg").readBytes()
fun getHeaderExifBytesOf(index: Int): ByteArray =
- Path(getPathForResource("$RESOURCE_PATH/headers/photo_${index}_header_exif.tif")).readBytes()
+ Resource("$RESOURCE_PATH/headers/media_${index}_header_exif.tif").readBytes()
fun getHeaderTextFile(index: Int, identifier: String): String =
- Path(getPathForResource("$RESOURCE_PATH/headers/photo_${index}_header_$identifier.txt")).readBytes()
- .decodeToString()
+ Resource("$RESOURCE_PATH/headers/media_${index}_header_$identifier.txt").readBytes().decodeToString()
fun getToStringText(index: Int): ByteArray =
- Path(getPathForResource("$RESOURCE_PATH/txt/photo_$index.txt")).readBytes()
+ Resource("$RESOURCE_PATH/txt/media_$index.txt").readBytes()
fun getXmp(fileName: String): String =
- Path(getPathForResource("$RESOURCE_PATH/xmp/$fileName")).readBytes().decodeToString()
+ Resource("$RESOURCE_PATH/xmp/$fileName").readBytes().decodeToString()
fun getOriginalXmp(index: Int): ByteArray =
- Path(getPathForResource("$RESOURCE_PATH/xmp/photo_$index.xmp")).readBytes()
+ Resource("$RESOURCE_PATH/xmp/media_$index.xmp").readBytes()
fun getFormattedXmp(index: Int): String =
- Path(getPathForResource("$RESOURCE_PATH/xmp/photo_${index}_formatted.xmp")).readBytes().decodeToString()
+ Resource("$RESOURCE_PATH/xmp/media_${index}_formatted.xmp").readBytes().decodeToString()
fun getMetadataCsvString(): String =
- Path(getPathForResource("$RESOURCE_PATH/metadata.csv")).readBytes().decodeToString()
+ Resource("$RESOURCE_PATH/metadata.csv").readBytes().decodeToString()
}
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/metadata.csv b/src/commonTest/resources/com/ashampoo/kim/testdata/metadata.csv
deleted file mode 100644
index eeef735f..00000000
--- a/src/commonTest/resources/com/ashampoo/kim/testdata/metadata.csv
+++ /dev/null
@@ -1,83 +0,0 @@
-name;imageFormat;widthPx;heightPx;orientation;takenDate;latitude;longitude;locationName;location;city;state;country;cameraMake;cameraModel;lensMake;lensModel;iso;exposureTime;fNumber;focalLength;title;description;flagged;rating;keywords;personsInAlbums;albums;thumbnailImageSize;thumbnailBytes.size;orientedSize.width;orientedSize.height
-photo_1.jpg;JPEG;4000;2670;STANDARD;1563088871470;55.911315916666666;36.9634819;null;null;null;null;null;Canon;Canon EOS 70D;null;EF-S55-250mm f/4-5.6 IS STM;250;0.0025;7.1;250.0;null;honeybee perching on yellow flower;false;0;[dxfoto, published];[];[];null;null;4000;2670
-photo_2.jpg;JPEG;1367;2000;STANDARD;1556991300910;null;null;null;null;null;null;null;NIKON CORPORATION;NIKON D810;null;null;4000;0.025;2.8;200.0;null;orange and silver fox;false;null;[mammal, dog, pet, canine, wildlife, red fox];[];[];174 x 256;9800;1367;2000
-photo_3.jpg;JPEG;2074;2592;null;1588252095000;null;null;null;null;null;null;null;OLYMPUS CORPORATION;E-M10 Mark III;null;OLYMPUS M.30mm F3.5 Macro;500;0.004;5.6;30.0;null;OLYMPUS DIGITAL CAMERA;false;2;[invertebrate, animal];[];[];205 x 256;12001;2074;2592
-photo_4.jpg;JPEG;5184;3456;null;1577057308230;null;null;null;null;null;null;null;Canon;Canon EOS REBEL T5i;null;EF-S18-55mm f/3.5-5.6 IS STM;1600;0.0015625;5.6;18.0;null;cat reclining on floor;false;1;[wood, floor, cat, flooring, mammal, pet, animal];[];[];256 x 171;7757;5184;3456
-photo_5.jpg;JPEG;3771;2121;null;1548094438000;null;null;null;null;null;null;null;FUJIFILM;X-T20;FUJIFILM;XF90mmF2 R LM WR;250;0.005;2.0;90.0;null;null;false;5;[london];[];[];256 x 144;12539;3771;2121
-photo_6.jpg;JPEG;3000;1688;null;1551068056000;null;null;null;null;null;null;null;SONY;DSC-RX100;null;28-100mm F1.8-4.9;125;0.004;8.0;10.4;Hawksbill Sea Turtle (Eretmochelys imbricata) The tapered head ;brown turtle;false;0;[tortoise, reptile, sea turtle, water, outdoors];[];[];256 x 144;11246;3000;1688
-photo_7.jpg;JPEG;6000;3376;null;1555517508000;null;null;null;null;null;null;null;SONY;ILCE-6000;null;DT 0mm F0 SAM;100;0.002;1.8;50.0;null;adult tan dachshund on grass field;false;0;[grass, dog, plant, mammal, animal, pet, canine, hound];[];[];256 x 144;8586;6000;3376
-photo_8.jpg;JPEG;3880;2906;null;1538889789000;-8.5;115.25466667000013;null;null;null;null;null;DJI;FC2103;null;null;100;0.005;2.8;4.5;Aerial picture of Campuhan Ridge Walk , Scenic Green Valley in Ubud Bali. Drone photo.;Aerial picture of Campuhan Ridge Walk , Scenic Green Valley in Ubud Bali. Drone photo. Indonesia.;false;1;[hill, nature, path, ubud, landscape, trekking, tree, travel, green, bali, background, grass, beautiful, ridge, tourism, walk, asia, summer, sky, indonesia, scenic, campuhan, holidays, road, tropical, trail, field, paradise, paddy, palm, photography, planet, view, bali indonesia, outdoor, panoramic, drone, scene, nobody, growth, cloud, sunny, scenery, way, plant, environment, terrace, forest, natural, trek];[];[];null;null;3880;2906
-photo_9.jpg;JPEG;5946;3964;null;1551179986330;null;null;null;null;null;null;null;Canon;Canon EOS 5D Mark IV;null;EF300mm f/2.8L IS II USM;800;0.002;5.0;300.0;Rainbow Lorikeet Parrot;Rainbow Lorikeet Parrot - a very brightly colored parrot;false;3;[adorable, animal, attentive, beak, beautiful, bird, blue, color, colorful, colours, cute, eye, feather, green, isolated, lorikeet, lory, love, multi-coloured, nature, outdoors, parakeet, park, parrot, pet, portrait, purple, rainbow, rainbow-coloured, red, species, tropical, wild, wildlife, yellow, feathers, detail];[];[];null;null;5946;3964
-photo_10.jpg;JPEG;3320;2490;null;1557499439770;null;null;null;null;null;null;null;Canon;Canon EOS 5D Mark IV;null;EF300mm f/2.8L IS II USM;160;6.25E-4;4.0;300.0;null;null;false;2;[];[];[];256 x 192;15009;3320;2490
-photo_11.jpg;JPEG;4094;2699;null;1367412950000;null;null;null;null;null;null;null;NIKON CORPORATION;NIKON D7000;null;150.0 mm f/2.8;280;0.001;6.3;150.0;null;null;false;1;[];[];[];null;null;4094;2699
-photo_12.jpg;JPEG;3482;2460;null;1296308573000;null;null;null;null;null;null;null;SONY;DSLR-A700;null;100-300mm F4.5-5.6;400;5.0E-4;5.6;250.0;null;4;false;4;[animal, bald eagle];[];[];256 x 181;12006;3482;2460
-photo_13.jpg;JPEG;1920;1080;null;null;34.0522342000061;-118.24368490001069;null;null;null;null;null;null;null;null;null;null;null;null;null;null;brown and black tiger lying on green grass during daytime;false;1;[plant, mammal, food, seasoning, flora, dill];[];[];null;null;1920;1080
-photo_14.jpg;JPEG;1920;1200;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;brown turtle swimming underwater;false;0;[tortoise, sea life, reptile];[];[];null;null;1920;1200
-photo_15.jpg;JPEG;5045;4000;STANDARD;1571392576570;53.595344099913866;9.941622399947342;null;null;null;null;null;NIKON CORPORATION;NIKON D5600;null;null;2800;0.008;6.3;200.0;null;chameleon perching on tree branch;false;3;[];[];[];256 x 203;13995;5045;4000
-photo_16.jpg;JPEG;2072;2590;null;1544435452820;null;null;null;null;null;null;null;Canon;Canon EOS 5D Mark III;null;EF100mm f/2.8L Macro IS USM;100;0.004;2.8;100.0;Macaw at Akumal Monkey Sanctuary;Scarlet Macaw porches on tree branch;false;2;[bird, animal, macaw, parrot];[];[];205 x 256;18107;2072;2590
-photo_17.jpg;JPEG;3136;3919;null;1546951701000;null;null;null;null;null;null;null;NIKON CORPORATION;NIKON D610;null;85.0 mm f/1.4;100;8.0E-4;1.4;85.0;null;null;false;5;[animal, cat, pet, mammal, abyssinian];[];[];null;null;3136;3919
-photo_18.jpg;JPEG;3456;2304;null;1542687264000;null;null;null;null;null;null;null;Canon;Canon EOS 60D;null;EF-S18-200mm f/3.5-5.6 IS;100;0.0015625;7.1;155.0;null;null;false;null;[];[];[];null;null;3456;2304
-photo_19.jpg;JPEG;2468;4051;null;1584231200000;35.689198;51.388974;null;null;null;null;null;FUJIFILM;X-T2;FUJIFILM;XF90mmF2 R LM WR;200;null;5.6;90.0;leafs fern rain drops tropical top view nature background dreen fine art fresh sweet cool new;Green Leaves with Raindrops;false;3;[fern];[];[];156 x 256;15133;2468;4051
-photo_20.jpg;JPEG;250;250;ROTATE_RIGHT;null;null;null;null;null;null;null;null;OLYMPUS OPTICAL CO.,LTD;C750UZ;null;null;200;0.03333333333333333;4.0;6.3;null;null;false;null;[];[];[];256 x 256;5648;250;250
-photo_21.jpg;JPEG;4522;6783;STANDARD;1546604284700;null;null;null;null;null;null;null;NIKON CORPORATION;NIKON D810;null;null;200;0.005;5.6;85.0;null;guinea pig sitting in front of toy arcade machine;false;null;[mammal, animal, giant panda, bear, wildlife, furniture];[];[];null;null;4522;6783
-photo_22.jpg;JPEG;3024;4032;null;1581943666950;null;null;null;null;null;null;null;Apple;iPhone 11 Pro Max;Apple;iPhone 11 Pro Max back dual camera 6mm f/2;80;0.008333333333333333;2.0;6.0;null;null;false;null;[];[];[];120 x 160;7487;3024;4032
-photo_23.jpg;JPEG;6144;8192;STANDARD;1701759044000;null;null;null;null;null;null;null;Nothing;A063;null;null;1939;0.04;1.88;5.59;null;null;false;null;[];[];[];null;null;6144;8192
-photo_24.jpg;JPEG;3000;2000;null;1549610355000;null;null;null;null;null;null;null;SONY;ILCE-7RM3;null;FE 24-70mm F2.8 GM;2000;2.0;2.8;25.0;null;selective focus photography of dirt road near red bridge;false;3;[puddle];[];[];256 x 171;10674;3000;2000
-photo_25.jpg;JPEG;4660;3106;STANDARD;1526579057200;null;null;Die Igelwiese;Igelstraße 45;Igelstadt;Niedersachsen;Deutschland;Canon;Canon EOS 500D;null;EF50mm f/1.8 II;100;0.00625;3.2;50.0;null;selective focus photography of hedgehog eating on green grass field;false;4;[animal, hedgehog, mammal, porcupine, rodent];[];[];160 x 107;6164;4660;3106
-photo_26.jpg;JPEG;2304;1536;STANDARD;1491612327500;null;null;null;null;null;null;null;NIKON CORPORATION;NIKON D3300;null;55.0-200.0 mm f/4.0-5.6;1600;0.0025;4.0;55.0;null;photography of white blossoms;false;0;[cherry blossom, flora, flower, plant];[];[];null;null;2304;1536
-photo_27.jpg;JPEG;3705;2470;null;1309069015000;22.8016472;120.285884599995;null;null;null;null;null;Canon;Canon EOS REBEL T3i;null;EF400mm f/5.6L USM;400;0.0015625;5.6;400.0;null;brown butterfly on orange petaled flower;false;3;[invertebrate, cosmos];[];[];256 x 171;9685;3705;2470
-photo_28.jpg;JPEG;2304;1536;STANDARD;1510515708760;null;null;null;null;null;null;null;Canon;Canon EOS M3;null;EF-M18-55mm f/3.5-5.6 IS STM;3200;2.5E-4;5.6;55.0;null;time lapse photography of fire;false;2;[human, person, people];[];[];160 x 120;3209;2304;1536
-photo_29.jpg;JPEG;2920;4045;STANDARD;1500229594000;null;null;null;null;null;null;null;OLYMPUS IMAGING CORP.;E-M10;null;OLYMPUS M.14-42mm F3.5-5.6 II R;100;0.004;3.5;14.0;null;OLYMPUS DIGITAL CAMERA;false;5;[];[];[];116 x 160;4532;2920;4045
-photo_30.jpg;JPEG;3024;4032;STANDARD;1581943666950;null;null;null;null;null;null;null;Apple;iPhone 11 Pro Max;null;null;80;0.008333333333333333;2.0;6.0;null;null;false;null;[];[];[];120 x 160;4070;3024;4032
-photo_31.jpg;JPEG;5472;3648;STANDARD;1444567304000;null;null;null;null;null;null;null;Canon;Canon EOS 70D;null;EF50mm f/1.8 STM;400;0.016666666666666666;3.2;50.0;Gray cat portrait;rules of third photography of orange-eyed gray cat;false;0;[];[];[];160 x 120;8567;5472;3648
-photo_32.jpg;JPEG;3525;1500;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;false;2;[];[];[];256 x 109;9559;3525;1500
-photo_33.jpg;JPEG;6000;4000;null;1510187139000;43.61871020000487;-116.21460679997554;null;null;null;null;null;SONY;ILCE-6300;null;E 55-210mm F4.5-6.3 OSS;200;0.01;6.3;193.0;Ducking Around;selective focus photography of duck;false;1;[animal, waterfowl];[];[];256 x 171;12748;6000;4000
-photo_34.jpg;JPEG;4928;3264;STANDARD;1352360484200;50.40160062469378;19.40082002893384;null;null;null;null;null;NIKON CORPORATION;NIKON D5100;null;null;800;0.025;5.3;75.0;null;selective focus photography of hedgehog on ground;false;0;[mammal];[];[];null;null;4928;3264
-photo_35.jpg;JPEG;3382;2673;null;1544627475890;null;null;null;null;null;null;null;Canon;Canon EOS 5D Mark IV;null;EF100mm f/2.8L Macro IS USM;1600;0.00625;6.3;100.0;null;null;false;5;[];[];[];256 x 202;11636;3382;2673
-photo_36.jpg;JPEG;4240;2384;STANDARD;1498511925000;null;null;null;null;null;null;null;FUJIFILM;X-Pro2;FUJIFILM;XF90mmF2 R LM WR;200;2.5E-4;2.0;90.0;null;selective focus photo of pink petaled flower;false;0;[blossom, flora, dahlia, plant];[];[];null;null;4240;2384
-photo_37.jpg;JPEG;5870;2799;STANDARD;1532721723350;null;null;null;null;null;null;null;NIKON CORPORATION;NIKON D7200;null;35.0 mm f/1.8;100;10.0;6.3;35.0;null;moon illustration;false;3;[eclipse, outdoors, nature, lunar eclipse, space, outer space, night, astronomy, universe];[];[];159 x 76;1487;5870;2799
-photo_38.jpg;JPEG;2371;1580;STANDARD;1399301366760;null;null;null;null;null;null;null;Canon;Canon EOS 550D;null;EF70-200mm f/4L USM;400;8.0E-4;4.0;154.0;null;brown horse;false;2;[foal];[];[];160 x 107;11065;2371;1580
-photo_39.jpg;JPEG;4608;3456;STANDARD;1466260726000;null;null;null;null;null;null;null;OLYMPUS IMAGING CORP. ;E-M10 ;null;OLYMPUS M.40-150mm F4.0-5.6 R;400;0.0125;5.0;102.0;null;null;false;1;[];[];[];160 x 120;9032;4608;3456
-photo_40.jpg;JPEG;4272;2848;STANDARD;1561620317200;null;null;null;null;null;null;null;NIKON CORPORATION;NIKON D500;null;70.0-200.0 mm f/2.8;320;0.003125;8.0;86.0;null;white polar bear swimming;false;3;[wildlife, bear];[];[];160 x 107;3320;4272;2848
-photo_41.jpg;JPEG;3264;1836;STANDARD;1258791581000;null;null;null;null;null;null;null;Sony Ericsson;U10i;null;null;50;0.001;2.8;4.65;null;null;false;null;[];[];[];160 x 120;7053;3264;1836
-photo_42.jpg;JPEG;1024;768;STANDARD;1011527566000;null;null;null;null;null;null;null;TRAVELER OPTICAL CO,LTD;SX330Z;null;null;100;null;null;23.28;null;null;false;null;[];[];[];160 x 120;6495;1024;768
-photo_43.jpg;JPEG;1024;768;STANDARD;1146003974000;null;null;null;null;null;null;null;Digital;Digital Cam;null;null;100;0.0031577418356584838;7.4;10.04;null;null;false;null;[];[];[];null;null;1024;768
-photo_44.jpg;JPEG;2820;3077;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;false;null;[];[];[];null;null;2820;3077
-photo_45.jpg;JPEG;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;false;null;[];[];[];null;null;null;null
-photo_46.jpg;JPEG;325;407;STANDARD;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;false;null;[];[];[];102 x 128;3664;325;407
-photo_47.jpg;JPEG;260;773;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;false;null;[];[];[];null;null;260;773
-photo_48.jpg;JPEG;4032;3024;ROTATE_RIGHT;1669813020203;null;null;null;null;null;null;null;Apple;iPhone SE (3rd generation);Apple;iPhone SE (3rd generation) back camera 3.99mm f/1.8;50;0.01;1.8;3.99;null;null;false;null;[];[];[];160 x 120;11130;3024;4032
-photo_49.jpg;JPEG;5184;3456;STANDARD;1638761253820;null;null;null;null;null;null;null;Canon;Canon EOS 60D;null;EF-S15-85mm f/3.5-5.6 IS USM;400;0.016666666666666666;5.0;24.0;null;null;false;0;[];[];[];160 x 120;11200;5184;3456
-photo_50.jpg;JPEG;6240;4160;STANDARD;1684514510000;null;null;null;null;null;null;null;FUJIFILM;X-T4;FUJIFILM;XC35mmF2;400;0.025;4.0;35.0;null;null;false;0;[];[];[];160 x 120;9359;6240;4160
-photo_51.png;PNG;1500;1000;STANDARD;1583941053360;14.962422;102.090533;null;null;null;null;null;Canon;Canon EOS R;null;EF70-300mm f/4-5.6L IS USM;125;0.008;6.3;300.0;Head of King cobra;brown snake on green grass;false;2;[cobra, sea life, animal, reptile, turtle, snake];[];[];256 x 170;6554;1500;1000
-photo_52.png;PNG;1000;668;STANDARD;1563088871470;55.911316666666664;36.96348166666667;null;null;null;null;null;Canon;Canon EOS 70D;null;EF-S55-250mm f/4-5.6 IS STM;250;0.0025;7.1;250.0;null;honeybee perching on yellow flower;false;0;[dxfoto, published];[];[];null;null;1000;668
-photo_53.png;PNG;1000;668;STANDARD;1563088871470;55.911315916666666;36.9634819;null;null;null;null;null;Canon;Canon EOS 70D;null;EF-S55-250mm f/4-5.6 IS STM;250;0.0025;7.1;250.0;null;honeybee perching on yellow flower;false;0;[dxfoto, published];[];[];256 x 171;7278;1000;668
-photo_54.tif;TIFF;1200;800;STANDARD;1637818851450;null;null;null;null;null;null;null;Canon;Canon EOS 60D;null;EF-S15-85mm f/3.5-5.6 IS USM;400;0.03333333333333333;5.0;57.0;null;null;false;0;[];[];[];null;null;1200;800
-photo_55.tif;TIFF;1200;800;STANDARD;1637818851450;null;null;null;null;null;null;null;Canon;Canon EOS 60D;null;EF-S15-85mm f/3.5-5.6 IS USM;400;0.03333333333333333;5.0;57.0;null;null;false;0;[];[];[];null;null;1200;800
-photo_56.tif;TIFF;1200;800;STANDARD;1637818851450;null;null;null;null;null;null;null;Canon;Canon EOS 60D;null;EF-S15-85mm f/3.5-5.6 IS USM;400;0.03333333333333333;5.0;57.0;null;null;false;0;[];[];[];null;null;1200;800
-photo_57.cr2;CR2;5184;3456;STANDARD;1638761253820;null;null;null;null;null;null;null;Canon;Canon EOS 60D;null;EF-S15-85mm f/3.5-5.6 IS USM;400;0.016666666666666666;5.0;24.0;null;null;false;0;[];[];[];160 x 120;11248;5184;3456
-photo_58.raf;RAF;4416;2944;STANDARD;1684514510000;null;null;null;null;null;null;null;FUJIFILM;X-T4;FUJIFILM;XC35mmF2;400;0.025;4.0;35.0;null;null;false;0;[];[];[];160 x 120;9457;4416;2944
-photo_59.webp;WEBP;5184;3456;STANDARD;1563981341900;null;null;null;null;null;null;null;Canon;Canon EOS Rebel T6;null;EF-S18-55mm f/3.5-5.6 IS II;100;0.016666666666666666;8.0;18.0;null;null;false;2;[];[];[];256 x 170;7245;5184;3456
-photo_61.gif;GIF;3000;3000;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;Sample GIF;This is a sample GIF used to demonstrate XMP metadata embedding.;false;null;[Example GIF with XMP metadata];[];[];null;null;3000;3000
-photo_62.nef;TIFF;4992;3280;STANDARD;1407828658100;null;null;null;null;null;null;null;NIKON CORPORATION;NIKON D5100;null;null;200;0.00625;6.3;30.0;null;null;false;null;[];[];[];4928 x 3264;1470727;4992;3280
-photo_63.arw;TIFF;4272;2848;STANDARD;1265033028000;null;null;null;null;null;null;null;SONY;DSLR-A500;null;null;200;0.016666666666666666;8.0;18.0;null;null;false;null;[];[];[];1616 x 1080;736202;4272;2848
-photo_64.rw2;RW2;null;null;STANDARD;1416431264000;null;null;null;null;null;null;null;Panasonic;DMC-LX7;null;null;160;0.016666666666666666;1.4;4.7;null;null;false;null;[];[];[];null;null;null;null
-photo_65.orf;ORF;3680;2760;STANDARD;1419774657000;null;null;null;null;null;null;null;OLYMPUS IMAGING CORP. ;XZ-1 ;null;null;100;0.0015625;4.0;15.27;null;null;false;null;[];[];[];null;null;3680;2760
-photo_66.dng;TIFF;5344;3516;STANDARD;1638761253820;null;null;null;null;null;null;null;Canon;Canon EOS 60D;null;EF-S15-85mm f/3.5-5.6 IS USM;400;0.016666666666666666;5.0;24.0;null;null;false;null;[];[];[];null;null;5344;3516
-photo_67.dng;TIFF;6240;4160;STANDARD;1684514510000;null;null;null;null;null;null;null;FUJIFILM;X-T4;FUJIFILM;XC35mmF2;400;0.025;4.0;35.0;null;null;false;null;[];[];[];null;null;6240;4160
-photo_68.dng;TIFF;4948;3280;STANDARD;1407828658100;null;null;null;null;null;null;null;NIKON CORPORATION;NIKON D5100;null;18.0-55.0 mm f/3.5-5.6;200;0.00625;6.3;30.0;null;null;false;null;[];[];[];null;null;4948;3280
-photo_69.dng;TIFF;4288;2858;STANDARD;1265033028000;null;null;null;null;null;null;null;SONY;DSLR-A500;null;DT 18-55mm F3.5-5.6 SAM;200;0.016666666666666666;8.0;18.0;null;SONY DSC;false;null;[];[];[];null;null;4288;2858
-photo_70.dng;TIFF;3664;2752;STANDARD;1416431264000;null;null;null;null;null;null;null;Panasonic;DMC-LX7;null;null;160;0.016666666666666666;1.4;4.7;null;null;false;null;[];[];[];null;null;3664;2752
-photo_71.dng;TIFF;3680;2760;STANDARD;1419774657000;null;null;null;null;null;null;null;OLYMPUS IMAGING CORP.;XZ-1;null;null;100;0.0015625;4.0;15.27;null;OLYMPUS DIGITAL CAMERA;false;null;[];[];[];null;null;3680;2760
-photo_72.hif;HEIC;null;null;null;1654877860250;30.052485;101.96257277777778;null;null;null;null;null;SONY;ILCE-7M4;null;FE 24-70mm F2.8 GM II;100;0.04;2.8;24.0;null;null;false;0;[];[];[];null;null;null;null
-photo_73.heic;HEIC;null;null;STANDARD;1688729862000;53.21939166666667;8.239661666666667;null;null;null;null;null;Apple;iPhone SE (3rd generation);Apple;iPhone SE (3rd generation) back camera 3.99mm f/1.8;40;0.00625;1.8;3.99;null;null;false;3;[bird, cat, dog];[];[];null;null;null;null
-photo_74.avif;AVIF;null;null;STANDARD;1444567304000;null;null;null;null;null;null;null;Canon;Canon EOS 70D;null;EF50mm f/1.8 STM;400;0.016666666666666666;3.2;50.0;null;null;false;0;[];[];[];160 x 120;8567;null;null
-photo_75.heic;HEIC;null;null;STANDARD;1444567304000;null;null;null;null;null;null;null;Canon;Canon EOS 70D;null;EF50mm f/1.8 STM;400;0.016666666666666666;3.2;50.0;null;null;false;0;[];[];[];160 x 120;8567;null;null
-photo_76.heic;HEIC;null;null;STANDARD;1563088871470;55.911316666666664;36.963480555555556;null;null;null;null;null;Canon;Canon EOS 70D;null;EF-S55-250mm f/4-5.6 IS STM;250;0.0025;7.1;250.0;null;honeybee perching on yellow flower;false;0;[dxfoto, published];[];[];null;null;null;null
-photo_77.heic;HEIC;null;null;ROTATE_RIGHT;1696689965871;null;null;null;null;null;null;null;samsung;SM-G998B;null;null;640;0.016666666666666666;1.8;6.7;null;null;false;null;[];[];[];null;null;null;null
-photo_78.jxl;JXL;null;null;STANDARD;1551068056000;null;null;null;null;null;null;null;SONY;DSC-RX100;null;28-100mm F1.8-4.9;125;0.004;8.0;10.4;null;brown turtle;false;0;[outdoors, reptile, sea turtle, tortoise, water];[];[];null;null;null;null
-photo_79.jxl;JXL;null;null;null;1551068056000;null;null;null;null;null;null;null;SONY;DSC-RX100;null;28-100mm F1.8-4.9;125;0.004;8.0;10.4;null;null;false;0;[];[];[];256 x 144;11246;null;null
-photo_80.jxl;JXL;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;false;null;[];[];[];null;null;null;null
-photo_81.tif;TIFF;1;1;STANDARD;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;false;null;[];[];[];null;null;1;1
-photo_82.tif;TIFF;1;1;STANDARD;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;false;null;[];[];[];null;null;1;1
-photo_83.cr3;CR3;6000;4000;STANDARD;1675930227790;null;null;null;null;null;null;null;Canon;Canon EOS R3;null;CN-E85mm T1.3 L F;1600;0.02;4.0;85.0;null;null;false;0;[];[];[];null;null;6000;4000
diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_description.jxl b/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_description.jxl
deleted file mode 100644
index 41a638f1..00000000
Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_description.jxl and /dev/null differ
diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_description.no_metadata.jxl b/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_description.no_metadata.jxl
deleted file mode 100644
index e524bd56..00000000
Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_description.no_metadata.jxl and /dev/null differ
diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_description.no_metadata.jxl.txt b/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_description.no_metadata.jxl.txt
deleted file mode 100644
index e5a45ff6..00000000
--- a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_description.no_metadata.jxl.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-File format : JXL
-Resolution : null
----- TIFF ----
-Version 42
-Big-endian (Motorola, MM)
----- Directory IFD0 @ 8 ----
-0000000010 0x010e ImageDescription = Äußerst süße Vögel fliegen durch die Lüfte.
-0000000022 0x8769 ExifOffset = 92
-
----- Directory ExifIFD @ 92 ----
-
----- XMP ----
-
-
-
-
-
-
- Äußerst süße Vögel fliegen durch die Lüfte.
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_gps_coordinates.jxl.txt b/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_gps_coordinates.jxl.txt
deleted file mode 100644
index 6b002857..00000000
--- a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_gps_coordinates.jxl.txt
+++ /dev/null
@@ -1,296 +0,0 @@
-File format : JXL
-Resolution : null
----- TIFF ----
-Version 42
-Little-endian (Intel, II)
----- Directory IFD0 @ 8 ----
-0000000010 0x010f Make = SONY
-0000000022 0x0110 Model = DSC-RX100
-0000000034 0x0112 Orientation = 1
-0000000046 0x011a XResolution = 240/1 (240.0)
-0000000058 0x011b YResolution = 240/1 (240.0)
-0000000070 0x0128 ResolutionUnit = 2
-0000000082 0x0131 Software = Adobe Photoshop Lightroom Classic 8.3.1 (Windows)
-0000000094 0x0132 ModifyDate = 2019:08:04 21:22:41
-0000000106 0x8769 ExifOffset = 236
-0000000118 0x8825 GPSInfo = 12200
-
----- Directory ExifIFD @ 236 ----
-0000000238 0x829a ExposureTime = 1/250 (0.004)
-0000000250 0x829d FNumber = 8/1 (8.0)
-0000000262 0x8822 ExposureProgram = 1
-0000000274 0x8827 ISO = 125
-0000000286 0x8830 SensitivityType = 2
-0000000298 0x8832 RecommendedExposureIndex = 125
-0000000310 0x9000 ExifVersion = [0x30, 0x32, 0x33, 0x31]
-0000000322 0x9003 DateTimeOriginal = 2019:02:25 06:14:16
-0000000334 0x9004 DateTimeDigitized = 2019:02:25 06:14:16
-0000000346 0x9010 OffsetTime = +02:00
-0000000358 0x9201 ShutterSpeedValue = 7965784/1000000 (7.965784)
-0000000370 0x9202 ApertureValue = 6/1 (6.0)
-0000000382 0x9203 BrightnessValue = 17574/2560 (6.864844)
-0000000394 0x9204 ExposureCompensation = 0/10 (0.0)
-0000000406 0x9205 MaxApertureValue = 434/256 (1.695313)
-0000000418 0x9207 MeteringMode = 3
-0000000430 0x9208 LightSource = 0
-0000000442 0x9209 Flash = 15
-0000000454 0x920a FocalLength = 1040/100 (10.4)
-0000000466 0xa001 ColorSpace = 1
-0000000478 0xa20e FocalPlaneXResolution = 135838255/32768 (4145.454559)
-0000000490 0xa20f FocalPlaneYResolution = 135838255/32768 (4145.454559)
-0000000502 0xa210 FocalPlaneResolutionUnit = 3
-0000000514 0xa300 FileSource = 3
-0000000526 0xa301 SceneType = 1
-0000000538 0xa401 CustomRendered = 0
-0000000550 0xa402 ExposureMode = 1
-0000000562 0xa403 WhiteBalance = 0
-0000000574 0xa404 DigitalZoomRatio = 16/16 (1.0)
-0000000586 0xa405 FocalLengthIn35mmFormat = 28
-0000000598 0xa406 SceneCaptureType = 0
-0000000610 0xa408 Contrast = 0
-0000000622 0xa409 Saturation = 0
-0000000634 0xa40a Sharpness = 0
-0000000646 0xa432 LensSpecification = [1040/100 (10.4), 3710/100 (37.1), 18/10 (1.8), 49/10 (4.9)]
-0000000658 0xa434 LensModel = 28-100mm F1.8-4.9
-
----- Directory GPS @ 12200 ----
-0000012202 0x0000 GPSVersionID = [0x02, 0x03, 0x00, 0x00]
-0000012214 0x0001 GPSLatitudeRef = N
-0000012226 0x0002 GPSLatitude = [53/1 (53.0), 13/1 (13.0), 24519/2500 (9.8076)]
-0000012238 0x0003 GPSLongitudeRef = E
-0000012250 0x0004 GPSLongitude = [8/1 (8.0), 14/1 (14.0), 56949/2500 (22.7796)]
-
----- Directory IFD1 @ 860 ----
-0000000862 0x0103 Compression = 6
-0000000874 0x011a XResolution = 72/1 (72.0)
-0000000886 0x011b YResolution = 72/1 (72.0)
-0000000898 0x0128 ResolutionUnit = 2
-0000000910 0x0201 JpgFromRawStart = 954
-0000000922 0x0202 JpgFromRawLength = 11246
-
----- XMP ----
-
-
-
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_gps_coordinates.no_metadata.jxl b/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_gps_coordinates.no_metadata.jxl
deleted file mode 100644
index 5a089d74..00000000
Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_gps_coordinates.no_metadata.jxl and /dev/null differ
diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_gps_coordinates.no_metadata.jxl.txt b/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_gps_coordinates.no_metadata.jxl.txt
deleted file mode 100644
index d2ce75af..00000000
--- a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_gps_coordinates.no_metadata.jxl.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-File format : JXL
-Resolution : null
----- TIFF ----
-Version 42
-Big-endian (Motorola, MM)
----- Directory IFD0 @ 8 ----
-0000000010 0x8769 ExifOffset = 40
-0000000022 0x8825 GPSInfo = 48
-
----- Directory ExifIFD @ 40 ----
-
----- Directory GPS @ 48 ----
-0000000050 0x0000 GPSVersionID = [0x02, 0x03, 0x00, 0x00]
-0000000062 0x0001 GPSLatitudeRef = N
-0000000074 0x0002 GPSLatitude = [53/1 (53.0), 13/1 (13.0), 24519/2500 (9.8076)]
-0000000086 0x0003 GPSLongitudeRef = E
-0000000098 0x0004 GPSLongitude = [8/1 (8.0), 14/1 (14.0), 56949/2500 (22.7796)]
-
----- XMP ----
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_gps_coordinates_and_location_shown.jxl b/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_gps_coordinates_and_location_shown.jxl
deleted file mode 100644
index 6b184fa8..00000000
Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_gps_coordinates_and_location_shown.jxl and /dev/null differ
diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_gps_coordinates_and_location_shown.jxl.txt b/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_gps_coordinates_and_location_shown.jxl.txt
deleted file mode 100644
index 2ad3c992..00000000
--- a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_gps_coordinates_and_location_shown.jxl.txt
+++ /dev/null
@@ -1,319 +0,0 @@
-File format : JXL
-Resolution : null
----- TIFF ----
-Version 42
-Little-endian (Intel, II)
----- Directory IFD0 @ 8 ----
-0000000010 0x010f Make = SONY
-0000000022 0x0110 Model = DSC-RX100
-0000000034 0x0112 Orientation = 1
-0000000046 0x011a XResolution = 240/1 (240.0)
-0000000058 0x011b YResolution = 240/1 (240.0)
-0000000070 0x0128 ResolutionUnit = 2
-0000000082 0x0131 Software = Adobe Photoshop Lightroom Classic 8.3.1 (Windows)
-0000000094 0x0132 ModifyDate = 2019:08:04 21:22:41
-0000000106 0x8769 ExifOffset = 236
-0000000118 0x8825 GPSInfo = 12200
-
----- Directory ExifIFD @ 236 ----
-0000000238 0x829a ExposureTime = 1/250 (0.004)
-0000000250 0x829d FNumber = 8/1 (8.0)
-0000000262 0x8822 ExposureProgram = 1
-0000000274 0x8827 ISO = 125
-0000000286 0x8830 SensitivityType = 2
-0000000298 0x8832 RecommendedExposureIndex = 125
-0000000310 0x9000 ExifVersion = [0x30, 0x32, 0x33, 0x31]
-0000000322 0x9003 DateTimeOriginal = 2019:02:25 06:14:16
-0000000334 0x9004 DateTimeDigitized = 2019:02:25 06:14:16
-0000000346 0x9010 OffsetTime = +02:00
-0000000358 0x9201 ShutterSpeedValue = 7965784/1000000 (7.965784)
-0000000370 0x9202 ApertureValue = 6/1 (6.0)
-0000000382 0x9203 BrightnessValue = 17574/2560 (6.864844)
-0000000394 0x9204 ExposureCompensation = 0/10 (0.0)
-0000000406 0x9205 MaxApertureValue = 434/256 (1.695313)
-0000000418 0x9207 MeteringMode = 3
-0000000430 0x9208 LightSource = 0
-0000000442 0x9209 Flash = 15
-0000000454 0x920a FocalLength = 1040/100 (10.4)
-0000000466 0xa001 ColorSpace = 1
-0000000478 0xa20e FocalPlaneXResolution = 135838255/32768 (4145.454559)
-0000000490 0xa20f FocalPlaneYResolution = 135838255/32768 (4145.454559)
-0000000502 0xa210 FocalPlaneResolutionUnit = 3
-0000000514 0xa300 FileSource = 3
-0000000526 0xa301 SceneType = 1
-0000000538 0xa401 CustomRendered = 0
-0000000550 0xa402 ExposureMode = 1
-0000000562 0xa403 WhiteBalance = 0
-0000000574 0xa404 DigitalZoomRatio = 16/16 (1.0)
-0000000586 0xa405 FocalLengthIn35mmFormat = 28
-0000000598 0xa406 SceneCaptureType = 0
-0000000610 0xa408 Contrast = 0
-0000000622 0xa409 Saturation = 0
-0000000634 0xa40a Sharpness = 0
-0000000646 0xa432 LensSpecification = [1040/100 (10.4), 3710/100 (37.1), 18/10 (1.8), 49/10 (4.9)]
-0000000658 0xa434 LensModel = 28-100mm F1.8-4.9
-
----- Directory GPS @ 12200 ----
-0000012202 0x0000 GPSVersionID = [0x02, 0x03, 0x00, 0x00]
-0000012214 0x0001 GPSLatitudeRef = N
-0000012226 0x0002 GPSLatitude = [53/1 (53.0), 13/1 (13.0), 24519/2500 (9.8076)]
-0000012238 0x0003 GPSLongitudeRef = E
-0000012250 0x0004 GPSLongitude = [8/1 (8.0), 14/1 (14.0), 56949/2500 (22.7796)]
-
----- Directory IFD1 @ 860 ----
-0000000862 0x0103 Compression = 6
-0000000874 0x011a XResolution = 72/1 (72.0)
-0000000886 0x011b YResolution = 72/1 (72.0)
-0000000898 0x0128 ResolutionUnit = 2
-0000000910 0x0201 JpgFromRawStart = 954
-0000000922 0x0202 JpgFromRawLength = 11246
-
----- XMP ----
-
-
-
-
-
-
-
-
-
-
- //CRASH
-
-
-
-
-
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_keywords.jxl.txt b/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_keywords.jxl.txt
deleted file mode 100644
index 06c24d00..00000000
--- a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_keywords.jxl.txt
+++ /dev/null
@@ -1,290 +0,0 @@
-File format : JXL
-Resolution : null
----- TIFF ----
-Version 42
-Little-endian (Intel, II)
----- Directory IFD0 @ 8 ----
-0000000010 0x010f Make = SONY
-0000000022 0x0110 Model = DSC-RX100
-0000000034 0x011a XResolution = 240/1 (240.0)
-0000000046 0x011b YResolution = 240/1 (240.0)
-0000000058 0x0128 ResolutionUnit = 2
-0000000070 0x0131 Software = Adobe Photoshop Lightroom Classic 8.3.1 (Windows)
-0000000082 0x0132 ModifyDate = 2019:08:04 21:22:41
-0000000094 0x8769 ExifOffset = 212
-
----- Directory ExifIFD @ 212 ----
-0000000214 0x829a ExposureTime = 1/250 (0.004)
-0000000226 0x829d FNumber = 8/1 (8.0)
-0000000238 0x8822 ExposureProgram = 1
-0000000250 0x8827 ISO = 125
-0000000262 0x8830 SensitivityType = 2
-0000000274 0x8832 RecommendedExposureIndex = 125
-0000000286 0x9000 ExifVersion = [0x30, 0x32, 0x33, 0x31]
-0000000298 0x9003 DateTimeOriginal = 2019:02:25 06:14:16
-0000000310 0x9004 DateTimeDigitized = 2019:02:25 06:14:16
-0000000322 0x9010 OffsetTime = +02:00
-0000000334 0x9201 ShutterSpeedValue = 7965784/1000000 (7.965784)
-0000000346 0x9202 ApertureValue = 6/1 (6.0)
-0000000358 0x9203 BrightnessValue = 17574/2560 (6.864844)
-0000000370 0x9204 ExposureCompensation = 0/10 (0.0)
-0000000382 0x9205 MaxApertureValue = 434/256 (1.695313)
-0000000394 0x9207 MeteringMode = 3
-0000000406 0x9208 LightSource = 0
-0000000418 0x9209 Flash = 15
-0000000430 0x920a FocalLength = 1040/100 (10.4)
-0000000442 0xa001 ColorSpace = 1
-0000000454 0xa20e FocalPlaneXResolution = 135838255/32768 (4145.454559)
-0000000466 0xa20f FocalPlaneYResolution = 135838255/32768 (4145.454559)
-0000000478 0xa210 FocalPlaneResolutionUnit = 3
-0000000490 0xa300 FileSource = 3
-0000000502 0xa301 SceneType = 1
-0000000514 0xa401 CustomRendered = 0
-0000000526 0xa402 ExposureMode = 1
-0000000538 0xa403 WhiteBalance = 0
-0000000550 0xa404 DigitalZoomRatio = 16/16 (1.0)
-0000000562 0xa405 FocalLengthIn35mmFormat = 28
-0000000574 0xa406 SceneCaptureType = 0
-0000000586 0xa408 Contrast = 0
-0000000598 0xa409 Saturation = 0
-0000000610 0xa40a Sharpness = 0
-0000000622 0xa432 LensSpecification = [1040/100 (10.4), 3710/100 (37.1), 18/10 (1.8), 49/10 (4.9)]
-0000000634 0xa434 LensModel = 28-100mm F1.8-4.9
-
----- Directory IFD1 @ 836 ----
-0000000838 0x0103 Compression = 6
-0000000850 0x011a XResolution = 72/1 (72.0)
-0000000862 0x011b YResolution = 72/1 (72.0)
-0000000874 0x0128 ResolutionUnit = 2
-0000000886 0x0201 JpgFromRawStart = 930
-0000000898 0x0202 JpgFromRawLength = 11246
-
----- XMP ----
-
-
-
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- hello
- test
- Äußerst öffentlich
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_keywords.no_metadata.jxl b/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_keywords.no_metadata.jxl
deleted file mode 100644
index 893926cf..00000000
Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_keywords.no_metadata.jxl and /dev/null differ
diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_location_shown.jxl b/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_location_shown.jxl
deleted file mode 100644
index 298bbc2f..00000000
Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_location_shown.jxl and /dev/null differ
diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_location_shown.jxl.txt b/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_location_shown.jxl.txt
deleted file mode 100644
index 38a3d9bf..00000000
--- a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_location_shown.jxl.txt
+++ /dev/null
@@ -1,306 +0,0 @@
-File format : JXL
-Resolution : null
----- TIFF ----
-Version 42
-Little-endian (Intel, II)
----- Directory IFD0 @ 8 ----
-0000000010 0x010f Make = SONY
-0000000022 0x0110 Model = DSC-RX100
-0000000034 0x011a XResolution = 240/1 (240.0)
-0000000046 0x011b YResolution = 240/1 (240.0)
-0000000058 0x0128 ResolutionUnit = 2
-0000000070 0x0131 Software = Adobe Photoshop Lightroom Classic 8.3.1 (Windows)
-0000000082 0x0132 ModifyDate = 2019:08:04 21:22:41
-0000000094 0x8769 ExifOffset = 212
-
----- Directory ExifIFD @ 212 ----
-0000000214 0x829a ExposureTime = 1/250 (0.004)
-0000000226 0x829d FNumber = 8/1 (8.0)
-0000000238 0x8822 ExposureProgram = 1
-0000000250 0x8827 ISO = 125
-0000000262 0x8830 SensitivityType = 2
-0000000274 0x8832 RecommendedExposureIndex = 125
-0000000286 0x9000 ExifVersion = [0x30, 0x32, 0x33, 0x31]
-0000000298 0x9003 DateTimeOriginal = 2019:02:25 06:14:16
-0000000310 0x9004 DateTimeDigitized = 2019:02:25 06:14:16
-0000000322 0x9010 OffsetTime = +02:00
-0000000334 0x9201 ShutterSpeedValue = 7965784/1000000 (7.965784)
-0000000346 0x9202 ApertureValue = 6/1 (6.0)
-0000000358 0x9203 BrightnessValue = 17574/2560 (6.864844)
-0000000370 0x9204 ExposureCompensation = 0/10 (0.0)
-0000000382 0x9205 MaxApertureValue = 434/256 (1.695313)
-0000000394 0x9207 MeteringMode = 3
-0000000406 0x9208 LightSource = 0
-0000000418 0x9209 Flash = 15
-0000000430 0x920a FocalLength = 1040/100 (10.4)
-0000000442 0xa001 ColorSpace = 1
-0000000454 0xa20e FocalPlaneXResolution = 135838255/32768 (4145.454559)
-0000000466 0xa20f FocalPlaneYResolution = 135838255/32768 (4145.454559)
-0000000478 0xa210 FocalPlaneResolutionUnit = 3
-0000000490 0xa300 FileSource = 3
-0000000502 0xa301 SceneType = 1
-0000000514 0xa401 CustomRendered = 0
-0000000526 0xa402 ExposureMode = 1
-0000000538 0xa403 WhiteBalance = 0
-0000000550 0xa404 DigitalZoomRatio = 16/16 (1.0)
-0000000562 0xa405 FocalLengthIn35mmFormat = 28
-0000000574 0xa406 SceneCaptureType = 0
-0000000586 0xa408 Contrast = 0
-0000000598 0xa409 Saturation = 0
-0000000610 0xa40a Sharpness = 0
-0000000622 0xa432 LensSpecification = [1040/100 (10.4), 3710/100 (37.1), 18/10 (1.8), 49/10 (4.9)]
-0000000634 0xa434 LensModel = 28-100mm F1.8-4.9
-
----- Directory IFD1 @ 836 ----
-0000000838 0x0103 Compression = 6
-0000000850 0x011a XResolution = 72/1 (72.0)
-0000000862 0x011b YResolution = 72/1 (72.0)
-0000000874 0x0128 ResolutionUnit = 2
-0000000886 0x0201 JpgFromRawStart = 930
-0000000898 0x0202 JpgFromRawLength = 11246
-
----- XMP ----
-
-
-
-
-
-
-
-
-
-
- //CRASH
-
-
-
-
-
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_location_shown.no_metadata.jxl.txt b/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_location_shown.no_metadata.jxl.txt
deleted file mode 100644
index dbe3a711..00000000
--- a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_location_shown.no_metadata.jxl.txt
+++ /dev/null
@@ -1,35 +0,0 @@
-File format : JXL
-Resolution : null
----- XMP ----
-
-
-
-
-
-
-
-
-
-
- //CRASH
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_persons.jxl b/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_persons.jxl
deleted file mode 100644
index 780531a0..00000000
Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_persons.jxl and /dev/null differ
diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_persons.jxl.txt b/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_persons.jxl.txt
deleted file mode 100644
index 43a65d55..00000000
--- a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_persons.jxl.txt
+++ /dev/null
@@ -1,290 +0,0 @@
-File format : JXL
-Resolution : null
----- TIFF ----
-Version 42
-Little-endian (Intel, II)
----- Directory IFD0 @ 8 ----
-0000000010 0x010f Make = SONY
-0000000022 0x0110 Model = DSC-RX100
-0000000034 0x011a XResolution = 240/1 (240.0)
-0000000046 0x011b YResolution = 240/1 (240.0)
-0000000058 0x0128 ResolutionUnit = 2
-0000000070 0x0131 Software = Adobe Photoshop Lightroom Classic 8.3.1 (Windows)
-0000000082 0x0132 ModifyDate = 2019:08:04 21:22:41
-0000000094 0x8769 ExifOffset = 212
-
----- Directory ExifIFD @ 212 ----
-0000000214 0x829a ExposureTime = 1/250 (0.004)
-0000000226 0x829d FNumber = 8/1 (8.0)
-0000000238 0x8822 ExposureProgram = 1
-0000000250 0x8827 ISO = 125
-0000000262 0x8830 SensitivityType = 2
-0000000274 0x8832 RecommendedExposureIndex = 125
-0000000286 0x9000 ExifVersion = [0x30, 0x32, 0x33, 0x31]
-0000000298 0x9003 DateTimeOriginal = 2019:02:25 06:14:16
-0000000310 0x9004 DateTimeDigitized = 2019:02:25 06:14:16
-0000000322 0x9010 OffsetTime = +02:00
-0000000334 0x9201 ShutterSpeedValue = 7965784/1000000 (7.965784)
-0000000346 0x9202 ApertureValue = 6/1 (6.0)
-0000000358 0x9203 BrightnessValue = 17574/2560 (6.864844)
-0000000370 0x9204 ExposureCompensation = 0/10 (0.0)
-0000000382 0x9205 MaxApertureValue = 434/256 (1.695313)
-0000000394 0x9207 MeteringMode = 3
-0000000406 0x9208 LightSource = 0
-0000000418 0x9209 Flash = 15
-0000000430 0x920a FocalLength = 1040/100 (10.4)
-0000000442 0xa001 ColorSpace = 1
-0000000454 0xa20e FocalPlaneXResolution = 135838255/32768 (4145.454559)
-0000000466 0xa20f FocalPlaneYResolution = 135838255/32768 (4145.454559)
-0000000478 0xa210 FocalPlaneResolutionUnit = 3
-0000000490 0xa300 FileSource = 3
-0000000502 0xa301 SceneType = 1
-0000000514 0xa401 CustomRendered = 0
-0000000526 0xa402 ExposureMode = 1
-0000000538 0xa403 WhiteBalance = 0
-0000000550 0xa404 DigitalZoomRatio = 16/16 (1.0)
-0000000562 0xa405 FocalLengthIn35mmFormat = 28
-0000000574 0xa406 SceneCaptureType = 0
-0000000586 0xa408 Contrast = 0
-0000000598 0xa409 Saturation = 0
-0000000610 0xa40a Sharpness = 0
-0000000622 0xa432 LensSpecification = [1040/100 (10.4), 3710/100 (37.1), 18/10 (1.8), 49/10 (4.9)]
-0000000634 0xa434 LensModel = 28-100mm F1.8-4.9
-
----- Directory IFD1 @ 836 ----
-0000000838 0x0103 Compression = 6
-0000000850 0x011a XResolution = 72/1 (72.0)
-0000000862 0x011b YResolution = 72/1 (72.0)
-0000000874 0x0128 ResolutionUnit = 2
-0000000886 0x0201 JpgFromRawStart = 930
-0000000898 0x0202 JpgFromRawLength = 11246
-
----- XMP ----
-
-
-
-
-
-
- Dora
- Swiper
-
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_persons.no_metadata.jxl b/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_persons.no_metadata.jxl
deleted file mode 100644
index 88943a98..00000000
Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_persons.no_metadata.jxl and /dev/null differ
diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_rating.no_metadata.jxl b/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_rating.no_metadata.jxl
deleted file mode 100644
index 0369dcff..00000000
Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_rating.no_metadata.jxl and /dev/null differ
diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_title.no_metadata.jxl b/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_title.no_metadata.jxl
deleted file mode 100644
index 7a45092c..00000000
Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_title.no_metadata.jxl and /dev/null differ
diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_title.no_metadata.jxl.txt b/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_title.no_metadata.jxl.txt
deleted file mode 100644
index 52e0ea0a..00000000
--- a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/new_title.no_metadata.jxl.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-File format : JXL
-Resolution : null
----- XMP ----
-
-
-
-
-
-
- Süße Vögelchen
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/rotated_right.jxl b/src/commonTest/resources/com/ashampoo/kim/updates_jxl/rotated_right.jxl
deleted file mode 100644
index 392ed9b6..00000000
Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/rotated_right.jxl and /dev/null differ
diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/rotated_right.jxl.txt b/src/commonTest/resources/com/ashampoo/kim/updates_jxl/rotated_right.jxl.txt
deleted file mode 100644
index c13f4dd3..00000000
--- a/src/commonTest/resources/com/ashampoo/kim/updates_jxl/rotated_right.jxl.txt
+++ /dev/null
@@ -1,286 +0,0 @@
-File format : JXL
-Resolution : null
----- TIFF ----
-Version 42
-Little-endian (Intel, II)
----- Directory IFD0 @ 8 ----
-0000000010 0x010f Make = SONY
-0000000022 0x0110 Model = DSC-RX100
-0000000034 0x0112 Orientation = 6
-0000000046 0x011a XResolution = 240/1 (240.0)
-0000000058 0x011b YResolution = 240/1 (240.0)
-0000000070 0x0128 ResolutionUnit = 2
-0000000082 0x0131 Software = Adobe Photoshop Lightroom Classic 8.3.1 (Windows)
-0000000094 0x0132 ModifyDate = 2019:08:04 21:22:41
-0000000106 0x8769 ExifOffset = 224
-
----- Directory ExifIFD @ 224 ----
-0000000226 0x829a ExposureTime = 1/250 (0.004)
-0000000238 0x829d FNumber = 8/1 (8.0)
-0000000250 0x8822 ExposureProgram = 1
-0000000262 0x8827 ISO = 125
-0000000274 0x8830 SensitivityType = 2
-0000000286 0x8832 RecommendedExposureIndex = 125
-0000000298 0x9000 ExifVersion = [0x30, 0x32, 0x33, 0x31]
-0000000310 0x9003 DateTimeOriginal = 2019:02:25 06:14:16
-0000000322 0x9004 DateTimeDigitized = 2019:02:25 06:14:16
-0000000334 0x9010 OffsetTime = +02:00
-0000000346 0x9201 ShutterSpeedValue = 7965784/1000000 (7.965784)
-0000000358 0x9202 ApertureValue = 6/1 (6.0)
-0000000370 0x9203 BrightnessValue = 17574/2560 (6.864844)
-0000000382 0x9204 ExposureCompensation = 0/10 (0.0)
-0000000394 0x9205 MaxApertureValue = 434/256 (1.695313)
-0000000406 0x9207 MeteringMode = 3
-0000000418 0x9208 LightSource = 0
-0000000430 0x9209 Flash = 15
-0000000442 0x920a FocalLength = 1040/100 (10.4)
-0000000454 0xa001 ColorSpace = 1
-0000000466 0xa20e FocalPlaneXResolution = 135838255/32768 (4145.454559)
-0000000478 0xa20f FocalPlaneYResolution = 135838255/32768 (4145.454559)
-0000000490 0xa210 FocalPlaneResolutionUnit = 3
-0000000502 0xa300 FileSource = 3
-0000000514 0xa301 SceneType = 1
-0000000526 0xa401 CustomRendered = 0
-0000000538 0xa402 ExposureMode = 1
-0000000550 0xa403 WhiteBalance = 0
-0000000562 0xa404 DigitalZoomRatio = 16/16 (1.0)
-0000000574 0xa405 FocalLengthIn35mmFormat = 28
-0000000586 0xa406 SceneCaptureType = 0
-0000000598 0xa408 Contrast = 0
-0000000610 0xa409 Saturation = 0
-0000000622 0xa40a Sharpness = 0
-0000000634 0xa432 LensSpecification = [1040/100 (10.4), 3710/100 (37.1), 18/10 (1.8), 49/10 (4.9)]
-0000000646 0xa434 LensModel = 28-100mm F1.8-4.9
-
----- Directory IFD1 @ 848 ----
-0000000850 0x0103 Compression = 6
-0000000862 0x011a XResolution = 72/1 (72.0)
-0000000874 0x011b YResolution = 72/1 (72.0)
-0000000886 0x0128 ResolutionUnit = 2
-0000000898 0x0201 JpgFromRawStart = 942
-0000000910 0x0202 JpgFromRawLength = 11246
-
----- XMP ----
-
-
-
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
- 0, 0
- 255, 255
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/commonTest/resources/com/ashampoo/kim/copy_test.png b/src/commonTest/resources/de/stefan_oltmann/kim/copy_test.png
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/copy_test.png
rename to src/commonTest/resources/de/stefan_oltmann/kim/copy_test.png
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/alice_in_wonderland.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/alice_in_wonderland.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/alice_in_wonderland.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/alice_in_wonderland.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_10_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_10_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_10_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_10_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_12_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_12_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_12_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_12_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_15_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_15_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_15_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_15_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_16_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_16_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_16_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_16_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_18_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_18_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_18_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_18_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_19_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_19_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_19_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_19_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_20_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_20_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_20_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_20_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_22_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_22_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_22_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_22_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_23_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_23_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_23_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_23_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_24_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_24_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_24_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_24_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_25_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_25_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_25_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_25_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_27_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_27_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_27_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_27_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_28_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_28_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_28_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_28_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_29_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_29_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_29_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_29_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_2_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_2_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_2_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_2_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_30_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_30_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_30_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_30_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_31_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_31_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_31_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_31_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_32_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_32_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_32_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_32_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_33_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_33_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_33_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_33_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_35_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_35_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_35_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_35_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_37_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_37_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_37_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_37_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_38_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_38_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_38_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_38_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_39_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_39_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_39_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_39_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_3_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_3_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_3_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_3_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_40_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_40_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_40_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_40_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_41_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_41_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_41_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_41_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_42_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_42_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_42_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_42_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_44_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_44_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_44_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_44_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_45_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_45_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_45_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_45_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_46_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_46_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_46_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_46_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_47_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_47_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_47_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_47_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_48_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_48_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_48_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_48_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_49_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_49_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_49_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_49_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_4_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_4_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_4_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_4_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_50_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_50_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_50_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_50_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_51_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_51_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_51_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_51_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_53_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_53_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_53_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_53_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_57_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_57_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_57_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_57_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_58_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_58_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_58_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_58_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_5_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_5_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_5_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_5_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_63_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_63_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_63_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_63_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_6_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_6_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_6_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_6_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_74_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_74_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_74_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_74_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_75_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_75_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_75_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_75_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_7_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_7_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_7_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_7_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_8_exifthumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_8_exifthumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/exifthumbs/photo_8_exifthumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/exifthumbs/media_8_exifthumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/README.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/README.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/README.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/README.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_1.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_1.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_1.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_1.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_10.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_10.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_10.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_10.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_11.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_11.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_11.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_11.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_12.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_12.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_12.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_12.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_13.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_13.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_13.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_13.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_14.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_14.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_14.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_14.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_15.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_15.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_15.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_15.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_16.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_16.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_16.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_16.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_17.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_17.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_17.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_17.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_18.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_18.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_18.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_18.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_19.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_19.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_19.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_19.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_2.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_2.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_2.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_2.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_20.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_20.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_20.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_20.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_21.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_21.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_21.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_21.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_22.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_22.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_22.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_22.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_23.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_23.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_23.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_23.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_24.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_24.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_24.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_24.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_25.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_25.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_25.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_25.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_26.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_26.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_26.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_26.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_27.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_27.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_27.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_27.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_28.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_28.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_28.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_28.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_29.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_29.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_29.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_29.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_3.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_3.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_3.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_3.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_30.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_30.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_30.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_30.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_30.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_30.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_30.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_30.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_31.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_31.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_31.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_31.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_32.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_32.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_32.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_32.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_33.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_33.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_33.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_33.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_34.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_34.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_34.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_34.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_35.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_35.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_35.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_35.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_36.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_36.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_36.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_36.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_37.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_37.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_37.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_37.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_38.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_38.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_38.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_38.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_39.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_39.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_39.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_39.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_4.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_4.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_4.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_4.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_40.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_40.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_40.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_40.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_41.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_41.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_41.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_41.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_42.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_42.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_42.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_42.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_43.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_43.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_43.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_43.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_44.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_44.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_44.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_44.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_45.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_45.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_45.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_45.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_46.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_46.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_46.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_46.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_47.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_47.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_47.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_47.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_48.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_48.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_48.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_48.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_49.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_49.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_49.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_49.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_5.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_5.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_5.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_5.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_50.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_50.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_50.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_50.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_51.png b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_51.png
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_51.png
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_51.png
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_52.png b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_52.png
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_52.png
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_52.png
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_53.png b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_53.png
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_53.png
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_53.png
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_54.tif b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_54.tif
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_54.tif
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_54.tif
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_55.tif b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_55.tif
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_55.tif
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_55.tif
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_56.tif b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_56.tif
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_56.tif
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_56.tif
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_57.cr2 b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_57.cr2
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_57.cr2
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_57.cr2
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_58.raf b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_58.raf
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_58.raf
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_58.raf
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_59.webp b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_59.webp
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_59.webp
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_59.webp
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_6.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_6.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_6.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_6.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_60.heic b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_60.heic
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_60.heic
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_60.heic
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_61.gif b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_61.gif
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_61.gif
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_61.gif
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_62.nef b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_62.nef
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_62.nef
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_62.nef
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_63.arw b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_63.arw
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_63.arw
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_63.arw
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_64.rw2 b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_64.rw2
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_64.rw2
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_64.rw2
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_65.orf b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_65.orf
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_65.orf
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_65.orf
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_66.dng b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_66.dng
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_66.dng
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_66.dng
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_67.dng b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_67.dng
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_67.dng
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_67.dng
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_68.dng b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_68.dng
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_68.dng
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_68.dng
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_69.dng b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_69.dng
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_69.dng
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_69.dng
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_7.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_7.jpg
old mode 100755
new mode 100644
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_7.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_7.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_70.dng b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_70.dng
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_70.dng
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_70.dng
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_71.dng b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_71.dng
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_71.dng
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_71.dng
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_72.hif b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_72.hif
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_72.hif
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_72.hif
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_73.heic b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_73.heic
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_73.heic
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_73.heic
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_74.avif b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_74.avif
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_74.avif
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_74.avif
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_75.heic b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_75.heic
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_75.heic
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_75.heic
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_76.heic b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_76.heic
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_76.heic
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_76.heic
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_77.heic b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_77.heic
old mode 100755
new mode 100644
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_77.heic
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_77.heic
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_78.jxl b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_78.jxl
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_78.jxl
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_78.jxl
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_79.jxl b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_79.jxl
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_79.jxl
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_79.jxl
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_8.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_8.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_8.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_8.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_80.jxl b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_80.jxl
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_80.jxl
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_80.jxl
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_81.tif b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_81.tif
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_81.tif
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_81.tif
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_82.tif b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_82.tif
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_82.tif
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_82.tif
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_83.cr3 b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_83.cr3
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_83.cr3
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_83.cr3
diff --git a/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_84.mp4 b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_84.mp4
new file mode 100644
index 00000000..caeabcc4
Binary files /dev/null and b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_84.mp4 differ
diff --git a/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_85.mov b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_85.mov
new file mode 100644
index 00000000..bc3b8e6e
Binary files /dev/null and b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_85.mov differ
diff --git a/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_86.avif b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_86.avif
new file mode 100644
index 00000000..61ddacfe
Binary files /dev/null and b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_86.avif differ
diff --git a/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_87.avif b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_87.avif
new file mode 100644
index 00000000..ee7065df
Binary files /dev/null and b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_87.avif differ
diff --git a/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_88.avif b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_88.avif
new file mode 100644
index 00000000..b6483985
Binary files /dev/null and b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_88.avif differ
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_9.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_9.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/full/photo_9.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/full/media_9.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_10_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_10_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_10_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_10_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_11_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_11_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_11_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_11_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_12_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_12_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_12_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_12_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_13_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_13_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_13_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_13_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_14_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_14_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_14_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_14_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_15_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_15_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_15_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_15_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_16_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_16_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_16_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_16_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_17_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_17_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_17_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_17_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_18_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_18_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_18_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_18_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_19_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_19_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_19_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_19_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_1_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_1_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_1_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_1_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_20_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_20_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_20_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_20_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_21_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_21_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_21_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_21_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_22_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_22_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_22_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_22_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_23_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_23_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_23_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_23_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_24_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_24_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_24_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_24_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_25_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_25_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_25_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_25_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_26_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_26_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_26_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_26_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_27_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_27_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_27_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_27_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_28_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_28_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_28_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_28_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_29_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_29_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_29_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_29_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_2_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_2_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_2_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_2_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_30_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_30_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_30_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_30_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_31_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_31_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_31_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_31_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_32_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_32_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_32_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_32_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_33_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_33_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_33_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_33_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_34_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_34_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_34_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_34_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_35_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_35_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_35_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_35_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_36_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_36_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_36_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_36_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_37_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_37_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_37_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_37_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_38_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_38_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_38_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_38_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_39_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_39_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_39_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_39_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_3_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_3_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_3_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_3_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_40_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_40_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_40_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_40_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_41_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_41_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_41_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_41_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_42_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_42_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_42_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_42_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_43_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_43_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_43_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_43_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_44_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_44_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_44_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_44_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_45_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_45_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_45_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_45_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_46_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_46_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_46_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_46_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_47_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_47_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_47_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_47_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_48_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_48_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_48_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_48_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_49_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_49_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_49_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_49_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_4_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_4_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_4_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_4_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_50_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_50_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_50_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_50_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_51_header.png b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_51_header.png
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_51_header.png
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_51_header.png
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_51_header_exif.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_51_header_exif.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_51_header_exif.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_51_header_exif.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_51_header_iptc.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_51_header_iptc.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_51_header_iptc.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_51_header_iptc.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_51_header_xmp.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_51_header_xmp.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_51_header_xmp.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_51_header_xmp.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_52_header.png b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_52_header.png
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_52_header.png
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_52_header.png
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_52_header_exif.tif b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_52_header_exif.tif
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_52_header_exif.tif
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_52_header_exif.tif
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_53_header.png b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_53_header.png
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_53_header.png
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_53_header.png
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_58_header.raf b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_58_header.raf
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_58_header.raf
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_58_header.raf
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_5_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_5_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_5_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_5_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_61_header.gif b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_61_header.gif
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_61_header.gif
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_61_header.gif
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_61_header_xmp.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_61_header_xmp.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_61_header_xmp.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_61_header_xmp.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_6_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_6_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_6_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_6_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_7_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_7_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_7_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_7_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_8_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_8_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_8_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_8_header.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_9_header.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_9_header.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/headers/photo_9_header.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/headers/media_9_header.jpg
diff --git a/src/commonTest/resources/de/stefan_oltmann/kim/testdata/metadata.csv b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/metadata.csv
new file mode 100644
index 00000000..7007dc8f
--- /dev/null
+++ b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/metadata.csv
@@ -0,0 +1,88 @@
+name;mediaFormat;widthPx;heightPx;orientation;takenDate;latitude;longitude;locationName;location;city;state;country;cameraMake;cameraModel;lensMake;lensModel;iso;exposureTime;fNumber;focalLength;title;description;flagged;rating;keywords;personsInAlbums;thumbnailImageSize;thumbnailBytes.size;orientedSize.width;orientedSize.height
+media_1.jpg;JPEG;4000;2670;STANDARD;1563088871470;55.911315916666666;36.9634819;null;null;null;null;null;Canon;Canon EOS 70D;null;EF-S55-250mm f/4-5.6 IS STM;250;0.0025;7.1;250.0;null;honeybee perching on yellow flower;false;0;[dxfoto, published];[];null;null;4000;2670
+media_2.jpg;JPEG;1367;2000;STANDARD;1556991300910;null;null;null;null;null;null;null;NIKON CORPORATION;NIKON D810;null;null;4000;0.025;2.8;200.0;null;orange and silver fox;false;null;[mammal, dog, pet, canine, wildlife, red fox];[];174 x 256;9800;1367;2000
+media_3.jpg;JPEG;2074;2592;null;1588252095000;null;null;null;null;null;null;null;OLYMPUS CORPORATION;E-M10 Mark III;null;OLYMPUS M.30mm F3.5 Macro;500;0.004;5.6;30.0;null;OLYMPUS DIGITAL CAMERA;false;2;[invertebrate, animal];[];205 x 256;12001;2074;2592
+media_4.jpg;JPEG;5184;3456;null;1577057308230;null;null;null;null;null;null;null;Canon;Canon EOS REBEL T5i;null;EF-S18-55mm f/3.5-5.6 IS STM;1600;0.0015625;5.6;18.0;null;cat reclining on floor;false;1;[wood, floor, cat, flooring, mammal, pet, animal];[];256 x 171;7757;5184;3456
+media_5.jpg;JPEG;3771;2121;null;1548094438000;null;null;null;null;null;null;null;FUJIFILM;X-T20;FUJIFILM;XF90mmF2 R LM WR;250;0.005;2.0;90.0;null;null;false;5;[london];[];256 x 144;12539;3771;2121
+media_6.jpg;JPEG;3000;1688;null;1551068056000;null;null;null;null;null;null;null;SONY;DSC-RX100;null;28-100mm F1.8-4.9;125;0.004;8.0;10.4;Hawksbill Sea Turtle (Eretmochelys imbricata) The tapered head ;brown turtle;false;0;[tortoise, reptile, sea turtle, water, outdoors];[];256 x 144;11246;3000;1688
+media_7.jpg;JPEG;6000;3376;null;1555517508000;null;null;null;null;null;null;null;SONY;ILCE-6000;null;DT 0mm F0 SAM;100;0.002;1.8;50.0;null;adult tan dachshund on grass field;false;0;[grass, dog, plant, mammal, animal, pet, canine, hound];[];256 x 144;8586;6000;3376
+media_8.jpg;JPEG;3880;2906;null;1538889789000;-8.5;115.25466667000013;null;null;null;null;null;DJI;FC2103;null;null;100;0.005;2.8;4.5;Aerial picture of Campuhan Ridge Walk , Scenic Green Valley in Ubud Bali. Drone photo.;Aerial picture of Campuhan Ridge Walk , Scenic Green Valley in Ubud Bali. Drone photo. Indonesia.;false;1;[hill, nature, path, ubud, landscape, trekking, tree, travel, green, bali, background, grass, beautiful, ridge, tourism, walk, asia, summer, sky, indonesia, scenic, campuhan, holidays, road, tropical, trail, field, paradise, paddy, palm, photography, planet, view, bali indonesia, outdoor, panoramic, drone, scene, nobody, growth, cloud, sunny, scenery, way, plant, environment, terrace, forest, natural, trek];[];null;null;3880;2906
+media_9.jpg;JPEG;5946;3964;null;1551179986330;null;null;null;null;null;null;null;Canon;Canon EOS 5D Mark IV;null;EF300mm f/2.8L IS II USM;800;0.002;5.0;300.0;Rainbow Lorikeet Parrot;Rainbow Lorikeet Parrot - a very brightly colored parrot;false;3;[adorable, animal, attentive, beak, beautiful, bird, blue, color, colorful, colours, cute, eye, feather, green, isolated, lorikeet, lory, love, multi-coloured, nature, outdoors, parakeet, park, parrot, pet, portrait, purple, rainbow, rainbow-coloured, red, species, tropical, wild, wildlife, yellow, feathers, detail];[];null;null;5946;3964
+media_10.jpg;JPEG;3320;2490;null;1557499439770;null;null;null;null;null;null;null;Canon;Canon EOS 5D Mark IV;null;EF300mm f/2.8L IS II USM;160;6.25E-4;4.0;300.0;null;null;false;2;[];[];256 x 192;15009;3320;2490
+media_11.jpg;JPEG;4094;2699;null;1367412950000;null;null;null;null;null;null;null;NIKON CORPORATION;NIKON D7000;null;150.0 mm f/2.8;280;0.001;6.3;150.0;null;null;false;1;[];[];null;null;4094;2699
+media_12.jpg;JPEG;3482;2460;null;1296308573000;null;null;null;null;null;null;null;SONY;DSLR-A700;null;100-300mm F4.5-5.6;400;5.0E-4;5.6;250.0;null;4;false;4;[animal, bald eagle];[];256 x 181;12006;3482;2460
+media_13.jpg;JPEG;1920;1080;null;null;34.0522342000061;-118.24368490001069;null;null;null;null;null;null;null;null;null;null;null;null;null;null;brown and black tiger lying on green grass during daytime;false;1;[plant, mammal, food, seasoning, flora, dill];[];null;null;1920;1080
+media_14.jpg;JPEG;1920;1200;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;brown turtle swimming underwater;false;0;[tortoise, sea life, reptile];[];null;null;1920;1200
+media_15.jpg;JPEG;5045;4000;STANDARD;1571392576570;53.595344099913866;9.941622399947342;null;null;null;null;null;NIKON CORPORATION;NIKON D5600;null;null;2800;0.008;6.3;200.0;null;chameleon perching on tree branch;false;3;[];[];256 x 203;13995;5045;4000
+media_16.jpg;JPEG;2072;2590;null;1544435452820;null;null;null;null;null;null;null;Canon;Canon EOS 5D Mark III;null;EF100mm f/2.8L Macro IS USM;100;0.004;2.8;100.0;Macaw at Akumal Monkey Sanctuary;Scarlet Macaw porches on tree branch;false;2;[bird, animal, macaw, parrot];[];205 x 256;18107;2072;2590
+media_17.jpg;JPEG;3136;3919;null;1546951701000;null;null;null;null;null;null;null;NIKON CORPORATION;NIKON D610;null;85.0 mm f/1.4;100;8.0E-4;1.4;85.0;null;null;false;5;[animal, cat, pet, mammal, abyssinian];[];null;null;3136;3919
+media_18.jpg;JPEG;3456;2304;null;1542687264000;null;null;null;null;null;null;null;Canon;Canon EOS 60D;null;EF-S18-200mm f/3.5-5.6 IS;100;0.0015625;7.1;155.0;null;null;false;null;[];[];null;null;3456;2304
+media_19.jpg;JPEG;2468;4051;null;1584231200000;35.689198;51.388974;null;null;null;null;null;FUJIFILM;X-T2;FUJIFILM;XF90mmF2 R LM WR;200;null;5.6;90.0;leafs fern rain drops tropical top view nature background dreen fine art fresh sweet cool new;Green Leaves with Raindrops;false;3;[fern];[];156 x 256;15133;2468;4051
+media_20.jpg;JPEG;250;250;ROTATE_RIGHT;null;null;null;null;null;null;null;null;OLYMPUS OPTICAL CO.,LTD;C750UZ;null;null;200;0.03333333333333333;4.0;6.3;null;null;false;null;[];[];256 x 256;5648;250;250
+media_21.jpg;JPEG;4522;6783;STANDARD;1546604284700;null;null;null;null;null;null;null;NIKON CORPORATION;NIKON D810;null;null;200;0.005;5.6;85.0;null;guinea pig sitting in front of toy arcade machine;false;null;[mammal, animal, giant panda, bear, wildlife, furniture];[];null;null;4522;6783
+media_22.jpg;JPEG;3024;4032;null;1581943666950;null;null;null;null;null;null;null;Apple;iPhone 11 Pro Max;Apple;iPhone 11 Pro Max back dual camera 6mm f/2;80;0.008333333333333333;2.0;6.0;null;null;false;null;[];[];120 x 160;7487;3024;4032
+media_23.jpg;JPEG;6144;8192;STANDARD;1701759044000;null;null;null;null;null;null;null;Nothing;A063;null;null;1939;0.04;1.88;5.59;null;null;false;null;[];[];null;null;6144;8192
+media_24.jpg;JPEG;3000;2000;null;1549610355000;null;null;null;null;null;null;null;SONY;ILCE-7RM3;null;FE 24-70mm F2.8 GM;2000;2.0;2.8;25.0;null;selective focus photography of dirt road near red bridge;false;3;[puddle];[];256 x 171;10674;3000;2000
+media_25.jpg;JPEG;4660;3106;STANDARD;1526579057200;null;null;Die Igelwiese;Igelstraße 45;Igelstadt;Niedersachsen;Deutschland;Canon;Canon EOS 500D;null;EF50mm f/1.8 II;100;0.00625;3.2;50.0;null;selective focus photography of hedgehog eating on green grass field;false;4;[animal, hedgehog, mammal, porcupine, rodent];[];160 x 107;6164;4660;3106
+media_26.jpg;JPEG;2304;1536;STANDARD;1491612327500;null;null;null;null;null;null;null;NIKON CORPORATION;NIKON D3300;null;55.0-200.0 mm f/4.0-5.6;1600;0.0025;4.0;55.0;null;photography of white blossoms;false;0;[cherry blossom, flora, flower, plant];[];null;null;2304;1536
+media_27.jpg;JPEG;3705;2470;null;1309069015000;22.8016472;120.285884599995;null;null;null;null;null;Canon;Canon EOS REBEL T3i;null;EF400mm f/5.6L USM;400;0.0015625;5.6;400.0;null;brown butterfly on orange petaled flower;false;3;[invertebrate, cosmos];[];256 x 171;9685;3705;2470
+media_28.jpg;JPEG;2304;1536;STANDARD;1510515708760;null;null;null;null;null;null;null;Canon;Canon EOS M3;null;EF-M18-55mm f/3.5-5.6 IS STM;3200;2.5E-4;5.6;55.0;null;time lapse photography of fire;false;2;[human, person, people];[];160 x 120;3209;2304;1536
+media_29.jpg;JPEG;2920;4045;STANDARD;1500229594000;null;null;null;null;null;null;null;OLYMPUS IMAGING CORP.;E-M10;null;OLYMPUS M.14-42mm F3.5-5.6 II R;100;0.004;3.5;14.0;null;OLYMPUS DIGITAL CAMERA;false;5;[];[];116 x 160;4532;2920;4045
+media_30.jpg;JPEG;3024;4032;STANDARD;1581943666950;null;null;null;null;null;null;null;Apple;iPhone 11 Pro Max;null;null;80;0.008333333333333333;2.0;6.0;null;null;false;null;[];[];120 x 160;4070;3024;4032
+media_31.jpg;JPEG;5472;3648;STANDARD;1444567304000;null;null;null;null;null;null;null;Canon;Canon EOS 70D;null;EF50mm f/1.8 STM;400;0.016666666666666666;3.2;50.0;Gray cat portrait;rules of third photography of orange-eyed gray cat;false;0;[];[];160 x 120;8567;5472;3648
+media_32.jpg;JPEG;3525;1500;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;false;2;[];[];256 x 109;9559;3525;1500
+media_33.jpg;JPEG;6000;4000;null;1510187139000;43.61871020000487;-116.21460679997554;null;null;null;null;null;SONY;ILCE-6300;null;E 55-210mm F4.5-6.3 OSS;200;0.01;6.3;193.0;Ducking Around;selective focus photography of duck;false;1;[animal, waterfowl];[];256 x 171;12748;6000;4000
+media_34.jpg;JPEG;4928;3264;STANDARD;1352360484200;50.40160062469378;19.40082002893384;null;null;null;null;null;NIKON CORPORATION;NIKON D5100;null;null;800;0.025;5.3;75.0;null;selective focus photography of hedgehog on ground;false;0;[mammal];[];null;null;4928;3264
+media_35.jpg;JPEG;3382;2673;null;1544627475890;null;null;null;null;null;null;null;Canon;Canon EOS 5D Mark IV;null;EF100mm f/2.8L Macro IS USM;1600;0.00625;6.3;100.0;null;null;false;5;[];[];256 x 202;11636;3382;2673
+media_36.jpg;JPEG;4240;2384;STANDARD;1498511925000;null;null;null;null;null;null;null;FUJIFILM;X-Pro2;FUJIFILM;XF90mmF2 R LM WR;200;2.5E-4;2.0;90.0;null;selective focus photo of pink petaled flower;false;0;[blossom, flora, dahlia, plant];[];null;null;4240;2384
+media_37.jpg;JPEG;5870;2799;STANDARD;1532721723350;null;null;null;null;null;null;null;NIKON CORPORATION;NIKON D7200;null;35.0 mm f/1.8;100;10.0;6.3;35.0;null;moon illustration;false;3;[eclipse, outdoors, nature, lunar eclipse, space, outer space, night, astronomy, universe];[];159 x 76;1487;5870;2799
+media_38.jpg;JPEG;2371;1580;STANDARD;1399301366760;null;null;null;null;null;null;null;Canon;Canon EOS 550D;null;EF70-200mm f/4L USM;400;8.0E-4;4.0;154.0;null;brown horse;false;2;[foal];[];160 x 107;11065;2371;1580
+media_39.jpg;JPEG;4608;3456;STANDARD;1466260726000;null;null;null;null;null;null;null;OLYMPUS IMAGING CORP. ;E-M10 ;null;OLYMPUS M.40-150mm F4.0-5.6 R;400;0.0125;5.0;102.0;null;null;false;1;[];[];160 x 120;9032;4608;3456
+media_40.jpg;JPEG;4272;2848;STANDARD;1561620317200;null;null;null;null;null;null;null;NIKON CORPORATION;NIKON D500;null;70.0-200.0 mm f/2.8;320;0.003125;8.0;86.0;null;white polar bear swimming;false;3;[wildlife, bear];[];160 x 107;3320;4272;2848
+media_41.jpg;JPEG;3264;1836;STANDARD;1258791581000;null;null;null;null;null;null;null;Sony Ericsson;U10i;null;null;50;0.001;2.8;4.65;null;null;false;null;[];[];160 x 120;7053;3264;1836
+media_42.jpg;JPEG;1024;768;STANDARD;1011527566000;null;null;null;null;null;null;null;TRAVELER OPTICAL CO,LTD;SX330Z;null;null;100;null;null;23.28;null;null;false;null;[];[];160 x 120;6495;1024;768
+media_43.jpg;JPEG;1024;768;STANDARD;1146003974000;null;null;null;null;null;null;null;Digital;Digital Cam;null;null;100;0.0031577418356584838;7.4;10.04;null;null;false;null;[];[];null;null;1024;768
+media_44.jpg;JPEG;2820;3077;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;false;null;[];[];null;null;2820;3077
+media_45.jpg;JPEG;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;false;null;[];[];null;null;null;null
+media_46.jpg;JPEG;325;407;STANDARD;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;false;null;[];[];102 x 128;3664;325;407
+media_47.jpg;JPEG;260;773;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;false;null;[];[];null;null;260;773
+media_48.jpg;JPEG;4032;3024;ROTATE_RIGHT;1669813020203;null;null;null;null;null;null;null;Apple;iPhone SE (3rd generation);Apple;iPhone SE (3rd generation) back camera 3.99mm f/1.8;50;0.01;1.8;3.99;null;null;false;null;[];[];160 x 120;11130;3024;4032
+media_49.jpg;JPEG;5184;3456;STANDARD;1638761253820;null;null;null;null;null;null;null;Canon;Canon EOS 60D;null;EF-S15-85mm f/3.5-5.6 IS USM;400;0.016666666666666666;5.0;24.0;null;null;false;0;[];[];160 x 120;11200;5184;3456
+media_50.jpg;JPEG;6240;4160;STANDARD;1684514510000;null;null;null;null;null;null;null;FUJIFILM;X-T4;FUJIFILM;XC35mmF2;400;0.025;4.0;35.0;null;null;false;0;[];[];160 x 120;9359;6240;4160
+media_51.png;PNG;1500;1000;STANDARD;1583941053360;14.962422;102.090533;null;null;null;null;null;Canon;Canon EOS R;null;EF70-300mm f/4-5.6L IS USM;125;0.008;6.3;300.0;Head of King cobra;brown snake on green grass;false;2;[cobra, sea life, animal, reptile, turtle, snake];[];256 x 170;6554;1500;1000
+media_52.png;PNG;1000;668;STANDARD;1563088871470;55.911316666666664;36.96348166666667;null;null;null;null;null;Canon;Canon EOS 70D;null;EF-S55-250mm f/4-5.6 IS STM;250;0.0025;7.1;250.0;null;honeybee perching on yellow flower;false;0;[dxfoto, published];[];null;null;1000;668
+media_53.png;PNG;1000;668;STANDARD;1563088871470;55.911315916666666;36.9634819;null;null;null;null;null;Canon;Canon EOS 70D;null;EF-S55-250mm f/4-5.6 IS STM;250;0.0025;7.1;250.0;null;honeybee perching on yellow flower;false;0;[dxfoto, published];[];256 x 171;7278;1000;668
+media_54.tif;TIFF;1200;800;STANDARD;1637818851450;null;null;null;null;null;null;null;Canon;Canon EOS 60D;null;EF-S15-85mm f/3.5-5.6 IS USM;400;0.03333333333333333;5.0;57.0;null;null;false;0;[];[];null;null;1200;800
+media_55.tif;TIFF;1200;800;STANDARD;1637818851450;null;null;null;null;null;null;null;Canon;Canon EOS 60D;null;EF-S15-85mm f/3.5-5.6 IS USM;400;0.03333333333333333;5.0;57.0;null;null;false;0;[];[];null;null;1200;800
+media_56.tif;TIFF;1200;800;STANDARD;1637818851450;null;null;null;null;null;null;null;Canon;Canon EOS 60D;null;EF-S15-85mm f/3.5-5.6 IS USM;400;0.03333333333333333;5.0;57.0;null;null;false;0;[];[];null;null;1200;800
+media_57.cr2;CR2;5184;3456;STANDARD;1638761253820;null;null;null;null;null;null;null;Canon;Canon EOS 60D;null;EF-S15-85mm f/3.5-5.6 IS USM;400;0.016666666666666666;5.0;24.0;null;null;false;0;[];[];160 x 120;11248;5184;3456
+media_58.raf;RAF;4416;2944;STANDARD;1684514510000;null;null;null;null;null;null;null;FUJIFILM;X-T4;FUJIFILM;XC35mmF2;400;0.025;4.0;35.0;null;null;false;0;[];[];160 x 120;9457;4416;2944
+media_59.webp;WEBP;5184;3456;STANDARD;1563981341900;null;null;null;null;null;null;null;Canon;Canon EOS Rebel T6;null;EF-S18-55mm f/3.5-5.6 IS II;100;0.016666666666666666;8.0;18.0;null;null;false;2;[];[];256 x 170;7245;5184;3456
+media_61.gif;GIF;3000;3000;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;Sample GIF;This is a sample GIF used to demonstrate XMP metadata embedding.;false;null;[Example GIF with XMP metadata];[];null;null;3000;3000
+media_62.nef;TIFF;4992;3280;STANDARD;1407828658100;null;null;null;null;null;null;null;NIKON CORPORATION;NIKON D5100;null;null;200;0.00625;6.3;30.0;null;null;false;null;[];[];4928 x 3264;1470727;4992;3280
+media_63.arw;TIFF;4272;2848;STANDARD;1265033028000;null;null;null;null;null;null;null;SONY;DSLR-A500;null;null;200;0.016666666666666666;8.0;18.0;null;null;false;null;[];[];1616 x 1080;736202;4272;2848
+media_64.rw2;RW2;null;null;STANDARD;1416431264000;null;null;null;null;null;null;null;Panasonic;DMC-LX7;null;null;160;0.016666666666666666;1.4;4.7;null;null;false;null;[];[];null;null;null;null
+media_65.orf;ORF;3680;2760;STANDARD;1419774657000;null;null;null;null;null;null;null;OLYMPUS IMAGING CORP. ;XZ-1 ;null;null;100;0.0015625;4.0;15.27;null;null;false;null;[];[];null;null;3680;2760
+media_66.dng;TIFF;5344;3516;STANDARD;1638761253820;null;null;null;null;null;null;null;Canon;Canon EOS 60D;null;EF-S15-85mm f/3.5-5.6 IS USM;400;0.016666666666666666;5.0;24.0;null;null;false;null;[];[];null;null;5344;3516
+media_67.dng;TIFF;6240;4160;STANDARD;1684514510000;null;null;null;null;null;null;null;FUJIFILM;X-T4;FUJIFILM;XC35mmF2;400;0.025;4.0;35.0;null;null;false;null;[];[];null;null;6240;4160
+media_68.dng;TIFF;4948;3280;STANDARD;1407828658100;null;null;null;null;null;null;null;NIKON CORPORATION;NIKON D5100;null;18.0-55.0 mm f/3.5-5.6;200;0.00625;6.3;30.0;null;null;false;null;[];[];null;null;4948;3280
+media_69.dng;TIFF;4288;2858;STANDARD;1265033028000;null;null;null;null;null;null;null;SONY;DSLR-A500;null;DT 18-55mm F3.5-5.6 SAM;200;0.016666666666666666;8.0;18.0;null;SONY DSC;false;null;[];[];null;null;4288;2858
+media_70.dng;TIFF;3664;2752;STANDARD;1416431264000;null;null;null;null;null;null;null;Panasonic;DMC-LX7;null;null;160;0.016666666666666666;1.4;4.7;null;null;false;null;[];[];null;null;3664;2752
+media_71.dng;TIFF;3680;2760;STANDARD;1419774657000;null;null;null;null;null;null;null;OLYMPUS IMAGING CORP.;XZ-1;null;null;100;0.0015625;4.0;15.27;null;OLYMPUS DIGITAL CAMERA;false;null;[];[];null;null;3680;2760
+media_72.hif;HEIC;null;null;null;1654877860250;30.052485;101.96257277777778;null;null;null;null;null;SONY;ILCE-7M4;null;FE 24-70mm F2.8 GM II;100;0.04;2.8;24.0;null;null;false;0;[];[];null;null;null;null
+media_73.heic;HEIC;null;null;STANDARD;1688729862000;53.21939166666667;8.239661666666667;null;null;null;null;null;Apple;iPhone SE (3rd generation);Apple;iPhone SE (3rd generation) back camera 3.99mm f/1.8;40;0.00625;1.8;3.99;null;null;false;3;[bird, cat, dog];[];null;null;null;null
+media_74.avif;AVIF;null;null;STANDARD;1444567304000;null;null;null;null;null;null;null;Canon;Canon EOS 70D;null;EF50mm f/1.8 STM;400;0.016666666666666666;3.2;50.0;null;null;false;0;[];[];160 x 120;8567;null;null
+media_75.heic;HEIC;null;null;STANDARD;1444567304000;null;null;null;null;null;null;null;Canon;Canon EOS 70D;null;EF50mm f/1.8 STM;400;0.016666666666666666;3.2;50.0;null;null;false;0;[];[];160 x 120;8567;null;null
+media_76.heic;HEIC;null;null;STANDARD;1563088871470;55.911316666666664;36.963480555555556;null;null;null;null;null;Canon;Canon EOS 70D;null;EF-S55-250mm f/4-5.6 IS STM;250;0.0025;7.1;250.0;null;honeybee perching on yellow flower;false;0;[dxfoto, published];[];null;null;null;null
+media_77.heic;HEIC;null;null;ROTATE_RIGHT;1696689965871;null;null;null;null;null;null;null;samsung;SM-G998B;null;null;640;0.016666666666666666;1.8;6.7;null;null;false;null;[];[];null;null;null;null
+media_78.jxl;JXL;null;null;STANDARD;1551068056000;null;null;null;null;null;null;null;SONY;DSC-RX100;null;28-100mm F1.8-4.9;125;0.004;8.0;10.4;null;brown turtle;false;0;[outdoors, reptile, sea turtle, tortoise, water];[];null;null;null;null
+media_79.jxl;JXL;null;null;null;1551068056000;null;null;null;null;null;null;null;SONY;DSC-RX100;null;28-100mm F1.8-4.9;125;0.004;8.0;10.4;null;null;false;0;[];[];256 x 144;11246;null;null
+media_80.jxl;JXL;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;false;null;[];[];null;null;null;null
+media_81.tif;TIFF;1;1;STANDARD;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;false;null;[];[];null;null;1;1
+media_82.tif;TIFF;1;1;STANDARD;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;false;null;[];[];null;null;1;1
+media_83.cr3;CR3;6000;4000;STANDARD;1675930227790;null;null;null;null;null;null;null;Canon;Canon EOS R3;null;CN-E85mm T1.3 L F;1600;0.02;4.0;85.0;null;null;false;0;[];[];null;null;6000;4000
+media_84.mp4;MP4;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;false;null;[];[];null;null;null;null
+media_85.mov;MOV;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;null;false;null;[];[];null;null;null;null
+media_86.avif;AVIF;null;null;STANDARD;1444567304000;53.5953444445;9.941622222166666;Die Igelwiese;Igelstraße 45;Igelstadt;Niedersachsen;Deutschland;Canon;Canon EOS 70D;null;EF50mm f/1.8 STM;400;0.016666666666666666;3.2;50.0;null;photo of a grey cat with orange eyes over a plain background;false;4;[animal, hedgehog, mammal, porcupine, rodent];[];160 x 120;8567;null;null
+media_87.avif;AVIF;null;null;STANDARD;1444567304000;null;null;null;null;null;null;null;Canon;Canon EOS 70D;null;EF50mm f/1.8 STM;400;0.016666666666666666;3.2;50.0;null;Animated AVIF with XMP in top-level UUID box;false;3;[];[];160 x 120;8567;null;null
+media_88.avif;AVIF;null;null;STANDARD;1444567304000;null;null;null;null;null;null;null;Canon;Canon EOS 70D;null;EF50mm f/1.8 STM;400;0.016666666666666666;3.2;50.0;null;Animated AVIF with XMP in UUID box inside moov;false;4;[];[];160 x 120;8567;null;null
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/.gitattributes b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/.gitattributes
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/.gitattributes
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/.gitattributes
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_10_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_10_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_10_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_10_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_10_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_10_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_10_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_10_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_11_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_11_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_11_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_11_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_11_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_11_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_11_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_11_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_12_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_12_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_12_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_12_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_12_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_12_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_12_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_12_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_13_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_13_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_13_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_13_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_13_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_13_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_13_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_13_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_14_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_14_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_14_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_14_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_14_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_14_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_14_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_14_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_15_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_15_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_15_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_15_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_15_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_15_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_15_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_15_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_16_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_16_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_16_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_16_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_16_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_16_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_16_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_16_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_17_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_17_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_17_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_17_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_17_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_17_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_17_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_17_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_18_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_18_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_18_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_18_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_18_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_18_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_18_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_18_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_19_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_19_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_19_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_19_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_19_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_19_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_19_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_19_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_1_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_1_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_1_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_1_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_1_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_1_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_1_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_1_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_20_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_20_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_20_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_20_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_20_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_20_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_20_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_20_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_21_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_21_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_21_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_21_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_21_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_21_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_21_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_21_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_22_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_22_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_22_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_22_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_22_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_22_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_22_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_22_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_23_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_23_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_23_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_23_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_23_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_23_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_23_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_23_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_24_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_24_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_24_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_24_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_24_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_24_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_24_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_24_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_25_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_25_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_25_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_25_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_25_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_25_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_25_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_25_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_26_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_26_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_26_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_26_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_26_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_26_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_26_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_26_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_27_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_27_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_27_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_27_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_27_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_27_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_27_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_27_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_28_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_28_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_28_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_28_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_28_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_28_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_28_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_28_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_29_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_29_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_29_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_29_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_29_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_29_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_29_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_29_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_2_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_2_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_2_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_2_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_2_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_2_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_2_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_2_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_30_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_30_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_30_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_30_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_30_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_30_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_30_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_30_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_31_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_31_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_31_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_31_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_31_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_31_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_31_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_31_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_32_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_32_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_32_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_32_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_32_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_32_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_32_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_32_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_33_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_33_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_33_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_33_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_33_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_33_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_33_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_33_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_34_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_34_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_34_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_34_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_34_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_34_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_34_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_34_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_35_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_35_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_35_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_35_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_35_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_35_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_35_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_35_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_36_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_36_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_36_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_36_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_36_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_36_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_36_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_36_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_37_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_37_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_37_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_37_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_37_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_37_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_37_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_37_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_38_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_38_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_38_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_38_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_38_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_38_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_38_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_38_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_39_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_39_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_39_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_39_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_39_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_39_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_39_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_39_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_3_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_3_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_3_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_3_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_3_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_3_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_3_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_3_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_40_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_40_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_40_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_40_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_40_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_40_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_40_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_40_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_42_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_42_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_42_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_42_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_42_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_42_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_42_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_42_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_43_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_43_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_43_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_43_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_43_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_43_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_43_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_43_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_44_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_44_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_44_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_44_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_44_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_44_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_44_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_44_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_45_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_45_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_45_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_45_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_45_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_45_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_45_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_45_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_46_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_46_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_46_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_46_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_46_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_46_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_46_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_46_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_47_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_47_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_47_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_47_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_47_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_47_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_47_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_47_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_48_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_48_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_48_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_48_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_48_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_48_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_48_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_48_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_49_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_49_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_49_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_49_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_49_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_49_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_49_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_49_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_4_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_4_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_4_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_4_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_4_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_4_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_4_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_4_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_50_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_50_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_50_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_50_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_50_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_50_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_50_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_50_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_51_modified.png b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_51_modified.png
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_51_modified.png
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_51_modified.png
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_51_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_51_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_51_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_51_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_52_modified.png b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_52_modified.png
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_52_modified.png
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_52_modified.png
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_52_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_52_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_52_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_52_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_53_modified.png b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_53_modified.png
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_53_modified.png
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_53_modified.png
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_53_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_53_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_53_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_53_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_59_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_59_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_59_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_59_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_59_modified.webp b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_59_modified.webp
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_59_modified.webp
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_59_modified.webp
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_5_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_5_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_5_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_5_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_5_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_5_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_5_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_5_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_61_modified.gif b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_61_modified.gif
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_61_modified.gif
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_61_modified.gif
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_6_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_6_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_6_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_6_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_6_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_6_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_6_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_6_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_78_modified.jxl b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_78_modified.jxl
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_78_modified.jxl
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_78_modified.jxl
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_78_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_78_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_78_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_78_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_79_modified.jxl b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_79_modified.jxl
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_79_modified.jxl
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_79_modified.jxl
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_79_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_79_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_79_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_79_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_7_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_7_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_7_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_7_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_7_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_7_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_7_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_7_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_80_modified.jxl b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_80_modified.jxl
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_80_modified.jxl
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_80_modified.jxl
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_80_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_80_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_80_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_80_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_8_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_8_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_8_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_8_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_8_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_8_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_8_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_8_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_9_modified.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_9_modified.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_9_modified.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_9_modified.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_9_modified.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_9_modified.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/modified/photo_9_modified.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/modified/media_9_modified.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_57_preview.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_57_preview.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_57_preview.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_57_preview.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_58_preview.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_58_preview.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_58_preview.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_58_preview.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_62_preview.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_62_preview.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_62_preview.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_62_preview.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_63_preview.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_63_preview.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_63_preview.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_63_preview.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_64_preview.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_64_preview.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_64_preview.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_64_preview.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_65_preview.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_65_preview.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_65_preview.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_65_preview.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_66_preview.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_66_preview.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_66_preview.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_66_preview.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_67_preview.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_67_preview.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_67_preview.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_67_preview.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_68_preview.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_68_preview.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_68_preview.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_68_preview.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_69_preview.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_69_preview.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_69_preview.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_69_preview.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_70_preview.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_70_preview.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_70_preview.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_70_preview.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_71_preview.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_71_preview.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_71_preview.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_71_preview.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_83_preview.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_83_preview.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/previews/photo_83_preview.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/previews/media_83_preview.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/test_thumb.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/test_thumb.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/test_thumb.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/test_thumb.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/.gitattributes b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/.gitattributes
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/.gitattributes
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/.gitattributes
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_1.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_1.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_1.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_1.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_10.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_10.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_10.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_10.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_11.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_11.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_11.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_11.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_12.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_12.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_12.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_12.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_13.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_13.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_13.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_13.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_14.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_14.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_14.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_14.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_15.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_15.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_15.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_15.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_16.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_16.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_16.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_16.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_17.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_17.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_17.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_17.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_18.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_18.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_18.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_18.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_19.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_19.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_19.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_19.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_2.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_2.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_2.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_2.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_20.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_20.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_20.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_20.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_21.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_21.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_21.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_21.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_22.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_22.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_22.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_22.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_23.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_23.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_23.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_23.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_24.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_24.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_24.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_24.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_25.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_25.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_25.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_25.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_26.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_26.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_26.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_26.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_27.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_27.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_27.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_27.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_28.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_28.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_28.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_28.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_29.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_29.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_29.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_29.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_3.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_3.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_3.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_3.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_30.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_30.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_30.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_30.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_31.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_31.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_31.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_31.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_32.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_32.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_32.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_32.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_33.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_33.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_33.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_33.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_34.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_34.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_34.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_34.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_35.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_35.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_35.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_35.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_36.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_36.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_36.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_36.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_37.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_37.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_37.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_37.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_38.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_38.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_38.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_38.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_39.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_39.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_39.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_39.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_4.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_4.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_4.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_4.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_40.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_40.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_40.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_40.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_41.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_41.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_41.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_41.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_42.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_42.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_42.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_42.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_43.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_43.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_43.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_43.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_44.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_44.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_44.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_44.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_45.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_45.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_45.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_45.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_46.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_46.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_46.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_46.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_47.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_47.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_47.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_47.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_48.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_48.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_48.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_48.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_49.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_49.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_49.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_49.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_5.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_5.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_5.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_5.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_50.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_50.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_50.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_50.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_51.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_51.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_51.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_51.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_52.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_52.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_52.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_52.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_53.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_53.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_53.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_53.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_54.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_54.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_54.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_54.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_55.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_55.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_55.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_55.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_56.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_56.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_56.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_56.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_57.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_57.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_57.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_57.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_58.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_58.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_58.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_58.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_59.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_59.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_59.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_59.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_6.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_6.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_6.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_6.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_60.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_60.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_60.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_60.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_61.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_61.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_61.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_61.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_62.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_62.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_62.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_62.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_63.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_63.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_63.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_63.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_64.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_64.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_64.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_64.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_65.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_65.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_65.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_65.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_66.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_66.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_66.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_66.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_67.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_67.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_67.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_67.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_68.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_68.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_68.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_68.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_69.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_69.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_69.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_69.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_7.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_7.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_7.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_7.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_70.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_70.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_70.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_70.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_71.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_71.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_71.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_71.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_72.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_72.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_72.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_72.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_73.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_73.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_73.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_73.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_74.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_74.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_74.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_74.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_75.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_75.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_75.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_75.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_76.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_76.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_76.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_76.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_77.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_77.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_77.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_77.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_78.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_78.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_78.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_78.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_79.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_79.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_79.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_79.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_8.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_8.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_8.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_8.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_80.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_80.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_80.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_80.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_81.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_81.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_81.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_81.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_82.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_82.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_82.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_82.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_83.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_83.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_83.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_83.txt
diff --git a/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_84.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_84.txt
new file mode 100644
index 00000000..307def97
--- /dev/null
+++ b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_84.txt
@@ -0,0 +1,2 @@
+File format : MP4
+Resolution : null
diff --git a/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_85.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_85.txt
new file mode 100644
index 00000000..a850a4dd
--- /dev/null
+++ b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_85.txt
@@ -0,0 +1,2 @@
+File format : MOV
+Resolution : null
diff --git a/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_86.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_86.txt
new file mode 100644
index 00000000..7c8ca5da
--- /dev/null
+++ b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_86.txt
@@ -0,0 +1,577 @@
+File format : AVIF
+Resolution : null
+---- TIFF ----
+Version 42
+Little-endian (Intel, II)
+---- Directory IFD0 @ 8 ----
+0000000010 0x010f Make = Canon
+0000000022 0x0110 Model = Canon EOS 70D
+0000000034 0x0112 Orientation = 1
+0000000046 0x011a XResolution = 72/1 (72.0)
+0000000058 0x011b YResolution = 72/1 (72.0)
+0000000070 0x0128 ResolutionUnit = 2
+0000000082 0x0132 ModifyDate = 2015:10:11 14:41:44
+0000000094 0x013b Artist =
+0000000106 0x0213 YCbCrPositioning = 2
+0000000118 0x8298 Copyright =
+0000000130 0x8769 ExifOffset = 214
+0000000142 0x8825 GPSInfo = 9350
+
+---- Directory ExifIFD @ 214 ----
+0000000216 0x829a ExposureTime = 1/60 (0.016667)
+0000000228 0x829d FNumber = 32/10 (3.2)
+0000000240 0x8822 ExposureProgram = 2
+0000000252 0x8827 ISO = 400
+0000000264 0x8830 SensitivityType = 2
+0000000276 0x8832 RecommendedExposureIndex = 400
+0000000288 0x9000 ExifVersion = [0x30, 0x32, 0x33, 0x30]
+0000000300 0x9003 DateTimeOriginal = 2015:10:11 14:41:44
+0000000312 0x9004 DateTimeDigitized = 2015:10:11 14:41:44
+0000000324 0x9101 ComponentsConfiguration = [0x01, 0x02, 0x03, 0x00]
+0000000336 0x9201 ShutterSpeedValue = 393216/65536 (6.0)
+0000000348 0x9202 ApertureValue = 221184/65536 (3.375)
+0000000360 0x9204 ExposureCompensation = 0/1 (0.0)
+0000000372 0x9207 MeteringMode = 5
+0000000384 0x9209 Flash = 16
+0000000396 0x920a FocalLength = 50/1 (50.0)
+0000000408 0x927c MakerNote = [8200 bytes]
+0000000420 0x9286 UserComment =
+0000000432 0x9290 SubSecTime = 00
+0000000444 0x9291 SubSecTimeOriginal = 00
+0000000456 0x9292 SubSecTimeDigitized = 00
+0000000468 0xa000 FlashpixVersion = [0x30, 0x31, 0x30, 0x30]
+0000000480 0xa001 ColorSpace = 1
+0000000492 0xa002 ExifImageWidth = 5472
+0000000504 0xa003 ExifImageHeight = 3648
+0000000516 0xa005 InteropOffset = 9320
+0000000528 0xa20e FocalPlaneXResolution = 5472000/899 (6086.76307)
+0000000540 0xa20f FocalPlaneYResolution = 3648000/599 (6090.15025)
+0000000552 0xa210 FocalPlaneResolutionUnit = 2
+0000000564 0xa401 CustomRendered = 0
+0000000576 0xa402 ExposureMode = 0
+0000000588 0xa403 WhiteBalance = 0
+0000000600 0xa406 SceneCaptureType = 0
+0000000612 0xa430 CameraOwnerName =
+0000000624 0xa431 BodySerialNumber = 053022005903
+0000000636 0xa432 LensSpecification = [50/1 (50.0), 50/1 (50.0), 0/1 (0.0), 0/1 (0.0)]
+0000000648 0xa434 LensModel = EF50mm f/1.8 STM
+0000000660 0xa435 LensSerialNumber = 0000214e1c
+
+---- Directory InteropIFD @ 9320 ----
+0000009322 0x0001 InteroperabilityIndex = R98
+0000009334 0x0002 InteroperabilityVersion = [0x30, 0x31, 0x30, 0x30]
+
+---- Directory GPS @ 9350 ----
+0000009352 0x0000 GPSVersionID = [0x02, 0x03, 0x00, 0x00]
+
+---- Directory IFD1 @ 9368 ----
+0000009370 0x0103 Compression = 6
+0000009382 0x011a XResolution = 72/1 (72.0)
+0000009394 0x011b YResolution = 72/1 (72.0)
+0000009406 0x0128 ResolutionUnit = 2
+0000009418 0x0201 JpgFromRawStart = 9462
+0000009430 0x0202 JpgFromRawLength = 8567
+
+---- Directory MakerNoteCanon @ 764 ----
+0000000766 0x0001 CanonCameraSettings = [49 shorts]
+0000000778 0x0002 Unknown = [0, 50, 2838, 23076]
+0000000790 0x0003 Unknown = [0, 0, 0, 0]
+0000000802 0x0004 Unknown = [34 shorts]
+0000000814 0x0006 CanonImageType = Canon EOS 70D
+0000000826 0x0007 CanonFirmwareVersion = Firmware Version 1.1.1
+0000000838 0x0009 OwnerName =
+0000000850 0x000d Unknown = [1536 bytes]
+0000000862 0x0010 CanonModelID = -2147482843
+0000000874 0x0013 Unknown = [0, 159, 7, 112]
+0000000886 0x0019 Unknown = 1
+0000000898 0x0026 Unknown = [139 shorts]
+0000000910 0x0035 Unknown = [16, 0, 20, 0]
+0000000922 0x0093 Unknown = [32 shorts]
+0000000934 0x0095 LensModel = EF50mm f/1.8 STM
+0000000946 0x0096 InternalSerialNumber = FA0381304
+0000000958 0x0097 Unknown = [1024 bytes]
+0000000970 0x0098 Unknown = [0, 0, 0, 0]
+0000000982 0x0099 Unknown = [116 ints]
+0000000994 0x009a Unknown = [0, 5472, 3648, 0, 0]
+0000001006 0x00a0 Unknown = [28, 0, 3, 0, 0, 0, 0, 0, -1, 5200, 135, 0, 0, 0]
+0000001018 0x00aa Unknown = [12, 595, 1024, 1024, 515, 0]
+0000001030 0x00b4 Unknown = 1
+0000001042 0x00d0 Unknown = 0
+0000001054 0x00e0 Unknown = [17 shorts]
+0000001066 0x4001 Unknown = [1313 shorts]
+0000001078 0x4008 Unknown = [135, 135, 135]
+0000001090 0x4009 Unknown = [0, 0, 0]
+0000001102 0x4010 Unknown =
+0000001114 0x4011 Unknown = [252 bytes]
+0000001126 0x4012 Unknown =
+0000001138 0x4013 Unknown = [44, 0, 0, 10, -1, 0, 10, 0, 10, 0, 10]
+0000001150 0x4015 Unknown = [456 bytes]
+0000001162 0x4016 Unknown = [28, 0, 1, 0, 1, 0, 0]
+0000001174 0x4018 Unknown = [28, 0, 0, 0, 0, 0, 1]
+0000001186 0x4019 LensInfo = [30 bytes]
+0000001198 0x4020 Unknown = [28, 0, 0, 0, 0, 2147483647, 0]
+0000001210 0x4021 Unknown = [20, 0, 0, 0, 1]
+0000001222 0x4024 Unknown = [53 ints]
+0000001234 0x4025 Unknown = [36, 0, 0, 0, 0, 0, 0, 0, 0]
+0000001246 0x4027 Unknown = [24, 524546, -1325400014, 134217728, 13684944, 65539]
+
+---- XMP ----
+
+
+
+
+
+ Igelstraße 45
+
+
+
+
+
+
+ Igelstadt
+ Deutschland
+
+
+ Die Igelwiese
+
+
+ Niedersachsen
+ Igelstraße 45
+
+
+
+
+
+
+ True
+ 1.1.0
+ 0/1
+ 0
+ True
+ EF50mm f/1.8 II
+ 29
+ True
+
+
+
+ True
+ 1
+ 0
+ 0
+ 0
+ Adobe Standard
+ 1564A98C46E40037DB79C8C97BDEDC38
+ +33
+ 25
+ 50
+ 50
+ 0
+ False
+ 0
+ 60
+ 40
+ 0
+ 70
+ 30
+ +5
+ -1.00
+ 0
+ 0
+ 0
+ False
+ True
+ -39
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 100
+ 91738A0C4927BAFDC05FE184C12E1434
+ 100
+ 1
+ Canon EOS 5D Mark II (Canon EF 50mm f1.8 II) - RAW.lcp
+ Adobe (Canon EF 50mm f/1.8 II)
+ LensDefaults
+ 100
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 50
+ 34
+ +7
+ 75
+ 0
+ +16
+ 50
+ 25
+ -14
+ 0
+ 0
+ 0.0
+ 100
+ 0
+ 0
+ 0.00
+ 0.00
+ -8
+ 50
+ 0
+ 50
+ 0
+ 1
+ 6.7
+ _MG_2593.CR2
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ +3
+ 25
+ 74
+ +1.0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 4900
+ +4
+
+
+ 0, 0
+ 32, 22
+ 64, 56
+ 128, 128
+ 192, 196
+ 255, 255
+
+
+
+
+ 0, 0
+ 255, 255
+
+
+
+
+ 0, 0
+ 255, 255
+
+
+ Medium Contrast
+ Strong Contrast
+
+
+ 0, 0
+ 32, 16
+ 64, 50
+ 128, 128
+ 192, 202
+ 255, 255
+
+
+
+
+ 0, 0
+ 255, 255
+
+
+
+
+ 0, 0
+ 255, 255
+
+
+
+
+ 0, 0
+ 255, 255
+
+
+
+
+ 0, 0
+ 255, 255
+
+
+ 0
+ 0
+ 0.5
+ 0.5
+ 35
+ 0
+ 0
+ False
+ 6
+ 151388160
+ 9.12
+ +19
+ 0
+ 0
+
+
+
+
+
+ photo of a grey cat with orange eyes over a plain background
+
+
+ image/jpeg
+
+
+
+
+
+
+
+ animal
+ hedgehog
+ mammal
+ porcupine
+ rodent
+
+
+
+
+
+
+
+
+
+
+ 35753/10653
+ 2015-10-11T14:41:44
+ 0230
+ 0/1
+ 1/60
+ 16/5
+ 50/1
+ 80
+ 56/1
+ 0
+ 53,35.72066667N
+ 9,56.49733333E
+ WGS-84
+ 2.3.0.0
+
+
+ 400
+
+
+ 0
+ 2
+ 6/1
+
+
+
+ 1850746011
+ EF50mm f/1.8 STM
+
+
+ 50/1
+ 50/1
+ 0/0
+ 0/0
+
+
+ 100
+
+
+
+ Igelstadt
+ 3
+ Deutschland
+ 2018-05-17T19:44:17.200
+
+
+ 871ABA18D31FD8E7DBCC53B9FE0224AF
+ FD7181A14C33CB21D9F24DFA009838BB
+ adobe:docid:photoshop:12be8701-ee83-11dc-8fa4-839a83b75f76
+ adobe:docid:photoshop:8e134c0c-d987-11e1-8180-e5485f4b3dd6
+ adobe:docid:photoshop:b431105b-06cd-11e8-871a-e51073a125a5
+ uuid:7482E5E1C880E2118C5CA233DA119F04
+ uuid:B817E0D43CEFDB11B569A5BC76F1A641
+ uuid:F29EE4DF7EE8DC118DF8881DDBB15AA6
+ uuid:F5473D8EC2CFDD11A615E91EF51C8E6B
+ uuid:e6789bf8-372e-4f3f-9a32-51adbe529a51
+ xmp.did:026DA6464E99E5118955C48E323C1370
+ xmp.did:04BFFCF3DA20E411A80BEFF385C528EF
+ xmp.did:05BFFCF3DA20E411A80BEFF385C528EF
+ xmp.did:06BFFCF3DA20E411A80BEFF385C528EF
+ xmp.did:15E498DDD1BCE3118479C8D66754C651
+ xmp.did:1BE35DF84721E411BCDC879249A1E379
+ xmp.did:1CE35DF84721E411BCDC879249A1E379
+ xmp.did:1d863f65-8cb9-204c-a7f2-46ae0b82ab5d
+ xmp.did:1edd63cf-63f1-be43-8eb6-28739a04fc34
+ xmp.did:2A536F8FF323E4119256983A0A8E27F4
+ xmp.did:2B536F8FF323E4119256983A0A8E27F4
+ xmp.did:3277AEDEF242E611A6CA9D14FBC23D21
+ xmp.did:345F41AC61FFE511984BD03C261E519F
+ xmp.did:38E03B705845E4119D63AC8F7240C674
+ xmp.did:676074CE1267E2118E9F83D25945345A
+ xmp.did:72319FB1F844E41190628966A279BD7B
+ xmp.did:7DAF784D0E67E211B5DF870CB1273C7A
+ xmp.did:93B00518BC9AE411B0F7CA6000FB75A5
+ xmp.did:9D0D9797999EE41193BFE3E162C5B50C
+ xmp.did:A65843342923E411A15FDD5EB829D6CF
+ xmp.did:B644D45FBBBCE1119D66D9D8E4A4AB2E
+ xmp.did:B7A1306DA368E21194B2DCB767C38B70
+ xmp.did:B844D45FBBBCE1119D66D9D8E4A4AB2E
+ xmp.did:BA19A591633FE6118B589AE61772D815
+ xmp.did:CD0B892B2DA7E411B204F4CC894F2836
+ xmp.did:D35C2DD9103FE611887695DCDE94486C
+ xmp.did:E2465DCDA944E411B6E28C01EC3A081F
+ xmp.did:E6465DCDA944E411B6E28C01EC3A081F
+ xmp.did:E679195AAFC3E511B30DF07EB0FADE24
+ xmp.did:E7368B9DDBD6E4118EDED9318DFC5458
+ xmp.did:FC05A09BD220E4118462AF7374FB7815
+
+
+ Adobe RGB (1998)
+ Niedersachsen
+
+
+
+ Canon
+ Canon EOS 70D
+ 1
+ 72/1
+ 72/1
+
+
+
+ 2015-10-11T14:41:44
+ Adobe Photoshop CC 2017 (Windows)
+
+ 2025-01-22T15:35:12.180Z
+ 2015-10-11T14:41:44
+ 4
+
+
+
+
+ xmp.did:1d863f65-8cb9-204c-a7f2-46ae0b82ab5d
+ xmp.iid:538f1514-22d7-f448-8555-37cf07bc0117
+ CBD5B8C3D30C0B13434B30B971EBF9DA
+
+ E9EC4E99-E201-4440-8D8E-B14E7776148D
+
+
+
+ derived
+ converted from image/x-canon-cr2 to image/tiff
+
+
+ saved
+ /
+ xmp.iid:1edd63cf-63f1-be43-8eb6-28739a04fc34
+ Adobe Photoshop Camera Raw 9.12 (Windows)
+ 2018-05-18T11:54:23+02:00
+
+
+ saved
+ /
+ xmp.iid:213d0dd5-b1d2-ea41-bd05-7e1fea066277
+ Adobe Photoshop CC 2017 (Windows)
+ 2018-05-18T12:11:10+02:00
+
+
+ converted
+ from image/tiff to application/vnd.adobe.photoshop
+
+
+ derived
+ converted from image/tiff to application/vnd.adobe.photoshop
+
+
+ saved
+ /
+ xmp.iid:1d863f65-8cb9-204c-a7f2-46ae0b82ab5d
+ Adobe Photoshop CC 2017 (Windows)
+ 2018-05-18T12:11:10+02:00
+
+
+ saved
+ /
+ xmp.iid:538f1514-22d7-f448-8555-37cf07bc0117
+ Adobe Photoshop CC 2017 (Windows)
+ 2018-05-18T12:12:44+02:00
+
+
+ converted
+ from application/vnd.adobe.photoshop to image/jpeg
+
+
+ derived
+ converted from application/vnd.adobe.photoshop to image/jpeg
+
+
+ saved
+ /
+ xmp.iid:a330c3fb-4e2f-f948-bd00-04e86112dfd9
+ Adobe Photoshop CC 2017 (Windows)
+ 2018-05-18T12:12:44+02:00
+
+
+
+ xmp.iid:A944B6DB-7704-4449-82BD-83D3C861D070
+ E9EC4E99-E201-4440-8D8E-B14E7776148D
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_87.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_87.txt
new file mode 100644
index 00000000..68c72657
--- /dev/null
+++ b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_87.txt
@@ -0,0 +1,134 @@
+File format : AVIF
+Resolution : null
+---- TIFF ----
+Version 42
+Little-endian (Intel, II)
+---- Directory IFD0 @ 8 ----
+0000000010 0x010f Make = Canon
+0000000022 0x0110 Model = Canon EOS 70D
+0000000034 0x0112 Orientation = 1
+0000000046 0x011a XResolution = 72/1 (72.0)
+0000000058 0x011b YResolution = 72/1 (72.0)
+0000000070 0x0128 ResolutionUnit = 2
+0000000082 0x0132 ModifyDate = 2015:10:11 14:41:44
+0000000094 0x013b Artist =
+0000000106 0x0213 YCbCrPositioning = 2
+0000000118 0x8298 Copyright =
+0000000130 0x8769 ExifOffset = 214
+0000000142 0x8825 GPSInfo = 9350
+
+---- Directory ExifIFD @ 214 ----
+0000000216 0x829a ExposureTime = 1/60 (0.016667)
+0000000228 0x829d FNumber = 32/10 (3.2)
+0000000240 0x8822 ExposureProgram = 2
+0000000252 0x8827 ISO = 400
+0000000264 0x8830 SensitivityType = 2
+0000000276 0x8832 RecommendedExposureIndex = 400
+0000000288 0x9000 ExifVersion = [0x30, 0x32, 0x33, 0x30]
+0000000300 0x9003 DateTimeOriginal = 2015:10:11 14:41:44
+0000000312 0x9004 DateTimeDigitized = 2015:10:11 14:41:44
+0000000324 0x9101 ComponentsConfiguration = [0x01, 0x02, 0x03, 0x00]
+0000000336 0x9201 ShutterSpeedValue = 393216/65536 (6.0)
+0000000348 0x9202 ApertureValue = 221184/65536 (3.375)
+0000000360 0x9204 ExposureCompensation = 0/1 (0.0)
+0000000372 0x9207 MeteringMode = 5
+0000000384 0x9209 Flash = 16
+0000000396 0x920a FocalLength = 50/1 (50.0)
+0000000408 0x927c MakerNote = [8200 bytes]
+0000000420 0x9286 UserComment =
+0000000432 0x9290 SubSecTime = 00
+0000000444 0x9291 SubSecTimeOriginal = 00
+0000000456 0x9292 SubSecTimeDigitized = 00
+0000000468 0xa000 FlashpixVersion = [0x30, 0x31, 0x30, 0x30]
+0000000480 0xa001 ColorSpace = 1
+0000000492 0xa002 ExifImageWidth = 5472
+0000000504 0xa003 ExifImageHeight = 3648
+0000000516 0xa005 InteropOffset = 9320
+0000000528 0xa20e FocalPlaneXResolution = 5472000/899 (6086.76307)
+0000000540 0xa20f FocalPlaneYResolution = 3648000/599 (6090.15025)
+0000000552 0xa210 FocalPlaneResolutionUnit = 2
+0000000564 0xa401 CustomRendered = 0
+0000000576 0xa402 ExposureMode = 0
+0000000588 0xa403 WhiteBalance = 0
+0000000600 0xa406 SceneCaptureType = 0
+0000000612 0xa430 CameraOwnerName =
+0000000624 0xa431 BodySerialNumber = 053022005903
+0000000636 0xa432 LensSpecification = [50/1 (50.0), 50/1 (50.0), 0/1 (0.0), 0/1 (0.0)]
+0000000648 0xa434 LensModel = EF50mm f/1.8 STM
+0000000660 0xa435 LensSerialNumber = 0000214e1c
+
+---- Directory InteropIFD @ 9320 ----
+0000009322 0x0001 InteroperabilityIndex = R98
+0000009334 0x0002 InteroperabilityVersion = [0x30, 0x31, 0x30, 0x30]
+
+---- Directory GPS @ 9350 ----
+0000009352 0x0000 GPSVersionID = [0x02, 0x03, 0x00, 0x00]
+
+---- Directory IFD1 @ 9368 ----
+0000009370 0x0103 Compression = 6
+0000009382 0x011a XResolution = 72/1 (72.0)
+0000009394 0x011b YResolution = 72/1 (72.0)
+0000009406 0x0128 ResolutionUnit = 2
+0000009418 0x0201 JpgFromRawStart = 9462
+0000009430 0x0202 JpgFromRawLength = 8567
+
+---- Directory MakerNoteCanon @ 764 ----
+0000000766 0x0001 CanonCameraSettings = [49 shorts]
+0000000778 0x0002 Unknown = [0, 50, 2838, 23076]
+0000000790 0x0003 Unknown = [0, 0, 0, 0]
+0000000802 0x0004 Unknown = [34 shorts]
+0000000814 0x0006 CanonImageType = Canon EOS 70D
+0000000826 0x0007 CanonFirmwareVersion = Firmware Version 1.1.1
+0000000838 0x0009 OwnerName =
+0000000850 0x000d Unknown = [1536 bytes]
+0000000862 0x0010 CanonModelID = -2147482843
+0000000874 0x0013 Unknown = [0, 159, 7, 112]
+0000000886 0x0019 Unknown = 1
+0000000898 0x0026 Unknown = [139 shorts]
+0000000910 0x0035 Unknown = [16, 0, 20, 0]
+0000000922 0x0093 Unknown = [32 shorts]
+0000000934 0x0095 LensModel = EF50mm f/1.8 STM
+0000000946 0x0096 InternalSerialNumber = FA0381304
+0000000958 0x0097 Unknown = [1024 bytes]
+0000000970 0x0098 Unknown = [0, 0, 0, 0]
+0000000982 0x0099 Unknown = [116 ints]
+0000000994 0x009a Unknown = [0, 5472, 3648, 0, 0]
+0000001006 0x00a0 Unknown = [28, 0, 3, 0, 0, 0, 0, 0, -1, 5200, 135, 0, 0, 0]
+0000001018 0x00aa Unknown = [12, 595, 1024, 1024, 515, 0]
+0000001030 0x00b4 Unknown = 1
+0000001042 0x00d0 Unknown = 0
+0000001054 0x00e0 Unknown = [17 shorts]
+0000001066 0x4001 Unknown = [1313 shorts]
+0000001078 0x4008 Unknown = [135, 135, 135]
+0000001090 0x4009 Unknown = [0, 0, 0]
+0000001102 0x4010 Unknown =
+0000001114 0x4011 Unknown = [252 bytes]
+0000001126 0x4012 Unknown =
+0000001138 0x4013 Unknown = [44, 0, 0, 10, -1, 0, 10, 0, 10, 0, 10]
+0000001150 0x4015 Unknown = [456 bytes]
+0000001162 0x4016 Unknown = [28, 0, 1, 0, 1, 0, 0]
+0000001174 0x4018 Unknown = [28, 0, 0, 0, 0, 0, 1]
+0000001186 0x4019 LensInfo = [30 bytes]
+0000001198 0x4020 Unknown = [28, 0, 0, 0, 0, 2147483647, 0]
+0000001210 0x4021 Unknown = [20, 0, 0, 0, 1]
+0000001222 0x4024 Unknown = [53 ints]
+0000001234 0x4025 Unknown = [36, 0, 0, 0, 0, 0, 0, 0, 0]
+0000001246 0x4027 Unknown = [24, 524546, -1325400014, 134217728, 13684944, 65539]
+
+---- XMP ----
+
+
+
+
+ 3
+
+
+ Animated AVIF with XMP in top-level UUID box
+
+
+
+
+
+
diff --git a/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_88.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_88.txt
new file mode 100644
index 00000000..5cbc2f33
--- /dev/null
+++ b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_88.txt
@@ -0,0 +1,134 @@
+File format : AVIF
+Resolution : null
+---- TIFF ----
+Version 42
+Little-endian (Intel, II)
+---- Directory IFD0 @ 8 ----
+0000000010 0x010f Make = Canon
+0000000022 0x0110 Model = Canon EOS 70D
+0000000034 0x0112 Orientation = 1
+0000000046 0x011a XResolution = 72/1 (72.0)
+0000000058 0x011b YResolution = 72/1 (72.0)
+0000000070 0x0128 ResolutionUnit = 2
+0000000082 0x0132 ModifyDate = 2015:10:11 14:41:44
+0000000094 0x013b Artist =
+0000000106 0x0213 YCbCrPositioning = 2
+0000000118 0x8298 Copyright =
+0000000130 0x8769 ExifOffset = 214
+0000000142 0x8825 GPSInfo = 9350
+
+---- Directory ExifIFD @ 214 ----
+0000000216 0x829a ExposureTime = 1/60 (0.016667)
+0000000228 0x829d FNumber = 32/10 (3.2)
+0000000240 0x8822 ExposureProgram = 2
+0000000252 0x8827 ISO = 400
+0000000264 0x8830 SensitivityType = 2
+0000000276 0x8832 RecommendedExposureIndex = 400
+0000000288 0x9000 ExifVersion = [0x30, 0x32, 0x33, 0x30]
+0000000300 0x9003 DateTimeOriginal = 2015:10:11 14:41:44
+0000000312 0x9004 DateTimeDigitized = 2015:10:11 14:41:44
+0000000324 0x9101 ComponentsConfiguration = [0x01, 0x02, 0x03, 0x00]
+0000000336 0x9201 ShutterSpeedValue = 393216/65536 (6.0)
+0000000348 0x9202 ApertureValue = 221184/65536 (3.375)
+0000000360 0x9204 ExposureCompensation = 0/1 (0.0)
+0000000372 0x9207 MeteringMode = 5
+0000000384 0x9209 Flash = 16
+0000000396 0x920a FocalLength = 50/1 (50.0)
+0000000408 0x927c MakerNote = [8200 bytes]
+0000000420 0x9286 UserComment =
+0000000432 0x9290 SubSecTime = 00
+0000000444 0x9291 SubSecTimeOriginal = 00
+0000000456 0x9292 SubSecTimeDigitized = 00
+0000000468 0xa000 FlashpixVersion = [0x30, 0x31, 0x30, 0x30]
+0000000480 0xa001 ColorSpace = 1
+0000000492 0xa002 ExifImageWidth = 5472
+0000000504 0xa003 ExifImageHeight = 3648
+0000000516 0xa005 InteropOffset = 9320
+0000000528 0xa20e FocalPlaneXResolution = 5472000/899 (6086.76307)
+0000000540 0xa20f FocalPlaneYResolution = 3648000/599 (6090.15025)
+0000000552 0xa210 FocalPlaneResolutionUnit = 2
+0000000564 0xa401 CustomRendered = 0
+0000000576 0xa402 ExposureMode = 0
+0000000588 0xa403 WhiteBalance = 0
+0000000600 0xa406 SceneCaptureType = 0
+0000000612 0xa430 CameraOwnerName =
+0000000624 0xa431 BodySerialNumber = 053022005903
+0000000636 0xa432 LensSpecification = [50/1 (50.0), 50/1 (50.0), 0/1 (0.0), 0/1 (0.0)]
+0000000648 0xa434 LensModel = EF50mm f/1.8 STM
+0000000660 0xa435 LensSerialNumber = 0000214e1c
+
+---- Directory InteropIFD @ 9320 ----
+0000009322 0x0001 InteroperabilityIndex = R98
+0000009334 0x0002 InteroperabilityVersion = [0x30, 0x31, 0x30, 0x30]
+
+---- Directory GPS @ 9350 ----
+0000009352 0x0000 GPSVersionID = [0x02, 0x03, 0x00, 0x00]
+
+---- Directory IFD1 @ 9368 ----
+0000009370 0x0103 Compression = 6
+0000009382 0x011a XResolution = 72/1 (72.0)
+0000009394 0x011b YResolution = 72/1 (72.0)
+0000009406 0x0128 ResolutionUnit = 2
+0000009418 0x0201 JpgFromRawStart = 9462
+0000009430 0x0202 JpgFromRawLength = 8567
+
+---- Directory MakerNoteCanon @ 764 ----
+0000000766 0x0001 CanonCameraSettings = [49 shorts]
+0000000778 0x0002 Unknown = [0, 50, 2838, 23076]
+0000000790 0x0003 Unknown = [0, 0, 0, 0]
+0000000802 0x0004 Unknown = [34 shorts]
+0000000814 0x0006 CanonImageType = Canon EOS 70D
+0000000826 0x0007 CanonFirmwareVersion = Firmware Version 1.1.1
+0000000838 0x0009 OwnerName =
+0000000850 0x000d Unknown = [1536 bytes]
+0000000862 0x0010 CanonModelID = -2147482843
+0000000874 0x0013 Unknown = [0, 159, 7, 112]
+0000000886 0x0019 Unknown = 1
+0000000898 0x0026 Unknown = [139 shorts]
+0000000910 0x0035 Unknown = [16, 0, 20, 0]
+0000000922 0x0093 Unknown = [32 shorts]
+0000000934 0x0095 LensModel = EF50mm f/1.8 STM
+0000000946 0x0096 InternalSerialNumber = FA0381304
+0000000958 0x0097 Unknown = [1024 bytes]
+0000000970 0x0098 Unknown = [0, 0, 0, 0]
+0000000982 0x0099 Unknown = [116 ints]
+0000000994 0x009a Unknown = [0, 5472, 3648, 0, 0]
+0000001006 0x00a0 Unknown = [28, 0, 3, 0, 0, 0, 0, 0, -1, 5200, 135, 0, 0, 0]
+0000001018 0x00aa Unknown = [12, 595, 1024, 1024, 515, 0]
+0000001030 0x00b4 Unknown = 1
+0000001042 0x00d0 Unknown = 0
+0000001054 0x00e0 Unknown = [17 shorts]
+0000001066 0x4001 Unknown = [1313 shorts]
+0000001078 0x4008 Unknown = [135, 135, 135]
+0000001090 0x4009 Unknown = [0, 0, 0]
+0000001102 0x4010 Unknown =
+0000001114 0x4011 Unknown = [252 bytes]
+0000001126 0x4012 Unknown =
+0000001138 0x4013 Unknown = [44, 0, 0, 10, -1, 0, 10, 0, 10, 0, 10]
+0000001150 0x4015 Unknown = [456 bytes]
+0000001162 0x4016 Unknown = [28, 0, 1, 0, 1, 0, 0]
+0000001174 0x4018 Unknown = [28, 0, 0, 0, 0, 0, 1]
+0000001186 0x4019 LensInfo = [30 bytes]
+0000001198 0x4020 Unknown = [28, 0, 0, 0, 0, 2147483647, 0]
+0000001210 0x4021 Unknown = [20, 0, 0, 0, 1]
+0000001222 0x4024 Unknown = [53 ints]
+0000001234 0x4025 Unknown = [36, 0, 0, 0, 0, 0, 0, 0, 0]
+0000001246 0x4027 Unknown = [24, 524546, -1325400014, 134217728, 13684944, 65539]
+
+---- XMP ----
+
+
+
+
+ 4
+
+
+ Animated AVIF with XMP in UUID box inside moov
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_9.txt b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_9.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/txt/photo_9.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/txt/media_9.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/xmp/.gitattributes b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/.gitattributes
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/xmp/.gitattributes
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/.gitattributes
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/xmp/acdsee_sample.xmp b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/acdsee_sample.xmp
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/xmp/acdsee_sample.xmp
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/acdsee_sample.xmp
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/xmp/acdsee_sample_mod.xmp b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/acdsee_sample_mod.xmp
similarity index 98%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/xmp/acdsee_sample_mod.xmp
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/acdsee_sample_mod.xmp
index ef799c46..16e32b24 100644
--- a/src/commonTest/resources/com/ashampoo/kim/testdata/xmp/acdsee_sample_mod.xmp
+++ b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/acdsee_sample_mod.xmp
@@ -1,5 +1,5 @@
-
+
-
+
-
+
+
+
+
+
+ Igelstraße 45
+
+
+
+
+
+
+ Igelstadt
+ Deutschland
+
+
+ Die Igelwiese
+
+
+ Niedersachsen
+ Igelstraße 45
+
+
+
+
+
+
+ True
+ 1.1.0
+ 0/1
+ 0
+ True
+ EF50mm f/1.8 II
+ 29
+ True
+
+
+
+ True
+ 1
+ 0
+ 0
+ 0
+ Adobe Standard
+ 1564A98C46E40037DB79C8C97BDEDC38
+ +33
+ 25
+ 50
+ 50
+ 0
+ False
+ 0
+ 60
+ 40
+ 0
+ 70
+ 30
+ +5
+ -1.00
+ 0
+ 0
+ 0
+ False
+ True
+ -39
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 100
+ 91738A0C4927BAFDC05FE184C12E1434
+ 100
+ 1
+ Canon EOS 5D Mark II (Canon EF 50mm f1.8 II) - RAW.lcp
+ Adobe (Canon EF 50mm f/1.8 II)
+ LensDefaults
+ 100
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 50
+ 34
+ +7
+ 75
+ 0
+ +16
+ 50
+ 25
+ -14
+ 0
+ 0
+ 0.0
+ 100
+ 0
+ 0
+ 0.00
+ 0.00
+ -8
+ 50
+ 0
+ 50
+ 0
+ 1
+ 6.7
+ _MG_2593.CR2
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ +3
+ 25
+ 74
+ +1.0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 4900
+ +4
+
+
+ 0, 0
+ 32, 22
+ 64, 56
+ 128, 128
+ 192, 196
+ 255, 255
+
+
+
+
+ 0, 0
+ 255, 255
+
+
+
+
+ 0, 0
+ 255, 255
+
+
+ Medium Contrast
+ Strong Contrast
+
+
+ 0, 0
+ 32, 16
+ 64, 50
+ 128, 128
+ 192, 202
+ 255, 255
+
+
+
+
+ 0, 0
+ 255, 255
+
+
+
+
+ 0, 0
+ 255, 255
+
+
+
+
+ 0, 0
+ 255, 255
+
+
+
+
+ 0, 0
+ 255, 255
+
+
+ 0
+ 0
+ 0.5
+ 0.5
+ 35
+ 0
+ 0
+ False
+ 6
+ 151388160
+ 9.12
+ +19
+ 0
+ 0
+
+
+
+
+
+ photo of a grey cat with orange eyes over a plain background
+
+
+ image/jpeg
+
+
+
+
+
+
+
+ animal
+ hedgehog
+ mammal
+ porcupine
+ rodent
+
+
+
+
+
+
+
+
+
+
+ 35753/10653
+ 2015-10-11T14:41:44
+ 0230
+ 0/1
+ 1/60
+ 16/5
+ 50/1
+ 80
+ 56/1
+ 0
+ 53,35.72066667N
+ 9,56.49733333E
+ WGS-84
+ 2.3.0.0
+
+
+ 400
+
+
+ 0
+ 2
+ 6/1
+
+
+
+ 1850746011
+ EF50mm f/1.8 STM
+
+
+ 50/1
+ 50/1
+ 0/0
+ 0/0
+
+
+ 100
+
+
+
+ Igelstadt
+ 3
+ Deutschland
+ 2018-05-17T19:44:17.200
+
+
+ 871ABA18D31FD8E7DBCC53B9FE0224AF
+ FD7181A14C33CB21D9F24DFA009838BB
+ adobe:docid:photoshop:12be8701-ee83-11dc-8fa4-839a83b75f76
+ adobe:docid:photoshop:8e134c0c-d987-11e1-8180-e5485f4b3dd6
+ adobe:docid:photoshop:b431105b-06cd-11e8-871a-e51073a125a5
+ uuid:7482E5E1C880E2118C5CA233DA119F04
+ uuid:B817E0D43CEFDB11B569A5BC76F1A641
+ uuid:F29EE4DF7EE8DC118DF8881DDBB15AA6
+ uuid:F5473D8EC2CFDD11A615E91EF51C8E6B
+ uuid:e6789bf8-372e-4f3f-9a32-51adbe529a51
+ xmp.did:026DA6464E99E5118955C48E323C1370
+ xmp.did:04BFFCF3DA20E411A80BEFF385C528EF
+ xmp.did:05BFFCF3DA20E411A80BEFF385C528EF
+ xmp.did:06BFFCF3DA20E411A80BEFF385C528EF
+ xmp.did:15E498DDD1BCE3118479C8D66754C651
+ xmp.did:1BE35DF84721E411BCDC879249A1E379
+ xmp.did:1CE35DF84721E411BCDC879249A1E379
+ xmp.did:1d863f65-8cb9-204c-a7f2-46ae0b82ab5d
+ xmp.did:1edd63cf-63f1-be43-8eb6-28739a04fc34
+ xmp.did:2A536F8FF323E4119256983A0A8E27F4
+ xmp.did:2B536F8FF323E4119256983A0A8E27F4
+ xmp.did:3277AEDEF242E611A6CA9D14FBC23D21
+ xmp.did:345F41AC61FFE511984BD03C261E519F
+ xmp.did:38E03B705845E4119D63AC8F7240C674
+ xmp.did:676074CE1267E2118E9F83D25945345A
+ xmp.did:72319FB1F844E41190628966A279BD7B
+ xmp.did:7DAF784D0E67E211B5DF870CB1273C7A
+ xmp.did:93B00518BC9AE411B0F7CA6000FB75A5
+ xmp.did:9D0D9797999EE41193BFE3E162C5B50C
+ xmp.did:A65843342923E411A15FDD5EB829D6CF
+ xmp.did:B644D45FBBBCE1119D66D9D8E4A4AB2E
+ xmp.did:B7A1306DA368E21194B2DCB767C38B70
+ xmp.did:B844D45FBBBCE1119D66D9D8E4A4AB2E
+ xmp.did:BA19A591633FE6118B589AE61772D815
+ xmp.did:CD0B892B2DA7E411B204F4CC894F2836
+ xmp.did:D35C2DD9103FE611887695DCDE94486C
+ xmp.did:E2465DCDA944E411B6E28C01EC3A081F
+ xmp.did:E6465DCDA944E411B6E28C01EC3A081F
+ xmp.did:E679195AAFC3E511B30DF07EB0FADE24
+ xmp.did:E7368B9DDBD6E4118EDED9318DFC5458
+ xmp.did:FC05A09BD220E4118462AF7374FB7815
+
+
+ Adobe RGB (1998)
+ Niedersachsen
+
+
+
+ Canon
+ Canon EOS 70D
+ 1
+ 72/1
+ 72/1
+
+
+
+ 2015-10-11T14:41:44
+ Adobe Photoshop CC 2017 (Windows)
+
+ 2025-01-22T15:35:12.180Z
+ 2015-10-11T14:41:44
+ 4
+
+
+
+
+ xmp.did:1d863f65-8cb9-204c-a7f2-46ae0b82ab5d
+ xmp.iid:538f1514-22d7-f448-8555-37cf07bc0117
+ CBD5B8C3D30C0B13434B30B971EBF9DA
+
+ E9EC4E99-E201-4440-8D8E-B14E7776148D
+
+
+
+ derived
+ converted from image/x-canon-cr2 to image/tiff
+
+
+ saved
+ /
+ xmp.iid:1edd63cf-63f1-be43-8eb6-28739a04fc34
+ Adobe Photoshop Camera Raw 9.12 (Windows)
+ 2018-05-18T11:54:23+02:00
+
+
+ saved
+ /
+ xmp.iid:213d0dd5-b1d2-ea41-bd05-7e1fea066277
+ Adobe Photoshop CC 2017 (Windows)
+ 2018-05-18T12:11:10+02:00
+
+
+ converted
+ from image/tiff to application/vnd.adobe.photoshop
+
+
+ derived
+ converted from image/tiff to application/vnd.adobe.photoshop
+
+
+ saved
+ /
+ xmp.iid:1d863f65-8cb9-204c-a7f2-46ae0b82ab5d
+ Adobe Photoshop CC 2017 (Windows)
+ 2018-05-18T12:11:10+02:00
+
+
+ saved
+ /
+ xmp.iid:538f1514-22d7-f448-8555-37cf07bc0117
+ Adobe Photoshop CC 2017 (Windows)
+ 2018-05-18T12:12:44+02:00
+
+
+ converted
+ from application/vnd.adobe.photoshop to image/jpeg
+
+
+ derived
+ converted from application/vnd.adobe.photoshop to image/jpeg
+
+
+ saved
+ /
+ xmp.iid:a330c3fb-4e2f-f948-bd00-04e86112dfd9
+ Adobe Photoshop CC 2017 (Windows)
+ 2018-05-18T12:12:44+02:00
+
+
+
+ xmp.iid:A944B6DB-7704-4449-82BD-83D3C861D070
+ E9EC4E99-E201-4440-8D8E-B14E7776148D
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/media_87.xmp b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/media_87.xmp
new file mode 100644
index 00000000..cf92fbfd
--- /dev/null
+++ b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/media_87.xmp
@@ -0,0 +1,16 @@
+
+
+
+
+ 3
+
+
+ Animated AVIF with XMP in top-level UUID box
+
+
+
+
+
+
diff --git a/src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/media_88.xmp b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/media_88.xmp
new file mode 100644
index 00000000..f84a5728
--- /dev/null
+++ b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/media_88.xmp
@@ -0,0 +1,16 @@
+
+
+
+
+ 4
+
+
+ Animated AVIF with XMP in UUID box inside moov
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/xmp/photo_8_formatted.xmp b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/media_8_formatted.xmp
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/xmp/photo_8_formatted.xmp
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/media_8_formatted.xmp
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/xmp/photo_9.xmp b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/media_9.xmp
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/xmp/photo_9.xmp
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/media_9.xmp
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/xmp/photo_9_formatted.xmp b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/media_9_formatted.xmp
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/xmp/photo_9_formatted.xmp
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/media_9_formatted.xmp
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/xmp/mylio_sample.xmp b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/mylio_sample.xmp
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/xmp/mylio_sample.xmp
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/mylio_sample.xmp
diff --git a/src/commonTest/resources/com/ashampoo/kim/testdata/xmp/mylio_sample_mod.xmp b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/mylio_sample_mod.xmp
similarity index 98%
rename from src/commonTest/resources/com/ashampoo/kim/testdata/xmp/mylio_sample_mod.xmp
rename to src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/mylio_sample_mod.xmp
index ba04e5cd..d8ca8536 100644
--- a/src/commonTest/resources/com/ashampoo/kim/testdata/xmp/mylio_sample_mod.xmp
+++ b/src/commonTest/resources/de/stefan_oltmann/kim/testdata/xmp/mylio_sample_mod.xmp
@@ -1,5 +1,5 @@
-
+
-
+
-
+
+
+
diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_gif/new_flagged.gif b/src/commonTest/resources/de/stefan_oltmann/kim/updates_gif/new_flagged.gif
similarity index 99%
rename from src/commonTest/resources/com/ashampoo/kim/updates_gif/new_flagged.gif
rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_gif/new_flagged.gif
index 84377d96..a8a527b2 100644
Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_gif/new_flagged.gif and b/src/commonTest/resources/de/stefan_oltmann/kim/updates_gif/new_flagged.gif differ
diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_gif/new_flagged.gif.txt b/src/commonTest/resources/de/stefan_oltmann/kim/updates_gif/new_flagged.gif.txt
similarity index 95%
rename from src/commonTest/resources/com/ashampoo/kim/updates_gif/new_flagged.gif.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_gif/new_flagged.gif.txt
index c98544d3..d34e991c 100644
--- a/src/commonTest/resources/com/ashampoo/kim/updates_gif/new_flagged.gif.txt
+++ b/src/commonTest/resources/de/stefan_oltmann/kim/updates_gif/new_flagged.gif.txt
@@ -1,7 +1,7 @@
File format : GIF
Resolution : 500 x 333
---- XMP ----
-
+
+
+
+
+
+
+
+
diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_gif/new_location_shown.gif b/src/commonTest/resources/de/stefan_oltmann/kim/updates_gif/new_location_shown.gif
similarity index 99%
rename from src/commonTest/resources/com/ashampoo/kim/updates_gif/new_location_shown.gif
rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_gif/new_location_shown.gif
index 5645fdf3..ea415029 100644
Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_gif/new_location_shown.gif and b/src/commonTest/resources/de/stefan_oltmann/kim/updates_gif/new_location_shown.gif differ
diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_gif/new_location_shown.gif.txt b/src/commonTest/resources/de/stefan_oltmann/kim/updates_gif/new_location_shown.gif.txt
similarity index 96%
rename from src/commonTest/resources/com/ashampoo/kim/updates_gif/new_location_shown.gif.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_gif/new_location_shown.gif.txt
index fe66ddfb..3908d779 100644
--- a/src/commonTest/resources/com/ashampoo/kim/updates_gif/new_location_shown.gif.txt
+++ b/src/commonTest/resources/de/stefan_oltmann/kim/updates_gif/new_location_shown.gif.txt
@@ -1,7 +1,7 @@
File format : GIF
Resolution : 500 x 333
---- XMP ----
-
+
+
+
+
diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_gif/new_rating.gif b/src/commonTest/resources/de/stefan_oltmann/kim/updates_gif/new_rating.gif
similarity index 99%
rename from src/commonTest/resources/com/ashampoo/kim/updates_gif/new_rating.gif
rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_gif/new_rating.gif
index 3ec4966b..826966f2 100644
Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_gif/new_rating.gif and b/src/commonTest/resources/de/stefan_oltmann/kim/updates_gif/new_rating.gif differ
diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_gif/new_rating.gif.txt b/src/commonTest/resources/de/stefan_oltmann/kim/updates_gif/new_rating.gif.txt
similarity index 93%
rename from src/commonTest/resources/com/ashampoo/kim/updates_gif/new_rating.gif.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_gif/new_rating.gif.txt
index 9af13443..ef826c4b 100644
--- a/src/commonTest/resources/com/ashampoo/kim/updates_gif/new_rating.gif.txt
+++ b/src/commonTest/resources/de/stefan_oltmann/kim/updates_gif/new_rating.gif.txt
@@ -1,7 +1,7 @@
File format : GIF
Resolution : 500 x 333
---- XMP ----
-
+
+
+
+
+
+
diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_gif/no_metadata.gif b/src/commonTest/resources/de/stefan_oltmann/kim/updates_gif/no_metadata.gif
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/updates_gif/no_metadata.gif
rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_gif/no_metadata.gif
diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_gif/original.gif b/src/commonTest/resources/de/stefan_oltmann/kim/updates_gif/original.gif
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/updates_gif/original.gif
rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_gif/original.gif
diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/.gitattributes b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/.gitattributes
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/updates_jpg/.gitattributes
rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/.gitattributes
diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_description.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_description.jpg
similarity index 99%
rename from src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_description.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_description.jpg
index 2fe6a313..68aa58cd 100644
Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_description.jpg and b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_description.jpg differ
diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_description.jpg.txt b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_description.jpg.txt
similarity index 98%
rename from src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_description.jpg.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_description.jpg.txt
index 9ade7b24..187d6028 100644
--- a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_description.jpg.txt
+++ b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_description.jpg.txt
@@ -132,7 +132,7 @@ Keywords (25) = 'people'
---- XMP ----
-
+
-
+
diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_flagged.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_flagged.jpg
similarity index 99%
rename from src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_flagged.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_flagged.jpg
index 852d0b6c..aac44d5e 100644
Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_flagged.jpg and b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_flagged.jpg differ
diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_flagged.jpg.txt b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_flagged.jpg.txt
similarity index 98%
rename from src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_flagged.jpg.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_flagged.jpg.txt
index 501555cc..e0a876eb 100644
--- a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_flagged.jpg.txt
+++ b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_flagged.jpg.txt
@@ -135,7 +135,7 @@ Keywords (25) = 'people'
---- XMP ----
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_location_shown.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_location_shown.jpg
similarity index 99%
rename from src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_location_shown.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_location_shown.jpg
index 747646ee..b02ff41b 100644
Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_location_shown.jpg and b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_location_shown.jpg differ
diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_location_shown.jpg.txt b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_location_shown.jpg.txt
similarity index 98%
rename from src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_location_shown.jpg.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_location_shown.jpg.txt
index bab71d56..9665e064 100644
--- a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_location_shown.jpg.txt
+++ b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_location_shown.jpg.txt
@@ -139,7 +139,7 @@ Keywords (25) = 'people'
---- XMP ----
-
+
-
+
-
+
-
+
diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_rating.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_rating.jpg
similarity index 99%
rename from src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_rating.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_rating.jpg
index 0160afdd..b10c7068 100644
Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_rating.jpg and b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_rating.jpg differ
diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_rating.jpg.txt b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_rating.jpg.txt
similarity index 98%
rename from src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_rating.jpg.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_rating.jpg.txt
index fc6bcd88..41915599 100644
--- a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/new_rating.jpg.txt
+++ b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/new_rating.jpg.txt
@@ -135,7 +135,7 @@ Keywords (25) = 'people'
---- XMP ----
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/no_metadata.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/no_metadata.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/updates_jpg/no_metadata.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/no_metadata.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/original.debug_notes.txt b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/original.debug_notes.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/updates_jpg/original.debug_notes.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/original.debug_notes.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/original.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/original.jpg
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/updates_jpg/original.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/original.jpg
diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/original.jpg.txt b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/original.jpg.txt
similarity index 100%
rename from src/commonTest/resources/com/ashampoo/kim/updates_jpg/original.jpg.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/original.jpg.txt
diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/rotated_right.jpg b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/rotated_right.jpg
similarity index 99%
rename from src/commonTest/resources/com/ashampoo/kim/updates_jpg/rotated_right.jpg
rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/rotated_right.jpg
index 106832a7..2d90057b 100644
Binary files a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/rotated_right.jpg and b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/rotated_right.jpg differ
diff --git a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/rotated_right.jpg.txt b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/rotated_right.jpg.txt
similarity index 98%
rename from src/commonTest/resources/com/ashampoo/kim/updates_jpg/rotated_right.jpg.txt
rename to src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/rotated_right.jpg.txt
index e79ecd0a..5c8f8995 100644
--- a/src/commonTest/resources/com/ashampoo/kim/updates_jpg/rotated_right.jpg.txt
+++ b/src/commonTest/resources/de/stefan_oltmann/kim/updates_jpg/rotated_right.jpg.txt
@@ -135,7 +135,7 @@ Keywords (25) = 'people'
---- XMP ----
-
+
-
+
-
+
-