Android Camera 和 frameword 的交互

app层和framework层交互:
./frameworks/base/core/java/android/hardware/Camera.java

拍照过程framework层和APP层的交互流程,在takePicture()方法的注释里做了详细解释:
总结一下:拍照过程中Camera service 会初始一些Callbacks,在应用中实现这些callback的接口方法,
这个方法同样的可以触发播放声音的线程。

注册回调函数:
public final void takePicture(ShutterCallback shutter, PictureCallback raw,
PictureCallback postview, PictureCallback jpeg) {
...
}

处理回函数数据:
public void handleMessage(Message msg) {
switch(msg.what) {
case CAMERA_MSG_SHUTTER: //有数据到达通知
case CAMERA_MSG_RAW_IMAGE: //处理未压缩照片函数
case CAMERA_MSG_COMPRESSED_IMAGE: //处理压缩处理的照片函数
if (mJpegCallback != null) {
mJpegCallback.onPictureTaken((byte[])msg.obj, mCamera);
}
return ;
case CAMERA_MSG_PREVIEW_FRAME: //处理预览数据函数
...
}


应用实例化回调的接口:
回到目录:packages/apps/Camera/src/com/android/camera/CameraManager.java
private android.hardware.Camera mCamera;
mCameraDevice.takePicture(mShutterCallback, mRawPictureCallback,
mPostViewPictureCallback, new JpegPictureCallback(loc));

应用回调的接口,获取数据流程:
目录:packages/apps/Camera/src/com/android/camera/Camera.java
private final class JpegPictureCallback implements PictureCallback {
public void onPictureTaken(
final byte [] jpegData, final android.hardware.Camera camera) {
...
mImageCapture.storeImage(jpegData, camera, mLocation);
mImageSaver.addImage(jpegData, uri, title, mLocation,
width, height, mThumbnailViewWidth, orientation);
...
}
}

packages/apps/Camera/src/com/android/camera/Camera.java 的内部类ImageSaver开启一个线程来存储图片
private class ImageSaver extends Thread {
将数据存放入数据库
}

以上是App层也framework层的交互,主要使用回调,也就是接口。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值