Index: webrtc/modules/audio_coding/codecs/isac/audio_encoder_isac_t.h |
diff --git a/webrtc/modules/audio_coding/codecs/isac/audio_encoder_isac_t.h b/webrtc/modules/audio_coding/codecs/isac/audio_encoder_isac_t.h |
index a8498fa224b65420d6797324f064a041dcdc7e7c..5484395ad813e92f55384984f12aaca27f64c860 100644 |
--- a/webrtc/modules/audio_coding/codecs/isac/audio_encoder_isac_t.h |
+++ b/webrtc/modules/audio_coding/codecs/isac/audio_encoder_isac_t.h |
@@ -19,6 +19,8 @@ |
namespace webrtc { |
+struct CodecInst; |
+ |
template <typename T> |
class AudioEncoderIsacT final : public AudioEncoder { |
public: |
@@ -28,33 +30,35 @@ class AudioEncoderIsacT final : public AudioEncoder { |
// - 32000 Hz, 30 ms, 10000-56000 bps (if T has super-wideband support) |
// - 48000 Hz, 30 ms, 10000-56000 bps (if T has super-wideband support) |
struct Config { |
- Config(); |
bool IsOk() const; |
- LockedIsacBandwidthInfo* bwinfo; |
+ LockedIsacBandwidthInfo* bwinfo = nullptr; |
- int payload_type; |
- int sample_rate_hz; |
- int frame_size_ms; |
- int bit_rate; // Limit on the short-term average bit rate, in bits/s. |
- int max_payload_size_bytes; |
- int max_bit_rate; |
+ int payload_type = 103; |
+ int sample_rate_hz = 16000; |
+ int frame_size_ms = 30; |
+ int bit_rate = kDefaultBitRate; // Limit on the short-term average bit |
+ // rate, in bits/s. |
+ int max_payload_size_bytes = -1; |
+ int max_bit_rate = -1; |
// If true, the encoder will dynamically adjust frame size and bit rate; |
// the configured values are then merely the starting point. |
- bool adaptive_mode; |
+ bool adaptive_mode = false; |
// In adaptive mode, prevent adaptive changes to the frame size. (Not used |
// in nonadaptive mode.) |
- bool enforce_frame_size; |
+ bool enforce_frame_size = false; |
}; |
explicit AudioEncoderIsacT(const Config& config); |
+ explicit AudioEncoderIsacT(const CodecInst& codec_inst, |
+ LockedIsacBandwidthInfo* bwinfo); |
~AudioEncoderIsacT() override; |
+ size_t MaxEncodedBytes() const override; |
int SampleRateHz() const override; |
int NumChannels() const override; |
- size_t MaxEncodedBytes() const override; |
size_t Num10MsFramesInNextPacket() const override; |
size_t Max10MsFramesInAPacket() const override; |
int GetTargetBitrate() const override; |
@@ -62,18 +66,26 @@ class AudioEncoderIsacT final : public AudioEncoder { |
const int16_t* audio, |
size_t max_encoded_bytes, |
uint8_t* encoded) override; |
+ void Reset() override; |
+ void SetMaxPayloadSize(int max_payload_size_bytes) override; |
+ void SetMaxBitrate(int max_rate_bps) override; |
private: |
// This value is taken from STREAM_SIZE_MAX_60 for iSAC float (60 ms) and |
// STREAM_MAXW16_60MS for iSAC fix (60 ms). |
static const size_t kSufficientEncodeBufferSizeBytes = 400; |
- const int payload_type_; |
- typename T::instance_type* isac_state_; |
- LockedIsacBandwidthInfo* bwinfo_; |
+ static const int kDefaultBitRate = 32000; |
+ |
+ // Recreate the iSAC encoder instance with the given settings, and save them. |
+ void RecreateEncoderInstance(const Config& config); |
+ |
+ Config config_; |
+ typename T::instance_type* isac_state_ = nullptr; |
+ LockedIsacBandwidthInfo* bwinfo_ = nullptr; |
// Have we accepted input but not yet emitted it in a packet? |
- bool packet_in_progress_; |
+ bool packet_in_progress_ = false; |
// Timestamp of the first input of the currently in-progress packet. |
uint32_t packet_timestamp_; |
@@ -81,8 +93,6 @@ class AudioEncoderIsacT final : public AudioEncoder { |
// Timestamp of the previously encoded packet. |
uint32_t last_encoded_timestamp_; |
- const int target_bitrate_bps_; |
- |
DISALLOW_COPY_AND_ASSIGN(AudioEncoderIsacT); |
}; |