| Index: webrtc/modules/audio_coding/codecs/audio_encoder.h
|
| diff --git a/webrtc/modules/audio_coding/codecs/audio_encoder.h b/webrtc/modules/audio_coding/codecs/audio_encoder.h
|
| index 0a40316b713025028fd67be64f9d75a08d124168..73b4468d4657ea5c58af8067435931f66e9a3351 100644
|
| --- a/webrtc/modules/audio_coding/codecs/audio_encoder.h
|
| +++ b/webrtc/modules/audio_coding/codecs/audio_encoder.h
|
| @@ -23,18 +23,11 @@ namespace webrtc {
|
| class AudioEncoder {
|
| public:
|
| struct EncodedInfoLeaf {
|
| - EncodedInfoLeaf()
|
| - : encoded_bytes(0),
|
| - encoded_timestamp(0),
|
| - payload_type(0),
|
| - send_even_if_empty(false),
|
| - speech(true) {}
|
| -
|
| - size_t encoded_bytes;
|
| - uint32_t encoded_timestamp;
|
| - int payload_type;
|
| - bool send_even_if_empty;
|
| - bool speech;
|
| + size_t encoded_bytes = 0;
|
| + uint32_t encoded_timestamp = 0;
|
| + int payload_type = 0;
|
| + bool send_even_if_empty = false;
|
| + bool speech = true;
|
| };
|
|
|
| // This is the main struct for auxiliary encoding information. Each encoded
|
| @@ -54,26 +47,9 @@ class AudioEncoder {
|
| std::vector<EncodedInfoLeaf> redundant;
|
| };
|
|
|
| - virtual ~AudioEncoder() {}
|
| + virtual ~AudioEncoder() = default;
|
|
|
| - // Accepts one 10 ms block of input audio (i.e., sample_rate_hz() / 100 *
|
| - // num_channels() samples). Multi-channel audio must be sample-interleaved.
|
| - // The encoder produces zero or more bytes of output in |encoded| and
|
| - // returns additional encoding information.
|
| - // The caller is responsible for making sure that |max_encoded_bytes| is
|
| - // not smaller than the number of bytes actually produced by the encoder.
|
| - EncodedInfo Encode(uint32_t rtp_timestamp,
|
| - const int16_t* audio,
|
| - size_t num_samples_per_channel,
|
| - size_t max_encoded_bytes,
|
| - uint8_t* encoded);
|
| -
|
| - // Return the input sample rate in Hz and the number of input channels.
|
| - // These are constants set at instantiation time.
|
| - virtual int SampleRateHz() const = 0;
|
| - virtual int NumChannels() const = 0;
|
| -
|
| - // Return the maximum number of bytes that can be produced by the encoder
|
| + // Returns the maximum number of bytes that can be produced by the encoder
|
| // at each Encode() call. The caller can use the return value to determine
|
| // the size of the buffer that needs to be allocated. This value is allowed
|
| // to depend on encoder parameters like bitrate, frame size etc., so if
|
| @@ -81,8 +57,13 @@ class AudioEncoder {
|
| // that the buffer is large enough by calling MaxEncodedBytes() again.
|
| virtual size_t MaxEncodedBytes() const = 0;
|
|
|
| - // Returns the rate with which the RTP timestamps are updated. By default,
|
| - // this is the same as sample_rate_hz().
|
| + // Returns the input sample rate in Hz and the number of input channels.
|
| + // These are constants set at instantiation time.
|
| + virtual int SampleRateHz() const = 0;
|
| + virtual int NumChannels() const = 0;
|
| +
|
| + // Returns the rate at which the RTP timestamps are updated. The default
|
| + // implementation returns SampleRateHz().
|
| virtual int RtpTimestampRateHz() const;
|
|
|
| // Returns the number of 10 ms frames the encoder will put in the next
|
| @@ -101,52 +82,74 @@ class AudioEncoder {
|
| // provided.
|
| virtual int GetTargetBitrate() const = 0;
|
|
|
| - // Changes the target bitrate. The implementation is free to alter this value,
|
| - // e.g., if the desired value is outside the valid range.
|
| - virtual void SetTargetBitrate(int bits_per_second) {}
|
| -
|
| - // Tells the implementation what the projected packet loss rate is. The rate
|
| - // is in the range [0.0, 1.0]. This rate is typically used to adjust channel
|
| - // coding efforts, such as FEC.
|
| - virtual void SetProjectedPacketLossRate(double fraction) {}
|
| + // Accepts one 10 ms block of input audio (i.e., SampleRateHz() / 100 *
|
| + // NumChannels() samples). Multi-channel audio must be sample-interleaved.
|
| + // The encoder produces zero or more bytes of output in |encoded| and
|
| + // returns additional encoding information.
|
| + // The caller is responsible for making sure that |max_encoded_bytes| is
|
| + // not smaller than the number of bytes actually produced by the encoder.
|
| + // Encode() checks some preconditions, calls EncodeInternal() which does the
|
| + // actual work, and then checks some postconditions.
|
| + EncodedInfo Encode(uint32_t rtp_timestamp,
|
| + const int16_t* audio,
|
| + size_t num_samples_per_channel,
|
| + size_t max_encoded_bytes,
|
| + uint8_t* encoded);
|
|
|
| - // This is the encode function that the inherited classes must implement. It
|
| - // is called from Encode in the base class.
|
| virtual EncodedInfo EncodeInternal(uint32_t rtp_timestamp,
|
| const int16_t* audio,
|
| size_t max_encoded_bytes,
|
| uint8_t* encoded) = 0;
|
| -};
|
|
|
| -class AudioEncoderMutable : public AudioEncoder {
|
| - public:
|
| - enum Application { kApplicationSpeech, kApplicationAudio };
|
| -
|
| - // Discards unprocessed audio data.
|
| + // Resets the encoder to its starting state, discarding any input that has
|
| + // been fed to the encoder but not yet emitted in a packet.
|
| virtual void Reset() = 0;
|
|
|
| - // Enables codec-internal FEC, if the implementation supports it.
|
| - virtual bool SetFec(bool enable) = 0;
|
| -
|
| - // Enables or disables codec-internal VAD/DTX, if the implementation supports
|
| - // it.
|
| - virtual bool SetDtx(bool enable) = 0;
|
| -
|
| - // Sets the application mode. The implementation is free to disregard this
|
| - // setting.
|
| - virtual bool SetApplication(Application application) = 0;
|
| -
|
| - // Sets an upper limit on the payload size produced by the encoder. The
|
| - // implementation is free to disregard this setting.
|
| - virtual void SetMaxPayloadSize(int max_payload_size_bytes) = 0;
|
| -
|
| - // Sets the maximum rate which the codec may not exceed for any packet.
|
| - virtual void SetMaxRate(int max_rate_bps) = 0;
|
| -
|
| - // Informs the encoder about the maximum sample rate which the decoder will
|
| - // use when decoding the bitstream. The implementation is free to disregard
|
| - // this hint.
|
| - virtual bool SetMaxPlaybackRate(int frequency_hz) = 0;
|
| + // Enables or disables codec-internal FEC (forward error correction). Returns
|
| + // true if the codec was able to comply. The default implementation returns
|
| + // true when asked to disable FEC and false when asked to enable it (meaning
|
| + // that FEC isn't supported).
|
| + virtual bool SetFec(bool enable);
|
| +
|
| + // Enables or disables codec-internal VAD/DTX. Returns true if the codec was
|
| + // able to comply. The default implementation returns true when asked to
|
| + // disable DTX and false when asked to enable it (meaning that DTX isn't
|
| + // supported).
|
| + virtual bool SetDtx(bool enable);
|
| +
|
| + // Sets the application mode. Returns true if the codec was able to comply.
|
| + // The default implementation just returns false.
|
| + enum class Application { kSpeech, kAudio };
|
| + virtual bool SetApplication(Application application);
|
| +
|
| + // Tells the encoder about the highest sample rate the decoder is expected to
|
| + // use when decoding the bitstream. The encoder would typically use this
|
| + // information to adjust the quality of the encoding. The default
|
| + // implementation just returns true.
|
| + // TODO(kwiberg): Change return value to void, since it doesn't matter
|
| + // whether the encoder approved of the max playback rate or not.
|
| + virtual bool SetMaxPlaybackRate(int frequency_hz);
|
| +
|
| + // Tells the encoder what the projected packet loss rate is. The rate is in
|
| + // the range [0.0, 1.0]. The encoder would typically use this information to
|
| + // adjust channel coding efforts, such as FEC. The default implementation
|
| + // does nothing.
|
| + virtual void SetProjectedPacketLossRate(double fraction);
|
| +
|
| + // Tells the encoder what average bitrate we'd like it to produce. The
|
| + // encoder is free to adjust or disregard the given bitrate (the default
|
| + // implementation does the latter).
|
| + virtual void SetTargetBitrate(int target_bps);
|
| +
|
| + // Sets the maximum bitrate which must not be exceeded for any packet. The
|
| + // encoder is free to adjust or disregard this value (the default
|
| + // implementation does the latter).
|
| + virtual void SetMaxBitrate(int max_bps);
|
| +
|
| + // Sets an upper limit on the size of packet payloads produced by the
|
| + // encoder. The encoder is free to adjust or disregard this value (the
|
| + // default implementation does the latter).
|
| + virtual void SetMaxPayloadSize(int max_payload_size_bytes);
|
| };
|
| } // namespace webrtc
|
| #endif // WEBRTC_MODULES_AUDIO_CODING_CODECS_AUDIO_ENCODER_H_
|
|
|