Android相機API2,基于GLSurfaceView+SurfaceTexture實現相機預覽,集成的相機算法采用GPU方案,簡要說明

Android相機API2,基于GLSurfaceView+SurfaceTexture實現相機預覽,集成的相機算法采用GPU方案,簡要流程如下(不疊加相機算法的預覽顯示流程也大體如此,只是去掉了算法部分):

進入相機:

1,新建實現了GLSurfaceView.Renderer接口的自定義類CameraRenderer,初始化GLSurfaceView,將兩者綁定在一起,GLSurfaceView作為View組件來顯示相機預覽;

相機啟動:

1,在起預覽配流時,創建SurfaceTexture,用它來接收相機預覽數據;

OpenGL初始化:

1,在Surface創建時會觸發回調CameraRenderer.onSurfaceCreated,在里面獲取當前的GLSurfaceView的EGLContext,并將其傳遞給相機算法,使得允許相機算法和GLSurfaceView共享GPU資源;

循環渲染:

1,當有預覽幀來時,觸發回調SurfaceTexture.OnFrameAvailable,在里面調用glSurfaceView.requestRender進行重繪;

2,glSurfaceView.requestRender中釋放鎖喚醒GLThread的線程執行,里面循環檢查是否需要進行繪制,需要的話就調CameraRenderer.onDrawFrame;

3,onDrawFrame中調surfaceTexture.updateTexImage,將最新的相機預覽幀數據更新到SurfaceTexture內部的紋理中;

4,調算法處理接口,輸入紋理ID,輸出也是紋理ID;

5,將這個紋理ID作為數據源,繪制到GLSurfaceView上,至此預覽完成這一幀顯示;后續重復“循環渲染”的步驟;

總結:

1,創建GLSurfaceView,這個作為View組件顯示相機預覽;

2,在相機起預覽配流時,創建SurfaceTexture,用來接收相機預覽數據;

3,OpenGL要初始化;

4,最后就是循環繪制的流程,當有預覽幀來時,觸發回調SurfaceTexture.OnFrameAvailable,在里面觸發重繪,更新最新預覽數據到SurfaceTexture內部紋理中,將紋理ID輸入算法進行處理,算法處理后輸出更新后的紋理ID,最后將這個紋理ID作為數據源繪制到GLSurfaceView上;

UML類圖如下。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/96649.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/96649.shtml
英文地址,請注明出處:http://en.pswp.cn/web/96649.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[code-review] 日志機制 | `LOG_LEVEL`

第6章:日志機制(調試) 歡迎來到我們了解ChatGPT-CodeReview項目的最后一章 在第5章:文件過濾邏輯(范圍管理器)中,我們學習了機器人如何智能地決定哪些文件需要發送給AI審查。 但一旦機器人開…

n8n工作流平臺入門學習指南

目錄 1、基礎背景 2、核心概念 2.1 節點(Nodes) 2.2 連接(Connections) 2.3 工作流(Workflows) 3、常用節點說明 4、基于Docker快速部署 5、學習資料 6、常見問題 強烈推薦,大家不懂的直接問:N8N大師(GPT),科…

【Oracle經驗分享】字符串拼接過長問題的解決方案 —— 巧用 XMLAGG

📑 目錄🔍 問題背景?? 常見拼接方式的限制💡 XMLAGG 的解決方案📝 示例代碼📌 注意事項? 總結🔍 問題背景在日常開發中,我們經常需要把多行數據拼接成一個字符串。例如將某個字段的多條記錄拼…

AJAX入門-URL、參數查詢、案例查詢

本系列可作為前端學習系列的筆記,代碼的運行環境是在VS code中,小編會將代碼復制下來,大家復制下來就可以練習了,方便大家學習。 HTML、CSS、JavaScript系列文章 已經收錄在前端專欄,有需要的寶寶們可以點擊前端專欄查…

【SpringBoot】24 核心功能 - Web開發原理 -Spring Boot 異常處理機制

前言 在開發 Web 應用程序時,異常處理是一個至關重要的部分。Spring Boot 提供了一套強大的異常處理機制,使得開發者能夠輕松地處理和響應各種異常情況。本文將深入探討 Spring Boot 中的異常處理機制,包括默認的錯誤處理規則、定制錯誤處理邏…

JVM第一部分

PC寄存器:存儲的是數字 0, 3, 6, 10, 17 這樣的字節碼偏移量。 LineNumberTable:是一個映射表,它將上述的偏移量“翻譯”成我們程序員能看懂的源代碼行號。 JVM堆 JVM堆由兩部分組成:年輕代老年代 年輕代包括三部分:ed…

IDEA使用Maven和MyBatis簡化數據庫連接(配置篇)

目錄: Maven:簡化項目構建 MyBatis:簡化Jdbc Maven:是一款項目構建與依賴管理工具,核心作用是自動化項目編譯、打包等流程,并統一管理項目所需的第三方 Jar 包(如 MyBatis 的 Jar 包)。 MyBatis&#xf…

