blob: 62f535c464cf2cd991925b236e85d5396ab908e8 [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"
15#include "rtc_base/constructormagic.h"
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +000016
17namespace webrtc {
18
19// Forward declaration.
20class DecoderDatabase;
21
22// This class scales timestamps for codecs that need timestamp scaling.
23// This is done for codecs where one RTP timestamp does not correspond to
24// one sample.
25class TimestampScaler {
26 public:
27 explicit TimestampScaler(const DecoderDatabase& decoder_database)
28 : first_packet_received_(false),
29 numerator_(1),
30 denominator_(1),
31 external_ref_(0),
32 internal_ref_(0),
33 decoder_database_(decoder_database) {}
34
35 virtual ~TimestampScaler() {}
36
37 // Start over.
Karl Wiberg7f6c4d42015-04-09 15:44:22 +020038 virtual void Reset();
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +000039
40 // Scale the timestamp in |packet| from external to internal.
41 virtual void ToInternal(Packet* packet);
42
43 // Scale the timestamp for all packets in |packet_list| from external to
44 // internal.
45 virtual void ToInternal(PacketList* packet_list);
46
47 // Returns the internal equivalent of |external_timestamp|, given the
48 // RTP payload type |rtp_payload_type|.
49 virtual uint32_t ToInternal(uint32_t external_timestamp,
50 uint8_t rtp_payload_type);
51
52 // Scales back to external timestamp. This is the inverse of ToInternal().
53 virtual uint32_t ToExternal(uint32_t internal_timestamp) const;
54
55 private:
56 bool first_packet_received_;
57 int numerator_;
58 int denominator_;
59 uint32_t external_ref_;
60 uint32_t internal_ref_;
61 const DecoderDatabase& decoder_database_;
62
henrikg3c089d72015-09-16 05:37:44 -070063 RTC_DISALLOW_COPY_AND_ASSIGN(TimestampScaler);
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_