Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(585)

Side by Side Diff: webrtc/modules/audio_coding/main/acm2/initial_delay_manager.h

Issue 1481493004: audio_coding: remove "main" directory (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Rebased Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 /*
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3 *
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
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11 #ifndef WEBRTC_MODULES_AUDIO_CODING_MAIN_ACM2_INITIAL_DELAY_MANAGER_H_
12 #define WEBRTC_MODULES_AUDIO_CODING_MAIN_ACM2_INITIAL_DELAY_MANAGER_H_
13
14 #include "webrtc/base/scoped_ptr.h"
15 #include "webrtc/modules/include/module_common_types.h"
16
17 namespace webrtc {
18
19 namespace acm2 {
20
21 class InitialDelayManager {
22 public:
23 enum PacketType {
24 kUndefinedPacket, kCngPacket, kAvtPacket, kAudioPacket, kSyncPacket };
25
26 // Specifies a stream of sync-packets.
27 struct SyncStream {
28 SyncStream()
29 : num_sync_packets(0),
30 receive_timestamp(0),
31 timestamp_step(0) {
32 memset(&rtp_info, 0, sizeof(rtp_info));
33 }
34
35 int num_sync_packets;
36
37 // RTP header of the first sync-packet in the sequence.
38 WebRtcRTPHeader rtp_info;
39
40 // Received timestamp of the first sync-packet in the sequence.
41 uint32_t receive_timestamp;
42
43 // Samples per packet.
44 uint32_t timestamp_step;
45 };
46
47 InitialDelayManager(int initial_delay_ms, int late_packet_threshold);
48
49 // Update with the last received RTP header, |header|, and received timestamp,
50 // |received_timestamp|. |type| indicates the packet type. If codec is changed
51 // since the last time |new_codec| should be true. |sample_rate_hz| is the
52 // decoder's sampling rate in Hz. |header| has a field to store sampling rate
53 // but we are not sure if that is properly set at the send side, and |header|
54 // is declared constant in the caller of this function
55 // (AcmReceiver::InsertPacket()). |sync_stream| contains information required
56 // to generate a stream of sync packets.
57 void UpdateLastReceivedPacket(const WebRtcRTPHeader& header,
58 uint32_t receive_timestamp,
59 PacketType type,
60 bool new_codec,
61 int sample_rate_hz,
62 SyncStream* sync_stream);
63
64 // Based on the last received timestamp and given the current timestamp,
65 // sequence of late (or perhaps missing) packets is computed.
66 void LatePackets(uint32_t timestamp_now, SyncStream* sync_stream);
67
68 // Get playout timestamp.
69 // Returns true if the timestamp is valid (when buffering), otherwise false.
70 bool GetPlayoutTimestamp(uint32_t* playout_timestamp);
71
72 // True if buffered audio is less than the given initial delay (specified at
73 // the constructor). Buffering might be disabled by the client of this class.
74 bool buffering() { return buffering_; }
75
76 // Disable buffering in the class.
77 void DisableBuffering();
78
79 // True if any packet received for buffering.
80 bool PacketBuffered() { return last_packet_type_ != kUndefinedPacket; }
81
82 private:
83 static const uint8_t kInvalidPayloadType = 0xFF;
84
85 // Update playout timestamps. While buffering, this is about
86 // |initial_delay_ms| millisecond behind the latest received timestamp.
87 void UpdatePlayoutTimestamp(const RTPHeader& current_header,
88 int sample_rate_hz);
89
90 // Record an RTP headr and related parameter
91 void RecordLastPacket(const WebRtcRTPHeader& rtp_info,
92 uint32_t receive_timestamp,
93 PacketType type);
94
95 PacketType last_packet_type_;
96 WebRtcRTPHeader last_packet_rtp_info_;
97 uint32_t last_receive_timestamp_;
98 uint32_t timestamp_step_;
99 uint8_t audio_payload_type_;
100 const int initial_delay_ms_;
101 int buffered_audio_ms_;
102 bool buffering_;
103
104 // During the initial phase where packets are being accumulated and silence
105 // is played out, |playout_ts| is a timestamp which is equal to
106 // |initial_delay_ms_| milliseconds earlier than the most recently received
107 // RTP timestamp.
108 uint32_t playout_timestamp_;
109
110 // If the number of late packets exceed this value (computed based on current
111 // timestamp and last received timestamp), sequence of sync-packets is
112 // specified.
113 const int late_packet_threshold_;
114 };
115
116 } // namespace acm2
117
118 } // namespace webrtc
119
120 #endif // WEBRTC_MODULES_AUDIO_CODING_MAIN_ACM2_INITIAL_DELAY_MANAGER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698