这里主要讲述一下面向手机中照相机的应用开发。ICamera能够使应用访问手机中的照相机传感器,配置照相机的快照和录像模式,并提供多种的记录和编码的方式(图14-9)。

图14-9:ICamera的体系结构

使用ICamera 的应用可以实现取景,以类似JPEG格式编码和存储相片,以类似MPEG4格式编码和存储录像,对照相机的对比度,缩放,聚焦,白平衡等属性进行设定,监听并处理与照相机相关的各种异步事件得等,其状态机示意图如14-10所示。

图14-10:ICamera的状态机

使用ICamera时,首先通过AEECLSID_CAMERA创建接口:

ISHELL_CreateInstance(pme->a.m_pIShell,AEECLSID_CAMERA,(void **)&pme->m_pICamera);

然后注册回调函数来接收Camera的事件,

ICAMERA_RegisterNotify(pme->pICamera, CApp_CameraNotify,pme);

接下来,设定取景模式和显示区域:

ICAMERA_SetParm(pme->pICamera, CAM_PARM_PREVIEW_TYPE,CAM_PREVIEW_SNAPSHOT, 0);

ICAMERA_SetDisplaySize(pme->m_pICamera, &pme->m_sizeDisplay);

ICAMERA_SetSize(pme->m_pICamera, &pme->m_sizeFrame);

就编码方式而言,照相时可以指定JPEG方式,录像时可以指定MPEG4和AAC的音频编码

ICAMERA_SetVideoEncode(pme->m_pICamera,AEECLSID_JPEG, 0);

ICAMERA_SetVideoEncode(pme->m_pICamera,AEECLSID_MPEG4, 0);

ICAMERA_SetAudioEncode(pme->m_pICamera,AEECLSID_AAC, 0);

开始和停止取景可以调用ICAMERA_Preview()和ICamera_Stop()完成,照相和录像的中的异步事件主要包含在数据结构AEECameraNotify中:

typedef struct AEECameraNotify

{

ICamera * pCam;

int16 nCmd;

int16 nSubCmd;

int16 nStatus;

int16 nReserved;

void * pData;

uint32 dwSize;

} AEECameraNotify;

其中nStatus定义了类似CAM_STATUS_XXX的状态代码,nCmd 定义了指令代码(例如 CAM_CMD_START),nSubCmd 包含了子指令的代码(例如CAM_CMD_START, 子指令的代码包含了类似CAM_MODE_XXX等模式信息),pData 包含了与事件相关的数据,dwSize 是指这些数据的长度。 表14-3介绍了一些与取景相关的事件解释。

事件组合

事件解释

{CAM_CMD_START, CAM_MODE_PREVIEW,CAM_STATUS_START}

开始取景,ICamera接口对象由READY转换成PREVIEW状态

{CAM_CMD_START, CAM_MODE_PREVIEW,

CAM_STATUS_FRAME}

ICAMERA_GetFrame()可以获得当前的这帧图像

{CAM_CMD_START, CAM_MODE_PREVIEW,

CAM_STATUS_DONE}

取景结束,ICamera接口对象从PREVIEW转换成状态READY

{CAM_CMD_START, CAM_MODE_PREVIEW,

CAM_STATUS_ABORT, CAM_EXXX_}

取景时异常退出

14-3:照相机取景模式中的事件

ICamera接口对象在取景时的状态转移时序如图14-11所示。

图14-11:ICamera取景时的状态转移时序

下面是在使用ICamera的录像模式中处理帧事件的示例:

static void MyApp_CameraNotify(MyApp *pme, AEECameraNotify * pn){

switch (pn->nStatus){

case CAM_STATUS_START:

// Preview has begun...

break;

case CAM_STATUS_FRAME:

{

IBitmap * pFrame;

AEEBitmapInfo bi;

// Get the frame.

ICAMERA_GetFrame(pme->m_pICamera, &pFrame));

// Get the bitmap info.

IBITMAP_GetInfo(pFrame, &bi, sizeof(bi));

// Display the frame at (0, 0) location of the screen

IDISPLAY_BitBlt(pme, 0, 0, bi.cx, bi.cy, pFrame, 0, 0, AEE_RO_COPY);

IBITMAP_Release(pFrame);

break;

}

case CAM_STATUS_DONE:

// ICAMERA_Stop() stopprf preview operation stopped.

break;

case CAM_STATUS_ABORT:

// Preview got aborted.

break;

}

}

如果希望完成一个照相的操作,首先要设定照片的存储位置,然后执行照相操作即可。

ICAMERA_SetMediaData(pme->m_pICamera, &md);

ICAMERA_RecordSnapshot(pme->m_pICamera);

原始图像是以JPEG格式保存的,ICamera接口对象照相时的状态转移时序如图14-12所示。

图14-12:ICamera执行照相操作的状态转移时序

在录像的时候,ICamera 接口对象会捕获原始的图像帧和相关的音频数据,然后发送帧的相关事件给BREW应用,同时对帧和音频数据以MPEG4/AAC的格式进行编码。使用时,同样先要指定录像的存储位置,然后执行录像操作,录像完毕时终止录像操作。

ICAMERA_SetMediaData(pme->m_pICamera, &md);

ICAMERA_RecordMovie(pme->m_pICamera);

ICAMERA_Stop(pme->m_pICamera);

