Skip to content

Commit 7ca9951

Browse files
can do mediacapture with StartPreviewAsync
1 parent 0e0e368 commit 7ca9951

File tree

8 files changed

+367
-350
lines changed

8 files changed

+367
-350
lines changed

Samples/StyleTransfer/AppModel.cs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public AppModel()
2323
this._useGPU = true;
2424
this._modelSource = "candy";
2525
this._selectedCameraIndex = 0;
26-
this._outputMediaCapture = new CaptureElement();
26+
this._outputCaptureElement = new CaptureElement();
2727
}
2828

2929
// Name of the style transfer model to apply to input media
@@ -86,14 +86,15 @@ public VideoFrame OutputFrame
8686
}
8787
}
8888
// MediaSource for transformed media
89-
private CaptureElement _outputMediaCapture;
90-
public CaptureElement OutputMediaCapture
89+
private CaptureElement _outputCaptureElement;
90+
public CaptureElement OutputCaptureElement
9191
{
92-
get {
93-
if (_outputMediaCapture == null) _outputMediaCapture = new CaptureElement();
94-
return _outputMediaCapture;
92+
get
93+
{
94+
if (_outputCaptureElement == null) _outputCaptureElement = new CaptureElement();
95+
return _outputCaptureElement;
9596
}
96-
set { _outputMediaCapture = value; OnPropertyChanged(); }
97+
set { _outputCaptureElement = value; OnPropertyChanged(); }
9798
}
9899

99100
// MediaSource for the input media

Samples/StyleTransfer/AppViewModel.cs

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -298,12 +298,33 @@ public async Task ChangeLiveStream()
298298
try
299299
{
300300
// Check that SCI hasn't < 0
301+
if (_appModel.SelectedCameraIndex < 0) _appModel.SelectedCameraIndex = 0;
301302
_selectedMediaFrameSourceGroup = _mediaFrameSourceGroupList[_appModel.SelectedCameraIndex];
302303

303304
// Create MediaCapture and its settings
305+
var settings = new MediaCaptureInitializationSettings
306+
{
307+
SourceGroup = _selectedMediaFrameSourceGroup,
308+
PhotoCaptureSource = PhotoCaptureSource.Auto,
309+
MemoryPreference = _appModel.UseGPU ? MediaCaptureMemoryPreference.Auto : MediaCaptureMemoryPreference.Cpu,
310+
StreamingCaptureMode = StreamingCaptureMode.Video
311+
};
304312
_mediaCapture = new MediaCapture();
305-
await _mediaCapture.InitializeAsync();
313+
await _mediaCapture.InitializeAsync(settings);
314+
315+
var capture = new CaptureElement();
316+
capture.Source = _mediaCapture;
317+
_appModel.OutputCaptureElement = capture;
318+
319+
videoEffectDefinition = new VideoEffectDefinition(_videoEffectID);
320+
videoEffect = await _mediaCapture.AddVideoEffectAsync(videoEffectDefinition, MediaStreamType.VideoPreview);
321+
videoEffect.SetProperties(new PropertySet() {
322+
{ "Session", m_session},
323+
{ "Binding", m_binding },
324+
{ "InputImageDescription", m_inputImageDescription },
325+
{ "OutputImageDescription", m_outputImageDescription } });
306326

327+
await _mediaCapture.StartPreviewAsync();
307328
}
308329
catch (Exception ex)
309330
{
@@ -329,12 +350,13 @@ private void StartPreview()
329350
return;
330351
}
331352

332-
//_appModel.OutputMediaCapture = MediaSource.CreateFromMediaFrameSource(_selectedMediaFrameSource);
353+
//_appModel.OutputCaptureElement = MediaSource.CreateFromMediaFrameSource(_selectedMediaFrameSource);
333354
//_appModel.InputMediaSource = MediaSource.CreateFromMediaFrameSource(_selectedMediaFrameSource);
334355
}
335356

336357
private async Task LoadModelAsync()
337358
{
359+
338360
m_session?.Dispose();
339361

340362
StorageFile modelFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri($"ms-appx:///Assets/{_appModel.ModelSource}.onnx"));
@@ -391,10 +413,9 @@ private void CleanupCameraAsync()
391413
try
392414
{
393415
_mediaCapture?.Dispose();
394-
if (_appModel.OutputMediaCapture != null)
416+
if (_appModel.OutputCaptureElement != null)
395417
{
396-
CaptureElement output = _appModel.OutputMediaCapture;
397-
_appModel.OutputMediaCapture = null;
418+
_appModel.OutputCaptureElement = null;
398419

399420
}
400421
if (videoEffect != null)
@@ -410,6 +431,7 @@ private void CleanupCameraAsync()
410431
}
411432
}
412433

434+
413435
private void CleanupInputImage()
414436
{
415437
try

Samples/StyleTransfer/MainPage.xaml

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,8 @@
139139

140140
<Button
141141
Name="UIButtonLiveStream"
142-
Click="UIButtonLiveStream_Click"
142+
Command="{Binding SetMediaSourceCommand}"
143+
CommandParameter="LiveStream"
143144
ToolTipService.ToolTip="Camera preview">
144145
<Button.Content>
145146
<SymbolIcon Symbol="Video" />
@@ -222,10 +223,11 @@
222223
</StackPanel>
223224
</Viewbox>
224225

225-
<CaptureElement
226+
<ContentControl
226227
Name="PreviewControl"
227-
Source="{Binding CurrentApp.OutputMediaCapture}"
228-
Stretch="Uniform" />
228+
Width="720"
229+
Height="720"
230+
Content="{Binding CurrentApp.OutputCaptureElement}" />
229231

230232
<!-- Input image preview -->
231233
<Image

Samples/StyleTransfer/MainPage.xaml.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ public async void UIButtonLiveStream_Click(object sender, RoutedEventArgs e)
6969
}
7070
try
7171
{
72-
PreviewControl.Source = _viewModel._mediaCapture;
72+
//PreviewControl.Source = _viewModel._mediaCapture;
7373

7474
_viewModel.videoEffectDefinition = new VideoEffectDefinition(_viewModel._videoEffectID);
7575
_viewModel.videoEffect = await _viewModel._mediaCapture.AddVideoEffectAsync(_viewModel.videoEffectDefinition, MediaStreamType.VideoPreview);

0 commit comments

Comments
 (0)