Create a Header from metadata in clone of encoded sender video frames

This means sender frames cloned from received frames have a valid
header from the start, rather than callers needing to later call
SetMetadata.

Bug: webrtc:14708
Change-Id: Ie25fbd6609928a9555b6db688ab451ff61fa7147
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/293041
Reviewed-by: Stefan Holmer <stefan@webrtc.org>
Commit-Queue: Tony Herre <herre@google.com>
Reviewed-by: Tove Petersson <tovep@google.com>
Cr-Commit-Position: refs/heads/main@{#39317}
This commit is contained in:
Tony Herre 2023-02-14 17:55:43 +01:00 committed by WebRTC LUCI CQ
parent 56c67555f1
commit daf29e461e

View File

@ -207,27 +207,11 @@ std::unique_ptr<TransformableVideoFrameInterface> CloneSenderVideoFrame(
original->GetData().data(), original->GetData().size());
EncodedImage encoded_image;
encoded_image.SetEncodedData(encoded_image_buffer);
RTPVideoHeader new_header;
absl::optional<VideoCodecType> new_codec_type;
// TODO(bugs.webrtc.org/14708): Figure out a way to get the header information
// without casting to TransformableVideoSenderFrame.
if (original->GetDirection() ==
TransformableFrameInterface::Direction::kSender) {
// TODO(bugs.webrtc.org/14708): Figure out a way to bulletproof this cast.
auto original_as_sender =
static_cast<TransformableVideoSenderFrame*>(original);
new_header = original_as_sender->GetHeader();
new_codec_type = original_as_sender->GetCodecType();
} else {
// TODO(bugs.webrtc.org/14708): Make this codec dependent
new_header.video_type_header.emplace<RTPVideoHeaderVP8>();
new_codec_type = kVideoCodecVP8;
// TODO(bugs.webrtc.org/14708): Fill in the new_header when it's not
// `Direction::kSender`
}
RTPVideoHeader new_header =
RTPVideoHeader::FromMetadata(original->GetMetadata());
// TODO(bugs.webrtc.org/14708): Fill in other EncodedImage parameters
return std::make_unique<TransformableVideoSenderFrame>(
encoded_image, new_header, original->GetPayloadType(), new_codec_type,
encoded_image, new_header, original->GetPayloadType(), new_header.codec,
original->GetTimestamp(),
absl::nullopt, // expected_retransmission_time_ms
original->GetSsrc(), original->GetMetadata().GetCsrcs());