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 |