OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "media/base/mac/videotoolbox_glue.h" | 5 #include "media/base/mac/videotoolbox_glue.h" |
6 | 6 |
7 #include <dlfcn.h> | 7 #include <dlfcn.h> |
8 #import <Foundation/Foundation.h> | 8 #import <Foundation/Foundation.h> |
9 | 9 |
10 #include "base/lazy_instance.h" | 10 #include "base/lazy_instance.h" |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
46 VTCompressionSessionEncodeFrameMethod VTCompressionSessionEncodeFrame; | 46 VTCompressionSessionEncodeFrameMethod VTCompressionSessionEncodeFrame; |
47 VTCompressionSessionGetPixelBufferPoolMethod | 47 VTCompressionSessionGetPixelBufferPoolMethod |
48 VTCompressionSessionGetPixelBufferPool; | 48 VTCompressionSessionGetPixelBufferPool; |
49 VTCompressionSessionInvalidateMethod VTCompressionSessionInvalidate; | 49 VTCompressionSessionInvalidateMethod VTCompressionSessionInvalidate; |
50 VTCompressionSessionCompleteFramesMethod VTCompressionSessionCompleteFrames; | 50 VTCompressionSessionCompleteFramesMethod VTCompressionSessionCompleteFrames; |
51 VTSessionSetPropertyMethod VTSessionSetProperty; | 51 VTSessionSetPropertyMethod VTSessionSetProperty; |
52 | 52 |
53 CFStringRef* kVTCompressionPropertyKey_AllowFrameReordering; | 53 CFStringRef* kVTCompressionPropertyKey_AllowFrameReordering; |
54 CFStringRef* kVTCompressionPropertyKey_AverageBitRate; | 54 CFStringRef* kVTCompressionPropertyKey_AverageBitRate; |
55 CFStringRef* kVTCompressionPropertyKey_ColorPrimaries; | 55 CFStringRef* kVTCompressionPropertyKey_ColorPrimaries; |
| 56 CFStringRef* kVTCompressionPropertyKey_DataRateLimits; |
56 CFStringRef* kVTCompressionPropertyKey_ExpectedFrameRate; | 57 CFStringRef* kVTCompressionPropertyKey_ExpectedFrameRate; |
57 CFStringRef* kVTCompressionPropertyKey_MaxFrameDelayCount; | 58 CFStringRef* kVTCompressionPropertyKey_MaxFrameDelayCount; |
58 CFStringRef* kVTCompressionPropertyKey_MaxKeyFrameInterval; | 59 CFStringRef* kVTCompressionPropertyKey_MaxKeyFrameInterval; |
59 CFStringRef* kVTCompressionPropertyKey_MaxKeyFrameIntervalDuration; | 60 CFStringRef* kVTCompressionPropertyKey_MaxKeyFrameIntervalDuration; |
60 CFStringRef* kVTCompressionPropertyKey_ProfileLevel; | 61 CFStringRef* kVTCompressionPropertyKey_ProfileLevel; |
61 CFStringRef* kVTCompressionPropertyKey_RealTime; | 62 CFStringRef* kVTCompressionPropertyKey_RealTime; |
62 CFStringRef* kVTCompressionPropertyKey_TransferFunction; | 63 CFStringRef* kVTCompressionPropertyKey_TransferFunction; |
63 CFStringRef* kVTCompressionPropertyKey_YCbCrMatrix; | 64 CFStringRef* kVTCompressionPropertyKey_YCbCrMatrix; |
64 CFStringRef* kVTEncodeFrameOptionKey_ForceKeyFrame; | 65 CFStringRef* kVTEncodeFrameOptionKey_ForceKeyFrame; |
65 CFStringRef* kVTProfileLevel_H264_Baseline_AutoLevel; | 66 CFStringRef* kVTProfileLevel_H264_Baseline_AutoLevel; |
66 CFStringRef* kVTProfileLevel_H264_Main_AutoLevel; | 67 CFStringRef* kVTProfileLevel_H264_Main_AutoLevel; |
67 CFStringRef* kVTProfileLevel_H264_Extended_AutoLevel; | 68 CFStringRef* kVTProfileLevel_H264_Extended_AutoLevel; |
68 CFStringRef* kVTProfileLevel_H264_High_AutoLevel; | 69 CFStringRef* kVTProfileLevel_H264_High_AutoLevel; |
69 CFStringRef* | 70 CFStringRef* |
70 kVTVideoEncoderSpecification_EnableHardwareAcceleratedVideoEncoder; | 71 kVTVideoEncoderSpecification_EnableHardwareAcceleratedVideoEncoder; |
| 72 CFStringRef* |
| 73 kVTVideoEncoderSpecification_RequireHardwareAcceleratedVideoEncoder; |
71 }; | 74 }; |
72 | 75 |
73 // Lazy-instance responsible for loading VideoToolbox. | 76 // Lazy-instance responsible for loading VideoToolbox. |
74 class VideoToolboxGlue::Loader { | 77 class VideoToolboxGlue::Loader { |
75 public: | 78 public: |
76 Loader() { | 79 Loader() { |
77 NSBundle* bundle = [NSBundle | 80 NSBundle* bundle = [NSBundle |
78 bundleWithPath:@"/System/Library/Frameworks/VideoToolbox.framework"]; | 81 bundleWithPath:@"/System/Library/Frameworks/VideoToolbox.framework"]; |
79 const char* path = [[bundle executablePath] fileSystemRepresentation]; | 82 const char* path = [[bundle executablePath] fileSystemRepresentation]; |
80 if (!path) | 83 if (!path) |
(...skipping 10 matching lines...) Expand all Loading... |
91 LOAD_SYMBOL(VTCompressionSessionCreate) | 94 LOAD_SYMBOL(VTCompressionSessionCreate) |
92 LOAD_SYMBOL(VTCompressionSessionEncodeFrame) | 95 LOAD_SYMBOL(VTCompressionSessionEncodeFrame) |
93 LOAD_SYMBOL(VTCompressionSessionGetPixelBufferPool) | 96 LOAD_SYMBOL(VTCompressionSessionGetPixelBufferPool) |
94 LOAD_SYMBOL(VTCompressionSessionInvalidate) | 97 LOAD_SYMBOL(VTCompressionSessionInvalidate) |
95 LOAD_SYMBOL(VTCompressionSessionCompleteFrames) | 98 LOAD_SYMBOL(VTCompressionSessionCompleteFrames) |
96 LOAD_SYMBOL(VTSessionSetProperty) | 99 LOAD_SYMBOL(VTSessionSetProperty) |
97 | 100 |
98 LOAD_SYMBOL(kVTCompressionPropertyKey_AllowFrameReordering) | 101 LOAD_SYMBOL(kVTCompressionPropertyKey_AllowFrameReordering) |
99 LOAD_SYMBOL(kVTCompressionPropertyKey_AverageBitRate) | 102 LOAD_SYMBOL(kVTCompressionPropertyKey_AverageBitRate) |
100 LOAD_SYMBOL(kVTCompressionPropertyKey_ColorPrimaries) | 103 LOAD_SYMBOL(kVTCompressionPropertyKey_ColorPrimaries) |
| 104 LOAD_SYMBOL(kVTCompressionPropertyKey_DataRateLimits) |
101 LOAD_SYMBOL(kVTCompressionPropertyKey_ExpectedFrameRate) | 105 LOAD_SYMBOL(kVTCompressionPropertyKey_ExpectedFrameRate) |
102 LOAD_SYMBOL(kVTCompressionPropertyKey_MaxFrameDelayCount) | 106 LOAD_SYMBOL(kVTCompressionPropertyKey_MaxFrameDelayCount) |
103 LOAD_SYMBOL(kVTCompressionPropertyKey_MaxKeyFrameInterval) | 107 LOAD_SYMBOL(kVTCompressionPropertyKey_MaxKeyFrameInterval) |
104 LOAD_SYMBOL(kVTCompressionPropertyKey_MaxKeyFrameIntervalDuration) | 108 LOAD_SYMBOL(kVTCompressionPropertyKey_MaxKeyFrameIntervalDuration) |
105 LOAD_SYMBOL(kVTCompressionPropertyKey_ProfileLevel) | 109 LOAD_SYMBOL(kVTCompressionPropertyKey_ProfileLevel) |
106 LOAD_SYMBOL(kVTCompressionPropertyKey_RealTime) | 110 LOAD_SYMBOL(kVTCompressionPropertyKey_RealTime) |
107 LOAD_SYMBOL(kVTCompressionPropertyKey_TransferFunction) | 111 LOAD_SYMBOL(kVTCompressionPropertyKey_TransferFunction) |
108 LOAD_SYMBOL(kVTCompressionPropertyKey_YCbCrMatrix) | 112 LOAD_SYMBOL(kVTCompressionPropertyKey_YCbCrMatrix) |
109 LOAD_SYMBOL(kVTEncodeFrameOptionKey_ForceKeyFrame); | 113 LOAD_SYMBOL(kVTEncodeFrameOptionKey_ForceKeyFrame); |
110 LOAD_SYMBOL(kVTProfileLevel_H264_Baseline_AutoLevel) | 114 LOAD_SYMBOL(kVTProfileLevel_H264_Baseline_AutoLevel) |
111 LOAD_SYMBOL(kVTProfileLevel_H264_Main_AutoLevel) | 115 LOAD_SYMBOL(kVTProfileLevel_H264_Main_AutoLevel) |
112 LOAD_SYMBOL(kVTProfileLevel_H264_Extended_AutoLevel) | 116 LOAD_SYMBOL(kVTProfileLevel_H264_Extended_AutoLevel) |
113 LOAD_SYMBOL(kVTProfileLevel_H264_High_AutoLevel) | 117 LOAD_SYMBOL(kVTProfileLevel_H264_High_AutoLevel) |
114 LOAD_SYMBOL( | 118 LOAD_SYMBOL( |
115 kVTVideoEncoderSpecification_EnableHardwareAcceleratedVideoEncoder) | 119 kVTVideoEncoderSpecification_EnableHardwareAcceleratedVideoEncoder) |
| 120 LOAD_SYMBOL( |
| 121 kVTVideoEncoderSpecification_RequireHardwareAcceleratedVideoEncoder) |
116 | 122 |
117 #undef LOAD_SYMBOL | 123 #undef LOAD_SYMBOL |
118 | 124 |
119 glue_.library_ = &library_; | 125 glue_.library_ = &library_; |
120 } | 126 } |
121 | 127 |
122 const VideoToolboxGlue* glue() const { | 128 const VideoToolboxGlue* glue() const { |
123 return (glue_.library_) ? &glue_ : NULL; | 129 return (glue_.library_) ? &glue_ : NULL; |
124 } | 130 } |
125 | 131 |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
209 CFTypeRef propertyValue) const { | 215 CFTypeRef propertyValue) const { |
210 return library_->VTSessionSetProperty(session, propertyKey, propertyValue); | 216 return library_->VTSessionSetProperty(session, propertyKey, propertyValue); |
211 } | 217 } |
212 | 218 |
213 #define KEY_ACCESSOR(KEY) \ | 219 #define KEY_ACCESSOR(KEY) \ |
214 CFStringRef VideoToolboxGlue::KEY() const { return *library_->KEY; } | 220 CFStringRef VideoToolboxGlue::KEY() const { return *library_->KEY; } |
215 | 221 |
216 KEY_ACCESSOR(kVTCompressionPropertyKey_AllowFrameReordering) | 222 KEY_ACCESSOR(kVTCompressionPropertyKey_AllowFrameReordering) |
217 KEY_ACCESSOR(kVTCompressionPropertyKey_AverageBitRate) | 223 KEY_ACCESSOR(kVTCompressionPropertyKey_AverageBitRate) |
218 KEY_ACCESSOR(kVTCompressionPropertyKey_ColorPrimaries) | 224 KEY_ACCESSOR(kVTCompressionPropertyKey_ColorPrimaries) |
| 225 KEY_ACCESSOR(kVTCompressionPropertyKey_DataRateLimits) |
219 KEY_ACCESSOR(kVTCompressionPropertyKey_ExpectedFrameRate) | 226 KEY_ACCESSOR(kVTCompressionPropertyKey_ExpectedFrameRate) |
220 KEY_ACCESSOR(kVTCompressionPropertyKey_MaxFrameDelayCount) | 227 KEY_ACCESSOR(kVTCompressionPropertyKey_MaxFrameDelayCount) |
221 KEY_ACCESSOR(kVTCompressionPropertyKey_MaxKeyFrameInterval) | 228 KEY_ACCESSOR(kVTCompressionPropertyKey_MaxKeyFrameInterval) |
222 KEY_ACCESSOR(kVTCompressionPropertyKey_MaxKeyFrameIntervalDuration) | 229 KEY_ACCESSOR(kVTCompressionPropertyKey_MaxKeyFrameIntervalDuration) |
223 KEY_ACCESSOR(kVTCompressionPropertyKey_ProfileLevel) | 230 KEY_ACCESSOR(kVTCompressionPropertyKey_ProfileLevel) |
224 KEY_ACCESSOR(kVTCompressionPropertyKey_RealTime) | 231 KEY_ACCESSOR(kVTCompressionPropertyKey_RealTime) |
225 KEY_ACCESSOR(kVTCompressionPropertyKey_TransferFunction) | 232 KEY_ACCESSOR(kVTCompressionPropertyKey_TransferFunction) |
226 KEY_ACCESSOR(kVTCompressionPropertyKey_YCbCrMatrix) | 233 KEY_ACCESSOR(kVTCompressionPropertyKey_YCbCrMatrix) |
227 KEY_ACCESSOR(kVTEncodeFrameOptionKey_ForceKeyFrame) | 234 KEY_ACCESSOR(kVTEncodeFrameOptionKey_ForceKeyFrame) |
228 KEY_ACCESSOR(kVTProfileLevel_H264_Baseline_AutoLevel) | 235 KEY_ACCESSOR(kVTProfileLevel_H264_Baseline_AutoLevel) |
229 KEY_ACCESSOR(kVTProfileLevel_H264_Main_AutoLevel) | 236 KEY_ACCESSOR(kVTProfileLevel_H264_Main_AutoLevel) |
230 KEY_ACCESSOR(kVTProfileLevel_H264_Extended_AutoLevel) | 237 KEY_ACCESSOR(kVTProfileLevel_H264_Extended_AutoLevel) |
231 KEY_ACCESSOR(kVTProfileLevel_H264_High_AutoLevel) | 238 KEY_ACCESSOR(kVTProfileLevel_H264_High_AutoLevel) |
232 KEY_ACCESSOR(kVTVideoEncoderSpecification_EnableHardwareAcceleratedVideoEncoder) | 239 KEY_ACCESSOR(kVTVideoEncoderSpecification_EnableHardwareAcceleratedVideoEncoder) |
| 240 KEY_ACCESSOR( |
| 241 kVTVideoEncoderSpecification_RequireHardwareAcceleratedVideoEncoder) |
233 | 242 |
234 #undef KEY_ACCESSOR | 243 #undef KEY_ACCESSOR |
OLD | NEW |