blob: 66f338a4cf118cf384e727a25ee7401079580c78 [file] [log] [blame]
niklase@google.com470e71d2011-07-07 08:21:25 +00001/*
stefan@webrtc.org29794612012-02-08 08:58:55 +00002 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
niklase@google.com470e71d2011-07-07 08:21:25 +00003 *
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_BUFFER_H_
12#define MODULES_VIDEO_CODING_FRAME_BUFFER_H_
niklase@google.com470e71d2011-07-07 08:21:25 +000013
stefana669a3a2016-10-06 05:04:52 -070014#include <vector>
15
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020016#include "modules/include/module_common_types.h"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020017#include "modules/video_coding/encoded_frame.h"
Yves Gerey665174f2018-06-19 15:03:05 +020018#include "modules/video_coding/include/video_coding.h"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020019#include "modules/video_coding/jitter_buffer_common.h"
20#include "modules/video_coding/session_info.h"
Mirko Bonadei71207422017-09-15 13:58:09 +020021#include "typedefs.h" // NOLINT(build/include)
niklase@google.com470e71d2011-07-07 08:21:25 +000022
agalusza@google.comd818dcb2013-07-29 21:48:11 +000023namespace webrtc {
niklase@google.com470e71d2011-07-07 08:21:25 +000024
agalusza@google.comd818dcb2013-07-29 21:48:11 +000025class VCMFrameBuffer : public VCMEncodedFrame {
26 public:
27 VCMFrameBuffer();
28 virtual ~VCMFrameBuffer();
niklase@google.com470e71d2011-07-07 08:21:25 +000029
agalusza@google.comd818dcb2013-07-29 21:48:11 +000030 VCMFrameBuffer(const VCMFrameBuffer& rhs);
niklase@google.com470e71d2011-07-07 08:21:25 +000031
agalusza@google.comd818dcb2013-07-29 21:48:11 +000032 virtual void Reset();
niklase@google.com470e71d2011-07-07 08:21:25 +000033
agalusza@google.comd818dcb2013-07-29 21:48:11 +000034 VCMFrameBufferEnum InsertPacket(const VCMPacket& packet,
35 int64_t timeInMs,
agalusza@google.coma7e360e2013-08-01 03:15:08 +000036 VCMDecodeErrorMode decode_error_mode,
agalusza@google.comd818dcb2013-07-29 21:48:11 +000037 const FrameData& frame_data);
niklase@google.com470e71d2011-07-07 08:21:25 +000038
agalusza@google.comd818dcb2013-07-29 21:48:11 +000039 // State
40 // Get current state of frame
41 VCMFrameBufferStateEnum GetState() const;
agalusza@google.comd818dcb2013-07-29 21:48:11 +000042 void PrepareForDecode(bool continuous);
niklase@google.com470e71d2011-07-07 08:21:25 +000043
agalusza@google.comd818dcb2013-07-29 21:48:11 +000044 bool IsSessionComplete() const;
45 bool HaveFirstPacket() const;
agalusza@google.comd818dcb2013-07-29 21:48:11 +000046 int NumPackets() const;
niklase@google.com470e71d2011-07-07 08:21:25 +000047
agalusza@google.comd818dcb2013-07-29 21:48:11 +000048 // Sequence numbers
49 // Get lowest packet sequence number in frame
50 int32_t GetLowSeqNum() const;
51 // Get highest packet sequence number in frame
52 int32_t GetHighSeqNum() const;
niklase@google.com470e71d2011-07-07 08:21:25 +000053
agalusza@google.comd818dcb2013-07-29 21:48:11 +000054 int PictureId() const;
55 int TemporalId() const;
56 bool LayerSync() const;
57 int Tl0PicId() const;
stefan@webrtc.orgffd28f92011-10-19 15:55:39 +000058
stefana669a3a2016-10-06 05:04:52 -070059 std::vector<NaluInfo> GetNaluInfos() const;
60
asapersson9a4cd872015-10-23 00:27:14 -070061 void SetGofInfo(const GofInfoVP9& gof_info, size_t idx);
62
agalusza@google.comd818dcb2013-07-29 21:48:11 +000063 // Increments a counter to keep track of the number of packets of this frame
64 // which were NACKed before they arrived.
65 void IncrementNackCount();
66 // Returns the number of packets of this frame which were NACKed before they
67 // arrived.
68 int16_t GetNackCount() const;
niklase@google.com470e71d2011-07-07 08:21:25 +000069
agalusza@google.comd818dcb2013-07-29 21:48:11 +000070 int64_t LatestPacketTimeMs() const;
niklase@google.com470e71d2011-07-07 08:21:25 +000071
agalusza@google.comd818dcb2013-07-29 21:48:11 +000072 webrtc::FrameType FrameType() const;
niklase@google.com470e71d2011-07-07 08:21:25 +000073
agalusza@google.comd818dcb2013-07-29 21:48:11 +000074 private:
75 void SetState(VCMFrameBufferStateEnum state); // Set state of frame
stefan@webrtc.org4cf1a8a2013-06-27 15:20:14 +000076
asapersson9a4cd872015-10-23 00:27:14 -070077 VCMFrameBufferStateEnum _state; // Current state of the frame
78 VCMSessionInfo _sessionInfo;
79 uint16_t _nackCount;
80 int64_t _latestPacketTimeMs;
niklase@google.com470e71d2011-07-07 08:21:25 +000081};
82
pbos@webrtc.orgd900e8b2013-07-03 15:12:26 +000083} // namespace webrtc
niklase@google.com470e71d2011-07-07 08:21:25 +000084
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020085#endif // MODULES_VIDEO_CODING_FRAME_BUFFER_H_