xref: /aosp_15_r20/external/webrtc/modules/video_coding/packet.cc (revision d9f758449e529ab9291ac668be2861e7a55c2422)
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