blob: 898098451dc93dfe22c2008f65585e4d2177bef0 [file] [log] [blame]
philipelc707ab72016-04-01 02:01:54 -07001/*
2 * Copyright (c) 2016 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_VIDEO_CODING_FRAME_OBJECT_H_
12#define MODULES_VIDEO_CODING_FRAME_OBJECT_H_
philipelc707ab72016-04-01 02:01:54 -070013
Danil Chapovalov0040b662018-06-18 10:48:16 +020014#include "absl/types/optional.h"
philipeld5a272f2018-02-21 14:30:34 +010015#include "api/video/encoded_frame.h"
Mirko Bonadei71207422017-09-15 13:58:09 +020016#include "common_types.h" // NOLINT(build/include)
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020017#include "modules/include/module_common_types.h"
philipelc707ab72016-04-01 02:01:54 -070018
19namespace webrtc {
20namespace video_coding {
21
philipelc707ab72016-04-01 02:01:54 -070022class PacketBuffer;
23
philipele7c891f2018-02-22 14:35:06 +010024class RtpFrameObject : public EncodedFrame {
philipelc707ab72016-04-01 02:01:54 -070025 public:
26 RtpFrameObject(PacketBuffer* packet_buffer,
philipel02447bc2016-05-13 06:01:03 -070027 uint16_t first_seq_num,
philipel5ceaaae2016-05-24 10:20:47 +020028 uint16_t last_seq_num,
29 size_t frame_size,
philipelb4d31082016-07-11 08:46:29 -070030 int times_nacked,
31 int64_t received_time);
philipelf4139332016-04-20 10:26:34 +020032
philipelc707ab72016-04-01 02:01:54 -070033 ~RtpFrameObject();
philipelf4139332016-04-20 10:26:34 +020034 uint16_t first_seq_num() const;
35 uint16_t last_seq_num() const;
philipel5ceaaae2016-05-24 10:20:47 +020036 int times_nacked() const;
philipel552866c2016-07-04 16:18:55 +020037 enum FrameType frame_type() const;
philipel02447bc2016-05-13 06:01:03 -070038 VideoCodecType codec_type() const;
philipelc707ab72016-04-01 02:01:54 -070039 bool GetBitstream(uint8_t* destination) const override;
philipelb4d31082016-07-11 08:46:29 -070040 uint32_t Timestamp() const override;
41 int64_t ReceivedTime() const override;
42 int64_t RenderTime() const override;
philipele0754302017-01-25 08:56:23 -080043 bool delayed_by_retransmission() const override;
Danil Chapovalov0040b662018-06-18 10:48:16 +020044 absl::optional<RTPVideoTypeHeader> GetCodecHeader() const;
philipelc707ab72016-04-01 02:01:54 -070045
46 private:
philipel17deeb42016-08-11 15:09:26 +020047 rtc::scoped_refptr<PacketBuffer> packet_buffer_;
philipel552866c2016-07-04 16:18:55 +020048 enum FrameType frame_type_;
philipel02447bc2016-05-13 06:01:03 -070049 VideoCodecType codec_type_;
50 uint16_t first_seq_num_;
51 uint16_t last_seq_num_;
philipelb4d31082016-07-11 08:46:29 -070052 uint32_t timestamp_;
53 int64_t received_time_;
philipel5ceaaae2016-05-24 10:20:47 +020054
55 // Equal to times nacked of the packet with the highet times nacked
56 // belonging to this frame.
57 int times_nacked_;
philipelc707ab72016-04-01 02:01:54 -070058};
59
60} // namespace video_coding
61} // namespace webrtc
62
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020063#endif // MODULES_VIDEO_CODING_FRAME_OBJECT_H_