Insert audio frame transformer between depacketizer and decoder.
The frame transformer is passed from RTPReceiverInterface through the library to be eventually set in ChannelReceive, where the frame transformation will occur in the follow-up CL. Insertable Streams Web API explainer: https://github.com/alvestrand/webrtc-media-streams/blob/master/explainer.md Design doc for WebRTC library changes: http://doc/1eiLkjNUkRy2FssCPLUp6eH08BZuXXoHfbbBP1ZN7EVk Bug: webrtc:11380 Change-Id: I5af06d1431047ef50d00e304cf95e92a832b4220 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/171872 Reviewed-by: Magnus Flodman <mflodman@webrtc.org> Reviewed-by: Tommi <tommi@webrtc.org> Reviewed-by: Per Åhgren <peah@webrtc.org> Commit-Queue: Marina Ciocea <marinaciocea@webrtc.org> Cr-Commit-Position: refs/heads/master@{#30956}
This commit is contained in:
committed by
Commit Bot
parent
784630f0e6
commit
3e9af7fe05
@ -1063,7 +1063,8 @@ class WebRtcVoiceMediaChannel::WebRtcAudioReceiveStream {
|
||||
int jitter_buffer_min_delay_ms,
|
||||
bool jitter_buffer_enable_rtx_handling,
|
||||
rtc::scoped_refptr<webrtc::FrameDecryptorInterface> frame_decryptor,
|
||||
const webrtc::CryptoOptions& crypto_options)
|
||||
const webrtc::CryptoOptions& crypto_options,
|
||||
rtc::scoped_refptr<webrtc::FrameTransformerInterface> frame_transformer)
|
||||
: call_(call), config_() {
|
||||
RTC_DCHECK(call);
|
||||
config_.rtp.remote_ssrc = remote_ssrc;
|
||||
@ -1085,6 +1086,7 @@ class WebRtcVoiceMediaChannel::WebRtcAudioReceiveStream {
|
||||
config_.codec_pair_id = codec_pair_id;
|
||||
config_.frame_decryptor = frame_decryptor;
|
||||
config_.crypto_options = crypto_options;
|
||||
config_.frame_transformer = std::move(frame_transformer);
|
||||
RecreateAudioReceiveStream();
|
||||
}
|
||||
|
||||
@ -1215,6 +1217,13 @@ class WebRtcVoiceMediaChannel::WebRtcAudioReceiveStream {
|
||||
return rtp_parameters;
|
||||
}
|
||||
|
||||
void SetDepacketizerToDecoderFrameTransformer(
|
||||
rtc::scoped_refptr<webrtc::FrameTransformerInterface> frame_transformer) {
|
||||
RTC_DCHECK(worker_thread_checker_.IsCurrent());
|
||||
config_.frame_transformer = std::move(frame_transformer);
|
||||
ReconfigureAudioReceiveStream();
|
||||
}
|
||||
|
||||
private:
|
||||
void RecreateAudioReceiveStream() {
|
||||
RTC_DCHECK(worker_thread_checker_.IsCurrent());
|
||||
@ -1868,7 +1877,7 @@ bool WebRtcVoiceMediaChannel::AddRecvStream(const StreamParams& sp) {
|
||||
engine()->audio_jitter_buffer_fast_accelerate_,
|
||||
engine()->audio_jitter_buffer_min_delay_ms_,
|
||||
engine()->audio_jitter_buffer_enable_rtx_handling_,
|
||||
unsignaled_frame_decryptor_, crypto_options_)));
|
||||
unsignaled_frame_decryptor_, crypto_options_, nullptr)));
|
||||
recv_streams_[ssrc]->SetPlayout(playout_);
|
||||
|
||||
return true;
|
||||
@ -2337,6 +2346,20 @@ void WebRtcVoiceMediaChannel::SetEncoderToPacketizerFrameTransformer(
|
||||
std::move(frame_transformer));
|
||||
}
|
||||
|
||||
void WebRtcVoiceMediaChannel::SetDepacketizerToDecoderFrameTransformer(
|
||||
uint32_t ssrc,
|
||||
rtc::scoped_refptr<webrtc::FrameTransformerInterface> frame_transformer) {
|
||||
RTC_DCHECK(worker_thread_checker_.IsCurrent());
|
||||
auto matching_stream = recv_streams_.find(ssrc);
|
||||
if (matching_stream == recv_streams_.end()) {
|
||||
RTC_LOG(LS_INFO) << "Attempting to set frame transformer for SSRC:" << ssrc
|
||||
<< " which doesn't exist.";
|
||||
return;
|
||||
}
|
||||
matching_stream->second->SetDepacketizerToDecoderFrameTransformer(
|
||||
std::move(frame_transformer));
|
||||
}
|
||||
|
||||
bool WebRtcVoiceMediaChannel::MaybeDeregisterUnsignaledRecvStream(
|
||||
uint32_t ssrc) {
|
||||
RTC_DCHECK(worker_thread_checker_.IsCurrent());
|
||||
|
||||
Reference in New Issue
Block a user