hal将buffer填好后,会通过processCaptureResult通知camera service,camera service会去读num_output_buffers,然后取出来送给buffer queue,上层就会被通知到有buffer上来 可以在预览过程中执行adb dumpsys media.camera,搜索stream configuration,里面能看到每条stream的size和format
回答于 2021-12-18 09:49
camera app可以选择SurfaceView/GLSurfaceView/TextureView来作为预览组件,本质上都有一个Surface(BufferQueue)。作为buffer的消费者,使用TextureView时HWUI接收camera buffer,收到后跟普通UI通过GPU合成到一起,作为一个layer送给Surfaceflinger去显示;SurfaceView则是camera service把buffer直接送给SurfaceFlinger(...
回答于 2021-12-18 09:46
flash打开后,需要先做ae pre capture trigger,做完后才能拍照,不然抓到的图有问题,逻辑有点复杂,我们后面课程会讲解哈
回答于 2021-12-18 09:45
某一种sensor mode的输出size是确定了的,但app一般会请求多路stream 当某路stream的size跟sensor output size宽高比一致,但size不一致时,会做resize动作 当某路stream size与sensor output size宽高比不一致时,会做crop动作
回答于 2021-12-18 09:44
timestamp用于标记buffer产生的时间,主要用途 录像时,video encoder做audio和video sync app可以通过timestamp去匹配buffer和capture result
回答于 2021-12-18 09:42
SinkBuffer是Pipeline的终结点,表示Pipeline已经处理完,填到输出Buffer中了。SinkBuffer是作为一个虚拟的Node来处理的,可以查看g_pipelines.cpp,里面会有SinkBuffer的ChiLinkNodeDescriptor。SinkBuffer不会针对不同的Input Node做处理,在Pipline XML中可能会定义多条link连接到Sink Buffer,但实际运行起来后只会有其...
回答于 2021-12-18 09:40
realtime和offline的区别是这条pipeline的输入是不是sensor node,如果是sensor node则表示realtime,否则是offline
回答于 2021-12-18 09:36
sequence代表node中process的两个状态或者阶段。 当node初始化的时候,Dependency并没有被设置,因此在执行其process函数的时候会执行两次,分别对应两个sequence状态: 第一次执行process会设置Dependency(DRQ会根据Dependency决定将node挂在ready队列还是deferred上),这就是sequence0;第二次执行process的时候,会upda...
回答于 2021-12-18 09:30
sensor出图的size有一个宽高比,如果上层要的stream size跟sensor 输出size宽高比一致,则能看到最大的fov,否则就会有fov的损失
回答于 2021-12-18 09:05