| /* | |
| * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. | |
| * | |
| * Use of this source code is governed by a BSD-style license | |
| * that can be found in the LICENSE file in the root of the source | |
| * tree. An additional intellectual property rights grant can be found | |
| * in the file PATENTS. All contributing project authors may | |
| * be found in the AUTHORS file in the root of the source tree. | |
| */ | |
| /* | |
| * This file contains the declaration of the VP8 packetizer class. | |
| * A packetizer object is created for each encoded video frame. The | |
| * constructor is called with the payload data and size, | |
| * together with the fragmentation information and a packetizer mode | |
| * of choice. Alternatively, if no fragmentation info is available, the | |
| * second constructor can be used with only payload data and size; in that | |
| * case the mode kEqualSize is used. | |
| * | |
| * After creating the packetizer, the method NextPacket is called | |
| * repeatedly to get all packets for the frame. The method returns | |
| * false as long as there are more packets left to fetch. | |
| */ | |
| #ifndef MODULES_RTP_RTCP_SOURCE_RTP_FORMAT_VP8_H_ | |
| #define MODULES_RTP_RTCP_SOURCE_RTP_FORMAT_VP8_H_ | |
| #include <string> | |
| #include <vector> | |
| #include "absl/container/inlined_vector.h" | |
| #include "api/array_view.h" | |
| #include "modules/include/module_common_types.h" | |
| #include "modules/rtp_rtcp/source/rtp_format.h" | |
| #include "rtc_base/constructormagic.h" | |
| namespace webrtc { | |
| // Packetizer for VP8. | |
| class RtpPacketizerVp8 : public RtpPacketizer { | |
| public: | |
| // Initialize with payload from encoder. | |
| // The payload_data must be exactly one encoded VP8 frame. | |
| RtpPacketizerVp8(rtc::ArrayView<const uint8_t> payload, | |
| PayloadSizeLimits limits, | |
| const RTPVideoHeaderVP8& hdr_info); | |
| ~RtpPacketizerVp8() override; | |
| size_t NumPackets() const override; | |
| // Get the next payload with VP8 payload header. | |
| // Write payload and set marker bit of the |packet|. | |
| // Returns true on success, false otherwise. | |
| bool NextPacket(RtpPacketToSend* packet) override; | |
| private: | |
| // VP8 header can use up to 6 bytes. | |
| using RawHeader = absl::InlinedVector<uint8_t, 6>; | |
| static RawHeader BuildHeader(const RTPVideoHeaderVP8& header); | |
| RawHeader hdr_; | |
| rtc::ArrayView<const uint8_t> remaining_payload_; | |
| std::vector<int> payload_sizes_; | |
| std::vector<int>::const_iterator current_packet_; | |
| RTC_DISALLOW_COPY_AND_ASSIGN(RtpPacketizerVp8); | |
| }; | |
| // Depacketizer for VP8. | |
| class RtpDepacketizerVp8 : public RtpDepacketizer { | |
| public: | |
| ~RtpDepacketizerVp8() override = default; | |
| bool Parse(ParsedPayload* parsed_payload, | |
| const uint8_t* payload_data, | |
| size_t payload_data_length) override; | |
| }; | |
| } // namespace webrtc | |
| #endif // MODULES_RTP_RTCP_SOURCE_RTP_FORMAT_VP8_H_ |