blob: f42ce7207a9bf2980d3512d8c7d32b186d85d41b [file] [log] [blame]
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +00001/*
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
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020011#ifndef MODULES_AUDIO_CODING_NETEQ_TIMESTAMP_SCALER_H_
12#define MODULES_AUDIO_CODING_NETEQ_TIMESTAMP_SCALER_H_
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +000013
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020014#include "modules/audio_coding/neteq/packet.h"
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +000015
16namespace webrtc {
17
18// Forward declaration.
19class 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.
24class TimestampScaler {
25 public:
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
34 virtual ~TimestampScaler() {}
35
Byoungchan Lee604fd2f2022-01-21 09:49:39 +090036 TimestampScaler(const TimestampScaler&) = delete;
37 TimestampScaler& operator=(const TimestampScaler&) = delete;
38
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +000039 // Start over.
Karl Wiberg7f6c4d42015-04-09 15:44:22 +020040 virtual void Reset();
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +000041
Artem Titovd00ce742021-07-28 20:00:17 +020042 // Scale the timestamp in `packet` from external to internal.
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +000043 virtual void ToInternal(Packet* packet);
44
Artem Titovd00ce742021-07-28 20:00:17 +020045 // Scale the timestamp for all packets in `packet_list` from external to
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +000046 // internal.
47 virtual void ToInternal(PacketList* packet_list);
48
Artem Titovd00ce742021-07-28 20:00:17 +020049 // Returns the internal equivalent of `external_timestamp`, given the
50 // RTP payload type `rtp_payload_type`.
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +000051 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_;
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +000064};
65
66} // namespace webrtc
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020067#endif // MODULES_AUDIO_CODING_NETEQ_TIMESTAMP_SCALER_H_