pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

如何使用 JNI 在 C 中獲取原始 Android 相機(jī)緩沖區(qū)

How do I get the raw Android camera buffer in C using JNI?(如何使用 JNI 在 C 中獲取原始 Android 相機(jī)緩沖區(qū)?)
本文介紹了如何使用 JNI 在 C 中獲取原始 Android 相機(jī)緩沖區(qū)?的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!

問(wèn)題描述

我一直在徹底搜索 Google 和 StackOverflow,但找不到這個(gè).也許我錯(cuò)過(guò)了一些明顯的東西.謝謝!

I've been searching Google and StackOverflow exhaustively and cannot find this. Maybe I'm missing something obvious. Thanks!

(這是因?yàn)轭A(yù)覽回調(diào)的Java實(shí)現(xiàn)[即使有緩沖區(qū)]效率太低.)

(This is because the Java implementation of the preview callback [even with buffer] is too inefficient.)

推薦答案

我對(duì)主題做了一點(diǎn)調(diào)查.這個(gè)介紹(來(lái)自p.277,中文)幫助很大.

I made a little investigation on topic. This presentation (from p.277, Chinese) helped a lot.

正如其他人提到的,您可以使用 Camera.setPreviewCallback 方法獲取緩沖區(qū).
以下是它的發(fā)生方式(詳細(xì)版本):

As others mentioned, you can get a buffer using a Camera.setPreviewCallback method.
Here's how it happens there (a verbose version):

  1. 用戶調(diào)用 Camera.startPreview() 這是一個(gè)原生函數(shù).
  2. android_hardware_Camera_startPreview 調(diào)用C++ Camera 類的startPreview 方法.
  3. Camera調(diào)用ICamera接口的startPreview方法
  4. ICamera 對(duì)遠(yuǎn)程客戶端進(jìn)行 IPC 調(diào)用.
  5. 調(diào)用CameraService類的setCameraMode方法.
  6. CameraService 設(shè)置一個(gè)窗口顯示預(yù)覽并調(diào)用CameraHardwareInterface 類的startPreview 方法.
  7. 后者嘗試在特定 camera_device_t 設(shè)備上調(diào)用 start_preview 方法.
    我沒(méi)有進(jìn)一步查找,但它應(yīng)該會(huì)調(diào)用驅(qū)動(dòng)程序.
  8. 當(dāng)圖片到達(dá)時(shí),調(diào)用CameraServicedataCallback.
  9. 將數(shù)據(jù)傳遞給客戶端的handlePreviewData方法.
  10. 客戶端要么復(fù)制緩沖區(qū),要么直接將其發(fā)送到 ICameraClient.
  11. ICameraClient 通過(guò)IPC 將其發(fā)送到Camera.
  12. Camera 調(diào)用已注冊(cè)的監(jiān)聽(tīng)器并將緩沖區(qū)傳遞給 JNI.
  13. 它調(diào)用 Java 類中的回調(diào).如果用戶使用 Camera.addCallbackBuffer 提供了一個(gè)緩沖區(qū),則它首先復(fù)制到緩沖區(qū).
  14. 最后,Java 類 Camera 處理消息并調(diào)用 Camera.PreviewCallbackonPreviewFrame 方法.
  1. User calls Camera.startPreview() which is a native function.
  2. android_hardware_Camera_startPreview calls startPreview method of C++ Camera class.
  3. Camera calls a startPreview method of ICamera interface
  4. ICamera makes an IPC call to remote client.
  5. It calls a setCameraMode method of CameraService class.
  6. CameraService sets a window to display a preview and calls a startPreview method of CameraHardwareInterface class.
  7. The latter tries to call a start_preview method on particular camera_device_t device.
    I didn't looked up further but it should perform a call to the driver.
  8. When image arrives, dataCallback of CameraService is invoked.
  9. It passes data to handlePreviewData method of client.
  10. Client either copies the buffer or sends it directly to the ICameraClient.
  11. ICameraClient sends it over IPC to the Camera.
  12. Camera calls a registered listener and passes buffer to JNI.
  13. It invokes a callback in Java class. If user provided a buffer with Camera.addCallbackBuffer then it copies to the buffer first.
  14. Finally Java class Camera handles the message and invokes a onPreviewFrame method of Camera.PreviewCallback.

