Переключение с основного потока на несколько потоков при анализе кадра

Я работал над мобильным приложением, которое анализирует фрейм в поисках конкретных объектов. Обработка была тяжелой, и я продолжаю получать

05-08 17:44:24.909: I/Choreographer(31606): Skipped 114 frames!  The application may be doing too much work on its main thread.

Поэтому я переключил обработку изображений на потоки, теперь это намного быстрее, но я не могу распознать какой-либо объект. Данные (разные кадры) не обновляются, и я не знаю почему. Вот что я делаю в псевдокоде ( SurfaceHolder.Callback,Camera.PreviewCallback и camera.addCallbackBuffer(data) реализованы)

public void onPreviewFrame(byte[] data, Camera camera)
{
  Imageprocessor np = new ImageProcessor(data);
  np.start()
  results = np.getResults();
 }

Из отладки, которую я сделал до сих пор, я знаю, что начало анализирует весь кадр, но. данные не обновляются, они сохраняются в самом первом кадре. Этого не произойдет, если я сделаю это в основной теме, как это,

public void onPreviewFrame(byte[] data, Camera camera)
{
  Imageprocessor np = new ImageProcessor();
  np.process(data)
  results = np.getResults();
 }

Это работает, но заставляет пропустить много кадров. Ответ может быть простым, но я не смог найти его в Интернете.

Простите, если я пишу очень нубский вопрос

заранее спасибо

1 ответ

Это потому, что в однопоточном случае np.process() завершено, прежде чем выполнить results=..., но в случае с резьбой results=... следует сразу после запуска темы. Если не getResults() ждет завершения всех потоков??

Другие вопросы по тегам