1*d9f75844SAndroid Build Coastguard Worker /*
2*d9f75844SAndroid Build Coastguard Worker * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
3*d9f75844SAndroid Build Coastguard Worker *
4*d9f75844SAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license
5*d9f75844SAndroid Build Coastguard Worker * that can be found in the LICENSE file in the root of the source
6*d9f75844SAndroid Build Coastguard Worker * tree. An additional intellectual property rights grant can be found
7*d9f75844SAndroid Build Coastguard Worker * in the file PATENTS. All contributing project authors may
8*d9f75844SAndroid Build Coastguard Worker * be found in the AUTHORS file in the root of the source tree.
9*d9f75844SAndroid Build Coastguard Worker */
10*d9f75844SAndroid Build Coastguard Worker
11*d9f75844SAndroid Build Coastguard Worker #include "modules/video_coding/packet.h"
12*d9f75844SAndroid Build Coastguard Worker
13*d9f75844SAndroid Build Coastguard Worker #include "api/rtp_headers.h"
14*d9f75844SAndroid Build Coastguard Worker
15*d9f75844SAndroid Build Coastguard Worker namespace webrtc {
16*d9f75844SAndroid Build Coastguard Worker
VCMPacket()17*d9f75844SAndroid Build Coastguard Worker VCMPacket::VCMPacket()
18*d9f75844SAndroid Build Coastguard Worker : payloadType(0),
19*d9f75844SAndroid Build Coastguard Worker timestamp(0),
20*d9f75844SAndroid Build Coastguard Worker ntp_time_ms_(0),
21*d9f75844SAndroid Build Coastguard Worker seqNum(0),
22*d9f75844SAndroid Build Coastguard Worker dataPtr(NULL),
23*d9f75844SAndroid Build Coastguard Worker sizeBytes(0),
24*d9f75844SAndroid Build Coastguard Worker markerBit(false),
25*d9f75844SAndroid Build Coastguard Worker timesNacked(-1),
26*d9f75844SAndroid Build Coastguard Worker completeNALU(kNaluUnset),
27*d9f75844SAndroid Build Coastguard Worker insertStartCode(false),
28*d9f75844SAndroid Build Coastguard Worker video_header() {
29*d9f75844SAndroid Build Coastguard Worker video_header.playout_delay = {-1, -1};
30*d9f75844SAndroid Build Coastguard Worker }
31*d9f75844SAndroid Build Coastguard Worker
VCMPacket(const uint8_t * ptr,size_t size,const RTPHeader & rtp_header,const RTPVideoHeader & videoHeader,int64_t ntp_time_ms,Timestamp receive_time)32*d9f75844SAndroid Build Coastguard Worker VCMPacket::VCMPacket(const uint8_t* ptr,
33*d9f75844SAndroid Build Coastguard Worker size_t size,
34*d9f75844SAndroid Build Coastguard Worker const RTPHeader& rtp_header,
35*d9f75844SAndroid Build Coastguard Worker const RTPVideoHeader& videoHeader,
36*d9f75844SAndroid Build Coastguard Worker int64_t ntp_time_ms,
37*d9f75844SAndroid Build Coastguard Worker Timestamp receive_time)
38*d9f75844SAndroid Build Coastguard Worker : payloadType(rtp_header.payloadType),
39*d9f75844SAndroid Build Coastguard Worker timestamp(rtp_header.timestamp),
40*d9f75844SAndroid Build Coastguard Worker ntp_time_ms_(ntp_time_ms),
41*d9f75844SAndroid Build Coastguard Worker seqNum(rtp_header.sequenceNumber),
42*d9f75844SAndroid Build Coastguard Worker dataPtr(ptr),
43*d9f75844SAndroid Build Coastguard Worker sizeBytes(size),
44*d9f75844SAndroid Build Coastguard Worker markerBit(rtp_header.markerBit),
45*d9f75844SAndroid Build Coastguard Worker timesNacked(-1),
46*d9f75844SAndroid Build Coastguard Worker completeNALU(kNaluIncomplete),
47*d9f75844SAndroid Build Coastguard Worker insertStartCode(videoHeader.codec == kVideoCodecH264 &&
48*d9f75844SAndroid Build Coastguard Worker videoHeader.is_first_packet_in_frame),
49*d9f75844SAndroid Build Coastguard Worker video_header(videoHeader),
50*d9f75844SAndroid Build Coastguard Worker packet_info(rtp_header, receive_time) {
51*d9f75844SAndroid Build Coastguard Worker if (is_first_packet_in_frame() && markerBit) {
52*d9f75844SAndroid Build Coastguard Worker completeNALU = kNaluComplete;
53*d9f75844SAndroid Build Coastguard Worker } else if (is_first_packet_in_frame()) {
54*d9f75844SAndroid Build Coastguard Worker completeNALU = kNaluStart;
55*d9f75844SAndroid Build Coastguard Worker } else if (markerBit) {
56*d9f75844SAndroid Build Coastguard Worker completeNALU = kNaluEnd;
57*d9f75844SAndroid Build Coastguard Worker } else {
58*d9f75844SAndroid Build Coastguard Worker completeNALU = kNaluIncomplete;
59*d9f75844SAndroid Build Coastguard Worker }
60*d9f75844SAndroid Build Coastguard Worker
61*d9f75844SAndroid Build Coastguard Worker // Playout decisions are made entirely based on first packet in a frame.
62*d9f75844SAndroid Build Coastguard Worker if (!is_first_packet_in_frame()) {
63*d9f75844SAndroid Build Coastguard Worker video_header.playout_delay = {-1, -1};
64*d9f75844SAndroid Build Coastguard Worker }
65*d9f75844SAndroid Build Coastguard Worker }
66*d9f75844SAndroid Build Coastguard Worker
67*d9f75844SAndroid Build Coastguard Worker VCMPacket::~VCMPacket() = default;
68*d9f75844SAndroid Build Coastguard Worker
69*d9f75844SAndroid Build Coastguard Worker } // namespace webrtc
70