面向照相机的开发

简介: 版权声明:本文为半吊子子全栈工匠(wireless_com,同公众号)原创文章,未经允许不得转载。 https://blog.csdn.net/wireless_com/article/details/6509018 这里主要讲述一下面向手机中照相机的应用开发。
版权声明:本文为半吊子子全栈工匠(wireless_com,同公众号)原创文章,未经允许不得转载。 https://blog.csdn.net/wireless_com/article/details/6509018

这里主要讲述一下面向手机中照相机的应用开发。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所示。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wireless_com/archive/2010/08/26/5839613.aspx

目录
相关文章
HMI-31-【运动模式】解决音乐模块图片显示问题
上一篇中,我们基本实现了音乐模块的布局显示,但是留了个小尾巴,就是图片显示,这个模块中,图片不是方正的,而是有透视的,但是呢,Qt的图像显示显示,我还没有研究那么深入,所以目前只能是像,但是肯定不是真真的透视。我是利用遮罩来实现的,其实还是平面的图片,仅仅是用了一个透视的图片模版来覆盖一下。
HMI-31-【运动模式】解决音乐模块图片显示问题
|
6月前
|
索引
HMI-58-【多媒体】重构底部菜单
今天的这个没有新的内容,就是计划重新构建下底部菜单,开始是在每个界面里面都做了底部菜单,开始我以为每个界面都不一样,和面我研究了一下发现,每个界面的底部菜单都是一样的呀,那我们就好所了,开始重构。把底部菜单移到他的父页面中。
|
传感器 缓存 物联网
5_2_1_光照信息屏_软件详解|学习笔记
快速学习5_2_1_光照信息屏_软件详解。
114 0
5_2_1_光照信息屏_软件详解|学习笔记
【3D游戏建模】制作3D水波纹板
说起最近的“网红”,不得不提水波纹板了。本文将分享几种制作水波纹板的方法,希望大家看完能有所收获!
252 0
【3D游戏建模】制作3D水波纹板
|
前端开发
【ThreeJs】(2)照相机 | 正交投影照相机 | 透视投影照相机
【ThreeJs】(2)照相机 | 正交投影照相机 | 透视投影照相机
178 0
【ThreeJs】(2)照相机 | 正交投影照相机 | 透视投影照相机
指南针的制作
指南针的制作
115 0
指南针的制作
Threejs - 相机? 什么是相机? 照相机?
Threejs - 相机? 什么是相机? 照相机?
Threejs - 相机? 什么是相机? 照相机?
|
Android开发
安卓相机如何设置对焦模式
安卓相机如何设置对焦模式
147 0
|
编解码 iOS开发 存储
视频采集:iOS平台基于AVCaptureDevice的实现
入门知识AVCaptureSession在iOS平台开发中只要跟硬件相关的都要从会话开始进行配置,如果我们使用摄像头的话可以利用AVCaptureSession进行视频采集,其可以对输入和输出数据进行管理,负责协调从哪里采集数据,输出到哪里去。
1726 0
|
图形学
Unity 灯光系统详解
Unity 灯光系统详解 本文提供全流程,中文翻译。 Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) Chinar —— 心分...
1134 0