Android Camer Framework

xiabodanIP属地: 四川
0.083字数 98阅读 914

Camera框架

图片.png

Camera拍照流程

拍照采用ImageReader来作为中介保存图片例子参考android-Camera2Basic
首先是创建ImageReader

static void ImageReader_init(JNIEnv* env, jobject thiz, jobject weakThiz,
                             jint width, jint height, jint format, jint maxImages)
{
    status_t res;
    int nativeFormat;
    android_dataspace nativeDataspace;

    sp<JNIImageReaderContext> ctx(new JNIImageReaderContext(env, weakThiz, clazz, maxImages));

    sp<IGraphicBufferProducer> gbProducer;
    sp<IGraphicBufferConsumer> gbConsumer;
    BufferQueue::createBufferQueue(&gbProducer, &gbConsumer);  // 创建BufferQueue作为相机与 ImageReader的buffer
    sp<BufferItemConsumer> bufferConsumer;
    String8 consumerName = String8::format("ImageReader-%dx%df%xm%d-%d-%d",
            width, height, format, maxImages, getpid(),
            createProcessUniqueId());
    uint32_t consumerUsage = GRALLOC_USAGE_SW_READ_OFTEN;

    bufferConsumer = new BufferItemConsumer(gbConsumer, consumerUsage, maxImages,
            /*controlledByApp*/true);

    ctx->setBufferConsumer(bufferConsumer);
    bufferConsumer->setName(consumerName);

    ctx->setProducer(gbProducer);
    bufferConsumer->setFrameAvailableListener(ctx);   // 消费者是ImageReader,有新图像到来时会通知onFrameAvailable,再--> postEventFromNative --> App注册的Listener
    ImageReader_setNativeContext(env, thiz, ctx);
    ctx->setBufferFormat(nativeFormat);
    ctx->setBufferDataspace(nativeDataspace);
    ctx->setBufferWidth(width);
    ctx->setBufferHeight(height);

    // Set the width/height/format/dataspace to the bufferConsumer.
    res = bufferConsumer->setDefaultBufferSize(width, height);
    res = bufferConsumer->setDefaultBufferFormat(nativeFormat);
    res = bufferConsumer->setDefaultBufferDataSpace(nativeDataspace);
}
图片.png
  • 从上图可以看出Surface仅仅是个接口壳,多有的操作都是针对BufferQueue的
  • BufferQueueCore中有个成员是mSlots,这个就是用来存放garlloc分配的buffer的handle,类型为

参考

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
更多精彩内容,就在简书APP
"小礼物走一走,来简书关注我"
还没有人赞赏,支持一下
xiabodanAndroid系统/逆向<br>csdn: <a href="https://links.ji...
总资产20共写了1.9W字获得53个赞共38个粉丝

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,687评论 25 708
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,589评论 2 45
  • 本篇文章是基于谷歌有关Graphic的一篇概览文章的翻译:http://source.android.com/de...
    lee_3do阅读 7,209评论 2 21
  • 今天讲古诗,读到最爱湖东行不足,绿杨阴里白沙堤,阳光正好透过窗户照在讲台上,一半光晕一半阴影,看着下面的孩子,觉得...
    亦北阅读 122评论 0 0
  • 很认真地写,很认真地写,写到最后总会灰心丧气。 老婆从来不看我写的文字,但总鼓励我有进步。 但她宁可看其他人写的东...
    李明雨阅读 345评论 5 1