Java 泛型詳解:從基礎到高級應用

目錄 一、泛型的基本概念 為什么需要泛型? 二、泛型類與泛型接口 【1】定義泛型類 【2】定義泛型接口 三、泛型方法 四、泛型通配符 【1】無界通配符(?) 【2】上界通配符(? extends T) 【3】下界通配符&am…

嵌入式 Linux 啟動機制全解析:從 Boot 到 Rootfs

🚀 嵌入式 Linux 啟動機制全解析:從 Boot 到 Rootfs 在嵌入式系統中,Linux 的啟動流程不僅是內核加載的過程,更是 bootloader、設備樹、初始根文件系統、啟動配置文件等多個組件協同工作的結果。不同的文件系統和啟動方式會影響系…

Python 操作Office的PPT、Word、Excel,同時兼容WPS

文章目錄概要一、環境準備1. 安裝必要的Python庫2. 系統要求二、核心實現原理1. 檢測已安裝的Office類型2. 初始化對應的應用程序三、完整代碼實現四、使用示例五、WPS兼容處理詳解1. 形狀和文本框訪問兼容處理2. PPT圖片粘貼兼容處理3. 資源釋放的重要性六、圖片操作實現詳解1…

ISP之DHCPv6-PD(前綴代理)為用戶下發前綴

一、組網需求家庭用戶要使用IPv6地址接入互聯網。為方便用戶接入,運營商使用DHCPv6-PD的方式給家用路由器下發IPv6地址前綴,用戶路由器LAN側不需要手工指定鏈路的IPv6地址前綴,家用路由器可以給用戶終端自動配置IPv6地址和其它網絡參數。本例…

Django全棧班v1.04 Python基礎語法 20250912 上午

rm 刪除命令 注意:刪除操作是不可逆的,一旦刪除就無法撤銷,請謹慎使用。刪除文件: rm file.py遞歸刪除目錄: rm -r demo/強制刪除: rm -f file.py交互式刪除: rm -i *.txt課程定位 “學習Python…

Java 21 虛擬線程高并發落地:中間件適配、場景匹配與細節優化的技術實踐

作為 Java 21 的核心特性,虛擬線程(Virtual Thread)憑借 “用戶態調度”“輕量級資源占用” 的優勢,成為高并發場景下線程模型優化的重要方向。但在實際落地中,不少團隊會陷入 “技術用了卻沒效果” 的困境 ——QPS 提升有限、中間件調用阻塞、CPU 使用率異常升高。 本文…

數據庫在并發訪問時,不同隔離級別下臟讀幻讀問題

數據庫隔離級別并非安裝后就固定,絕大多數主流數據庫(如MySQL、PostgreSQL、SQL Server)都支持動態調整和運行中自定義,具體調整范圍可分為全局、會話和語句三個層級。 全局級別調整:修改數據庫配置文件(如…

JVM從入門到實戰:從字節碼組成、類生命周期到雙親委派及打破雙親委派機制

摘要:本文圍繞 Java 字節碼與類加載機制展開,詳解字節碼文件組成、類的生命周期,介紹類加載器分類、雙親委派機制及打破該機制的方式,還闡述了線程上下文類加載器與 SPI 機制在 JDBC 驅動加載中的應用,幫助深入理解 Ja…

多源最短路(Floyd算法

多源最短路簡介 多源最短路算法用于解決圖中任意兩節點間最短路徑的問題,廣泛應用于交通網絡、社交關系分析、路由優化等場景。與單源最短路(如Dijkstra)不同,它一次性計算所有節點對的最短距離,適合需要全局路徑規劃的…

【攻防實戰】記一次攻防實戰全流程

那天我向眾神祈禱,最后回答我的卻只有掙扎十年依舊不甘的自己!成功究竟是饋贈還是償還。 前言 網絡安全技術學習,承認??的弱點不是丑事,只有對原理了然于?,才能突破更多的限制。 擁有快速學習能力的安全研究員&…

Anaconda配置環境變量和鏡像

Anaconda配置環境變量和鏡像 下載失敗就是開了梯子 Anaconda 作用:包管理(集中,有序)和環境管理(版本切換)使用conda命令對虛擬環境創建、刪除自帶python解釋器pip(python自帶的包管理工具&…

給定單詞倒排

實現代碼&#xff1a;public static void main(String[] args) {Scanner scanner new Scanner(System.in);// 輸入的字符串String input scanner.nextLine();// 存儲單詞List<String> words new ArrayList<>();// 存儲當前單詞StringBuilder currentWord new S…

IO進程——進程引入、進程函數接口

一、引入1、進程&程序1.1 程序編譯好的可執行的文件存放在磁盤上的指令和數據的有序集合&#xff08;文件&#xff09;程序是靜態的&#xff0c;沒有任何執行的概念1.2 進程一個獨立的可調度的任務執行一個程序所分配的資源的總稱進程是程序執行的一次過程進程是動態的&…