Title: [274728] trunk
Revision
274728
Author
[email protected]
Date
2021-03-19 11:02:49 -0700 (Fri, 19 Mar 2021)

Log Message

Animated AVIF support
https://bugs.webkit.org/show_bug.cgi?id=222804
<rdar://problem/75362181>

Reviewed by Philippe Normand.

This change implements animation of the avif sequence. The decoding approach
is similar to ones for other image formats, i.e., decoding frames in BGRA pixels
then bit-copying them into ScalableImageDecoderFrame. The decoded frames are cached
for future use. The repetition is missing in this change. It will be addressed
in separate patches.

The added avif animation test compares the last frame of each avifs and a static
avif image. The embeded avifs images are originated from corresponding webp images
for animated-webp.html, and encoded with timescale 100 (i.e., the duration of each frame
is 0.01s). The total duration and the track duration are same so the added avifs samples
are supposed to be played one time.

Source/WebCore:

Test: fast/images/animated-avif.html

* platform/image-decoders/avif/AVIFImageDecoder.cpp:
(WebCore::AVIFImageDecoder::repetitionCount const):
(WebCore::AVIFImageDecoder::findFirstRequiredFrameToDecode):
(WebCore::AVIFImageDecoder::frameBufferAtIndex):
(WebCore::AVIFImageDecoder::isComplete):
(WebCore::AVIFImageDecoder::tryDecodeSize):
(WebCore::AVIFImageDecoder::decode):
* platform/image-decoders/avif/AVIFImageDecoder.h:
* platform/image-decoders/avif/AVIFImageReader.cpp:
(WebCore::AVIFImageReader::decodeFrame):
(WebCore::AVIFImageReader::imageCount const):
(WebCore::AVIFImageReader::~AVIFImageReader): Deleted.
* platform/image-decoders/avif/AVIFImageReader.h:

LayoutTests:

* TestExpectations:
* fast/images/animated-avif-expected.html: Added.
* fast/images/animated-avif.html: Added.
* fast/images/resources/avifs00-ref.avif: Added.
* fast/images/resources/avifs00.avifs: Added.
* fast/images/resources/avifs01-ref.avif: Added.
* fast/images/resources/avifs01.avifs: Added.
* fast/images/resources/avifs02-ref.avif: Added.
* fast/images/resources/avifs02.avifs: Added.
* platform/gtk/TestExpectations:

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (274727 => 274728)


--- trunk/LayoutTests/ChangeLog	2021-03-19 17:48:47 UTC (rev 274727)
+++ trunk/LayoutTests/ChangeLog	2021-03-19 18:02:49 UTC (rev 274728)
@@ -1,3 +1,34 @@
+2021-03-19  ChangSeok Oh  <[email protected]>
+
+        Animated AVIF support
+        https://bugs.webkit.org/show_bug.cgi?id=222804
+        <rdar://problem/75362181>
+
+        Reviewed by Philippe Normand.
+
+        This change implements animation of the avif sequence. The decoding approach
+        is similar to ones for other image formats, i.e., decoding frames in BGRA pixels
+        then bit-copying them into ScalableImageDecoderFrame. The decoded frames are cached
+        for future use. The repetition is missing in this change. It will be addressed
+        in separate patches.
+
+        The added avif animation test compares the last frame of each avifs and a static
+        avif image. The embeded avifs images are originated from corresponding webp images
+        for animated-webp.html, and encoded with timescale 100 (i.e., the duration of each frame
+        is 0.01s). The total duration and the track duration are same so the added avifs samples
+        are supposed to be played one time.
+
+        * TestExpectations:
+        * fast/images/animated-avif-expected.html: Added.
+        * fast/images/animated-avif.html: Added.
+        * fast/images/resources/avifs00-ref.avif: Added.
+        * fast/images/resources/avifs00.avifs: Added.
+        * fast/images/resources/avifs01-ref.avif: Added.
+        * fast/images/resources/avifs01.avifs: Added.
+        * fast/images/resources/avifs02-ref.avif: Added.
+        * fast/images/resources/avifs02.avifs: Added.
+        * platform/gtk/TestExpectations:
+
 2021-03-19  Martin Robinson  <[email protected]>
 
         scroll-snap-stop: always not respected during momentum scrolling

Modified: trunk/LayoutTests/TestExpectations (274727 => 274728)


--- trunk/LayoutTests/TestExpectations	2021-03-19 17:48:47 UTC (rev 274727)
+++ trunk/LayoutTests/TestExpectations	2021-03-19 18:02:49 UTC (rev 274728)
@@ -121,6 +121,7 @@
 # These tests don't have to be platform-specific, but they are only implemented on GTK now.
 fast/images/avif-image-decoding.html [ Skip ]
 fast/images/avif-as-image.html [ Skip ]
+fast/images/animated-avif.html [ Skip ]
 
 # Only applicable on platforms with dark mode support
 css-dark-mode [ Skip ]

Added: trunk/LayoutTests/fast/images/animated-avif-expected.html (0 => 274728)


--- trunk/LayoutTests/fast/images/animated-avif-expected.html	                        (rev 0)
+++ trunk/LayoutTests/fast/images/animated-avif-expected.html	2021-03-19 18:02:49 UTC (rev 274728)
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>AVIF animation reftest: when animation ends, compare its last frame against the reference static avif image.</title>
+<style>
+img { margin: 1px; }
+</style>
+</head>
+<body style="margin: 1px">
+<img src="" src="" src=""
+</body>
+</html>

Added: trunk/LayoutTests/fast/images/animated-avif.html (0 => 274728)


--- trunk/LayoutTests/fast/images/animated-avif.html	                        (rev 0)
+++ trunk/LayoutTests/fast/images/animated-avif.html	2021-03-19 18:02:49 UTC (rev 274728)
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>AVIF animation reftest: when animation ends, compare its last frame against the reference static avif image.</title>
+<script>
+    if (window.testRunner)
+        testRunner.dumpAsText(true);
+
+    window._onload_ = function() {
+        if (window.testRunner)
+            testRunner.waitUntilDone();
+
+        window.setTimeout(function() {
+            if (window.testRunner)
+                testRunner.notifyDone();
+        }, 300);
+    }
+</script>
+<style>
+img { margin: 1px; }
+</style>
+</head>
+<body style="margin: 1px">
+<img src="" src="" src=""
+</body>
+</html>

Added: trunk/LayoutTests/fast/images/resources/avifs00-ref.avif (0 => 274728)


--- trunk/LayoutTests/fast/images/resources/avifs00-ref.avif	                        (rev 0)
+++ trunk/LayoutTests/fast/images/resources/avifs00-ref.avif	2021-03-19 18:02:49 UTC (rev 274728)
@@ -0,0 +1,10 @@
+������ ftypavif��������avifmif1miafMA1B������\xF2meta��������������(hdlr����������������pict������������������������libavif��������pitm����������������iloc��������D��������������������J������(iinf����������������infe������������av01Color��������jiprp������Kipco������ispe��������������?������?������pixi��������������av1C\x81+��������colrnclx������\x80������ipma����������������\x83����Rmdat��
+	~\xF9\xA2+2\xBA����\xDDh\xF4+\x9B&3|\xDDpy\x97%\xAAJ\x9D\xED\xD8\xC0\xAB<ұ-\xAA/\xFF\xFEq\xF2\x9FATB)\xF2\x9F)\xF1\xD4?\xBE\xF2\x9FBs/\xF5\xBEjȅ\xB6'\xEC\xFE\xFB\xBAq\xE9\xC9?\x95:r\x9E\xD16st\xB2\xEFJR\xD1 \xA7h'*{\xA9\xF8hA\xA0\xD2\xA9\xF1\xE8\xBF\xB5\x8FVr\xC6r\xC1"\x88QlԬS$\x89\xE6\x89\xE6\x9Cd\xCE\xDDS-\xC6xm7q\xCC,\xE4\xB4\xF2q\xAE6xK\xFD\xB4\x965\xFFYYc\xF6:\xA5q=\xBC\x8Fs\x99\xFF]r\xC0W2܇\xE5\xE4\xFF܍ɳ\xC5\xD3\xC5ҵ]<]+P\xA5]+P\xA5
+P\xA5
+P\xA5\xD2!\xB2^\xE5\xFB\x80\x80b%I%\xFD7\xF0\xE7\xE1\xA6ǶǶ\x9D\xB7(\xD4+h\xBC\xEDG\xDB\xB2L\xE9[B\xB7ޠ\xBB\x9E\xEE|\xCE\xD8{\x9Fx\x84\xCEN?XF\x8C\xA6\x8C\xA4H\x87\x99\xEDh\xC5\xE4s\xB3\xB4\x9F_\xD0j=l\xC0.xΜlƶ\xEB\xC6\xCC\xE7\xEBƶ\xEBƶ\xEAn\xC6\x87\xB2\xF1\x8FvA2\x8E\x96\xE4\xA2;\xB5\xF6\xB1N\xC9\xE1p\x9D\xFA\xCA+\x86\xA7^\xB7\x9BhGqOx$\xA8\x8B\xA6ߜ\xC3<\xFEG\xD8}*L#\xCF\xD8}\xC7\xD8}\xC7\xD8}\xDC}\x87两\xBCp\xBC'\xF3\xDD\x95
+R\xB7@\xA5R\xA9\x93}ed\xE6\xE4ol\xE8V\xB5չ\xB2\xEF2}8m8m]\xBE\xD7q\xC2\xF1\xC2\xF3\x94Їg\xA9\xEA/'\xABI\xEF\xE9&\xE0\x9F*\xAC\xAA\x9F(\xE0\x9C\xBA\x8E\x96\xEB\x90\xF1#lk\xFDs\xC5\xC4\xE3!\xAFM5+.b)\x86D\xF5J\xCFP\xD2\xE6D\xCFJ\xCFJ`R?\xAE\x88\xB1a7L9xo\x9D\xF3\xA6\xB4ɞy	&\xCFD15\xC6\x{1E70BFF}\xB8@8@9\x98\xD3\xFD\x82}\xA3*\xC2j#\xDA*\xC2\xD6*\xC2\xD6*\xC2l-b\xAC2\x9C\xA2\xB0\xBA6\xF6\x8DӴM\xC97Sr\x8F)\xD1|'U\x8D	\x88	\xFB	\x8Fۀ*g\xEA\g-բ\xBF\x85Jr@\x88\xC0\x88\xC2F}\xCEd
+AAI\xA02Cq\x898\x8Ex\xA7\x8Ax\xF8\x93\x898\x93\x88\xE7\x8Ax\x87\x898\x8Ey\xA4\xF6$g\xAA]\xAAz\x9D\xFAg\xA9ߧv\xAF\xE1\xD45\xB27>\x84\xE3s\xE8M.\x84г\xE5\x87{\xF7\xCE>\x8F\x94JlF\xA1\xD3ݯ\xCA7=ܡ\xCA{%\xC3u\xB6\xF1e\xA2x\xE7^\xEAQ\xDB|\xE7r?b\x81TD\xA0\xE3\xC9M7\xCDZOi\xCB+\xF9dFi\xAB>\x84\x88\x87\xE5\xE0\xF8\x81~]\xE3\xE0\xF8~]\xE3\xDE=\xE3\xDE=\xE3\xE2\xC2"p\xEC\xD8P7P8^p\x89\xE8w\x84\x8C\x8CFp@\x8Ch
\ No newline at end of file

