Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(936)

Unified Diff: media/video/capture/mac/avfoundation_glue.mm

Issue 518313003: Move Mac media glue code from media/video/capture/mac to media/base/mac (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Move media glue code back to base/mac and add suitable rules in build files to compile the code for… Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698