blob: a787f32a0cbf0624aea58e74c5ce2e7d9e358147 [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef MEDIA_CAPTURE_VIDEO_ANDROID_VIDEO_CAPTURE_DEVICE_FACTORY_ANDROID_H_
#define MEDIA_CAPTURE_VIDEO_ANDROID_VIDEO_CAPTURE_DEVICE_FACTORY_ANDROID_H_
#include "media/capture/video/video_capture_device_factory.h"
#include <jni.h>
#include "base/android/scoped_java_ref.h"
#include "base/containers/flat_map.h"
#include "base/macros.h"
#include "media/capture/video/video_capture_device.h"
namespace media {
// VideoCaptureDeviceFactory on Android. This class implements the static
// VideoCapture methods and the factory of VideoCaptureAndroid.
class CAPTURE_EXPORT VideoCaptureDeviceFactoryAndroid
: public VideoCaptureDeviceFactory {
public:
static base::android::ScopedJavaLocalRef<jobject> createVideoCaptureAndroid(
int id,
jlong nativeVideoCaptureDeviceAndroid);
VideoCaptureDeviceFactoryAndroid();
VideoCaptureDeviceFactoryAndroid(const VideoCaptureDeviceFactoryAndroid&) =
delete;
VideoCaptureDeviceFactoryAndroid& operator=(
const VideoCaptureDeviceFactoryAndroid&) = delete;
~VideoCaptureDeviceFactoryAndroid() override;
std::unique_ptr<VideoCaptureDevice> CreateDevice(
const VideoCaptureDeviceDescriptor& device_descriptor) override;
void GetDevicesInfo(GetDevicesInfoCallback callback) override;
static bool IsLegacyOrDeprecatedDevice(const std::string& device_id);
// Configures all subsequent CreateDevice()s in test mode.
void ConfigureForTesting() { test_mode_ = true; }
private:
VideoCaptureFormats GetSupportedFormats(int device_index,
const std::string& display_name);
// Switch to indicate that all created Java capturers will be in test mode.
bool test_mode_ = false;
// VideoCaptureFormats and zooms are cached, so GetSupportedFormats() and
// Java_VideoCaptureFactory_isZoomSupported() respectively don't need to be
// called for every device every time GetDevicesInfo() is called. It also
// allows to workaround bugs on some devices that don't handle the case when
// an actively used camera is opened again (see https://crbug.com/1138608).
base::flat_map<std::string, VideoCaptureFormats> supported_formats_cache_;
base::flat_map<std::string, bool> zooms_cache_;
};
} // namespace media
#endif // MEDIA_CAPTURE_VIDEO_ANDROID_VIDEO_CAPTURE_DEVICE_FACTORY_ANDROID_H_