| // Copyright 2021 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // @dart=2.12 |
| |
| import 'dart:core'; |
| |
| import 'package:logging/logging.dart'; |
| |
| import 'sl4f_client.dart'; |
| |
| final _log = Logger('virtual_camera'); |
| |
| class VirtualCameraSl4fException implements Exception { |
| final String message; |
| |
| const VirtualCameraSl4fException(this.message); |
| |
| @override |
| String toString() => 'VirtualCameraSl4fException: $message'; |
| } |
| |
| class VirtualCamera { |
| final Sl4f _sl4f; |
| const VirtualCamera(this._sl4f); |
| |
| /// Adds a stream config to the virtual device. |
| /// |
| /// By default, this will serve empty streams to the stream config. Otherwise, |
| /// this function can be used to add a stream config. |
| Future<void> addStreamConfig(int index, int width, int height) { |
| _log.info('addStreamConfig($index, $width, $height)'); |
| |
| try { |
| return _sl4f.request('virtual_camera_facade.AddStreamConfig', { |
| 'index': index, |
| 'width': width, |
| 'height': height, |
| }); |
| } on Exception catch (e) { |
| throw VirtualCameraSl4fException( |
| 'addStreamConfig - Adding stream config with index ${index.toString()}, width ${width.toString()}, and height ${height.toString()} returned with error. Details: $e'); |
| } |
| } |
| |
| /// Adds the config added using addStreamConfig to the device watcher. |
| /// |
| /// Once the virtual camera sources are set up and configured, this function |
| /// will expose it to the DeviceWatcher, essentially putting the video stream |
| /// in the device's view. |
| Future<void> addToDeviceWatcher() { |
| _log.info('addToDeviceWatcher()'); |
| |
| try { |
| return _sl4f.request('virtual_camera_facade.AddToDeviceWatcher', {}); |
| } on Exception catch (e) { |
| throw VirtualCameraSl4fException( |
| 'addToDeviceWatcher - Adding to device watcher returned with error. Details: $e'); |
| } |
| } |
| } |