blob: fcbb7737a4257fdcc351d8382be5f9f7e9b29432 [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
henrik.lundin@webrtc.org9c55f0f2014-06-09 08:10:28 +000011#ifndef WEBRTC_MODULES_AUDIO_CODING_NETEQ_TIMESTAMP_SCALER_H_
12#define WEBRTC_MODULES_AUDIO_CODING_NETEQ_TIMESTAMP_SCALER_H_
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +000013
henrike@webrtc.org88fbb2d2014-05-21 21:18:46 +000014#include "webrtc/base/constructormagic.h"
henrik.lundin@webrtc.org9c55f0f2014-06-09 08:10:28 +000015#include "webrtc/modules/audio_coding/neteq/packet.h"
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +000016#include "webrtc/typedefs.h"
17
18namespace webrtc {
19
20// Forward declaration.
21class DecoderDatabase;
22
23// This class scales timestamps for codecs that need timestamp scaling.
24// This is done for codecs where one RTP timestamp does not correspond to
25// one sample.
26class TimestampScaler {
27 public:
28 explicit TimestampScaler(const DecoderDatabase& decoder_database)
29 : first_packet_received_(false),
30 numerator_(1),
31 denominator_(1),
32 external_ref_(0),
33 internal_ref_(0),
34 decoder_database_(decoder_database) {}
35
36 virtual ~TimestampScaler() {}
37
38 // Start over.
Karl Wiberg7f6c4d42015-04-09 15:44:22 +020039 virtual void Reset();
henrik.lundin@webrtc.orgd94659d2013-01-29 12:09:21 +000040
41 // Scale the timestamp in |packet| from external to internal.
42 virtual void ToInternal(Packet* packet);
43
44 // Scale the timestamp for all packets in |packet_list| from external to
45 // internal.
46 virtual void ToInternal(PacketList* packet_list);
47
48 // Returns the internal equivalent of |external_timestamp|, given the
49 // RTP payload type |rtp_payload_type|.
50 virtual uint32_t ToInternal(uint32_t external_timestamp,
51 uint8_t rtp_payload_type);
52
53 // Scales back to external timestamp. This is the inverse of ToInternal().
54 virtual uint32_t ToExternal(uint32_t internal_timestamp) const;
55
56 private:
57 bool first_packet_received_;
58 int numerator_;
59 int denominator_;
60 uint32_t external_ref_;
61 uint32_t internal_ref_;
62 const DecoderDatabase& decoder_database_;
63
64 DISALLOW_COPY_AND_ASSIGN(TimestampScaler);
65};
66
67} // namespace webrtc
henrik.lundin@webrtc.org9c55f0f2014-06-09 08:10:28 +000068#endif // WEBRTC_MODULES_AUDIO_CODING_NETEQ_TIMESTAMP_SCALER_H_