Make sure VideoReceiveStream can be restarted
After calling Start(), doing a Stop() then Start() sequence should bring the stream back to the original state. BUG=webrtc:6501 Review-Url: https://codereview.webrtc.org/2407163002 Cr-Commit-Position: refs/heads/master@{#14597}
This commit is contained in:
parent
defc21e0aa
commit
113bdcadf3
@ -161,6 +161,22 @@ TEST_F(EndToEndTest, ReceiverCanBeStoppedTwice) {
|
||||
DestroyStreams();
|
||||
}
|
||||
|
||||
TEST_F(EndToEndTest, ReceiverCanBeStoppedAndRestarted) {
|
||||
CreateCalls(Call::Config(&event_log_), Call::Config(&event_log_));
|
||||
|
||||
test::NullTransport transport;
|
||||
CreateSendConfig(1, 0, &transport);
|
||||
CreateMatchingReceiveConfigs(&transport);
|
||||
|
||||
CreateVideoStreams();
|
||||
|
||||
video_receive_streams_[0]->Stop();
|
||||
video_receive_streams_[0]->Start();
|
||||
video_receive_streams_[0]->Stop();
|
||||
|
||||
DestroyStreams();
|
||||
}
|
||||
|
||||
TEST_F(EndToEndTest, RendersSingleDelayedFrame) {
|
||||
static const int kWidth = 320;
|
||||
static const int kHeight = 240;
|
||||
|
||||
@ -188,6 +188,7 @@ VideoReceiveStream::VideoReceiveStream(
|
||||
VieRemb* remb)
|
||||
: transport_adapter_(config.rtcp_send_transport),
|
||||
config_(std::move(config)),
|
||||
num_cpu_cores_(num_cpu_cores),
|
||||
process_thread_(process_thread),
|
||||
clock_(Clock::GetRealTimeClock()),
|
||||
decode_thread_(DecodeThreadFunction, this, "DecodingThread"),
|
||||
@ -224,13 +225,6 @@ VideoReceiveStream::VideoReceiveStream(
|
||||
<< "Duplicate payload type (" << decoder.payload_type
|
||||
<< ") for different decoders.";
|
||||
decoder_payload_types.insert(decoder.payload_type);
|
||||
video_receiver_.RegisterExternalDecoder(decoder.decoder,
|
||||
decoder.payload_type);
|
||||
|
||||
VideoCodec codec = CreateDecoderVideoCodec(decoder);
|
||||
RTC_CHECK(rtp_stream_receiver_.SetReceiveCodec(codec));
|
||||
RTC_CHECK_EQ(VCM_OK, video_receiver_.RegisterReceiveCodec(
|
||||
&codec, num_cpu_cores, false));
|
||||
}
|
||||
|
||||
video_receiver_.SetRenderDelay(config.render_delay_ms);
|
||||
@ -281,6 +275,16 @@ void VideoReceiveStream::Start() {
|
||||
}
|
||||
RTC_DCHECK(renderer != nullptr);
|
||||
|
||||
for (const Decoder& decoder : config_.decoders) {
|
||||
video_receiver_.RegisterExternalDecoder(decoder.decoder,
|
||||
decoder.payload_type);
|
||||
|
||||
VideoCodec codec = CreateDecoderVideoCodec(decoder);
|
||||
RTC_CHECK(rtp_stream_receiver_.SetReceiveCodec(codec));
|
||||
RTC_CHECK_EQ(VCM_OK, video_receiver_.RegisterReceiveCodec(
|
||||
&codec, num_cpu_cores_, false));
|
||||
}
|
||||
|
||||
video_stream_decoder_.reset(new VideoStreamDecoder(
|
||||
&video_receiver_, &rtp_stream_receiver_, &rtp_stream_receiver_,
|
||||
rtp_stream_receiver_.IsRetransmissionsEnabled(),
|
||||
|
||||
@ -98,6 +98,7 @@ class VideoReceiveStream : public webrtc::VideoReceiveStream,
|
||||
|
||||
TransportAdapter transport_adapter_;
|
||||
const VideoReceiveStream::Config config_;
|
||||
const int num_cpu_cores_;
|
||||
ProcessThread* const process_thread_;
|
||||
Clock* const clock_;
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user