Title: [207523] trunk
Revision
207523
Author
jer.no...@apple.com
Date
2016-10-19 00:07:26 -0700 (Wed, 19 Oct 2016)

Log Message

Source/WebCore:
[Mac][MSE] Movies with a 'mehd' box have a zero-duration
https://bugs.webkit.org/show_bug.cgi?id=163641

Reviewed by Darin Adler.

Test: media/media-source/media-source-init-segment-duration.html

The canonical (ISO/IEC 14496-12:2012) way to signal the duration of a fragmented media file is to add a
'mehd' box to the 'mvex' container box specifying the duration of the fragment. Support this through the
AVAsset -overallDurationHint property.

* platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
(WebCore::SourceBufferPrivateAVFObjC::didParseStreamDataAsAsset):
* platform/spi/mac/AVFoundationSPI.h:

LayoutTests:
[Mac][MSE] Movies with a 'mvex' box have a zero-duration
https://bugs.webkit.org/show_bug.cgi?id=163641

Reviewed by Darin Adler.

* media/media-source/content/test-fragmented-manifest.json:
* media/media-source/content/test-fragmented.mp4:
* platform/mac/TestExpectations:

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (207522 => 207523)


--- trunk/LayoutTests/ChangeLog	2016-10-19 07:00:10 UTC (rev 207522)
+++ trunk/LayoutTests/ChangeLog	2016-10-19 07:07:26 UTC (rev 207523)
@@ -1,3 +1,14 @@
+2016-10-19  Jer Noble  <jer.no...@apple.com>
+
+        [Mac][MSE] Movies with a 'mvex' box have a zero-duration
+        https://bugs.webkit.org/show_bug.cgi?id=163641
+
+        Reviewed by Darin Adler.
+
+        * media/media-source/content/test-fragmented-manifest.json:
+        * media/media-source/content/test-fragmented.mp4:
+        * platform/mac/TestExpectations:
+
 2016-10-18  Ryosuke Niwa  <rn...@webkit.org>
 
         Import the latest custom elements tests from W3C

Modified: trunk/LayoutTests/media/media-source/content/test-fragmented-manifest.json (207522 => 207523)


--- trunk/LayoutTests/media/media-source/content/test-fragmented-manifest.json	2016-10-19 07:00:10 UTC (rev 207522)
+++ trunk/LayoutTests/media/media-source/content/test-fragmented-manifest.json	2016-10-19 07:07:26 UTC (rev 207523)
@@ -1,18 +1,18 @@
 {
     "url": "content/test-fragmented.mp4",
     "type": "video/mp4; codecs=\"mp4a.40.2,avc1.4d281e\"",
-    "init": { "offset": 0, "size": 1215 },
+    "init": { "offset": 0, "size": 1231 },
     "duration": 10.327753,
     "media": [
-        { "offset": 1215,   "size": 67526, "timecode": 0.000000, "duration": 1.041668 },
-        { "offset": 68741,  "size": 72683, "timecode": 1.016916, "duration": 1.024752 },
-        { "offset": 141424, "size": 78499, "timecode": 2.015374, "duration": 1.026294 },
-        { "offset": 219923, "size": 77358, "timecode": 3.013832, "duration": 1.027835 },
-        { "offset": 297281, "size": 80748, "timecode": 4.012290, "duration": 1.029377 },
-        { "offset": 378029, "size": 78038, "timecode": 5.010748, "duration": 1.030919 },
-        { "offset": 456067, "size": 82223, "timecode": 6.009206, "duration": 1.032461 },
-        { "offset": 538290, "size": 78331, "timecode": 7.007664, "duration": 1.034003 },
-        { "offset": 616621, "size": 80736, "timecode": 8.006122, "duration": 1.035545 },
-        { "offset": 697357, "size": 77752, "timecode": 9.004580, "duration": 1.044899 }
+        { "offset": 1231,   "size": 67526, "timecode": 0.000000, "duration": 1.041668 },
+        { "offset": 68757,  "size": 72683, "timecode": 1.016916, "duration": 1.024752 },
+        { "offset": 141440, "size": 78499, "timecode": 2.015374, "duration": 1.026294 },
+        { "offset": 219939, "size": 77358, "timecode": 3.013832, "duration": 1.027835 },
+        { "offset": 297297, "size": 80748, "timecode": 4.012290, "duration": 1.029377 },
+        { "offset": 378045, "size": 78038, "timecode": 5.010748, "duration": 1.030919 },
+        { "offset": 456083, "size": 82223, "timecode": 6.009206, "duration": 1.032461 },
+        { "offset": 538306, "size": 78331, "timecode": 7.007664, "duration": 1.034003 },
+        { "offset": 616637, "size": 80736, "timecode": 8.006122, "duration": 1.035545 },
+        { "offset": 697373, "size": 77752, "timecode": 9.004580, "duration": 1.044899 }
     ]
 }

Modified: trunk/LayoutTests/media/media-source/content/test-fragmented.mp4 (207522 => 207523)


--- trunk/LayoutTests/media/media-source/content/test-fragmented.mp4	2016-10-19 07:00:10 UTC (rev 207522)
+++ trunk/LayoutTests/media/media-source/content/test-fragmented.mp4	2016-10-19 07:07:26 UTC (rev 207523)
@@ -1,5 +1,5 @@
-$ftypisomisomiso2avc1iso6mp41\x9Bmoovlmvhd\xE8@\xD5trak\tkhd@\x80\xE0qmdia mdhdK\xC7-hdlrvideVideoHandlerminfvmhd$dinfdrefurl \xDCstbl\x90stsd\x80avc1\x80\xE0HH\xFF\xFF*avcCM@\xFF'M@\xA9\xB6\xD4µ\xEF|(\xDE	\xC8sttsstscstszstco\xA8trak\tkhd@Dmdia mdhd\xACD\xC7-hdlrsounSoundHandler\xEFminfsmhd$dinfdrefurl \xB3stblgstsdWmp4a
 \xACD3esds\x80\x80\x80"\x80\x80\x80@\xE8S\x80\x80\x80\x80\x80\x80sttsstscstszstcoHmvex trex trexbudtaZmeta!hdlrmdirappl-ilst%\xA9toodataLavf56.15.102\xD8moofmfhdtraf$tfhd9\xBF b tfdt\xD8trun
-\xE0b  }@D@a\xA2@,\xCF@#@>\x90@\xC1@\x8D\xEF@2@\xD2\xAD@{"@\xB0\x8C \xA8traf$tfhd9\xBF.tfdthtrun*\xD2\xCD.\xD3\xFC0@\x89Z4Du^H;vK+$ftypisomisomiso2avc1iso6mp41\xABmoovlmvhd\xE8@\xD5trak\tkhd@\x80\xE0qmdia mdhdK\xC7-hdlrvideVideoHandlerminfvmhd$dinfdrefurl \xDCstbl\x90stsd\x80avc1
 \x80\xE0HH\xFF\xFF*avcCM@\xFF'M@\xA9\xB6\xD4µ\xEF|(\xDE	\xC8sttsstscstszstco\xA8trak\tkhd@Dmdia mdhd\xACD\xC7-hdlrsounSoundHandler\xEFminfsmhd$dinfdrefurl \xB3stblgstsdWmp4a\xACD3esds\x80\x80\x80"\x80\x80\x80@\xE8S\x80\x80\x80\x80\x80\x80sttsstscstszstcoXmvexmehd' trex trexbudtaZmeta!hdlrmdirappl-ilst%\xA9toodataLavf56.15.102\xD8moofmfhdtraf$tfhd9\xAF b tfdt\xD8trun
