summaryrefslogtreecommitdiff
authorjiyu.yang <jiyu.yang@amlogic.com>2013-01-17 02:47:16 (GMT)
committer jiyu.yang <jiyu.yang@amlogic.com>2013-01-17 02:48:54 (GMT)
commit3868d00113961c65c73c65ba6340376a09e9bd6a (patch)
tree678a9067ccbe6af449277fd33ad8f4cde7a67b1e
parenta76bcec2663788c6dd89dbe64f51ca65295192b3 (diff)
downloadcamera-3868d00113961c65c73c65ba6340376a09e9bd6a.zip
camera-3868d00113961c65c73c65ba6340376a09e9bd6a.tar.gz
camera-3868d00113961c65c73c65ba6340376a09e9bd6a.tar.bz2
use extraSmallRGB24 to produce thumbnail
Diffstat
-rwxr-xr-xEncoder_libjpeg.cpp41
-rwxr-xr-xinc/V4LCameraAdapter/V4LCameraAdapter.h8
2 files changed, 45 insertions, 4 deletions
diff --git a/Encoder_libjpeg.cpp b/Encoder_libjpeg.cpp
index e9107ea..58cc936 100755
--- a/Encoder_libjpeg.cpp
+++ b/Encoder_libjpeg.cpp
@@ -226,6 +226,36 @@ static void yuyv_to_yuv(uint8_t* dst, uint32_t* src, int width) {
}
}
+int extraSmallImg(unsigned char* SrcImg,int SrcW,int SrcH,
+ unsigned char* DstImg,int DstW,int DstH)
+{
+ int skipW = SrcW/DstW;
+ int skipH = SrcH/DstH;
+
+ unsigned char* dst = DstImg;
+ unsigned char* srcrow = SrcImg;
+ unsigned char* srcrowidx = srcrow;
+
+ int i = 0,j = 0;
+ for(;i<DstH;i++)
+ {
+ //LOGD("srcrow = %d,dst = %d",srcrow-SrcImg,dst-DstImg);
+ for(j = 0;j<DstW;j++)
+ {
+ dst[0] = srcrowidx[0];
+ dst[1] = srcrowidx[1];
+ dst[2] = srcrowidx[2];
+ dst+=3;
+ srcrowidx+=3*skipW;
+ }
+ // LOGD("srcrowidx end = %d",srcrowidx-SrcImg);
+
+ srcrow += skipH*SrcW*3;
+ srcrowidx = srcrow;
+ }
+
+ return 1;
+}
static void resize_nv12(Encoder_libjpeg::params* params, uint8_t* dst_buffer) {
structConvImage o_img_ptr, i_img_ptr;
@@ -446,6 +476,17 @@ size_t Encoder_libjpeg::encode(params* input) {
} else if (strcmp(input->format, CameraProperties::PIXEL_FORMAT_RGB24) == 0) {
informat = Encoder_libjpeg::RGB24;
bpp = 1;
+ if ((in_width != out_width) || (in_height != out_height)) {
+ resize_src = (uint8_t*) malloc(input->dst_size);
+ if(NULL != resize_src){
+ extraSmallImg(input->src, in_width, in_height,
+ resize_src, out_width, out_height);
+ src = resize_src;
+ }else{
+ CAMHAL_LOGDA("failed to malloc space to extra thumbnail\n");
+ goto exit;
+ }
+ }
} else if ((in_width != out_width) || (in_height != out_height)) {
CAMHAL_LOGEB("Encoder: resizing is not supported for this format: %s", input->format);
goto exit;
diff --git a/inc/V4LCameraAdapter/V4LCameraAdapter.h b/inc/V4LCameraAdapter/V4LCameraAdapter.h
index e267dfa..e701ef0 100755
--- a/inc/V4LCameraAdapter/V4LCameraAdapter.h
+++ b/inc/V4LCameraAdapter/V4LCameraAdapter.h
@@ -30,12 +30,12 @@ namespace android {
//#define AMLOGIC_UVC_320X240
#define DEFAULT_PREVIEW_PIXEL_FORMAT V4L2_PIX_FMT_NV21
//#define DEFAULT_PREVIEW_PIXEL_FORMAT V4L2_PIX_FMT_YUYV
-//#define DEFAULT_IMAGE_CAPTURE_PIXEL_FORMAT V4L2_PIX_FMT_RGB24
-#define DEFAULT_IMAGE_CAPTURE_PIXEL_FORMAT V4L2_PIX_FMT_NV21
+#define DEFAULT_IMAGE_CAPTURE_PIXEL_FORMAT V4L2_PIX_FMT_RGB24
+//#define DEFAULT_IMAGE_CAPTURE_PIXEL_FORMAT V4L2_PIX_FMT_NV21
#else
#define DEFAULT_PREVIEW_PIXEL_FORMAT V4L2_PIX_FMT_NV21
-//#define DEFAULT_IMAGE_CAPTURE_PIXEL_FORMAT V4L2_PIX_FMT_RGB24
-#define DEFAULT_IMAGE_CAPTURE_PIXEL_FORMAT V4L2_PIX_FMT_NV21
+#define DEFAULT_IMAGE_CAPTURE_PIXEL_FORMAT V4L2_PIX_FMT_RGB24
+//#define DEFAULT_IMAGE_CAPTURE_PIXEL_FORMAT V4L2_PIX_FMT_NV21
#endif
#define NB_BUFFER 6