| Index: media/base/mac/avfoundation_glue.mm
|
| diff --git a/media/base/mac/avfoundation_glue.mm b/media/base/mac/avfoundation_glue.mm
|
| deleted file mode 100644
|
| index 4bd6d72ab92dd0c6f10c8db803b49667e3e33cd3..0000000000000000000000000000000000000000
|
| --- a/media/base/mac/avfoundation_glue.mm
|
| +++ /dev/null
|
| @@ -1,203 +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/base/mac/avfoundation_glue.h"
|
| -
|
| -#import <AVFoundation/AVFoundation.h>
|
| -#include <dlfcn.h>
|
| -#include <stddef.h>
|
| -
|
| -#include "base/command_line.h"
|
| -#include "base/lazy_instance.h"
|
| -#include "base/mac/mac_util.h"
|
| -#include "base/macros.h"
|
| -#include "base/metrics/histogram.h"
|
| -#include "base/trace_event/trace_event.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"];
|
| - }
|
| -
|
| - NSBundle* bundle() const { return bundle_; }
|
| -
|
| - 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_;
|
| - // The following members are replicas of the respectives in AVFoundation.
|
| - NSString* AVCaptureDeviceWasConnectedNotification_ =
|
| - ::AVCaptureDeviceWasConnectedNotification;
|
| - NSString* AVCaptureDeviceWasDisconnectedNotification_ =
|
| - ::AVCaptureDeviceWasDisconnectedNotification;
|
| - NSString* AVMediaTypeVideo_ = ::AVMediaTypeVideo;
|
| - NSString* AVMediaTypeAudio_ = ::AVMediaTypeAudio;
|
| - NSString* AVMediaTypeMuxed_ = ::AVMediaTypeMuxed;
|
| - NSString* AVCaptureSessionRuntimeErrorNotification_ =
|
| - ::AVCaptureSessionRuntimeErrorNotification;
|
| - NSString* AVCaptureSessionDidStopRunningNotification_ =
|
| - ::AVCaptureSessionDidStopRunningNotification;
|
| - NSString* AVCaptureSessionErrorKey_ = ::AVCaptureSessionErrorKey;
|
| - NSString* AVVideoScalingModeKey_ = ::AVVideoScalingModeKey;
|
| - NSString* AVVideoScalingModeResizeAspectFill_ =
|
| - ::AVVideoScalingModeResizeAspectFill;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(AVFoundationInternal);
|
| -};
|
| -
|
| -static base::ThreadLocalStorage::StaticSlot g_avfoundation_handle =
|
| - TLS_INITIALIZER;
|
| -
|
| -void TlsCleanup(void* value) {
|
| - delete static_cast<AVFoundationInternal*>(value);
|
| -}
|
| -
|
| -AVFoundationInternal* GetAVFoundationInternal() {
|
| - return static_cast<AVFoundationInternal*>(g_avfoundation_handle.Get());
|
| -}
|
| -
|
| -// This contains the logic of checking whether AVFoundation is supported.
|
| -// It's called only once and the results are cached in a static bool.
|
| -bool LoadAVFoundationInternal() {
|
| - g_avfoundation_handle.Initialize(TlsCleanup);
|
| - g_avfoundation_handle.Set(new AVFoundationInternal());
|
| - const bool ret = [AVFoundationGlue::AVFoundationBundle() load];
|
| - CHECK(ret);
|
| - return ret;
|
| -}
|
| -
|
| -enum {
|
| - INITIALIZE_NOT_CALLED = 0,
|
| - AVFOUNDATION_IS_SUPPORTED,
|
| - AVFOUNDATION_NOT_SUPPORTED
|
| -} static g_avfoundation_initialization = INITIALIZE_NOT_CALLED;
|
| -
|
| -} // namespace
|
| -
|
| -void AVFoundationGlue::InitializeAVFoundation() {
|
| - TRACE_EVENT0("video", "AVFoundationGlue::InitializeAVFoundation");
|
| - CHECK([NSThread isMainThread]);
|
| - if (g_avfoundation_initialization != INITIALIZE_NOT_CALLED)
|
| - return;
|
| - g_avfoundation_initialization = LoadAVFoundationInternal() ?
|
| - AVFOUNDATION_IS_SUPPORTED : AVFOUNDATION_NOT_SUPPORTED;
|
| -}
|
| -
|
| -NSBundle const* AVFoundationGlue::AVFoundationBundle() {
|
| - return GetAVFoundationInternal()->bundle();
|
| -}
|
| -
|
| -NSString* AVFoundationGlue::AVCaptureDeviceWasConnectedNotification() {
|
| - return GetAVFoundationInternal()->AVCaptureDeviceWasConnectedNotification();
|
| -}
|
| -
|
| -NSString* AVFoundationGlue::AVCaptureDeviceWasDisconnectedNotification() {
|
| - return GetAVFoundationInternal()
|
| - ->AVCaptureDeviceWasDisconnectedNotification();
|
| -}
|
| -
|
| -NSString* AVFoundationGlue::AVMediaTypeVideo() {
|
| - return GetAVFoundationInternal()->AVMediaTypeVideo();
|
| -}
|
| -
|
| -NSString* AVFoundationGlue::AVMediaTypeAudio() {
|
| - return GetAVFoundationInternal()->AVMediaTypeAudio();
|
| -}
|
| -
|
| -NSString* AVFoundationGlue::AVMediaTypeMuxed() {
|
| - return GetAVFoundationInternal()->AVMediaTypeMuxed();
|
| -}
|
| -
|
| -NSString* AVFoundationGlue::AVCaptureSessionRuntimeErrorNotification() {
|
| - return GetAVFoundationInternal()->AVCaptureSessionRuntimeErrorNotification();
|
| -}
|
| -
|
| -NSString* AVFoundationGlue::AVCaptureSessionDidStopRunningNotification() {
|
| - return GetAVFoundationInternal()
|
| - ->AVCaptureSessionDidStopRunningNotification();
|
| -}
|
| -
|
| -NSString* AVFoundationGlue::AVCaptureSessionErrorKey() {
|
| - return GetAVFoundationInternal()->AVCaptureSessionErrorKey();
|
| -}
|
| -
|
| -NSString* AVFoundationGlue::AVVideoScalingModeKey() {
|
| - return GetAVFoundationInternal()->AVVideoScalingModeKey();
|
| -}
|
| -
|
| -NSString* AVFoundationGlue::AVVideoScalingModeResizeAspectFill() {
|
| - return GetAVFoundationInternal()->AVVideoScalingModeResizeAspectFill();
|
| -}
|
| -
|
| -Class AVFoundationGlue::AVCaptureSessionClass() {
|
| - return [AVFoundationBundle() classNamed:@"AVCaptureSession"];
|
| -}
|
| -
|
| -Class AVFoundationGlue::AVCaptureVideoDataOutputClass() {
|
| - return [AVFoundationBundle() classNamed:@"AVCaptureVideoDataOutput"];
|
| -}
|
| -
|
| -Class AVFoundationGlue::AVCaptureStillImageOutputClass() {
|
| - return [AVFoundationBundle() classNamed:@"AVCaptureStillImageOutput"];
|
| -}
|
| -
|
| -@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
|
|
|