<!DOCTYPE html>
<html>
<head>
 <!-- Use a <meta> viewport, refer to http://crbug.com/598949 -->
 <meta name="viewport" content="width=device-width, minimum-scale=1.0">
 <style> img { margin: 5px; } </style>
</head>

<img src="resources/ycbcr-420-fast-int-progressive.jpg" title="ycbcr-420-fast-int-progressive.jpg">
<img src="resources/ycbcr-420-float-progressive.jpg" title="ycbcr-420-float-progressive.jpg">
<img src="resources/ycbcr-420-float.jpg" title="ycbcr-420-float.jpg">
<img src="resources/ycbcr-420-progressive-smooth.jpg" title="ycbcr-420-progressive-smooth.jpg">
<img src="resources/ycbcr-420-progressive.jpg" title="ycbcr-420-progressive.jpg">
<img src="resources/ycbcr-420.jpg" title="ycbcr-420.jpg">
<img src="resources/ycbcr-422-float.jpg" title="ycbcr-422-float.jpg">
<img src="resources/ycbcr-422.jpg" title="ycbcr-422.jpg">
<img src="resources/ycbcr-440-float.jpg" title="ycbcr-440-float.jpg">
<img src="resources/ycbcr-440.jpg" title="ycbcr-440.jpg">
<img src="resources/ycbcr-444-float.jpg" title="ycbcr-444-float.jpg">
<img src="resources/ycbcr-444.jpg" title="ycbcr-444.jpg">

<pre id="results"></pre>

<script>
if (window.testRunner) {
  testRunner.dumpAsTextWithPixelResults(); // This test must include the image renderings.
  testRunner.waitUntilDone();
}

window.onload = function() {
  var images = document.getElementsByTagName('img');

  function detailsForImage(image) {
    return image.width + 'x' + image.height + ' ' + image.title;
  }

  for (var i = 0; i < images.length; ++i)
    results.innerHTML += detailsForImage(images[i]) + '\n';

  if (window.testRunner)
    testRunner.notifyDone();
};
</script>
</html>
