| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 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 | 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 | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 32 | 32 |
| 33 namespace webrtc { | 33 namespace webrtc { |
| 34 | 34 |
| 35 struct CodecInst; | 35 struct CodecInst; |
| 36 class NetEq; | 36 class NetEq; |
| 37 | 37 |
| 38 namespace acm2 { | 38 namespace acm2 { |
| 39 | 39 |
| 40 class AcmReceiver { | 40 class AcmReceiver { |
| 41 public: | 41 public: |
| 42 struct Decoder { |
| 43 int acm_codec_id; |
| 44 uint8_t payload_type; |
| 45 // This field is meaningful for codecs where both mono and |
| 46 // stereo versions are registered under the same ID. |
| 47 size_t channels; |
| 48 int sample_rate_hz; |
| 49 }; |
| 50 |
| 42 // Constructor of the class | 51 // Constructor of the class |
| 43 explicit AcmReceiver(const AudioCodingModule::Config& config); | 52 explicit AcmReceiver(const AudioCodingModule::Config& config); |
| 44 | 53 |
| 45 // Destructor of the class. | 54 // Destructor of the class. |
| 46 ~AcmReceiver(); | 55 ~AcmReceiver(); |
| 47 | 56 |
| 48 // | 57 // |
| 49 // Inserts a payload with its associated RTP-header into NetEq. | 58 // Inserts a payload with its associated RTP-header into NetEq. |
| 50 // | 59 // |
| 51 // Input: | 60 // Input: |
| (...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 246 // -round_trip_time_ms : estimate of the round-trip-time (in milliseconds). | 255 // -round_trip_time_ms : estimate of the round-trip-time (in milliseconds). |
| 247 // Return value : list of packets to be retransmitted. | 256 // Return value : list of packets to be retransmitted. |
| 248 // | 257 // |
| 249 std::vector<uint16_t> GetNackList(int64_t round_trip_time_ms) const; | 258 std::vector<uint16_t> GetNackList(int64_t round_trip_time_ms) const; |
| 250 | 259 |
| 251 // | 260 // |
| 252 // Get statistics of calls to GetAudio(). | 261 // Get statistics of calls to GetAudio(). |
| 253 void GetDecodingCallStatistics(AudioDecodingCallStats* stats) const; | 262 void GetDecodingCallStatistics(AudioDecodingCallStats* stats) const; |
| 254 | 263 |
| 255 private: | 264 private: |
| 256 struct Decoder { | 265 const Decoder* RtpHeaderToDecoder(const RTPHeader& rtp_header, |
| 257 int acm_codec_id; | 266 uint8_t payload_type) const |
| 258 uint8_t payload_type; | |
| 259 // This field is meaningful for codecs where both mono and | |
| 260 // stereo versions are registered under the same ID. | |
| 261 size_t channels; | |
| 262 int sample_rate_hz; | |
| 263 }; | |
| 264 | |
| 265 const rtc::Optional<CodecInst> RtpHeaderToDecoder(const RTPHeader& rtp_header, | |
| 266 uint8_t payload_type) const | |
| 267 EXCLUSIVE_LOCKS_REQUIRED(crit_sect_); | 267 EXCLUSIVE_LOCKS_REQUIRED(crit_sect_); |
| 268 | 268 |
| 269 uint32_t NowInTimestamp(int decoder_sampling_rate) const; | 269 uint32_t NowInTimestamp(int decoder_sampling_rate) const; |
| 270 | 270 |
| 271 rtc::CriticalSection crit_sect_; | 271 rtc::CriticalSection crit_sect_; |
| 272 rtc::Optional<CodecInst> last_audio_decoder_ GUARDED_BY(crit_sect_); | 272 const Decoder* last_audio_decoder_ GUARDED_BY(crit_sect_); |
| 273 ACMResampler resampler_ GUARDED_BY(crit_sect_); | 273 ACMResampler resampler_ GUARDED_BY(crit_sect_); |
| 274 std::unique_ptr<int16_t[]> last_audio_buffer_ GUARDED_BY(crit_sect_); | 274 std::unique_ptr<int16_t[]> last_audio_buffer_ GUARDED_BY(crit_sect_); |
| 275 CallStatistics call_stats_ GUARDED_BY(crit_sect_); | 275 CallStatistics call_stats_ GUARDED_BY(crit_sect_); |
| 276 NetEq* neteq_; | 276 NetEq* neteq_; |
| 277 // Decoders map is keyed by payload type | 277 // Decoders map is keyed by payload type |
| 278 std::map<uint8_t, Decoder> decoders_ GUARDED_BY(crit_sect_); | 278 std::map<uint8_t, Decoder> decoders_ GUARDED_BY(crit_sect_); |
| 279 Clock* clock_; // TODO(henrik.lundin) Make const if possible. | 279 Clock* clock_; // TODO(henrik.lundin) Make const if possible. |
| 280 bool resampled_last_output_frame_ GUARDED_BY(crit_sect_); | 280 bool resampled_last_output_frame_ GUARDED_BY(crit_sect_); |
| 281 rtc::Optional<int> last_packet_sample_rate_hz_ GUARDED_BY(crit_sect_); | 281 rtc::Optional<int> last_packet_sample_rate_hz_ GUARDED_BY(crit_sect_); |
| 282 }; | 282 }; |
| 283 | 283 |
| 284 } // namespace acm2 | 284 } // namespace acm2 |
| 285 | 285 |
| 286 } // namespace webrtc | 286 } // namespace webrtc |
| 287 | 287 |
| 288 #endif // WEBRTC_MODULES_AUDIO_CODING_ACM2_ACM_RECEIVER_H_ | 288 #endif // WEBRTC_MODULES_AUDIO_CODING_ACM2_ACM_RECEIVER_H_ |
| OLD | NEW |