异常的Camera,寻求根本原因

lijian255 2007-02-09 02:59:16
请教一下各位高手一个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 ;
}
...全文
861 13 打赏 收藏 举报
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
neu0000 2010-09-17
  • 打赏
  • 举报
回复
1.snapshot前,调stop preview。
2.编码前,调ICAMERA_SetVideoEncode,设编码格式JPEG。
wchhuangya 2010-09-10
  • 打赏
  • 举报
回复
ICAMERA_EncodeSnapshot(pMe-> pCamera);这个方法不应该写在CAM_MODE_SNAPSHOT状态下,而是应该写在CAM_MODE_PREVIEW。你换个地方应该就好了~我的代码就是这样写的~就可以存储照片……
seaghost800 2010-09-10
  • 打赏
  • 举报
回复
楼上的那位兄弟写的没试过,不过我用的中兴D90和W239也有同样的问题,必须开始启动一下手机自己的照相机才能储存照片。后来我在ICAMERA_RegisterNotify后面加了一个ICAMERA_SetParm,将CAM_PARM_PREVIEW_TYPE模式设为CAM_PREVIEW_SNAPSHOT就好了。一会儿用楼上的方法我再试试。
zhaoweillhch 2009-12-28
  • 打赏
  • 举报
回复
我用的LGKV755,可以拍照成功的。不知道你用的哪款手机?ICAMERA_DeferEncode我采用默认方式,由系统默认编码。
sxcnfly 2009-12-28
  • 打赏
  • 举报
回复
首先请确认你的手机的camera是DAM还是Frame模式的,一般目前都是DAM模式也就是说LCD由camera芯片直接控制了.
strayedbird 2009-12-26
  • 打赏
  • 举报
回复
我也发现,几乎所有手机ICAMERA都有问题。
zhangjianwsuaf 2009-12-25
  • 打赏
  • 举报
回复
刚开始的应该这样写吧:
switch (pNoy-> nCmd )
{
case CAM_CMD_START :
switch(pNoy-> nStatus)
{
case CAM_STATUS_START :
switch(pNoy-> nSubCmd)
{
  • 打赏
  • 举报
回复
哪个SDK的版本呢?
sunyymq 2009-03-11
  • 打赏
  • 举报
回复
调用高通默认的接口!
twoconk 2009-03-11
  • 打赏
  • 举报
回复
正在做Camera模块,关注一下
meiZiNick 2008-04-30
  • 打赏
  • 举报
回复
不知,帮顶
knowledge_Is_Life 2008-04-30
  • 打赏
  • 举报
回复
以后需再关注,现在先帮你顶一下
StarCraftPJF 2007-03-29
  • 打赏
  • 举报
回复
up
发帖
Qualcomm开发

700

社区成员

为移动开发者提供丰富的解决方案、全面的技术下载。本版以游戏、多媒体、高效能等三个技术为核心,为开发者营造一个轻松、高效的学习交流平台。
社区管理员
  • Qualcomm开发
  • 霍大神
加入社区
帖子事件
创建了帖子
2007-02-09 02:59
社区公告
暂无公告