Line data Source code
1 : /*
2 : * Copyright (c) 2014 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_RTP_FORMAT_H_
12 : #define WEBRTC_MODULES_RTP_RTCP_SOURCE_RTP_FORMAT_H_
13 :
14 : #include <string>
15 :
16 : #include "webrtc/base/constructormagic.h"
17 : #include "webrtc/modules/include/module_common_types.h"
18 : #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h"
19 :
20 : namespace webrtc {
21 : class RtpPacketToSend;
22 :
23 0 : class RtpPacketizer {
24 : public:
25 : static RtpPacketizer* Create(RtpVideoCodecTypes type,
26 : size_t max_payload_len,
27 : const RTPVideoTypeHeader* rtp_type_header,
28 : FrameType frame_type);
29 :
30 0 : virtual ~RtpPacketizer() {}
31 :
32 : virtual void SetPayloadData(const uint8_t* payload_data,
33 : size_t payload_size,
34 : const RTPFragmentationHeader* fragmentation) = 0;
35 :
36 : // Get the next payload with payload header.
37 : // Write payload and set marker bit of the |packet|.
38 : // The parameter |last_packet| is true for the last packet of the frame, false
39 : // otherwise (i.e., call the function again to get the next packet).
40 : // Returns true on success, false otherwise.
41 : virtual bool NextPacket(RtpPacketToSend* packet, bool* last_packet) = 0;
42 :
43 : virtual ProtectionType GetProtectionType() = 0;
44 :
45 : virtual StorageType GetStorageType(uint32_t retransmission_settings) = 0;
46 :
47 : virtual std::string ToString() = 0;
48 : };
49 :
50 : // TODO(sprang): Update the depacketizer to return a std::unqie_ptr with a copy
51 : // of the parsed payload, rather than just a pointer into the incoming buffer.
52 : // This way we can move some parsing out from the jitter buffer into here, and
53 : // the jitter buffer can just store that pointer rather than doing a copy there.
54 0 : class RtpDepacketizer {
55 : public:
56 : struct ParsedPayload {
57 : const uint8_t* payload;
58 : size_t payload_length;
59 : FrameType frame_type;
60 : RTPTypeHeader type;
61 : };
62 :
63 : static RtpDepacketizer* Create(RtpVideoCodecTypes type);
64 :
65 0 : virtual ~RtpDepacketizer() {}
66 :
67 : // Parses the RTP payload, parsed result will be saved in |parsed_payload|.
68 : virtual bool Parse(ParsedPayload* parsed_payload,
69 : const uint8_t* payload_data,
70 : size_t payload_data_length) = 0;
71 : };
72 : } // namespace webrtc
73 : #endif // WEBRTC_MODULES_RTP_RTCP_SOURCE_RTP_FORMAT_H_
|