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

Side by Side Diff: media/base/mac/videotoolbox_glue.h

Issue 531863002: Extend media glue code to support the VideoToolbox cast video encoder. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@base-glue
Patch Set: Rework the VideoToolbox glue to allow lower-overhead calls to functions and support load failure. 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 2014 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 #ifndef MEDIA_BASE_MAC_VIDEOTOOLBOX_GLUE_H_
6 #define MEDIA_BASE_MAC_VIDEOTOOLBOX_GLUE_H_
7
8 #include "base/basictypes.h"
9 #include "media/base/mac/coremedia_glue.h"
10 #include "media/base/media_export.h"
11
12 // VideoToolbox API is available in OS X 10.9 and iOS 8 (10.8 has support for
13 // software encoding, but this class exposes the 10.9 API level). Chromium
14 // requires OS X 10.6 or iOS 6. Linking with VideoToolbox therefore has to
15 // happen at runtime. This class is defined to try and load the VideoToolbox
16 // library. If it succeeds, clients can use VideoToolbox via this class.
17 class MEDIA_EXPORT VideoToolboxGlue {
18 public:
19 class Loader;
Robert Sesek 2014/09/12 16:16:16 Move to private: ?
jfroy 2014/09/12 17:11:46 Loader is the lazy instance class in the implement
20
21 // Returns a glue object if VideoToolbox is supported or null otherwise.
22 // Using a glue object allows to avoid expensive atomic operations on every
23 // function call. The object has process life duration and must not be
24 // deleted.
25 static const VideoToolboxGlue* Get();
26
27 // Originally from VTErrors.h
28 typedef UInt32 VTEncodeInfoFlags;
29 enum {
30 kVTEncodeInfo_Asynchronous = 1UL << 0,
31 kVTEncodeInfo_FrameDropped = 1UL << 1,
32 };
33
34 // Originally from VTCompressionSession.h
35 typedef struct OpaqueVTCompressionSession* VTCompressionSessionRef;
36 typedef void (*VTCompressionOutputCallback)(
37 void* outputCallbackRefCon,
38 void* sourceFrameRefCon,
39 OSStatus status,
40 VTEncodeInfoFlags infoFlags,
41 CoreMediaGlue::CMSampleBufferRef sampleBuffer);
42
43 // Originally from VTSession.h
44 typedef CFTypeRef VTSessionRef;
45
46 // Originally from VTCompressionProperties.h
47 CFStringRef kVTCompressionPropertyKey_AllowFrameReordering() const;
48 CFStringRef kVTCompressionPropertyKey_AverageBitRate() const;
49 CFStringRef kVTCompressionPropertyKey_ColorPrimaries() const;
50 CFStringRef kVTCompressionPropertyKey_ExpectedFrameRate() const;
51 CFStringRef kVTCompressionPropertyKey_MaxKeyFrameInterval() const;
52 CFStringRef kVTCompressionPropertyKey_MaxKeyFrameIntervalDuration() const;
53 CFStringRef kVTCompressionPropertyKey_ProfileLevel() const;
54 CFStringRef kVTCompressionPropertyKey_RealTime() const;
55 CFStringRef kVTCompressionPropertyKey_TransferFunction() const;
56 CFStringRef kVTCompressionPropertyKey_YCbCrMatrix() const;
57
58 CFStringRef kVTEncodeFrameOptionKey_ForceKeyFrame() const;
59
60 CFStringRef kVTProfileLevel_H264_Baseline_AutoLevel() const;
61 CFStringRef kVTProfileLevel_H264_Main_AutoLevel() const;
62 CFStringRef kVTProfileLevel_H264_Extended_AutoLevel() const;
63 CFStringRef kVTProfileLevel_H264_High_AutoLevel() const;
64
65 CFStringRef
66 kVTVideoEncoderSpecification_EnableHardwareAcceleratedVideoEncoder()
67 const;
68
69 // Originally from VTCompressionSession.h
70 OSStatus VTCompressionSessionCreate(
71 CFAllocatorRef allocator,
72 int32_t width,
73 int32_t height,
74 CoreMediaGlue::CMVideoCodecType codecType,
75 CFDictionaryRef encoderSpecification,
76 CFDictionaryRef sourceImageBufferAttributes,
77 CFAllocatorRef compressedDataAllocator,
78 VTCompressionOutputCallback outputCallback,
79 void* outputCallbackRefCon,
80 VTCompressionSessionRef* compressionSessionOut) const;
81 OSStatus VTCompressionSessionEncodeFrame(
82 VTCompressionSessionRef session,
83 CVImageBufferRef imageBuffer,
84 CoreMediaGlue::CMTime presentationTimeStamp,
85 CoreMediaGlue::CMTime duration,
86 CFDictionaryRef frameProperties,
87 void* sourceFrameRefCon,
88 VTEncodeInfoFlags* infoFlagsOut) const;
89 CVPixelBufferPoolRef VTCompressionSessionGetPixelBufferPool(
90 VTCompressionSessionRef session) const;
91 void VTCompressionSessionInvalidate(VTCompressionSessionRef session) const;
92
93 // Originally from VTSession.h
94 OSStatus VTSessionSetProperty(VTSessionRef session,
95 CFStringRef propertyKey,
96 CFTypeRef propertyValue) const;
97
98 private:
99 struct Library;
100 VideoToolboxGlue();
101 Library* library_;
102 DISALLOW_COPY_AND_ASSIGN(VideoToolboxGlue);
103 };
104
105 #endif // MEDIA_BASE_MAC_VIDEOTOOLBOX_GLUE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698