11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved. 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file. 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "media/base/mac/videotoolbox_glue.h" 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <dlfcn.h> 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#import <Foundation/Foundation.h> 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/lazy_instance.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/memory/scoped_ptr.h" 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// This class stores VideoToolbox library symbol pointers. 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccistruct VideoToolboxGlue::Library { 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci typedef OSStatus (*VTCompressionSessionCreateMethod)( 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CFAllocatorRef, 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int32_t, 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int32_t, 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CoreMediaGlue::CMVideoCodecType, 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CFDictionaryRef, 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CFDictionaryRef, 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CFAllocatorRef, 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci VTCompressionOutputCallback, 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void*, 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci VTCompressionSessionRef*); 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci typedef OSStatus (*VTCompressionSessionEncodeFrameMethod)( 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci VTCompressionSessionRef, 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CVImageBufferRef, 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CoreMediaGlue::CMTime, 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CoreMediaGlue::CMTime, 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CFDictionaryRef, 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void*, 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci VTEncodeInfoFlags*); 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci typedef CVPixelBufferPoolRef (*VTCompressionSessionGetPixelBufferPoolMethod)( 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci VTCompressionSessionRef); 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci typedef void (*VTCompressionSessionInvalidateMethod)(VTCompressionSessionRef); 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci typedef OSStatus (*VTSessionSetPropertyMethod)(VTSessionRef, 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CFStringRef, 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CFTypeRef); 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci VTCompressionSessionCreateMethod VTCompressionSessionCreate; 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci VTCompressionSessionEncodeFrameMethod VTCompressionSessionEncodeFrame; 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci VTCompressionSessionGetPixelBufferPoolMethod 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci VTCompressionSessionGetPixelBufferPool; 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci VTCompressionSessionInvalidateMethod VTCompressionSessionInvalidate; 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci VTSessionSetPropertyMethod VTSessionSetProperty; 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CFStringRef* kVTCompressionPropertyKey_AllowFrameReordering; 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CFStringRef* kVTCompressionPropertyKey_AverageBitRate; 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CFStringRef* kVTCompressionPropertyKey_ColorPrimaries; 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CFStringRef* kVTCompressionPropertyKey_ExpectedFrameRate; 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CFStringRef* kVTCompressionPropertyKey_MaxKeyFrameInterval; 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CFStringRef* kVTCompressionPropertyKey_MaxKeyFrameIntervalDuration; 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CFStringRef* kVTCompressionPropertyKey_ProfileLevel; 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CFStringRef* kVTCompressionPropertyKey_RealTime; 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CFStringRef* kVTCompressionPropertyKey_TransferFunction; 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CFStringRef* kVTCompressionPropertyKey_YCbCrMatrix; 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CFStringRef* kVTEncodeFrameOptionKey_ForceKeyFrame; 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CFStringRef* kVTProfileLevel_H264_Baseline_AutoLevel; 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CFStringRef* kVTProfileLevel_H264_Main_AutoLevel; 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CFStringRef* kVTProfileLevel_H264_Extended_AutoLevel; 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CFStringRef* kVTProfileLevel_H264_High_AutoLevel; 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CFStringRef* 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kVTVideoEncoderSpecification_EnableHardwareAcceleratedVideoEncoder; 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Lazy-instance responsible for loading VideoToolbox. 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass VideoToolboxGlue::Loader { 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public: 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Loader() { 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci NSBundle* bundle = [NSBundle 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bundleWithPath:@"/System/Library/Frameworks/VideoToolbox.framework"]; 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const char* path = [[bundle executablePath] fileSystemRepresentation]; 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!path) 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return; 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci handle_ = dlopen(path, RTLD_LAZY | RTLD_LOCAL); 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!handle_) 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return; 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define LOAD_SYMBOL(SYMBOL) \ 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!LoadSymbol(#SYMBOL, reinterpret_cast<void**>(&library_.SYMBOL))) \ 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return; 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LOAD_SYMBOL(VTCompressionSessionCreate) 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LOAD_SYMBOL(VTCompressionSessionEncodeFrame) 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LOAD_SYMBOL(VTCompressionSessionGetPixelBufferPool) 881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LOAD_SYMBOL(VTCompressionSessionInvalidate) 891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LOAD_SYMBOL(VTSessionSetProperty) 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LOAD_SYMBOL(kVTCompressionPropertyKey_AllowFrameReordering) 921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LOAD_SYMBOL(kVTCompressionPropertyKey_AverageBitRate) 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LOAD_SYMBOL(kVTCompressionPropertyKey_ColorPrimaries) 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LOAD_SYMBOL(kVTCompressionPropertyKey_ExpectedFrameRate) 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LOAD_SYMBOL(kVTCompressionPropertyKey_MaxKeyFrameInterval) 961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LOAD_SYMBOL(kVTCompressionPropertyKey_MaxKeyFrameIntervalDuration) 971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LOAD_SYMBOL(kVTCompressionPropertyKey_ProfileLevel) 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LOAD_SYMBOL(kVTCompressionPropertyKey_RealTime) 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LOAD_SYMBOL(kVTCompressionPropertyKey_TransferFunction) 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LOAD_SYMBOL(kVTCompressionPropertyKey_YCbCrMatrix) 1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LOAD_SYMBOL(kVTEncodeFrameOptionKey_ForceKeyFrame); 1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LOAD_SYMBOL(kVTProfileLevel_H264_Baseline_AutoLevel) 1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LOAD_SYMBOL(kVTProfileLevel_H264_Main_AutoLevel) 1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LOAD_SYMBOL(kVTProfileLevel_H264_Extended_AutoLevel) 1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LOAD_SYMBOL(kVTProfileLevel_H264_High_AutoLevel) 1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LOAD_SYMBOL( 1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kVTVideoEncoderSpecification_EnableHardwareAcceleratedVideoEncoder) 1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#undef LOAD_SYMBOL 1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci glue_.library_ = &library_; 1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const VideoToolboxGlue* glue() const { 1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return (glue_.library_) ? &glue_ : NULL; 1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private: 1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool LoadSymbol(const char* name, void** symbol_out) { 1201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *symbol_out = dlsym(handle_, name); 1211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return *symbol_out != NULL; 1221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Library library_; 1251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci VideoToolboxGlue glue_; 1261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void* handle_; 1271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DISALLOW_COPY_AND_ASSIGN(Loader); 1291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 1301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccistatic base::LazyInstance<VideoToolboxGlue::Loader> g_videotoolbox_loader = 1321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LAZY_INSTANCE_INITIALIZER; 1331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// static 1351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst VideoToolboxGlue* VideoToolboxGlue::Get() { 1361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return g_videotoolbox_loader.Get().glue(); 1371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciVideoToolboxGlue::VideoToolboxGlue() : library_(NULL) { 1401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciOSStatus VideoToolboxGlue::VTCompressionSessionCreate( 1431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CFAllocatorRef allocator, 1441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int32_t width, 1451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int32_t height, 1461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CoreMediaGlue::CMVideoCodecType codecType, 1471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CFDictionaryRef encoderSpecification, 1481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CFDictionaryRef sourceImageBufferAttributes, 1491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CFAllocatorRef compressedDataAllocator, 1501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci VTCompressionOutputCallback outputCallback, 1511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void* outputCallbackRefCon, 1521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci VTCompressionSessionRef* compressionSessionOut) const { 1531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return library_->VTCompressionSessionCreate(allocator, 1541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci width, 1551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci height, 1561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci codecType, 1571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci encoderSpecification, 1581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sourceImageBufferAttributes, 1591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci compressedDataAllocator, 1601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci outputCallback, 1611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci outputCallbackRefCon, 1621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci compressionSessionOut); 1631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciOSStatus VideoToolboxGlue::VTCompressionSessionEncodeFrame( 1661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci VTCompressionSessionRef session, 1671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CVImageBufferRef imageBuffer, 1681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CoreMediaGlue::CMTime presentationTimeStamp, 1691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CoreMediaGlue::CMTime duration, 1701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CFDictionaryRef frameProperties, 1711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void* sourceFrameRefCon, 1721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci VTEncodeInfoFlags* infoFlagsOut) const { 1731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return library_->VTCompressionSessionEncodeFrame(session, 1741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci imageBuffer, 1751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci presentationTimeStamp, 1761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci duration, 1771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci frameProperties, 1781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sourceFrameRefCon, 1791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci infoFlagsOut); 1801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciCVPixelBufferPoolRef VideoToolboxGlue::VTCompressionSessionGetPixelBufferPool( 1831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci VTCompressionSessionRef session) const { 1841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return library_->VTCompressionSessionGetPixelBufferPool(session); 1851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid VideoToolboxGlue::VTCompressionSessionInvalidate( 1881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci VTCompressionSessionRef session) const { 1891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci library_->VTCompressionSessionInvalidate(session); 1901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciOSStatus VideoToolboxGlue::VTSessionSetProperty(VTSessionRef session, 1931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CFStringRef propertyKey, 1941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CFTypeRef propertyValue) const { 1951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return library_->VTSessionSetProperty(session, propertyKey, propertyValue); 1961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define KEY_ACCESSOR(KEY) \ 1991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CFStringRef VideoToolboxGlue::KEY() const { return *library_->KEY; } 2001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciKEY_ACCESSOR(kVTCompressionPropertyKey_AllowFrameReordering) 2021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciKEY_ACCESSOR(kVTCompressionPropertyKey_AverageBitRate) 2031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciKEY_ACCESSOR(kVTCompressionPropertyKey_ColorPrimaries) 2041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciKEY_ACCESSOR(kVTCompressionPropertyKey_ExpectedFrameRate) 2051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciKEY_ACCESSOR(kVTCompressionPropertyKey_MaxKeyFrameInterval) 2061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciKEY_ACCESSOR(kVTCompressionPropertyKey_MaxKeyFrameIntervalDuration) 2071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciKEY_ACCESSOR(kVTCompressionPropertyKey_ProfileLevel) 2081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciKEY_ACCESSOR(kVTCompressionPropertyKey_RealTime) 2091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciKEY_ACCESSOR(kVTCompressionPropertyKey_TransferFunction) 2101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciKEY_ACCESSOR(kVTCompressionPropertyKey_YCbCrMatrix) 2111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciKEY_ACCESSOR(kVTEncodeFrameOptionKey_ForceKeyFrame) 2121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciKEY_ACCESSOR(kVTProfileLevel_H264_Baseline_AutoLevel) 2131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciKEY_ACCESSOR(kVTProfileLevel_H264_Main_AutoLevel) 2141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciKEY_ACCESSOR(kVTProfileLevel_H264_Extended_AutoLevel) 2151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciKEY_ACCESSOR(kVTProfileLevel_H264_High_AutoLevel) 2161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciKEY_ACCESSOR(kVTVideoEncoderSpecification_EnableHardwareAcceleratedVideoEncoder) 2171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#undef KEY_ACCESSOR 219