blob: 6a97f46eaaa342083346de71327c0844d2b9f6a7 [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
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020020@implementation RTC_OBJC_TYPE (RTCAudioTrack)
Jon Hjelleca91e382016-01-21 15:36:47 -080021
tkchind4bfbfc2016-08-30 11:56:05 -070022@synthesize source = _source;
23
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020024- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
25 source:(RTC_OBJC_TYPE(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
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020040- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
Yura Yaroshevich01cee072018-07-11 15:35:40 +030041 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
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020049- (RTC_OBJC_TYPE(RTCAudioSource) *)source {
tkchind4bfbfc2016-08-30 11:56:05 -070050 if (!_source) {
51 rtc::scoped_refptr<webrtc::AudioSourceInterface> source =
52 self.nativeAudioTrack->GetSource();
53 if (source) {
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020054 _source = [[RTC_OBJC_TYPE(RTCAudioSource) alloc] initWithFactory:self.factory
55 nativeAudioSource:source.get()];
tkchind4bfbfc2016-08-30 11:56:05 -070056 }
57 }
58 return _source;
59}
60
Jon Hjelleca91e382016-01-21 15:36:47 -080061#pragma mark - Private
62
63- (rtc::scoped_refptr<webrtc::AudioTrackInterface>)nativeAudioTrack {
64 return static_cast<webrtc::AudioTrackInterface *>(self.nativeTrack.get());
65}
66
67@end