summaryrefslogtreecommitdiff
authorbrian.zhu <brian.zhu@amlogic.com>2012-01-20 09:37:18 (GMT)
committer brian.zhu <brian.zhu@amlogic.com>2012-01-20 09:37:18 (GMT)
commitbaf6bb806d873aeb2451042e013a1a936620df90 (patch)
treedad413104d74470ff26506ad9df0471a47f6af96
parentef9412a46f44322c1df22d1bd11f79501c627a1c (diff)
downloadcamera-baf6bb806d873aeb2451042e013a1a936620df90.zip
camera-baf6bb806d873aeb2451042e013a1a936620df90.tar.gz
camera-baf6bb806d873aeb2451042e013a1a936620df90.tar.bz2
fix bug for USB camera
Diffstat
-rwxr-xr-xAppCallbackNotifier.cpp4
-rwxr-xr-xV4LCameraAdapter/V4LCameraAdapter.cpp17
2 files changed, 15 insertions, 6 deletions
diff --git a/AppCallbackNotifier.cpp b/AppCallbackNotifier.cpp
index 1b59711..0adfe4e 100755
--- a/AppCallbackNotifier.cpp
+++ b/AppCallbackNotifier.cpp
@@ -927,11 +927,11 @@ void AppCallbackNotifier::notifyFrame()
}
if (tn_jpeg) {
- tn_jpeg->dst = (uint8_t*) malloc(frame->mLength);
+ tn_jpeg->dst = (uint8_t*) malloc(tn_width*tn_height*3);
if(tn_jpeg->dst){
tn_jpeg->src = (uint8_t*) frame->mBuffer;
tn_jpeg->src_size = frame->mLength;
- tn_jpeg->dst_size = frame->mLength;
+ tn_jpeg->dst_size = tn_width*tn_height*3;
tn_jpeg->quality = tn_quality;
tn_jpeg->in_width = frame->mWidth;
tn_jpeg->in_height = frame->mHeight;
diff --git a/V4LCameraAdapter/V4LCameraAdapter.cpp b/V4LCameraAdapter/V4LCameraAdapter.cpp
index 00cd463..235ec26 100755
--- a/V4LCameraAdapter/V4LCameraAdapter.cpp
+++ b/V4LCameraAdapter/V4LCameraAdapter.cpp
@@ -1048,7 +1048,12 @@ int V4LCameraAdapter::pictureThread()
if(DEFAULT_IMAGE_CAPTURE_PIXEL_FORMAT == V4L2_PIX_FMT_RGB24){ // rgb24
frame.mLength = width*height*3;
frame.mQuirks = CameraFrame::ENCODE_RAW_RGB24_TO_JPEG | CameraFrame::HAS_EXIF_DATA;
- memcpy(dest, src, mVideoInfo->buf.length);
+#ifdef AMLOGIC_USB_CAMERA_SUPPORT
+ //convert yuyv to rgb24
+ yuyv422_to_rgb24(src,dest,width,height);
+#else
+ memcpy(dest,src,mVideoInfo->buf.length);
+#endif
}else if(DEFAULT_IMAGE_CAPTURE_PIXEL_FORMAT == V4L2_PIX_FMT_YUYV){ // 422I
frame.mLength = width*height*2;
frame.mQuirks = CameraFrame::ENCODE_RAW_YUV422I_TO_JPEG | CameraFrame::HAS_EXIF_DATA;
@@ -1060,7 +1065,7 @@ int V4LCameraAdapter::pictureThread()
//convert yuyv to nv21
yuyv422_to_nv21(src,dest,width,height);
#else
- memcpy(dest,src,frame.mLength);
+ memcpy(dest,src,mVideoInfo->buf.length);
#endif
}else{ //default case
frame.mLength = width*height*3;
@@ -1389,7 +1394,7 @@ extern "C" void loadCaps(int camera_id, CameraProperties::Properties* params) {
params->set(CameraProperties::SUPPORTED_PREVIEW_SIZES, "320x240,176x144,160x120");
params->set(CameraProperties::PREVIEW_SIZE,"320x240");
#else
- params->set(CameraProperties::SUPPORTED_PREVIEW_SIZES, "176x144,352x288,640x480");
+ params->set(CameraProperties::SUPPORTED_PREVIEW_SIZES, "640x480,352x288,176x144");
params->set(CameraProperties::PREVIEW_SIZE,"640x480");
#endif
}
@@ -1404,7 +1409,11 @@ extern "C" void loadCaps(int camera_id, CameraProperties::Properties* params) {
params->set(CameraProperties::JPEG_THUMBNAIL_QUALITY, 90);
//get & set picture size
- if (!getValidFrameSize(camera_id, DEFAULT_IMAGE_CAPTURE_PIXEL_FORMAT, sizes)) {
+ uint32_t picture_format = DEFAULT_IMAGE_CAPTURE_PIXEL_FORMAT;
+#ifdef AMLOGIC_USB_CAMERA_SUPPORT
+ picture_format = V4L2_PIX_FMT_YUYV;
+#endif
+ if (!getValidFrameSize(camera_id, picture_format, sizes)) {
int len = strlen(sizes);
unsigned int supported_w = 0, supported_h = 0,w = 0,h = 0;
if(len>1){