Henrik Lundin | 45c6449 | 2015-03-30 19:00:44 +0200 | [diff] [blame] | 1 | /* |
| 2 | * Copyright (c) 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 | |
kjellander | 3e6db23 | 2015-11-26 04:44:54 -0800 | [diff] [blame] | 11 | #ifndef WEBRTC_MODULES_AUDIO_CODING_ACM2_CODEC_MANAGER_H_ |
| 12 | #define WEBRTC_MODULES_AUDIO_CODING_ACM2_CODEC_MANAGER_H_ |
Henrik Lundin | 45c6449 | 2015-03-30 19:00:44 +0200 | [diff] [blame] | 13 | |
kwiberg | e1a27d4 | 2015-11-18 07:32:49 -0800 | [diff] [blame] | 14 | #include <map> |
| 15 | |
Henrik Lundin | 45c6449 | 2015-03-30 19:00:44 +0200 | [diff] [blame] | 16 | #include "webrtc/base/constructormagic.h" |
Karl Wiberg | be57983 | 2015-11-10 22:34:18 +0100 | [diff] [blame] | 17 | #include "webrtc/base/optional.h" |
Karl Wiberg | 2ea71c3 | 2015-05-07 15:49:23 +0200 | [diff] [blame] | 18 | #include "webrtc/base/scoped_ptr.h" |
Henrik Lundin | 45c6449 | 2015-03-30 19:00:44 +0200 | [diff] [blame] | 19 | #include "webrtc/base/thread_checker.h" |
kjellander | 3e6db23 | 2015-11-26 04:44:54 -0800 | [diff] [blame] | 20 | #include "webrtc/modules/audio_coding/acm2/rent_a_codec.h" |
| 21 | #include "webrtc/modules/audio_coding/include/audio_coding_module_typedefs.h" |
Henrik Lundin | 45c6449 | 2015-03-30 19:00:44 +0200 | [diff] [blame] | 22 | #include "webrtc/common_types.h" |
| 23 | |
| 24 | namespace webrtc { |
| 25 | |
| 26 | class AudioDecoder; |
Karl Wiberg | bd1bc47 | 2015-05-18 12:18:54 +0200 | [diff] [blame] | 27 | class AudioEncoder; |
Henrik Lundin | 45c6449 | 2015-03-30 19:00:44 +0200 | [diff] [blame] | 28 | |
| 29 | namespace acm2 { |
| 30 | |
Henrik Lundin | 45c6449 | 2015-03-30 19:00:44 +0200 | [diff] [blame] | 31 | class CodecManager final { |
| 32 | public: |
Karl Wiberg | bd1bc47 | 2015-05-18 12:18:54 +0200 | [diff] [blame] | 33 | CodecManager(); |
Henrik Lundin | 45c6449 | 2015-03-30 19:00:44 +0200 | [diff] [blame] | 34 | ~CodecManager(); |
| 35 | |
Karl Wiberg | 7e0c7d4 | 2015-05-18 14:52:29 +0200 | [diff] [blame] | 36 | int RegisterEncoder(const CodecInst& send_codec); |
Henrik Lundin | 45c6449 | 2015-03-30 19:00:44 +0200 | [diff] [blame] | 37 | |
kwiberg | 12cfc9b | 2015-09-08 05:57:53 -0700 | [diff] [blame] | 38 | void RegisterEncoder(AudioEncoder* external_speech_encoder); |
Karl Wiberg | 7e0c7d4 | 2015-05-18 14:52:29 +0200 | [diff] [blame] | 39 | |
Karl Wiberg | be57983 | 2015-11-10 22:34:18 +0100 | [diff] [blame] | 40 | rtc::Optional<CodecInst> GetCodecInst() const; |
Henrik Lundin | 45c6449 | 2015-03-30 19:00:44 +0200 | [diff] [blame] | 41 | |
Henrik Lundin | 45c6449 | 2015-03-30 19:00:44 +0200 | [diff] [blame] | 42 | bool SetCopyRed(bool enable); |
| 43 | |
Karl Wiberg | 2ea71c3 | 2015-05-07 15:49:23 +0200 | [diff] [blame] | 44 | int SetVAD(bool enable, ACMVADMode mode); |
Henrik Lundin | 45c6449 | 2015-03-30 19:00:44 +0200 | [diff] [blame] | 45 | |
| 46 | void VAD(bool* dtx_enabled, bool* vad_enabled, ACMVADMode* mode) const; |
| 47 | |
| 48 | int SetCodecFEC(bool enable_codec_fec); |
| 49 | |
Karl Wiberg | bd1bc47 | 2015-05-18 12:18:54 +0200 | [diff] [blame] | 50 | // Returns a pointer to AudioDecoder of the given codec. For iSAC, encoding |
| 51 | // and decoding have to be performed on a shared codec instance. By calling |
| 52 | // this method, we get the codec instance that ACM owns. |
| 53 | // If |codec| does not share an instance between encoder and decoder, returns |
| 54 | // null. |
| 55 | AudioDecoder* GetAudioDecoder(const CodecInst& codec); |
| 56 | |
kwiberg | 1379f1f | 2015-11-23 04:30:52 -0800 | [diff] [blame] | 57 | bool red_enabled() const { return codec_stack_params_.use_red; } |
Henrik Lundin | 45c6449 | 2015-03-30 19:00:44 +0200 | [diff] [blame] | 58 | |
kwiberg | 1379f1f | 2015-11-23 04:30:52 -0800 | [diff] [blame] | 59 | bool codec_fec_enabled() const { return codec_stack_params_.use_codec_fec; } |
Henrik Lundin | 45c6449 | 2015-03-30 19:00:44 +0200 | [diff] [blame] | 60 | |
kwiberg | e155ae6 | 2015-11-16 04:49:54 -0800 | [diff] [blame] | 61 | AudioEncoder* CurrentEncoder() { return rent_a_codec_.GetEncoderStack(); } |
| 62 | const AudioEncoder* CurrentEncoder() const { |
| 63 | return rent_a_codec_.GetEncoderStack(); |
| 64 | } |
Henrik Lundin | 45c6449 | 2015-03-30 19:00:44 +0200 | [diff] [blame] | 65 | |
kwiberg | 12cfc9b | 2015-09-08 05:57:53 -0700 | [diff] [blame] | 66 | bool CurrentEncoderIsOpus() const { return encoder_is_opus_; } |
| 67 | |
Henrik Lundin | 45c6449 | 2015-03-30 19:00:44 +0200 | [diff] [blame] | 68 | private: |
Henrik Lundin | 45c6449 | 2015-03-30 19:00:44 +0200 | [diff] [blame] | 69 | rtc::ThreadChecker thread_checker_; |
Henrik Lundin | 45c6449 | 2015-03-30 19:00:44 +0200 | [diff] [blame] | 70 | CodecInst send_codec_inst_; |
kwiberg | c95c366 | 2015-11-10 06:35:21 -0800 | [diff] [blame] | 71 | RentACodec rent_a_codec_; |
kwiberg | 1379f1f | 2015-11-23 04:30:52 -0800 | [diff] [blame] | 72 | RentACodec::StackParameters codec_stack_params_; |
kwiberg | e1a27d4 | 2015-11-18 07:32:49 -0800 | [diff] [blame] | 73 | |
kwiberg | 12cfc9b | 2015-09-08 05:57:53 -0700 | [diff] [blame] | 74 | bool encoder_is_opus_; |
Henrik Lundin | 45c6449 | 2015-03-30 19:00:44 +0200 | [diff] [blame] | 75 | |
henrikg | 3c089d7 | 2015-09-16 05:37:44 -0700 | [diff] [blame] | 76 | RTC_DISALLOW_COPY_AND_ASSIGN(CodecManager); |
Henrik Lundin | 45c6449 | 2015-03-30 19:00:44 +0200 | [diff] [blame] | 77 | }; |
| 78 | |
| 79 | } // namespace acm2 |
| 80 | } // namespace webrtc |
kjellander | 3e6db23 | 2015-11-26 04:44:54 -0800 | [diff] [blame] | 81 | #endif // WEBRTC_MODULES_AUDIO_CODING_ACM2_CODEC_MANAGER_H_ |