blob: edeb48d5d37776d029b371386e945eeb28322162 [file] [log] [blame]
philipel1a4746a2018-07-09 15:52:29 +02001/*
2 * Copyright (c) 2018 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#ifndef MODULES_RTP_RTCP_SOURCE_RTP_VIDEO_HEADER_H_
11#define MODULES_RTP_RTCP_SOURCE_RTP_VIDEO_HEADER_H_
12
philipelf8d81d32018-08-01 17:13:08 +020013#include "absl/container/inlined_vector.h"
philipel1a4746a2018-07-09 15:52:29 +020014#include "absl/types/variant.h"
15#include "api/video/video_content_type.h"
16#include "api/video/video_rotation.h"
17#include "api/video/video_timing.h"
18#include "common_types.h" // NOLINT(build/include)
19#include "modules/video_coding/codecs/h264/include/h264_globals.h"
20#include "modules/video_coding/codecs/vp8/include/vp8_globals.h"
21#include "modules/video_coding/codecs/vp9/include/vp9_globals.h"
22
23namespace webrtc {
24using RTPVideoTypeHeader =
25 absl::variant<RTPVideoHeaderVP8, RTPVideoHeaderVP9, RTPVideoHeaderH264>;
26
27struct RTPVideoHeader {
28 RTPVideoHeader();
29 RTPVideoHeader(const RTPVideoHeader& other);
30
philipelf8d81d32018-08-01 17:13:08 +020031 ~RTPVideoHeader();
32
philipel1a4746a2018-07-09 15:52:29 +020033 // TODO(philipel): Remove when downstream projects have been updated.
34 RTPVideoHeaderVP8& vp8() {
35 if (!absl::holds_alternative<RTPVideoHeaderVP8>(video_type_header))
36 video_type_header.emplace<RTPVideoHeaderVP8>();
37
38 return absl::get<RTPVideoHeaderVP8>(video_type_header);
39 }
40 // TODO(philipel): Remove when downstream projects have been updated.
41 const RTPVideoHeaderVP8& vp8() const {
42 if (!absl::holds_alternative<RTPVideoHeaderVP8>(video_type_header))
43 video_type_header.emplace<RTPVideoHeaderVP8>();
44
45 return absl::get<RTPVideoHeaderVP8>(video_type_header);
46 }
philipel1a4746a2018-07-09 15:52:29 +020047
philipelf8d81d32018-08-01 17:13:08 +020048 // Information for generic codec descriptor.
Sami Kalliomäki426a80c2018-08-08 11:37:59 +020049 int64_t frame_id = kNoPictureId;
philipelf8d81d32018-08-01 17:13:08 +020050 int spatial_index = 0;
51 int temporal_index = 0;
52 absl::InlinedVector<int64_t, 5> dependencies;
53 absl::InlinedVector<int, 5> higher_spatial_layers;
54
55 uint16_t width = 0;
56 uint16_t height = 0;
57 VideoRotation rotation = VideoRotation::kVideoRotation_0;
58 VideoContentType content_type = VideoContentType::UNSPECIFIED;
59 bool is_first_packet_in_frame = false;
60 uint8_t simulcastIdx = 0;
61 VideoCodecType codec = VideoCodecType::kVideoCodecUnknown;
62
philipel1a4746a2018-07-09 15:52:29 +020063 PlayoutDelay playout_delay;
philipel1a4746a2018-07-09 15:52:29 +020064 VideoSendTiming video_timing;
philipel1a4746a2018-07-09 15:52:29 +020065 // TODO(philipel): remove mutable when downstream projects have been updated.
66 mutable RTPVideoTypeHeader video_type_header;
67};
68
69} // namespace webrtc
70
71#endif // MODULES_RTP_RTCP_SOURCE_RTP_VIDEO_HEADER_H_