2016-04-05 6 views
0

Я делаю приложение для Android для обработки изображений в реальном времени, и я не знаю, какой из них наиболее эффективен для обработки этих фреймов.Обработка изображений в реальном времени Android

запускаю процесс приобретения в потоке, как это:

/** 
    * Thread to open camera acquisition process 
    */ 
    private static class CameraHandlerThread extends HandlerThread { 
     Handler mHandler = null; 

     CameraHandlerThread() { 
      super("CameraHandlerThread"); 
      start(); 
      mHandler = new Handler(getLooper()); 
     } 

     synchronized void notifyCameraOpened() { 
      notify(); 
     } 

     void openCamera() { 
      mHandler.post(new Runnable() { 
       @Override 
       public void run() { 
        try { 
         mCamera = Camera.open(cameraUsed.ordinal()); 
        } catch (RuntimeException e) { 
         Log.e(TAG, "failed to open front camera"); 
        } 
        notifyCameraOpened(); 
       } 
      }); 
      try { 
       wait(); 
      } catch (InterruptedException e) { 
       Log.w(TAG, "wait was interrupted"); 
      } 
     } 
    } 

я достигаю высокую частоту кадров (25 кадров в секунду больше и меньше), и моя задача процесса являются около 300 мс. Каков наилучший и самый быстрый способ запустить эти задачи? В другой теме? В основной теме?

Благодаря

ответ

1

Есть следующие вещи, которые вы должны иметь в виду

  1. количество процессоров на андроид устройства
  2. объем доступной оперативной памяти

наиболее эффективным будет если

number of threads == number of processors 

, но чем больше потоков, тем больше требуется RAM.

Таким образом, вы должны решить, в зависимости от доступной оперативной памяти и процессоров.

btw, Camera.open - это блокирующий вызов, поэтому поместите его в поток, это более эффективно, но я надеюсь, что вы не обрабатываете изображения в Camera.open, потому что в этом случае потоки или нити не будут " .

Смежные вопросы