blob: dea72cb5ceea3b4762adc4ae03b2a37d5fcb41a5 [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
13#include <assert.h>
14
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020015#include "modules/include/module_common_types.h"
philipel9d3ab612015-12-21 04:12:39 -080016
niklase@google.com470e71d2011-07-07 08:21:25 +000017namespace webrtc {
18
stefan@webrtc.orgc3d89102011-09-08 06:50:28 +000019VCMPacket::VCMPacket()
pbos22993e12015-10-19 02:39:06 -070020 : payloadType(0),
21 timestamp(0),
22 ntp_time_ms_(0),
23 seqNum(0),
24 dataPtr(NULL),
25 sizeBytes(0),
26 markerBit(false),
philipel5ceaaae2016-05-24 10:20:47 +020027 timesNacked(-1),
pbos22993e12015-10-19 02:39:06 -070028 frameType(kEmptyFrame),
Kári Tristan Helgason84ccb2d2018-08-16 14:35:26 +020029 codec(kVideoCodecGeneric),
johan0d1b2b62017-01-10 04:21:35 -080030 is_first_packet_in_frame(false),
philipelef615ea2018-09-13 11:07:48 +020031 is_last_packet_in_frame(false),
pbos22993e12015-10-19 02:39:06 -070032 completeNALU(kNaluUnset),
33 insertStartCode(false),
34 width(0),
35 height(0),
ilnik04f4d122017-06-19 07:18:55 -070036 video_header(),
37 receive_time_ms(0) {
isheriff6b4b5f32016-06-08 00:24:21 -070038 video_header.playout_delay = {-1, -1};
39}
stefan@webrtc.orgc3d89102011-09-08 06:50:28 +000040
pbos@webrtc.org7b859cc2013-04-02 15:54:38 +000041VCMPacket::VCMPacket(const uint8_t* ptr,
pkasting@chromium.org4591fbd2014-11-20 22:28:14 +000042 const size_t size,
philipel9d3ab612015-12-21 04:12:39 -080043 const WebRtcRTPHeader& rtpHeader)
44 : payloadType(rtpHeader.header.payloadType),
45 timestamp(rtpHeader.header.timestamp),
46 ntp_time_ms_(rtpHeader.ntp_time_ms),
47 seqNum(rtpHeader.header.sequenceNumber),
48 dataPtr(ptr),
49 sizeBytes(size),
50 markerBit(rtpHeader.header.markerBit),
philipel5ceaaae2016-05-24 10:20:47 +020051 timesNacked(-1),
philipel9d3ab612015-12-21 04:12:39 -080052 frameType(rtpHeader.frameType),
Magnus Jedvert22341212018-07-11 14:27:49 +020053 codec(rtpHeader.video_header().codec),
philipelcb96ad82018-07-02 14:41:58 +020054 is_first_packet_in_frame(
55 rtpHeader.video_header().is_first_packet_in_frame),
philipelef615ea2018-09-13 11:07:48 +020056 is_last_packet_in_frame(rtpHeader.video_header().is_last_packet_in_frame),
Magnus Jedvert22341212018-07-11 14:27:49 +020057 completeNALU(kNaluIncomplete),
58 insertStartCode(rtpHeader.video_header().codec == kVideoCodecH264 &&
59 rtpHeader.video_header().is_first_packet_in_frame),
philipelcb96ad82018-07-02 14:41:58 +020060 width(rtpHeader.video_header().width),
61 height(rtpHeader.video_header().height),
62 video_header(rtpHeader.video_header()) {
Magnus Jedvert22341212018-07-11 14:27:49 +020063 if (is_first_packet_in_frame && markerBit) {
64 completeNALU = kNaluComplete;
65 } else if (is_first_packet_in_frame) {
66 completeNALU = kNaluStart;
67 } else if (markerBit) {
68 completeNALU = kNaluEnd;
69 } else {
70 completeNALU = kNaluIncomplete;
71 }
isheriff6b4b5f32016-06-08 00:24:21 -070072
73 if (markerBit) {
philipelcb96ad82018-07-02 14:41:58 +020074 video_header.rotation = rtpHeader.video_header().rotation;
isheriff6b4b5f32016-06-08 00:24:21 -070075 }
76 // Playout decisions are made entirely based on first packet in a frame.
johan0d1b2b62017-01-10 04:21:35 -080077 if (is_first_packet_in_frame) {
philipelcb96ad82018-07-02 14:41:58 +020078 video_header.playout_delay = rtpHeader.video_header().playout_delay;
isheriff6b4b5f32016-06-08 00:24:21 -070079 } else {
80 video_header.playout_delay = {-1, -1};
81 }
niklase@google.com470e71d2011-07-07 08:21:25 +000082}
83
stefan@webrtc.org2ec56062014-07-31 14:59:24 +000084} // namespace webrtc