Lines Matching +full:test +full:. +full:rgb
4 // you may not use this file except in compliance with the License.
7 // http://www.apache.org/licenses/LICENSE-2.0
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // limitations under the License.
19 use crabby_avif::reformat::rgb;
22 #[path = "./mod.rs"]
29 // From avifalphanoispetest.cc
30 #[test]
32 // See https://github.com/AOMediaCodec/libavif/pull/745. in alpha_no_ispe()
33 let mut decoder = get_decoder("alpha_noispe.avif"); in alpha_no_ispe()
34 // By default, non-strict files are refused. in alpha_no_ispe()
36 decoder.settings.strictness, in alpha_no_ispe()
39 let res = decoder.parse(); in alpha_no_ispe()
41 // Allow this kind of file specifically. in alpha_no_ispe()
42 decoder.settings.strictness = in alpha_no_ispe()
44 let res = decoder.parse(); in alpha_no_ispe()
45 assert!(res.is_ok()); in alpha_no_ispe()
46 let image = decoder.image().expect("image was none"); in alpha_no_ispe()
47 assert!(image.alpha_present); in alpha_no_ispe()
48 assert!(!image.image_sequence_track_present); in alpha_no_ispe()
52 let res = decoder.next_image(); in alpha_no_ispe()
53 assert!(res.is_ok()); in alpha_no_ispe()
54 let image = decoder.image().expect("image was none"); in alpha_no_ispe()
55 let alpha_plane = image.plane_data(Plane::A); in alpha_no_ispe()
56 assert!(alpha_plane.is_some()); in alpha_no_ispe()
57 assert!(alpha_plane.unwrap().row_bytes > 0); in alpha_no_ispe()
60 // From avifanimationtest.cc
61 #[test]
63 let mut decoder = get_decoder("colors-animated-8bpc.avif"); in animated_image()
64 let res = decoder.parse(); in animated_image()
65 assert!(res.is_ok()); in animated_image()
66 assert_eq!(decoder.compression_format(), CompressionFormat::Avif); in animated_image()
67 let image = decoder.image().expect("image was none"); in animated_image()
68 assert!(!image.alpha_present); in animated_image()
69 assert!(image.image_sequence_track_present); in animated_image()
70 assert_eq!(decoder.image_count(), 5); in animated_image()
71 assert_eq!(decoder.repetition_count(), RepetitionCount::Finite(0)); in animated_image()
72 for i in 0..5 { in animated_image()
73 assert_eq!(decoder.nearest_keyframe(i), 0); in animated_image()
78 for _ in 0..5 { in animated_image()
79 assert!(decoder.next_image().is_ok()); in animated_image()
83 // From avifanimationtest.cc
84 #[test]
86 let mut decoder = get_decoder("colors-animated-8bpc.avif"); in animated_image_with_source_set_to_primary_item()
87 decoder.settings.source = decoder::Source::PrimaryItem; in animated_image_with_source_set_to_primary_item()
88 let res = decoder.parse(); in animated_image_with_source_set_to_primary_item()
89 assert!(res.is_ok()); in animated_image_with_source_set_to_primary_item()
90 assert_eq!(decoder.compression_format(), CompressionFormat::Avif); in animated_image_with_source_set_to_primary_item()
91 let image = decoder.image().expect("image was none"); in animated_image_with_source_set_to_primary_item()
92 assert!(!image.alpha_present); in animated_image_with_source_set_to_primary_item()
93 // This will be reported as true irrespective of the preferred source. in animated_image_with_source_set_to_primary_item()
94 assert!(image.image_sequence_track_present); in animated_image_with_source_set_to_primary_item()
96 // preferred source. in animated_image_with_source_set_to_primary_item()
97 assert_eq!(decoder.image_count(), 1); in animated_image_with_source_set_to_primary_item()
98 assert_eq!(decoder.repetition_count(), RepetitionCount::Finite(0)); in animated_image_with_source_set_to_primary_item()
102 // Get the first (and only) image. in animated_image_with_source_set_to_primary_item()
103 assert!(decoder.next_image().is_ok()); in animated_image_with_source_set_to_primary_item()
105 // image in the preferred source. in animated_image_with_source_set_to_primary_item()
106 assert!(decoder.next_image().is_err()); in animated_image_with_source_set_to_primary_item()
109 // From avifanimationtest.cc
110 #[test]
112 let mut decoder = get_decoder("colors-animated-8bpc-alpha-exif-xmp.avif"); in animated_image_with_alpha_and_metadata()
113 let res = decoder.parse(); in animated_image_with_alpha_and_metadata()
114 assert!(res.is_ok()); in animated_image_with_alpha_and_metadata()
115 assert_eq!(decoder.compression_format(), CompressionFormat::Avif); in animated_image_with_alpha_and_metadata()
116 let image = decoder.image().expect("image was none"); in animated_image_with_alpha_and_metadata()
117 assert!(image.alpha_present); in animated_image_with_alpha_and_metadata()
118 assert!(image.image_sequence_track_present); in animated_image_with_alpha_and_metadata()
119 assert_eq!(decoder.image_count(), 5); in animated_image_with_alpha_and_metadata()
120 assert_eq!(decoder.repetition_count(), RepetitionCount::Infinite); in animated_image_with_alpha_and_metadata()
121 assert_eq!(image.exif.len(), 1126); in animated_image_with_alpha_and_metadata()
122 assert_eq!(image.xmp.len(), 3898); in animated_image_with_alpha_and_metadata()
126 for _ in 0..5 { in animated_image_with_alpha_and_metadata()
127 assert!(decoder.next_image().is_ok()); in animated_image_with_alpha_and_metadata()
131 // From avifkeyframetest.cc
132 #[test]
134 let mut decoder = get_decoder("colors-animated-12bpc-keyframes-0-2-3.avif"); in keyframes()
135 let res = decoder.parse(); in keyframes()
136 assert!(res.is_ok()); in keyframes()
137 assert_eq!(decoder.compression_format(), CompressionFormat::Avif); in keyframes()
138 let image = decoder.image().expect("image was none"); in keyframes()
139 assert!(image.image_sequence_track_present); in keyframes()
140 assert_eq!(decoder.image_count(), 5); in keyframes()
142 // First frame is always a keyframe. in keyframes()
143 assert!(decoder.is_keyframe(0)); in keyframes()
144 assert_eq!(decoder.nearest_keyframe(0), 0); in keyframes()
146 assert!(!decoder.is_keyframe(1)); in keyframes()
147 assert_eq!(decoder.nearest_keyframe(1), 0); in keyframes()
149 assert!(decoder.is_keyframe(2)); in keyframes()
150 assert_eq!(decoder.nearest_keyframe(2), 2); in keyframes()
152 assert!(decoder.is_keyframe(3)); in keyframes()
153 assert_eq!(decoder.nearest_keyframe(3), 3); in keyframes()
155 assert!(!decoder.is_keyframe(4)); in keyframes()
156 assert_eq!(decoder.nearest_keyframe(4), 3); in keyframes()
158 // Not an existing frame. in keyframes()
159 assert!(!decoder.is_keyframe(15)); in keyframes()
160 assert_eq!(decoder.nearest_keyframe(15), 3); in keyframes()
163 // From avifdecodetest.cc
164 #[test]
166 // Test case from https://github.com/AOMediaCodec/libavif/issues/1203. in color_grid_alpha_no_grid()
167 let mut decoder = get_decoder("color_grid_alpha_nogrid.avif"); in color_grid_alpha_no_grid()
168 let res = decoder.parse(); in color_grid_alpha_no_grid()
169 assert!(res.is_ok()); in color_grid_alpha_no_grid()
170 assert_eq!(decoder.compression_format(), CompressionFormat::Avif); in color_grid_alpha_no_grid()
171 let image = decoder.image().expect("image was none"); in color_grid_alpha_no_grid()
172 assert!(image.alpha_present); in color_grid_alpha_no_grid()
173 assert!(!image.image_sequence_track_present); in color_grid_alpha_no_grid()
177 let res = decoder.next_image(); in color_grid_alpha_no_grid()
178 assert!(res.is_ok()); in color_grid_alpha_no_grid()
179 let image = decoder.image().expect("image was none"); in color_grid_alpha_no_grid()
180 let alpha_plane = image.plane_data(Plane::A); in color_grid_alpha_no_grid()
181 assert!(alpha_plane.is_some()); in color_grid_alpha_no_grid()
182 assert!(alpha_plane.unwrap().row_bytes > 0); in color_grid_alpha_no_grid()
185 // From avifprogressivetest.cc
186 #[test_case::test_case("progressive_dimension_change.avif", 2, 256, 256; "progressive_dimension_cha…
187 #[test_case::test_case("progressive_layered_grid.avif", 2, 512, 256; "progressive_layered_grid")]
188 #[test_case::test_case("progressive_quality_change.avif", 2, 256, 256; "progressive_quality_change"…
189 #[test_case::test_case("progressive_same_layers.avif", 4, 256, 256; "progressive_same_layers")]
190 #[test_case::test_case("tiger_3layer_1res.avif", 3, 1216, 832; "tiger_3layer_1res")]
191 #[test_case::test_case("tiger_3layer_3res.avif", 3, 1216, 832; "tiger_3layer_3res")]
194 filename_with_prefix.push_str(filename); in progressive()
197 decoder.settings.allow_progressive = false; in progressive()
198 let res = decoder.parse(); in progressive()
199 assert!(res.is_ok()); in progressive()
200 assert_eq!(decoder.compression_format(), CompressionFormat::Avif); in progressive()
201 let image = decoder.image().expect("image was none"); in progressive()
203 image.progressive_state, in progressive()
207 decoder.settings.allow_progressive = true; in progressive()
208 let res = decoder.parse(); in progressive()
209 assert!(res.is_ok()); in progressive()
210 assert_eq!(decoder.compression_format(), CompressionFormat::Avif); in progressive()
211 let image = decoder.image().expect("image was none"); in progressive()
213 image.progressive_state, in progressive()
216 assert_eq!(image.width, width); in progressive()
217 assert_eq!(image.height, height); in progressive()
218 assert_eq!(decoder.image_count(), layer_count); in progressive()
222 for _i in 0..decoder.image_count() { in progressive()
223 let res = decoder.next_image(); in progressive()
224 assert!(res.is_ok()); in progressive()
225 let image = decoder.image().expect("image was none"); in progressive()
226 assert_eq!(image.width, width); in progressive()
227 assert_eq!(image.height, height); in progressive()
231 // From avifmetadatatest.cc
232 #[test]
234 // Test case from https://github.com/AOMediaCodec/libavif/issues/1086. in decoder_parse_icc_exif_xmp()
235 let mut decoder = get_decoder("paris_icc_exif_xmp.avif"); in decoder_parse_icc_exif_xmp()
237 decoder.settings.ignore_xmp = true; in decoder_parse_icc_exif_xmp()
238 decoder.settings.ignore_exif = true; in decoder_parse_icc_exif_xmp()
239 let res = decoder.parse(); in decoder_parse_icc_exif_xmp()
240 assert!(res.is_ok()); in decoder_parse_icc_exif_xmp()
241 assert_eq!(decoder.compression_format(), CompressionFormat::Avif); in decoder_parse_icc_exif_xmp()
242 let image = decoder.image().expect("image was none"); in decoder_parse_icc_exif_xmp()
244 assert_eq!(image.icc.len(), 596); in decoder_parse_icc_exif_xmp()
245 assert_eq!(image.icc[0], 0); in decoder_parse_icc_exif_xmp()
246 assert_eq!(image.icc[1], 0); in decoder_parse_icc_exif_xmp()
247 assert_eq!(image.icc[2], 2); in decoder_parse_icc_exif_xmp()
248 assert_eq!(image.icc[3], 84); in decoder_parse_icc_exif_xmp()
250 assert!(image.exif.is_empty()); in decoder_parse_icc_exif_xmp()
251 assert!(image.xmp.is_empty()); in decoder_parse_icc_exif_xmp()
253 decoder.settings.ignore_xmp = false; in decoder_parse_icc_exif_xmp()
254 decoder.settings.ignore_exif = false; in decoder_parse_icc_exif_xmp()
255 let res = decoder.parse(); in decoder_parse_icc_exif_xmp()
256 assert!(res.is_ok()); in decoder_parse_icc_exif_xmp()
257 assert_eq!(decoder.compression_format(), CompressionFormat::Avif); in decoder_parse_icc_exif_xmp()
258 let image = decoder.image().expect("image was none"); in decoder_parse_icc_exif_xmp()
260 assert_eq!(image.exif.len(), 1126); in decoder_parse_icc_exif_xmp()
261 assert_eq!(image.exif[0], 73); in decoder_parse_icc_exif_xmp()
262 assert_eq!(image.exif[1], 73); in decoder_parse_icc_exif_xmp()
263 assert_eq!(image.exif[2], 42); in decoder_parse_icc_exif_xmp()
264 assert_eq!(image.exif[3], 0); in decoder_parse_icc_exif_xmp()
266 assert_eq!(image.xmp.len(), 3898); in decoder_parse_icc_exif_xmp()
267 assert_eq!(image.xmp[0], 60); in decoder_parse_icc_exif_xmp()
268 assert_eq!(image.xmp[1], 63); in decoder_parse_icc_exif_xmp()
269 assert_eq!(image.xmp[2], 120); in decoder_parse_icc_exif_xmp()
270 assert_eq!(image.xmp[3], 112); in decoder_parse_icc_exif_xmp()
273 // From avifgainmaptest.cc
274 #[test]
276 let mut decoder = get_decoder("color_grid_gainmap_different_grid.avif"); in color_grid_gainmap_different_grid()
277 decoder.settings.image_content_to_decode = ImageContentType::All; in color_grid_gainmap_different_grid()
278 let res = decoder.parse(); in color_grid_gainmap_different_grid()
279 assert!(res.is_ok()); in color_grid_gainmap_different_grid()
280 assert_eq!(decoder.compression_format(), CompressionFormat::Avif); in color_grid_gainmap_different_grid()
281 let image = decoder.image().expect("image was none"); in color_grid_gainmap_different_grid()
282 // Color+alpha: 4x3 grid of 128x200 tiles. in color_grid_gainmap_different_grid()
283 assert_eq!(image.width, 128 * 4); in color_grid_gainmap_different_grid()
284 assert_eq!(image.height, 200 * 3); in color_grid_gainmap_different_grid()
285 assert_eq!(image.depth, 10); in color_grid_gainmap_different_grid()
286 // Gain map: 2x2 grid of 64x80 tiles. in color_grid_gainmap_different_grid()
287 assert!(decoder.gainmap_present()); in color_grid_gainmap_different_grid()
288 assert_eq!(decoder.gainmap().image.width, 64 * 2); in color_grid_gainmap_different_grid()
289 assert_eq!(decoder.gainmap().image.height, 80 * 2); in color_grid_gainmap_different_grid()
290 assert_eq!(decoder.gainmap().image.depth, 8); in color_grid_gainmap_different_grid()
291 assert_eq!(decoder.gainmap().metadata.base_hdr_headroom.0, 6); in color_grid_gainmap_different_grid()
292 assert_eq!(decoder.gainmap().metadata.base_hdr_headroom.1, 2); in color_grid_gainmap_different_grid()
296 let res = decoder.next_image(); in color_grid_gainmap_different_grid()
297 assert!(res.is_ok()); in color_grid_gainmap_different_grid()
298 assert!(decoder.gainmap().image.row_bytes[0] > 0); in color_grid_gainmap_different_grid()
301 // From avifgainmaptest.cc
302 #[test]
304 let mut decoder = get_decoder("color_grid_alpha_grid_gainmap_nogrid.avif"); in color_grid_alpha_grid_gainmap_nogrid()
305 decoder.settings.image_content_to_decode = ImageContentType::All; in color_grid_alpha_grid_gainmap_nogrid()
306 let res = decoder.parse(); in color_grid_alpha_grid_gainmap_nogrid()
307 assert!(res.is_ok()); in color_grid_alpha_grid_gainmap_nogrid()
308 assert_eq!(decoder.compression_format(), CompressionFormat::Avif); in color_grid_alpha_grid_gainmap_nogrid()
309 let image = decoder.image().expect("image was none"); in color_grid_alpha_grid_gainmap_nogrid()
310 // Color+alpha: 4x3 grid of 128x200 tiles. in color_grid_alpha_grid_gainmap_nogrid()
311 assert_eq!(image.width, 128 * 4); in color_grid_alpha_grid_gainmap_nogrid()
312 assert_eq!(image.height, 200 * 3); in color_grid_alpha_grid_gainmap_nogrid()
313 assert_eq!(image.depth, 10); in color_grid_alpha_grid_gainmap_nogrid()
314 // Gain map: single image of size 64x80. in color_grid_alpha_grid_gainmap_nogrid()
315 assert!(decoder.gainmap_present()); in color_grid_alpha_grid_gainmap_nogrid()
316 assert_eq!(decoder.gainmap().image.width, 64); in color_grid_alpha_grid_gainmap_nogrid()
317 assert_eq!(decoder.gainmap().image.height, 80); in color_grid_alpha_grid_gainmap_nogrid()
318 assert_eq!(decoder.gainmap().image.depth, 8); in color_grid_alpha_grid_gainmap_nogrid()
319 assert_eq!(decoder.gainmap().metadata.base_hdr_headroom.0, 6); in color_grid_alpha_grid_gainmap_nogrid()
320 assert_eq!(decoder.gainmap().metadata.base_hdr_headroom.1, 2); in color_grid_alpha_grid_gainmap_nogrid()
324 let res = decoder.next_image(); in color_grid_alpha_grid_gainmap_nogrid()
325 assert!(res.is_ok()); in color_grid_alpha_grid_gainmap_nogrid()
326 assert!(decoder.gainmap().image.row_bytes[0] > 0); in color_grid_alpha_grid_gainmap_nogrid()
329 // From avifgainmaptest.cc
330 #[test]
332 let mut decoder = get_decoder("color_nogrid_alpha_nogrid_gainmap_grid.avif"); in color_nogrid_alpha_nogrid_gainmap_grid()
333 decoder.settings.image_content_to_decode = ImageContentType::All; in color_nogrid_alpha_nogrid_gainmap_grid()
334 let res = decoder.parse(); in color_nogrid_alpha_nogrid_gainmap_grid()
335 assert!(res.is_ok()); in color_nogrid_alpha_nogrid_gainmap_grid()
336 assert_eq!(decoder.compression_format(), CompressionFormat::Avif); in color_nogrid_alpha_nogrid_gainmap_grid()
337 let image = decoder.image().expect("image was none"); in color_nogrid_alpha_nogrid_gainmap_grid()
338 // Color+alpha: single image of size 128x200. in color_nogrid_alpha_nogrid_gainmap_grid()
339 assert_eq!(image.width, 128); in color_nogrid_alpha_nogrid_gainmap_grid()
340 assert_eq!(image.height, 200); in color_nogrid_alpha_nogrid_gainmap_grid()
341 assert_eq!(image.depth, 10); in color_nogrid_alpha_nogrid_gainmap_grid()
342 // Gain map: 2x2 grid of 64x80 tiles. in color_nogrid_alpha_nogrid_gainmap_grid()
343 assert!(decoder.gainmap_present()); in color_nogrid_alpha_nogrid_gainmap_grid()
344 assert_eq!(decoder.gainmap().image.width, 64 * 2); in color_nogrid_alpha_nogrid_gainmap_grid()
345 assert_eq!(decoder.gainmap().image.height, 80 * 2); in color_nogrid_alpha_nogrid_gainmap_grid()
346 assert_eq!(decoder.gainmap().image.depth, 8); in color_nogrid_alpha_nogrid_gainmap_grid()
347 assert_eq!(decoder.gainmap().metadata.base_hdr_headroom.0, 6); in color_nogrid_alpha_nogrid_gainmap_grid()
348 assert_eq!(decoder.gainmap().metadata.base_hdr_headroom.1, 2); in color_nogrid_alpha_nogrid_gainmap_grid()
352 let res = decoder.next_image(); in color_nogrid_alpha_nogrid_gainmap_grid()
353 assert!(res.is_ok()); in color_nogrid_alpha_nogrid_gainmap_grid()
354 assert!(decoder.gainmap().image.row_bytes[0] > 0); in color_nogrid_alpha_nogrid_gainmap_grid()
357 // From avifgainmaptest.cc
358 #[test]
360 let mut decoder = get_decoder("gainmap_oriented.avif"); in gainmap_oriented()
361 decoder.settings.image_content_to_decode = ImageContentType::All; in gainmap_oriented()
362 let res = decoder.parse(); in gainmap_oriented()
363 assert!(res.is_ok()); in gainmap_oriented()
364 assert_eq!(decoder.compression_format(), CompressionFormat::Avif); in gainmap_oriented()
365 let image = decoder.image().expect("image was none"); in gainmap_oriented()
366 assert_eq!(image.irot_angle, Some(1)); in gainmap_oriented()
367 assert_eq!(image.imir_axis, Some(0)); in gainmap_oriented()
368 assert!(decoder.gainmap_present()); in gainmap_oriented()
369 assert_eq!(decoder.gainmap().image.irot_angle, None); in gainmap_oriented()
370 assert_eq!(decoder.gainmap().image.imir_axis, None); in gainmap_oriented()
373 // The two test files should produce the same results:
375 // 'minimum_version' field, but the behavior of these two files is the same.
376 // From avifgainmaptest.cc
377 #[test_case::test_case("unsupported_gainmap_version.avif")]
378 #[test_case::test_case("unsupported_gainmap_minimum_version.avif")]
380 // Parse with various settings. in decode_unsupported_version()
382 let res = decoder.parse(); in decode_unsupported_version()
383 assert!(res.is_ok()); in decode_unsupported_version()
384 assert_eq!(decoder.compression_format(), CompressionFormat::Avif); in decode_unsupported_version()
385 // Gain map marked as not present because the metadata is not supported. in decode_unsupported_version()
386 assert!(!decoder.gainmap_present()); in decode_unsupported_version()
387 assert_eq!(decoder.gainmap().image.width, 0); in decode_unsupported_version()
388 assert_eq!(decoder.gainmap().metadata.base_hdr_headroom.0, 0); in decode_unsupported_version()
389 assert_eq!(decoder.gainmap().metadata.alternate_hdr_headroom.0, 0); in decode_unsupported_version()
392 decoder.settings.image_content_to_decode = ImageContentType::All; in decode_unsupported_version()
393 let res = decoder.parse(); in decode_unsupported_version()
394 assert!(res.is_ok()); in decode_unsupported_version()
395 assert_eq!(decoder.compression_format(), CompressionFormat::Avif); in decode_unsupported_version()
396 // Gainmap not found: its metadata is not supported. in decode_unsupported_version()
397 assert!(!decoder.gainmap_present()); in decode_unsupported_version()
398 assert_eq!(decoder.gainmap().image.width, 0); in decode_unsupported_version()
399 assert_eq!(decoder.gainmap().metadata.base_hdr_headroom.0, 0); in decode_unsupported_version()
400 assert_eq!(decoder.gainmap().metadata.alternate_hdr_headroom.0, 0); in decode_unsupported_version()
403 // From avifgainmaptest.cc
404 #[test]
406 let mut decoder = get_decoder("unsupported_gainmap_writer_version_with_extra_bytes.avif"); in decode_unsupported_writer_version_with_extra_bytes()
407 let res = decoder.parse(); in decode_unsupported_writer_version_with_extra_bytes()
408 assert!(res.is_ok()); in decode_unsupported_writer_version_with_extra_bytes()
409 assert_eq!(decoder.compression_format(), CompressionFormat::Avif); in decode_unsupported_writer_version_with_extra_bytes()
412 // that supported. in decode_unsupported_writer_version_with_extra_bytes()
413 assert!(decoder.gainmap_present()); in decode_unsupported_writer_version_with_extra_bytes()
414 assert_eq!(decoder.gainmap().metadata.base_hdr_headroom.0, 6); in decode_unsupported_writer_version_with_extra_bytes()
415 assert_eq!(decoder.gainmap().metadata.base_hdr_headroom.1, 2); in decode_unsupported_writer_version_with_extra_bytes()
418 // From avifgainmaptest.cc
419 #[test]
421 let mut decoder = get_decoder("supported_gainmap_writer_version_with_extra_bytes.avif"); in decode_supported_writer_version_with_extra_bytes()
422 let res = decoder.parse(); in decode_supported_writer_version_with_extra_bytes()
424 // that shouldn't be there. in decode_supported_writer_version_with_extra_bytes()
428 // From avifgainmaptest.cc
429 #[test]
431 let mut decoder = get_decoder("seine_sdr_gainmap_srgb.avif"); in decode_ignore_gain_map_but_read_metadata()
433 let res = decoder.parse(); in decode_ignore_gain_map_but_read_metadata()
434 assert!(res.is_ok()); in decode_ignore_gain_map_but_read_metadata()
435 assert_eq!(decoder.compression_format(), CompressionFormat::Avif); in decode_ignore_gain_map_but_read_metadata()
436 decoder.image().expect("image was none"); in decode_ignore_gain_map_but_read_metadata()
437 // Gain map not decoded. in decode_ignore_gain_map_but_read_metadata()
438 assert!(decoder.gainmap_present()); in decode_ignore_gain_map_but_read_metadata()
439 // ... but not decoded because enableDecodingGainMap is false by default. in decode_ignore_gain_map_but_read_metadata()
440 assert_eq!(decoder.gainmap().image.width, 0); in decode_ignore_gain_map_but_read_metadata()
441 assert_eq!(decoder.gainmap().image.row_bytes[0], 0); in decode_ignore_gain_map_but_read_metadata()
442 // Check that the gain map metadata WAS populated. in decode_ignore_gain_map_but_read_metadata()
443 assert_eq!(decoder.gainmap().metadata.alternate_hdr_headroom.0, 13); in decode_ignore_gain_map_but_read_metadata()
444 assert_eq!(decoder.gainmap().metadata.alternate_hdr_headroom.1, 10); in decode_ignore_gain_map_but_read_metadata()
447 // From avifgainmaptest.cc
448 #[test]
450 let mut decoder = get_decoder("seine_sdr_gainmap_srgb.avif"); in decode_ignore_color_and_alpha()
451 decoder.settings.image_content_to_decode = ImageContentType::GainMap; in decode_ignore_color_and_alpha()
453 let res = decoder.parse(); in decode_ignore_color_and_alpha()
454 assert!(res.is_ok()); in decode_ignore_color_and_alpha()
455 assert_eq!(decoder.compression_format(), CompressionFormat::Avif); in decode_ignore_color_and_alpha()
457 let image = decoder.image().expect("image was none"); in decode_ignore_color_and_alpha()
458 // Main image metadata is available. in decode_ignore_color_and_alpha()
459 assert_eq!(image.width, 400); in decode_ignore_color_and_alpha()
460 // The gain map metadata is available. in decode_ignore_color_and_alpha()
461 assert!(decoder.gainmap_present()); in decode_ignore_color_and_alpha()
462 assert_eq!(decoder.gainmap().image.width, 400); in decode_ignore_color_and_alpha()
463 assert_eq!(decoder.gainmap().metadata.alternate_hdr_headroom.0, 13); in decode_ignore_color_and_alpha()
468 let res = decoder.next_image(); in decode_ignore_color_and_alpha()
469 let image = decoder.image().expect("image was none"); in decode_ignore_color_and_alpha()
470 assert!(res.is_ok()); in decode_ignore_color_and_alpha()
471 // Main image pixels are not available. in decode_ignore_color_and_alpha()
472 assert_eq!(image.row_bytes[0], 0); in decode_ignore_color_and_alpha()
473 // Gain map pixels are available. in decode_ignore_color_and_alpha()
474 assert!(decoder.gainmap().image.row_bytes[0] > 0); in decode_ignore_color_and_alpha()
477 // From avifgainmaptest.cc
478 #[test_case::test_case("paris_icc_exif_xmp.avif")]
479 #[test_case::test_case("sofa_grid1x5_420.avif")]
480 #[test_case::test_case("color_grid_alpha_nogrid.avif")]
481 #[test_case::test_case("seine_sdr_gainmap_srgb.avif")]
484 // Ignore both the main image and the gain map. in decode_ignore_all()
485 decoder.settings.image_content_to_decode = ImageContentType::None; in decode_ignore_all()
488 let res = decoder.parse(); in decode_ignore_all()
489 assert!(res.is_ok()); in decode_ignore_all()
490 assert_eq!(decoder.compression_format(), CompressionFormat::Avif); in decode_ignore_all()
491 let image = decoder.image().expect("image was none"); in decode_ignore_all()
492 // Main image metadata is available. in decode_ignore_all()
493 assert!(image.width > 0); in decode_ignore_all()
495 // ignoreColorAndAlpha and enableDecodingGainMap are set. in decode_ignore_all()
496 let res = decoder.next_image(); in decode_ignore_all()
497 assert!(res.is_err()); in decode_ignore_all()
500 // From avifcllitest.cc
501 #[test_case::test_case("clli_0_0.avif", 0, 0; "clli_0_0")]
502 #[test_case::test_case("clli_0_1.avif", 0, 1; "clli_0_1")]
503 #[test_case::test_case("clli_0_65535.avif", 0, 65535; "clli_0_65535")]
504 #[test_case::test_case("clli_1_0.avif", 1, 0; "clli_1_0")]
505 #[test_case::test_case("clli_1_1.avif", 1, 1; "clli_1_1")]
506 #[test_case::test_case("clli_1_65535.avif", 1, 65535; "clli_1_65535")]
507 #[test_case::test_case("clli_65535_0.avif", 65535, 0; "clli_65535_0")]
508 #[test_case::test_case("clli_65535_1.avif", 65535, 1; "clli_65535_1")]
509 #[test_case::test_case("clli_65535_65535.avif", 65535, 65535; "clli_65535_65535")]
512 filename_with_prefix.push_str(filename); in clli()
514 let res = decoder.parse(); in clli()
515 assert!(res.is_ok()); in clli()
516 assert_eq!(decoder.compression_format(), CompressionFormat::Avif); in clli()
517 let image = decoder.image().expect("image was none"); in clli()
519 assert!(image.clli.is_none()); in clli()
521 assert!(image.clli.is_some()); in clli()
522 let clli = image.clli.as_ref().unwrap(); in clli()
523 assert_eq!(clli.max_cll, max_cll); in clli()
524 assert_eq!(clli.max_pall, max_pall); in clli()
528 #[test]
531 std::fs::read(get_test_file("colors-animated-8bpc.avif")).expect("Unable to read file"); in raw_io()
535 .set_io_raw(data.as_ptr(), data.len()) in raw_io()
536 .expect("Failed to set IO") in raw_io()
538 assert!(decoder.parse().is_ok()); in raw_io()
539 assert_eq!(decoder.compression_format(), CompressionFormat::Avif); in raw_io()
540 assert_eq!(decoder.image_count(), 5); in raw_io()
544 for _ in 0..5 { in raw_io()
545 assert!(decoder.next_image().is_ok()); in raw_io()
556 let available_size = self.available_size_rc.borrow(); in read()
557 let start = usize::try_from(offset).unwrap(); in read()
559 if start > self.data.len() || end > self.data.len() { in read()
563 if ssize > self.data.len() - start { in read()
564 ssize = self.data.len() - start; in read()
570 Ok(&self.data[start..end]) in read()
574 self.data.len() as u64 in size_hint()
582 #[test]
585 std::fs::read(get_test_file("colors-animated-8bpc.avif")).expect("Unable to read file"); in custom_io()
587 let available_size_rc = Rc::new(RefCell::new(data.len())); in custom_io()
589 available_size_rc: available_size_rc.clone(), in custom_io()
592 decoder.set_io(io); in custom_io()
593 assert!(decoder.parse().is_ok()); in custom_io()
594 assert_eq!(decoder.compression_format(), CompressionFormat::Avif); in custom_io()
595 assert_eq!(decoder.image_count(), 5); in custom_io()
599 for _ in 0..5 { in custom_io()
600 assert!(decoder.next_image().is_ok()); in custom_io()
616 for (index, offset) in grid_cell_offsets.iter().enumerate().rev() { in expected_min_decoded_row_count()
622 if cell_index.is_none() { in expected_min_decoded_row_count()
625 let cell_index = cell_index.unwrap() as u32; in expected_min_decoded_row_count()
632 #[test]
670 #[test]
672 // Grid item offsets for sofa_grid1x5_420.avif: in incremental_decode()
673 // Each line is "$extent_offset + $extent_length". in incremental_decode()
682 let data = std::fs::read(get_test_file("sofa_grid1x5_420.avif")).expect("Unable to read file"); in incremental_decode()
683 let len = data.len(); in incremental_decode()
686 decoder.settings.allow_incremental = true; in incremental_decode()
688 available_size_rc: available_size_rc.clone(), in incremental_decode()
691 decoder.set_io(io); in incremental_decode()
694 // Parsing is not incremental. in incremental_decode()
695 let mut parse_result = decoder.parse(); in incremental_decode()
696 while parse_result.is_err() in incremental_decode()
697 && matches!(parse_result.as_ref().err().unwrap(), AvifError::WaitingOnIo) in incremental_decode()
700 let mut available_size = available_size_rc.borrow_mut(); in incremental_decode()
702 println!("parse returned waiting on io after full file."); in incremental_decode()
707 parse_result = decoder.parse(); in incremental_decode()
709 assert!(parse_result.is_ok()); in incremental_decode()
714 // Decoding is incremental. in incremental_decode()
716 let mut decode_result = decoder.next_image(); in incremental_decode()
717 while decode_result.is_err() in incremental_decode()
719 decode_result.as_ref().err().unwrap(), in incremental_decode()
724 let mut available_size = available_size_rc.borrow_mut(); in incremental_decode()
726 println!("next_image returned waiting on io after full file."); in incremental_decode()
729 let decoded_row_count = decoder.decoded_row_count(); in incremental_decode()
732 decoder.image().unwrap().height, in incremental_decode()
743 decode_result = decoder.next_image(); in incremental_decode()
745 assert!(decode_result.is_ok()); in incremental_decode()
746 assert_eq!(decoder.decoded_row_count(), decoder.image().unwrap().height); in incremental_decode()
748 // TODO: check if incremental and non incremental produces same output. in incremental_decode()
751 #[test]
753 let mut decoder = get_decoder("colors-animated-8bpc.avif"); in nth_image()
754 let res = decoder.parse(); in nth_image()
755 assert!(res.is_ok()); in nth_image()
756 assert_eq!(decoder.compression_format(), CompressionFormat::Avif); in nth_image()
757 assert_eq!(decoder.image_count(), 5); in nth_image()
761 assert!(decoder.nth_image(3).is_ok()); in nth_image()
762 assert!(decoder.next_image().is_ok()); in nth_image()
763 assert!(decoder.next_image().is_err()); in nth_image()
764 assert!(decoder.nth_image(1).is_ok()); in nth_image()
765 assert!(decoder.nth_image(4).is_ok()); in nth_image()
766 assert!(decoder.nth_image(50).is_err()); in nth_image()
769 #[test]
771 let mut decoder = get_decoder("invalid_color10x10_alpha5x5.avif"); in color_and_alpha_dimensions_do_not_match()
772 // Parsing should succeed. in color_and_alpha_dimensions_do_not_match()
773 let res = decoder.parse(); in color_and_alpha_dimensions_do_not_match()
774 assert!(res.is_ok()); in color_and_alpha_dimensions_do_not_match()
775 assert_eq!(decoder.compression_format(), CompressionFormat::Avif); in color_and_alpha_dimensions_do_not_match()
776 let image = decoder.image().expect("image was none"); in color_and_alpha_dimensions_do_not_match()
777 assert_eq!(image.width, 10); in color_and_alpha_dimensions_do_not_match()
778 assert_eq!(image.height, 10); in color_and_alpha_dimensions_do_not_match()
782 // Decoding should fail. in color_and_alpha_dimensions_do_not_match()
783 let res = decoder.next_image(); in color_and_alpha_dimensions_do_not_match()
784 assert!(res.is_err()); in color_and_alpha_dimensions_do_not_match()
787 #[test]
789 let mut decoder = get_decoder("alpha.avif"); in rgb_conversion_alpha_premultiply()
790 let res = decoder.parse(); in rgb_conversion_alpha_premultiply()
791 assert!(res.is_ok()); in rgb_conversion_alpha_premultiply()
792 assert_eq!(decoder.compression_format(), CompressionFormat::Avif); in rgb_conversion_alpha_premultiply()
796 let res = decoder.next_image(); in rgb_conversion_alpha_premultiply()
797 assert!(res.is_ok()); in rgb_conversion_alpha_premultiply()
798 let image = decoder.image().expect("image was none"); in rgb_conversion_alpha_premultiply()
799 let mut rgb = rgb::Image::create_from_yuv(image); in rgb_conversion_alpha_premultiply() localVariable
800 rgb.premultiply_alpha = true; in rgb_conversion_alpha_premultiply()
801 rgb.allocate()?; in rgb_conversion_alpha_premultiply()
802 assert!(rgb.convert_from_yuv(image).is_ok()); in rgb_conversion_alpha_premultiply()
806 #[test]
808 let mut decoder = get_decoder("white_1x1.avif"); in white_1x1()
809 assert_eq!(decoder.parse(), Ok(())); in white_1x1()
810 assert_eq!(decoder.compression_format(), CompressionFormat::Avif); in white_1x1()
814 assert_eq!(decoder.next_image(), Ok(())); in white_1x1()
816 let image = decoder.image().expect("image was none"); in white_1x1()
817 let mut rgb = rgb::Image::create_from_yuv(image); in white_1x1() localVariable
818 rgb.allocate()?; in white_1x1()
819 assert!(rgb.convert_from_yuv(image).is_ok()); in white_1x1()
820 assert_eq!(rgb.width * rgb.height, 1); in white_1x1()
821 let format = rgb.format; in white_1x1()
822 for i in [format.r_offset(), format.g_offset(), format.b_offset()] { in white_1x1()
823 assert_eq!(rgb.row(0)?[i], 253); // Compressed with loss, not pure white. in white_1x1()
825 if rgb.has_alpha() { in white_1x1()
826 assert_eq!(rgb.row(0)?[rgb.format.alpha_offset()], 255); in white_1x1()
831 #[test]
833 // Edit the file to simulate an 'mdat' box with size 0 (meaning it ends at EOF). in white_1x1_mdat_size0()
834 let mut file_bytes = std::fs::read(get_test_file("white_1x1.avif")).unwrap(); in white_1x1_mdat_size0()
836 let mdat_size_pos = file_bytes.windows(4).position(|w| w == mdat).unwrap() - 4; in white_1x1_mdat_size0()
840 decoder.set_io_vec(file_bytes); in white_1x1_mdat_size0()
841 assert_eq!(decoder.parse(), Ok(())); in white_1x1_mdat_size0()
842 assert_eq!(decoder.compression_format(), CompressionFormat::Avif); in white_1x1_mdat_size0()
846 #[test]
848 // Edit the file to simulate a 'meta' box with size 0 (invalid). in white_1x1_meta_size0()
849 let mut file_bytes = std::fs::read(get_test_file("white_1x1.avif")).unwrap(); in white_1x1_meta_size0()
851 let meta_size_pos = file_bytes.windows(4).position(|w| w == meta).unwrap() - 4; in white_1x1_meta_size0()
855 decoder.set_io_vec(file_bytes); in white_1x1_meta_size0()
857 // This should fail because the meta box contains the mdat box. in white_1x1_meta_size0()
858 // However, the section 8.11.3.1 of ISO/IEC 14496-12 does not explicitly require the coded image in white_1x1_meta_size0()
859 // item extents to be read from the MediaDataBox if the construction_method is 0. in white_1x1_meta_size0()
860 // Maybe another section or specification enforces that. in white_1x1_meta_size0()
861 assert_eq!(decoder.parse(), Ok(())); in white_1x1_meta_size0()
862 assert_eq!(decoder.compression_format(), CompressionFormat::Avif); in white_1x1_meta_size0()
866 assert_eq!(decoder.next_image(), Ok(())); in white_1x1_meta_size0()
870 #[test]
872 // Edit the file to simulate a 'ftyp' box with size 0 (invalid). in white_1x1_ftyp_size0()
873 let mut file_bytes = std::fs::read(get_test_file("white_1x1.avif")).unwrap(); in white_1x1_ftyp_size0()
877 decoder.set_io_vec(file_bytes); in white_1x1_ftyp_size0()
879 decoder.parse(), in white_1x1_ftyp_size0()
885 #[test]
887 let mut decoder = get_decoder("sofa_grid1x5_420_dimg_repeat.avif"); in dimg_repetition()
889 decoder.parse(), in dimg_repetition()
891 "multiple dimg references for item ID 1".into() in dimg_repetition()
896 #[test]
898 let mut decoder = get_decoder("color_grid_alpha_grid_tile_shared_in_dimg.avif"); in dimg_shared()
899 assert_eq!(decoder.parse(), Err(AvifError::NotImplemented)); in dimg_shared()
902 #[test]
907 let mut decoder1 = get_decoder("sofa_grid1x5_420.avif"); in dimg_ordering()
908 let res = decoder1.parse(); in dimg_ordering()
909 assert!(res.is_ok()); in dimg_ordering()
910 let res = decoder1.next_image(); in dimg_ordering()
911 assert!(res.is_ok()); in dimg_ordering()
912 let mut decoder2 = get_decoder("sofa_grid1x5_420_random_dimg_order.avif"); in dimg_ordering()
913 let res = decoder2.parse(); in dimg_ordering()
914 assert!(res.is_ok()); in dimg_ordering()
915 let res = decoder2.next_image(); in dimg_ordering()
916 assert!(res.is_ok()); in dimg_ordering()
917 let image1 = decoder1.image().expect("image1 was none"); in dimg_ordering()
918 let image2 = decoder2.image().expect("image2 was none"); in dimg_ordering()
919 // Ensure that the pixels in image1 and image2 are not the same. in dimg_ordering()
920 let row1 = image1.row(Plane::Y, 0).expect("row1 was none"); in dimg_ordering()
921 let row2 = image2.row(Plane::Y, 0).expect("row2 was none"); in dimg_ordering()
925 #[test]
927 let file_data = std::fs::read(get_test_file("blue.heic")).expect("could not read file"); in heic_peek()
934 #[test]
936 let mut decoder = get_decoder("blue.heic"); in heic_parsing()
937 let res = decoder.parse(); in heic_parsing()
939 assert!(res.is_ok()); in heic_parsing()
940 let image = decoder.image().expect("image was none"); in heic_parsing()
941 assert_eq!(image.width, 320); in heic_parsing()
942 assert_eq!(image.height, 240); in heic_parsing()
943 assert_eq!(decoder.compression_format(), CompressionFormat::Heic); in heic_parsing()
945 // Decoding is available only via android_mediacodec. in heic_parsing()
947 decoder.next_image(), in heic_parsing()
952 assert!(res.is_err()); in heic_parsing()