[Jderobot-dev] Problemas con CameraServerAndroid

Oscar Garcia oscar.robotica en linaresdigital.com
Mie Feb 27 23:06:31 CET 2013


El 27/01/13 21:22, Oscar Garcia escribi�:
> Pero cuando intento conectar cameraview al servidor android me sale lo
> siguiente:
>
> redstar en greystar:~/Descargas/jderobot/trunk/src/components/cameraview$
> ./cameraview --Ice.Config=android.cfg
> Loading glade
> Invalid proxy


�Conseguido! He encontrado el error. Me hab�a empe�ado en implementar 
ImageProviderI en vez de CameraI por lo que, como es l�gico, el proxy no 
pod�a crearse para una clase diferente.

Lo he descubierto con wireshark, pens� en ver el tr�fico de red para ver 
en qu� se diferenciaba un cameraserver en C++ con un cameraserver en 
Android y, sorpresa, wireshark soporta decodificar tr�fico ICE (aunque 
no la carga o payload). Vi entonces que hac�a un "Request 
cameraA.ice_isA()" con carga "::jderobot::Camera".

Para asegurarme puse un Log.e(TAG, cameraA.ice_id()); para loguear en el 
logcat el valor de mi interfaz y, como era de esperar, sal�a:

E/java.lang.Class(15211): ::jderobot::ImageProvider

Ahora ya sale:

E/java.lang.Class(12342): ::jderobot::Camera

Hasta ayer no me di cuenta de este detalle (de la carga), as� que ayer 
implement� la interfaz correcta y me empez� a dar otro problema la 
aplicaci�n:

En el PreviewCallback hac�a la siguiente llamada para atender las 
peticiones "pendientes":
                     while ((actual = CameraI._jobs.poll()) != null) {
                         actual.execute();
                     }

Al ejecutar el c�digo me sal�a:

FATAL EXCEPTION: main
android.os.NetworkOnMainThreadException
     at 
android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1108)
     at libcore.io.BlockGuardOs.sendto(BlockGuardOs.java:168)
     at libcore.io.IoBridge.sendto(IoBridge.java:490)
     at java.nio.SocketChannelImpl.writeImpl(SocketChannelImpl.java:369)
     at java.nio.SocketChannelImpl.write(SocketChannelImpl.java:327)
     at IceInternal.TcpTransceiver.write(TcpTransceiver.java:108)
     at Ice.ConnectionI.sendMessage(ConnectionI.java:2064)
     at Ice.ConnectionI.sendResponse(ConnectionI.java:801)
     at IceInternal.IncomingAsync.__response(IncomingAsync.java:133)
     at 
jderobot._AMD_ImageProvider_getImageData.ice_response(_AMD_ImageProvider_getImageData.java:46)
     at 
com.linaresdigital.android.androidcameraserver.CameraI$Job.execute(CameraI.java:108)
     at 
com.linaresdigital.android.androidcameraserver.MainActivity$2.onPreviewFrame(MainActivity.java:153)
... etc...

Total, que busco por Internet y encuentro que el problema est� en los 
"nuevos" Android. Con mi viejo Acer Liquid A1 y su Android 2.1 no me 
ocurr�a:
http://developer.android.com/reference/android/os/StrictMode.html

Lo soluciono sacando el env�o de datos fuera del UI thread:

                     new Thread(new Runnable() {
                         public void run() {
                             CameraI.Job actual;
                             while ((actual = CameraI._jobs.poll()) != 
null) {
                                 actual.execute();
                             }
                         }
                     }).start();


Listo, ya tengo el AndroidCameraServer enviando "basura" si le digo que 
env�a RGB. Lo cambio a YUY2 y YCRCB y empieza a ser "algo" visible 
(mosaicos de colores, etc).

Implemento en colorspaces el espacio de color NV21 que usa Android por 
defecto (mejor que consumir CPU y bater�a en el m�vil y ancho de banda 
en la red WiFi convirtiendo el fotograma a RGB en el propio m�vil).

Primer intento: fallido. Trato de usar los conversores est�ndar de 
OpenCV CV_YUV420sp2RGB (casi, casi) y CV_YUV420RGB_NV21 que no est� 
implementado en la versi�n de OpenCV de Ubuntu 12.04, por lo que decido 
implementar un conversor yo mismo (tras varias pruebas/error lo he 
conseguido).

Subir� al svn, en cuanto limpie el c�digo, todas las modificaciones (el 
componente androidcameraserver y la librer�a colorspaces actualizada).

Ya podemos usar un m�vil Android como c�mara remota :)

Un saludo a todos.


More information about the Jde-developers mailing list