| # Copyright 2016 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """An adapter to remotely access the video facade on DUT.""" |
| |
| import os |
| import tempfile |
| |
| |
| class VideoFacadeRemoteAdapter(object): |
| """VideoFacadeRemoteAdapter is an adapter to remotely control DUT video. |
| |
| The Autotest host object representing the remote DUT, passed to this |
| class on initialization, can be accessed from its _client property. |
| |
| """ |
| def __init__(self, host, remote_facade_proxy): |
| """Construct a VideoFacadeRemoteAdapter. |
| |
| @param host: Host object representing a remote host. |
| @param remote_facade_proxy: RemoteFacadeProxy object. |
| |
| """ |
| self._client = host |
| self._proxy = remote_facade_proxy |
| |
| |
| @property |
| def _video_proxy(self): |
| """Gets the proxy to DUT video facade. |
| |
| @return XML RPC proxy to DUT video facade. |
| |
| """ |
| return self._proxy.video |
| |
| |
| def send_playback_file(self, path): |
| """Copies a file to client. |
| |
| The files on the client side will be deleted by VideoFacadeNative |
| after the test. |
| |
| @param path: A path to the file. |
| |
| @returns: A new path to the file on client. |
| |
| """ |
| _, ext = os.path.splitext(path) |
| _, client_file_path = tempfile.mkstemp( |
| prefix='playback_', suffix=ext) |
| self._client.send_file(path, client_file_path) |
| return client_file_path |
| |
| |
| def prepare_playback(self, file_path, fullscreen=True): |
| """Copies the html file and the video file to /tmp and load the webpage. |
| |
| @param file_path: The path to the file. |
| @param fullscreen: Plays the video in fullscreen. |
| |
| """ |
| client_file_path = self.send_playback_file(file_path) |
| self._video_proxy.prepare_playback(client_file_path, fullscreen) |
| |
| |
| def start_playback(self, blocking=False): |
| """Starts video playback on the webpage. |
| |
| Before calling this method, user should call prepare_playback to |
| put the files to /tmp and load the webpage. |
| |
| @param blocking: Blocks this call until playback finishes. |
| |
| """ |
| self._video_proxy.start_playback(blocking) |
| |
| |
| def pause_playback(self): |
| """Pauses playback on the webpage.""" |
| self._video_proxy.pause_playback() |
| |
| |
| def dropped_frame_count(self): |
| """ |
| Gets the number of dropped frames. |
| |
| @returns: An integer indicates the number of dropped frame. |
| |
| """ |
| return self._video_proxy.dropped_frame_count() |
| |
| |
| def prepare_arc_playback(self, file_path, fullscreen=True): |
| """Copies the video file to be played into container. |
| |
| User should call this method to put the file into container before |
| calling start_arc_playback. |
| |
| @param file_path: Path to the file to be played on Server. |
| @param fullscreen: Plays the video in fullscreen. |
| |
| """ |
| client_file_path = self.send_playback_file(file_path) |
| self._video_proxy.prepare_arc_playback(client_file_path, fullscreen) |
| |
| |
| def start_arc_playback(self, blocking_secs=None): |
| """Starts playback through Play Video app. |
| |
| Before calling this method, user should call set_arc_playback_file to |
| put the file into container and start the app. |
| |
| @param blocking_secs: A positive number indicates the timeout to wait |
| for the playback is finished. Set None to make |
| it non-blocking. |
| |
| """ |
| self._video_proxy.start_arc_playback(blocking_secs) |
| |
| |
| def pause_arc_playback(self): |
| """Pauses playback through Play Video app.""" |
| self._video_proxy.pause_arc_playback() |
| |
| |
| def stop_arc_playback(self): |
| """Stops playback through Play Video app.""" |
| self._video_proxy.stop_arc_playback() |