Add ssrc to VideoFrameMetadata used in encoded transforms
This allows callers to modify an encoded video frame's SSRC via the setMetadata() call, which we'd like to do from Chrome, to allow using an encoded frame from one PC on a different one. Bug: webrtc:14709 Change-Id: Ia6b33761a3f63038f6eabbcd848916877e24454b Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/292380 Auto-Submit: Tony Herre <herre@google.com> Reviewed-by: Harald Alvestrand <hta@webrtc.org> Commit-Queue: Harald Alvestrand <hta@webrtc.org> Cr-Commit-Position: refs/heads/main@{#39266}
This commit is contained in:
parent
1f33a2ba3f
commit
b459deaf38
@ -136,6 +136,14 @@ void VideoFrameMetadata::SetRTPVideoHeaderCodecSpecifics(
|
||||
codec_specifics_ = std::move(codec_specifics);
|
||||
}
|
||||
|
||||
uint32_t VideoFrameMetadata::GetSsrc() const {
|
||||
return ssrc_;
|
||||
}
|
||||
|
||||
void VideoFrameMetadata::SetSsrc(uint32_t ssrc) {
|
||||
ssrc_ = ssrc;
|
||||
}
|
||||
|
||||
std::vector<uint32_t> VideoFrameMetadata::GetCsrcs() const {
|
||||
return csrcs_;
|
||||
}
|
||||
|
||||
@ -89,6 +89,8 @@ class RTC_EXPORT VideoFrameMetadata {
|
||||
void SetRTPVideoHeaderCodecSpecifics(
|
||||
RTPVideoHeaderCodecSpecifics codec_specifics);
|
||||
|
||||
uint32_t GetSsrc() const;
|
||||
void SetSsrc(uint32_t ssrc);
|
||||
std::vector<uint32_t> GetCsrcs() const;
|
||||
void SetCsrcs(std::vector<uint32_t> csrcs);
|
||||
|
||||
@ -111,6 +113,8 @@ class RTC_EXPORT VideoFrameMetadata {
|
||||
VideoCodecType codec_ = VideoCodecType::kVideoCodecGeneric;
|
||||
RTPVideoHeaderCodecSpecifics codec_specifics_;
|
||||
|
||||
// RTP info.
|
||||
uint32_t ssrc_;
|
||||
std::vector<uint32_t> csrcs_;
|
||||
};
|
||||
} // namespace webrtc
|
||||
|
||||
@ -41,10 +41,10 @@ class TransformableVideoSenderFrame : public TransformableVideoFrameInterface {
|
||||
codec_type_(codec_type),
|
||||
timestamp_(rtp_timestamp),
|
||||
capture_time_ms_(encoded_image.capture_time_ms_),
|
||||
expected_retransmission_time_ms_(expected_retransmission_time_ms),
|
||||
ssrc_(ssrc) {
|
||||
expected_retransmission_time_ms_(expected_retransmission_time_ms) {
|
||||
RTC_DCHECK_GE(payload_type_, 0);
|
||||
RTC_DCHECK_LE(payload_type_, 127);
|
||||
metadata_.SetSsrc(ssrc);
|
||||
metadata_.SetCsrcs(std::move(csrcs));
|
||||
}
|
||||
|
||||
@ -60,7 +60,7 @@ class TransformableVideoSenderFrame : public TransformableVideoFrameInterface {
|
||||
}
|
||||
|
||||
uint32_t GetTimestamp() const override { return timestamp_; }
|
||||
uint32_t GetSsrc() const override { return ssrc_; }
|
||||
uint32_t GetSsrc() const override { return metadata_.GetSsrc(); }
|
||||
|
||||
bool IsKeyFrame() const override {
|
||||
return frame_type_ == VideoFrameType::kVideoFrameKey;
|
||||
@ -73,11 +73,13 @@ class TransformableVideoSenderFrame : public TransformableVideoFrameInterface {
|
||||
const VideoFrameMetadata& GetMetadata() const override { return metadata_; }
|
||||
void SetMetadata(const VideoFrameMetadata& metadata) override {
|
||||
header_.SetFromMetadata(metadata);
|
||||
uint32_t ssrc = metadata.GetSsrc();
|
||||
std::vector<uint32_t> csrcs = metadata.GetCsrcs();
|
||||
|
||||
// We have to keep a local copy because GetMetadata() has to return a
|
||||
// reference.
|
||||
metadata_ = header_.GetAsMetadata();
|
||||
metadata_.SetSsrc(ssrc);
|
||||
metadata_.SetCsrcs(std::move(csrcs));
|
||||
}
|
||||
|
||||
@ -106,7 +108,6 @@ class TransformableVideoSenderFrame : public TransformableVideoFrameInterface {
|
||||
const uint32_t timestamp_;
|
||||
const int64_t capture_time_ms_;
|
||||
const absl::optional<int64_t> expected_retransmission_time_ms_;
|
||||
const uint32_t ssrc_;
|
||||
};
|
||||
} // namespace
|
||||
|
||||
|
||||
@ -27,8 +27,8 @@ class TransformableVideoReceiverFrame
|
||||
TransformableVideoReceiverFrame(std::unique_ptr<RtpFrameObject> frame,
|
||||
uint32_t ssrc)
|
||||
: frame_(std::move(frame)),
|
||||
metadata_(frame_->GetRtpVideoHeader().GetAsMetadata()),
|
||||
ssrc_(ssrc) {
|
||||
metadata_(frame_->GetRtpVideoHeader().GetAsMetadata()) {
|
||||
metadata_.SetSsrc(ssrc);
|
||||
metadata_.SetCsrcs(frame_->Csrcs());
|
||||
}
|
||||
~TransformableVideoReceiverFrame() override = default;
|
||||
@ -44,7 +44,7 @@ class TransformableVideoReceiverFrame
|
||||
}
|
||||
|
||||
uint8_t GetPayloadType() const override { return frame_->PayloadType(); }
|
||||
uint32_t GetSsrc() const override { return ssrc_; }
|
||||
uint32_t GetSsrc() const override { return metadata_.GetSsrc(); }
|
||||
uint32_t GetTimestamp() const override { return frame_->Timestamp(); }
|
||||
|
||||
bool IsKeyFrame() const override {
|
||||
@ -70,7 +70,6 @@ class TransformableVideoReceiverFrame
|
||||
private:
|
||||
std::unique_ptr<RtpFrameObject> frame_;
|
||||
VideoFrameMetadata metadata_;
|
||||
const uint32_t ssrc_;
|
||||
};
|
||||
} // namespace
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user