blob: 2c8ba15fb1fe9bf6f4c6e00885984693992c8de0 [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 int64_t ReceivedTime() const override;
41 int64_t RenderTime() const override;
philipele0754302017-01-25 08:56:23 -080042 bool delayed_by_retransmission() const override;
Sami Kalliomäki98824952018-08-28 14:39:21 +020043 absl::optional<RTPVideoHeader> GetCodecHeader() const;
philipelc707ab72016-04-01 02:01:54 -070044
45 private:
philipel17deeb42016-08-11 15:09:26 +020046 rtc::scoped_refptr<PacketBuffer> packet_buffer_;
philipel552866c2016-07-04 16:18:55 +020047 enum FrameType frame_type_;
philipel02447bc2016-05-13 06:01:03 -070048 VideoCodecType codec_type_;
49 uint16_t first_seq_num_;
50 uint16_t last_seq_num_;
philipelb4d31082016-07-11 08:46:29 -070051 int64_t received_time_;
philipel5ceaaae2016-05-24 10:20:47 +020052
53 // Equal to times nacked of the packet with the highet times nacked
54 // belonging to this frame.
55 int times_nacked_;
philipelc707ab72016-04-01 02:01:54 -070056};
57
58} // namespace video_coding
59} // namespace webrtc
60
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020061#endif // MODULES_VIDEO_CODING_FRAME_OBJECT_H_