blob: 2b39f06fcd65678cb1b505e56410a844e33f80f1 [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
11#ifndef WEBRTC_MODULES_VIDEO_CODING_FRAME_OBJECT_H_
12#define WEBRTC_MODULES_VIDEO_CODING_FRAME_OBJECT_H_
13
philipelf4139332016-04-20 10:26:34 +020014#include <stddef.h>
15#include <stdint.h>
16
17#include <array>
philipelc707ab72016-04-01 02:01:54 -070018
19namespace webrtc {
20namespace video_coding {
21
22class FrameObject {
23 public:
philipelf4139332016-04-20 10:26:34 +020024 static const uint8_t kMaxFrameReferences = 5;
25
philipela1059872016-05-09 11:41:48 +020026 FrameObject();
27
philipelc707ab72016-04-01 02:01:54 -070028 virtual bool GetBitstream(uint8_t* destination) const = 0;
29 virtual ~FrameObject() {}
philipelf4139332016-04-20 10:26:34 +020030
philipela1059872016-05-09 11:41:48 +020031 // The tuple (|picture_id|, |spatial_layer|) uniquely identifies a frame
32 // object. For codec types that don't necessarily have picture ids they
33 // have to be constructed from the header data relevant to that codec.
philipelf4139332016-04-20 10:26:34 +020034 uint16_t picture_id;
philipela1059872016-05-09 11:41:48 +020035 uint8_t spatial_layer;
36
philipelf4139332016-04-20 10:26:34 +020037 size_t num_references;
philipelf4139332016-04-20 10:26:34 +020038 uint16_t references[kMaxFrameReferences];
philipela1059872016-05-09 11:41:48 +020039 bool inter_layer_predicted;
philipelc707ab72016-04-01 02:01:54 -070040};
41
42class PacketBuffer;
43
44class RtpFrameObject : public FrameObject {
45 public:
46 RtpFrameObject(PacketBuffer* packet_buffer,
philipelc707ab72016-04-01 02:01:54 -070047 uint16_t first_packet,
48 uint16_t last_packet);
philipelf4139332016-04-20 10:26:34 +020049
philipelc707ab72016-04-01 02:01:54 -070050 ~RtpFrameObject();
philipelf4139332016-04-20 10:26:34 +020051 uint16_t first_seq_num() const;
52 uint16_t last_seq_num() const;
philipelc707ab72016-04-01 02:01:54 -070053 bool GetBitstream(uint8_t* destination) const override;
54
55 private:
56 PacketBuffer* packet_buffer_;
philipelc707ab72016-04-01 02:01:54 -070057 uint16_t first_packet_;
58 uint16_t last_packet_;
59};
60
61} // namespace video_coding
62} // namespace webrtc
63
64#endif // WEBRTC_MODULES_VIDEO_CODING_FRAME_OBJECT_H_