相机
<h2>前言</h2>
<p>该文档为绘本项目Linux端App所用到的 <strong>Camera Api</strong> 相关说明,
首先,用户需要编写新的Camera类继承VTCameraAbs抽象类,并实现相应的虚类。
新编写的Camera类模块需提供如下功能:(VTCameraAbs抽象类已有体现)</p>
<ul>
<li>开启/初始化/关闭摄像头;</li>
<li>开始/关闭预览,输出Camera的预览帧数据,格式为YUV NV21(YUV420sp);</li>
<li>可以对相机的一些参数(预览/拍照分辨率等常规参数);</li>
<li>提供拍照接口或者yuv转jpeg数据的硬编码接口,输出jpeg格式的图像数据;</li>
</ul>
<p>相应的头文件在demo源程序内可以找到</p>
<h3>1. 回调类</h3>
<h4>1.1 VTPreviewCallback</h4>
<p>回调接口,用于接收Camera预览时的预览帧数据。</p>
<p>回调函数:</p>
<table>
<thead>
<tr>
<th>名称</th>
<th>函数原型</th>
</tr>
</thead>
<tbody>
<tr>
<td>onPreviewFrame</td>
<td>virtual void onPreviewFrame(void *data, int size, VTCamera* pCamera)</td>
</tr>
</tbody>
</table>
<p>回调函数参数说明:</p>
<table>
<thead>
<tr>
<th>参数</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>data</td>
<td>VTCameraAbs::startPreview 开启预览后,返回的图片数据类型指针</td>
</tr>
<tr>
<td>size</td>
<td>图片数据的长度,字节数</td>
</tr>
<tr>
<td>pCamera</td>
<td>VTCameraAbs的实例,由VTCameraAbs::open()生成</td>
</tr>
</tbody>
</table>
<h4>1.2 VTPictureCallback</h4>
<p>回调接口,用于从获取相机图像帧数据。</p>
<p>回调函数:</p>
<table>
<thead>
<tr>
<th>名称</th>
<th>函数原型</th>
</tr>
</thead>
<tbody>
<tr>
<td>onPictureTaken</td>
<td>virtual void onPictureTaken(void *data, int size, VTCamera* pCamera) = 0</td>
</tr>
</tbody>
</table>
<p>回调函数参数说明:</p>
<table>
<thead>
<tr>
<th>参数</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>data</td>
<td>takePicture 返回的图片数据类型指针,默认格式为JPEG,注意与预览格式不一样</td>
</tr>
<tr>
<td>size</td>
<td>图片数据的长度,字节数</td>
</tr>
<tr>
<td>pCamera</td>
<td>VTCameraAbs的实例,由VTCameraAbs::open()生成</td>
</tr>
</tbody>
</table>
<h4>1.3 VTErrorCallback</h4>
<p>回调接口,错误代码及描述。</p>
<p>回调函数:</p>
<table>
<thead>
<tr>
<th>名称</th>
<th>函数原型</th>
</tr>
</thead>
<tbody>
<tr>
<td>onError</td>
<td>virtual void onError(int error, VTCamera *pCamera) = 0</td>
</tr>
</tbody>
</table>
<p>回调函数参数说明:</p>
<table>
<thead>
<tr>
<th>参数</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>error</td>
<td>错误代码,用以标注Camera打开或者运行的一些错误</td>
</tr>
<tr>
<td>pCamera</td>
<td>VTCameraAbs的实例,由VTCameraAbs::open()生成</td>
</tr>
</tbody>
</table>
<h3>2 VTCameraAbs 接口</h3>
<h4>2.1 open</h4>
<table>
<thead>
<tr>
<th>函数原型</th>
<th>int open();</th>
</tr>
</thead>
<tbody>
<tr>
<td>功能</td>
<td>创建一个VTCameraAbs实例,关联到指定的camera ID</td>
</tr>
<tr>
<td>参数</td>
<td>无</td>
</tr>
<tr>
<td>返回值</td>
<td>0 打开成功 -1 打开失败</td>
</tr>
<tr>
<td>调用说明</td>
<td>无</td>
</tr>
</tbody>
</table>
<h4>2.2 release</h4>
<table>
<thead>
<tr>
<th>函数原型</th>
<th>void release();</th>
</tr>
</thead>
<tbody>
<tr>
<td>功能</td>
<td>断开Camera,释放Camera资源</td>
</tr>
<tr>
<td>参数</td>
<td>无</td>
</tr>
<tr>
<td>返回值</td>
<td>无</td>
</tr>
<tr>
<td>调用说明</td>
<td>无</td>
</tr>
</tbody>
</table>
<h4>2.3 startPreview</h4>
<table>
<thead>
<tr>
<th>函数原型</th>
<th>int startPreview();</th>
</tr>
</thead>
<tbody>
<tr>
<td>功能</td>
<td>启动相机预览</td>
</tr>
<tr>
<td>参数</td>
<td>无</td>
</tr>
<tr>
<td>返回值</td>
<td>成功返回0,否则返回错误代码</td>
</tr>
<tr>
<td>调用说明</td>
<td>启动后camera每采集一帧图像,都会调用显示接口显示预览图像,以及回调每帧的图像数据</td>
</tr>
</tbody>
</table>
<h4>2.4 stopPreview</h4>
<table>
<thead>
<tr>
<th>函数原型</th>
<th>void stopPreview();</th>
</tr>
</thead>
<tbody>
<tr>
<td>功能</td>
<td>停止预览</td>
</tr>
<tr>
<td>参数</td>
<td>无</td>
</tr>
<tr>
<td>返回值</td>
<td>成功返回0,否则返回错误代码</td>
</tr>
<tr>
<td>调用说明</td>
<td>无</td>
</tr>
</tbody>
</table>
<h4>2.5 takePicture</h4>
<table>
<thead>
<tr>
<th>函数原型</th>
<th>void takePicture();</th>
</tr>
</thead>
<tbody>
<tr>
<td>功能</td>
<td>拍照</td>
</tr>
<tr>
<td>参数</td>
<td>无</td>
</tr>
<tr>
<td>返回值</td>
<td>无</td>
</tr>
<tr>
<td>调用说明</td>
<td>这是一个异步函数,调用后立即返回。根据注册callback函数setTakePictureCallback,将图像数据传出来。</td>
</tr>
</tbody>
</table>
<h4>2.6 setErrorCallback</h4>
<table>
<thead>
<tr>
<th>函数原型</th>
<th>void setErrorCallback(VTErrorCallback *pCb);</th>
</tr>
</thead>
<tbody>
<tr>
<td>功能</td>
<td>设置error信息的callback</td>
</tr>
<tr>
<td>参数</td>
<td>pCb:发送error消息的callback类,详细见1.1章的VTErrorCallback</td>
</tr>
<tr>
<td>返回值</td>
<td>无</td>
</tr>
<tr>
<td>调用说明</td>
<td>无</td>
</tr>
</tbody>
</table>
<h4>2.7 setPreviewCallback</h4>
<table>
<thead>
<tr>
<th>函数原型</th>
<th>void setPreviewCallback(VTPreviewCallback*pCb);</th>
</tr>
</thead>
<tbody>
<tr>
<td>功能</td>
<td>设置接收预览数据的callback</td>
</tr>
<tr>
<td>参数</td>
<td>pCb:接收数据的callback类,详细见1.1章的VTPreviewCallback</td>
</tr>
<tr>
<td>返回值</td>
<td>无</td>
</tr>
<tr>
<td>调用说明</td>
<td>无</td>
</tr>
</tbody>
</table>
<h4>2.8 setTakePictureCallback</h4>
<table>
<thead>
<tr>
<th>函数原型</th>
<th>void setTakePictureCallback(VTPictureCallback*pCb);</th>
</tr>
</thead>
<tbody>
<tr>
<td>功能</td>
<td>设置接收拍照数据的callback</td>
</tr>
<tr>
<td>参数</td>
<td>pCb:接收数据的callback类,详细见1.1章的VTPictureCallback</td>
</tr>
<tr>
<td>返回值</td>
<td>无</td>
</tr>
<tr>
<td>调用说明</td>
<td>无</td>
</tr>
</tbody>
</table>
<h4>2.9 getPreviewSize</h4>
<table>
<thead>
<tr>
<th>函数原型</th>
<th>void getPreviewSize(VTSize &size)</th>
</tr>
</thead>
<tbody>
<tr>
<td>功能</td>
<td>获取预览分辨率</td>
</tr>
<tr>
<td>参数</td>
<td>size:预览数据的尺寸</td>
</tr>
<tr>
<td>返回值</td>
<td>无</td>
</tr>
<tr>
<td>调用说明</td>
<td>无</td>
</tr>
</tbody>
</table>
<h4>2.10 getPictureSize</h4>
<table>
<thead>
<tr>
<th>函数原型</th>
<th>void getPictureSize(VTSize &size)</th>
</tr>
</thead>
<tbody>
<tr>
<td>功能</td>
<td>获取拍照的分辨率</td>
</tr>
<tr>
<td>参数</td>
<td>size:拍照数据的尺寸</td>
</tr>
<tr>
<td>返回值</td>
<td>无</td>
</tr>
<tr>
<td>调用说明</td>
<td>无</td>
</tr>
</tbody>
</table>
<h4>2.11 convertYUV2JPEG</h4>
<table>
<thead>
<tr>
<th>函数原型</th>
<th>int convertYUV2JPEG(const void *yuvData, int yuvSize, void *jpegData, int &jpegSize)</th>
</tr>
</thead>
<tbody>
<tr>
<td>功能</td>
<td>yuv数据转jpeg数据硬编码接口</td>
</tr>
<tr>
<td>参数</td>
<td>yuvData:yuv数据指针 yuvsize: yuv数据长度 jpegData: 输出的jpeg数据, jpegsize:输出的jpeg数据长度</td>
</tr>
<tr>
<td>返回值</td>
<td>0 编码成功 -1 编码失败</td>
</tr>
<tr>
<td>调用说明</td>
<td>无</td>
</tr>
</tbody>
</table>