/* * Copyright (c) 2014 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. */ #include "modules/rtp_rtcp/source/rtp_format.h" #include #include "absl/memory/memory.h" #include "modules/rtp_rtcp/source/rtp_format_h264.h" #include "modules/rtp_rtcp/source/rtp_format_video_generic.h" #include "modules/rtp_rtcp/source/rtp_format_vp8.h" #include "modules/rtp_rtcp/source/rtp_format_vp9.h" namespace webrtc { std::unique_ptr RtpPacketizer::Create( VideoCodecType type, rtc::ArrayView payload, PayloadSizeLimits limits, // Codec-specific details. const RTPVideoHeader& rtp_video_header, FrameType frame_type, const RTPFragmentationHeader* fragmentation) { switch (type) { case kVideoCodecH264: { const auto& h264 = absl::get(rtp_video_header.video_type_header); auto packetizer = absl::make_unique( limits.max_payload_len, limits.last_packet_reduction_len, h264.packetization_mode); packetizer->SetPayloadData(payload.data(), payload.size(), fragmentation); return std::move(packetizer); } case kVideoCodecVP8: { const auto& vp8 = absl::get(rtp_video_header.video_type_header); return absl::make_unique(payload, limits, vp8); } case kVideoCodecVP9: { const auto& vp9 = absl::get(rtp_video_header.video_type_header); auto packetizer = absl::make_unique( vp9, limits.max_payload_len, limits.last_packet_reduction_len); packetizer->SetPayloadData(payload.data(), payload.size(), nullptr); return std::move(packetizer); } default: { auto packetizer = absl::make_unique( rtp_video_header, frame_type, limits.max_payload_len, limits.last_packet_reduction_len); packetizer->SetPayloadData(payload.data(), payload.size(), nullptr); return std::move(packetizer); } } } RtpDepacketizer* RtpDepacketizer::Create(VideoCodecType type) { switch (type) { case kVideoCodecH264: return new RtpDepacketizerH264(); case kVideoCodecVP8: return new RtpDepacketizerVp8(); case kVideoCodecVP9: return new RtpDepacketizerVp9(); default: return new RtpDepacketizerGeneric(); } } } // namespace webrtc