xref: /aosp_15_r20/external/webrtc/modules/audio_coding/neteq/timestamp_scaler.h (revision d9f758449e529ab9291ac668be2861e7a55c2422)
1 /*
2  *  Copyright (c) 2012 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 MODULES_AUDIO_CODING_NETEQ_TIMESTAMP_SCALER_H_
12 #define MODULES_AUDIO_CODING_NETEQ_TIMESTAMP_SCALER_H_
13 
14 #include "modules/audio_coding/neteq/packet.h"
15 
16 namespace webrtc {
17 
18 // Forward declaration.
19 class DecoderDatabase;
20 
21 // This class scales timestamps for codecs that need timestamp scaling.
22 // This is done for codecs where one RTP timestamp does not correspond to
23 // one sample.
24 class TimestampScaler {
25  public:
TimestampScaler(const DecoderDatabase & decoder_database)26   explicit TimestampScaler(const DecoderDatabase& decoder_database)
27       : first_packet_received_(false),
28         numerator_(1),
29         denominator_(1),
30         external_ref_(0),
31         internal_ref_(0),
32         decoder_database_(decoder_database) {}
33 
~TimestampScaler()34   virtual ~TimestampScaler() {}
35 
36   TimestampScaler(const TimestampScaler&) = delete;
37   TimestampScaler& operator=(const TimestampScaler&) = delete;
38 
39   // Start over.
40   virtual void Reset();
41 
42   // Scale the timestamp in `packet` from external to internal.
43   virtual void ToInternal(Packet* packet);
44 
45   // Scale the timestamp for all packets in `packet_list` from external to
46   // internal.
47   virtual void ToInternal(PacketList* packet_list);
48 
49   // Returns the internal equivalent of `external_timestamp`, given the
50   // RTP payload type `rtp_payload_type`.
51   virtual uint32_t ToInternal(uint32_t external_timestamp,
52                               uint8_t rtp_payload_type);
53 
54   // Scales back to external timestamp. This is the inverse of ToInternal().
55   virtual uint32_t ToExternal(uint32_t internal_timestamp) const;
56 
57  private:
58   bool first_packet_received_;
59   int numerator_;
60   int denominator_;
61   uint32_t external_ref_;
62   uint32_t internal_ref_;
63   const DecoderDatabase& decoder_database_;
64 };
65 
66 }  // namespace webrtc
67 #endif  // MODULES_AUDIO_CODING_NETEQ_TIMESTAMP_SCALER_H_
68