Skip to content

Commit

Permalink
update WebRTC to #23794, support mix unit less then 10ms
Browse files Browse the repository at this point in the history
  • Loading branch information
Piasy committed Jul 3, 2018
1 parent 600d197 commit a3d9c60
Show file tree
Hide file tree
Showing 1,163 changed files with 48,927 additions and 15,345 deletions.
3 changes: 1 addition & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -131,14 +131,13 @@ For more detailed info, please refer to [the source code](https://github.com/Pia
## Dependencies

+ FFmpeg: 3.4.2
+ WebRTC: #23505
+ WebRTC: #23794

## Development

+ Before run Android demo, push mp3 to sdcard: `adb push mp3 /sdcard/`
+ Generate sources: `./run_djinni.sh`
+ Extract libs: `./extract_libs.sh`
+ Extract WebRTC ADM libs: `./extract_webrtc_objc_libs.sh`

## Caveat

Expand Down
2 changes: 1 addition & 1 deletion extract_libs.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/bin/bash

TAG=libs-20180610
TAG=libs-20180702

wget https://github.com/Piasy/AudioMixer/releases/download/${TAG}/${TAG}.zip && \
rm -rf libs && \
Expand Down
3 changes: 0 additions & 3 deletions extract_webrtc_objc_libs.sh

This file was deleted.

30 changes: 16 additions & 14 deletions ios_project/AudioMixer.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,7 @@
8634187320D3E89400C144CB /* AudioMixerTestController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 86D17F9920D3E4CA00DFFEAC /* AudioMixerTestController.mm */; };
866A956620D164D600C7694D /* AudioMixer.h in Headers */ = {isa = PBXBuildFile; fileRef = 866A956520D164D600C7694D /* AudioMixer.h */; settings = {ATTRIBUTES = (Public, ); }; };
866A956D20D165E600C7694D /* morning-mono-16k.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 866A956820D165E500C7694D /* morning-mono-16k.mp3 */; };
866A956E20D165E600C7694D /* morning.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 866A956920D165E500C7694D /* morning.mp3 */; };
866A956F20D165E600C7694D /* iamyou.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 866A956A20D165E500C7694D /* iamyou.mp3 */; };
866A957020D165E600C7694D /* morning.raw in Resources */ = {isa = PBXBuildFile; fileRef = 866A956B20D165E500C7694D /* morning.raw */; };
866A957120D165E600C7694D /* lion.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 866A956C20D165E500C7694D /* lion.mp3 */; };
869959A320CF447A009946FC /* audio_file_decoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 8699595B20CF4479009946FC /* audio_file_decoder.h */; };
869959A420CF447A009946FC /* audio_source.h in Headers */ = {isa = PBXBuildFile; fileRef = 8699595C20CF4479009946FC /* audio_source.h */; };
869959A520CF447A009946FC /* audio_resampler.h in Headers */ = {isa = PBXBuildFile; fileRef = 8699595D20CF4479009946FC /* audio_resampler.h */; };
Expand Down Expand Up @@ -59,6 +56,9 @@
869959E720CF7D9F009946FC /* PYAAudioBuffer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 869959E520CF7D9F009946FC /* PYAAudioBuffer.mm */; };
869959E920CF85CB009946FC /* audio_mixer_api.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 869959E820CF85CB009946FC /* audio_mixer_api.cpp */; };
869959EB20CF85E7009946FC /* PYAAudioMixerApi.mm in Sources */ = {isa = PBXBuildFile; fileRef = 869959EA20CF85E7009946FC /* PYAAudioMixerApi.mm */; };
86E1F3CD20E8E9A2001C31C2 /* iamyou-48k.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 86E1F3CA20E8E9A2001C31C2 /* iamyou-48k.mp3 */; };
86E1F3CE20E8E9A2001C31C2 /* lion-48k.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 86E1F3CB20E8E9A2001C31C2 /* lion-48k.mp3 */; };
86E1F3CF20E8E9A2001C31C2 /* morning-48k.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 86E1F3CC20E8E9A2001C31C2 /* morning-48k.mp3 */; };
BF_208404374351 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FR_316246524774 /* Assets.xcassets */; };
BF_232288806286 /* AudioMixer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR_262413649868 /* AudioMixer.framework */; };
BF_387680161997 /* AudioMixer.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR_262413649868 /* AudioMixer.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
Expand Down Expand Up @@ -93,10 +93,7 @@
/* Begin PBXFileReference section */
866A956520D164D600C7694D /* AudioMixer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AudioMixer.h; sourceTree = "<group>"; };
866A956820D165E500C7694D /* morning-mono-16k.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = "morning-mono-16k.mp3"; sourceTree = "<group>"; };
866A956920D165E500C7694D /* morning.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = morning.mp3; sourceTree = "<group>"; };
866A956A20D165E500C7694D /* iamyou.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = iamyou.mp3; sourceTree = "<group>"; };
866A956B20D165E500C7694D /* morning.raw */ = {isa = PBXFileReference; lastKnownFileType = file; path = morning.raw; sourceTree = "<group>"; };
866A956C20D165E500C7694D /* lion.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = lion.mp3; sourceTree = "<group>"; };
8699595B20CF4479009946FC /* audio_file_decoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audio_file_decoder.h; sourceTree = "<group>"; };
8699595C20CF4479009946FC /* audio_source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audio_source.h; sourceTree = "<group>"; };
8699595D20CF4479009946FC /* audio_resampler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audio_resampler.h; sourceTree = "<group>"; };
Expand Down Expand Up @@ -144,6 +141,9 @@
869959EA20CF85E7009946FC /* PYAAudioMixerApi.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = PYAAudioMixerApi.mm; sourceTree = "<group>"; };
86D17F9820D3E4CA00DFFEAC /* AudioMixerTestController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AudioMixerTestController.h; sourceTree = "<group>"; };
86D17F9920D3E4CA00DFFEAC /* AudioMixerTestController.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = AudioMixerTestController.mm; sourceTree = "<group>"; };
86E1F3CA20E8E9A2001C31C2 /* iamyou-48k.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = "iamyou-48k.mp3"; sourceTree = "<group>"; };
86E1F3CB20E8E9A2001C31C2 /* lion-48k.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = "lion-48k.mp3"; sourceTree = "<group>"; };
86E1F3CC20E8E9A2001C31C2 /* morning-48k.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = "morning-48k.mp3"; sourceTree = "<group>"; };
FR_166489251693 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
FR_262413649868 /* AudioMixer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AudioMixer.framework; sourceTree = BUILT_PRODUCTS_DIR; };
FR_316246524774 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
Expand All @@ -170,11 +170,11 @@
866A956720D165E500C7694D /* mp3 */ = {
isa = PBXGroup;
children = (
86E1F3CA20E8E9A2001C31C2 /* iamyou-48k.mp3 */,
86E1F3CB20E8E9A2001C31C2 /* lion-48k.mp3 */,
86E1F3CC20E8E9A2001C31C2 /* morning-48k.mp3 */,
866A956820D165E500C7694D /* morning-mono-16k.mp3 */,
866A956920D165E500C7694D /* morning.mp3 */,
866A956A20D165E500C7694D /* iamyou.mp3 */,
866A956B20D165E500C7694D /* morning.raw */,
866A956C20D165E500C7694D /* lion.mp3 */,
);
name = mp3;
path = ../mp3;
Expand Down Expand Up @@ -441,12 +441,12 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
866A956F20D165E600C7694D /* iamyou.mp3 in Resources */,
86E1F3CD20E8E9A2001C31C2 /* iamyou-48k.mp3 in Resources */,
BF_208404374351 /* Assets.xcassets in Resources */,
866A957120D165E600C7694D /* lion.mp3 in Resources */,
866A957020D165E600C7694D /* morning.raw in Resources */,
866A956E20D165E600C7694D /* morning.mp3 in Resources */,
86E1F3CE20E8E9A2001C31C2 /* lion-48k.mp3 in Resources */,
866A956D20D165E600C7694D /* morning-mono-16k.mp3 in Resources */,
86E1F3CF20E8E9A2001C31C2 /* morning-48k.mp3 in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down Expand Up @@ -554,7 +554,7 @@
SKIP_INSTALL = YES;
SYSTEM_HEADER_SEARCH_PATHS = "$(inherited) $(PROJECT_DIR)/../libs/ffmpeg/include $(PROJECT_DIR)/../libs/webrtc/include";
TARGETED_DEVICE_FAMILY = "1,2";
USER_HEADER_SEARCH_PATHS = "$(inherited) $(PROJECT_DIR)/../libs/ffmpeg/include $(PROJECT_DIR)/../libs/webrtc/include $(PROJECT_DIR)/../djinni/support-lib $(PROJECT_DIR)/../djinni/support-lib/objc $(PROJECT_DIR)/../generated_src/cpp $(PROJECT_DIR)/../generated_src/objc $(PROJECT_DIR)/../src";
USER_HEADER_SEARCH_PATHS = "$(inherited) $(PROJECT_DIR)/../libs/ffmpeg/include $(PROJECT_DIR)/../libs/webrtc/include $(PROJECT_DIR)/../libs/webrtc/include/third_party/abseil-cpp $(PROJECT_DIR)/../djinni/support-lib $(PROJECT_DIR)/../djinni/support-lib/objc $(PROJECT_DIR)/../generated_src/cpp $(PROJECT_DIR)/../generated_src/objc $(PROJECT_DIR)/../src";
VERSIONING_SYSTEM = "apple-generic";
};
name = Release;
Expand Down Expand Up @@ -670,7 +670,7 @@
SKIP_INSTALL = YES;
SYSTEM_HEADER_SEARCH_PATHS = "$(inherited) $(PROJECT_DIR)/../libs/ffmpeg/include $(PROJECT_DIR)/../libs/webrtc/include";
TARGETED_DEVICE_FAMILY = "1,2";
USER_HEADER_SEARCH_PATHS = "$(inherited) $(PROJECT_DIR)/../libs/ffmpeg/include $(PROJECT_DIR)/../libs/webrtc/include $(PROJECT_DIR)/../djinni/support-lib $(PROJECT_DIR)/../djinni/support-lib/objc $(PROJECT_DIR)/../generated_src/cpp $(PROJECT_DIR)/../generated_src/objc $(PROJECT_DIR)/../src";
USER_HEADER_SEARCH_PATHS = "$(inherited) $(PROJECT_DIR)/../libs/ffmpeg/include $(PROJECT_DIR)/../libs/webrtc/include $(PROJECT_DIR)/../libs/webrtc/include/third_party/abseil-cpp $(PROJECT_DIR)/../djinni/support-lib $(PROJECT_DIR)/../djinni/support-lib/objc $(PROJECT_DIR)/../generated_src/cpp $(PROJECT_DIR)/../generated_src/objc $(PROJECT_DIR)/../src";
VERSIONING_SYSTEM = "apple-generic";
};
name = Debug;
Expand Down Expand Up @@ -764,6 +764,7 @@
SDKROOT = iphoneos;
SYSTEM_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../libs/ffmpeg/include $(PROJECT_DIR)/../libs/webrtc/include";
TARGETED_DEVICE_FAMILY = "1,2";
USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../libs/webrtc/include/third_party/abseil-cpp";
VALID_ARCHS = "arm64 armv7 armv7s";
};
name = Debug;
Expand Down Expand Up @@ -807,6 +808,7 @@
SDKROOT = iphoneos;
SYSTEM_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../libs/ffmpeg/include $(PROJECT_DIR)/../libs/webrtc/include";
TARGETED_DEVICE_FAMILY = "1,2";
USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../libs/webrtc/include/third_party/abseil-cpp";
VALID_ARCHS = "arm64 armv7 armv7s";
};
name = Release;
Expand Down
12 changes: 6 additions & 6 deletions ios_project/example/AudioMixerTestController.mm
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,7 @@ - (void)doDecodeAny {
_remainingData = 0;

_source = new audio_mixer::AudioFileSource(
1, [[self pathForFileName:@"morning.mp3"]
1, [[self pathForFileName:@"morning-48k.mp3"]
cStringUsingEncoding:NSUTF8StringEncoding],
_sampleRate, _channelNum, 10, 1);
_buffer = malloc(7680);
Expand Down Expand Up @@ -285,26 +285,26 @@ - (void)doMix {
mixerSourceWithType:PYAMixerSourceTypeFile
ssrc:1
volume:1
path:[self pathForFileName:@"morning.mp3"]
path:[self pathForFileName:@"morning-48k.mp3"]
sampleRate:0
channelNum:0],
[PYAMixerSource mixerSourceWithType:PYAMixerSourceTypeFile
ssrc:2
volume:1
path:[self pathForFileName:@"iamyou.mp3"]
path:[self pathForFileName:@"iamyou-48k.mp3"]
sampleRate:0
channelNum:0],
[PYAMixerSource mixerSourceWithType:PYAMixerSourceTypeFile
ssrc:3
volume:1
path:[self pathForFileName:@"lion.mp3"]
path:[self pathForFileName:@"lion-48k.mp3"]
sampleRate:0
channelNum:0],
];
PYAMixerConfig* config = [PYAMixerConfig mixerConfigWithSources:mixerSources
outputSampleRate:_sampleRate
outputChannelNum:_channelNum
frameDurationMs:10];
frameDurationMs:3];
_mixer = [[PYAAudioMixer alloc] initWithConfig:config];

[self doStartTest];
Expand Down Expand Up @@ -350,7 +350,7 @@ - (void)doRecordAndMix {
mixerSourceWithType:PYAMixerSourceTypeFile
ssrc:1
volume:1
path:[self pathForFileName:@"morning.mp3"]
path:[self pathForFileName:@"morning-48k.mp3"]
sampleRate:0
channelNum:0],
[PYAMixerSource mixerSourceWithType:PYAMixerSourceTypeRecord
Expand Down
Binary file removed ios_project/webrtc_objc_libs.zip
Binary file not shown.
2 changes: 1 addition & 1 deletion libs/webrtc/include/api/array_view.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@
#ifndef API_ARRAY_VIEW_H_
#define API_ARRAY_VIEW_H_

#include <array>
#include <algorithm>
#include <array>
#include <type_traits>

#include "rtc_base/checks.h"
Expand Down
17 changes: 8 additions & 9 deletions libs/webrtc/include/api/audio/audio_frame.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,11 +43,7 @@ class AudioFrame {
kMaxDataSizeBytes = kMaxDataSizeSamples * sizeof(int16_t),
};

enum VADActivity {
kVadActive = 0,
kVadPassive = 1,
kVadUnknown = 2
};
enum VADActivity { kVadActive = 0, kVadPassive = 1, kVadUnknown = 2 };
enum SpeechType {
kNormalSpeech = 0,
kPLC = 1,
Expand All @@ -66,9 +62,12 @@ class AudioFrame {
// ResetWithoutMuting() to skip this wasteful zeroing.
void ResetWithoutMuting();

void UpdateFrame(uint32_t timestamp, const int16_t* data,
size_t samples_per_channel, int sample_rate_hz,
SpeechType speech_type, VADActivity vad_activity,
void UpdateFrame(uint32_t timestamp,
const int16_t* data,
size_t samples_per_channel,
int sample_rate_hz,
SpeechType speech_type,
VADActivity vad_activity,
size_t num_channels = 1);

void CopyFrom(const AudioFrame& src);
Expand Down Expand Up @@ -111,7 +110,7 @@ class AudioFrame {
// Monotonically increasing timestamp intended for profiling of audio frames.
// Typically used for measuring elapsed time between two different points in
// the audio path. No lock is used to save resources and we are thread safe
// by design. Also, rtc::Optional is not used since it will cause a "complex
// by design. Also, absl::optional is not used since it will cause a "complex
// class/struct needs an explicit out-of-line destructor" build error.
int64_t profile_timestamp_ms_ = 0;

Expand Down
8 changes: 5 additions & 3 deletions libs/webrtc/include/api/audio/echo_canceller3_config.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ struct EchoCanceller3Config {
EchoCanceller3Config(const EchoCanceller3Config& e);
struct Delay {
size_t default_delay = 5;
size_t down_sampling_factor = 8;
size_t num_filters = 5;
size_t down_sampling_factor = 4;
size_t num_filters = 6;
size_t api_call_jitter_blocks = 26;
size_t min_echo_path_delay_blocks = 0;
size_t delay_headroom_blocks = 2;
Expand Down Expand Up @@ -65,7 +65,8 @@ struct EchoCanceller3Config {
float lf = 1.f;
float mf = 1.f;
float hf = 1.f;
float default_len = 0.f;
float default_len = 0.88f;
bool reverb_based_on_render = true;
bool echo_can_saturate = true;
bool bounded_erl = false;
} ep_strength;
Expand Down Expand Up @@ -156,6 +157,7 @@ struct EchoCanceller3Config {

struct Suppressor {
size_t bands_with_reliable_coherence = 5;
size_t nearend_average_blocks = 4;
} suppressor;
};
} // namespace webrtc
Expand Down
6 changes: 3 additions & 3 deletions libs/webrtc/include/api/audio_codecs/L16/audio_decoder_L16.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@
#include <memory>
#include <vector>

#include "absl/types/optional.h"
#include "api/audio_codecs/audio_codec_pair_id.h"
#include "api/audio_codecs/audio_decoder.h"
#include "api/audio_codecs/audio_format.h"
#include "api/optional.h"

namespace webrtc {

Expand All @@ -35,11 +35,11 @@ struct AudioDecoderL16 {
int sample_rate_hz = 8000;
int num_channels = 1;
};
static rtc::Optional<Config> SdpToConfig(const SdpAudioFormat& audio_format);
static absl::optional<Config> SdpToConfig(const SdpAudioFormat& audio_format);
static void AppendSupportedDecoders(std::vector<AudioCodecSpec>* specs);
static std::unique_ptr<AudioDecoder> MakeAudioDecoder(
const Config& config,
rtc::Optional<AudioCodecPairId> codec_pair_id = rtc::nullopt);
absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt);
};

} // namespace webrtc
Expand Down
6 changes: 3 additions & 3 deletions libs/webrtc/include/api/audio_codecs/L16/audio_encoder_L16.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@
#include <memory>
#include <vector>

#include "absl/types/optional.h"
#include "api/audio_codecs/audio_codec_pair_id.h"
#include "api/audio_codecs/audio_encoder.h"
#include "api/audio_codecs/audio_format.h"
#include "api/optional.h"

namespace webrtc {

Expand All @@ -37,13 +37,13 @@ struct AudioEncoderL16 {
int num_channels = 1;
int frame_size_ms = 10;
};
static rtc::Optional<Config> SdpToConfig(const SdpAudioFormat& audio_format);
static absl::optional<Config> SdpToConfig(const SdpAudioFormat& audio_format);
static void AppendSupportedEncoders(std::vector<AudioCodecSpec>* specs);
static AudioCodecInfo QueryAudioEncoder(const Config& config);
static std::unique_ptr<AudioEncoder> MakeAudioEncoder(
const Config& config,
int payload_type,
rtc::Optional<AudioCodecPairId> codec_pair_id = rtc::nullopt);
absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt);
};

} // namespace webrtc
Expand Down
8 changes: 4 additions & 4 deletions libs/webrtc/include/api/audio_codecs/audio_decoder.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@
#include <memory>
#include <vector>

#include "absl/types/optional.h"
#include "api/array_view.h"
#include "api/optional.h"
#include "rtc_base/buffer.h"
#include "rtc_base/constructormagic.h"
#include "typedefs.h" // NOLINT(build/include)
Expand Down Expand Up @@ -53,11 +53,11 @@ class AudioDecoder {

// Decodes this frame of audio and writes the result in |decoded|.
// |decoded| must be large enough to store as many samples as indicated by a
// call to Duration() . On success, returns an rtc::Optional containing the
// call to Duration() . On success, returns an absl::optional containing the
// total number of samples across all channels, as well as whether the
// decoder produced comfort noise or speech. On failure, returns an empty
// rtc::Optional. Decode may be called at most once per frame object.
virtual rtc::Optional<DecodeResult> Decode(
// absl::optional. Decode may be called at most once per frame object.
virtual absl::optional<DecodeResult> Decode(
rtc::ArrayView<int16_t> decoded) const = 0;
};

Expand Down
4 changes: 2 additions & 2 deletions libs/webrtc/include/api/audio_codecs/audio_decoder_factory.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@
#include <memory>
#include <vector>

#include "absl/types/optional.h"
#include "api/audio_codecs/audio_codec_pair_id.h"
#include "api/audio_codecs/audio_decoder.h"
#include "api/audio_codecs/audio_format.h"
#include "api/optional.h"
#include "rtc_base/refcount.h"

namespace webrtc {
Expand All @@ -41,7 +41,7 @@ class AudioDecoderFactory : public rtc::RefCountInterface {
// work.
virtual std::unique_ptr<AudioDecoder> MakeAudioDecoder(
const SdpAudioFormat& format,
rtc::Optional<AudioCodecPairId> codec_pair_id) = 0;
absl::optional<AudioCodecPairId> codec_pair_id) = 0;
};

} // namespace webrtc
Expand Down
Loading

0 comments on commit a3d9c60

Please sign in to comment.