You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
131 lines
3.8 KiB
131 lines
3.8 KiB
# 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()
|