ICamera接口对象录像时的状态转移时序如图14-13所示。

图14-13:ICamera执行录像操作的状态转移时序

转载于:https://blog.51cto.com/wirelesscao/631920

《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之70---面向照相机的开发...相关推荐

  1. 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之27---BREW 应用定价

    运营商在向移动用户提供移动增值服务的同时, 应确定该服务定价模式即用户的付费方式.在定价的时候,和一般的产品定价类似,一种服务的价格是由为用户创造的价值和用户可获得的替代选择决定的.不同的是,移动增值 ...

  2. 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之36---支持BREW的手机

    目前,支持BREW功能的手机还主要是CDMA网络的用户终端,但随着3G的到来以及中国电信开始经营基于BREW的移动增值业务,支持BREW功能的手机会越来越多. 早在2003年,Nokia就推出了自己首 ...

  3. 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之26---礼品卡支付...

    除了用户通过BREW中的移动商店购买应用之外,其他丰富的付费方式(实际上是指购买方式)无疑能够提高移动增值业务的市场穿透能力.在零售行业中,礼品卡或者购物券是非常普遍的促销方式(图6-8所示). 90 ...

  4. 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之22---BDS的分发流程...

    BREW通过一个安全的企业外联网站点使运营商对应用的选择.管理.定价.用户的使用跟踪和计费拥有完全的控制权.从商业模式上来讲,BREW应用的分发主要有两种: 一种是运营商控制的应用的分发,另一种是典型 ...

  5. 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之6---移动增值业务概述

    移动增值业务(Mobile Added Value Service)就是在移动通信网上开发运行除了语音等基本业务以外的服务类型.目前国际上通常把移动增值业务概括为两大类,即移动话音增值业务和移动数据增 ...

  6. 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之9---移动增值业务产业链

    移动增值业务领域中的产业链突破了传统语音增值业务中移动运营商的限制,其产业链扩展至:设备制造商.运营商.业务运营商(SP).内容提供商(CP)和最终用户等市场主体,逐步创造多方共赢的商业模式: (1) ...

  7. 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之11---什么是BREW

    BREW作为动词,有酿成.策划.酝酿的含义:作为名词,它的意思是酿造的饮料.而这里是指Binary Runtime Environment for Wireless 的缩写. BINARY 是指二进制 ...

  8. 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之44---QChat 技术...

    从本质上说,POC/PTT技术是把VoIP技术应用于移动终端,将原来由运营商承担的部分VoIP功能转移到手机终端来实现.因此,POC可参照传统的网络分层概念.其中,POC系统中的移动信道层.应用层以及 ...

  9. 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之8---Symbian,Windows Mobile,Palm,Linux,J2ME, BREW

    Symbian Symbian OS是专门为手机开发的操作系统,所以在手机常用的功能方面进行了加强和扩展,同时也加入了一些PDA的功能,比如所个人信息管理,多媒体功能,但是并不很完善,和微软的Wind ...

最新文章

  1. android实现底部弹出菜单,Android实现底部缓慢弹出菜单
  2. java设计模式2--抽象工厂模式(Abstract Factory)
  3. 读书笔记_CLR.via.c#第五章_基元类型_引用类型_值类型
  4. efcore根据多个条件更新_EFCore.Sharding(EFCore开源分表框架)
  5. 几万条数据的excel导入到mysql_【记录】2万多条数据的Excel表格数据导入mysql数据库...
  6. PythonEggs
  7. 标注工具——Electron、HTML、CSSjs的学习笔记目录
  8. 基于深度学习的自然场景文字检测及端到端的OCR中文文字识别
  9. 机械师电脑_必看!面对电脑玩游戏卡顿,需要做些什么?
  10. Jquery提交表单(通过添加button的click事件)
  11. [Factory mode] 怎么配置工厂模式测试项
  12. pdf文件如何生成目录 wps_WPS文档如何生成目录你会了吗?
  13. java中加号_java中加号+的作用
  14. android测试内存的软件下载,华为p10内存测试软件(androbench) v5.0.1 免费版
  15. spring中的JdbcTemplate的使用方法
  16. 数字化精准会员营销 助消费品连锁企业提升转化
  17. front UAG in 10 minutes
  18. 李阳疯狂英语突破对话(40)-不要拐弯抹角
  19. 轩辕剑java完美攻略_轩辕剑外传云之遥图文攻略 超详细完美攻略
  20. Centos 7 中安装 Oracle 11g R2数据库【超详细】

热门文章

  1. typescript vuex_将已有的Vue项目升级支持TypeScript
  2. 更新卡住解决_iPhone手机无法正常下载/安装应用的解决方法
  3. 帆软报表使用及设置日志打印sql
  4. GitHub热榜第四!这套Python机器学习课,免费获取还易吸收 | 资源
  5. 向前、向后、横着走,双足机器人Cassie,靠深度强化学习学会了走路丨论文
  6. 硅谷半夜3点惊现无人驾驶特斯拉!百公里时速飞驰,交警围追10公里才逼停
  7. 专访图灵奖得主David Patterson:8年前就得知被提名,AI跃迁看好边缘计算
  8. Goodfellow新研究:对抗样例让机器与人类双双上当 | 论文
  9. Mysql Federated For Windows
  10. [Android]Eclipse连不上模拟器的问题[emulator-5554 disconnected]