123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- #ifndef API_AUDIO_AUDIO_FRAME_H_
- #define API_AUDIO_AUDIO_FRAME_H_
- #include <stddef.h>
- #include <stdint.h>
- #include <utility>
- #include "api/audio/channel_layout.h"
- #include "api/rtp_packet_infos.h"
- #include "rtc_base/constructor_magic.h"
- namespace webrtc {
- class AudioFrame {
- public:
-
-
-
-
-
-
- enum : size_t {
-
-
- kMaxDataSizeSamples = 7680,
- kMaxDataSizeBytes = kMaxDataSizeSamples * sizeof(int16_t),
- };
- enum VADActivity { kVadActive = 0, kVadPassive = 1, kVadUnknown = 2 };
- enum SpeechType {
- kNormalSpeech = 0,
- kPLC = 1,
- kCNG = 2,
- kPLCCNG = 3,
- kCodecPLC = 5,
- kUndefined = 4
- };
- AudioFrame();
- friend void swap(AudioFrame& a, AudioFrame& b);
-
- void Reset();
-
-
-
-
- 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,
- size_t num_channels = 1);
- void CopyFrom(const AudioFrame& src);
-
-
-
-
-
- void UpdateProfileTimeStamp();
-
-
-
- int64_t ElapsedProfileTimeMs() const;
-
-
-
- const int16_t* data() const;
- int16_t* mutable_data();
-
- void Mute();
-
- bool muted() const;
- size_t max_16bit_samples() const { return kMaxDataSizeSamples; }
- size_t samples_per_channel() const { return samples_per_channel_; }
- size_t num_channels() const { return num_channels_; }
- ChannelLayout channel_layout() const { return channel_layout_; }
- int sample_rate_hz() const { return sample_rate_hz_; }
- void set_absolute_capture_timestamp_ms(
- int64_t absolute_capture_time_stamp_ms) {
- absolute_capture_timestamp_ms_ = absolute_capture_time_stamp_ms;
- }
- absl::optional<int64_t> absolute_capture_timestamp_ms() const {
- return absolute_capture_timestamp_ms_;
- }
-
- uint32_t timestamp_ = 0;
-
-
- int64_t elapsed_time_ms_ = -1;
-
-
- int64_t ntp_time_ms_ = -1;
- size_t samples_per_channel_ = 0;
- int sample_rate_hz_ = 0;
- size_t num_channels_ = 0;
- ChannelLayout channel_layout_ = CHANNEL_LAYOUT_NONE;
- SpeechType speech_type_ = kUndefined;
- VADActivity vad_activity_ = kVadUnknown;
-
-
-
-
-
- int64_t profile_timestamp_ms_ = 0;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- RtpPacketInfos packet_infos_;
- private:
-
-
-
- static const int16_t* empty_data();
- int16_t data_[kMaxDataSizeSamples];
- bool muted_ = true;
-
-
-
-
- absl::optional<int64_t> absolute_capture_timestamp_ms_;
- RTC_DISALLOW_COPY_AND_ASSIGN(AudioFrame);
- };
- }
- #endif
|