[InsertableStreams] Set video frame transformer if RTP stream already started.
Test in https://chromium-review.googlesource.com/c/chromium/src/+/2127927 Bug: chromium:1065836 Change-Id: Idf3f41285e23ac829f69f1bc95b1def3a73af8d6 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/172400 Reviewed-by: Magnus Flodman <mflodman@webrtc.org> Reviewed-by: Rasmus Brandt <brandtr@webrtc.org> Reviewed-by: Marina Ciocea <marinaciocea@webrtc.org> Commit-Queue: Guido Urdaneta <guidou@webrtc.org> Cr-Commit-Position: refs/heads/master@{#30948}
This commit is contained in:

committed by
Commit Bot

parent
4b425aeef9
commit
e1aa22f892
@ -300,6 +300,11 @@ class VideoReceiveStream {
|
||||
virtual void SetFrameDecryptor(
|
||||
rtc::scoped_refptr<FrameDecryptorInterface> frame_decryptor) = 0;
|
||||
|
||||
// Allows a frame transformer to be attached to a VideoReceiveStream after
|
||||
// creation without resetting the decoder state.
|
||||
virtual void SetDepacketizerToDecoderFrameTransformer(
|
||||
rtc::scoped_refptr<FrameTransformerInterface> frame_transformer) = 0;
|
||||
|
||||
// Sets and returns recording state. The old state is moved out
|
||||
// of the video receive stream and returned to the caller, and |state|
|
||||
// is moved in. If the state's callback is set, it will be called with
|
||||
|
@ -229,6 +229,10 @@ class FakeVideoReceiveStream final : public webrtc::VideoReceiveStream {
|
||||
void SetFrameDecryptor(rtc::scoped_refptr<webrtc::FrameDecryptorInterface>
|
||||
frame_decryptor) override {}
|
||||
|
||||
void SetDepacketizerToDecoderFrameTransformer(
|
||||
rtc::scoped_refptr<webrtc::FrameTransformerInterface> frame_transformer)
|
||||
override {}
|
||||
|
||||
RecordingState SetAndGetRecordingState(RecordingState state,
|
||||
bool generate_key_frame) override {
|
||||
return RecordingState();
|
||||
|
@ -2565,6 +2565,8 @@ void WebRtcVideoChannel::WebRtcVideoSendStream::
|
||||
frame_transformer) {
|
||||
RTC_DCHECK_RUN_ON(&thread_checker_);
|
||||
parameters_.config.frame_transformer = std::move(frame_transformer);
|
||||
if (stream_)
|
||||
RecreateWebRtcStream();
|
||||
}
|
||||
|
||||
void WebRtcVideoChannel::WebRtcVideoSendStream::RecreateWebRtcStream() {
|
||||
@ -3041,6 +3043,8 @@ void WebRtcVideoChannel::WebRtcVideoReceiveStream::
|
||||
rtc::scoped_refptr<webrtc::FrameTransformerInterface>
|
||||
frame_transformer) {
|
||||
config_.frame_transformer = frame_transformer;
|
||||
if (stream_)
|
||||
stream_->SetDepacketizerToDecoderFrameTransformer(frame_transformer);
|
||||
}
|
||||
|
||||
WebRtcVideoChannel::VideoCodecSettings::VideoCodecSettings()
|
||||
|
@ -881,6 +881,20 @@ void RtpVideoStreamReceiver::SetFrameDecryptor(
|
||||
buffered_frame_decryptor_->SetFrameDecryptor(std::move(frame_decryptor));
|
||||
}
|
||||
|
||||
void RtpVideoStreamReceiver::SetDepacketizerToDecoderFrameTransformer(
|
||||
rtc::scoped_refptr<FrameTransformerInterface> frame_transformer) {
|
||||
RTC_DCHECK_RUN_ON(&network_tc_);
|
||||
if (!frame_transformer_delegate_) {
|
||||
frame_transformer_delegate_ = new rtc::RefCountedObject<
|
||||
RtpVideoStreamReceiverFrameTransformerDelegate>(
|
||||
this, std::move(frame_transformer), rtc::Thread::Current());
|
||||
frame_transformer_delegate_->Init();
|
||||
} else {
|
||||
RTC_LOG(LS_ERROR)
|
||||
<< "Attempting to replace an existing frame transformer in a receiver";
|
||||
}
|
||||
}
|
||||
|
||||
void RtpVideoStreamReceiver::UpdateRtt(int64_t max_rtt_ms) {
|
||||
if (nack_module_)
|
||||
nack_module_->UpdateRtt(max_rtt_ms);
|
||||
|
@ -164,6 +164,11 @@ class RtpVideoStreamReceiver : public LossNotificationSender,
|
||||
void SetFrameDecryptor(
|
||||
rtc::scoped_refptr<FrameDecryptorInterface> frame_decryptor);
|
||||
|
||||
// Sets a frame transformer after a stream has started, if no transformer
|
||||
// has previously been set. Does not reset the decoder state.
|
||||
void SetDepacketizerToDecoderFrameTransformer(
|
||||
rtc::scoped_refptr<FrameTransformerInterface> frame_transformer);
|
||||
|
||||
// Called by VideoReceiveStream when stats are updated.
|
||||
void UpdateRtt(int64_t max_rtt_ms);
|
||||
|
||||
|
@ -535,6 +535,12 @@ void VideoReceiveStream::SetFrameDecryptor(
|
||||
rtp_video_stream_receiver_.SetFrameDecryptor(std::move(frame_decryptor));
|
||||
}
|
||||
|
||||
void VideoReceiveStream::SetDepacketizerToDecoderFrameTransformer(
|
||||
rtc::scoped_refptr<FrameTransformerInterface> frame_transformer) {
|
||||
rtp_video_stream_receiver_.SetDepacketizerToDecoderFrameTransformer(
|
||||
std::move(frame_transformer));
|
||||
}
|
||||
|
||||
void VideoReceiveStream::SendNack(const std::vector<uint16_t>& sequence_numbers,
|
||||
bool buffering_allowed) {
|
||||
RTC_DCHECK(buffering_allowed);
|
||||
|
@ -99,6 +99,8 @@ class VideoReceiveStream : public webrtc::VideoReceiveStream,
|
||||
|
||||
void SetFrameDecryptor(
|
||||
rtc::scoped_refptr<FrameDecryptorInterface> frame_decryptor) override;
|
||||
void SetDepacketizerToDecoderFrameTransformer(
|
||||
rtc::scoped_refptr<FrameTransformerInterface> frame_transformer) override;
|
||||
|
||||
// Implements rtc::VideoSinkInterface<VideoFrame>.
|
||||
void OnFrame(const VideoFrame& video_frame) override;
|
||||
|
Reference in New Issue
Block a user