2013-07-02 8 views
0

Доброе утро всем.Переключение между камерой не работает после создания резьбы

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

Переключение между камерами работало до тех пор, пока я не создал поток обработки фона (asynktask). Программа работает правильно с введением и исполнением потока, но если я попытаюсь сменить камеру, она сработает. В asynktask я выполняю только следующие операции: изменение размера кадра, вычисление некоторых точек на измененном кадре, масштабирование точек на основе размера исходного кадра, отображение исходного кадра на экране с пересчитанными точками, напечатанными на нем.

Если я пытаюсь сделать переключение, ошибка я получаю в LogCat является:

07-02 11:14:41.649: ERROR/AndroidRuntime(16778): FATAL EXCEPTION: pool-1-thread-3 
    java.lang.RuntimeException: An error occured while executing doInBackground() 
    at android.os.AsyncTask$3.done(AsyncTask.java:299) 
    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352) 
    at java.util.concurrent.FutureTask.setException(FutureTask.java:219) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:239) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
    at java.lang.Thread.run(Thread.java:856) 
    Caused by: CvException [org.opencv.core.CvException: /home/reports/ci/slave_desktop/50-SDK/opencv/modules/imgproc/src/imgwarp.cpp:1723: error: (-215) ssize.area() > 0 in function void cv::resize(cv::InputArray, cv::OutputArray, cv::Size, double, double, int) 
    ] 
    at org.opencv.imgproc.Imgproc.resize_0(Native Method) 
    at org.opencv.imgproc.Imgproc.resize(Imgproc.java:8461) 
    at com.micaela.myapp.MainActivity$ExtractFeaturesTask.scaleImage(MainActivity.java:764) 
    at com.micaela.myapp.MainActivity$ExtractFeaturesTask$1.handleMessage(MainActivity.java:678) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:137) 
    at com.micaela.myapp.MainActivity$ExtractFeaturesTask.doInBackground(MainActivity.java:736) 
    at com.micaela.myapp.MainActivity$ExtractFeaturesTask.doInBackground(MainActivity.java:649) 
    at android.os.AsyncTask$2.call(AsyncTask.java:287) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:234) 

ответ

0

Я сделал несколько исследований по ошибке CvException в LogCat. Кажется, проблема связана с тем, как вы манипулируете изображением. Передано ли изображение в ASync? После проверки этой проверки убедитесь, что все ваши параметры верны.

+0

Я только добавил элемент управления, чтобы проверить, что image.size.area()> 0 (ошибка, которая отображается в logcat). Теперь, если я переключу камеру, приложение не сбой, а только блоки (как замороженные). Очень странно, что, когда он замерзает, если я снова нажимаю кнопку переключения, переключение начинает работать. – user140888

+0

Похоже, он начинает много работать, когда вы впервые нажимаете переключатель. Прикрепите пару Log.i для отладки и посмотрите, что-нибудь петли или начнется преждевременно. – SonicWind

0

Задача Async не должна работать непосредственно с байтом [], полученным в onPreviewCallback(). Если вы копируете пиксели во временный массив и передаете его в AsyncTask, исключение исчезнет.

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

  • Нет связанных вопросов^_^