1*d9f75844SAndroid Build Coastguard Worker/* 2*d9f75844SAndroid Build Coastguard Worker * Copyright 2015 The WebRTC project authors. All Rights Reserved. 3*d9f75844SAndroid Build Coastguard Worker * 4*d9f75844SAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license 5*d9f75844SAndroid Build Coastguard Worker * that can be found in the LICENSE file in the root of the source 6*d9f75844SAndroid Build Coastguard Worker * tree. An additional intellectual property rights grant can be found 7*d9f75844SAndroid Build Coastguard Worker * in the file PATENTS. All contributing project authors may 8*d9f75844SAndroid Build Coastguard Worker * be found in the AUTHORS file in the root of the source tree. 9*d9f75844SAndroid Build Coastguard Worker */ 10*d9f75844SAndroid Build Coastguard Worker 11*d9f75844SAndroid Build Coastguard Worker#import "RTCAudioTrack+Private.h" 12*d9f75844SAndroid Build Coastguard Worker 13*d9f75844SAndroid Build Coastguard Worker#import "RTCAudioSource+Private.h" 14*d9f75844SAndroid Build Coastguard Worker#import "RTCMediaStreamTrack+Private.h" 15*d9f75844SAndroid Build Coastguard Worker#import "RTCPeerConnectionFactory+Private.h" 16*d9f75844SAndroid Build Coastguard Worker#import "helpers/NSString+StdString.h" 17*d9f75844SAndroid Build Coastguard Worker 18*d9f75844SAndroid Build Coastguard Worker#include "rtc_base/checks.h" 19*d9f75844SAndroid Build Coastguard Worker 20*d9f75844SAndroid Build Coastguard Worker@implementation RTC_OBJC_TYPE (RTCAudioTrack) 21*d9f75844SAndroid Build Coastguard Worker 22*d9f75844SAndroid Build Coastguard Worker@synthesize source = _source; 23*d9f75844SAndroid Build Coastguard Worker 24*d9f75844SAndroid Build Coastguard Worker- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory 25*d9f75844SAndroid Build Coastguard Worker source:(RTC_OBJC_TYPE(RTCAudioSource) *)source 26*d9f75844SAndroid Build Coastguard Worker trackId:(NSString *)trackId { 27*d9f75844SAndroid Build Coastguard Worker RTC_DCHECK(factory); 28*d9f75844SAndroid Build Coastguard Worker RTC_DCHECK(source); 29*d9f75844SAndroid Build Coastguard Worker RTC_DCHECK(trackId.length); 30*d9f75844SAndroid Build Coastguard Worker 31*d9f75844SAndroid Build Coastguard Worker std::string nativeId = [NSString stdStringForString:trackId]; 32*d9f75844SAndroid Build Coastguard Worker rtc::scoped_refptr<webrtc::AudioTrackInterface> track = 33*d9f75844SAndroid Build Coastguard Worker factory.nativeFactory->CreateAudioTrack(nativeId, source.nativeAudioSource.get()); 34*d9f75844SAndroid Build Coastguard Worker if (self = [self initWithFactory:factory nativeTrack:track type:RTCMediaStreamTrackTypeAudio]) { 35*d9f75844SAndroid Build Coastguard Worker _source = source; 36*d9f75844SAndroid Build Coastguard Worker } 37*d9f75844SAndroid Build Coastguard Worker return self; 38*d9f75844SAndroid Build Coastguard Worker} 39*d9f75844SAndroid Build Coastguard Worker 40*d9f75844SAndroid Build Coastguard Worker- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory 41*d9f75844SAndroid Build Coastguard Worker nativeTrack:(rtc::scoped_refptr<webrtc::MediaStreamTrackInterface>)nativeTrack 42*d9f75844SAndroid Build Coastguard Worker type:(RTCMediaStreamTrackType)type { 43*d9f75844SAndroid Build Coastguard Worker NSParameterAssert(factory); 44*d9f75844SAndroid Build Coastguard Worker NSParameterAssert(nativeTrack); 45*d9f75844SAndroid Build Coastguard Worker NSParameterAssert(type == RTCMediaStreamTrackTypeAudio); 46*d9f75844SAndroid Build Coastguard Worker return [super initWithFactory:factory nativeTrack:nativeTrack type:type]; 47*d9f75844SAndroid Build Coastguard Worker} 48*d9f75844SAndroid Build Coastguard Worker 49*d9f75844SAndroid Build Coastguard Worker- (RTC_OBJC_TYPE(RTCAudioSource) *)source { 50*d9f75844SAndroid Build Coastguard Worker if (!_source) { 51*d9f75844SAndroid Build Coastguard Worker rtc::scoped_refptr<webrtc::AudioSourceInterface> source(self.nativeAudioTrack->GetSource()); 52*d9f75844SAndroid Build Coastguard Worker if (source) { 53*d9f75844SAndroid Build Coastguard Worker _source = [[RTC_OBJC_TYPE(RTCAudioSource) alloc] initWithFactory:self.factory 54*d9f75844SAndroid Build Coastguard Worker nativeAudioSource:source]; 55*d9f75844SAndroid Build Coastguard Worker } 56*d9f75844SAndroid Build Coastguard Worker } 57*d9f75844SAndroid Build Coastguard Worker return _source; 58*d9f75844SAndroid Build Coastguard Worker} 59*d9f75844SAndroid Build Coastguard Worker 60*d9f75844SAndroid Build Coastguard Worker#pragma mark - Private 61*d9f75844SAndroid Build Coastguard Worker 62*d9f75844SAndroid Build Coastguard Worker- (rtc::scoped_refptr<webrtc::AudioTrackInterface>)nativeAudioTrack { 63*d9f75844SAndroid Build Coastguard Worker return rtc::scoped_refptr<webrtc::AudioTrackInterface>( 64*d9f75844SAndroid Build Coastguard Worker static_cast<webrtc::AudioTrackInterface *>(self.nativeTrack.get())); 65*d9f75844SAndroid Build Coastguard Worker} 66*d9f75844SAndroid Build Coastguard Worker 67*d9f75844SAndroid Build Coastguard Worker@end 68