1f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)# Copyright 2014 The Chromium Authors. All rights reserved.
2f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
3f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)# found in the LICENSE file.
4f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
5f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)import logging
6f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)import os
7f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)import unittest
8f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
9116680a4aac90f2aa7413d9095a592090648e557Ben Murdochfrom telemetry import benchmark
10f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)from telemetry.core import bitmap
11116680a4aac90f2aa7413d9095a592090648e557Ben Murdochfrom telemetry.core import platform
12f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)from telemetry.core import util
13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)from telemetry.core import video
14f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
15f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
16f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class VideoTest(unittest.TestCase) :
17f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  @benchmark.Disabled
19f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  def testFramesFromMp4(self):
20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    host_platform = platform.GetHostPlatform()
21f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
22f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    try:
23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      host_platform.InstallApplication('avconv')
24f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    finally:
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      if not host_platform.CanLaunchApplication('avconv'):
26f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)        logging.warning('Test not supported on this platform')
27f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)        return  # pylint: disable=W0150
28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    vid = os.path.join(util.GetUnittestDataDir(), 'vid.mp4')
30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    expected_timestamps = [
31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      0,
32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      763,
33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      783,
34f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      940,
35f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      1715,
36f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      1732,
37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      1842,
38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      1926,
39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      ]
40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    video_obj = video.Video(vid)
42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    # Calling _FramesFromMp4 should return all frames.
44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    # pylint: disable=W0212
45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    for i, timestamp_bitmap in enumerate(video_obj._FramesFromMp4(vid)):
46f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      timestamp, bmp = timestamp_bitmap
47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      self.assertEquals(timestamp, expected_timestamps[i])
48f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      expected_bitmap = bitmap.Bitmap.FromPngFile(os.path.join(
49f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)          util.GetUnittestDataDir(), 'frame%d.png' % i))
50f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      self.assertTrue(expected_bitmap.IsEqual(bmp))
51