| Index: media/video/capture/mac/avfoundation_glue.mm
|
| diff --git a/media/video/capture/mac/avfoundation_glue.mm b/media/video/capture/mac/avfoundation_glue.mm
|
| deleted file mode 100644
|
| index f3496d1cf9d39a7e411f98d65e01fed95f8276c6..0000000000000000000000000000000000000000
|
| --- a/media/video/capture/mac/avfoundation_glue.mm
|
| +++ /dev/null
|
| @@ -1,221 +0,0 @@
|
| -// Copyright 2013 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.
|
| -
|
| -#import "media/video/capture/mac/avfoundation_glue.h"
|
| -
|
| -#include <dlfcn.h>
|
| -
|
| -#include "base/command_line.h"
|
| -#include "base/lazy_instance.h"
|
| -#include "base/mac/mac_util.h"
|
| -#include "base/metrics/field_trial.h"
|
| -#include "media/base/media_switches.h"
|
| -
|
| -namespace {
|
| -
|
| -// This class is used to retrieve AVFoundation NSBundle and library handle. It
|
| -// must be used as a LazyInstance so that it is initialised once and in a
|
| -// thread-safe way. Normally no work is done in constructors: LazyInstance is
|
| -// an exception.
|
| -class AVFoundationInternal {
|
| - public:
|
| - AVFoundationInternal() {
|
| - bundle_ = [NSBundle
|
| - bundleWithPath:@"/System/Library/Frameworks/AVFoundation.framework"];
|
| -
|
| - const char* path = [[bundle_ executablePath] fileSystemRepresentation];
|
| - CHECK(path);
|
| - library_handle_ = dlopen(path, RTLD_LAZY | RTLD_LOCAL);
|
| - CHECK(library_handle_) << dlerror();
|
| -
|
| - struct {
|
| - NSString** loaded_string;
|
| - const char* symbol;
|
| - } av_strings[] = {
|
| - {&AVCaptureDeviceWasConnectedNotification_,
|
| - "AVCaptureDeviceWasConnectedNotification"},
|
| - {&AVCaptureDeviceWasDisconnectedNotification_,
|
| - "AVCaptureDeviceWasDisconnectedNotification"},
|
| - {&AVMediaTypeVideo_, "AVMediaTypeVideo"},
|
| - {&AVMediaTypeAudio_, "AVMediaTypeAudio"},
|
| - {&AVMediaTypeMuxed_, "AVMediaTypeMuxed"},
|
| - {&AVCaptureSessionRuntimeErrorNotification_,
|
| - "AVCaptureSessionRuntimeErrorNotification"},
|
| - {&AVCaptureSessionDidStopRunningNotification_,
|
| - "AVCaptureSessionDidStopRunningNotification"},
|
| - {&AVCaptureSessionErrorKey_, "AVCaptureSessionErrorKey"},
|
| - {&AVVideoScalingModeKey_, "AVVideoScalingModeKey"},
|
| - {&AVVideoScalingModeResizeAspectFill_,
|
| - "AVVideoScalingModeResizeAspectFill"},
|
| - };
|
| - for (size_t i = 0; i < arraysize(av_strings); ++i) {
|
| - *av_strings[i].loaded_string = *reinterpret_cast<NSString**>(
|
| - dlsym(library_handle_, av_strings[i].symbol));
|
| - DCHECK(*av_strings[i].loaded_string) << dlerror();
|
| - }
|
| - }
|
| -
|
| - NSBundle* bundle() const { return bundle_; }
|
| - void* library_handle() const { return library_handle_; }
|
| -
|
| - NSString* AVCaptureDeviceWasConnectedNotification() const {
|
| - return AVCaptureDeviceWasConnectedNotification_;
|
| - }
|
| - NSString* AVCaptureDeviceWasDisconnectedNotification() const {
|
| - return AVCaptureDeviceWasDisconnectedNotification_;
|
| - }
|
| - NSString* AVMediaTypeVideo() const { return AVMediaTypeVideo_; }
|
| - NSString* AVMediaTypeAudio() const { return AVMediaTypeAudio_; }
|
| - NSString* AVMediaTypeMuxed() const { return AVMediaTypeMuxed_; }
|
| - NSString* AVCaptureSessionRuntimeErrorNotification() const {
|
| - return AVCaptureSessionRuntimeErrorNotification_;
|
| - }
|
| - NSString* AVCaptureSessionDidStopRunningNotification() const {
|
| - return AVCaptureSessionDidStopRunningNotification_;
|
| - }
|
| - NSString* AVCaptureSessionErrorKey() const {
|
| - return AVCaptureSessionErrorKey_;
|
| - }
|
| - NSString* AVVideoScalingModeKey() const { return AVVideoScalingModeKey_; }
|
| - NSString* AVVideoScalingModeResizeAspectFill() const {
|
| - return AVVideoScalingModeResizeAspectFill_;
|
| - }
|
| -
|
| - private:
|
| - NSBundle* bundle_;
|
| - void* library_handle_;
|
| - // The following members are replicas of the respectives in AVFoundation.
|
| - NSString* AVCaptureDeviceWasConnectedNotification_;
|
| - NSString* AVCaptureDeviceWasDisconnectedNotification_;
|
| - NSString* AVMediaTypeVideo_;
|
| - NSString* AVMediaTypeAudio_;
|
| - NSString* AVMediaTypeMuxed_;
|
| - NSString* AVCaptureSessionRuntimeErrorNotification_;
|
| - NSString* AVCaptureSessionDidStopRunningNotification_;
|
| - NSString* AVCaptureSessionErrorKey_;
|
| - NSString* AVVideoScalingModeKey_;
|
| - NSString* AVVideoScalingModeResizeAspectFill_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(AVFoundationInternal);
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -static base::LazyInstance<AVFoundationInternal> g_avfoundation_handle =
|
| - LAZY_INSTANCE_INITIALIZER;
|
| -
|
| -bool AVFoundationGlue::IsAVFoundationSupported() {
|
| - // DeviceMonitorMac will initialize this static bool from the main UI thread
|
| - // once, during Chrome startup so this construction is thread safe.
|
| - // Use AVFoundation if possible, enabled, and QTKit is not explicitly forced.
|
| - static CommandLine* command_line = CommandLine::ForCurrentProcess();
|
| -
|
| - // AVFoundation is only available on OS Lion and above.
|
| - if (!base::mac::IsOSLionOrLater())
|
| - return false;
|
| -
|
| - // The force-qtkit flag takes precedence over enable-avfoundation.
|
| - if (command_line->HasSwitch(switches::kForceQTKit))
|
| - return false;
|
| -
|
| - // Next in precedence is the enable-avfoundation flag.
|
| - // TODO(vrk): Does this really need to be static?
|
| - static bool should_enable_avfoundation =
|
| - command_line->HasSwitch(switches::kEnableAVFoundation) ||
|
| - base::FieldTrialList::FindFullName("AVFoundationMacVideoCapture")
|
| - == "Enabled";
|
| - // Try to load AVFoundation. Save result in static bool to avoid loading
|
| - // AVFoundationBundle every call.
|
| - static bool loaded_successfully = [AVFoundationBundle() load];
|
| - return should_enable_avfoundation && loaded_successfully;
|
| -}
|
| -
|
| -NSBundle const* AVFoundationGlue::AVFoundationBundle() {
|
| - return g_avfoundation_handle.Get().bundle();
|
| -}
|
| -
|
| -void* AVFoundationGlue::AVFoundationLibraryHandle() {
|
| - return g_avfoundation_handle.Get().library_handle();
|
| -}
|
| -
|
| -NSString* AVFoundationGlue::AVCaptureDeviceWasConnectedNotification() {
|
| - return g_avfoundation_handle.Get().AVCaptureDeviceWasConnectedNotification();
|
| -}
|
| -
|
| -NSString* AVFoundationGlue::AVCaptureDeviceWasDisconnectedNotification() {
|
| - return
|
| - g_avfoundation_handle.Get().AVCaptureDeviceWasDisconnectedNotification();
|
| -}
|
| -
|
| -NSString* AVFoundationGlue::AVMediaTypeVideo() {
|
| - return g_avfoundation_handle.Get().AVMediaTypeVideo();
|
| -}
|
| -
|
| -NSString* AVFoundationGlue::AVMediaTypeAudio() {
|
| - return g_avfoundation_handle.Get().AVMediaTypeAudio();
|
| -}
|
| -
|
| -NSString* AVFoundationGlue::AVMediaTypeMuxed() {
|
| - return g_avfoundation_handle.Get().AVMediaTypeMuxed();
|
| -}
|
| -
|
| -NSString* AVFoundationGlue::AVCaptureSessionRuntimeErrorNotification() {
|
| - return g_avfoundation_handle.Get().AVCaptureSessionRuntimeErrorNotification();
|
| -}
|
| -
|
| -NSString* AVFoundationGlue::AVCaptureSessionDidStopRunningNotification() {
|
| - return
|
| - g_avfoundation_handle.Get().AVCaptureSessionDidStopRunningNotification();
|
| -}
|
| -
|
| -NSString* AVFoundationGlue::AVCaptureSessionErrorKey() {
|
| - return g_avfoundation_handle.Get().AVCaptureSessionErrorKey();
|
| -}
|
| -
|
| -NSString* AVFoundationGlue::AVVideoScalingModeKey() {
|
| - return g_avfoundation_handle.Get().AVVideoScalingModeKey();
|
| -}
|
| -
|
| -NSString* AVFoundationGlue::AVVideoScalingModeResizeAspectFill() {
|
| - return g_avfoundation_handle.Get().AVVideoScalingModeResizeAspectFill();
|
| -}
|
| -
|
| -Class AVFoundationGlue::AVCaptureSessionClass() {
|
| - return [AVFoundationBundle() classNamed:@"AVCaptureSession"];
|
| -}
|
| -
|
| -Class AVFoundationGlue::AVCaptureVideoDataOutputClass() {
|
| - return [AVFoundationBundle() classNamed:@"AVCaptureVideoDataOutput"];
|
| -}
|
| -
|
| -@implementation AVCaptureDeviceGlue
|
| -
|
| -+ (NSArray*)devices {
|
| - Class avcClass =
|
| - [AVFoundationGlue::AVFoundationBundle() classNamed:@"AVCaptureDevice"];
|
| - if ([avcClass respondsToSelector:@selector(devices)]) {
|
| - return [avcClass performSelector:@selector(devices)];
|
| - }
|
| - return nil;
|
| -}
|
| -
|
| -+ (CrAVCaptureDevice*)deviceWithUniqueID:(NSString*)deviceUniqueID {
|
| - Class avcClass =
|
| - [AVFoundationGlue::AVFoundationBundle() classNamed:@"AVCaptureDevice"];
|
| - return [avcClass performSelector:@selector(deviceWithUniqueID:)
|
| - withObject:deviceUniqueID];
|
| -}
|
| -
|
| -@end // @implementation AVCaptureDeviceGlue
|
| -
|
| -@implementation AVCaptureDeviceInputGlue
|
| -
|
| -+ (CrAVCaptureDeviceInput*)deviceInputWithDevice:(CrAVCaptureDevice*)device
|
| - error:(NSError**)outError {
|
| - return [[AVFoundationGlue::AVFoundationBundle()
|
| - classNamed:@"AVCaptureDeviceInput"] deviceInputWithDevice:device
|
| - error:outError];
|
| -}
|
| -
|
| -@end // @implementation AVCaptureDeviceInputGlue
|
|
|