Added: trunk/LayoutTests/fast/images/resources/avifs00.avifs (0 => 274728)


--- trunk/LayoutTests/fast/images/resources/avifs00.avifs	                        (rev 0)
+++ trunk/LayoutTests/fast/images/resources/avifs00.avifs	2021-03-19 18:02:49 UTC (rev 274728)
@@ -0,0 +1,27 @@
+������(ftypavis��������avifavismsf1mif1miafMA1B������\xF2meta��������������(hdlr����������������pict������������������������libavif��������pitm����������������iloc��������D����������������\xD3������!������(iinf����������������infe������������av01Color��������jiprp������Kipco������ispe��������������?������?������pixi��������������av1C\x81+��������colrnclx��������������ipma����������������\x83����\xB1moov������xmvhd��������������\xDCt7\xA1��������\xDCt7\xA1������d��������������
+����������������������������������������������������������������������������������������������@����������������������������������������������������������1trak������htkhd������������\xDCt7\xA1��������\xDCt7\xA1����������������������������
+��������������������������������������������������������������������������������������������������@��?������?��������\xC1mdia������,mdhd��������������\xDCt7\xA1��������\xDCt7\xA1������d��������������
+U\xC4����������(hdlr����������������pict������������������������libavif������eminf������vmhd����������������������������$dinf������dref��������������������url ����������%stbl������stco������������������\xD3������stsc��������������������������
+������������<stsz����������������������
+������!����3��������;����_����Q����������\xF1������\xF5����������stss��������������������������stts��������������������
+������������\x85stsd��������������������uav01������������������������������������������������?��?��H������H��������������
+AOM Coding��������������������������������������������\xFF\xFF������av1C\x81+��������colrnclx������������
+Qmdat��
++������\xAF\xDFs"2����\xB4Q\xB4\xF0\xA1\xF1\x97\xE0$��2\xAE0\x81������\x8D������\xDD+w#\xD4@\xE5\xAE_e\x98\xF1>\x87\xFFq>z}\xA7m\xA81hT\xAA\xBEpw$\xFF\xFF\xF6\xDC\xF5\xA1Yfa;\x88\xA5\x99V\x9D\xAE\x8Bj\xAF\xAF\xAB{\x84\x83\x81XOy0\x80
+\xAD\xBA\xA2\x9B[\xED\xEB\x89&\xCC\xD3j\xECL\xBDE\xE2\xC9'1.\x93\x86烻\x92\xC1ZI_ף\x9F\x80\xB2ɫ\xD4\xCF&\x9F\xED4²"\xA7\xF5\x9D\x8EK7\xEB\xB5F_W\x91\x8F\xD1)\xE5\xC9\xE5\xCA\xE7\xC6\xC8/\xF1R+S\x8A\x8D\x86:\x99\xAC\xDBz\x95\x97\x8C\x84)\xD5v\xD8:}\xDE\xE7D\xC6Gü\x83\x892\xEDO\xED\xD6\xC8\xE15]\xD5]\xD5\xFD/\xF7y\x98\
+\xF1V6%\xB8q\xE2\xF6\x86IR\xFD\xDD\xDA
+\xFE"\xFD9\xB4\\xC1\x977\xAF\xC3\xF0\x91\xC2C\xF0\xFC$\x87\xE7@/F\xCBso|.\xB9\xF7\x8D8^\x88@Hi\xA5\xED\xB7\xADĥ\xFF\xE8T\xC8\xE1:Cz\x9Ab|.\xBE\xED\xE2\xF0\x80��2\x8D0����\x8D������ݐ<\xC2y\x9FJ\xC6,\xE3>s\xFB\xC6\xD86\xB6\xB8=\xE8\xBE.\xE9\xA60\x8770\x8D\xAE:\xF4'\xEE\xBEkОt\xF5\xD7%"L:\xEAn\xDFpY\xBF.R5\xFD5\xFD\xDF\xDFt\xFD\xED\xED_L]n\x90\x88\x88wɏ\x8B\x80\xF7o6\x80\xF7\x82)M\xE2\x99jv\x8F\xB2v\x81\xDA\xDF\xE1��-\xFE\xFD\x8B\xDAh\xA0`\xFF\xD7\xF8\xB7\xFA\x8C?V:o\xB8\xC3QpXC\xD1D\xE2q\xABw\xD8\xB7}\x87\xF8ϵ:\xC8c\xB5\x8B<\xA7\xF0\x8E}\xDE3/\x8E6\xA8},\xA5h})!I\x8C\x9E\x8C\xB1	\xED\xD11\xD11\xE5Y\xE5\xB8��7\xBB\xC0\xECHRh\xFEM>'\xFC^\x97銤\xAA\x8E\xA8\xAA\x8E\xA8\xAA\xA0\xAA\x8E\xA8\xAA\xA4ꊠj*e>0Q\x82\xE3\x82\xE3\x91\xC8)\xEB!\xFB;\xDC\xEFs\xBD\xCE\xF7;\xE2d\x80��2\xB60����\x8D������\xB2%\xF6j7\xAA7\xAAP\x9C\xB1\xC8cU=W\xC8h\xE0	\xB1%\xDB{i\xAD\x94\xEE\x89\xAC ɬ \xB2fB+^~>\xD9x\xCE_D\xAD5\x9
 7\xBC\xA1Q\xB8
 \xF4G\xAB\xD7\x81w!&*/\x98\x82\x85\xCE)\xDA\xC1U(\xD5\xF0P\xB6S\xD8\xE9u\xFFp\xD8\xD5%%{\xA4rQ��D\xE5\xF6h\xE5]S><b\xC6C\xE5\xF7u\xD53\xE5>S\xE5>S\xE5\xE4\xA84\x8C\xB2]2]5\xC7+V\xC0\xE8\xC2\xE7\xDA?fL\x97\x888\xD5\xBFg\x9Dzwr\xFFVc\xF4'\xA0j,j+\x96#\xBC\x81\xC0\xBA	1*\xD2\xF3\xDB\xF8z\xE6\x98P\xBBi\xBCTљ\x94\x81\xBAD\xE9\xFF\x91\x95\xFAJ"wu\xB2<\xC9\.\xBA˃\x96\xAA\x90\xF1\xFF\xD0\x8A|iާ
+\xFE\xF8\xCC@ԌU\xD4Uԉa\x84f\x968F\xD4F\xD4F\xD0;\xB4H\xD5 \xFCo<\xF3\xB5\xADO\x8FC%\xBD\xF9\x89\x83\xA1\xD5v\xFC4ޞ\xE1\xD2:\xA1A\x81\xC3π��2\xDA0��\x8D������\xD8"\x9E\x8A\\x89A\xFB\xC2g\xDD*=68\xC7L+\xB6\x8Bii\xACw\xB9m\xDF\xCA\xF3܎\xDE4\xF3s\xBA\xBF!	c\xC4{\xC7 <2 XXo\xBB\xEE6N~\x86\xBA'wÕ\xF5Z\xC8V\xA1\x8Ac	\xCC\xF9\xE7\x98p\xF7x\xF67cz\x92\x8E\xB7\x97pEE\x9A\x97h\xAFD\xEDh\xAFHq\xF6t\xDE\xEA\xDD&@)k\xB0\xAC\xE9\xAD-'muJ\xE4O\xF5^ns\xB3w$\x97\xA5<\xB0tr`\xBE\x9A\xCD\xE8.\xF6kL\xCA0'\xD2ѬA\xE9\xEDs9��Q\xE9\xEDs\xBC\xE1\xA0vO\xE8\xED\xCF\xEE\xCAN eU\xB07q\xCEe\xF9M\x8A\xDD@\xF3\xE0,0G+l#\xEB\xAC\xCD\xC7F\xCB)\xE18\xB0\xE0p\xC0\xC9\xF9
+x@\xF87=\x99\x99\xFD\xE1\xBE\xD3\xDC?v]\xE7\xA8Z>\xA0U.\x99\xA3\x92\x8E\xDC|cUz+\x93\xE1\xE3\xFA'\xDEm\x81\xDB2,��\x91q\xB6]\xB9,
+\xA7\x9B\x92(\xF4\xE8c\xDA\xEBD'\xECZd\xB8\xBE\x8E=\xAC\xBDvEoTD\xEB\xF5\x85[f9\xAEz\xEA盞ny\xB9\xE7\xF4\xE6>��2\xCC0#��\x8D������ݟ\xD26\x88jw\x90M`f��fA\xF5\xAF\x97#\xDD
+\x95\xE3\xD2r\x9DχbjV\xCAu>=\xB2V\xC9[%l\x95\xB2hS\xF6T\xE4\xC1wAwB[2%\x91\xB2\xB7\xC3W\xC3X&5\xC4\x8A\xEEy\xBF\xB8\xC6[\x92\xD29 \xA8zC\xEF#\x88z\xA0\xA8z\xA0\xA8z\xAA
+\x87\xA4\xB3\xE1\xD4zi\xFAi\xF7\xCCN[\x9F&\x93\xF7$\x90@I$\xB3b\xB6~UO\xECm\xA3)\x81\xFD\x91Lq\xDAK%\x96\xFE\xBA\x86$s\xFBM\xB2\x88\x8C6H\xABq\xB7	0\xB7(\x89\xB7	0\xB7	/\x93\x9F\x906-\xEEdmh_\x8C\x83{L\xF9\x87Kj\xBD\x83=\xA1\xC2h1\xA0ƃ\xB2\xFC\xF1\xBA\xF92~\x81\xE5\x9F\xFE@\x84\xC2\xC2L, \xC4\xC2\xF1.@y\xE4L/\xF0\x83\xA89\xF7Y\xD7q\x84\xFA$\x94\x9C\xE6M6\x82@\x86̛\xE3\xEAU\x9E>\xA5Z2p\xE7a\xD2\xF3\x84\xEB\xFB\x82!\x90\x90A\xE9\x90qsGkW&m\xE7R`\xAF\x87\xAF\x8C.��2\x870 ,��\xA6\x8D������\xC0\xA2+h\xE9\xED >1hวZ\xDDku\xADַZ\xE0E\xB36%\x90\xE6\xE8\xD8WX[\x813H\xAFc*\x83N\x99=\x9F\xD1=PGББ\xCE}	|Ǝ\x91\xCCh\xC7\xCCh\xE9\xC9.\xAC\xF2\xE6\xE6w\xD6!u\x88]D\xE9<$\xF6Ǵ\x99\xACF@}ԲR?zJ\xF0\xCDcv\xCA3\xDE\xED\x83l\xF7iBW\xC4V5T\xE9W\x95\xEC%Mh\xD5Q\x8F@0\xF2	\xABfs\xEBҚo_\xA1\xD2lM\xA4}oY{5\xBD\xB1\xC7\xD8\xE1\xAB\xD8ݐ\xEByp\xB8\xF5\xF3=\xA9\x8C\x823\xCB\xE3o\x8D\xBE6\xF8\xD8#"\x8B\xC62\xCCc \x8C\xC62
 \xF8
 \xDA\xE0\xFE\xA1\xD3\xE4\x81\x8B\xC5X\xCAqu\xC8\xC8[\x89[\xB7w\xF3\xD3b\xAB[:B3\xB3\xD8hf\xFE\x84~~\x92Ei\xF6M~+נ��2\xEC0@5!8\x8D������\xDE\xD6\xE7\xDAQ\xCA_\xDDXp\xB7m_w\xFD\xDF\xF7\xDD\xFFx,\xF4k 6ϼ47op\xCE_\xEE\xA8\xEA\xA7\xFD\xCC\xEA=5\xA54\xE8N$\xEAO\xAAO\x9E\xFF)\xF7S+B\xEAu1\xD5v\xF0\xE3\xC8\xE6\xD8`M\x818)\xCC\xFC\xA9UM:}\xC8V?\xEE\xD6$\xC46\x85ȶ\xFBú?\xC0\xE8\x9B\xFB\xAEy\xD9\xFB\xAE\xFD\xCDU\xB4\xA8\xD98\xD98\xBFF\xD4\xD8X\x9A@Ӿ\x83\xEDy\xF3g*\xB4\xD7D(\xB5W\x96F`\x85\xF0\x83RRD\xC1\xF8��m[<s;4\xF0\xDDA?<b\xD0,\x8E\xA8-\xC0\xB4\xEF^s\x83\xF4\xEE\x8D*\x91缙{ɴ\xAA\xE2\x84t񯝥\xC7��
+\x91\xFA\x91\xFBA\x9C\x80��2\xF00 >Aʍ������\xB7\x97\xD1!\xAE\xC07\xAD\xC8Żr\xED\xFC\xE0S_\xCE9\xFC\xE7\xF3\xA8*\xA5\xA7k\xF5\xA8\x98\xCEU\xFC\x97\xCAn\x949]
+\xE4e\xE6]\xA7\x93]J\x9F:$\xA1:$\xA19:$\xA19 J\x9C*\xC35\xA8\x9A\x8C\x93\xD55\xB4$v_\xB7S\xABa\xB5\xDD!\xB3M\xB7\xE6b\xCAn\xC8\xF6\xB2[v\xE9\x8F\x81\xB5o\xE0$y֗:m\xEE:2\x86\xE0\x93\xC1FĄFT\xECQ\xB1"K\xEE\x8C4\xF91L\x80 H~\x93\xAC\xBD\xC0l᳆\xCD\xDC��1\x86\xCE4<\x801\x86\xCD [\xACA\xCEھھ\xE3)#|\xA2\x9A\x9E~}v\xE9#\xBFD\x89\xE7\xCB\xC1ph\xE2\xFCd\xB2\xAA\xC3.H\xFFah\x80V@��2\x810$b\\x8D������\xDF\xC2T\xA0_\xAFr\xC3#\xFCa��Tv\xA8G\xE4ZN:\xBC\xC2\xE3��\x9BZ\xEBZ\xEB\xFD\xCE&\xEE\xCE\xD9\xF1\xD1E\x88\xB9L\x88o\xE4Z\xEEq\xA8@\xBE\xF4#\xA2\xB7\xA2\xB7\xC1\xCDOK\xF6\xA14嫞2\xC6\xDB\xEA\xE1\xEF\x8Cj\xC9\xF6\xC3\xD0\xF2\xF63#k\xD4yny\xF0p\xD0)\xE1~\Q\xF6ӣ\xF15p\x885\xFD\xD93\xF6\xC3\xDB"\x95&\xA2\xB2\x99}\xCAP\xCAj\xEF&˲\xF3\xFAcDp\xD0\xF2\xD2g\xFCG)0&ҮI\xB2\xD2L	\xB4\xAB\xFB\xA7F\xBC?i\x8B#\x94&)\xD4M\x93-:\xF19\xEEڞP��2&\xDE\xFFMR>\x88\xFA\xE5\x92>\x80y=\xE1\x90Ox=\xE0\xF7\x83\xDExP\
 xBD\xDB;
 \xFAފފ\x99\x863+ko\xABo\xAC\x92\xE5\xEEu.\xCAA\x88
\ No newline at end of file

Added: trunk/LayoutTests/fast/images/resources/avifs01-ref.avif (0 => 274728)


--- trunk/LayoutTests/fast/images/resources/avifs01-ref.avif	                        (rev 0)
+++ trunk/LayoutTests/fast/images/resources/avifs01-ref.avif	2021-03-19 18:02:49 UTC (rev 274728)
@@ -0,0 +1,7 @@
+������ ftypavif��������avifmif1miafMA1B������\xF2meta��������������(hdlr����������������pict������������������������libavif��������pitm����������������iloc��������D��������������������������(iinf����������������infe������������av01Color��������jiprp������Kipco������ispe��������������?������?������pixi��������������av1C\x81+��������colrnclx������\x80������ipma����������������\x83����%mdat��
+	~\xF9\xA2+2\x8D����\xDD4\x81\xEF\xBE\xCF_&l	\xDAV\xB1ai~\xB1_ˈ>\x8B\xE7\x80\xC8X\xA1\xF7\xA17\xBE/6\xCB-\xE9Ҽ_"\x97\xD60M3\x80\xC1S8\xC1\xBA\xF4P\xE1\xD4j^\xF9\xEE	\xB8,\xC8\xF3#n	\xB8,\xC8\xFC׾\x84e\xF8u8\x99\x80md#\x9A\xF2k\xCE\xEF{\xBD\x9A\xF2k\xCE\xA8\xA2\xD4\xB7\xE2\x87\xFB\xE7\xC6i\x91\xA7ꪚ\xAA\x9A\xE3ew��R҉B\xDE8\x8C\xA9\x92\xA5\xD4D\x9C\x82N+f\xBDf\xBD\xB3t&NZ00\xF1\xAFEɼ\xCC\xC1\xE7}\xAE\xFF\xAB\xF4\x89\x9B\xE2D"D\xCCbB$A\xFCìbA\xFCì:ì:ìD\xE8\xCFD\xEF\xF7\xF7\xB5O,ޓ\xAE\xC1\xE4GFfe\xB1>\x8B.8%\xFATD\xDE\xCE\xF9"?o3M\xBF\xA5\xFE\x99.~Z?\xA6\x98\xA1.u\xBBf0\xBF9.66\xC9\xF7[\x92[R\xE0\x88\xF8T\xF8VC\x97\xE7UA\xFA\xBFKo\x98\xA3'i"\x8A\xFC?\x88\x99\xA4\x89\x9A"\x92?\xDE!\xA7U{\)\x879\xFC)\x8E\xDDӺp^\xBD-{\xEC]\xF1\xB7\xC7c\xF7Q\x81\xEAD\xDAx\xDBnp{'\xF1\xE4S\x9Bk\xDE\xCCM\xF6\x997\xD8U\xDC\xC3Q\xDEJfKD1R\xC5G\xD1T\xD5\xF8\x86I\x94e\xB2I\x95\x8A\xB6$L\xAE7>\x97\xF
 9
 fēMQ\xCDʑ\xEEr\xB9\xCB\xA09\xFE\x9Dχ\x9C\x88\xEE\xF8\x81S\xDC\xE5U\x95S\xE5\x97Q\xD2\xDDr%St\xABt\xAA\xBA\xA3\xBE\xF4h\xA0\xF8\xAB\xF0\xE4\xB6\xF9\x8A2v\x92(\xAF\xC3\xF8\x89\x9AH\x99\xA2)Q}{O蝍\xDFh\x9D\xABKl\xE1&\x9AZ\xAE$\xBD\x8A\xBB\xAA\xEF@\xC5;E]\xA0S\xCF\xEC\xC0l\xC0n)̑\xA6ОɁ\xF8/#\xA7\xB7\xA9\xD8\x95\x8B\xA8\x86V.\xABa,\x8CO4OS\xF8\x87\xE1\xC4~%j\xCAG\xBC\xE2\xE7g\x8Bog\xE0	\x97\x8D\x85ޢ\xAC \xA0$\xCC/^\x86\xFC\xF04\xA9!q\x95\xF2W\xC9\xC0⹅å\xB5W\xC2\xF3\xB15\xD5`\xFC\x89G~mx\xA1\x8EY呠p=U7^\xA2!j!\xF2`&\x82\xC2nN\xAA\xF8\x9A\xF8\x99\xB0\x8Bȟ\x94t5Q\xD9D\x81)\xE0o\xA3\xEAn+3\x89\x9FL\xB8\xE6\x91K\xF8isu\xB7\x99N\xEA\x80s\xF0'2Ԍ\x99\xF0\xBB+\xB1\xA1c\xE1\xAEƅ}\xEA>\x85}\xE9\xF7\xA7ޟz}\xEA\xA3|\x91\xBD\xBD
+\x82D\xEFiZiZk\xE2\x99Fj?\xFCR\xBCR\xBD\xA8+\x8E\xD6\xFF\xE0E`Eb̏\xDBU
\ No newline at end of file

Added: trunk/LayoutTests/fast/images/resources/avifs01.avifs (0 => 274728)


--- trunk/LayoutTests/fast/images/resources/avifs01.avifs	                        (rev 0)
+++ trunk/LayoutTests/fast/images/resources/avifs01.avifs	2021-03-19 18:02:49 UTC (rev 274728)
@@ -0,0 +1,25 @@
+������(ftypavis��������avifavismsf1mif1miafMA1B������\xF2meta��������������(hdlr����������������pict������������������������libavif��������pitm����������������iloc��������D����������������\xD3������!������(iinf����������������infe������������av01Color��������jiprp������Kipco������ispe��������������?������?������pixi��������������av1C\x81+��������colrnclx��������������ipma����������������\x83����\xB1moov������xmvhd��������������\xDCt7\xA7��������\xDCt7\xA7������d��������������
+����������������������������������������������������������������������������������������������@����������������������������������������������������������1trak������htkhd������������\xDCt7\xA7��������\xDCt7\xA7����������������������������
+��������������������������������������������������������������������������������������������������@��?������?��������\xC1mdia������,mdhd��������������\xDCt7\xA7��������\xDCt7\xA7������d��������������
+U\xC4����������(hdlr����������������pict������������������������libavif������eminf������vmhd����������������������������$dinf������dref��������������������url ����������%stbl������stco������������������\xD3������stsc��������������������������
+������������<stsz����������������������
+������!��������1����.��������8��������
+������\xFC����J������stss��������������������������stts��������������������
+������������\x85stsd��������������������uav01������������������������������������������������?��?��H������H��������������
+AOM Coding��������������������������������������������\xFF\xFF������av1C\x81+��������colrnclx������������
+Omdat��
++������\xAF\xDFs"2����\xB4Q\xB4\xF0\xA1\xF1\x97\xE0$��2\x920\x81������\x8D������\xDD+w#\xD4@\xE5\xAE_e\x98\xF1>\x87\xFFq>z}\xA7m\xA81hT\xAA\xBEpw$\xFF\xDD]\xA7\x81\xCE5\x81\x94Q\xFBcH\x96\x98~\xE53\xFF\xA6\xD3\xFAM��\x98If-E+\x81\xCD]e\xBF\xF1k\x9E\x92\xFFAvԝ3\xE7:\x9BB\xC4\xC4\xC36d\xA7\xE3\xCC[\x92\xE4܎\x88\xC9\xF6J+\xAC?w!@\x8C\x82̳\xDAɜ\x99\xBEy\xB0\x9Al!q\xD8\xF6\xC6\xF6\xC6\xFE\xBE\xE3\xFF"[\xFAyS\xFE\xF3*\xAA\x95ޢ\xD3SS\x9F\x94\xCA\xF9;\xD8ɂh\x97\x85\xF7\x8D\xE4z\xFEY]\xB8\xFD\xA6\x86\x86w`\xBF'ըh\xBF\xA1/\xBE\x8Dۊ\xD8dx\xB6\xC04\xD3\xCF7ak\xDE\xF3=\xAF\x9Br\x9Bb}\xA4\xC0p"uv䔷\x94\xB0\xAD\xA6\xB1��]S\xFC+e2\xBD\x94\xA4\xA4\xA6\xFD\xA3\xC6u\x88��2\xAC0����\x8D������ݐ=Z\xB1\xE6^\xD4\xC8DmDmc\xA8\xF6\xAE\xE5mv\xB4E\x847\xE9i~E~\x90k6hX\x8EkI\xB4kI\xB5\x9BL^\x95=\xA5\xAC\xC0\xD5m\xA1\x86\xEDƞ\xFF4}'uA\xBBj\xD0@g\x83\xC2Z\xC5)o\xE2!\xB6=\xB7W\x9D3Z\x93\x94\x87A\xD2.\xC9\x8E\x9Ea$\
 xB3`\x96\x8C\xA
 9l \xFE\xDE\xFBV\\x9E\xA2\x83\xB76\xE0\xF6\x8Bh\xD8\xF5\xF37,\xE0G\xE0M\xC8\xE5\x80q\x9DyJ\xFD\xCF\xF3i\xC0\xA8B$\x97\xF8\xD7\xF4\xC4Wc\xC3\xC3\xED��"\xF9$\xAB\xAFG\xC8X\x8C(\xE6ͬ`\x8E$<\xF6ɾ\xC6M\xF3\xDB0&\xF9\xED[\xE2:\xB2^\xCB^ U(\xC7o\xE5\xEC1\x97\xB8}%\xE7c\xA9:7#z<\xAE\xF9\x87Dqm\xAE\xAF5\xB5\xC05\xF4ݕ\xAB\xDEB��\xC1v\xD4\xDC\\x8E\xD7P\xC1\xA8=\xDDBϘ37\xFE\xF2!\x90^\xD3��2\xA90����\x8D������\xDDҮM{l\xEF\xEC(\xE3(\xE3+\xCEٸS\x92k@\x91\x9A\xCF\xF2\x94\xC9B\xD0\xEDS\xAD]\x86\xA5\x94Ƞ\+\x87\xB6\xEC\xCBuW\xD29\xC8\xD2I\x81R-\uǀ\xA7\xC5\xCCڍ\xC1\xB1\xEC\x9A\xD8I$\x92I$\x92I$\x92P\x97\x9C\x83|\xD0ե5\x8AJF䚅\xAC\xCFl\xABv\xD5=\x85,p\x86UE!F&7\x95_\xA1\x99\xF4ֈ2!\xFAH\xC89\xB6A\xA8\x89\xEA\xE0\x8DⰌ\xA0\xBF\xAC+\xFC+\xFC\xB4'\xEA9nl+lL\xCAP\xE5.P\x9C\x9FZA?\xEE5\xB9\xC4W$\x98\xB4\xFEd\xAF\x80fo\xB8\xAA\xA5B\xD9P\xC6\xDAp\x8D\xE0\x8D\xE0\x9B\x98>\xE2\x91x\x91x\x91xqr\xA8\xBAK\xC5!;\x8B@(J\x94*G\xDA~\
 xD7Em\
 xBC\x9F\xAF\xB10@\xACo\x9F᱾yl\xB3\x80\xA8\xC3\xBA\x9F\xCF\xA4m}\x8B\xE6L\xD03T\x9B\xD93\xBE}5}˳\x80��2\x910��\x8D������\xD7L8\x95
+\x9F{)yy!\xA7\xB9\xEA\xBBAM\x82M\xA6\xD9DF$U\xB8\xD9D\xDAd\x98[\x8D\xB8I\x85\xB8YO\\xC0/\xBD\xB8\xB5\xB9\x90\x8E\xCBl\x8E\xBFC\x92\xC8uճ\x9A\x9A\x80f\xDB\xF1\xBF\xA7i0}\x90	0\x8D\xD4ϛ\x82@\xA6\x83\xE6\xD2:~\xB2\xDB@\xC5\xDC%.OFo\x8A\xF7\xF1l$\xD1L}\xB2H\xB2,\x8DϷ1\xBEp'	0\x93\xA4\xB9\xE6O\xAD\xE9\x82\\xE9\x82rMG`t\xDBxb.}\xB6q\x85!\x80\xC72\xE6}\xECx\xB9J9\x9C\x80\x9B\xD7\x80$\xA2\xA19\xAFє\x89+\x9C\x9C\xB8\xF7\xBB\xEA\xFB\xDF!\xBEվ\xF1\x8Az<C\x95\x83\xAEDf\xF8f\xD1yH\xA1p\xB3\xDDķ'lXQ}\xB4\xB8\x8F\xF1i0bL\xA6\x9B*2\xACc7\xA1W\x81Z\xECR\xDA+\x8C٧/	r<\x8F#ˎ6$��2\xB30#��\x8D������\xDD\xBF\x8E\xF2\xAFM\x95\xF9\xA9\xDDu\xD7]\x96NM\xC5dmF\xDE3\xFE\x88\xFB\xDC^H\xA8W\x85^t\xE7g\xB1\xE4\x88\xE7Nt\xE7Nt\xE7Sp\xCDˡ\xF2)\xE0\xF7\x84\x82z\xE1\x9F\x9F\x9F\xADx\xD7k\x8BE\xD7\xE8q\xBB\xE2\xD1s\xC4\xCBHtCu\xC7<Xyua\xE5բ\x{DFE4}\xBF\xA4\xBDp\xC49@fC2a&a&a,\xD79H+\x8CH1\xA1\xCA|\xB7\xE8\xA84\x93/.~\xA6I\xD8D\xBA\x94\xBF\x8
 D\x
 9Cg[00ղ\xE6V{Hp\xC3Y\xED!~\xC0t0\x99a\xA8\x809qG\xBB\x88zmCM\xA6\xE9\x8E\xE4\xDCY\xB3
+Ό\xE8Ό\xF3\x8F\x8C+\xE7m5F\xC6w\x96A\xDB}\xB1.\xDEY\xC1r\x84\xDD\xF6b9\xB4E\xD0\\xA2J\xFF5\xC7ϛ\xAA\xC2\xE5\xF4nS\xCDO\\xF4K@EwoM\xB3\xB2\xEEgl\x82g0\xBFj\xABv\xAA\xBA\xC5V\xF9!\xC4A3\xD3?\xF3W��2\x8D0 ,��\xA6\x8D������\xBF귔ӏv\x8C\x93`y-\x97n5v\xE4\xE5‡\x81\xF0\xC4p\xC4o,\xBB6j$\x80\xA0\xDF些5H\x94\xA9|\xD7Pp\xB3\x8E$\xCD\xCD\xCFBQ\xA4\x89\x99\x80C\xB6H\xD4\xDAG\xF6f\x8D\xF5\x86ՠ\xAB^:\xC3k\xC0\xB8\xB4\xCC -}\xD2¡P\xF1\xEBR@mU`\xB1l,\x98\xBBcl{{w\xA7\xDBw\xC0\xEB*G\x85\xEFW\xBD\xEB\xB9\xB0\xA2!S\x919r!S\x94\xED\xEE낼@\xEB\x82ƢG\xC1m؇\xAE]4)EI\xEAI\xA7\xAE[\xC3*\xFDr귞\xCBHR\xB4\xFCU”J\x95\xA9Z\x95\xA9Z\x940\xF4\xA9@\xF4\xA9@\xF4\xA9Z\x95R|\x8B$\x8BXDsm,ٴ\x99\xB4\x9Am.\xB5%\xA1\x9E@\xD8Y\xE4)ڲ\xAC3\xAB\xB0\xCCN\x81xQ\xC4\xFEX]\xEEU\xCC��2\x850@5!8\x8D������\xDEPt\x83sH\x97E7C\xC5\xFA\xA1z\xA1zq\xDDϚ5\xCF9\xCC\xE5ĺ\xBB:\x86\xB1\xDD	:}Dn.E\xBA:si\xAB4\x82\x8F\xF8\xE5\xF0\xF9-fQ\xA0\xCF\xD9U]\xCEqU΄\xEA`\xF1[y\x95
 \xA5?\x
 F0\xAD\xE8~\xF1\xEEC\x95Va\xBD\x93\xD3g>*S\xE40*\xA7\xD4\xEDN\xD5O`\xE7B/j/jXQ\xC3h\xBE\xF3\xEF<E\xB4S\xFA\x87\xCB8ļ\xF3\xD9\xC6\xCE\xC5\xFF3\x8B;:\x84\xA8A\x{1667667}\x99X\x8C"3$\x90181818Sێ\xE2\xE4~\x9D~\xA1y\xBDZ[\xE2޵\xCF\xE9\xCE�� /\x83JCv\xE5nm,\\xC6\xFB\xEF\xBE\xFB\xEF\xBE\xFB\xEF\xBF#\xE5\xFD#kPQ@\x94K\xE1}\x9EVUfR፪\xDB,\xDFH\xA3\xA620\x91\xE5��2\xF70 >Aʍ������\xBB\x92Z\xD6H\xE4\xCC2#\xDF\xFE\xA8ؽe\xD8'\x92\xFE\xFFOc\xB9jCNx\xA3~\xEBQ\xDE\xFC\x9C\x8F\x9A\xA4=x\xB9\xE5^j\xF5\xF5b\xF94t\xA0Ʌ`>\x8D\xDFx;\x86\xEDM\xDFxX\x9DQR\xBD8Cg\xC9\xE9
+Ո\xDE7|'\x8F\x88\xE2Q\xBE\xD0Y#\xA3s\xA2z\xF9\xF6\xEC)\xF3)W\xE0\x99\p\xA06V<\xB7\xC6\xD1\x81c~\x91\x82\xEC8F1\xC6
+Sr\x92t_+~}T\xC6\xA0\x9A\xE4>k\xF0gFtgFm\xBE\x9B\xF0gFtf\xDB\xF0gFm\xBFq\xA5}\xC2l\xF6H\xF6H\xF8\xFE\xE3\x9Cs\xFAp\xF3q#\x90\x91\xD3\R\x85\xDEw6(\x8F^\xEF\xBAN|\x90,\xB7n\xAB\x9Ad\xC7"\xE0Q��2\xC50$b\\x8D������߭\xB9\x89\xCET\xA1\xC0\xEBA0\xE1\xD6MC\x980#Οr\xCB+\xC9����\xDB\xDAC"\xD4凋\x94\x91s[\x96ǫF-\x94)D\xE1\x81ν\xF3\xE5\x904%"\xF1\xC0]\x98\xB4\xB0_\xB2\x9EP\xB4y\xA9}\xFD\xBF^\xBB\\x92\x9Ab(\xBA\xC6\xED\xC5)7ފ\xFA\x96\x99\xAF\xB5\x8A\xA4~\xBA\xFA\xFF\xB2\xEF\xA5[\xA3$\xBAA\xA7Ղ\x8F:\x87\xEEP\xC9^\xE4>\xB9C��Y\xEF,\x96C��Z3b\xC9\xCDP(\x87\xB0\xFC	\xC6\xF8c`\xA0\xB7r%��\x94Tw\x8D\xBF=\xE8\xD9A\xEC\xF3N\xF4\xF1^\xEB\xF5\x87T\xB8-\xD1\xEF\xB53ʶ\xE7E\xBA\xC0\xB5\xC3\xE9\xE6\xD6Ƥ!)\xAB\xFA\xB2\xF1ы\xAEV\x87\x88뎨\xEFN>:\xA3\xBC94㣼90\xE4ÓL93\xFAUWg\xD6G\xD6G\xBA\xE6>\x91\xF4\xBF\xF4\xBF\xF6\xB62"/"r(\xDB\xBF4\xEBN\xF9t\xA1\x98\xC8ci\xC3\xEE��\xEA"\xB1O\xADxoZ��\xC6KE\xC1\xB6\xF6\x96
 Yc~\xFC+\
 xAD
\ No newline at end of file

Added: trunk/LayoutTests/fast/images/resources/avifs02-ref.avif (0 => 274728)


--- trunk/LayoutTests/fast/images/resources/avifs02-ref.avif	                        (rev 0)
+++ trunk/LayoutTests/fast/images/resources/avifs02-ref.avif	2021-03-19 18:02:49 UTC (rev 274728)
@@ -0,0 +1,27 @@
+������ ftypavif��������avifmif1miafMA1B����\xA1meta��������������(hdlr����������������pict������������������������libavif��������pitm����������������,iloc��������D����������������\x8C����Y������������\xC9����\xC3������Biinf����������������infe������������av01Color��������infe������������av01Alpha��������iref��������������auxl������������\xD7iprp������\xB1ipco������ispe��������������?������?������pixi��������������av1C\x81+��������colrnclx������\x80������ispe��������������?������?������pixi��������������av1C\x81+��������8auxC��������urn:mpeg:mpegB:cicp:systems:auxiliary:alpha��������ipma����������������\x83��\x87����$mdat��
+~\xF9\xA5@2\xB6��\xDD+*\x9E\xD482\x92\xAB\xFF\xFF\xFFǂ=i\xE5$\xAD\xBCn\x95)\x8E\x9E\x88\xE8t)\x8E\xB8\xE9\xE8\xA8\xE9莉\xB0\xFF\xE6\x97\xC8\xC6B20.\xC3v@\xBA\xFF\\xA1p\xA2:\xBA\x88\x93\xFCHd\xA0\x9Ec\xC7\xE0\x9Brm\xC9\xC6h\xA3\xA8\xE1ċT\x8C&\xD1!\x98\x9Cb\xAB\xBB
+3ϳ\x82\xC1\xF6׼\xE0*w\xCED<+Xc5X̞\xB8\xE2\xB7\xFCVZ\xC7M\xE3X\x8B��\xA4\xC0\xB2/\xC0\xBF,\xEDt\xF2ԷT\xD0\xD1\xDA\xC1懛l}\xB1\xECV\xDDئ\x9F\xB7\x8B\xFCuR(.\x82\xE8*q\xE5Q\xE7*\x82\xE8.\x82\xA7&r&#\xB6\x9Fx\xE2\xFA\xF1QoM\x99\xAC\xEA\x94I\xC69\xBE֔\x8Ā\x8F8wĸg\x9E(\\xDA\xEB,^\xF3k\xA6\xEB\x87\xC2`\xC5\xF1L\xBC{n\xB8| \xCBx\x85\xFB\xF73\xB54KU\xB2B\x95\xDE\xDA\xFA\xF5\x8DV\xC9L\x90\xB1-V\xC9mXիPwp8\xF0\xFA\xF6��\xD0>\xBE\x96\xEB\xD8?\xE4X\xC9\xC3C\xFC\xA7V\xBA*\xA8R\xAC\xDB4vOBmIq\x99\xD1\xE5\xA3\xC6\xF6\xBA\xDA\xEC\xF1\xBD\xAE\xD5\xF1Kkn\\xDE8\xB1n\xA1\xB7\xA6\xCAzjy\x9CƱ})\x99\xC7\xAA\x96\xFC\xBE9\x8E\xD15ơ\x87\xCF\xC0W+\xB6&\xEB\x9C\x99\xE4\xC2\xD1"i\x9F\xF1\xE4\xFE\x8E5\xD7\xDC\xFE\x91\xE4\xFD\xCF\xDC\xFE\xFD\x92\x83\xC1\x85\xDD\xF1[\x81r\xFB\xEE{\xFB~\xBC\xAD\xCBo\xCAܫ~\xE1oʟ\xE1\xB3g\xBDX\xB4\xA6K\xA8>X4\x85#3\xAEN3>\xB53\xEBO\xBC\xBE+\xF6]o\xDF\xD8ɰ\xD2̳7\x8C^1x\xC7\xE4}59̍H\x91\xC8Q\x
 B
 E|\x85*ͳ6\xB5\xB9\xD6\xE8\xAE\xFF\xB0i\x80\xB8\xE1Z\xF5\xC1\x96]X\xBDpe\x96��[\x96\xD2\xC3 \xBDW\xDC^\xC7xn\x87Z\x8C\xA6G\x88v\x96/\xC3\xFC?x\xF7\xF8\xD3|?\xC3\xFC0R\x85(R\x85(T\xAF\x92Z\xCBK\x9C|D\xB7\xF6-\x980\xF1\xF0\x83\xECV\xA5n\x831\x83\xEC\x97\xDA<\xB6\xBC_m-.\xC6$r\xAA \xA8\x82\xA1\xE7E\x9D\xE6\xBEn\xBD3q\xC7\xFD\xAE\xF8ۺ\xA0\xB8\xC2X\xA2\xD3P\xE6+\x8F\xE08\xAB\xFD\xE9B\x80t\x87|'Hw\xC2
+\x8AJ\x88m\x97\x8F#-\xEAџ\xE4\x86j\xE8+\xA0\xB0\x9AS_a\xC8\xC4\xD8\xC4ڡ\xDDOve?@\xC0\xDF\xF6\xBF\xD4	䣖\xBF\xDF\xF6\xBDk\xFE\xDF\xF6\xBF\xE0\xCA\xFA\xC4\xD82\xE0J\x82JT\xEC\xE1+.\x92\xE9 \x82jr\xE9.\x92\xEC\xE1.i&\xA7\xB6\xDF\xFCj\x84j\x87\xBE\xA8\xF8\xB5\xF3\xA7\xC1\xB5+\xB8\xBC:\xD0\xEBX\xEF+\xC33\xF2\xF5{\xDF[\xDDoCy{\xD9\x92\xB4	\xCBc\xF5Ȕrv\xC1\xB2Aɗ[Hm#\x84\xAC\x92\xDBIU+\x84\x98\xB9\x9F\xD8\xA9\x83\xBC\xB1\x86\xF6TXn\xB8=\xAB\xB4\xDE\x84'\x8AO\xF9\%⮁\xD5\xD5RS)d\xA5\x88\x95zUw\xBA\xD5\xEB\xE5RA\xE1y\x84f\xF7\x82\x8F_\xBA\x9E#\xF8\xDF\\xD7S\xC6ޠ\x9B\xF5Kw{	-h\xC7v\xA0��
+	~\xF9\xA2+2\xC9����\xDD+#\x82\xBF\\xD1i\xE5_\xFF\xFF\xFEPN"dQ\\xDB4\xB9\xE4\xBA@\xB5\xC1\xA2\xDAw\x97v\w|-\xBD\xE5>\xFF\xFF\xCD0\xC2&\xF2\xEB\x94+\xBC\xEC\xFF\xAD\xE7"\xEA:\xE4\xEA:\xDB5\xA7\xAD\xE7!\xB9\xCA\xC5w{\xF8\xD0\xCF\xDCp`\xF9o\x90cA\x95E\x98\x96cA\x98~_\xD9x"\x897\x94\xA4ZH\xDF\xF7\x80\x92x	 \xCFT\x8DO\xFA\xFB\x8E\xF1\xAE\xF3pC%K\x950\xC9S+q\xD1Og\xE5\xC2*\xF2>\xB4\x8B\xCDJ)\xA8\xA6kׯb\xBB\xC7\xF4\xA5Z&]b6L\x86\xA1mf\xA2=B\xDF\xB1\x91P\xEF\x88/\xA2\x9A!\xFBqP\xAB\xBE\x8D\xB3\x9E\xB3\xB1\xE4V.}\xFDl\xDE\xDD!h\x81h\x81n\xD6Se5\xEEV\xE9\xECo\xD6Se\x93k\x8D6>b\xC9Ƕ\xA4\xF7\xDBu\xD5\xF80\xF0\xBE\xF5t.^{$f\xDB\xE3*\xA8\xDB+0\xB6*T\xEA\xDB(\xC6V
+\xBB\xF0]ඪ% \xAC\x8Drf\xE5Y\x94\xAD\xB0\xED:[\x8Fo\xC8\xCDϙ\xF7"\xB2pD\xC8-\x91&0\xA6\xAB	4*\xF8\x86\xEF\xAF{\x9B\x81ᗟ\x82R}\x9D\xD4\xE1\xBFꙻ\xED\xD8+\xB2\xB1
+ۜ\x9D\xA5Lr\x87EѰ\x9Fɀ\xD6 \xAA\xCE\xF22v\xEF\xE6\xF0\xBBX\x86Bx\xE6\xF7\xC1Ai\x9C\xE5VY1\xD3\xC0KӤ\xBAsh\xB6~%\xBAX\xE8G\x91/\xC8\xEB(\x96\xE5\xC8\xC2\x90\xFC\xF2ﰖ߈H\x96@|Y\xF0\xF2_\xAB_y\xD4\xC8\xD2\xD1\xF6\xDC\\xF8\x9C\xC3ʨ=\xC6\xF1\xFA\xFE\xFF\x80\xA4kὖc\xAF\x9A_\xAA8
+\x97+V)`"IX\xD2}h\xD5?\x80(=\xC3\xCBϷ{\xCFq\xF3k\xC0}\xBB\xDE\xBC \xD3*\x94\xCA\xFAG8|*\xBC\xD1\xD7'��\xE1Y\x99\x9A0\xA6QٞQ\x8E\xFE\xCA?\xFET\xD7J:\xC3+\xD8w\xFDܱ+d\xD2/#L\xAC2Ĭ\x8A\xC3p\xE4\xBC[\x97\x95\xD8\xF3\x92h\xF9Rv	\xD8'a\xF3\x92\xDD]3\xAD\xD9UFU\xF8\xB5\xE6`\x86`\x94eQ.`\x86`\x86`\x9B\xBA\x9D\xD4\x90\xB4\x9A\xE00S\x{199FD5}%$\xDA\xCF\xD4\xF2Ԧ\x99\xBF\x95KJ6\xF8h\xFC\xF08@\xA1\xFC\xF08@\xBC\xC4\xC3[\xC7\xEBZ\xB4ؔ\x86O\xC1\x9Ep\xD7\xEE$\x98\xFF78\xE3H\xA0#7\xD7\xDD\xAE\xF2\xBC\x83\xF7+\xC8?\xA0\xFD\xCA\xF4\x82O\x85\xFE\xB5\xBCM\x90z��\xAA\xF9C3\xC8U|+\xC7Y\xF7\xE4\xE4\xE2\xB5u\xA9\xE69\xB0\xE6%��\xDB��<\x95\xDA(\x95["\x88\xBC\xCE׏x\x{1CF6FD}\xDEOA\xE7\xDB\xC0AE\xA6\xF9f@l\xA0խ/\xE0ъ
+\xA1~4\x97\xA7v\xDF\xC9\xE6\xDFvw\xF81\xFA\xEDj\xE8ٌ\x9EHT^Cٍ\x98\xC9\xE3\xDE=\xE41эEL\xD9{\xE6\xABQH\xD4h_eq\xD7\xC1\x81\xD6e\yvU\xC1\x97\x9AfU\xC1\x8C\xEDD\x86\xDCJ\xC5!#\x99n\xB1;\xD6|{'9e\x80\xA9E\x97\x8F&c\xC1\xC7؏D3\xF0\xA31[\xF4\xCC\xC5\xE4	dV\xF8Ej\xD2\xF3/R\xFD4\xD3=/\xD2\xF8\x8F`\x8C\x96x\xFDNU\x8F\xB8\xA2\xBAAk\x81\xC9YR\xB5#\x89؝\x8A'R\x8B\xA3(\xB6\xED\xC6*\xA3Z\xCDk5\xAC֮z\xE4\xF4p۱\x8D\xAD\xFB.c\x90h\xDB\xF0n	}\x82+\x92\xD6\xF3\xB0\x96'\xE3eS{c\xB0g\xB60g\xB60th\xD5RV\x86<+\xE2(\x84.\x94& 
+\xDC6\x93\x9A\x9C\x93rwsyv\xF6g\xDD\xCE\x8B\x8F!\xD4\xDBŻ\xB7\xB3{\xDBŻ\xB7\xB4\xD1נy\xFEL!=\xAF\xC8Ok\xC1\xC7\xD6\xD3)\x94 \xCCP\xDD@\xC82\x83 \xC82\x83!\xBC)\xC0\xF3\xBD[O\xADS\xF3\xF9\xBFv\xE0\xD9q\x90\x84\xF0ȝ\xFAzī\xC5I\xB85\xD3\xC8+ߝ\xF8\xE3\xC2\xF0\xA4{\xFF7D\xBC\xD08'\xEC&\xB1=\xAF/\xA0]\xB1\x8A\xAF{\xC0]!\xF2!\xF2ܴ^\xA5[\xB0\xBD!\xB2Fh\xCA\xF4u\xFC\x87\xA9n	5(od]\xD5+-(l<=\xD5\x96\xA9\xE72nU\x8Af\x8F\xEA,\x91
+\xA3EX\xB9\x90w)\xA5̃\xA5Q\xA2\xAB\xB1˯\xC8Z{\x9B1\x98\xA2\xA6(\xD8ϐ\xAAB\xA9
+\xCD-4\xB4\xD2\xC9
+\xE67\xADt\x82\xAB\xDCvt\xD5]MZ\xDBw\xF6\\x898\xA4P\xF1ȳ2\x80\xE6"\xA5\x99\xDB\xCB\xECi\x8C\x9A-af*\x97\xF2B\xF3\x88s\xFB.
+\xED\x93\xD0›p\0+\xE1\xBC\xDB7\x8E\x9FCr\xEA\xF9\xADj\xF0\xEC@'IKkZֵ\xAE
+\xB9\xEDD\xB6\xB0\x90ұ?\x89	-/\x83F@sqh^\x99Jj%\xA8\x96\xA2N_ys\x95o\xAC\xB0\x97\xCBE\xF0A+AYC+XC+Dw\x9F˪\xBCv\xF1\xDCK*\x94\xC4d\xB7\x97\xF7\xAC\xC9!:\xCF\xC4Z]:	!:S\xA0\x914\xE9\x89\xB1%Ȫ\xF5\xB5\xF7u\xD5y((\xDEԥҜ<\xF5\xB9J])\xD2h\xDE\xD7z_\x836<\xFB}-7\xB3r\x95l\xE5\x9Bl\x94o\xB4[E\xD2\\xD9sk?\xB2&i\xCB\xB0AјP\xAF\xB96\xC5O\xD0PPT\xB0\xBC\xB6\xF7\xB3N\wSPB\xBD\xEAc>%\x887(\xC5\xC4\xF7\x88\x9B\xF0\x80O\xF4y4\xD1\xC1y–8\xEAR\xFA\xF5\x93\xAAlBC\xA5\xDA\xD9l}R0\xFB\xE1ٲe\xCBò\xD9m\xB4F\xCFC-ݧ=\xE2f\x8E;f\xC2\xCAx\xAD\x8Fe#{uW\xBA7\x94v3֞* \x874\x9A\xC6\xFF\xA0\xEA\xDA\xD6{\xABmj`\xCC\x8C\xAEt\xE5.ǫ\xF52|C\xD2\xFB\xFB\xA5U\xA1:1%\xE0\xB9\xFEQu\xDC��\xF3Y`������ \xA6[pR\xE3j2\xF1(\xC1\x86\xF5\xEB\x9E2
+琐P\xF0\xD0D{\xF6S\xC7_.'\xC1zI\x8F\xC0\x96U/\xC91\xF4|\x93D\xEB\xB0'\x93շ\x98N,\xA3 \xE9\xB9\xED\x888C\x848\xB2\x8F\xFA6\xC44]:\xE4%J&	>\xBFt\xBF\xA2F\xCFC-ѳ\xD0\xCDEϝP\x84wj\xD2Ke+\x84\xDB=,\xE6:\xC3 硤\xB6\xE0u��7\x96\xE6\x9E .W\x8F\xFA\xB4%\xB0
\ No newline at end of file

Added: trunk/LayoutTests/fast/images/resources/avifs02.avifs (0 => 274728)


--- trunk/LayoutTests/fast/images/resources/avifs02.avifs	                        (rev 0)
+++ trunk/LayoutTests/fast/images/resources/avifs02.avifs	2021-03-19 18:02:49 UTC (rev 274728)
@@ -0,0 +1,38 @@
+������(ftypavis��������avifavismsf1mif1miafMA1B������\xF2meta��������������(hdlr����������������pict������������������������libavif��������pitm����������������iloc��������D����������������\xDF����\xD4������(iinf����������������infe������������av01Color��������jiprp������Kipco������ispe��������������?������?������pixi��������������av1C\x81+��������colrnclx��������������ipma����������������\x83����\xBDmoov������xmvhd��������������\xDCt:��������\xDCt:������d��������������+����������������������������������������������������������������������������������������������@����������������������������������������������������������=trak������htkhd������������\xDCt:��������\xDCt:����������������������������+��������������������������������������������������������������������������������������������������@��?������?��������\xCDmdia������,mdhd��������������\xDCt:��������\xDCt:������d��������������+U\xC4����������(hdlr����������������p
 ict������������������������libavif������qminf������vmhd����������������������������$dinf������dref��������������������url ����������1stbl������stco������������������\xDF������stsc��������������������������+������������Hstsz����������������������+����\xD4������\x8F������\xA9������\x87������\x87������\xC7������\x8E������\xB9������\xD4������\x94������\xB5������\xE5������\x94������stss��������������������������stts��������������������+������������\x85stsd��������������������uav01��������������������������������
 ����������������?��?��H������H��������������
+AOM Coding��������������������������������������������\xFF\xFF������av1C\x81+��������colrnclx������������\xC6mdat��
++������\xAF\xDFs"2\xC0����\xDD+#\x82\xBFM\xD0\xC9\xE5_\xFF\xFF\xFER\x94\xCB\xFB\xB8\x9A\x885\x88\xBBԨ\xA5\xEB^\x9A\x88\xA8\x8A\x8A^\x9A\x8A^\xB5\xEB3\xEF\xFF\xFC\xD7O:W7\xC3Y\xEAi]pjȬW\xACWpj\xC5pj\xC9*"zV\xFC]C\xAE\xBA\x85r\xB6\xEB&|\x99\xF0[\xA1n\x90dʖ:hNrm\xB4\xE0g\xC1\x9F \x94\xD4o~\xDBnz\xC2\xE7[\x9E\xB0\x85\xB9\xEB\xF2\xE6~M\xE0\x8E\xC6Ԛ\xEEy\xEE\xDAH#\xDCN>]\xEFQ{\xDD~\xFD\xFA\xED\xDF߮\xDE<,Lu\xB9F<;\xF8oa\xBD\x86\xF6\xE0\xF0\xC0\xCC\xF4%\xDF{‘Y)\x90)9\x91Y\x91"\x90)\x93\x91Y)\xDB\xC0\x93A\x91o%a\xF4[E\xE1tqPC\x86H\x8F\xDDL~a\Z`+\xD0]	\xDFn\xF6K8\x9B\xEF䱞\xBBK\x9E\xB5\xEB]\x85i\xEBK\xF4\xB9봹\xEC\xCF\x9F3]KK}\x94\xF3\xEF��\xE4ณ\xDD/>\xF0��\xEF\xCF>\xEF\xCF:\xF4)\xD0+|\xC53i(\xFC\xF4G\xCA?|\xA3\xF0\x99+\xE7\xC1\xD2+r\xF0\x91\xC3s\xA9Χ:\xB2+u~\x9C7\xAA8;
+Hp\xEE3\xB8ᄆ\xEE8a&\xB3v\x8F2?r\xA9ٝC\xFF\x801��8\xE0@ \xB0\xCBNR5\x85\xFB\xAC\x90\x99R\xB9d#.\x9Fz6r\x80M\xE8m\x9E]\xED\xE9\xF5ڥ\xDE\xCC \xC2!\xEE\xDEp\xAE\xEE!\xEE.\xE2\xEE:\x86\x96|\xDD]\xCF?\xE4_\x89\xF8\xEB\xA5\xE4q\xA1\xB0K~;\xB07\xE2~;\xE9\xF1W_P!\x92)\x8D\xCDn\xD1\x96Jx\xD9d\xA7\x8D\x96Jx\xD9d\xAD\xBC\xC5z\xFD\x94\xF8\x82u\x93K\xEE\xE5˗.\\xB9r\x88\xC3+\xF2\xAD\xFEy\xD7\xE1\xE8\xC06l\x9A\xC8\x9E\x8E\xFA;\xE8nY\xBA4\xEF\x9B.\xE4\x8C:(\xB3\x9E΀J>\x91%\x84a\xE2\x9F;\xDD~\xFD\xFA\xED۷~\xFD\xFBYy\xC3e\x9C6\x9C-\xD0&\x97\xF3Y\xC9\xD2\xD0-\xD1\xFD/\xD2\xFD/\xD2\xFD@\xD6\xE1\xBE-\xD5\xE0w\x88S?I\xF4\xE6\xE3\xCF<\xDEn<\xF3\xCF<\xDEl\xE6\xCEn<\xE2u\xB6ߴ\x874\xCF\xEBe\x9Fr\xE3\x90\xD9>\xE0{\x81\xEE p\x81\xC2\xEE>\xBD\xAD\xF9\xB2Q9\xBCUF\x88_\xBF'o\xBA\xB0\xF8'\xE5\xC4[]7\xE55\xD3~S]7\xE5_\x95b^\x8D\xB3|\xC6l\xBF\x9F!6}\xC2\xFE}}\xF5\xF7\xD7\xC5\xDA<s\xB4\xEFa\xEFb5Zݱ\xA0\xBD\xEC~I��\x87\x98E\xCCG?��\x8
 9��
 \xF0\x90I��\x89
+1\x87Ӝ\xE0\xFC,N\xD0\xDF\xE3d6pi\x8F\xC6\xE0\xFF\x90icd6r\xE3Ⴒ\xEA\x80p\x80mDQ\xA2\xD7\xD9ٹ6}\xDF_}}\xF5\xF0\xBF\x82\xFE\xA3\xA1\xE0+\xEC7\xC1\xE0+\xEC\x9E\xC0IV\x8C\xC4F\xBC\xF7\xBC\xF7dsl\xA9i(t\xA1\xBE\xE5\xFB\x99(t\xA1\xBE\xE6\x91\xA1-\xBD\xA9:m\xBD\xA9^cv\x95\xE67Z\x92,\x81\xF3\xF8\x8C\xFA\xD3\xFB\x99\xA02j\x937\xEAۋnM\xFA\xB6\xE4ߴ\x83\x9B}\xB9\xEE\xF3\x8C\x9D\xDEH\xEF'\xA7k^\xE3\xEEH\xFBt\xB1\xF3z\xC9\xDB\xE7\xE7\xA2\xF9\xBD0n\x9A6W\xCDr4\xFF,р��2\x8A0\x81������\x8D������\xD0
+#\xC8\x95u]\x8E\xD9m\xF9;ϫ7\xB8\xC2K,\xA0,IL\xD3[ϕ4
+Pu\xBB"\xEAZGcc\xC6?1\xB5\xAD~\xDA_@\x90%\xE6\xBCß\xCEau\x9Fye \xE0ׇ\xF3\x97wL\xF5+ŚxOP \xF7\xF3N?F\xE4\xE8s=gŸ\x9E)o\xB8Jq\xB54\x82\xFC\xFF\x8CU\xBB^\xBE\x84a<\x81��2\xA40����\x8D������\xCE0\xA3\xA0Rʸ&\xB6_hDҮ\xE1\xB62%\x82.+\x8C~\xBF\xFD-\x96V\xF3\xF1\xE1\xF5)\xA6+\x91)\xABt\xCA[2FE\xAFQ>\xC4y)>d4@J\xFF[Nœ\x90"\x9E\xCE$8CG5\x8E\xD6W\x94p\xE5\xE2\xAEx\xAF\x82\xE1\xD4h\x86\xFCn\x89\x85#\xE2;-	5+\xF9\x80m\xFD3\xDFW\\xA9\xE5F\xC0\xE4\xC8cZB\xF1ӓ\xCFO\x96	\xD7%4\xBE\xACo\x97\x8Ag\xEB\xA2h&\xD5��2\x820����\x8D������ɤ\xEBY\xB0\xD3g\xFC͎\x8Ds\xA5:\xF9P\x95(:\xBCdƊT\xE1\xD7\xE8\xFE\x8E&\xEF\xF0\xE7X\xBB\xA0\xF8>\x83\xE0\xCFv'\xEA\xE4\xC6o\xF3\xF6\x8E|\xC8R\x88\xEA
+b\x83\xC7\xE8m\xFC=\x90W\xFC\xD3\xC1\xCB
+\xB0\xB7>e\x89pC\xE8/lKW\xFE[-4\xA7\xD2)\x9A_pVeQ\xC9	\xB0ٝ?\xF1E=o狼\xDBͽYp��2\x820��\x8D������\xC88@\x86\xBCZ\xE4̀\xFC\xFDH\xCC\xCĆ\xD92-9\xEEى\x85R\xBE\xA5\xC9Y(\xBA\x9F;\xC1R+_\xD6^\xCE"!Vu\xD5 \x97\xD3\xC0\xAEa\x9DLp|\xC8\xFFAP\x9E\x8FUVI\xDBL,\xB9\xE1\xE34\xF0˸\xD8e#D;\xBCQ\xFA\xFDc=\x8B\xB1\xFC#m\xE5\xC5\xE5\xE8\xFDf\xEC\xFDl\xBCB\x8C2\xF1\x8B\xC4E\x80��2\xC20#��\x8D������Ŋ\xCFmb|9K\xB5\xA7 \xC1\xCA:\xC1ŧ\x9F\xC1=\xBC\xDA6pF\xF7\xD9\xCDǞy\xE5\xFCbĆ\xEA\xEBH\xFE\xC4ddb\xDE\xC0\xADb\x92\xAE \xEF\xCD\xCEPv+\xD2\xDDWqwq}!\xF0\x89e\xBA\xF7qL\xF3AMr\xFAO\xA8\xAA\xAA\xAA\xAA\xAA\xAC]\xB8\xC2%\xDD6\xE1\xDC\xFF\xFF\xFBwwwwwx\xA4'\xE8\xA7\xBF+\xB0\xB1iQ\x95o6\xF3o7\\x94\x99P\xA1\xAD5a݋\xAA+\xD1Ҭ\x90^r\xA7$\x94\xBC\xC6$0\xDCˏ\x93o\xB5\xB9\x95K\x8Fo\xB5\xB9\xB9\xB9\xD8��2\x890 ,��\xA6\x8D������\xC2U\xC6/8vR\xF1Ae2\xA1p;\xE0p.p.p.p.p.\x8Fp.qȹI3\xDA<\xFE\x9D]\x82\xD1\xFBZC\xBC\x85\xFD\x85\xFD\x85\xFD\x
 84) \xE5~\x9
 8[#u%\x85\xB1\xE1\xE1\xE1\xE1\xE1\xE1\xE20;\xE2\xCE$\x88l\xE2Q\x8E\xB4Z\xBCZ\xE3=r\x89Q\x9D\xEB\x88\xE0\xBET\xC1߱\xB6\xE1\xCD-------------6U\xD6��2\xB40@5!8\x8D������\xD8\xE7f\xDA\xFE+\xF8x!7\xCE&\x99㗫\xEF\xBC[\xF90\xE5\xEA\xF6\x8Eۛ\xDA8\xBD\xA3\xB6\xE6\xF1\xCF\xF8\x8BZn\xC2\xD6.\xBCn\x9Cf\xF9\xD0uGQ\xCAreD$m\xC7z\xFA\xFC\xEB`\xE9\xC1\xA4\x9E\x8C\xAB\x8Ax\xDE;
+⸮(+\xE3	h+\x8A~6&\xE5<Y\xB0\xB3\xC5\xC1\xFEĸ握\xA9\xEAB\xDF\xCCnZ~u\xB4rbij2%\xFC\xAE\x99\xF3\xE8\xFC\x8F\xC6\xC8\xC1\xAF\xBE8\xBC\xC3GK\xA4\xB0JJr\xC1)'\x82䤞	I\xE0\xB9:X\xE8��2\xCF0 >Aʍ������\xE0\xF8z\x97\x80\xC9��\xF6Y\xA7\x99\xB6\xE9\xC88c\x88\x9C\x83\x88\x9C\x9A\x8BY\xEFQp\x9C\xC3\xE1\xC43Ԡy\x87\xA5J\xA5J!\xAD\xBD]\xB4+\xF8\x8DӠ\xEB:\xCEsx\xE08N\x93\x9C\xE29M㋭\xBE@/\xCE#OۋQU\x9E\xF1Y\xED\xA1`X\xEF\x9E\xF4H\xD1+\xE2\x91ez2\x97q\x97s4\x92\xE5,\xE3K\xC42\xACC#\xBA0+\xA3Բ\xACC.\xCA\xE3\xD5`Ӣ#8Ѵ\xD9۝Eca\xA7̝\xC5\xFB6\xA8>f\x8B\xE9nMJ\xFEK\xC4\xD6\xC9ː\xD9
+\x9C\xB9
+\x9C\xC31\x8A\xF6Y\x93\xF9\xFD\xB9\xD3[=\xB35\xB3?\xF1\x80��2\x8F0$b\\x8D������\xD6\x86B\xC5/s/g\xDE\xF7\x93U\xFA\xBA\xAB\xFE\xB0X\x96\xA0\x89j
+\xEA\xB0X\x96\xA0\xB0"Z\x82!\xD3\\xFC5B\x98.N
+\xB7\xAD܈dV\xDCڷ\xAC\xB3A\x90g\xD2\xC7\xE1\x90H\xEAW\x90\x90\x90\xDCl\x90;\xE9\xF3ԅ\xD1,\x86\xAA\xC2l\xA5\x82\xC5\xC3e\x94>\xB0\xBA\xC3eǗFi\xE7\xF1\xBCß\xCC9\xFCß\xCC9\xFCô\xE7\xF3 \xA1\xC0��2\xB00(\x82\xEE\x8D������\xB8\xB9g\xCB\xE9=\x98\xEA\xA8E\xCEϬ\xB7\xCBp\xEC-í\xFC\x97\xB7\xEF\xEB%\xC4D+b\xBA\xBF\xB3G\x81\xAF\xF0Lҿ\xD3\xEF\xBD\xF6\xBE\xCD?\xD3\xEF{\xDE\xF7\xBD\xEF\x8FϢT<D3D0\xB8\x8Dn\x90a\xA6\xA8\xFC!5\xC2@\xA7Uq/\x80\xD5g\x97\xB8c	\x9C\x860\x99\xC6^\xD9Ѱyal]>\xF5\xF9\xC3u\xEEϴ\xA0J\x9A\xB0Fr\x9C\xA7d\xE1\x88[\x88tq\xF9\xC7\xD7.\x9C\xF9r\xEBoX\x94\x9C'	\xC2o\xA6	\xBE\x97\x86\xFA^\x85\xE1xaȔ��2\xE00,\xA3r\x8D������\xB6\xAEg\xCAh\xA4G,s\x88L\x93\xC78\x844s\x88@\x84\xC9<s\x88Q\xECH\x98n\xEF\xF9\xAF\xCE\xE7\xC1\xBF\xB5d\xFD\xE2\xBBE\x96S\xB3\x9F9b{v\xEC˾\x9C\xB2&؛n>\x97}\xA0蛋UH\xC1 6\xBD\xF9w\x92> \xA5\xE18\xE0z	>\x84\xE1\x82?\xA0V\xB1\xB8,\xE4(BBM	3\xB42aK	1!9\xA1f\xA8/\xAA\x96\xB0t \x97\xAC\x
 DE\xD5{
 UE\xE2\x94{T\x84R\x8D\xDC\xEF\xFA_i\x96߷\xFBw\x8FM\xEC\xDE\xCD\xF47+\xF48n\x8E\xE7\x8D\xF0dЧ?\x95\xFE\xC1/\x9D\xACy\xD8\xDAmZ\xD1덖\xD3\xFD\xC9l\x96\xC9m?\xF1\xBF\xF1h\xE3\xFF \xB5 ��2\x8F00#Ô\x8D������\xB2\xE2\xD7_\xED>҇q\x87.\xD3\xED>\xD3\xED(q\x87r\xED>҇7\xF6\xF3t\xE5\xF3{\x84\xE2\x84dK\xAFc\xAB\xE5\xD2\xFB#\x88\xDFv?K\x87,S\xEA\xEA\x97\xBA\xA8.\xB6/O\xB5\x89\x9B,a\x93Z\x9F\xF4\xFBO\xB5\xA0Y\xFFP9_}\xAA\xCDr\xB4\xF2\xC1O4\xF2	\x87\xD6\xFB\xB6ˬ \x8C\xFB\xADKWH\xE7Li\x8Ci\xF6\x98\xC1\xB6\x98\xC1\xB6\x9Fj:
\ No newline at end of file

Modified: trunk/LayoutTests/platform/gtk/TestExpectations (274727 => 274728)


--- trunk/LayoutTests/platform/gtk/TestExpectations	2021-03-19 17:48:47 UTC (rev 274727)
+++ trunk/LayoutTests/platform/gtk/TestExpectations	2021-03-19 18:02:49 UTC (rev 274728)
@@ -115,6 +115,7 @@
 # Temporarily skip avif related tests until the gtk port enables avif as default.
 fast/images/avif-image-decoding.html [ Skip ]
 fast/images/avif-as-image.html [ Skip ]
+fast/images/animated-avif.html [ Skip ]
 
 #////////////////////////////////////////////////////////////////////////////////////////
 # End of PASSING tests. See below where to put expected failures.

Modified: trunk/Source/WebCore/ChangeLog (274727 => 274728)


--- trunk/Source/WebCore/ChangeLog	2021-03-19 17:48:47 UTC (rev 274727)
+++ trunk/Source/WebCore/ChangeLog	2021-03-19 18:02:49 UTC (rev 274728)
@@ -1,3 +1,39 @@
+2021-03-19  ChangSeok Oh  <[email protected]>
+
+        Animated AVIF support
+        https://bugs.webkit.org/show_bug.cgi?id=222804
+        <rdar://problem/75362181>
+
+        Reviewed by Philippe Normand.
+
+        This change implements animation of the avif sequence. The decoding approach
+        is similar to ones for other image formats, i.e., decoding frames in BGRA pixels
+        then bit-copying them into ScalableImageDecoderFrame. The decoded frames are cached
+        for future use. The repetition is missing in this change. It will be addressed
+        in separate patches.
+
+        The added avif animation test compares the last frame of each avifs and a static
+        avif image. The embeded avifs images are originated from corresponding webp images
+        for animated-webp.html, and encoded with timescale 100 (i.e., the duration of each frame
+        is 0.01s). The total duration and the track duration are same so the added avifs samples
+        are supposed to be played one time.
+
+        Test: fast/images/animated-avif.html
+
+        * platform/image-decoders/avif/AVIFImageDecoder.cpp:
+        (WebCore::AVIFImageDecoder::repetitionCount const):
+        (WebCore::AVIFImageDecoder::findFirstRequiredFrameToDecode):
+        (WebCore::AVIFImageDecoder::frameBufferAtIndex):
+        (WebCore::AVIFImageDecoder::isComplete):
+        (WebCore::AVIFImageDecoder::tryDecodeSize):
+        (WebCore::AVIFImageDecoder::decode):
+        * platform/image-decoders/avif/AVIFImageDecoder.h:
+        * platform/image-decoders/avif/AVIFImageReader.cpp:
+        (WebCore::AVIFImageReader::decodeFrame):
+        (WebCore::AVIFImageReader::imageCount const):
+        (WebCore::AVIFImageReader::~AVIFImageReader): Deleted.
+        * platform/image-decoders/avif/AVIFImageReader.h:
+
 2021-03-19  Martin Robinson  <[email protected]>
 
         scroll-snap-stop: always not respected during momentum scrolling

Modified: trunk/Source/WebCore/platform/image-decoders/avif/AVIFImageDecoder.cpp (274727 => 274728)


--- trunk/Source/WebCore/platform/image-decoders/avif/AVIFImageDecoder.cpp	2021-03-19 17:48:47 UTC (rev 274727)
+++ trunk/Source/WebCore/platform/image-decoders/avif/AVIFImageDecoder.cpp	2021-03-19 18:02:49 UTC (rev 274728)
@@ -37,18 +37,48 @@
 
 AVIFImageDecoder::~AVIFImageDecoder() = default;
 
+RepetitionCount AVIFImageDecoder::repetitionCount() const
+{
+    // FIXME: Repetition of avifs is tricky. We deal with it in webkit.org/b/223127
+    // To make the animation tests reliable, we animate avifs one time for now.
+    return RepetitionCountOnce;
+}
+
+size_t AVIFImageDecoder::findFirstRequiredFrameToDecode(size_t frameIndex)
+{
+    // The first frame doesn't depend on any other.
+    if (!frameIndex)
+        return 0;
+
+    size_t firstIncompleteFrame = frameIndex;
+    while (firstIncompleteFrame > 0) {
+        if (m_frameBufferCache[firstIncompleteFrame - 1].isComplete())
+            break;
+        --firstIncompleteFrame;
+    }
+
+    return firstIncompleteFrame;
+}
+
 ScalableImageDecoderFrame* AVIFImageDecoder::frameBufferAtIndex(size_t index)
 {
-    if (index)
+    const size_t imageCount = frameCount();
+    if (index >= imageCount)
         return nullptr;
 
-    if (m_frameBufferCache.isEmpty())
-        m_frameBufferCache.grow(1);
+    if ((m_frameBufferCache.size() > index) && m_frameBufferCache[index].isComplete())
+        return &m_frameBufferCache[index];
 
-    auto& frame = m_frameBufferCache[0];
-    if (!frame.isComplete())
-        decode(frame, isAllDataReceived());
-    return &frame;
+    if (imageCount && m_frameBufferCache.size() != imageCount)
+        m_frameBufferCache.resize(imageCount);
+
+    for (size_t i = findFirstRequiredFrameToDecode(index); i <= index; ++i) {
+        if (m_frameBufferCache[i].isComplete())
+            continue;
+        decode(i, isAllDataReceived());
+    }
+
+    return &m_frameBufferCache[index];
 }
 
 bool AVIFImageDecoder::setFailed()
@@ -57,22 +87,36 @@
     return ScalableImageDecoder::setFailed();
 }
 
+bool AVIFImageDecoder::isComplete()
+{
+    if (m_frameBufferCache.isEmpty())
+        return false;
+
+    for (auto& frameBuffer : m_frameBufferCache) {
+        if (!frameBuffer.isComplete())
+            return false;
+    }
+    return true;
+}
+
 void AVIFImageDecoder::tryDecodeSize(bool allDataReceived)
 {
     if (!m_reader)
         m_reader = makeUnique<AVIFImageReader>(this);
     m_reader->parseHeader(*m_data, allDataReceived);
+
+    m_frameCount = m_reader->imageCount();
 }
 
-void AVIFImageDecoder::decode(ScalableImageDecoderFrame& frame, bool allDataReceived)
+void AVIFImageDecoder::decode(size_t frameIndex, bool allDataReceived)
 {
     if (failed())
         return;
 
     ASSERT(m_reader);
-    m_reader->decodeFrame(0, frame, *m_data);
+    m_reader->decodeFrame(frameIndex, m_frameBufferCache[frameIndex], *m_data);
 
-    if (allDataReceived && !m_frameBufferCache.isEmpty() && frame.isComplete())
+    if (allDataReceived && !m_frameBufferCache.isEmpty() && isComplete())
         m_reader = nullptr;
 }
 

Modified: trunk/Source/WebCore/platform/image-decoders/avif/AVIFImageDecoder.h (274727 => 274728)


--- trunk/Source/WebCore/platform/image-decoders/avif/AVIFImageDecoder.h	2021-03-19 17:48:47 UTC (rev 274727)
+++ trunk/Source/WebCore/platform/image-decoders/avif/AVIFImageDecoder.h	2021-03-19 18:02:49 UTC (rev 274728)
@@ -43,6 +43,8 @@
 
     // ScalableImageDecoder
     String filenameExtension() const final { return "avif"_s; }
+    size_t frameCount() const final { return m_frameCount; };
+    RepetitionCount repetitionCount() const final;
     ScalableImageDecoderFrame* frameBufferAtIndex(size_t index) final;
     bool setFailed() final;
 
@@ -50,9 +52,13 @@
     AVIFImageDecoder(AlphaOption, GammaAndColorProfileOption);
 
     void tryDecodeSize(bool allDataReceived) final;
-    void decode(ScalableImageDecoderFrame&, bool allDataReceived);
+    void decode(size_t frameIndex, bool allDataReceived);
+    bool isComplete();
+    size_t findFirstRequiredFrameToDecode(size_t frameIndex);
 
     std::unique_ptr<AVIFImageReader> m_reader { nullptr };
+
+    size_t m_frameCount { 0 };
 };
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/platform/image-decoders/avif/AVIFImageReader.cpp (274727 => 274728)


--- trunk/Source/WebCore/platform/image-decoders/avif/AVIFImageReader.cpp	2021-03-19 17:48:47 UTC (rev 274727)
+++ trunk/Source/WebCore/platform/image-decoders/avif/AVIFImageReader.cpp	2021-03-19 18:02:49 UTC (rev 274728)
@@ -36,9 +36,7 @@
 {
 }
 
-AVIFImageReader::~AVIFImageReader()
-{
-}
+AVIFImageReader::~AVIFImageReader() = default;
 
 void AVIFImageReader::parseHeader(const SharedBuffer::DataSegment& data, bool allDataReceived)
 {
@@ -108,7 +106,13 @@
     }
 
     buffer.setHasAlpha(avifRGBFormatHasAlpha(decodedRGBImage.format));
+    buffer.setDuration(Seconds(m_avifDecoder->imageTiming.duration));
     buffer.setDecodingStatus(DecodingStatus::Complete);
 }
 
+size_t AVIFImageReader::imageCount() const
+{
+    return m_avifDecoder->imageCount;
 }
+
+}

Modified: trunk/Source/WebCore/platform/image-decoders/avif/AVIFImageReader.h (274727 => 274728)


--- trunk/Source/WebCore/platform/image-decoders/avif/AVIFImageReader.h	2021-03-19 17:48:47 UTC (rev 274727)
+++ trunk/Source/WebCore/platform/image-decoders/avif/AVIFImageReader.h	2021-03-19 18:02:49 UTC (rev 274728)
@@ -41,6 +41,7 @@
 
     void parseHeader(const SharedBuffer::DataSegment&, bool allDataReceived);
     void decodeFrame(size_t index, ScalableImageDecoderFrame&, const SharedBuffer::DataSegment&);
+    size_t imageCount() const;
 
 private:
     RefPtr<WebCore::AVIFImageDecoder> m_decoder;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to