blob: 3389b7612c829f2cf1d8cb454033c813108ebce4 [file] [log] [blame]
Jon Hjelleca91e382016-01-21 15:36:47 -08001/*
2 * Copyright 2015 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
tkchin9eeb6242016-04-27 01:54:20 -070011#import "RTCAudioTrack+Private.h"
Jon Hjelleca91e382016-01-21 15:36:47 -080012
tkchind4bfbfc2016-08-30 11:56:05 -070013#import "RTCAudioSource+Private.h"
tkchin9eeb6242016-04-27 01:54:20 -070014#import "RTCMediaStreamTrack+Private.h"
15#import "RTCPeerConnectionFactory+Private.h"
Anders Carlsson7bca8ca2018-08-30 09:30:29 +020016#import "helpers/NSString+StdString.h"
Jon Hjelleca91e382016-01-21 15:36:47 -080017
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020018#include "rtc_base/checks.h"
tkchind4bfbfc2016-08-30 11:56:05 -070019
Jon Hjelleca91e382016-01-21 15:36:47 -080020@implementation RTCAudioTrack
21
tkchind4bfbfc2016-08-30 11:56:05 -070022@synthesize source = _source;
23
Jon Hjelleca91e382016-01-21 15:36:47 -080024- (instancetype)initWithFactory:(RTCPeerConnectionFactory *)factory
tkchind4bfbfc2016-08-30 11:56:05 -070025 source:(RTCAudioSource *)source
Jon Hjelleca91e382016-01-21 15:36:47 -080026 trackId:(NSString *)trackId {
tkchind4bfbfc2016-08-30 11:56:05 -070027 RTC_DCHECK(factory);
28 RTC_DCHECK(source);
29 RTC_DCHECK(trackId.length);
30
Jon Hjelleca91e382016-01-21 15:36:47 -080031 std::string nativeId = [NSString stdStringForString:trackId];
32 rtc::scoped_refptr<webrtc::AudioTrackInterface> track =
tkchind4bfbfc2016-08-30 11:56:05 -070033 factory.nativeFactory->CreateAudioTrack(nativeId, source.nativeAudioSource);
Yura Yaroshevich01cee072018-07-11 15:35:40 +030034 if (self = [self initWithFactory:factory nativeTrack:track type:RTCMediaStreamTrackTypeAudio]) {
tkchind4bfbfc2016-08-30 11:56:05 -070035 _source = source;
36 }
37 return self;
Jon Hjelleca91e382016-01-21 15:36:47 -080038}
39
Yura Yaroshevich01cee072018-07-11 15:35:40 +030040- (instancetype)initWithFactory:(RTCPeerConnectionFactory *)factory
41 nativeTrack:(rtc::scoped_refptr<webrtc::MediaStreamTrackInterface>)nativeTrack
42 type:(RTCMediaStreamTrackType)type {
43 NSParameterAssert(factory);
Jon Hjelleca91e382016-01-21 15:36:47 -080044 NSParameterAssert(nativeTrack);
45 NSParameterAssert(type == RTCMediaStreamTrackTypeAudio);
Yura Yaroshevich01cee072018-07-11 15:35:40 +030046 return [super initWithFactory:factory nativeTrack:nativeTrack type:type];
Jon Hjelleca91e382016-01-21 15:36:47 -080047}
48
tkchind4bfbfc2016-08-30 11:56:05 -070049
50- (RTCAudioSource *)source {
51 if (!_source) {
52 rtc::scoped_refptr<webrtc::AudioSourceInterface> source =
53 self.nativeAudioTrack->GetSource();
54 if (source) {
Yura Yaroshevich01cee072018-07-11 15:35:40 +030055 _source =
56 [[RTCAudioSource alloc] initWithFactory:self.factory nativeAudioSource:source.get()];
tkchind4bfbfc2016-08-30 11:56:05 -070057 }
58 }
59 return _source;
60}
61
Jon Hjelleca91e382016-01-21 15:36:47 -080062#pragma mark - Private
63
64- (rtc::scoped_refptr<webrtc::AudioTrackInterface>)nativeAudioTrack {
65 return static_cast<webrtc::AudioTrackInterface *>(self.nativeTrack.get());
66}
67
68@end