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

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

Issue 137903003: AVFoundation NSString*, cache them in the AVFoundationInternal LazyInstance. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: tommi@s comments Created 6 years, 11 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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() {
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698