summaryrefslogtreecommitdiff
authorsky.zhou <sky.zhou@droidsh.(none)>2011-03-23 14:15:04 (GMT)
committer sky.zhou <sky.zhou@droidsh.(none)>2011-03-23 14:15:04 (GMT)
commit0a60f7b6ff9951b44f3e29f6d3d720928cc7ce5c (patch)
tree06b0d245c693c11b7f1c4e336be2eaf4581ab75b
parentcd778da7e470d8d06e5350ec7e4ee06033318b3b (diff)
downloadcamera-0a60f7b6ff9951b44f3e29f6d3d720928cc7ce5c.zip
camera-0a60f7b6ff9951b44f3e29f6d3d720928cc7ce5c.tar.gz
camera-0a60f7b6ff9951b44f3e29f6d3d720928cc7ce5c.tar.bz2
move parameter setting to device folder
Diffstat
-rwxr-xr-xAndroid.mk13
-rwxr-xr-xFakeCamera/FakeCamera.cpp8
-rwxr-xr-xOpCameraHardware.c131
-rwxr-xr-xV4L2/CameraSetting.cpp90
-rwxr-xr-xV4L2/CameraSetting.h21
-rwxr-xr-xV4L2/V4L2Camera.cpp240
-rwxr-xr-xV4L2/V4L2Camera.h14
-rwxr-xr-xamlogic_camera_para.h148
8 files changed, 158 insertions, 507 deletions
diff --git a/Android.mk b/Android.mk
index 395f5b6..c8c3f5d 100755
--- a/Android.mk
+++ b/Android.mk
@@ -18,13 +18,18 @@ endif
LOCAL_C_INCLUDES += $ANDROID_BUILD_TOP/kernel/include/
-#jpeg encode
+#USE V4L2 Camera
LOCAL_SRC_FILES += jpegenc/amljpeg_enc.c
+LOCAL_SRC_FILES += AmlogicCameraHardware.cpp V4L2/V4L2Camera.cpp
-#LOCAL_SRC_FILES += AmlogicCameraHardware.cpp FakeCamera/FakeCamera.cpp
-LOCAL_SRC_FILES += AmlogicCameraHardware.cpp V4L2/V4L2Camera.cpp FakeCamera/FakeCamera.cpp OpCameraHardware.c
-
+ifeq ($(BUILD_CUSTOMIZE_CAMERA_SETTING),true)
+LOCAL_STATIC_LIBRARIES := libcamera_customize
+else
+LOCAL_SRC_FILES += V4L2/CameraSetting.cpp
+endif
+#USE FAKECAMERA
+#LOCAL_SRC_FILES += AmlogicCameraHardware.cpp FakeCamera/FakeCamera.cpp
include $(BUILD_SHARED_LIBRARY)
diff --git a/FakeCamera/FakeCamera.cpp b/FakeCamera/FakeCamera.cpp
index 8fb3c7b..024fe3e 100755
--- a/FakeCamera/FakeCamera.cpp
+++ b/FakeCamera/FakeCamera.cpp
@@ -615,7 +615,7 @@ void FakeCamera::dump(int fd) const
*/
}
-#if 0
+
extern CameraInterface* HAL_GetCameraInterface(int Id)
{
if(Id == 0)
@@ -625,12 +625,6 @@ extern CameraInterface* HAL_GetCameraInterface(int Id)
else
return new fakecamerainter(320,240,1);
}
-#else
-extern CameraInterface* HAL_GetFakeCamera()
-{
- return new fakecamerainter(320,240,1);
-}
-#endif
}; // namespace android
diff --git a/OpCameraHardware.c b/OpCameraHardware.c
deleted file mode 100755
index 18f964d..0000000
--- a/OpCameraHardware.c
+++ b/dev/null
@@ -1,131 +0,0 @@
-#define LOG_NDEBUG 0
-//#define NDEBUG 0
-#define LOG_TAG "OpCameraHardware"
-#include <utils/Log.h>
-#include "amlogic_camera_para.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/ioctl.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <string.h>
-#include <errno.h>
-#include <cutils/properties.h>
-#include <linux/videodev2.h>
-
-int set_white_balance(int camera_fd,const char *swb)
-{
- int ret = 0;
- struct v4l2_control ctl;
- if(camera_fd<0)
- return -1;
-
- ctl.id = V4L2_CID_DO_WHITE_BALANCE;
-
- if(strcasecmp(swb,"auto")==0)
- ctl.value=CAM_WB_AUTO;
- else if(strcasecmp(swb,"daylight")==0)
- ctl.value=CAM_WB_DAYLIGHT;
- else if(strcasecmp(swb,"incandescent")==0)
- ctl.value=CAM_WB_INCANDESCENCE;
- else if(strcasecmp(swb,"fluorescent")==0)
- ctl.value=CAM_WB_FLUORESCENT;
-
- if(ioctl(camera_fd, VIDIOC_S_CTRL, &ctl)<0)
- {
- ret = -1;
- LOGV("AMLOGIC CAMERA SetParametersToDriver fail !! ");
- }
- return ret ;
-}
-
-int SetExposure(int camera_fd,const char *sbn)
-{
- int ret = 0;
- struct v4l2_control ctl;
- if(camera_fd<0)
- return -1;
-
- ctl.id = V4L2_CID_EXPOSURE;
-
- if(strcasecmp(sbn,"4")==0)
- ctl.value=EXPOSURE_P4_STEP;
- else if(strcasecmp(sbn,"3")==0)
- ctl.value=EXPOSURE_P3_STEP;
- else if(strcasecmp(sbn,"2")==0)
- ctl.value=EXPOSURE_P2_STEP;
- else if(strcasecmp(sbn,"1")==0)
- ctl.value=EXPOSURE_P1_STEP;
- else if(strcasecmp(sbn,"0")==0)
- ctl.value=EXPOSURE_0_STEP;
- else if(strcasecmp(sbn,"-1")==0)
- ctl.value=EXPOSURE_N1_STEP;
- else if(strcasecmp(sbn,"-2")==0)
- ctl.value=EXPOSURE_N2_STEP;
- else if(strcasecmp(sbn,"-3")==0)
- ctl.value=EXPOSURE_N3_STEP;
- else if(strcasecmp(sbn,"-4")==0)
- ctl.value=EXPOSURE_N4_STEP;
-
- if(ioctl(camera_fd, VIDIOC_S_CTRL, &ctl)<0)
- {
- ret = -1;
- LOGV("AMLOGIC CAMERA SetParametersToDriver fail !! ");
- }
-
- return ret ;
-}
-
-
-int set_effect(int camera_fd,const char *sef)
-{
- int ret = 0;
- struct v4l2_control ctl;
- if(camera_fd<0)
- return -1;
-
- ctl.id = V4L2_CID_COLORFX;
-
- if(strcasecmp(sef,"none")==0)
- ctl.value=CAM_EFFECT_ENC_NORMAL;
- else if(strcasecmp(sef,"negative")==0)
- ctl.value=CAM_EFFECT_ENC_COLORINV;
- else if(strcasecmp(sef,"sepia")==0)
- ctl.value=CAM_EFFECT_ENC_SEPIA;
-
- if(ioctl(camera_fd, VIDIOC_S_CTRL, &ctl)<0)
- {
- ret = -1;
- LOGV("AMLOGIC CAMERA SetParametersToDriver fail !! ");
- }
-
- return ret ;
-}
-
-int set_night_mode(int camera_fd,const char *snm)
-{
- int ret = 0;
- struct v4l2_control ctl;
- if(camera_fd<0)
- return -1;
-
- if(strcasecmp(snm,"auto")==0)
- ctl.value=CAM_NM_AUTO;
- else if(strcasecmp(snm,"night")==0)
- ctl.value=CAM_NM_ENABLE;
-
- ctl.id = V4L2_CID_DO_WHITE_BALANCE;
-
- if(ioctl(camera_fd, VIDIOC_S_CTRL, &ctl)<0)
- {
- ret = -1;
- LOGV("AMLOGIC CAMERA SetParametersToDriver fail !! ");
- }
- return ret ;
-}
-
-
-
diff --git a/V4L2/CameraSetting.cpp b/V4L2/CameraSetting.cpp
new file mode 100755
index 0000000..4501596
--- a/dev/null
+++ b/V4L2/CameraSetting.cpp
@@ -0,0 +1,90 @@
+
+#include <camera/CameraHardwareInterface.h>
+#include "CameraSetting.h"
+
+namespace android {
+status_t CameraSetting::InitParameters(CameraParameters& pParameters)
+{
+ LOGE("status_t InitParameters(CameraParameters& pParameter)");
+ //set the limited & the default parameter
+//==========================must set parameter for CTS will check them
+ pParameters.set(CameraParameters::KEY_SUPPORTED_PREVIEW_FORMATS,CameraParameters::PIXEL_FORMAT_YUV420SP);
+ pParameters.setPreviewFormat(CameraParameters::PIXEL_FORMAT_YUV420SP);
+
+ pParameters.set(CameraParameters::KEY_SUPPORTED_PICTURE_FORMATS, CameraParameters::PIXEL_FORMAT_JPEG);
+ pParameters.setPictureFormat(CameraParameters::PIXEL_FORMAT_JPEG);
+
+ pParameters.set(CameraParameters::KEY_SUPPORTED_PREVIEW_FRAME_RATES,"15,20");
+ pParameters.setPreviewFrameRate(15);
+
+ pParameters.set(CameraParameters::KEY_SUPPORTED_PREVIEW_SIZES,"640x480");
+ pParameters.setPreviewSize(640, 480);
+
+ pParameters.set(CameraParameters::KEY_SUPPORTED_PICTURE_SIZES, "800x600");
+ pParameters.setPictureSize(800,600);
+
+ //must have >2 sizes and contain "0x0"
+ pParameters.set(CameraParameters::KEY_SUPPORTED_JPEG_THUMBNAIL_SIZES, "512x384,320x240,0x0");
+
+
+ pParameters.set(CameraParameters::KEY_SUPPORTED_FOCUS_MODES,CameraParameters::FOCUS_MODE_AUTO);
+ pParameters.set(CameraParameters::KEY_FOCUS_MODE,CameraParameters::FOCUS_MODE_AUTO);
+
+ pParameters.set(CameraParameters::KEY_FOCAL_LENGTH,"4.31");
+
+ pParameters.set(CameraParameters::KEY_HORIZONTAL_VIEW_ANGLE,"54.8");
+ pParameters.set(CameraParameters::KEY_VERTICAL_VIEW_ANGLE,"42.5");
+
+//==========================
+
+ pParameters.set(CameraParameters::KEY_SUPPORTED_WHITE_BALANCE,"auto,daylight,incandescent,fluorescent");
+ pParameters.set(CameraParameters::KEY_WHITE_BALANCE,"auto");
+
+ pParameters.set(CameraParameters::KEY_SUPPORTED_EFFECTS,"none,negative,sepia");
+ pParameters.set(CameraParameters::KEY_EFFECT,"none");
+
+ //pParameters.set(CameraParameters::KEY_SUPPORTED_FLASH_MODES,"auto,on,off,torch");
+ //pParameters.set(CameraParameters::KEY_FLASH_MODE,"auto");
+
+ //pParameters.set(CameraParameters::KEY_SUPPORTED_SCENE_MODES,"auto,night,snow");
+ //pParameters.set(CameraParameters::KEY_SCENE_MODE,"auto");
+
+ pParameters.set(CameraParameters::KEY_MAX_EXPOSURE_COMPENSATION,4);
+ pParameters.set(CameraParameters::KEY_MIN_EXPOSURE_COMPENSATION,-4);
+ pParameters.set(CameraParameters::KEY_EXPOSURE_COMPENSATION_STEP,1);
+ pParameters.set(CameraParameters::KEY_EXPOSURE_COMPENSATION,0);
+
+#if 1
+ pParameters.set(CameraParameters::KEY_ZOOM_SUPPORTED,CameraParameters::TRUE);
+ pParameters.set(CameraParameters::KEY_SMOOTH_ZOOM_SUPPORTED,1);
+
+ pParameters.set(CameraParameters::KEY_ZOOM_RATIOS,"100,120,140,160,180,200,220,280,300");
+ pParameters.set(CameraParameters::KEY_MAX_ZOOM,8); //think the zoom ratios as a array, the max zoom is the max index
+ pParameters.set(CameraParameters::KEY_ZOOM,0);//default should be 0
+#endif
+
+ return NO_ERROR;
+}
+
+
+//write parameter to v4l2 driver,
+//check parameter if valid, if un-valid first should correct it ,and return the INVALID_OPERTIONA
+status_t CameraSetting::SetParameters(CameraParameters& pParameters)
+{
+ LOGE("status_t InitParameters(CameraParameters& pParameters)");
+ status_t rtn = NO_ERROR;
+ //check zoom value
+ int zoom = pParameters.getInt(CameraParameters::KEY_ZOOM);
+ int maxzoom = pParameters.getInt(CameraParameters::KEY_MAX_ZOOM);
+ if((zoom > maxzoom) || (zoom < 0))
+ {
+ rtn = INVALID_OPERATION;
+ pParameters.set(CameraParameters::KEY_ZOOM, maxzoom);
+ }
+
+ m_hParameter = pParameters;
+
+ return rtn;
+}
+
+} \ No newline at end of file
diff --git a/V4L2/CameraSetting.h b/V4L2/CameraSetting.h
new file mode 100755
index 0000000..8097520
--- a/dev/null
+++ b/V4L2/CameraSetting.h
@@ -0,0 +1,21 @@
+#include <camera/CameraParameters.h>
+
+namespace android {
+
+class CameraSetting
+{
+ public:
+ CameraSetting(){m_pDevName = NULL;m_iDevFd = -1;m_iCamId = -1;}
+ ~CameraSetting(){if(m_pDevName) delete m_pDevName;}
+ int m_iDevFd;
+ int m_iCamId;
+ char* m_pDevName;
+ CameraParameters m_hParameter;
+
+ status_t InitParameters(CameraParameters& pParameters);
+ status_t SetParameters(CameraParameters& pParameters);
+
+};
+
+
+} \ No newline at end of file
diff --git a/V4L2/V4L2Camera.cpp b/V4L2/V4L2Camera.cpp
index b383aa2..30667d6 100755
--- a/V4L2/V4L2Camera.cpp
+++ b/V4L2/V4L2Camera.cpp
@@ -19,41 +19,26 @@
#include <cutils/properties.h>
-extern "C" {
-int set_white_balance(int camera_fd,const char *swb);
-int SetExposure(int camera_fd,const char *sbn);
-int set_effect(int camera_fd,const char *sef);
-int encode_jpeg(jpeg_enc_t* enc) ;
-
-}
namespace android {
-static void dump_to_file(const char *fname,uint8_t *buf, uint32_t size);
-
-
#define V4L2_PREVIEW_BUFF_NUM (2)
#define V4L2_TAKEPIC_BUFF_NUM (1)
-#define V4L2_JPEG_QUALITY (90)
-V4L2Camera::V4L2Camera(char* devname)
+V4L2Camera::V4L2Camera(char* devname,int camid)
{
int namelen = strlen(devname)+1;
- m_pDevName = new char[namelen];
- strcpy(m_pDevName,devname);
- m_iDevFd = -1;
+ m_hset.m_pDevName = new char[namelen];
+ strcpy(m_hset.m_pDevName,devname);
+ m_hset.m_iCamId = camid;
m_V4L2BufNum = 0;
pV4L2Frames = NULL;
pV4L2FrameSize = NULL;
m_iPicIdx = -1;
- m_v4l2_qulity = 90;
-}
-V4L2Camera::~V4L2Camera()
-{
- delete m_pDevName;
}
+
static int opengt2005Flag=0;
status_t V4L2Camera::Open()
@@ -65,11 +50,11 @@ char camera_b09[PROPERTY_VALUE_MAX];
if(strcmp(camera_b09,"1")==0){
LOGD("*****do camera_b09 special %s\n",camera_b09);
- if(strcasecmp(m_pDevName,"/dev/video0")==0)
+ if(strcasecmp(m_hset.m_pDevName,"/dev/video0")==0)
{
opengt2005Flag=1;
}
- if((strcasecmp(m_pDevName,"/dev/video1")==0)&&(!opengt2005Flag)&&(m_iDevFd == -1))
+ if((strcasecmp(m_hset.m_pDevName,"/dev/video1")==0)&&(!opengt2005Flag)&&(m_hset.m_iDevFd == -1))
{
temp_id = open("/dev/video0", O_RDWR);
if (temp_id != -1)
@@ -81,17 +66,17 @@ char camera_b09[PROPERTY_VALUE_MAX];
}
}
}
- if(m_iDevFd == -1)
+ if(m_hset.m_iDevFd == -1)
{
- m_iDevFd = open(m_pDevName, O_RDWR);
- if (m_iDevFd != -1)
+ m_hset.m_iDevFd = open(m_hset.m_pDevName, O_RDWR);
+ if (m_hset.m_iDevFd != -1)
{
//LOGD("open %s success %d \n", m_pDevName,m_iDevFd);
return NO_ERROR;
}
else
{
- LOGD("open %s fail\n", m_pDevName);
+ LOGD("open %s fail\n", m_hset.m_pDevName);
return UNKNOWN_ERROR;
}
}
@@ -100,153 +85,30 @@ char camera_b09[PROPERTY_VALUE_MAX];
}
status_t V4L2Camera::Close()
{
- if(m_iDevFd != -1)
+ if(m_hset.m_iDevFd != -1)
{
- close(m_iDevFd);
- m_iDevFd = -1;
+ close(m_hset.m_iDevFd);
+ m_hset.m_iDevFd = -1;
}
return NO_ERROR;
}
+
status_t V4L2Camera::InitParameters(CameraParameters& pParameters)
{
- //set the limited & the default parameter
-//==========================must set parameter for CTS will check them
- pParameters.set(CameraParameters::KEY_SUPPORTED_PREVIEW_FORMATS,CameraParameters::PIXEL_FORMAT_YUV420SP);
- pParameters.setPreviewFormat(CameraParameters::PIXEL_FORMAT_YUV420SP);
-
- pParameters.set(CameraParameters::KEY_SUPPORTED_PICTURE_FORMATS, CameraParameters::PIXEL_FORMAT_JPEG);
- pParameters.setPictureFormat(CameraParameters::PIXEL_FORMAT_JPEG);
-
- pParameters.set(CameraParameters::KEY_SUPPORTED_PREVIEW_FRAME_RATES,"15,20");
- pParameters.setPreviewFrameRate(15);
-
- pParameters.set(CameraParameters::KEY_SUPPORTED_PREVIEW_SIZES,"640x480");
- pParameters.setPreviewSize(640, 480);
-
- pParameters.set(CameraParameters::KEY_SUPPORTED_PICTURE_SIZES, "800x600");
- pParameters.setPictureSize(800,600);
-
- //must have >2 sizes and contain "0x0"
- pParameters.set(CameraParameters::KEY_SUPPORTED_JPEG_THUMBNAIL_SIZES, "512x384,320x240,0x0");
-
-
- pParameters.set(CameraParameters::KEY_SUPPORTED_FOCUS_MODES,CameraParameters::FOCUS_MODE_AUTO);
- pParameters.set(CameraParameters::KEY_FOCUS_MODE,CameraParameters::FOCUS_MODE_AUTO);
-
- pParameters.set(CameraParameters::KEY_FOCAL_LENGTH,"4.31");
-
- pParameters.set(CameraParameters::KEY_HORIZONTAL_VIEW_ANGLE,"54.8");
- pParameters.set(CameraParameters::KEY_VERTICAL_VIEW_ANGLE,"42.5");
-
-//==========================
-
- pParameters.set(CameraParameters::KEY_SUPPORTED_WHITE_BALANCE,"auto,daylight,incandescent,fluorescent");
- pParameters.set(CameraParameters::KEY_WHITE_BALANCE,"auto");
-
- pParameters.set(CameraParameters::KEY_SUPPORTED_EFFECTS,"none,negative,sepia");
- pParameters.set(CameraParameters::KEY_EFFECT,"none");
-
- //pParameters.set(CameraParameters::KEY_SUPPORTED_FLASH_MODES,"auto,on,off,torch");
- //pParameters.set(CameraParameters::KEY_FLASH_MODE,"auto");
-
- //pParameters.set(CameraParameters::KEY_SUPPORTED_SCENE_MODES,"auto,night,snow");
- //pParameters.set(CameraParameters::KEY_SCENE_MODE,"auto");
-
- pParameters.set(CameraParameters::KEY_MAX_EXPOSURE_COMPENSATION,4);
- pParameters.set(CameraParameters::KEY_MIN_EXPOSURE_COMPENSATION,-4);
- pParameters.set(CameraParameters::KEY_EXPOSURE_COMPENSATION_STEP,1);
- pParameters.set(CameraParameters::KEY_EXPOSURE_COMPENSATION,0);
-
-#if 1
- pParameters.set(CameraParameters::KEY_ZOOM_SUPPORTED,CameraParameters::TRUE);
- pParameters.set(CameraParameters::KEY_SMOOTH_ZOOM_SUPPORTED,1);
-
- pParameters.set(CameraParameters::KEY_ZOOM_RATIOS,"100,120,140,160,180,200,220,280,300");
- pParameters.set(CameraParameters::KEY_MAX_ZOOM,8); //think the zoom ratios as a array, the max zoom is the max index
- pParameters.set(CameraParameters::KEY_ZOOM,0);//default should be 0
-#endif
-
- return NO_ERROR;
+ return m_hset.InitParameters(pParameters);
}
//write parameter to v4l2 driver,
//check parameter if valid, if un-valid first should correct it ,and return the INVALID_OPERTIONA
status_t V4L2Camera::SetParameters(CameraParameters& pParameters)
{
- status_t rtn = NO_ERROR;
- //check zoom value
- int zoom = pParameters.getInt(CameraParameters::KEY_ZOOM);
- int maxzoom = pParameters.getInt(CameraParameters::KEY_MAX_ZOOM);
- if((zoom > maxzoom) || (zoom < 0))
- {
- rtn = INVALID_OPERATION;
- pParameters.set(CameraParameters::KEY_ZOOM, maxzoom);
- }
-
- m_hParameter = pParameters;
- int preview_width, preview_height,preview_FrameRate;
- const char *white_balance=NULL;
- const char *exposure=NULL;
- const char *effect=NULL;
- //const char *night_mode=NULL;
- const char *qulity=NULL;
- int n=0;
-
-
- pParameters.getPreviewSize(&preview_width, &preview_height);
- //LOGV("getPreviewSize %dx%d ",preview_width,preview_height);
-
- //cts need 320*240 size
-#if 0
- if(preview_width >800&&preview_height >600)
- pParameters.setPreviewSize(800, 600);
- else if(preview_width <800&&preview_height <600&&preview_width>640&&preview_height>480)
- pParameters.setPreviewSize(640, 480);
- else if(preview_width <640&&preview_height <480&&preview_width>352&&preview_height>288)
- pParameters.setPreviewSize(352, 288);
- else if(preview_width <352&&preview_height <288&&preview_width>176&&preview_height>144)
- pParameters.setPreviewSize(176, 144);
-#endif
-
- white_balance=pParameters.get(CameraParameters::KEY_WHITE_BALANCE);
- // LOGV("white_balance=%s ",white_balance);
-
-
- exposure=pParameters.get(CameraParameters::KEY_EXPOSURE_COMPENSATION);
- //LOGV("exposure=%s ",exposure);
- effect=pParameters.get(CameraParameters::KEY_EFFECT);
- //LOGV("effect=%s ",effect);
- //night_mode=pParameters.get(CameraParameters::KEY_SCENE_MODE);
- //LOGV("night_mode=%s ",night_mode);
- qulity=pParameters.get(CameraParameters::KEY_JPEG_QUALITY);
- //LOGV("qulity=%s ",qulity);
- if(exposure)
- SetExposure(m_iDevFd,exposure);
- if(white_balance)
- set_white_balance(m_iDevFd,white_balance);
- if(effect)
- set_effect(m_iDevFd,effect);
- //if(night_mode)
- //set_night_mode(night_mode);
- if(qulity){
- if(strcasecmp(qulity,"70")==0)
- m_v4l2_qulity=70;
- else if(strcasecmp(qulity,"80")==0)
- m_v4l2_qulity=80;
- else if(strcasecmp(qulity,"90")==0)
- m_v4l2_qulity=90;
- else
- m_v4l2_qulity=90;
- }
-
- //LOGD("V4L2Camera::SetParameters");
- return rtn;
+ return m_hset.SetParameters(pParameters);
}
status_t V4L2Camera::StartPreview()
{
int w,h;
- m_hParameter.getPreviewSize(&w,&h);
+ m_hset.m_hParameter.getPreviewSize(&w,&h);
if( (NO_ERROR == V4L2_BufferInit(w,h,V4L2_PREVIEW_BUFF_NUM,V4L2_PIX_FMT_NV12))
&& (V4L2_StreamOn() == NO_ERROR))
return NO_ERROR;
@@ -265,7 +127,7 @@ status_t V4L2Camera::StopPreview()
status_t V4L2Camera::TakePicture()
{
int w,h;
- m_hParameter.getPictureSize(&w,&h);
+ m_hset.m_hParameter.getPictureSize(&w,&h);
V4L2_BufferInit(w,h,V4L2_TAKEPIC_BUFF_NUM,V4L2_PIX_FMT_RGB24);
V4L2_StreamOn();
m_iPicIdx = V4L2_BufferDeQue();
@@ -319,17 +181,17 @@ status_t V4L2Camera::GetJpegFrame(uint8_t* framebuf)
if(m_iPicIdx!=-1)
{
jpeg_enc_t enc;
- m_hParameter.getPictureSize(&enc.width,&enc.height);
+ m_hset.m_hParameter.getPictureSize(&enc.width,&enc.height);
+ enc.quality= m_hset.m_hParameter.getInt(CameraParameters::KEY_JPEG_QUALITY);
enc.idata = (unsigned char*)pV4L2Frames[m_iPicIdx];
enc.odata = (unsigned char*)framebuf;
enc.ibuff_size = pV4L2FrameSize[m_iPicIdx];
enc.obuff_size = pV4L2FrameSize[m_iPicIdx];
- enc.quality = m_v4l2_qulity;
GenExif(&(enc.data_in_app1),&(enc.app1_data_size));
encode_jpeg(&enc);
}
else
- LOGD("GetRawFraem index -1");
+ LOGE("GetRawFraem index -1");
return NO_ERROR;
}
@@ -344,7 +206,7 @@ status_t V4L2Camera::V4L2_BufferInit(int Buf_W,int Buf_H,int Buf_Num,int colorfm
hformat.fmt.pix.width = Buf_W;
hformat.fmt.pix.height = Buf_H;
hformat.fmt.pix.pixelformat = colorfmt;
- if (ioctl(m_iDevFd, VIDIOC_S_FMT, &hformat) == -1)
+ if (ioctl(m_hset.m_iDevFd, VIDIOC_S_FMT, &hformat) == -1)
{
LOGE("V4L2_BufferInit VIDIOC_S_FMT fail");
return UNKNOWN_ERROR;
@@ -356,7 +218,7 @@ status_t V4L2Camera::V4L2_BufferInit(int Buf_W,int Buf_H,int Buf_Num,int colorfm
hbuf_req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
hbuf_req.memory = V4L2_MEMORY_MMAP;
hbuf_req.count = Buf_Num; //just set two frames for hal have cache buffer
- if (ioctl(m_iDevFd, VIDIOC_REQBUFS, &hbuf_req) == -1)
+ if (ioctl(m_hset.m_iDevFd, VIDIOC_REQBUFS, &hbuf_req) == -1)
{
LOGE("V4L2_BufferInit VIDIOC_REQBUFS fail");
return UNKNOWN_ERROR;
@@ -381,7 +243,7 @@ status_t V4L2Camera::V4L2_BufferInit(int Buf_W,int Buf_H,int Buf_Num,int colorfm
for(;i<Buf_Num;i++)
{
hbuf_query.index = i;
- if (ioctl(m_iDevFd, VIDIOC_QUERYBUF, &hbuf_query) == -1)
+ if (ioctl(m_hset.m_iDevFd, VIDIOC_QUERYBUF, &hbuf_query) == -1)
{
LOGE("Memap V4L2 buffer Fail");
return UNKNOWN_ERROR;
@@ -389,14 +251,14 @@ status_t V4L2Camera::V4L2_BufferInit(int Buf_W,int Buf_H,int Buf_Num,int colorfm
pV4L2FrameSize[i] = hbuf_query.length;
LOGD("V4L2_BufferInit::Get Buffer Idx %d Len %d",i,pV4L2FrameSize[i]);
- pV4L2Frames[i] = mmap(NULL,pV4L2FrameSize[i],PROT_READ | PROT_WRITE,MAP_SHARED,m_iDevFd,hbuf_query.m.offset);
+ pV4L2Frames[i] = mmap(NULL,pV4L2FrameSize[i],PROT_READ | PROT_WRITE,MAP_SHARED,m_hset.m_iDevFd,hbuf_query.m.offset);
if(pV4L2Frames[i] == MAP_FAILED)
{
LOGE("Memap V4L2 buffer Fail");
return UNKNOWN_ERROR;
}
//enqueue buffer
- if (ioctl(m_iDevFd, VIDIOC_QBUF, &hbuf_query) == -1)
+ if (ioctl(m_hset.m_iDevFd, VIDIOC_QBUF, &hbuf_query) == -1)
{
LOGE("GetPreviewFrame nque buffer fail");
return UNKNOWN_ERROR;
@@ -436,7 +298,7 @@ status_t V4L2Camera::V4L2_BufferEnQue(int idx)
hbuf_query.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
hbuf_query.memory = V4L2_MEMORY_MMAP;//加和不加index有什么区别?
hbuf_query.index = idx;
- if (ioctl(m_iDevFd, VIDIOC_QBUF, &hbuf_query) == -1)
+ if (ioctl(m_hset.m_iDevFd, VIDIOC_QBUF, &hbuf_query) == -1)
{
LOGE("V4L2_BufferEnQue fail");
return UNKNOWN_ERROR;
@@ -450,7 +312,7 @@ int V4L2Camera::V4L2_BufferDeQue()
memset(&hbuf_query,0,sizeof(v4l2_buffer));
hbuf_query.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
hbuf_query.memory = V4L2_MEMORY_MMAP;//加和不加index有什么区别?
- if (ioctl(m_iDevFd, VIDIOC_DQBUF, &hbuf_query) == -1)
+ if (ioctl(m_hset.m_iDevFd, VIDIOC_DQBUF, &hbuf_query) == -1)
{
LOGE("V4L2_StreamGet Deque buffer fail");
return UNKNOWN_ERROR;
@@ -464,16 +326,15 @@ status_t V4L2Camera::V4L2_StreamOn()
{
//LOGD("V4L2_StreamOn");
int stream_type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
- if (ioctl(m_iDevFd, VIDIOC_STREAMON, &stream_type) == -1)
+ if (ioctl(m_hset.m_iDevFd, VIDIOC_STREAMON, &stream_type) == -1)
LOGE("V4L2_StreamOn Fail");
-
return NO_ERROR;
}
status_t V4L2Camera::V4L2_StreamOff()
{
int stream_type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
- if (ioctl(m_iDevFd, VIDIOC_STREAMOFF, &stream_type) == -1)
+ if (ioctl(m_hset.m_iDevFd, VIDIOC_STREAMOFF, &stream_type) == -1)
LOGE("V4L2_StreamOff Fail");
return NO_ERROR;
}
@@ -483,44 +344,9 @@ extern CameraInterface* HAL_GetCameraInterface(int Id)
{
LOGD("HAL_GetCameraInterface return V4L2 interface");
if(Id == 0)
- return new V4L2Camera("/dev/video0");
+ return new V4L2Camera("/dev/video0",0);
else
- return new V4L2Camera("/dev/video1");
+ return new V4L2Camera("/dev/video1",1);
}
-
-
-#if 0
-//debug funtctions
-static void dump_to_file(const char *fname,uint8_t *buf, uint32_t size)
-{
- int nw, cnt = 0;
- uint32_t written = 0;
-
- LOGV("opening file [%s]\n", fname);
- int fd = open(fname, O_RDWR | O_CREAT);
- if (fd < 0) {
- LOGE("failed to create file [%s]: %s", fname, strerror(errno));
- return;
- }
-
- LOGV("writing %d bytes to file [%s]\n", size, fname);
- while (written < size) {
- nw = ::write(fd,
- buf + written,
- size - written);
- if (nw < 0) {
- LOGE("failed to write to file [%s]: %s",
- fname, strerror(errno));
- break;
- }
- written += nw;
- cnt++;
- }
- LOGV("done writing %d bytes to file [%s] in %d passes\n",
- size, fname, cnt);
- ::close(fd);
-}
-#endif
-
};
diff --git a/V4L2/V4L2Camera.h b/V4L2/V4L2Camera.h
index eefb63b..df033b9 100755
--- a/V4L2/V4L2Camera.h
+++ b/V4L2/V4L2Camera.h
@@ -1,5 +1,6 @@
#include "../AmlogicCameraHardware.h"
#include <camera/CameraHardwareInterface.h>
+#include "CameraSetting.h"
namespace android {
@@ -7,8 +8,7 @@ namespace android {
class V4L2Camera : public CameraInterface
{
public:
- V4L2Camera(char* devname);
- ~V4L2Camera();
+ V4L2Camera(char* devname,int camid);
status_t Open() ;
status_t Close();
status_t StartPreview();
@@ -24,11 +24,10 @@ public:
status_t GetPreviewFrame(uint8_t* framebuf) ;
status_t GetRawFrame(uint8_t* framebuf) ;
status_t GetJpegFrame(uint8_t* framebuf) ;
- int GetCamId() {return 0;}
+ int GetCamId() {return m_hset.m_iCamId;}
protected:
- CameraParameters m_hParameter;
-
+ CameraSetting m_hset;
protected:
//internal used for controling V4L2
@@ -43,15 +42,10 @@ protected:
int GenExif(unsigned char** pExif,int* exifLen);
-
void** pV4L2Frames;
int* pV4L2FrameSize;
-
- char* m_pDevName;
- int m_iDevFd;
int m_V4L2BufNum;
int m_iPicIdx;
- int m_v4l2_qulity;
};
diff --git a/amlogic_camera_para.h b/amlogic_camera_para.h
deleted file mode 100755
index 07ed2b9..0000000
--- a/amlogic_camera_para.h
+++ b/dev/null
@@ -1,148 +0,0 @@
-/*
- * TVIN Modules Exported Header File
- *
- * Author: Lin Xu <lin.xu@amlogic.com>
- * Bobby Yang <bo.yang@amlogic.com>
- *
- * Copyright (C) 2010 Amlogic Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-
-#ifndef _AMLOGIC_CAMERA_PARA_H
-#define _AMLOGIC_CAMERA_PARA_H
-
-/*
- below macro defined applied to camera driver
-*/
-typedef enum camera_light_mode_e {
- ADVANCED_AWB = 0,
- SIMPLE_AWB,
- MANUAL_DAY,
- MANUAL_A,
- MANUAL_CWF,
- MANUAL_CLOUDY,
-}camera_light_mode_t;
-
-typedef enum camera_saturation_e {
- SATURATION_N4_STEP = 0,
- SATURATION_N3_STEP,
- SATURATION_N2_STEP,
- SATURATION_N1_STEP,
- SATURATION_0_STEP,
- SATURATION_P1_STEP,
- SATURATION_P2_STEP,
- SATURATION_P3_STEP,
- SATURATION_P4_STEP,
-}camera_saturation_t;
-
-
-typedef enum camera_brightness_e {
- BRIGHTNESS_N4_STEP = 0,
- BRIGHTNESS_N3_STEP,
- BRIGHTNESS_N2_STEP,
- BRIGHTNESS_N1_STEP,
- BRIGHTNESS_0_STEP,
- BRIGHTNESS_P1_STEP,
- BRIGHTNESS_P2_STEP,
- BRIGHTNESS_P3_STEP,
- BRIGHTNESS_P4_STEP,
-}camera_brightness_t;
-
-typedef enum camera_contrast_e {
- CONTRAST_N4_STEP = 0,
- CONTRAST_N3_STEP,
- CONTRAST_N2_STEP,
- CONTRAST_N1_STEP,
- CONTRAST_0_STEP,
- CONTRAST_P1_STEP,
- CONTRAST_P2_STEP,
- CONTRAST_P3_STEP,
- CONTRAST_P4_STEP,
-}camera_contrast_t;
-
-typedef enum camera_hue_e {
- HUE_N180_DEGREE = 0,
- HUE_N150_DEGREE,
- HUE_N120_DEGREE,
- HUE_N90_DEGREE,
- HUE_N60_DEGREE,
- HUE_N30_DEGREE,
- HUE_0_DEGREE,
- HUE_P30_DEGREE,
- HUE_P60_DEGREE,
- HUE_P90_DEGREE,
- HUE_P120_DEGREE,
- HUE_P150_DEGREE,
-}camera_hue_t;
-
-typedef enum camera_special_effect_e {
- SPECIAL_EFFECT_NORMAL = 0,
- SPECIAL_EFFECT_BW,
- SPECIAL_EFFECT_BLUISH,
- SPECIAL_EFFECT_SEPIA,
- SPECIAL_EFFECT_REDDISH,
- SPECIAL_EFFECT_GREENISH,
- SPECIAL_EFFECT_NEGATIVE,
-}camera_special_effect_t;
-
-typedef enum camera_exposure_e {
- EXPOSURE_N4_STEP = 0,
- EXPOSURE_N3_STEP,
- EXPOSURE_N2_STEP,
- EXPOSURE_N1_STEP,
- EXPOSURE_0_STEP,
- EXPOSURE_P1_STEP,
- EXPOSURE_P2_STEP,
- EXPOSURE_P3_STEP,
- EXPOSURE_P4_STEP,
-}camera_exposure_t;
-
-
-typedef enum camera_sharpness_e {
- SHARPNESS_1_STEP = 0,
- SHARPNESS_2_STEP,
- SHARPNESS_3_STEP,
- SHARPNESS_4_STEP,
- SHARPNESS_5_STEP,
- SHARPNESS_6_STEP,
- SHARPNESS_7_STEP,
- SHARPNESS_8_STEP,
- SHARPNESS_AUTO_STEP,
-}camera_sharpness_t;
-
-typedef enum camera_mirror_flip_e {
- MF_NORMAL = 0,
- MF_MIRROR,
- MF_FLIP,
- MF_MIRROR_FLIP,
-}camera_mirror_flip_t;
-
-
-typedef enum camera_wb_flip_e {
- CAM_WB_AUTO = 0,
- CAM_WB_CLOUD,
- CAM_WB_DAYLIGHT,
- CAM_WB_INCANDESCENCE,
- CAM_WB_TUNGSTEN,
- CAM_WB_FLUORESCENT,
- CAM_WB_MANUAL,
-}camera_wb_flip_t;
-typedef enum camera_night_mode_flip_e {
- CAM_NM_AUTO = 0,
- CAM_NM_ENABLE,
-}camera_night_mode_flip_t;
-typedef enum camera_effect_flip_e {
- CAM_EFFECT_ENC_NORMAL = 0,
- CAM_EFFECT_ENC_GRAYSCALE,
- CAM_EFFECT_ENC_SEPIA,
- CAM_EFFECT_ENC_SEPIAGREEN,
- CAM_EFFECT_ENC_SEPIABLUE,
- CAM_EFFECT_ENC_COLORINV,
-}camera_effect_flip_t;
-#endif
-
-