This CL adds support in RTCEAGLVideoView for rendering CVPixelBuffers as OpenGL ES textures directly, compared to the current code that first converts the CVPixelBuffers to I420, and then reuploads them as textures. This is only supported on iOS with the use of a CVOpenGLESTextureCache. The I420 rendering and native rendering are separated in two different implementations of a simple shader interface: @protocol Shader - (BOOL)drawFrame:(RTCVideoFrame*)frame; @end GL resources are allocated when the shader is instantiated and released when the shader is destroyed. RTCEAGLVideoView will lazily instantiate the necessary shader when it receives the first frame of that kind. This is primarily done to avoid allocating GL resources for both I420 and native rendering. Some other changes are: - Print GL shader compilation errors. - Remove updateTextureSizesForFrame() function. The textures will resize automatically anyway when the texture data is uploaded with glTexImage2D(). patch from issue 2154243002 at patchset 140001 (http://crrev.com/2154243002#ps140001) Continuing magjed@'s work since he is OOO this week. BUG= Review-Url: https://codereview.webrtc.org/2202823004 Cr-Commit-Position: refs/heads/master@{#13668}
332 lines
15 KiB
Python
332 lines
15 KiB
Python
# Copyright 2016 The WebRTC project authors. All Rights Reserved.
|
|
#
|
|
# Use of this source code is governed by a BSD-style license
|
|
# that can be found in the LICENSE file in the root of the source
|
|
# tree. An additional intellectual property rights grant can be found
|
|
# in the file PATENTS. All contributing project authors may
|
|
# be found in the AUTHORS file in the root of the source tree.
|
|
|
|
{
|
|
'includes': [
|
|
'../build/common.gypi',
|
|
'sdk.gypi',
|
|
],
|
|
'conditions': [
|
|
['OS=="ios" or (OS=="mac" and mac_deployment_target=="10.7")', {
|
|
'targets': [
|
|
{
|
|
'target_name': 'rtc_sdk_common_objc',
|
|
'type': 'static_library',
|
|
'includes': [ '../build/objc_common.gypi' ],
|
|
'dependencies': [
|
|
'../base/base.gyp:rtc_base',
|
|
],
|
|
'include_dirs': [
|
|
'objc/Framework/Classes',
|
|
'objc/Framework/Headers',
|
|
],
|
|
'direct_dependent_settings': {
|
|
'include_dirs': [
|
|
'objc/Framework/Classes',
|
|
'objc/Framework/Headers',
|
|
],
|
|
},
|
|
'sources': [
|
|
'objc/Framework/Classes/NSString+StdString.h',
|
|
'objc/Framework/Classes/NSString+StdString.mm',
|
|
'objc/Framework/Classes/RTCDispatcher.m',
|
|
'objc/Framework/Classes/RTCFieldTrials.mm',
|
|
'objc/Framework/Classes/RTCLogging.mm',
|
|
'objc/Framework/Classes/RTCMetrics.mm',
|
|
'objc/Framework/Classes/RTCMetricsSampleInfo+Private.h',
|
|
'objc/Framework/Classes/RTCMetricsSampleInfo.mm',
|
|
'objc/Framework/Classes/RTCSSLAdapter.mm',
|
|
'objc/Framework/Classes/RTCTracing.mm',
|
|
'objc/Framework/Headers/WebRTC/RTCDispatcher.h',
|
|
'objc/Framework/Headers/WebRTC/RTCFieldTrials.h',
|
|
'objc/Framework/Headers/WebRTC/RTCLogging.h',
|
|
'objc/Framework/Headers/WebRTC/RTCMacros.h',
|
|
'objc/Framework/Headers/WebRTC/RTCMetrics.h',
|
|
'objc/Framework/Headers/WebRTC/RTCMetricsSampleInfo.h',
|
|
'objc/Framework/Headers/WebRTC/RTCSSLAdapter.h',
|
|
'objc/Framework/Headers/WebRTC/RTCTracing.h',
|
|
],
|
|
'conditions': [
|
|
['OS=="ios"', {
|
|
'sources': [
|
|
'objc/Framework/Classes/RTCCameraPreviewView.m',
|
|
'objc/Framework/Classes/RTCUIApplication.h',
|
|
'objc/Framework/Classes/RTCUIApplication.mm',
|
|
'objc/Framework/Classes/UIDevice+RTCDevice.mm',
|
|
'objc/Framework/Headers/WebRTC/RTCCameraPreviewView.h',
|
|
'objc/Framework/Headers/WebRTC/UIDevice+RTCDevice.h',
|
|
],
|
|
'link_settings': {
|
|
'xcode_settings': {
|
|
'OTHER_LDFLAGS': [
|
|
'-framework AVFoundation',
|
|
],
|
|
},
|
|
},
|
|
}], # OS=="ios"
|
|
['build_with_chromium==0', {
|
|
'sources': [
|
|
'objc/Framework/Classes/RTCFileLogger.mm',
|
|
'objc/Framework/Headers/WebRTC/RTCFileLogger.h',
|
|
],
|
|
}],
|
|
],
|
|
},
|
|
{
|
|
'target_name': 'rtc_sdk_peerconnection_objc',
|
|
'type': 'static_library',
|
|
'includes': [ '../build/objc_common.gypi' ],
|
|
'dependencies': [
|
|
'<(webrtc_root)/api/api.gyp:libjingle_peerconnection',
|
|
'rtc_sdk_common_objc',
|
|
],
|
|
'include_dirs': [
|
|
'objc/Framework/Classes',
|
|
'objc/Framework/Headers',
|
|
],
|
|
'direct_dependent_settings': {
|
|
'include_dirs': [
|
|
'objc/Framework/Classes',
|
|
'objc/Framework/Headers',
|
|
],
|
|
},
|
|
'link_settings': {
|
|
'xcode_settings': {
|
|
'OTHER_LDFLAGS': [
|
|
'-framework AVFoundation',
|
|
],
|
|
},
|
|
'libraries': [
|
|
'-lstdc++',
|
|
],
|
|
}, # link_settings
|
|
'sources': [
|
|
'objc/Framework/Classes/RTCAVFoundationVideoSource+Private.h',
|
|
'objc/Framework/Classes/RTCAVFoundationVideoSource.mm',
|
|
'objc/Framework/Classes/RTCAudioTrack+Private.h',
|
|
'objc/Framework/Classes/RTCAudioTrack.mm',
|
|
'objc/Framework/Classes/RTCConfiguration+Private.h',
|
|
'objc/Framework/Classes/RTCConfiguration.mm',
|
|
'objc/Framework/Classes/RTCDataChannel+Private.h',
|
|
'objc/Framework/Classes/RTCDataChannel.mm',
|
|
'objc/Framework/Classes/RTCDataChannelConfiguration+Private.h',
|
|
'objc/Framework/Classes/RTCDataChannelConfiguration.mm',
|
|
'objc/Framework/Classes/RTCI420Shader.mm',
|
|
'objc/Framework/Classes/RTCIceCandidate+Private.h',
|
|
'objc/Framework/Classes/RTCIceCandidate.mm',
|
|
'objc/Framework/Classes/RTCIceServer+Private.h',
|
|
'objc/Framework/Classes/RTCIceServer.mm',
|
|
'objc/Framework/Classes/RTCMediaConstraints+Private.h',
|
|
'objc/Framework/Classes/RTCMediaConstraints.mm',
|
|
'objc/Framework/Classes/RTCMediaStream+Private.h',
|
|
'objc/Framework/Classes/RTCMediaStream.mm',
|
|
'objc/Framework/Classes/RTCMediaStreamTrack+Private.h',
|
|
'objc/Framework/Classes/RTCMediaStreamTrack.mm',
|
|
'objc/Framework/Classes/RTCOpenGLDefines.h',
|
|
'objc/Framework/Classes/RTCOpenGLVideoRenderer.h',
|
|
'objc/Framework/Classes/RTCOpenGLVideoRenderer.mm',
|
|
'objc/Framework/Classes/RTCPeerConnection+DataChannel.mm',
|
|
'objc/Framework/Classes/RTCPeerConnection+Private.h',
|
|
'objc/Framework/Classes/RTCPeerConnection+Stats.mm',
|
|
'objc/Framework/Classes/RTCPeerConnection.mm',
|
|
'objc/Framework/Classes/RTCPeerConnectionFactory+Private.h',
|
|
'objc/Framework/Classes/RTCPeerConnectionFactory.mm',
|
|
'objc/Framework/Classes/RTCRtpCodecParameters+Private.h',
|
|
'objc/Framework/Classes/RTCRtpCodecParameters.mm',
|
|
'objc/Framework/Classes/RTCRtpEncodingParameters+Private.h',
|
|
'objc/Framework/Classes/RTCRtpEncodingParameters.mm',
|
|
'objc/Framework/Classes/RTCRtpParameters+Private.h',
|
|
'objc/Framework/Classes/RTCRtpParameters.mm',
|
|
'objc/Framework/Classes/RTCRtpReceiver+Private.h',
|
|
'objc/Framework/Classes/RTCRtpReceiver.mm',
|
|
'objc/Framework/Classes/RTCRtpSender+Private.h',
|
|
'objc/Framework/Classes/RTCRtpSender.mm',
|
|
'objc/Framework/Classes/RTCSessionDescription+Private.h',
|
|
'objc/Framework/Classes/RTCSessionDescription.mm',
|
|
'objc/Framework/Classes/RTCShader+Private.h',
|
|
'objc/Framework/Classes/RTCShader.h',
|
|
'objc/Framework/Classes/RTCShader.mm',
|
|
'objc/Framework/Classes/RTCStatsReport+Private.h',
|
|
'objc/Framework/Classes/RTCStatsReport.mm',
|
|
'objc/Framework/Classes/RTCVideoFrame+Private.h',
|
|
'objc/Framework/Classes/RTCVideoFrame.mm',
|
|
'objc/Framework/Classes/RTCVideoRendererAdapter+Private.h',
|
|
'objc/Framework/Classes/RTCVideoRendererAdapter.h',
|
|
'objc/Framework/Classes/RTCVideoRendererAdapter.mm',
|
|
'objc/Framework/Classes/RTCVideoSource+Private.h',
|
|
'objc/Framework/Classes/RTCVideoSource.mm',
|
|
'objc/Framework/Classes/RTCVideoTrack+Private.h',
|
|
'objc/Framework/Classes/RTCVideoTrack.mm',
|
|
'objc/Framework/Classes/avfoundationvideocapturer.h',
|
|
'objc/Framework/Classes/avfoundationvideocapturer.mm',
|
|
'objc/Framework/Headers/WebRTC/RTCAVFoundationVideoSource.h',
|
|
'objc/Framework/Headers/WebRTC/RTCAudioTrack.h',
|
|
'objc/Framework/Headers/WebRTC/RTCConfiguration.h',
|
|
'objc/Framework/Headers/WebRTC/RTCDataChannel.h',
|
|
'objc/Framework/Headers/WebRTC/RTCDataChannelConfiguration.h',
|
|
'objc/Framework/Headers/WebRTC/RTCIceCandidate.h',
|
|
'objc/Framework/Headers/WebRTC/RTCIceServer.h',
|
|
'objc/Framework/Headers/WebRTC/RTCMediaConstraints.h',
|
|
'objc/Framework/Headers/WebRTC/RTCMediaStream.h',
|
|
'objc/Framework/Headers/WebRTC/RTCMediaStreamTrack.h',
|
|
'objc/Framework/Headers/WebRTC/RTCPeerConnection.h',
|
|
'objc/Framework/Headers/WebRTC/RTCPeerConnectionFactory.h',
|
|
'objc/Framework/Headers/WebRTC/RTCRtpCodecParameters.h',
|
|
'objc/Framework/Headers/WebRTC/RTCRtpEncodingParameters.h',
|
|
'objc/Framework/Headers/WebRTC/RTCRtpParameters.h',
|
|
'objc/Framework/Headers/WebRTC/RTCRtpReceiver.h',
|
|
'objc/Framework/Headers/WebRTC/RTCRtpSender.h',
|
|
'objc/Framework/Headers/WebRTC/RTCSessionDescription.h',
|
|
'objc/Framework/Headers/WebRTC/RTCStatsReport.h',
|
|
'objc/Framework/Headers/WebRTC/RTCVideoFrame.h',
|
|
'objc/Framework/Headers/WebRTC/RTCVideoRenderer.h',
|
|
'objc/Framework/Headers/WebRTC/RTCVideoSource.h',
|
|
'objc/Framework/Headers/WebRTC/RTCVideoTrack.h',
|
|
], # sources
|
|
'conditions': [
|
|
['OS=="ios"', {
|
|
'sources': [
|
|
'objc/Framework/Classes/RTCEAGLVideoView.m',
|
|
'objc/Framework/Classes/RTCNativeNV12Shader.mm',
|
|
'objc/Framework/Headers/WebRTC/RTCEAGLVideoView.h',
|
|
],
|
|
'link_settings': {
|
|
'xcode_settings': {
|
|
'OTHER_LDFLAGS': [
|
|
'-framework CoreGraphics',
|
|
'-framework GLKit',
|
|
'-framework OpenGLES',
|
|
'-framework QuartzCore',
|
|
],
|
|
},
|
|
}, # link_settings
|
|
}], # OS=="ios"
|
|
['OS=="mac"', {
|
|
'sources': [
|
|
'objc/Framework/Classes/RTCNSGLVideoView.m',
|
|
'objc/Framework/Headers/WebRTC/RTCNSGLVideoView.h',
|
|
],
|
|
'link_settings': {
|
|
'xcode_settings': {
|
|
'OTHER_LDFLAGS': [
|
|
'-framework CoreMedia',
|
|
'-framework OpenGL',
|
|
],
|
|
},
|
|
},
|
|
}],
|
|
], # conditions
|
|
}, # rtc_sdk_peerconnection_objc
|
|
{
|
|
'target_name': 'rtc_sdk_framework_objc',
|
|
'type': 'shared_library',
|
|
'product_name': 'WebRTC',
|
|
'mac_bundle': 1,
|
|
'includes': [ '../build/objc_common.gypi' ],
|
|
# Slightly hacky, but we need to re-declare files here that are C
|
|
# interfaces because otherwise they will be dead-stripped during
|
|
# linking (ObjC classes cannot be dead-stripped). We might consider
|
|
# just only using ObjC interfaces.
|
|
'sources': [
|
|
'objc/Framework/Classes/RTCFieldTrials.mm',
|
|
'objc/Framework/Classes/RTCLogging.mm',
|
|
'objc/Framework/Classes/RTCMetrics.mm',
|
|
'objc/Framework/Classes/RTCSSLAdapter.mm',
|
|
'objc/Framework/Classes/RTCTracing.mm',
|
|
'objc/Framework/Headers/WebRTC/RTCFieldTrials.h',
|
|
'objc/Framework/Headers/WebRTC/RTCLogging.h',
|
|
'objc/Framework/Headers/WebRTC/RTCSSLAdapter.h',
|
|
'objc/Framework/Headers/WebRTC/RTCTracing.h',
|
|
'objc/Framework/Headers/WebRTC/WebRTC.h',
|
|
'objc/Framework/Modules/module.modulemap',
|
|
],
|
|
'mac_framework_headers': [
|
|
'objc/Framework/Headers/WebRTC/RTCAudioTrack.h',
|
|
'objc/Framework/Headers/WebRTC/RTCAVFoundationVideoSource.h',
|
|
'objc/Framework/Headers/WebRTC/RTCCameraPreviewView.h',
|
|
'objc/Framework/Headers/WebRTC/RTCConfiguration.h',
|
|
'objc/Framework/Headers/WebRTC/RTCDataChannel.h',
|
|
'objc/Framework/Headers/WebRTC/RTCDataChannelConfiguration.h',
|
|
'objc/Framework/Headers/WebRTC/RTCDispatcher.h',
|
|
'objc/Framework/Headers/WebRTC/RTCEAGLVideoView.h',
|
|
'objc/Framework/Headers/WebRTC/RTCFieldTrials.h',
|
|
'objc/Framework/Headers/WebRTC/RTCFileLogger.h',
|
|
'objc/Framework/Headers/WebRTC/RTCIceCandidate.h',
|
|
'objc/Framework/Headers/WebRTC/RTCIceServer.h',
|
|
'objc/Framework/Headers/WebRTC/RTCLogging.h',
|
|
'objc/Framework/Headers/WebRTC/RTCMacros.h',
|
|
'objc/Framework/Headers/WebRTC/RTCMediaConstraints.h',
|
|
'objc/Framework/Headers/WebRTC/RTCMediaStream.h',
|
|
'objc/Framework/Headers/WebRTC/RTCMediaStreamTrack.h',
|
|
'objc/Framework/Headers/WebRTC/RTCMetrics.h',
|
|
'objc/Framework/Headers/WebRTC/RTCMetricsSampleInfo.h',
|
|
'objc/Framework/Headers/WebRTC/RTCNSGLVideoView.h',
|
|
'objc/Framework/Headers/WebRTC/RTCPeerConnection.h',
|
|
'objc/Framework/Headers/WebRTC/RTCPeerConnectionFactory.h',
|
|
'objc/Framework/Headers/WebRTC/RTCRtpCodecParameters.h',
|
|
'objc/Framework/Headers/WebRTC/RTCRtpEncodingParameters.h',
|
|
'objc/Framework/Headers/WebRTC/RTCRtpParameters.h',
|
|
'objc/Framework/Headers/WebRTC/RTCRtpReceiver.h',
|
|
'objc/Framework/Headers/WebRTC/RTCRtpSender.h',
|
|
'objc/Framework/Headers/WebRTC/RTCSessionDescription.h',
|
|
'objc/Framework/Headers/WebRTC/RTCSSLAdapter.h',
|
|
'objc/Framework/Headers/WebRTC/RTCStatsReport.h',
|
|
'objc/Framework/Headers/WebRTC/RTCTracing.h',
|
|
'objc/Framework/Headers/WebRTC/RTCVideoFrame.h',
|
|
'objc/Framework/Headers/WebRTC/RTCVideoRenderer.h',
|
|
'objc/Framework/Headers/WebRTC/RTCVideoSource.h',
|
|
'objc/Framework/Headers/WebRTC/RTCVideoTrack.h',
|
|
'objc/Framework/Headers/WebRTC/UIDevice+RTCDevice.h',
|
|
'objc/Framework/Headers/WebRTC/WebRTC.h',
|
|
],
|
|
'dependencies': [
|
|
'<(webrtc_root)/system_wrappers/system_wrappers.gyp:field_trial_default',
|
|
'<(webrtc_root)/system_wrappers/system_wrappers.gyp:metrics_default',
|
|
'rtc_sdk_peerconnection_objc',
|
|
],
|
|
'xcode_settings': {
|
|
'CODE_SIGNING_REQUIRED': 'NO',
|
|
'CODE_SIGN_IDENTITY': '',
|
|
'DEFINES_MODULE': 'YES',
|
|
'INFOPLIST_FILE': 'objc/Framework/Info.plist',
|
|
'LD_DYLIB_INSTALL_NAME': '@rpath/WebRTC.framework/WebRTC',
|
|
'MODULEMAP_FILE': '<(webrtc_root)/sdk/Framework/Modules/module.modulemap',
|
|
},
|
|
'link_settings': {
|
|
'xcode_settings': {
|
|
'OTHER_LDFLAGS': [
|
|
'-framework AVFoundation',
|
|
'-framework AudioToolbox',
|
|
'-framework CoreGraphics',
|
|
'-framework CoreMedia',
|
|
'-framework GLKit',
|
|
'-framework VideoToolbox',
|
|
],
|
|
},
|
|
}, # link_settings
|
|
'conditions': [
|
|
# TODO(tkchin): Generate WebRTC.h based off of
|
|
# mac_framework_headers instead of hard-coding. Ok for now since we
|
|
# only really care about dynamic lib on iOS outside of chromium.
|
|
['OS!="mac"', {
|
|
'mac_framework_headers!': [
|
|
'objc/Framework/Headers/WebRTC/RTCNSGLVideoView.h',
|
|
],
|
|
}],
|
|
['build_with_chromium==1', {
|
|
'mac_framework_headers!': [
|
|
'objc/Framework/Headers/WebRTC/RTCFileLogger.h',
|
|
],
|
|
}],
|
|
], # conditions
|
|
}, # rtc_sdk_framework_objc
|
|
], # targets
|
|
}], # OS=="ios" or (OS=="mac" and mac_deployment_target=="10.7")
|
|
],
|
|
}
|