Переключение с основного потока на несколько потоков при анализе кадра
Я работал над мобильным приложением, которое анализирует фрейм в поисках конкретных объектов. Обработка была тяжелой, и я продолжаю получать
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()
ждет завершения всех потоков??