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 |
index 4f7de4d480cea1a52f62ba1f7a2711b91c46bade..245625ba8d60b37795c1054c2782abe6af6510b3 100644 |
--- a/media/video/capture/mac/avfoundation_glue.mm |
+++ b/media/video/capture/mac/avfoundation_glue.mm |
@@ -28,13 +28,88 @@ class AVFoundationInternal { |
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"}, |
Robert Sesek
2014/01/14 18:42:08
nit: for initializers that do not fit on one line,
|
+ {&AVCaptureDeviceWasDisconnectedNotification_, |
+ "AVCaptureDeviceWasDisconnectedNotification"}, |
+ {&AVMediaTypeVideo_, "AVMediaTypeVideo"}, |
+ {&AVMediaTypeAudio_, "AVMediaTypeAudio"}, |
+ {&AVMediaTypeMuxed_, "AVMediaTypeMuxed"}, |
+ {&AVCaptureSessionRuntimeErrorNotification_, |
+ "AVCaptureSessionRuntimeErrorNotification"}, |
+ {&AVCaptureSessionDidStopRunningNotification_, |
+ "AVCaptureSessionDidStopRunningNotification"}, |
+ {&AVCaptureSessionErrorKey_, "AVCaptureSessionErrorKey"}, |
+ {&AVCaptureSessionPreset320x240_, "AVCaptureSessionPreset320x240"}, |
+ {&AVCaptureSessionPreset640x480_, "AVCaptureSessionPreset640x480"}, |
+ {&AVCaptureSessionPreset1280x720_, "AVCaptureSessionPreset1280x720"}, |
+ {&AVVideoScalingModeKey_, "AVVideoScalingModeKey"}, |
+ {&AVVideoScalingModeResizeAspect_, "AVVideoScalingModeResizeAspect"}, |
+ }; |
+ 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* AVCaptureSessionPreset320x240() const { |
+ return AVCaptureSessionPreset320x240_; |
+ } |
+ NSString* AVCaptureSessionPreset640x480() const { |
+ return AVCaptureSessionPreset640x480_; |
+ } |
+ NSString* AVCaptureSessionPreset1280x720() const { |
+ return AVCaptureSessionPreset1280x720_; |
+ } |
+ NSString* AVVideoScalingModeKey() const { return AVVideoScalingModeKey_; } |
+ NSString* AVVideoScalingModeResizeAspect() const { |
+ return AVVideoScalingModeResizeAspect_; |
+ } |
+ |
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* AVCaptureSessionPreset320x240_; |
+ NSString* AVCaptureSessionPreset640x480_; |
+ NSString* AVCaptureSessionPreset1280x720_; |
+ NSString* AVVideoScalingModeKey_; |
+ NSString* AVVideoScalingModeResizeAspect_; |
DISALLOW_COPY_AND_ASSIGN(AVFoundationInternal); |
}; |
@@ -44,18 +119,6 @@ class AVFoundationInternal { |
static base::LazyInstance<AVFoundationInternal> g_avfoundation_handle = |
LAZY_INSTANCE_INITIALIZER; |
-namespace media { |
- |
-// TODO(mcasas):http://crbug.com/323536 cache the string pointers. |
-static NSString* ReadNSStringPtr(const char* symbol) { |
- NSString** string_pointer = reinterpret_cast<NSString**>( |
- dlsym(AVFoundationGlue::AVFoundationLibraryHandle(), symbol)); |
- DCHECK(string_pointer) << dlerror(); |
- return *string_pointer; |
-} |
- |
-} // namespace media |
- |
bool AVFoundationGlue::IsAVFoundationSupported() { |
if (!base::mac::IsOSLionOrLater()) |
return false; |
@@ -75,55 +138,57 @@ void* AVFoundationGlue::AVFoundationLibraryHandle() { |
} |
NSString* AVFoundationGlue::AVCaptureDeviceWasConnectedNotification() { |
- return media::ReadNSStringPtr("AVCaptureDeviceWasConnectedNotification"); |
+ return g_avfoundation_handle.Get().AVCaptureDeviceWasConnectedNotification(); |
} |
NSString* AVFoundationGlue::AVCaptureDeviceWasDisconnectedNotification() { |
- return media::ReadNSStringPtr("AVCaptureDeviceWasDisconnectedNotification"); |
+ return |
+ g_avfoundation_handle.Get().AVCaptureDeviceWasDisconnectedNotification(); |
} |
NSString* AVFoundationGlue::AVMediaTypeVideo() { |
- return media::ReadNSStringPtr("AVMediaTypeVideo"); |
+ return g_avfoundation_handle.Get().AVMediaTypeVideo(); |
} |
NSString* AVFoundationGlue::AVMediaTypeAudio() { |
- return media::ReadNSStringPtr("AVMediaTypeAudio"); |
+ return g_avfoundation_handle.Get().AVMediaTypeAudio(); |
} |
NSString* AVFoundationGlue::AVMediaTypeMuxed() { |
- return media::ReadNSStringPtr("AVMediaTypeMuxed"); |
+ return g_avfoundation_handle.Get().AVMediaTypeMuxed(); |
} |
NSString* AVFoundationGlue::AVCaptureSessionRuntimeErrorNotification() { |
- return media::ReadNSStringPtr("AVCaptureSessionRuntimeErrorNotification"); |
+ return g_avfoundation_handle.Get().AVCaptureSessionRuntimeErrorNotification(); |
} |
NSString* AVFoundationGlue::AVCaptureSessionDidStopRunningNotification() { |
- return media::ReadNSStringPtr("AVCaptureSessionDidStopRunningNotification"); |
+ return |
+ g_avfoundation_handle.Get().AVCaptureSessionDidStopRunningNotification(); |
} |
NSString* AVFoundationGlue::AVCaptureSessionErrorKey() { |
- return media::ReadNSStringPtr("AVCaptureSessionErrorKey"); |
+ return g_avfoundation_handle.Get().AVCaptureSessionErrorKey(); |
} |
NSString* AVFoundationGlue::AVCaptureSessionPreset320x240() { |
- return media::ReadNSStringPtr("AVCaptureSessionPreset320x240"); |
+ return g_avfoundation_handle.Get().AVCaptureSessionPreset320x240(); |
} |
NSString* AVFoundationGlue::AVCaptureSessionPreset640x480() { |
- return media::ReadNSStringPtr("AVCaptureSessionPreset640x480"); |
+ return g_avfoundation_handle.Get().AVCaptureSessionPreset640x480(); |
} |
NSString* AVFoundationGlue::AVCaptureSessionPreset1280x720() { |
- return media::ReadNSStringPtr("AVCaptureSessionPreset1280x720"); |
+ return g_avfoundation_handle.Get().AVCaptureSessionPreset1280x720(); |
} |
NSString* AVFoundationGlue::AVVideoScalingModeKey() { |
- return media::ReadNSStringPtr("AVVideoScalingModeKey"); |
+ return g_avfoundation_handle.Get().AVVideoScalingModeKey(); |
} |
NSString* AVFoundationGlue::AVVideoScalingModeResizeAspect() { |
- return media::ReadNSStringPtr("AVVideoScalingModeResizeAspect"); |
+ return g_avfoundation_handle.Get().AVVideoScalingModeResizeAspect(); |
} |
Class AVFoundationGlue::AVCaptureSessionClass() { |