/// <summary> /// Initialise the video capture and render device. /// </summary> private async Task SetVideoSource(VideoOptions videoSourceOpts) { if (videoSourceOpts.VideoSource != VideoSourcesEnum.ExternalBitmap && _videoOpts.BitmapSource != null) { _videoOpts.BitmapSource.OnBitmap -= LocalBitmapAvailable; } if (videoSourceOpts.VideoSource != VideoSourcesEnum.TestPattern && _testPatternVideoSource != null) { _testPatternVideoSource.SampleReady -= LocalVideoSampleAvailable; _testPatternVideoSource.Stop(); _testPatternVideoSource = null; } if (videoSourceOpts.VideoSource == VideoSourcesEnum.TestPattern) { if (_testPatternVideoSource == null) { _testPatternVideoSource = new TestPatternVideoSource(videoSourceOpts.SourceFile, videoSourceOpts.SourceFramesPerSecond); _testPatternVideoSource.SampleReady += LocalVideoSampleAvailable; } else { await _testPatternVideoSource.SetSource(videoSourceOpts.SourceFile, videoSourceOpts.SourceFramesPerSecond).ConfigureAwait(false); } if (_testPatternVideoSource.FramesPerSecond != 0) { _rtpVideoTimestampPeriod = (uint)(SDPMediaFormatInfo.GetClockRate(SDPMediaFormatsEnum.VP8) / _testPatternVideoSource.FramesPerSecond); } else { _rtpVideoTimestampPeriod = (uint)(SDPMediaFormatInfo.GetClockRate(SDPMediaFormatsEnum.VP8) / TestPatternVideoSource.DEFAULT_FRAMES_PER_SECOND); } } else if (videoSourceOpts.VideoSource == VideoSourcesEnum.ExternalBitmap) { videoSourceOpts.BitmapSource.OnBitmap += LocalBitmapAvailable; } }