Hi guys, Thanks for all the inputs. I converted my YUYV frames to YUV420SP right before passing it to the preview callback and it worked! I am now able to use the usb camera for skype video calls. I just find it useless for google to put other pixel formats in the CameraService.cpp if they're only going to support YUV420SP in the first place.
Now that I have usb camera support, I'm faced with another challenge. The device that I'm developing for has a built-in camera and uses the samsung camera interface unit (cpu is Samsung S5PV210). Is it possible for the CameraService to support two HAL implementations? One for the usb camera and one for the built-in camera? On Thu, May 3, 2012 at 10:56 PM, Vishal Bhoj <[email protected]> wrote: > Hi Nikko, > > The color conversion needs to be done before passing the frames through > the callback(CAMERA_MSG_PREVIEW_FRAME) as the yuv420sp is the default color > format supported by android application while accessing preview frames from > application layer. > > Have a look at lines from 209-215 in > > > http://android.git.linaro.org/gitweb?p=hardware/linaro/common.git;a=blob;f=libcamera/CameraHardware.cpp;h=8c90fa4a591b2c0a43d0cbe42f656937785708ee;hb=1ad0e928edf6f046572b3f32eb5ee23d8d7f3f79 > > here is the camera hal which I have tested with skype,linphone,google > hangouts kind of applications,you can look at it as reference. > http://android.git.linaro.org/gitweb?p=hardware/linaro/common.git;a=summary > > Regards, > Vishal > > On 2 May 2012 08:25, Nikko Torcita <[email protected]> wrote: > >> Hi all, >> >> I've been trying to support generic UVC cameras on android and have been >> successful so far with getting the native camera app to display preview >> images until I tested my code with skype video call and got stuck with a >> buffer memory problem. To break it down, >> >> 1. I'm using the yuv422i-yuyv format since it's the only pixel format >> supported by the uvc camera (Vimicro chipset) that i'm testing. I have also >> set CameraService::Client::registerPreviewBuffers() to support >> HAL_PIXEL_FORMAT_YCbCr_422_I in CameraService.cpp. >> >> 2. I set the size of my preview heap to 'PreviewHeap = width x height x >> 2' since YUV422 takes up 4 bytes per 2 pixels. >> >> From logcat, I get this: >> >> D/CameraHardware(28343): PREVIEW SIZE: w=320 h=240 framerate=30 >> E/CameraHardware(28343): virtual android::status_t >> android::CameraHardware::startPreview() : >> D/V4L2Camera(28343): USB Camera now streaming... >> D/libEGL (28734): loaded /system/lib/egl/libGLES_android.so >> D/libEGL (28734): loaded /vendor/lib/egl/libEGL_POWERVR_SGX540_120.so >> D/libEGL (28734): loaded >> /vendor/lib/egl/libGLESv1_CM_POWERVR_SGX540_120.so >> D/libEGL (28734): loaded /vendor/lib/egl/libGLESv2_POWERVR_SGX540_120.so >> *E/Camera-JNI(28734): Manually set buffer was too small! Expected 153600 >> bytes, but got 115201!* >> *E/Camera-JNI(28734): Manually set buffer was too small! Expected 153600 >> bytes, but got 115201!* >> *E/Camera-JNI(28734): Manually set buffer was too small! Expected 153600 >> bytes, but got 115201!* >> W/com.skype.je(28734): not showing >> >> I traced it down to the camera jni and it seems like somewhere above the >> HAL, a buffer was set to accommodate only up to 'width x height x 1.5'. >> Hence, 320x240x1.5 = 115200 instead of 320x240x2 = 153600. Could it be that >> the skype application only provided support for NV21 (YUV420) which takes >> up 'width x height x 1.5' bytes of data? >> >> Thank you in advance. >> >> Nikko Torcita >> >> -- >> unsubscribe: [email protected] >> website: http://groups.google.com/group/android-porting >> > > -- unsubscribe: [email protected] website: http://groups.google.com/group/android-porting
