2017-06-26 4 views
0

OpenCVを使用してライブビデオフィードからフレームを処理していますが、処理がかなり集中しています。 2〜3秒かかることがあります。フレームの処理中に記録されたすべてのフレームを無視しても問題ありません。Swift 3 - 1つのアイテムのキューのみ

基本的に、フォアグラウンドで表示されるフレームの連続フローがあります。次に利用可能なフレームを取り出し、バックグラウンドで処理します。このフレームが処理される次の2〜3秒間、次のフレームのすべてを中断されずにフォアグラウンドで表示し続けます。私はこれらを処理する必要はありません。しかし、バックグラウンドフレームが終了するとすぐに、私は利用可能な最新のフレームをつかみ、それを処理のために送りたいと思う。

私はSwiftのキューを使い慣れていません。私はそれが私が見ているは​​ずのキューだと思います、誰かが正しい方向に私を向けることができますか?

答えて

1

おそらく、DispatchQueueのバックグラウンドを使用するのが最も簡単です。フレームを非同期で処理し、メインキューに戻って結果を表示し、停止するまで再帰的に関数を呼び出します。 UIを更新するには、主スレッドに戻って切り替えることが特に重要です。

func processNextAvailableFrame() { 
    DispatchQueue.global(qos: .background).async { 
     // Grab a frame to process 
     // Process frame 

     DispatchQueue.main.async { 
      // Back on main thread, show result of processing frame 
      // Call processFrame() again, as needed. 
      let shouldKeepGoing = true // determine this somehow 
      if shouldKeepGoing { 
       self.processNextAvailableFrame() 
      } 
     } 
    } 
} 
+0

これは洞察に感謝してくれました。 – Cathal

関連する問題