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:
sprang 2016-10-11 03:10:10 -07:00 committed by Commit bot
parent defc21e0aa
commit 113bdcadf3
3 changed files with 28 additions and 7 deletions

View File

@ -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;

View File

@ -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(),

View File

@ -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_;