当前位置:编程学习 > wap >>

异常的Camera,寻求根本原因

请教一下各位高手一个Camera的异常。
    最近做一个有关照相机的项目,发现在LG大部分手机和海信C807的照相机接口不能拍照。但是三星的手机都没有问题。不知道是怎么回事。
    具体异常情况海信C807是必须开机之后首先进入系统自带那个照相机拍一下照,然后在进入自己的程序里,拍照就能成功保存拍摄的照片,否则拍摄就不成功。
    而LG的手机即使像海信的那样操作也不能拍照,不能保存下来照片。
是因为拍照后,回调函数内的事件走法不是我们预想的。而是很异常的。
    下面是我的回调程序:
void MYCAMERA_Notify(void *pUser,AEECameraNotify *pNoy)
{
MyCamera* pMe = (MyCamera *)pUser; 
int iErr = 0;

pMe->pMsg(pMe->pOwner,0xffff);
switch (pNoy->nStatus)
{
case CAM_STATUS_START:
switch(pNoy->nCmd )
{
case CAM_CMD_START:
switch(pNoy->nSubCmd)
{
case CAM_MODE_PREVIEW: 
break;
case CAM_MODE_SNAPSHOT:
break;
case CAM_MODE_MOVIE:
break;
case CAM_MODE_READY:
break;
}
break;
case CAM_CMD_ENCODESNAPSHOT:
break;
case CAM_CMD_SETPARM:
break;
case CAM_CMD_GETPARM:
break;
}
break;
case CAM_STATUS_DONE:
switch(pNoy->nCmd )
{
case CAM_CMD_START:
switch(pNoy->nSubCmd)
{
case CAM_MODE_PREVIEW: 
iErr = ICAMERA_DeferEncode(pMe->pCamera,TRUE);
iErr = ICAMERA_RecordSnapshot(pMe->pCamera);
break;
case CAM_MODE_SNAPSHOT:
{
char files[30];
JulianType pDate;

GETJULIANDATE(GETTIMESECONDS(), &pDate);

pMe->stMedData.clsData = MMD_FILE_NAME;  
pMe->stMedData.pData = UPDATA_FILE_NAME; 
pMe->stMedData.dwSize = 0;     
iErr = ICAMERA_SetMediaData(pMe->pCamera,&pMe->stMedData,MT_JPG);

iErr = ICAMERA_EncodeSnapshot(pMe->pCamera);
if(SUCCESS == iErr)
{
pMe->pMsg(pMe->pOwner,SUCCESS);
}

break;
}
case CAM_MODE_MOVIE:
break;
case CAM_MODE_READY:
break;
}
break;
case CAM_CMD_ENCODESNAPSHOT: 
break;
case CAM_CMD_SETPARM:
break;
case CAM_CMD_GETPARM:
break;
}
break; 
case CAM_STATUS_FAIL:
break;
case CAM_STATUS_ABORT:
break;
case CAM_STATUS_FRAME:
{
AEEDeviceInfo astInfo;
IBitmap *      pFrame;
AEEBitmapInfo  bi;

ISHELL_GetDeviceInfo(pMe->pApp->m_pIShell,&astInfo);
if (SUCCESS != ICAMERA_GetFrame(pMe->pCamera, &pFrame))
return;
IBITMAP_GetInfo(pFrame, &bi, sizeof(bi));
IDISPLAY_BitBlt(pMe->pApp->m_pIDisplay, 0, (astInfo.cyScreen - bi.cy)/2, bi.cx, bi.cy, pFrame, 0, 0, AEE_RO_COPY);
IBITMAP_Release(pFrame);

break;
}
case CAM_STATUS_PAUSE:
break;
case CAM_STATUS_RESUME:
break;
case CAM_STATUS_DATA_IO_DELAY:
break;
case CAM_STATUS_SPACE_WARNING:
break;
default:
break;
}

return ;
} --------------------编程问答-------------------- up --------------------编程问答-------------------- 不知,帮顶 --------------------编程问答-------------------- 以后需再关注,现在先帮你顶一下 --------------------编程问答-------------------- 正在做Camera模块,关注一下 --------------------编程问答-------------------- 调用高通默认的接口! --------------------编程问答-------------------- 哪个SDK的版本呢? --------------------编程问答-------------------- 刚开始的应该这样写吧:
switch   (pNoy-> nCmd   ) 

case  CAM_CMD_START : 
switch(pNoy-> nStatus) 

case  CAM_STATUS_START : 
switch(pNoy-> nSubCmd) 

--------------------编程问答-------------------- 我也发现,几乎所有手机ICAMERA都有问题。 --------------------编程问答-------------------- 我用的LGKV755,可以拍照成功的。不知道你用的哪款手机?ICAMERA_DeferEncode我采用默认方式,由系统默认编码。 --------------------编程问答-------------------- 首先请确认你的手机的camera是DAM还是Frame模式的,一般目前都是DAM模式也就是说LCD由camera芯片直接控制了. --------------------编程问答-------------------- ICAMERA_EncodeSnapshot(pMe-> pCamera);这个方法不应该写在CAM_MODE_SNAPSHOT状态下,而是应该写在CAM_MODE_PREVIEW。你换个地方应该就好了~我的代码就是这样写的~就可以存储照片…… --------------------编程问答-------------------- 楼上的那位兄弟写的没试过,不过我用的中兴D90和W239也有同样的问题,必须开始启动一下手机自己的照相机才能储存照片。后来我在ICAMERA_RegisterNotify后面加了一个ICAMERA_SetParm,将CAM_PARM_PREVIEW_TYPE模式设为CAM_PREVIEW_SNAPSHOT就好了。一会儿用楼上的方法我再试试。 --------------------编程问答-------------------- 1.snapshot前,调stop preview。
2.编码前,调ICAMERA_SetVideoEncode,设编码格式JPEG。
补充:移动开发 ,  Brew
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,