Skip to content

Commit 782ead1

Browse files
committed
Core update for 2.0.7
1 parent bf20eba commit 782ead1

24 files changed

+1311
-649
lines changed

app/src/main/java/com/radzivon/bartoshyk/avif/MainActivity.kt

+33-26
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ class MainActivity : AppCompatActivity() {
122122
var allFiles = mutableListOf<String>()
123123
allFiles.addAll(allFiles2)
124124
allFiles.addAll(allFiles1)
125-
allFiles = allFiles.filter { it.contains("bt_2020_pq.avif") }.toMutableList()
125+
// allFiles = allFiles.filter { it.contains("club.avif") }.toMutableList()
126126
// allFiles = allFiles.filter { it.contains("bbb_alpha_inverted.avif") }.toMutableList()
127127
for (file in allFiles) {
128128
try {
@@ -132,28 +132,35 @@ class MainActivity : AppCompatActivity() {
132132

133133
val size = coder.getSize(buffer)
134134
if (size != null) {
135-
// val bitmap = coder.decodeSampled(
136-
// buffer,
137-
// if (size.width > 1800 || size.height > 1800) size.width / 2 else size.width,
138-
// if (size.width > 1800 || size.height > 1800) size.height / 2 else size.height,
139-
// PreferredColorConfig.RGBA_1010102,
140-
// ScaleMode.RESIZE
141-
// )
135+
val bitmap0 = coder.decodeSampled(
136+
buffer,
137+
if (size.width > 1800 || size.height > 1800) size.width / 4 else size.width,
138+
if (size.width > 1800 || size.height > 1800) size.height / 4 else size.height,
139+
PreferredColorConfig.RGBA_8888,
140+
ScaleMode.RESIZE
141+
)
142142
var start = System.currentTimeMillis()
143143

144-
var bitmap0 = coder.decode(
145-
byteArray = buffer,
146-
preferredColorConfig = PreferredColorConfig.RGBA_8888,
147-
)
144+
// var bitmap0 = coder.decode(
145+
// byteArray = buffer,
146+
// preferredColorConfig = PreferredColorConfig.RGBA_8888,
147+
// )
148148

149149
Log.d("AVIFFFF", "Decode time ${System.currentTimeMillis() - start}")
150150

151-
val encode = coder.encodeAvif(bitmap0, avifChromaSubsampling = AvifChromaSubsampling.YUV400)
151+
// val encode = coder.encodeAvif(bitmap0, avifChromaSubsampling = AvifChromaSubsampling.YUV400)
152152
//
153-
val round = coder.decode(
154-
byteArray = encode,
155-
preferredColorConfig = PreferredColorConfig.RGBA_8888,
156-
)
153+
// val cachedFile = File(cacheDir, "yuv400.avif")
154+
// FileOutputStream(cachedFile).use {
155+
// val bf = it.sink().buffer()
156+
// bf.write(encode)
157+
// bf.flush()
158+
// }
159+
//
160+
// val round = coder.decode(
161+
// byteArray = encode,
162+
// preferredColorConfig = PreferredColorConfig.RGBA_8888,
163+
// )
157164

158165
// bitmap0.setColorSpace(ColorSpace.getFromDataSpace(DataSpace.DATASPACE_BT2020_PQ)!!)
159166

@@ -166,15 +173,15 @@ class MainActivity : AppCompatActivity() {
166173
imageView.root.setImageBitmap(bitmap0)
167174
binding.scrollViewContainer.addView(imageView.root)
168175
}
169-
lifecycleScope.launch(Dispatchers.Main) {
170-
val imageView = BindingImageViewBinding.inflate(
171-
layoutInflater,
172-
binding.scrollViewContainer,
173-
false
174-
)
175-
imageView.root.setImageBitmap(round)
176-
binding.scrollViewContainer.addView(imageView.root)
177-
}
176+
// lifecycleScope.launch(Dispatchers.Main) {
177+
// val imageView = BindingImageViewBinding.inflate(
178+
// layoutInflater,
179+
// binding.scrollViewContainer,
180+
// false
181+
// )
182+
// imageView.root.setImageBitmap(round)
183+
// binding.scrollViewContainer.addView(imageView.root)
184+
// }
178185
}
179186
} catch (e: Exception) {
180187
Log.d("AVIF", e.toString())

avif-coder/src/main/cpp/AvifDecoderController.cpp

+8-8
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,13 @@ AvifImageFrame AvifDecoderController::getFrame(uint32_t frame,
137137
} else if (image->matrixCoefficients == AVIF_MATRIX_COEFFICIENTS_BT2020_NCL
138138
|| image->matrixCoefficients == AVIF_MATRIX_COEFFICIENTS_SMPTE2085) {
139139
matrix = YuvMatrix::Bt2020;
140+
} else if (image->matrixCoefficients == AVIF_MATRIX_COEFFICIENTS_IDENTITY) {
141+
matrix = YuvMatrix::Identity;
142+
if (type != AVIF_PIXEL_FORMAT_YUV444) {
143+
std::string
144+
str = "On identity matrix image layout must be 4:4:4 but it wasn't";
145+
throw std::runtime_error(str);
146+
}
140147
}
141148

142149
YuvRange range = YuvRange::Tv;
@@ -151,8 +158,6 @@ AvifImageFrame AvifDecoderController::getFrame(uint32_t frame,
151158
yuvType = YuvType::Yuv444;
152159
}
153160

154-
auto start = std::chrono::high_resolution_clock::now();
155-
156161
if (type == AVIF_PIXEL_FORMAT_YUV444 || type == AVIF_PIXEL_FORMAT_YUV422
157162
|| type == AVIF_PIXEL_FORMAT_YUV420) {
158163

@@ -285,11 +290,6 @@ AvifImageFrame AvifDecoderController::getFrame(uint32_t frame,
285290
throw std::runtime_error(str);
286291
}
287292

288-
auto end = std::chrono::high_resolution_clock::now();
289-
std::chrono::duration<double> duration = end - start;
290-
auto count = (float) (duration.count() * 1000.0);
291-
__android_log_print(ANDROID_LOG_ERROR, "AVIFCoder", "YUV Conversion time %f", count);
292-
293293
aligned_uint8_vector iccProfile(0);
294294
if (decoder->image->icc.data && decoder->image->icc.size) {
295295
iccProfile.resize(decoder->image->icc.size);
@@ -308,7 +308,7 @@ AvifImageFrame AvifDecoderController::getFrame(uint32_t frame,
308308
imageStore = RescaleSourceImage(avifUniqueImage.rgbImage.pixels, &stride,
309309
bitDepth, isImageRequires64Bit, &imageWidth,
310310
&imageHeight, scaledWidth, scaledHeight, javaScaleMode,
311-
scalingQuality);
311+
scalingQuality, imageUsesAlpha);
312312

313313
avifUniqueImage.clear();
314314

avif-coder/src/main/cpp/CMakeLists.txt

+3-3
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ add_library(libdav1d SHARED IMPORTED)
2828
add_library(libsharpyuv STATIC IMPORTED)
2929
add_library(aom SHARED IMPORTED)
3030
add_library(x265 SHARED IMPORTED)
31-
add_library(avifweaver SHARED IMPORTED)
31+
add_library(avifweaver STATIC IMPORTED)
3232

3333
set_target_properties(x265 PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/lib/${ANDROID_ABI}/libx265.so)
3434
set_target_properties(libheif PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/lib/${ANDROID_ABI}/libheif.so)
@@ -37,7 +37,7 @@ set_target_properties(libde265 PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/
3737
set_target_properties(libdav1d PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/lib/${ANDROID_ABI}/libdav1d.so)
3838
set_target_properties(libsharpyuv PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/lib/${ANDROID_ABI}/libsharpyuv.a)
3939
set_target_properties(aom PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/lib/${ANDROID_ABI}/libaom.so)
40-
set_target_properties(avifweaver PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/lib/${ANDROID_ABI}/libavifweaver.so)
40+
set_target_properties(avifweaver PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/lib/${ANDROID_ABI}/libavifweaver.a)
4141

4242
add_library(cpufeatures STATIC ${ANDROID_NDK}/sources/android/cpufeatures/cpu-features.c)
4343
target_include_directories(cpufeatures PUBLIC ${ANDROID_NDK}/sources/android/cpufeatures)
@@ -62,7 +62,7 @@ if (CMAKE_BUILD_TYPE STREQUAL "Release")
6262
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2 -ffp-mode=fast")
6363
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION ON)
6464
endif ()
65-
add_definitions(-DCMS_NO_REGISTER_KEYWORD -DSTB_IMAGE_RESIZE_IMPLEMENTATION)
65+
add_definitions(-DCMS_NO_REGISTER_KEYWORD)
6666

6767
set(CMAKE_ANDROID_API_MIN 24)
6868

avif-coder/src/main/cpp/HeifImageDecoder.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,8 @@ AvifImageFrame HeifImageDecoder::getFrame(std::vector<uint8_t> &srcBuffer,
116116
static_cast<int>(scaledWidth),
117117
static_cast<int>(scaledHeight),
118118
javaScaleMode,
119-
scalingQuality);
119+
scalingQuality,
120+
imageHasAlpha);
120121
if (!scaleResult) {
121122
throw std::runtime_error("Rescaling an image has failed");
122123
}

avif-coder/src/main/cpp/SizeScaler.cpp

+13-7
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ bool RescaleImage(aligned_uint8_vector &initialData,
4242
int *stride,
4343
bool useFloats,
4444
int *imageWidthPtr, int *imageHeightPtr,
45-
int scaledWidth, int scaledHeight, ScaleMode scaleMode, int scalingQuality) {
45+
int scaledWidth, int scaledHeight, ScaleMode scaleMode, int scalingQuality,
46+
bool isRgba) {
4647
int imageWidth = *imageWidthPtr;
4748
int imageHeight = *imageHeightPtr;
4849
if ((scaledHeight != 0 || scaledWidth != 0) && (scaledWidth != 0 && scaledHeight != 0)) {
@@ -105,7 +106,9 @@ bool RescaleImage(aligned_uint8_vector &initialData,
105106
scaledWidth * 4,
106107
scaledWidth,
107108
scaledHeight,
108-
scalingQuality);
109+
scalingQuality,
110+
isRgba
111+
);
109112
} else {
110113
outData.resize(scaledHeight * scaledWidth * 4 * sizeof(uint16_t));
111114
weave_scale_u16(reinterpret_cast<const uint16_t *>(imagePlane),
@@ -116,7 +119,8 @@ bool RescaleImage(aligned_uint8_vector &initialData,
116119
scaledWidth,
117120
scaledHeight,
118121
bitDepth,
119-
scalingQuality);
122+
scalingQuality,
123+
isRgba);
120124
}
121125

122126
auto data = outData.data();
@@ -230,7 +234,8 @@ aligned_uint8_vector RescaleSourceImage(uint8_t *sourceData,
230234
uint32_t scaledWidth,
231235
uint32_t scaledHeight,
232236
ScaleMode scaleMode,
233-
int scalingQuality) {
237+
int scalingQuality,
238+
bool isRgba) {
234239
uint32_t imageWidth = *imageWidthPtr;
235240
uint32_t imageHeight = *imageHeightPtr;
236241
if ((scaledHeight != 0 || scaledWidth != 0) && (scaledWidth != 0 && scaledHeight != 0)) {
@@ -284,7 +289,8 @@ aligned_uint8_vector RescaleSourceImage(uint8_t *sourceData,
284289
scaledWidth * 4,
285290
scaledWidth,
286291
scaledHeight,
287-
scalingQuality);
292+
scalingQuality,
293+
isRgba);
288294
} else {
289295
outData.resize(scaledHeight * scaledWidth * 4 * sizeof(uint16_t));
290296
weave_scale_u16(reinterpret_cast<const uint16_t *>(sourceData),
@@ -295,7 +301,8 @@ aligned_uint8_vector RescaleSourceImage(uint8_t *sourceData,
295301
scaledWidth,
296302
scaledHeight,
297303
bitDepth,
298-
scalingQuality);
304+
scalingQuality,
305+
isRgba);
299306
}
300307

301308
auto data = outData.data();
@@ -309,7 +316,6 @@ aligned_uint8_vector RescaleSourceImage(uint8_t *sourceData,
309316
*imageHeightPtr = imageHeight;
310317

311318
if (xTranslation > 0 || yTranslation > 0) {
312-
313319
int left = std::max(xTranslation, 0);
314320
int right = xTranslation + static_cast<int>(canvasWidth);
315321
int top = std::max(yTranslation, 0);

avif-coder/src/main/cpp/SizeScaler.h

+4-2
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@ bool RescaleImage(aligned_uint8_vector &initialData,
4646
int *stride,
4747
bool useFloats,
4848
int *imageWidthPtr, int *imageHeightPtr,
49-
int scaledWidth, int scaledHeight, ScaleMode scaleMode, int scalingQuality);
49+
int scaledWidth, int scaledHeight, ScaleMode scaleMode, int scalingQuality,
50+
bool isRgba);
5051

5152
aligned_uint8_vector RescaleSourceImage(uint8_t *data,
5253
uint32_t *stride,
@@ -57,7 +58,8 @@ aligned_uint8_vector RescaleSourceImage(uint8_t *data,
5758
uint32_t scaledWidth,
5859
uint32_t scaledHeight,
5960
ScaleMode scaleMode,
60-
int scalingQuality);
61+
int scalingQuality,
62+
bool isRgba);
6163

6264
std::pair<uint32_t, uint32_t>
6365
ResizeAspectFit(std::pair<uint32_t, uint32_t> sourceSize,

avif-coder/src/main/cpp/avifweaver.h

+6-3
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ enum class YuvMatrix {
88
Bt601,
99
Bt709,
1010
Bt2020,
11+
Identity,
1112
};
1213

1314
enum class YuvRange {
@@ -135,7 +136,8 @@ void weave_scale_u8(const uint8_t *src,
135136
uint32_t dst_stride,
136137
uint32_t new_width,
137138
uint32_t new_height,
138-
uint32_t method);
139+
uint32_t method,
140+
bool premultiply_alpha);
139141

140142
void weave_scale_u16(const uint16_t *src,
141143
uintptr_t src_stride,
@@ -145,6 +147,7 @@ void weave_scale_u16(const uint16_t *src,
145147
uint32_t new_width,
146148
uint32_t new_height,
147149
uintptr_t bit_depth,
148-
uint32_t method);
150+
uint32_t method,
151+
bool premultiply_alpha);
149152

150-
} // extern "C"
153+
} // extern "C"
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
1.63 MB
Binary file not shown.
-451 KB
Binary file not shown.
Binary file not shown.
Binary file not shown.

avifpixart/.cargo/config.toml

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
[target.aarch64-linux-android]
2-
ar = "/Users/radzivon/Library/Android/sdk/ndk/26.1.10909125/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-ar"
3-
linker = "/Users/radzivon/Library/Android/sdk/ndk/26.1.10909125/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android21-clang"
2+
ar = "/Users/radzivon/Library/Android/sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-ar"
3+
linker = "/Users/radzivon/Library/Android/sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android21-clang"
44

55
[target.x86_64-linux-android]
6-
ar = "/Users/radzivon/Library/Android/sdk/ndk/26.1.10909125/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-ar"
7-
linker = "/Users/radzivon/Library/Android/sdk/ndk/26.1.10909125/toolchains/llvm/prebuilt/darwin-x86_64/bin/x86_64-linux-android21-clang"
6+
ar = "/Users/radzivon/Library/Android/sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-ar"
7+
linker = "/Users/radzivon/Library/Android/sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/darwin-x86_64/bin/x86_64-linux-android21-clang"
88

99
[target.armv7-linux-androideabi]
10-
ar = "/Users/radzivon/Library/Android/sdk/ndk/26.1.10909125/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-ar"
11-
linker = "/Users/radzivon/Library/Android/sdk/ndk/26.1.10909125/toolchains/llvm/prebuilt/darwin-x86_64/bin/armv7a-linux-androideabi21-clang"
10+
ar = "/Users/radzivon/Library/Android/sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-ar"
11+
linker = "/Users/radzivon/Library/Android/sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/darwin-x86_64/bin/armv7a-linux-androideabi21-clang"
1212

1313
[target.i686-linux-android]
14-
ar = "/Users/radzivon/Library/Android/sdk/ndk/26.1.10909125/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-ar"
15-
linker = "/Users/radzivon/Library/Android/sdk/ndk/26.1.10909125/toolchains/llvm/prebuilt/darwin-x86_64/bin/i686-linux-android21-clang"
14+
ar = "/Users/radzivon/Library/Android/sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-ar"
15+
linker = "/Users/radzivon/Library/Android/sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/darwin-x86_64/bin/i686-linux-android21-clang"

0 commit comments

Comments
 (0)