如您所見(jiàn),調(diào)用了 2 個(gè) IPC 調(diào)用,并且在步驟 10、11 中至少?gòu)?fù)制了兩次緩沖區(qū).camera_device_t 返回的原始緩沖區(qū)的第一個(gè)實(shí)例是托管在另一個(gè)進(jìn)程中,由于 CameraService 中的安全檢查,您無(wú)法訪問(wèn)它.

As you can see 2 IPC calls were invoked and buffer was copied at least twice on steps 10, 11. First instance of raw buffer which is returned by camera_device_t is hosted in another process and you cannot access it due to security checks in CameraService.

但是,當(dāng)您使用 Camera.setPreviewTextureCamera.setPreviewDisplay 設(shè)置預(yù)覽表面時(shí),它會(huì)直接傳遞給相機(jī)設(shè)備并實(shí)時(shí)刷新,而無(wú)需上面的所有鏈條.正如它的文檔所說(shuō):

However, when you set a preview surface using either Camera.setPreviewTexture or Camera.setPreviewDisplay it is be passed directly to the camera device and refreshed in realtime without participation of all the chain above. As it's documentation says:

處理一個(gè)由屏幕合成器管理的原始緩沖區(qū).

Handle onto a raw buffer that is being managed by the screen compositor.

Java 類 Surface 有一個(gè)方法來(lái)檢索它的內(nèi)容:

Java class Surface has a method to retrieve it's contents:

public static native Bitmap screenshot(int width, int height, int minLayer, int maxLayer);

但是這個(gè) API 是隱藏的.參見(jiàn) 這個(gè)問(wèn)題 了解使用方法.

But this API is hidden. See i.e. this question for a way to use it.

這篇關(guān)于如何使用 JNI 在 C 中獲取原始 Android 相機(jī)緩沖區(qū)?的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

【網(wǎng)站聲明】本站部分內(nèi)容來(lái)源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問(wèn)題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請(qǐng)聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

