Files
platform-external-webrtc/modules/rtp_rtcp/source/rtp_descriptor_authentication.cc
Danil Chapovalov abf73de8ea Do not propagate generic descriptor on receiving frame
It was used only for the frame decryptor.
Decryptor needs only raw representation that it can recreate
in a way compatible with the new version of the descriptor.

Bug: webrtc:10342
Change-Id: Ie098235ebb87c6f5e2af42d0022d2365cd6bfa29
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/166163
Reviewed-by: Philip Eliasson <philipel@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#30501}
2020-02-11 16:12:16 +00:00

50 lines
2.0 KiB
C++

/*
* Copyright (c) 2020 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_descriptor_authentication.h"
#include <cstdint>
#include <vector>
#include "modules/rtp_rtcp/source/rtp_generic_frame_descriptor.h"
#include "modules/rtp_rtcp/source/rtp_generic_frame_descriptor_extension.h"
#include "modules/rtp_rtcp/source/rtp_video_header.h"
namespace webrtc {
std::vector<uint8_t> RtpDescriptorAuthentication(
const RTPVideoHeader::GenericDescriptorInfo& descriptor) {
// Default way of creating additional data for an encrypted frame.
if (descriptor.spatial_index < 0 || descriptor.temporal_index < 0 ||
descriptor.spatial_index >=
RtpGenericFrameDescriptor::kMaxSpatialLayers ||
descriptor.temporal_index >=
RtpGenericFrameDescriptor::kMaxTemporalLayers ||
descriptor.dependencies.size() >
RtpGenericFrameDescriptor::kMaxNumFrameDependencies) {
return {};
}
RtpGenericFrameDescriptor frame_descriptor;
frame_descriptor.SetFirstPacketInSubFrame(true);
frame_descriptor.SetLastPacketInSubFrame(false);
frame_descriptor.SetTemporalLayer(descriptor.temporal_index);
frame_descriptor.SetSpatialLayersBitmask(1 << descriptor.spatial_index);
frame_descriptor.SetFrameId(descriptor.frame_id & 0xFFFF);
for (int64_t dependency : descriptor.dependencies) {
frame_descriptor.AddFrameDependencyDiff(descriptor.frame_id - dependency);
}
std::vector<uint8_t> result(
RtpGenericFrameDescriptorExtension00::ValueSize(frame_descriptor));
RtpGenericFrameDescriptorExtension00::Write(result, frame_descriptor);
return result;
}
} // namespace webrtc