Hololens摄像机视频捕获未在UWP中启动

时间:2019-09-17 08:11:49

标签: uwp camera hololens c++-winrt

我在Hololens上用UWP(C ++ / WinRT)-没有Unity编写了一个应用程序。该应用程序尝试像这样从前置摄像头开始视频捕获:

IAsyncAction Init()
{
   std::lock_guard<std::mutex> guard(m_lock);

   m_mediaCapture = MediaCapture();
   m_mediaCapture.Failed([this](auto&& sender, auto&& args)
   { /* log the error */ });

   MediaCaptureInitializationSettings mcis;
   mcis.StreamingCaptureMode(StreamingCaptureMode::Video);
   mcis.MediaCategory(MediaCategory::Media);
   mcis.MemoryPreference(MediaCaptureMemoryPreference::Cpu);

   co_await m_mediaCapture.InitializeAsync(mcis);
   co_return;   
}
IAsyncAction Start(const MediaCapture& mc)
{
   std::lock_guard<std::mutex> guard(m_lock);

   for (auto src: mc.FrameSources())
   {
      MediaFrameSource source = src.Value();
      MediaFrameSourceInfo info = source.Info();

      if(IsTheCameraIWant(info))
      {
         m_reader = mc.CreateFrameReaderAsync(source).get();
         m_reader.AcquisitionMode(MediaFrameReaderAcquisitionMode::Realtime);
         m_reader.FrameArrived([this](auto&& mfr, auto&& args){ HandleCapturedFrame(mfr, args); });
      }
   }

   co_return;
}
void HandleCapturedFrame(const MediaFrameReader &reader, const MediaFrameArrivedEventArgs& args)
{
   std::lock_guard<std::mutex> guard(m_lock);
   auto frame = reader.TryAcquireLatestFrame();
   // do something with the frame
   frame.Close();
}

问题是,启动相机不可靠。当我将应用程序部署到Hololens或使其从VS运行时,相机会初始化并正常运行。当我关闭应用程序并重新打开时,Start无例外地执行,但是MediaCapture.Failed处理程序将触发并显示消息A media source cannot go from the stopped state to the paused state.。 Hololens上的隐私摄像头LED也未点亮,并且我没有视频帧。从VS重新部署或重新启动Hololens会有所帮助,但会给我一两次成功的初始化,然后再次出现故障。

当应用程序关闭时,我进行了co_await m_reader.StopAsync()m_reader.Close()m_mediaCapture.get().Close(),我想不起要进行的任何清理工作。

有人知道如何获得一致的相机初始化吗?也许有些清理我可能会忘记...

0 个答案:

没有答案