普通文本  |  131行  |  3.85 KB

# 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()