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

Side by Side Diff: media/video/capture/mac/coremedia_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: Sort header includes by path. 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "media/video/capture/mac/coremedia_glue.h"
6
7 #include <dlfcn.h>
8
9 #include "base/logging.h"
10 #include "base/lazy_instance.h"
11
12 namespace {
13
14 // This class is used to retrieve some CoreMedia library functions. It must be
15 // used as a LazyInstance so that it is initialised once and in a thread-safe
16 // way. Normally no work is done in constructors: LazyInstance is an exception.
17 class CoreMediaLibraryInternal {
18 public:
19 typedef CoreMediaGlue::CMTime (*CMTimeMakeMethod)(int64_t, int32_t);
20 typedef CVImageBufferRef (*CMSampleBufferGetImageBufferMethod)(
21 CoreMediaGlue::CMSampleBufferRef);
22 typedef FourCharCode (*CMFormatDescriptionGetMediaSubTypeMethod)(
23 CoreMediaGlue::CMFormatDescriptionRef desc);
24 typedef CoreMediaGlue::CMVideoDimensions
25 (*CMVideoFormatDescriptionGetDimensionsMethod)(
26 CoreMediaGlue::CMVideoFormatDescriptionRef videoDesc);
27
28 CoreMediaLibraryInternal() {
29 NSBundle* bundle = [NSBundle
30 bundleWithPath:@"/System/Library/Frameworks/CoreMedia.framework"];
31
32 const char* path = [[bundle executablePath] fileSystemRepresentation];
33 CHECK(path);
34 void* library_handle = dlopen(path, RTLD_LAZY | RTLD_LOCAL);
35 CHECK(library_handle) << dlerror();
36
37 // Now extract the methods.
38 cm_time_make_ = reinterpret_cast<CMTimeMakeMethod>(
39 dlsym(library_handle, "CMTimeMake"));
40 CHECK(cm_time_make_) << dlerror();
41
42 cm_sample_buffer_get_image_buffer_method_ =
43 reinterpret_cast<CMSampleBufferGetImageBufferMethod>(
44 dlsym(library_handle, "CMSampleBufferGetImageBuffer"));
45 CHECK(cm_sample_buffer_get_image_buffer_method_) << dlerror();
46
47 cm_format_description_get_media_sub_type_method_ =
48 reinterpret_cast<CMFormatDescriptionGetMediaSubTypeMethod>(
49 dlsym(library_handle, "CMFormatDescriptionGetMediaSubType"));
50 CHECK(cm_format_description_get_media_sub_type_method_) << dlerror();
51
52 cm_video_format_description_get_dimensions_method_ =
53 reinterpret_cast<CMVideoFormatDescriptionGetDimensionsMethod>(
54 dlsym(library_handle, "CMVideoFormatDescriptionGetDimensions"));
55 CHECK(cm_video_format_description_get_dimensions_method_) << dlerror();
56 }
57
58 const CMTimeMakeMethod& cm_time_make() const { return cm_time_make_; }
59 const CMSampleBufferGetImageBufferMethod&
60 cm_sample_buffer_get_image_buffer_method() const {
61 return cm_sample_buffer_get_image_buffer_method_;
62 }
63 const CMFormatDescriptionGetMediaSubTypeMethod&
64 cm_format_description_get_media_sub_type_method() const {
65 return cm_format_description_get_media_sub_type_method_;
66 }
67 const CMVideoFormatDescriptionGetDimensionsMethod&
68 cm_video_format_description_get_dimensions_method() const {
69 return cm_video_format_description_get_dimensions_method_;
70 }
71
72 private:
73 CMTimeMakeMethod cm_time_make_;
74 CMSampleBufferGetImageBufferMethod cm_sample_buffer_get_image_buffer_method_;
75 CMFormatDescriptionGetMediaSubTypeMethod
76 cm_format_description_get_media_sub_type_method_;
77 CMVideoFormatDescriptionGetDimensionsMethod
78 cm_video_format_description_get_dimensions_method_;
79
80 DISALLOW_COPY_AND_ASSIGN(CoreMediaLibraryInternal);
81 };
82
83 } // namespace
84
85 static base::LazyInstance<CoreMediaLibraryInternal> g_coremedia_handle =
86 LAZY_INSTANCE_INITIALIZER;
87
88 // static
89 CoreMediaGlue::CMTime CoreMediaGlue::CMTimeMake(int64_t value,
90 int32_t timescale) {
91 return g_coremedia_handle.Get().cm_time_make()(value, timescale);
92 }
93
94 // static
95 CVImageBufferRef CoreMediaGlue::CMSampleBufferGetImageBuffer(
96 CMSampleBufferRef buffer) {
97 return g_coremedia_handle.Get().cm_sample_buffer_get_image_buffer_method()(
98 buffer);
99 }
100
101 // static
102 FourCharCode CoreMediaGlue::CMFormatDescriptionGetMediaSubType(
103 CMFormatDescriptionRef desc) {
104 return g_coremedia_handle.Get()
105 .cm_format_description_get_media_sub_type_method()(desc);
106 }
107
108 // static
109 CoreMediaGlue::CMVideoDimensions
110 CoreMediaGlue::CMVideoFormatDescriptionGetDimensions(
111 CMVideoFormatDescriptionRef videoDesc) {
112 return g_coremedia_handle.Get()
113 .cm_video_format_description_get_dimensions_method()(videoDesc);
114 }
OLDNEW
« no previous file with comments | « media/video/capture/mac/coremedia_glue.h ('k') | media/video/capture/mac/video_capture_device_avfoundation_mac.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698