2016-11-07 8 views
0

UWPのCaptureElementを使用してカメラをプレビューしています。しかし、なぜ私はエラーを取得する必要があります: "適切な変換がエンコードまたはデコードに見つかりませんでした"特定の解像度を使用する場合?ウェブカメラを使用しているときに発生しますUWPカメラのプレビュー:「エンコードまたはデコードに適切な変換が見つかりません」

私はこのメソッドを使用するとエラーは発生しません:mediacapture.VideoDeviceController.SetMediaStreamPropertiesAsync(...)。私はこの方法を使用する場合は、captureelementは、私は私がしたい解像度(キャプチャ要素iが品質の損失をしたくないので、それはnoneに設定ストレッチ属性のしている)

 try 
     { 
      MediaCaptureInitializationSettings mediacapturesettings = new MediaCaptureInitializationSettings { VideoDeviceId = DeviceInfo.Id }; 
      await mediacapture.InitializeAsync(mediacapturesettings); 
     } 
     catch (Exception exception) 
     { 
      var dialog = new MessageDialog(exception.Message); 
      await dialog.ShowAsync(); 
     } 


     captureelement.Source = mediacapture; 
     captureelement.FlowDirection = Windows.UI.Xaml.FlowDirection.LeftToRight; 

     await mediacapture.StartPreviewAsync(); 
     // await mediacapture.VideoDeviceController.SetMediaStreamPropertiesAsync(MediaStreamType.VideoPreview, Resolution.EncodingProperties); 
     await mediacapture.SetEncodingPropertiesAsync(MediaStreamType.VideoPreview, Resolution.EncodingProperties,null); 

     VideoRotation currentrotation = Rotation; 
     mediacapture.SetPreviewRotation(currentrotation); 

答えて

0

I don't get the error when i use this method: mediacapture.VideoDeviceController.SetMediaStreamPropertiesAsync(...). but if i use this method, the captureelement doesn't get scaled to the resolution i want .

It only happens the first time i callstartpreview().

にスケーリングされません。内部的に相談して回答を得ました。この問題はおそらくグラフィックドライバに関連しています。 MediaCapture.SetEncodingPropertiesAsyncに電話をかける前に、カメラのデバイスプレビューを実行中の状態にする必要がある場合があります。このエラーが発生し、初めて取得しただけです。

i want to know the difference between the two methods.

差:

  1. MediaCapture.SetEncodingPropertiesAsyncカメラシンクのプロパティを設定します。カメラがサポートしていない解像度と回転をここで設定し、エンコーダが目的のフォーマットに変換する作業を行うことができます。
  2. MediaCapture.VideoDeviceController.SetMediaStreamPropertiesAsyncソースのプロパティを設定します。カメラがサポートする設定のみを設定できます。

プレビューウィンドウのサイズは、Xaml CaptureElementによって制御されます。 VideoDeviceController.SetMediaStreamPropertiesAsyncを使用していて、プレビューウィンドウのサイズを変更する場合は、Stretch="UniformToFill"のみを設定して、プレビューウィンドウで親要素を塗りつぶすことができます。

+0

私はすでにこれを行っています。私の解決プロパティは、getavailablemediastreampropertiesによって返されたすべての解像度を含むコンボボックスから選択された解像度を返します。 – PrisonMike

+0

OK、それは変です。私の答えで、公式のサンプルのシナリオ1を試してください。異なる解像度を試してください。すべてが正しく動作するかどうかを確認してください。正式なサンプルでエラーがない場合は、問題を再現できる基本的なデモを共有している可能性があります。私はマシン上でテストし、何が間違っているかを確認します。 –

+0

サンプルでは、​​SetEncodingPropertiesAsync()メソッドで同じことが起こるため、2つのメソッドの違いを知りたいのです.SetEncodingPropertiesAsync()を使用する場合、品質は完全です。 Windows 10上のカメラアプリケーションは、品質の損失がないので、私は思うこの方法を使用して – PrisonMike

関連する問題