Note: We no longer publish the latest version of our code here. We primarily use a kumc-bmi github organization. The heron ETL repository, in particular, is not public. Peers in the informatics community should see MultiSiteDev for details on requesting access.

source: webrtc/webrtc/modules/rtp_rtcp/source/H264/rtp_sender_h264.h @ 0:4bda6873e34c

pub_scrub_3792 tip
Last change on this file since 0:4bda6873e34c was 0:4bda6873e34c, checked in by Michael Prittie <mprittie@…>, 6 years ago

Scrubbed password for publication.

File size: 7.1 KB
Line 
1/*
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
11#ifndef WEBRTC_MODULES_RTP_RTCP_SOURCE_H264_RTP_SENDER_H264_H_
12#define WEBRTC_MODULES_RTP_RTCP_SOURCE_H264_RTP_SENDER_H264_H_
13
14#include "webrtc/typedefs.h"
15#include "ModuleRTPRTCPConfig.h"
16#include "rtp_rtcp_defines.h"
17#include "h264_information.h"
18
19#include "RTPSender.h"
20
21namespace webrtc {
22class RTPSenderH264
23{
24public:
25    int32_t SendH264(const FrameType frameType,
26                     const int8_t payloadType,
27                     const uint32_t captureTimeStamp,
28                     const uint8_t* payloadData,
29                     const uint32_t payloadSize,
30                     H264Information& h264Information);
31
32    int32_t SendH264SVC(const FrameType frameType,
33                        const int8_t payloadType,
34                        const uint32_t captureTimeStamp,
35                        const uint8_t* payloadData,
36                        const uint32_t payloadSize,
37                        H264Information& h264Information);
38
39    // H.264 AVC
40    int32_t SetH264PacketizationMode(const H264PacketizationMode mode);
41
42    int32_t SetH264SendModeNALU_PPS_SPS(const bool dontSend);
43
44    // H.264 SVC
45    int32_t SetHighestSendLayer(const uint8_t dependencyQualityLayer,
46                                const uint8_t temporalLayer);
47
48    int32_t HighestSendLayer(uint8_t& dependencyQualityLayer,
49                             uint8_t& temporalLayer);
50
51protected:
52    RTPSenderH264(RTPSenderInterface* rtpSender);
53    virtual ~RTPSenderH264();
54
55    int32_t Init();
56
57    virtual uint16_t FECPacketOverhead() const = 0;
58    virtual RtpVideoCodecTypes VideoCodecType() const = 0;
59
60    virtual int32_t SendVideoPacket(const FrameType frameType,
61                                   const uint8_t* dataBuffer,
62                                   const uint16_t payloadLength,
63                                   const uint16_t rtpHeaderLength,
64                                   bool baseLayerVideoPacket=false) = 0;
65
66
67    bool SendH264SVCLayer(const FrameType frameType,
68                          const uint8_t temporalID,
69                          const uint8_t dependencyQualityID,
70                          bool& higestLayer);
71
72    // H.264 SVC
73    int32_t AddH264PACSINALU(const bool firstPacketInNALU,
74                             const bool lastPacketInNALU,
75                             const H264_PACSI_NALU& paci,
76                             const H264_SVC_NALUHeader& svc,
77                             const uint16_t DONC,
78                             uint8_t* databuffer,
79                             int32_t& curByte) const;
80
81    int32_t SendH264FillerData(const WebRtcRTPHeader* rtpHeader,
82                              const uint16_t bytesToSend,
83                              const uint32_t ssrc);
84
85    int32_t SendH264FillerData(const uint32_t captureTimestamp,
86                               const uint8_t payloadType,
87                               const uint32_t bytesToSend);
88
89    int32_t SendH264SVCRelayPacket(const WebRtcRTPHeader* rtpHeader,
90                                   const uint8_t* incomingRTPPacket,
91                                   const uint16_t incomingRTPPacketSize,
92                                   const uint32_t ssrc,
93                                   const bool higestLayer);
94
95    int32_t SetH264RelaySequenceNumber(const uint16_t seqNum);
96
97    int32_t SetH264RelayCompleteLayer(const bool complete);
98
99    // H.264
100    H264PacketizationMode _h264Mode;
101    bool                      _h264SendPPS_SPS;
102
103    // H.264-SVC
104    int8_t                _h264SVCPayloadType;
105    uint16_t              _h264SVCRelaySequenceNumber;
106    uint32_t              _h264SVCRelayTimeStamp;
107    bool                      _h264SVCRelayLayerComplete;
108
109
110private:
111    // H.264
112    int32_t SendH264_SingleMode(const FrameType frameType,
113                                const H264Info* ptrH264Info,
114                                uint16_t &idxNALU,
115                                const int8_t payloadType,
116                                const uint32_t captureTimeStamp,
117                                int32_t &payloadBytesToSend,
118                                const uint8_t*& data,
119                                const uint16_t rtpHeaderLength,
120                                const bool sendSVCPACSI=false);
121
122    int32_t SendH264_FU_A(const FrameType frameType,
123                          const H264Info* ptrH264Info,
124                          uint16_t &idxNALU,
125                          const int8_t payloadType,
126                          const uint32_t captureTimeStamp,
127                          int32_t &payloadBytesToSend,
128                          const uint8_t*& data,
129                          const uint16_t rtpHeaderLength,
130                          const bool sendSVCPACSI = false);
131
132    int32_t SendH264_STAP_A(const FrameType frameType,
133                            const H264Info* ptrH264Info,
134                            uint16_t &idxNALU,
135                            const int8_t payloadType,
136                            const uint32_t captureTimeStamp,
137                            bool& switchToFUA,
138                            int32_t &payloadBytesToSend,
139                            const uint8_t*& data,
140                            const uint16_t rtpHeaderLength);
141
142    int32_t SendH264_STAP_A_PACSI(const FrameType frameType,
143                                  const H264Info* ptrH264Info,
144                                  uint16_t &idxNALU,
145                                  const int8_t payloadType,
146                                  const uint32_t captureTimeStamp,
147                                  bool& switchToFUA,
148                                  int32_t &payloadBytesToSend,
149                                  const uint8_t*& data,
150                                  const uint16_t rtpHeaderLengh)
151
152    int32_t SendH264_SinglePACSI(const FrameType frameType,
153                                 const H264Info* ptrH264Info,
154                                 const uint16_t idxNALU,
155                                 const int8_t payloadType,
156                                 const uint32_t captureTimeStamp,
157                                 const bool firstPacketInNALU,
158                                 const bool lastPacketInNALU);
159
160    bool AddH264SVCNALUHeader(const H264_SVC_NALUHeader& svc,
161                              uint8_t* databuffer,
162                              int32_t& curByte) const;
163
164    RTPSenderInterface&        _rtpSender;
165
166    // relay
167    bool                    _useHighestSendLayer;
168    uint8_t             _highestDependencyLayerOld;
169    uint8_t             _highestDependencyQualityIDOld;
170    uint8_t             _highestDependencyLayer;
171    uint8_t             _highestDependencyQualityID;
172    uint8_t             _highestTemporalLayer;
173
174
175};
176
177}  // namespace webrtc
178
179#endif // WEBRTC_MODULES_RTP_RTCP_SOURCE_H264_RTP_SENDER_H264_H_
Note: See TracBrowser for help on using the repository browser.