blob: 5dd01e8f47f93f2e3e8f9e4a6952fd917f8e0162 [file] [log] [blame]
niklase@google.com470e71d2011-07-07 08:21:25 +00001/*
2 * Copyright (c) 2011 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#include "modules/video_coding/packet.h"
niklase@google.com470e71d2011-07-07 08:21:25 +000012
Yves Gerey3e707812018-11-28 16:47:49 +010013#include "api/rtp_headers.h"
philipel9d3ab612015-12-21 04:12:39 -080014
niklase@google.com470e71d2011-07-07 08:21:25 +000015namespace webrtc {
16
stefan@webrtc.orgc3d89102011-09-08 06:50:28 +000017VCMPacket::VCMPacket()
pbos22993e12015-10-19 02:39:06 -070018 : payloadType(0),
19 timestamp(0),
20 ntp_time_ms_(0),
21 seqNum(0),
22 dataPtr(NULL),
23 sizeBytes(0),
24 markerBit(false),
philipel5ceaaae2016-05-24 10:20:47 +020025 timesNacked(-1),
Niels Möller8f7ce222019-03-21 15:43:58 +010026 frameType(VideoFrameType::kEmptyFrame),
pbos22993e12015-10-19 02:39:06 -070027 completeNALU(kNaluUnset),
28 insertStartCode(false),
ilnik04f4d122017-06-19 07:18:55 -070029 video_header(),
30 receive_time_ms(0) {
isheriff6b4b5f32016-06-08 00:24:21 -070031 video_header.playout_delay = {-1, -1};
32}
stefan@webrtc.orgc3d89102011-09-08 06:50:28 +000033
pbos@webrtc.org7b859cc2013-04-02 15:54:38 +000034VCMPacket::VCMPacket(const uint8_t* ptr,
Niels Möller0cb858c2019-03-06 14:09:54 +010035 size_t size,
36 const RTPHeader& rtp_header,
37 const RTPVideoHeader& videoHeader,
Niels Möller87e2d782019-03-07 10:18:23 +010038 VideoFrameType frame_type,
Niels Möller0cb858c2019-03-06 14:09:54 +010039 int64_t ntp_time_ms)
40 : payloadType(rtp_header.payloadType),
41 timestamp(rtp_header.timestamp),
42 ntp_time_ms_(ntp_time_ms),
43 seqNum(rtp_header.sequenceNumber),
philipel9d3ab612015-12-21 04:12:39 -080044 dataPtr(ptr),
45 sizeBytes(size),
Niels Möller0cb858c2019-03-06 14:09:54 +010046 markerBit(rtp_header.markerBit),
philipel5ceaaae2016-05-24 10:20:47 +020047 timesNacked(-1),
Niels Möller0cb858c2019-03-06 14:09:54 +010048 frameType(frame_type),
Magnus Jedvert22341212018-07-11 14:27:49 +020049 completeNALU(kNaluIncomplete),
Niels Möller0cb858c2019-03-06 14:09:54 +010050 insertStartCode(videoHeader.codec == kVideoCodecH264 &&
51 videoHeader.is_first_packet_in_frame),
52 video_header(videoHeader) {
Niels Möllerd5e02f02019-02-20 13:12:21 +010053 if (is_first_packet_in_frame() && markerBit) {
Magnus Jedvert22341212018-07-11 14:27:49 +020054 completeNALU = kNaluComplete;
Niels Möllerd5e02f02019-02-20 13:12:21 +010055 } else if (is_first_packet_in_frame()) {
Magnus Jedvert22341212018-07-11 14:27:49 +020056 completeNALU = kNaluStart;
57 } else if (markerBit) {
58 completeNALU = kNaluEnd;
59 } else {
60 completeNALU = kNaluIncomplete;
61 }
isheriff6b4b5f32016-06-08 00:24:21 -070062
Niels Möllerd5e02f02019-02-20 13:12:21 +010063 // TODO(nisse): Delete?
isheriff6b4b5f32016-06-08 00:24:21 -070064 // Playout decisions are made entirely based on first packet in a frame.
Niels Möllerd5e02f02019-02-20 13:12:21 +010065 if (!is_first_packet_in_frame()) {
isheriff6b4b5f32016-06-08 00:24:21 -070066 video_header.playout_delay = {-1, -1};
67 }
niklase@google.com470e71d2011-07-07 08:21:25 +000068}
69
philipel2837edc2018-10-02 13:55:47 +020070VCMPacket::~VCMPacket() = default;
71
stefan@webrtc.org2ec56062014-07-31 14:59:24 +000072} // namespace webrtc