Why does the android emulator camera stop unexpectedly?(為什么android模擬器相機(jī)會(huì)意外停止?)
Android camera , onPictureTaken(byte[] imgData, Camera camera) method amp; PictureCallback never called(Android camera , onPictureTaken(byte[] imgData, Camera camera) 方法 amp;PictureCallback 從未調(diào)用過(guò)) - IT屋-程序員軟件開(kāi)發(fā)技
Understanding the libGDX Projection Matrix(了解 libGDX 投影矩陣)
QR code reading with camera - Android(使用相機(jī)讀取二維碼 - Android)
IP camera with OpenCv in Java(Java中帶有OpenCv的IP攝像頭)
Android mock Camera(Android 模擬相機(jī))
主站蜘蛛池模板: 喷码机,激光喷码打码机,鸡蛋打码机,手持打码机,自动喷码机,一物一码防伪溯源-恒欣瑞达有限公司 | 高低温万能试验机-复合材料万能试验机-馥勒仪器 | 消泡剂_水处理消泡剂_切削液消泡剂_涂料消泡剂_有机硅消泡剂_广州中万新材料生产厂家 | 石栏杆_青石栏杆_汉白玉栏杆_花岗岩栏杆 - 【石雕之乡】点石石雕石材厂 | 天一线缆邯郸有限公司_煤矿用电缆厂家_矿用光缆厂家_矿用控制电缆_矿用通信电缆-天一线缆邯郸有限公司 | 煤矿人员精确定位系统_矿用无线通信系统_煤矿广播系统 | 哈希余氯测定仪,分光光度计,ph在线监测仪,浊度测定仪,试剂-上海京灿精密机械有限公司 | 餐饮加盟网_特色餐饮连锁加盟店-餐饮加盟官网 | 菲希尔FISCHER测厚仪-铁素体检测仪-上海吉馨实业发展有限公司 | 杭州高温泵_热水泵_高温油泵|昆山奥兰克泵业制造有限公司 | COD分析仪|氨氮分析仪|总磷分析仪|总氮分析仪-圣湖Greatlake | SMN-1/SMN-A ABB抽屉开关柜触头夹紧力检测仪-SMN-B/SMN-C-上海徐吉 | 水性漆|墙面漆|木器家具漆|水漆涂料_晨阳水漆官网 | 不锈钢发酵罐_水果酒发酵罐_谷物发酵罐_山东誉诚不锈钢制品有限公司 | 大_小鼠elisa试剂盒-植物_人Elisa试剂盒-PCR荧光定量试剂盒-上海一研生物科技有限公司 | 四川职高信息网-初高中、大专、职业技术学校招生信息网 | 留学生辅导网-在线课程论文辅导-留学生挂科申诉机构 | 手持式3d激光扫描仪-便携式三维立体扫描仪-北京福禄克斯 | 环讯传媒,永康网络公司,永康网站建设,永康小程序开发制作,永康网站制作,武义网页设计,金华地区网站SEO优化推广 - 永康市环讯电子商务有限公司 | 裹包机|裹膜机|缠膜机|绕膜机-上海晏陵智能设备有限公司 | 刺绳_刀片刺网_刺丝滚笼_不锈钢刺绳生产厂家_安平县浩荣金属丝网制品有限公司-安平县浩荣金属丝网制品有限公司 | 牛奶检测仪-乳成分分析仪-北京海谊| 步进_伺服_行星减速机,微型直流电机,大功率直流电机-淄博冠意传动机械 | 注浆压力变送器-高温熔体传感器-矿用压力传感器|ZHYQ朝辉 | 电缆桥架生产厂家_槽式/梯式_热镀锌线槽_广东东莞雷正电气 | 硫化罐_蒸汽硫化罐_大型硫化罐-山东鑫泰鑫智能装备有限公司 | 机制砂选粉机_砂石选粉机厂家-盐城市助成粉磨科技有限公司 | 高压油管,液压接头,液压附件-烟台市正诚液压附件 | 哈希PC1R1A,哈希CA9300,哈希SC4500-上海鑫嵩实业有限公司 | 档案密集架,移动密集架,手摇式密集架,吉林档案密集架-厂家直销★价格公道★质量保证 | 气动|电动调节阀|球阀|蝶阀-自力式调节阀-上海渠工阀门管道工程有限公司 | 威廉希尔WilliamHill·足球(中国)体育官方网站 | 长江船运_国内海运_内贸船运_大件海运|运输_船舶运输价格_钢材船运_内河运输_风电甲板船_游艇运输_航运货代电话_上海交航船运 | 废气处理_废气处理设备_工业废气处理_江苏龙泰环保设备制造有限公司 | 上海赞永| 硫化罐-胶管硫化罐-山东鑫泰鑫智能装备有限公司 | 泰来华顿液氮罐,美国MVE液氮罐,自增压液氮罐,定制液氮生物容器,进口杜瓦瓶-上海京灿精密机械有限公司 | 【MBA备考网】-2024年工商管理硕士MBA院校/报考条件/培训/考试科目/提前面试/考试/学费-MBA备考网 | 超声波成孔成槽质量检测仪-压浆机-桥梁预应力智能张拉设备-上海硕冠检测设备有限公司 | 刺绳_刀片刺网_刺丝滚笼_不锈钢刺绳生产厂家_安平县浩荣金属丝网制品有限公司-安平县浩荣金属丝网制品有限公司 | 蒸汽吸附分析仪-进口水分活度仪|康宝百科 |