+b  }@D@a\xA2@,\xCF@#@>\x90@\xC1@\x8D\xEF@2@\xD2\xAD@{"@\xB0\x8C \xA8traf$tfhd9\xAF.tfdthtrun*\xCF\xED.\xD3\xFC0@\x89Z4Du^H;vK 9,4kPunkH\xD5\xCFnk{\x9FndT\xF5\xF6(\xEEmdat\x8D\xBB\xA0@\x80\x87\xF4N\xCD
 Kܡ\x94:\xC3ԛ\x80%\xB8 !\xFF\xFF\xFE&(\xC0p,\x80’\xC08@aD\xCE\xCF8\x80J[g\x80\x80\x80`L\xB1\xF8x
 Id\x96I o[\xC0/\xE0p.\xA0\xD9\xFF\x80 \x85$\x92I$\x907\xAD\x80\xE0\A\xB2\xFE\xE0
@@ -599,8 +599,8 @@
 \x89f_==\x98O\xDA \x95Ԅ\xF2~\xFEf\xAA\xA0\xAB\xB0\x97\xACc\xDFY\xDFfhW\xE2\x8D\xE9E~*\xDD\xC0!\xDD=\x98!̀w(\xB6l\x9Aqd\xA1?\xF6\x9A7\xB0\xCDo)|\xB8\xF4\xBB\xD5&\x84\xF9\xEBr\xEA\xE4\xCFZ\x91\x8E΃\x96g
 \xA2\xC5\xC1\xBA\xE4\xD6\xD7\xDB\xFFm\xC0+T	]ғ\xD2uOf\xF3m\xD5\xC0jJ\xA6\xEC\xDB\xF9\xF6\xFFy\xA7:\xB4\xD3\xEBep\xF0\xC6mۄ\x8A*\xFC\x86Lrǯ\xBF\xC5Bey\xD6F=\xBA(\x93\x9Aq2
 i\x88\x90EߜH4\xE7h{\xB6P\xD9׃\xB0‘\xE9\x877\xE9_uE.m\xD6\xCD\xDB9\xB2\xFCN\xB0\xC32x@O3dlG-\xC4 \x86ᛰ\x9D\xE3\xE2p#\xFF\x94\xEA;`\xC1>\L\xEFL\xF5`\x80\xE8i\xBAO\x87\xD6\x87\xFD\xAFZ\xDA\x96\xF9+v\xC4S֖\xC05\xFEy\xEF݆\xD4pG\xAEE-ښ\x94\xF0TF\xE5\xF7\xFD\xEC\xEE\xFCݷ\xCC$r\xE9b1k\xC5P }\xB4\xA1\xB6\xA1\x91\x8C\x80eC\x8B\xE6F2\x81\xC04moofmfhdtraf$tfhd9\x85 e5tfdtK\xD8trun
-<e5 a@\xA5\xDD@\xFA@h\x96@ER@Hi@\x99@\xD6\xE1@E@\xF1\xC0@\xBB~@D\x85 traf$tfhd9\x85jtfdt\xAF.\xC4trun+\xDC\xF1jpJV\xB6\x83tj\x83\x8C\x91\x9BpKUn\x8Bp\xAB\xA1\x8F\fr\x99z\x80|f\xB8?8\x82GHP_`J`\xB7mdat\x87\xF4N\xCD
+\xC4 \x86ᛰ\x9D\xE3\xE2p#\xFF\x94\xEA;`\xC1>\L\xEFL\xF5`\x80\xE8i\xBAO\x87\xD6\x87\xFD\xAFZ\xDA\x96\xF9+v\xC4S֖\xC05\xFEy\xEF݆\xD4pG\xAEE-ښ\x94\xF0TF\xE5\xF7\xFD\xEC\xEE\xFCݷ\xCC$r\xE9b1k\xC5P }\xB4\xA1\xB6\xA1\x91\x8C\x80eC\x8B\xE6F2\x81\xC04moofmfhdtraf$tfhd9\xD1 e5tfdtK\xD8trun
+e5 a@\xA5\xDD@\xFA@h\x96@ER@Hi@\x99@\xD6\xE1@E@\xF1\xC0@\xBB~@D\x85 traf$tfhd9\xD1jtfdt\xAF.\xC4trun+ڵjpJV\xB6\x83tj\x83\x8C\x91\x9BpKUn\x8Bp\xAB\xA1\x8F\fr\x99z\x80|f\xB8?8\x82GHP_`J`\xB7mdat\x87\xF4N\xCD
 Kܡ\x94:\xC3ԛ\x80\xD3%\xB8  \xDF\xFF\xFF\x89\x8A	\xF0\x81)`\x81$\xCE\xCF8\x80@\x94\xB7<\xF0\x81$\xCC}\x87\x80\xD0kn\xB6\xD97\xAD\x8808\xCB\xF8\xC0\xE0/\xFF\xE3\xF0\xD0k\xAE\xBA\xEB\xA0o[\xC0@\xF2\xFE08\xCB\xFF\xF8\xFCt뮺\xE8\xD6\xC0p\x80|\xBF\x81\xC0@\xF2\xFF\xFE?@F\xBA뮺\xF5\xB0\xC0\xE0/\xE0p\x80|\xBF\xFF\x8F\xC0@Q\xAE\xBA뮁\xBDl08\xCB\xF8\xC0\xE0/\xFF\xE3\xF0\xD0k\xAE\xBA\xEB\xA0o[\xC0@\xF2\xFE08\xCB\xFF\xF8\xFCt뮺\xE8\xD6\xC0p\x80|\xBF\x81\xC0@\xF2\xFF\xFE?@F\xBA뮺\xF5\xB0\xC0\xE0/\xE0p\x80|\xBF\xFF\x8F\xC0@Q\xAE\xBA뮁\xBDl08\xCB\xF8\xC0\xE0/\xFF\xE3\xF0\xD0k\xAE\xBA\xEB\xA0o[\xC0@\xF2\xFE08\xCB\xFF\xF8\xFCt뮺\xE8\xD6\xC0p\x80|\xBF\x81\xC0@\xF2\xFF\xFE?@F\xBA뮺\xF5\xB0\xC0\xE0/\xE0p\x80|\xBF\xFF\x8F\xC0@Q\xAE\xBA
 \xBDl08\xCB\xF8\xC0\xE0/\xFF\xE3\xF0\xD0k\xAE\xBA\xEB\xA0o[\xC0@\xF2\xFE08\xCB\xFF\xF8\xFCt뮺\xE8\xD6\xC0p\x80|\xBF\x81\xC0@\xF2\xFF\xFE?@F\xBA뮺\xF5\xB0\xC0\xE0/\xE0p\x80|\xBF\xFF\x8F\xC0@Q\xAE\xBA뮁\xBDl08\xCB\xF8\xC0\xE0/\xFF\xE3\xF0\xD0k\xAE\xBA\xEB\xA0o[\xC0@\xF2\xFE08\xCB\xFF\xF8\xFCt뮺\xE8\xD6\xC0p\x80|\xBF\x81\xC0@\xF2\xFF\xFE?@F\xBA뮺\xF5\xB0\xC0\xE0/\xE0p\x80|\xBF\xFF\x8F\xC0@Q\xAE\xBA뮁\xBDl08\xCB\xF8\xC0\xE0/\xFF\xE3\xF0\xD0k\xAE\xBA\xEB\xA0o[\xC0@\xF2\xFE08\xCB\xFF\xF8\xFCt뮺\xE8\xD6\xC0p\x80|\xBF\x81\xC0@\xF2\xFF\xFE?@F\xBA뮺\xF5\xB0\xC0\xE0/\xE0p\x80|\xBF\xFF\x8F\xC0@Q\xAE\xBA뮁\xBDl08\xCB\xF8\xC0\xE0/\xFF\xE3\xF0\xD0k\xAE\xBA\xEB\xA0o[\xC0@\xF2\xFE08\xCB\xFF\xF8\xFCt뮺\xE8\xD6\xC0p\x80|\xBF\x81\xC0@\xF2\xFF\xFE?@F\
 xBA뮺\xF5\xB0\xC0\xE0/\xE0p\x80|\xBF\xFF\x8F\xC0@Q\xAE\xBA뮁\xBDl08\xCB\xF8\xC0\xE0/\xFF\xE3\xF0\xD0k\xAE\xBA\xEB\xA0o[\xC0@\xF2\xFE08\xCB\xFF\xF8\xFCt뮺\xE8\xD6\xC0p\x80|\xBF\x81\xC0@\xF2\xFF\xFE?@F\xBA뮺\xF5\xB0\xC0\xE0/\xE0p\x80|\xBF\xFF\x8F\xC0@Q\xAE\xBA뮁\xBDl08\xCB\xF8\xC0\xE0/\xFF\xE3\xF0\xD0k\xAE\xBA\xEB\xA0o[\xC0@\xF2\xFE08\xCB\xFF\xF8\xFCt뮺\xE8\xD6\xC0p\x80|\xBF\x81\xC0@\xF2\xFF\xFE?@F\xBA뮺\xF5\xB0\xC0\xE0/\xE0p\x80|\xBF\xFF\x8F\xC0@Q\xAE\xBA뮁\xBDl08\xCB\xF8\xC0\xE0/\xFF\xE3\xF0\xD0k\xAE\xBA\xEB\xA0o[\xC0@\xF2\xFE08\xCB\xFF\xF8\xFA\xF0CM\x93n$\xA4uY\x81\xC0\xF8p	\x97\xF082\xC0	\x86\xC49g\x9E\x97~#\x87\xF0878\xEB\xA0(\xD7[m\xB2 y\xBC \xC0\xE0s\xFE08\xDC\xFF\xA8\x9A뮺뮺뮺뮺뮺뮺뮺뮺뮺\xE3\xA2@A\xAE:\xE3\xAE\xE6\xF3\xE0p&\xE7\xF8\
 xC0\x80	\xB9\xC7`\xA0(\xD7]u\xD7@\xF3x08\xDC\xFF\x81\xC0@\xF7?\xEA&\xBF\xBE{\x86v\xC0LI\x9AA\xBA\xA06cV\xB3\xB0\x957\xFF\xDE\xD8\x88\xF6\xF8\xACw\xFF1NwĎ\xD8?\x95\xF8/\x88\xF47D	~\xFE\xC1\x9B\xF0t\xA5\x81\x8A\xAC\xAF\xF9\xA6c/\xAB)92w\xE0U\xCE^0\xC9V\xF3˥\xBE\xF0o\x86dU\xFBlN6j<x߸\xCB]\xAC\xE23\xBF\xFB\xC2%8Z\xC0\xDE#.\xFE>\xF4hS\xE0\xC01Lބ\x8A\xA8@`\xAA\xB1\xB1\xF19\xED$do\xF5\xED&f\xC1)\xC1\xCBP_`*\x88&6 \xFF\x83\xF5 \x84@VbŔ9Dž\xC8x\xE5\x8DLL1:[IOi\xC3d\xA7\xB9\xD7\x99\xC5J\xB0\x80k1f\xB7\xED\xC6\xC2ю4\x92 \xDA10\xB9d<\x86\xBE\xFB	\xB6*\xECVe\xDA\x88\x98֡\xAE\xC4p\xA6\xE4=\x8Cl\x84 \xF0̀a\xA8ܪ\xA1f[\xE7@@ -1200,9 +1200,9 @@
 \xE7\xE4Z\xEB\x8C\xE0\xE2\x97\xFFP\x8A\xE5\xBBN	(\x85\xC8<\xF2̳u\xEB\xF6\xCA\xAA\xF46r\xFAx\xD5U]\xB0\xAE\xCE\xDE\xF8z?\x9E\xD7\xEB\x95\xDCl\xC7O\\+W\x9Eoϼ%\xC69\xF6\xEFQ\xD3H\xE1\x98Mf\xE2\xBA\xE5.\xE0m]\xDB.S¯\xB1A$*\xF6\x8C\xAEَ\xAD\xC9u\xEAA?t\xFF\xE1A\xF3e;\xB1X9\x98"\xF4\xF8\xCA\xF7\Rnw*+\xD0Ƨ3\xF6\x8A\xE9tQ\xFA\xCF7:]\xAD\x80c\x82\xF8F\xBB\x8BS\x8F\x80i\xDF\xFF\xFA3
 \xF1$胣\x8F$\x95
 i\xB0\x85\xA8\x91\x88\x91\xC5[T,P\x91\xE0$\I>\xDB\xC5b\x90\x88}v*\xBC\xB4\xEC.\x86\xF9p\x8C9ˏ<\xC9\xD9TYD\x89f"\xCCtȪ\xB1\xE1bU-\xB0\x92\xEF<\x84\x892b\x90\xAD\xA4e2\x93\xF1p4moofmfhdtraf$tfhd9(p v\x99tfdt\x96\xD8trun
-<v\x99 
-@\x84\xFD@\xF6d@d\xEA@@\xA8@z\x92@\xAFA@mw@\x93@\xF5\xB8@ traf$tfhd9(patfdt[.\xC4trun+\xF5 a]s\xA0XNp|qk\x8C\x99\xD6rXESRi8D\x98LVd\x85R_\x92\x84e\x85\xE8\xBEP\x87m\x89\x9B\x9C0omdat\x87\xF4N\xCD
+\xB0\x92\xEF<\x84\x892b\x90\xAD\xA4e2\x93\xF1p4moofmfhdtraf$tfhd9*\xBC v\x99tfdt\x96\xD8trun
+v\x99 
+@\x84\xFD@\xF6d@d\xEA@@\xA8@z\x92@\xAFA@mw@\x93@\xF5\xB8@ traf$tfhd9*\xBCatfdt[.\xC4trun+\xF2\xE4a]s\xA0XNp|qk\x8C\x99\xD6rXESRi8D\x98LVd\x85R_\x92\x84e\x85\xE8\xBEP\x87m\x89\x9B\x9C0omdat\x87\xF4N\xCD
 Kܡ\x94:\xC3ԛ\x80h%\xB8  G\xFF\xFF\xE2b\x80\x83L\x80 zX\x80 y3\xCF\xF8 @\xF4\xB7<\xF0@\x81\xE4\xCC~\xC0q\xEE\xBE\xEB\xA4\xC0޶ @@\x99\x80\x80H\x80/\xFF\xE3\xF0\xF0{\xEF\xBE\xFB\xE0o[\xC0@$\xC0	\x97\xF08\x80\x802\xFF\xFE?@Ǿ\xFB\xEF\xBE\xF5\xB0@@\x99\x80\x80H\x80/\xFF\xE3\xF0\xF0{\xEF\xBE\xFB\xE0o[\xC0@$\xC0	\x97\xF08\x80\x802\xFF\xFE?@Ǿ\xFB\xEF\xBE\xF5\xB0@@\x99\x80\x80H\x80/\xFF\xE3\xF0\xF0{\xEF\xBE\xFB\xE0o[\xC0@$\xC0	\x97\xF08\x80\x802\xFF\xFE?@Ǿ\xFB\xEF\xBE\xF5\xB0@@\x99\x80\x80H\x80/\xFF\xE3\xF0\xF0{\xEF\xBE\xFB\xE0o[\xC0@$\xC0	\x97\xF08\x80\x802\xFF\xFE?@Ǿ\xFB\xEF\xBE\xF5\xB0@@\x99\x80\x80H\x80/\xFF\xE3\xF0\xF0{\xEF\xBE\xFB\xE0o[\xC0@$\xC0	\x97\xF08\x80\x802\xFF\xFE?@Ǿ\xFB\xEF\xBE\xF5\xB0@@\x99\x80\x80H\x80/\xFF
 \xE3\xF0\xF0{\xEF\xBE\xFB\xE0o[\xC0@$\xC0	\x97\xF08\x80\x802\xFF\xFE?@Ǿ\xFB\xEF\xBE\xF5\xB0@@\x99\x80\x80H\x80/\xFF\xE3\xF0\xF0{\xEF\xBE\xFB\xE0o[\xC0@$\xC0	\x97\xF08\x80\x802\xFF\xFE?@Ǿ\xFB\xEF\xBE\xF5\xB0@@\x99\x80\x80H\x80/\xFF\xE3\xF0\xF0{\xEF\xBE\xFB\xE0o[\xC0@$\xC0	\x97\xF08\x80\x802\xFF\xFE?@Ǿ\xFB\xEF\xBE\xF5\xB0@@\x99\x80\x80H\x80/\xFF\xE3\xF0\xF0{\xEF\xBE\xFB\xE0o[\xC0@$\xC0	\x97\xF08\x80\x802\xFF\xFE?@Ǿ\xFB\xEF\xBE\xF5\xB0@@\x99\x80\x80H\x80/\xFF\xE3\xF0\xF0{\xEF\xBE\xFB\xE0o[\xC0@$\xC0	\x97\xF08\x80\x802\xFF\xFE?@Ǿ\xFB\xEF\xBE\xF5\xB0@@\x99\x80\x80H\x80/\xFF\xE3\xF0\xF0{\xEF\xBE\xFB\xE0o[\xC0@$\xC0	\x97\xF08\x80\x802\xFF\xFE?@Ǿ\xFB\xEF\xBE\xF5\xB0@@\x99\x80\x80H\x80/\xFF\xE3\xF0\xF0{\xEF\xBE\xFB\xE0o[\xC0@$\xC0	\x97\xF08\x80\x802\xFF\xFE?@
 Ǿ\xFB\xEF\xBE\xF5\xB0@@\x99\x80\x80H\x80/\xFF\xE3\xF0\xF0{\xEF\xBE\xFB\xE0o[\xC0@$\xC0	\x97\xF08\x80\x802\xFF\xFE?@Ǿ\xFB\xEF\xBE\xF5\xB0@@\x99\x80\x80H\x80/\xFF\xE3\xF0\xF0{\xEF\xBE\xFB\xE0o[\xC0@$\xC0	\x97\xF08\x80\x802\xFF\xFE?@Ǿ\xFB\xEF\xBE\xF5\xB0@@\x99\x80\x80H\x80/\xFF\xE3\xF0\xF0{\xEF\xBE\xFB\xE0o[\xC0@$\xC0	\x97\xF08\x80\x802\xFF\xFE?@Ǿ\xFB\xEF\xBE\xF5\xB0@@\x99\x80\x80H\x80/\xFF\xE3\xF0\xF0{\xEF\xBE\xFB\xE0o[\xC0@$\xC0	\x97\xF08\x80\x802\xFF\xFE?@Ǿ\xFB\xEF\xBE\xF5\xB0@@\x99\x80\x80H\x80/\xFF\xE3\xF0\xF0{\xEF\xBE\xFB\xE0o[\xC0@$\xC0	\x97\xF08\x80\x802\xFF\xFE?@Ǿ\xFB\xEF\xBE\xF5\xB0@@\x99\x80\x80H\x80/\xFF\xE3\xF0\xF0{\xEF\xBE\xFB\xE0o[\xC0@$\xC0	\x97\xF08\x80\x802\xFF\xFE?@Ǿ\xFB\xEF\xBE\xF5\xB0@@\x99\x80\x80H\x80/\xFF\xE3\xF0\xF0{\xEF\xBE\xF
 B\xE0o[\xC0@$\xC0	\x97\xF08\x80\x802\xFF\xFE?\xB00\xB6\xE6\xDC\xE51\xBE\xA2F\x8F\xB8\xC0\xE0 `\xCB\xF8@@\x99`\xA0\xC8aԒ\x8By\x8F\xA6;\x87\xF08\x80\x8078\xEC<\x80\xE3\xDFu\xD7I\x81\xE6\xF0\x80	0n\xC0\xE0 `\xDC\xFF\xA8\x9A뮺뮺뮺뮺뮺뮺뮺뮺뮺\xE3\xA2\xC0a\xEF>\xF3\xEF\xE6\xF3\xE0p	 n\x81\xC0@$\x80	\xB9\xC7`\xE08\xF7\xDF}\xF7\xC0\xF3x\x90&\xE7\xFC  M\xCF\xFA\x89\xAF\xEF\x9E\xC5gT\xB1\x98\xE0<\xC0Ϭ\xBB\xAB{\xFA\x80>S\x94\x97r@\xD93\xF7\xC0@\xEA\x82\x9D놱\xE0\xFF\x98[\x85N:\x92\xAC\xD6?\xF0E\xA8S\xB2Zo\xDF\xD8\xA8.\x84\xEFi	~\x81\xF9\xC3\xE9׾\xE3[3?\xF7\xA9B\xB7LR\xFB\xAFL\x8B}\xE0b\xD1,[ H\xF8r\xDE6\xFC\xE0\x8F~\x93![(q\xC2\xD6ta	NI\xAF\xA7\xEBr\xE0S\xE0\xC0\x9E\x88\x98֡\x98\xAE\xCC\xC0eiMŀ \xD7܅~$o\xFF\xEF1"\x95\xF8\xCCļ-\xBF\xE8\x84\xDA0\x8Cw0#\xFF\x83\xF2!0G1\x9C\x80\xB5\x954P@\xD0a\x83\x82\xE4`
@@ -1857,8 +1857,8 @@
 \xF5\xD2\xD1F\xD2R\xF1\xFF\xDD2\xF7○\xBD1D\x91\xC5\xC1H\xB9&`Y"\xA7\xC4\xDDQ\xB2\xE5U\xB9\xFAn5]9HqYqE\xE7`\x96`\xF1\xE8Wb\x8A'(QH\xA4!\x9Dتà\x84\x86*\xCC\xE0j7\xB3\x93\x92\xF5\xF8}\xC4-c\x98-\xF2'U\xA7M\xCF\xB7I\x8D\x9E\xB6@\xB7\xDAL\xE3Q\x91\xCB\xA9\xE0\xDC\xD8v\xDF\xD6f\xB15\xD5,\xB2MG݌_e\x85vTœ1\xDDu\xFF()B\xADړ\xC5D\xAA\xF6&x\x86\x9E\xA9i\xEBW}Z\xF7b\xB8!\x9F\x9A\xF1-\xFCk\x9D\xE7,\x97\xD9x\xAE\xB4\xA5\xEDގ\xB2\xA5ܢ2\xE8C#	$\x81e\xAEй#N\xDFqE\xE30\xE9\xD1\xACi	\xE43\xFB\xA3\xDE |\xD0\xDD\xC3\xCC\xBC*\xFE\xBFO \xCF\xEE\xD6\xFC\xF3%f	\x9E\xEE\xCEw\xF5\xAB9s\x86\x91\xDDΛ\xDA0*\x97\&\xE2\xFEnu~y\xBA\x85&G\x95d4koܘ\xBDY
 \xFF\xE39\xE38\xB0\xADMxR\xDDx\xE2\x93b\xC0\xE3Κq\xF6h\xADT\xDEX\xD4\xD2T\xC9<\xF8\x8A\xA9a\xD9\xDEW4\xBAl\xF9-I\x83\xE1u#t]\xBC\x9E\x85\xE9l^\xBAxT\x8B\xB04moofmfhdtraf$tfhd9[ n\xB5tfdt\xE1\xD8trun
-<n\xB5 @n\xFE@WZ@\x9E\xD7@1\xE5@;@\xC3g@a@\x8A\xEF@\x98@5T@\x8F\xDB traf$tfhd9[otfdt.\xC4trun+\xEC\xA7ob\xFF\x81nu\x83\x8C\x87\xAE\x87\x9Ekk\xB1\x87\xB0\xB7\xB1\x81ks\xB3\x99\x8D\x93\xCD\x84Z50\x8F|k_\x81\x88lz+\xFAmdat\x87\xF4N\xCD
+I\x83\xE1u#t]\xBC\x9E\x85\xE9l^\xBAxT\x8B\xB04moofmfhdtraf$tfhd9]_ n\xB5tfdt\xE1\xD8trun
+n\xB5 @n\xFE@WZ@\x9E\xD7@1\xE5@;@\xC3g@a@\x8A\xEF@\x98@5T@\x8F\xDB traf$tfhd9]_otfdt.\xC4trun+\xEAkob\xFF\x81nu\x83\x8C\x87\xAE\x87\x9Ekk\xB1\x87\xB0\xB7\xB1\x81ks\xB3\x99\x8D\x93\xCD\x84Z50\x8F|k_\x81\x88lz+\xFAmdat\x87\xF4N\xCD
 Kܡ\x94:\xC3ԛ\x80%\xB8  E\xFF\xE2b\x80\x83L\x80 zX\x80 y3\xCF\xF8 @\xF4\xB7<\xF0@\x81\xE4\xCC}\x87\x80\x80(\x86\x93*L\x99\x907\xAD\x88\xF0/\xE0p\xF0\xB2\xFF\xFE?@\x80(iR\xA5J\x95z\xD8\xE0 6_\xC0\xE0 \xE0e\xFF\xFC~\x80PҥJ\x95*\xF5\xB0\xC0@<l\xBF\x81\xC0@<\xC0\xCB\xFF\xF8\xFC 
 \xA1\xA5J\x95*T \xEB`8\x80\x80x\xD9\x80\x80x\x80@@ -2607,8 +2607,8 @@
 \xE9U\x81\x8E҆өEZ7k\xE2母E\xDDoU\xE87r7;\xF4\xB6\xABl{\x8C.\x86$C\xC2k\xAA\x9F\xE7-\xB6b\x81U\xEC\xEDK9\x96cC\x9F\xA5\xD5\xE3\xCCP8`\xC6\xF7ۅ0\xE7\x8BA\x84\xA5+Dl\xE3t\xA0M0]\x8D\xAC%H\xAFSb\xD54\xA9\xF7\x9E\x8A\xE6\xDAzܮe嗷\x97)Z~\xBCM\xE9\xCD\xDB4v\xF1vL\xE2%4.3\x9C\xF7xX\xAF˒\x91\xB0\xAE}v\xAAQ['\xF7\x92*\xDA\xD8V\x95\xA3b\x91ۈ\x9F\xC0{\xEC?l; \xFC\xEBU\xA1;9\xFA\xAF\xDD+\x91Cb\xE4\xE3\x99\xDB\x8B\xB9*%\x8E\xDAu\xDF\xE3\xC9~Y\xC3;\xAC\xE3R\x9C\xDB1\x81x\xC8hd\x93\xB9W52\xE8\xE9녯\x9A\xC9j$$Qf\x86U\xA4\xC2u\x83[t\xE9\xD7\xAD\xC1yb\xBD	\xADG
 \xB2õ\xD2]_\xE0\xF1\xDF*\xE2m9c\x9D\xAF\xB4\x82\xB6.4p\x93F Z\xC3!#\x94\xB0@\x91\x94\xC07VecU\xF9Z:\xB4C\xD2j\xAC\xA5i\xBE̪hnts\xE0\xFD\x9D\x9D\xC7\xAE\x81Щ=\x95 \xB4\xFE7\xC1\xA2\xD4=\x98\xBA\xBBK\x91\xA3\xD6Nx\x81\xC5	k4>U}ˇ\xBF-\xF5L\xF5gp4moofmfhdtraf$tfhd9\x89A {%tfdt,\xD8trun
-<{% @YK@M\x87@\xEA@\xAC@\x9C\xD1@(@\x99\xAB@4\xB0@I-@\xAC@"\xFD traf$tfhd9\x89A\x92tfdt\xB3.\xC4trun+\xFD\x92\x91\x89\xBDpzr\xA5\x8F|\x91\xB2\xE0\xAD~t{[\x9F\x8D9DbYBo\xC0d}\xC9\xE7ppn\x82\x9A\x9098mdat\x87\xF4N\xCD
+\xF5L\xF5gp4moofmfhdtraf$tfhd9\x8B\x8D {%tfdt,\xD8trun
+{% @YK@M\x87@\xEA@\xAC@\x9C\xD1@(@\x99\xAB@4\xB0@I-@\xAC@"\xFD traf$tfhd9\x8B\x8D\x92tfdt\xB3.\xC4trun+\xFA\xD3\x92\x91\x89\xBDpzr\xA5\x8F|\x91\xB2\xE0\xAD~t{[\x9F\x8D9DbYBo\xC0d}\xC9\xE7ppn\x82\x9A\x9098mdat\x87\xF4N\xCD
 Kܡ\x94:\xC3ԛ\x80\x9E%\xB8  M\xFF\xE2b\x80\x84\xC0\x96\xC0@0<\xF0+\x80\xE0 \x80\xDC\xF0+\xC0p\xC0\x81\x84\xCC~\xA0
 L\xA92d\xC0޶ @@4l\xB6\xE1\xC0@4@\xCBa\xAF\xFE?` 
 \xA1\xA5J\x95*T@@ -3441,8 +3441,8 @@
 \x84\x81\xBF+\xC0I	%\x92\x97\xF3\xE9f\x96\x91\xA4\xC4\xC6ߣ\xE3<\xF0\x8C\xE9\xDBǚ,\xB18Ք\xE9iyQ{\xD9\xEC1\xE3SΧrtϜ\\xE9y\x9C*\xAC\x86\xFE\x8E\xD8\xFEWz\xAD\xE8*ak\xBC\xA0\xA9\x88h`\x88P\xCCR %Oڊ\xC7\xD4
 jg]w\xE5n\x9EZ\xB2"P\xAB\xD87Hi \xFET\xEAM|\x8B\xF9A\xFE){\xBD\xE8\xF9\xF3\x92\xBC\xDA\x9F\xE8\xC5߄\xB0'\xB5\xA6s6^\xA0\xBC`\x98\x87\xAF`\xFCѶ\xFCx>\xE3\xBCg_\x89>EC\xDD$\x8B\xB5JL\xE4(T\xE7[/Q\xD8\xF2\x94\xE0\xF2\x88\xC1\xD5t\xDE5w\xDD\x94X\xFCv\xF8\xEE\xC9\xDD"\x9DH0T\xE6@\xA0\xF1P=-\xAD\xD0\xE8*\xD0q\xF9\xFD=\xAC5\xDEǙ\xF3\xF0!\xA5\x9E\x94⁲\x84$ \x84\xF5\xDDk\xA9\xE1^z\xD2\xE2]\xB8j\xF4^\x99\x9B\x9F\x97\x9AT"\xE8:\xC9\xCD{w\xFFf\xD5[\x8E\xC5 v\xEF%Wu\xCEzi'<\x95\xADk\x8D!Di\x85\xAEY\xF1VJM\xCF\xDEB2\xA0k4\xECȽ\x9F*e\xFA\x88{j\xCC\xFE\xA4e)\x9E\xBB\xC3u\xC9xuM+\xE1\xAF\xC4b\xB9pv &\x89&\x98\xD8\xDA\x9E\c\xDE\xE1]GC\xD9\xE0\xBEhf\x95\x97\xA9-ۡ.ۭ\x84
 \xCFZR\xD2PdJ\x89B\x89\x89\xD6\xCE\xFAr\xD6\xE4\xE0\x92Kg\xC3P\xB2\x80\xC6q\x8E\xDDP	dmn\xF8\xAD*\xDF*v\x98\xA4Y0dW\xE6}	dEy\xDF\xF7h\x9A	\xB9/=\xFD\xD1na\xCAj\xD0ub\x87\xA18Z\xBD\xBD\x85`\xA6q\xCFÊ$I\xE5\xAAL\x81a!\x84 \x80\xF1\xD0&\xAFn4CJ\xD3S\xAE44̀\xE0\xEF_\xDAv\x9D\xCCM}N\xEE\xADJ\x85\xFF䮑7\x8E\xFC>?\xE6\xDE\xF9\x8E\x9E'ߑ,\xEB\xA7*߭\x84\xCCՄ`*7\xB5\xA1\xFBJ\xADx\xA6\C!޵\xA6\xCEԲ(Tu\xDFY\xBD\xE5*;\xBDIiv\xB6(\xE6\xE2\xC0\xE1W'\x824\x9CK\xCE\xCCx,b\xA7\x85e9\xA6\xE2:\xB8
-w\x9A*wf\xB8U\xC6Y\xA26\xBA蠪x\x9C\x98\xE3l\xAF\x874moofmfhdtraf$tfhd9ĭ n*tfdtw\xD8trun
-<n* @=@\x8E\xED@\xAF\xA7@\x82\xE7@\x84d@O|@\xD3@\xA5\x8D@s	n@\xF9\xFF@\\xD0 traf$tfhd9ĭvtfdt_.\xC4trun+\xEE\xB8vjc\xC1\x82\x81~\x84\x87\x98\xA9\x89\xDE\xC5ke\xB0\x9E\x92\xBE\xC7\x80sp\xB3\x9D\x8C\x9Amv\x8DNL5tm_w\x8Ey\x86.\xA2mdat\x87\xF4N\xCD
+w\x9A*wf\xB8U\xC6Y\xA26\xBA蠪x\x9C\x98\xE3l\xAF\x874moofmfhdtraf$tfhd9\xC6\xF9 n*tfdtw\xD8trun
+n* @=@\x8E\xED@\xAF\xA7@\x82\xE7@\x84d@O|@\xD3@\xA5\x8D@s	n@\xF9\xFF@\\xD0 traf$tfhd9\xC6\xF9vtfdt_.\xC4trun+\xEC|vjc\xC1\x82\x81~\x84\x87\x98\xA9\x89\xDE\xC5ke\xB0\x9E\x92\xBE\xC7\x80sp\xB3\x9D\x8C\x9Amv\x8DNL5tm_w\x8Ey\x86.\xA2mdat\x87\xF4N\xCD
 Kܡ\x94:\xC3ԛ\x80%\xB8  E\xFF\xE2b\x80\x83L\x80 zX\x80 y3\xCF\xF8 @\xF4\xB7<\xF0@\x81\xE4\xCC}\x87\x80\x80(\x86\x93*L\x99\x907\xAD\x88\xF0/\xE0p\xF0\xB2\xFF\xFE?@\x80(iR\xA5J\x95z\xD8\xE0 6_\xC0\xE0 \xE0e\xFF\xFC~\x80PҥJ\x95*\xF5\xB0\xC0@<l\xBF\x81\xC0@<\xC0\xCB\xFF\xF8\xFC 
 \xA1\xA5J\x95*T \xEB`8\x80\x80x\xD9\x80\x80x\x80@@ -4135,8 +4135,8 @@
 \xE0\xB8\xF6#x\x90;\xFB+\xE1+\xA5F#\x85\xD5
 \xC55Mf\xDBϏ*\xAE(\xAC\xCEoTa-;\xB2\xDB\xFA\xCA\xBA\xFB\x8AE\x9B\xB5Ux\xB3
 \xB7o\x85~\xE3O\xA8@\x8CYq\x99Lf\xC0\xF5\xEC\xEA;F\xB0:Ӎp\xE8\xD1@s7\xE2\xF4\xA3}\xB5kho8\x97\xFD\xBE9\xD9c\xC9\xEE\xBCح\xD2n\xCBi#b\xA7yy-qSDFC\x93,\xBD\xD2i']Մ\xBB\xAA\xC7g>\x97\\xE9^+\xCA`\xB9R\xFAi\^\x9AGT#\xB6\xCAև׺\x9B\x96\xF0;\xEF#\xBF\xB2(\xF9\x90მ\xA5>+),\x91NWј*\x82\x9E骥\xE1I\xFC"\l\x8E4moofmfhdtraf$tfhd9\xF5\x83 }tfdt\xC2\xD8trun
-<} M@\x9C'@w\xE4@\xBFH@\xC3\xF8@\xE6%@\xDC\x9D@\xAF\xB1@\x84S@\xC90@\x91@>\x9A traf$tfhd9\xF5\x83\x8Etfdt.\xC4trun+\x9F\x8E\x84N4\wa\x9C\x81t\x8F\xBC\xC7\xC8|\\x81_g'1C7\x9CGOksG:\xA0\x8Ay\xE1\xD9lpnx\x8F\x98>\xFBmdat\x87\xF4N\xCD
+qSDFC\x93,\xBD\xD2i']Մ\xBB\xAA\xC7g>\x97\\xE9^+\xCA`\xB9R\xFAi\^\x9AGT#\xB6\xCAև׺\x9B\x96\xF0;\xEF#\xBF\xB2(\xF9\x90მ\xA5>+),\x91NWј*\x82\x9E骥\xE1I\xFC"\l\x8E4moofmfhdtraf$tfhd9\xF7\xCF }tfdt\xC2\xD8trun
+} M@\x9C'@w\xE4@\xBFH@\xC3\xF8@\xE6%@\xDC\x9D@\xAF\xB1@\x84S@\xC90@\x91@>\x9A traf$tfhd9\xF7\xCF\x8Etfdt.\xC4trun+c\x8E\x84N4\wa\x9C\x81t\x8F\xBC\xC7\xC8|\\x81_g'1C7\x9CGOksG:\xA0\x8Ay\xE1\xD9lpnx\x8F\x98>\xFBmdat\x87\xF4N\xCD
 Kܡ\x94:\xC3ԛ\x80\xBA%\xB8  U\xFF\xE2b\x80\x84\x8CK\xE0  \x80\x81\xE4\xCEO (Ks\xC0@\xC7\xC0@@\xCC~ \x972\\xB9p7\xAD\x88 \x97\xF08\x80\x80\xA8l\xBF\xFF\x8F\xC0 \x992dɐ7\xAD\x80\xE0 "\xA0\xB2\xFE \x97\xFF\xF1\xF8@$\xA0\x93&L\x992\xF5\xB0@@T6_\xC0\xE0 "\xA0\xB2\xFF\xFE?@\x80dɓ&@޶\x80\x80\x88
@@ -4890,10 +4890,10 @@
 ]\xAC{a\xB0\xE6\x8A\xEE2,\xB5\xE7\xD7¹\xC0\x8D'\xB5e\xB36\xAE\x9E\x9Aд\xABN~9\xFDN\x85\xB49:y\x9E\x9F\x92\xAA\xF5g,"\x89\xBCKeE\xFE\xF5!\xAC\xF0j\xE6h\xB2\xBDӱ\xE6\xA1\xE59\xD8GG\xF3\xE6;ts@W\xA1\xA83|.4|\xD7\xEF\xA6۝\xEC\x8F\x9A"\xF7vp\xE27\xE6(p!\x{DC90}\xC8P\xB0\x94(\x81z\xF4\xE0\xEF\xD8!\xA2\xA5\xDDȜu-do\x90*LZ\xA7J\xFFS>H׼s\xC4\xE4\xBA\x95\xAE\x80Gߓs+\x84\xAC\xB4;\xD3\xCD\xE3\x9C!DSk@\x91\x8D\=\xE7K{\xE1\xAB="\xE2 9\x89\xB1\xA0D\xF5\xFC\x849\xB4\xA6J\xABw[\xEC
 :\xB5m\x8E}CS\xAF\x9FrQ^\xAF\xB1\xC1\x9C5\xCAq䱩\xEBe!	h\xF2x\xE8 \xAA\x9A8Gʄ\xAC\xDE\xE4\xFE\xF0vv\xD90\xEB\xA5M\xA7\x81v%U\x83x~lԱ_\xB5ܙ\x9D\xC1p\x91\xAE\xF9!\x89\xBB\xB2\xF7\xE3A9jh\x9A\xEF\xBF\xFE\xB2\xACY̖:ĵS<C\xEB\xB6	\xC7\xDC:\x85\xD8vc\xD0\xEE\xE4j\xE5\xFA-lZ\xB5\xBDI\x9B3ljx\xDAۢ\xF6\xA1U\x{DEC3}ABZ	X\xA8"!\x8E\x96
-{e\xAE\xDB\xEBR\xF8\xEAh3~\x8D\xDD}˳8\xABvN\xB7G\xDE\xF3g/^\xED\xA9q\xB4\xE4M\xA0V\xA4\xA8\xE31\xC2vLP'\\xAF\xFF\xD3\xC3\xE9\xCB	\xF8nN\xA4l\xBE\xBDS!\x90Ƞ	\xC4kg\xF6\x8C\x95\xF0\x9C\x9D\xEB\x91쾃\xA6\xEF$\x89]@,Lĺ#\xBB\xB4p\xA9\x8A\xB7b&\xA6\x877EƂ#Wp\xBB-g\x92ZEG\x99\xDF8\xB3\x86\x92~~&:܆\x95ȴ\xA6\xC0\xE04moofmfhdtraf$tfhd96\xB2 q\xE2tfdt+{e\xAE\xDB\xEBR\xF8\xEAh3~\x8D\xDD}˳8\xABvN\xB7G\xDE\xF3g/^\xED\xA9q\xB4\xE4M\xA0V\xA4\xA8\xE31\xC2vLP'\\xAF\xFF\xD3\xC3\xE9\xCB	\xF8nN\xA4l\xBE\xBDS!\x90Ƞ	\xC4kg\xF6\x8C\x95\xF0\x9C\x9D\xEB\x91쾃\xA6\xEF$\x89]@,Lĺ#\xBB\xB4p\xA9\x8A\xB7b&\xA6\x877EƂ#Wp\xBB-g\x92ZEG\x99\xDF8\xB3\x86\x92~~&:܆\x95ȴ\xA6\xC0\xE04moofmfhdtraf$tfhd98\xFE q\xE2tfdt \xD8trun
-<q\xE2 -@~z@Oh@\xD5\xBE@U)@\x8F\xC1@aO@\xCFQ@\xB9\x85@l\xDB@D@\x9F traf$tfhd96\xB2dtfdt\xB7.\xC4trun+\xF1\x8Cdfx\x98{uqxcv\x8Cj\xD5\x8ETM}\x85{\xEA\xA4\WJ\x87|~uk\x80\x8CF-4M\x88EEZfM_/\xC7mdat\x87\xF4N\xCD
+q\xE2 +@~z@Oh@\xD5\xBE@U)@\x8F\xC1@aO@\xCFQ@\xB9\x85@l\xDB@D@\x9F traf$tfhd98\xFEdtfdt\xB7.\xC4trun+\xEFPdfx\x98{uqxcv\x8Cj\xD5\x8ETM}\x85{\xEA\xA4\WJ\x87|~uk\x80\x8CF-4M\x88EEZfM_/\xC7mdat\x87\xF4N\xCD
 Kܡ\x94:\xC3ԛ\x80\xC2%\xB8  M\xFF\xE2b\x80\x84\xC0\x96\xC0@0<\xF0+\x80\xE0 \x80\xDC\xF0+\xC0p\xC0\x81\x84\xCC}\x87\x80\x80HA%̗.\ \xEBb@D\xC0e\xB0\xD7  &-\x86\xBF\xF8\xFC\x80\x80HA&L\x992d \xEB`\xE0 &\xA0r\xFE0\x97\xFF\xF1\xF8@$\xA0\x93&L\x992\xF5\xB0\xC0@T._\xC0\xE0 &\xA0r\xFF\xFE?@\x80dɓ&@޶\x80\x80\x98
@@ -5571,8 +5571,8 @@
 \xC4\xD6\xD6u8\xBDq%\xDA\xEDWԗ\x88\xFE\x9D'^\xBF\xF2;\xCC|$\x8EG\x8E\xC1i\xFDRt\xD8\xC0*\xA1\x8E\x89\xBD,S 1\xAC\x90\xE5\xD0͹\xE8V\x85r\xC4\xDC\xD8\xE2{\xE8N\xFB`\x8Ea\xF3\x82\xEC#\x90\xD7(F\x82\xCB\xA0;S\x8B\xFF\x9B\xA9nY#$\x98\x881])\xACkmIwB\x82 \xE0!ͶJĒ U% \xF9q\x94\xC9\xD0 \xC9}5\xAB\xE2I\xA1A\x81I@\xEEHZO\xDBf\xBDE\%\x98M$ִ\xE0Q\xE4R\x85\x91\x83%	\xD9U\xF4XTףu\x87{\xE9\x9C\xFB\xBB/$|\xB1\xF51\x94\xC1\xF6}\x8C\xA0\xBA\x85e\x81\xB0l\xEE|W\xCA8G;gƴ\xDA\xCB\xC3S\xAE7\xCA\xDB%|[\xEF8^\x9D\x95P$\xAF\xB8fKq<\xFD?	\x8C\xF4o\xB3\xB2\xBE\xEE\x82xîy\xE0vJ\xF9I=W\xB9\xEA\xF5\xA1\x89\xEE\x80a[\xE8\x9328I\xD8\xF2\x94BdT	R\xF0T\xAD=\xDB>̜ݤMiR93v+\xB6\xC8*x\xAA\xA3*(\xCE\xD7U\xD8&i.5"\xA0ea\x9DBo\xC0]\xE2ʄ\xD4Ի\xD7j\xC5A\xA3\xB6L\xA9۠\xFElˏ9.J\xEC๥\xE6p\xAC\xB8Uz\xBE\x8A\xF3M9$Ҍ\xA04Y49üh\x85[	\xA3\xCC\xCFX\xEE|\xAB\x92\xAE\xA2E\x98\xFD\xC1$]ʾv\x9C[HI\x95!\x96*\xD4\xD0
 \xB18\xF0!\x95\xC6&V\x81\xDFf\x9D\xF1\xBF\xA0ķr\xE7S\x89}Z\xE4\xDD\xE6Y\x86\xBAY}\x8Bz\xF3ח\xAFX~\xE5E\xA6ཉ\x87\x8A\xA0`\xA9\xD3ś$\xB7w\xEAu\xB5Q\x94\xD8D,\\xFF\xA8Q\x8A\xC3\xE0м6л
-\x81$8\xE5\xA4q\xAF&\xFB\xE7L\xDA\xF0\xB1\xAC\x86\x947\xF3z4zTK\x9D\x8E\xD2o\x84\xD51\xF3\x955\xA9*L\xAA'\x95)\x95\xC6)\xBCF!\xC2\xC1|\ˎ\xA3\xAB\xAF\x9Es\xBCޛ\xED\xAFJQMr\xE76\xBE\xDC]M\xFA9\xAF\xBF\xCF'\xA7\xABz\xE70\xA7\x8E\xDAKEj\xF7\xDA\xCA\xE7\x9DTV\xA1\xBBAҥz\xAA\xBE\xE4\xE5\xD539\x93Z\x8Akj\xB4\x95\x8E\xC8;\xFCd\xED\x8DQ\xAC-w.\xBAԎ\x99L9\xC5\xB2\x82pgP\x9A@\xE6\xEC\xEC{$lM\xA7\xAEh0\xBCN\x95\x97\xB2ܥ\xFBj\xE1\x9FS\x99pn֒\x90\x91\x96\x94\x8B P\xC8tP^\xA6\xD3$XH\x90\x90\x8A\xBD\xB54\xCB\xFB҇w>)K\xAAoʻ\x8E:\xB1\xF0\x8E\x84\xBF\xADҟu\x9FP\xF9\xC1u\xA2\xE65\xE5W\xAEA9\xDA	\xD5M\xDB^K<Bz\xAC\xEE4moofmfhd	traf$tfhd9	h\xAD }\xF8tfdtX\xD8trun
-<}\xF8 @\xBDu@\xA0@\xB7\x8B@\xA5$@FH@\xEA=@\x8B6@\x93\xBB@1+@\x9DM@)\xD5 traf$tfhd9	h\xADdtfdtc.\xC4trun+\xB1daJ\x9D>e\x85QZR@\xA6b\xF17BBmh\xFF:!-'><;6,DZO-xdy?#(\xDF@9,mdat\x87\xF4N\xCD
+\x81$8\xE5\xA4q\xAF&\xFB\xE7L\xDA\xF0\xB1\xAC\x86\x947\xF3z4zTK\x9D\x8E\xD2o\x84\xD51\xF3\x955\xA9*L\xAA'\x95)\x95\xC6)\xBCF!\xC2\xC1|\ˎ\xA3\xAB\xAF\x9Es\xBCޛ\xED\xAFJQMr\xE76\xBE\xDC]M\xFA9\xAF\xBF\xCF'\xA7\xABz\xE70\xA7\x8E\xDAKEj\xF7\xDA\xCA\xE7\x9DTV\xA1\xBBAҥz\xAA\xBE\xE4\xE5\xD539\x93Z\x8Akj\xB4\x95\x8E\xC8;\xFCd\xED\x8DQ\xAC-w.\xBAԎ\x99L9\xC5\xB2\x82pgP\x9A@\xE6\xEC\xEC{$lM\xA7\xAEh0\xBCN\x95\x97\xB2ܥ\xFBj\xE1\x9FS\x99pn֒\x90\x91\x96\x94\x8B P\xC8tP^\xA6\xD3$XH\x90\x90\x8A\xBD\xB54\xCB\xFB҇w>)K\xAAoʻ\x8E:\xB1\xF0\x8E\x84\xBF\xADҟu\x9FP\xF9\xC1u\xA2\xE65\xE5W\xAEA9\xDA	\xD5M\xDB^K<Bz\xAC\xEE4moofmfhd	traf$tfhd9	j\xF9 }\xF8tfdtX\xD8trun
+}\xF8 @\xBDu@\xA0@\xB7\x8B@\xA5$@FH@\xEA=@\x8B6@\x93\xBB@1+@\x9DM@)\xD5 traf$tfhd9	j\xF9dtfdtc.\xC4trun+udaJ\x9D>e\x85QZR@\xA6b\xF17BBmh\xFF:!-'><;6,DZO-xdy?#(\xDF@9,mdat\x87\xF4N\xCD
 Kܡ\x94:\xC3ԛ\x80\xCC%\xB8  U\xFF\xE2b\x80\x84\x8CK\xE0  \x80\x81\xE4\xCEO (Ks\xC0@\xC7\xC0@@\xCC~ \x972\\xB9p7\xAD\x88 \x97\xF08\x80\x80\xA8l\xBF\xFF\x8F\xC0 \x992dɐ7\xAD\x80\xE0 "\xA0\xB2\xFE \x97\xFF\xF1\xF8@$\xA0\x93&L\x992\xF5\xB0@@T6_\xC0\xE0 "\xA0\xB2\xFF\xFE?@\x80dɓ&@޶\x80\x80\x88
@@ -6312,11 +6312,9 @@
 \x81\xC4	K\xC2+\xA5.\x8C!\xB4\x8D\x91…h\xD3e\xCF\x8B3\x8A
 S<\x9D\xAC\xF0\xB5Y\xBBՉ)\x95\xB0&\x87\xF6R\xA9\x8B."\xD9K\xBA\xED\xE3\xEB\xED\xD9ٚ\x93r\xC0\xB7)\xA4)fm3U\xBE\x98\xF8&^X\xECk\xB0\x9DՌ\xA4\xF2\xE2Nԣ\xE7\xAC6\xC7;Q@\xDCޖJ\x818˂\x98*\xA0\xA8\xF5l\x86]ϓK\xCDK\xCB:\x9F\xBF\x9A\xAC\x98F\x9F\xC9\xB6$h\xFA\x8BA\xEC\xB4;\x95+	\x89\x85	M$g\xE58Ʃ\xB5Z\xBAZ\xC0\xCCE\xDD\xDFl\xD2\xF7\xB91!\x8F\x9E\xFE{\xC64+\xF8:ֻ\xBD\xFD\x91\x866-=\x84^{\xA3<@O[\xE9\xC5Tp\x87\xFC\x85?H\xB1]b\xEDl\xB1"\xE6M[\x91\x98+(\xECX<moofmfhd
 traf$tfhd9
-\xA4- rtfdt\xA3\xD8trun
-Dr Q@\x86\xCD@\x85\x8B@^l@u\xA8@H@\xCD/@=\x94@R@\x9C@6\xFC@\x85 traf$tfhd9
-\xA4-(tfdt.\xCCtrun-\xF5\xFC(:1<YY6Wbi{US\xA50-agE\xB1eA-ELE4[?[c	\xE7\(6(D>-|mdat\x87\xF4N\xCD
+\xA6a rtfdt\xA3\xD8trun
+r Q@\x86\xCD@\x85\x8B@^l@u\xA8@H@\xCD/@=\x94@R@\x9C@6\xFC@\x85 traf$tfhd9
+\xA6a(tfdt.\xCCtrun-\xF3\xB8(:1<YY6Wbi{US\xA50-agE\xB1eA-ELE4[?[c	\xE7\(6(D>-|mdat\x87\xF4N\xCD
 Kܡ\x94:\xC3ԛ\x80(%\xB8  M\xFF\xE2b\x80\x84\xC0\x96\xC0@0<\xF0+\x80\xE0 \x80\xDC\xF0+\xC0p\xC0\x81\x84\xCC}\x87\x80\x80HA%̗.\ \xEBb@D\xC0e\xB0\xD7  &-\x86\xBF\xF8\xFC\x80\x80HA&L\x992d \xEB`\xE0 &\xA0r\xFE0\x97\xFF\xF1\xF8@$\xA0\x93&L\x992\xF5\xB0\xC0@T._\xC0\xE0 &\xA0r\xFF\xFE?@\x80dɓ&@޶\x80\x80\x98
@@ -7038,9 +7036,7 @@
 \xE7\x8A\xCBC41\xF6\xF8ֆ\xBE\xEC\x8Ep\xDD\xCA\xD8X\xF6;m5\xB9I
 L\xC6\xF0 \xB8H\xA9@\xF5$\xEE\xF3\x9A&\xA7\xE6D\x90\xE4\xFB\x97i\xC2}x\xB2\xB8X\xA0\xA1L<\xD6; \xA6a\xC6\x91i\xE5lD\xA0\x98U\xC0\xC4mfra\xD6tfra
- \xBFN \x85\x99 (p\xE4 [/ \x89Az ĭ\xC5 \xF5\x83 6\xB2[ 	h\xAD\xA6 
-\xA4-\xD6tfra
-\xBF\xAF.\x85[.(p.[\xB3.\x89A_.ĭ.\xF5\x83\xB7.6\xB2c.	h\xAD.
-\xA4-mfro\xC4
\ No newline at end of file
+ \xCFN \x95\x99 (\x80\xE4 [#/ \x89Qz Ľ\xC5 \xF5\x93 6\xC2[ 	h\xBD\xA6 
+\xA4\xD6tfra
+\xCF\xAF.\x95[.(\x80.[#\xB3.\x89Q_.Ľ.\xF5\x93\xB7.6\xC2c.	h\xBD.
+\xA4mfro\xC4
\ No newline at end of file

Added: trunk/LayoutTests/media/media-source/media-source-init-segment-duration-expected.txt (0 => 207523)


--- trunk/LayoutTests/media/media-source/media-source-init-segment-duration-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/media/media-source/media-source-init-segment-duration-expected.txt	2016-10-19 07:07:26 UTC (rev 207523)
@@ -0,0 +1,10 @@
+This tests the ability of the SourceBuffer to detect the movie fragment duration from a 'mvex' header.
+
+RUN(video.src = ""
+EVENT(sourceopen)
+RUN(sourceBuffer = source.addSourceBuffer(loader.type()))
+RUN(sourceBuffer.appendBuffer(loader.initSegment()))
+EVENT(update)
+EXPECTED (video.duration == '10') OK
+END OF TEST
+

Added: trunk/LayoutTests/media/media-source/media-source-init-segment-duration.html (0 => 207523)


--- trunk/LayoutTests/media/media-source/media-source-init-segment-duration.html	                        (rev 0)
+++ trunk/LayoutTests/media/media-source/media-source-init-segment-duration.html	2016-10-19 07:07:26 UTC (rev 207523)
@@ -0,0 +1,49 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <title>media-source-init-segment-duration</title>
+    <script src=""
+    <script src=""
+    <script>
+    var loader;
+    var source;
+    var sourceBuffer;
+
+    function runTest() {
+        findMediaElement();
+
+        loader = new MediaSourceLoader('content/test-fragmented-manifest.json');
+        loader._onload_ = mediaDataLoaded;
+        loader._onerror_ = mediaDataLoadingFailed;
+    }
+
+    function mediaDataLoadingFailed() {
+        failTest('Media data loading failed');
+    }
+
+    function mediaDataLoaded() {
+        source = new MediaSource();
+        waitForEvent('sourceopen', sourceOpen, false, false, source);
+        waitForEventAndFail('error');
+        run('video.src = ""
+    }
+
+    function sourceOpen() {
+        run('sourceBuffer = source.addSourceBuffer(loader.type())');
+        waitForEventOn(sourceBuffer, 'update', sourceInitialized, false, true);
+        run('sourceBuffer.appendBuffer(loader.initSegment())');
+    }
+
+    function sourceInitialized() {
+        testExpected('video.duration', 10);
+        endTest();
+    }
+    </script>
+</head>
+<body _onload_="runTest()">
+    <div>
+        This tests the ability of the SourceBuffer to detect the movie fragment duration from a 'mvex' header.
+    </div>
+    <video controls></video>
+</body>
+</html>
\ No newline at end of file

Modified: trunk/LayoutTests/platform/mac/TestExpectations (207522 => 207523)


--- trunk/LayoutTests/platform/mac/TestExpectations	2016-10-19 07:00:10 UTC (rev 207522)
+++ trunk/LayoutTests/platform/mac/TestExpectations	2016-10-19 07:07:26 UTC (rev 207523)
@@ -1084,6 +1084,9 @@
 
 # This test times out.
 [ Yosemite+ ] media/media-source/media-source-seek-complete.html [ Timeout ]
+
+# <rdar://problem/18858636>
+media/media-source/media-source-init-segment-duration.html
 # --- End Media Source Tests ---
 
 # These tests used to only fail with WK2, but on Yosemite, they also fail with WK1.

Modified: trunk/Source/WebCore/ChangeLog (207522 => 207523)


--- trunk/Source/WebCore/ChangeLog	2016-10-19 07:00:10 UTC (rev 207522)
+++ trunk/Source/WebCore/ChangeLog	2016-10-19 07:07:26 UTC (rev 207523)
@@ -1,3 +1,20 @@
+2016-10-19  Jer Noble  <jer.no...@apple.com>
+
+        [Mac][MSE] Movies with a 'mehd' box have a zero-duration
+        https://bugs.webkit.org/show_bug.cgi?id=163641
+
+        Reviewed by Darin Adler.
+
+        Test: media/media-source/media-source-init-segment-duration.html
+
+        The canonical (ISO/IEC 14496-12:2012) way to signal the duration of a fragmented media file is to add a
+        'mehd' box to the 'mvex' container box specifying the duration of the fragment. Support this through the
+        AVAsset -overallDurationHint property.
+
+        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
+        (WebCore::SourceBufferPrivateAVFObjC::didParseStreamDataAsAsset):
+        * platform/spi/mac/AVFoundationSPI.h:
+
 2016-10-18  Darin Adler  <da...@apple.com>
 
         Move many miscellaneous classes from ExceptionCode to Exception

Modified: trunk/Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm (207522 => 207523)


--- trunk/Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm	2016-10-19 07:00:10 UTC (rev 207522)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm	2016-10-19 07:07:26 UTC (rev 207523)
@@ -490,8 +490,13 @@
     m_audioTracks.clear();
 
     SourceBufferPrivateClient::InitializationSegment segment;
-    segment.duration = toMediaTime([m_asset duration]);
 
+    if ([m_asset respondsToSelector:@selector(overallDurationHint)])
+        segment.duration = toMediaTime([m_asset overallDurationHint]);
+
+    if (segment.duration.isInvalid() || segment.duration == MediaTime::zeroTime())
+        segment.duration = toMediaTime([m_asset duration]);
+
     for (AVAssetTrack* track in [m_asset tracks]) {
         if ([track hasMediaCharacteristic:AVMediaCharacteristicLegible]) {
             // FIXME(125161): Handle in-band text tracks.

Modified: trunk/Source/WebCore/platform/spi/mac/AVFoundationSPI.h (207522 => 207523)


--- trunk/Source/WebCore/platform/spi/mac/AVFoundationSPI.h	2016-10-19 07:00:10 UTC (rev 207522)
+++ trunk/Source/WebCore/platform/spi/mac/AVFoundationSPI.h	2016-10-19 07:07:26 UTC (rev 207523)
@@ -23,6 +23,8 @@
  * THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+#pragma once
+
 #import "SoftLinking.h"
 #import <objc/runtime.h>
 
@@ -144,6 +146,7 @@
 #endif // !PLATFORM(IOS)
 
 // FIXME: Wrap in a #if USE(APPLE_INTERNAL_SDK) once these SPI land
+#import <AVFoundation/AVAsset.h>
 #import <AVFoundation/AVAssetResourceLoader.h>
 
 NS_ASSUME_NONNULL_BEGIN
@@ -154,4 +157,8 @@
 @property (nonatomic, nullable, retain) NSURLSession *URLSession;
 @end
 
+@interface AVAsset (AVAssetFragmentsPrivate)
+@property (nonatomic, readonly) CMTime overallDurationHint;
+@end
+
 NS_ASSUME_NONNULL_END
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to