gralloc usage flags

下面這些示例主要說明了 gralloc usage flags 在圖像處理和多媒體應用中如何影響性能和正確性。讓我們逐個詳細分析每個問題的 根因修復方案,并深入解析 gralloc 標志對 緩存管理數據流 的影響。


? Example 1: 長曝光快照耗時異常

📌 問題描述
  • 癥狀:長曝光快照(long exposure snapshot)在某些內存優化后,拍攝時間異常變長。
  • 根因
    1. 第三方算法 在多個快照幀上執行,耗時約 1.2 秒
    2. Buffer 分配時,生產者和消費者的 gralloc 標志設置不正確,均為:
       
      GRALLOC1_PRODUCER_USAGE_CAMERA
      GRALLOC1_CONSUMER_USAGE_CAMERA
      

      該標志適用于硬件組件(如 ISPGPU)的讀寫,不啟用 CPU 緩存,導致 CPU 訪問緩慢。
    3. 由于 CPU 無法直接利用緩存,每次處理都需要直接從主內存讀取,增加了 1 秒 的延遲。
📌 修復方法
  1. 啟用 CPU 緩存,在 producerconsumer 側分別增加以下標志:
     
    GRALLOC1_PRODUCER_USAGE_CPU_WRITE
    GRALLOC1_CONSUMER_USAGE_CPU_READ
    

    1. 該修改優化了 CPU 對緩沖區的讀寫,減少了 CPU 直接訪問內存的延遲。
📌 技術解析
  • GRALLOC1_PRODUCER_USAGE_CPU_WRITE:允許 CPU 快速寫入緩沖區,避免每次都進行緩慢的直接內存訪問。
  • GRALLOC1_CONSUMER_USAGE_CPU_READ:啟用 CPU 緩存加速,確保消費者(如第三方算法)能快速讀取數據。
  • 緩存管理操作
    • 寫回緩存 (Flush):確保 CPU 寫入數據對其他設備(如 GPUISP)可見。
    • 無效緩存 (Invalidate):使 CPU 能夠讀取其他設備寫入的最新數據。
📌 總結

不正確的 gralloc 標志 會導致 CPU 直接訪問 DDR,性能低下。正確的設置允許 CPU 使用緩存,從而顯著提升圖像處理速度。


? Example 2: CHI 中元數據緩沖區未接收

📌 問題描述
  • 癥狀:在 Camera HAL Interface (CHI) 中無法接收到元數據緩沖區。
  • 根因
    1. 緩存標志未正確設置,導致元數據的 回調 (callback) 延遲。
    2. 超時 (timeout) 發生,導致 usecase 未及時處理緩沖區,回調無法返回數據。
📌 修復方法
  1. 為消費者(CHI)添加以下緩存標志:
     
    GRALLOC1_CONSUMER_USAGE_CPU_READ_OFTEN
    

  2. 該標志允許 CPU 高效地、頻繁地讀取緩沖區數據,確保元數據能及時回傳至 CHI
📌 技術解析
  • 元數據緩沖區 通常是 CPU 讀取的,未設置緩存標志會導致:

    • CPU 直接訪問 DDR,無法利用緩存,數據讀取慢,導致回調超時。
    • 回調機制 依賴于及時讀取的數據,未及時讀取會觸發超時。
  • GRALLOC1_CONSUMER_USAGE_CPU_READ_OFTEN 的作用:

    • 頻繁 CPU 讀取:為 CPU 啟用緩存,適合多次讀取的元數據。
    • 避免超時:確保數據盡快傳遞到 CHI,及時觸發回調。
📌 總結

當 CPU 需要頻繁讀取元數據時,正確設置 CPU_READ_OFTEN 標志可以顯著提高數據讀取速度,避免回調超時。


? Example 3: 視頻錄制出現幀丟失 (Frame Drop)

📌 問題描述
  • 癥狀:在視頻錄制過程中,出現幀丟失,導致錄制的畫面不流暢。
  • 根因
    1. 部分 buffer 處理未使用正確的 gralloc 標志,導致 CPU/GPU 數據交換延遲。
    2. 未正確設置緩存,影響了數據傳輸速度,造成幀緩沖區處理不及時,丟失幀。
📌 修復方法

根據緩沖區的實際使用場景,增加以下 gralloc 標志:

 
GRALLOC1_PRODUCER_USAGE_SW_WRITE_OFTEN
GRALLOC1_CONSUMER_USAGE_SW_READ_OFTEN
GRALLOC1_PRODUCER_USAGE_HW_VIDEO_ENCODER

  • SW_WRITE_OFTEN:允許 CPU 頻繁寫入緩沖區,適用于連續數據寫入(如視頻幀)。
  • SW_READ_OFTEN:允許 CPU 頻繁讀取緩沖區,保證解碼器及時取走數據。
  • HW_VIDEO_ENCODER:指定緩沖區用于硬件視頻編碼,允許高效的數據傳輸。
📌 技術解析
  • CPU/GPU 協作瓶頸
    視頻錄制需要 CPU 將幀數據寫入緩沖區,GPU硬件編碼器 讀取進行編碼,緩沖區訪問需要高效。
  • 緩存優化
    • 寫緩存 (Write-back):確保 CPU 寫入的數據及時同步到 GPU
    • 讀緩存 (Invalidate):保證 CPU 讀取最新的編碼數據,防止數據滯后。
📌 總結

在高實時性場景(如視頻錄制),正確設置 緩存標志 可以避免幀丟失,提升數據傳輸速度和整體性能。


🧐 總結:gralloc usage flags 對性能的影響

  1. CPU 緩存管理

    • 讀緩存 (CPU_READ_OFTEN):提高多次讀取速度,防止數據延遲。
    • 寫緩存 (CPU_WRITE_OFTEN):加速數據寫入,確保多設備之間的數據一致性。
  2. 硬件編碼器 (HW_VIDEO_ENCODER)

    • 啟用硬件視頻加速,適配 GPUDSPISP 等異構設備。
  3. 多設備協作

    • 設置適當的 producerconsumer 標志,確保數據在 CPUGPUDSP 之間高效傳輸,避免延遲和超時。

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

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

相關文章

關于kafka的一些知識總結

Kafka 1. 基本知識 1.1 前置知識 topic表示一個類型/業務的數據的組為方便擴展,提高吞吐率,一個topic分為多個partition。配合分區的設計,提出消費者組的概念,每個消費者并行消費,同時,一個分區的數據&a…

深入理解traceroute命令及其原理

traceroute 是一個網絡診斷工具(Windows上叫tracert),用于顯示數據包從本地主機到遠程主機經過的路由(跳數)。它可以幫助您了解數據包在網絡中的傳輸路徑,以及每跳的延遲情況。這對于網絡故障排除、分析網絡…

Spring 6: 3容器-Ioc

3、容器:IoC IoC 是 Inversion of Control 的簡寫,譯為“控制反轉”,它不是一門技術,而是一種設計思想,是一個重要的面向對象編程法則,能夠指導我們如何設計出松耦合、更優良的程序。 Spring 通過 IoC 容…

git推送代碼相關學習——(一)

推薦去閱讀一下廖老師的git相關的教程https://liaoxuefeng.com/books/git/introduction/index.html 這個系列就來學習一下git操作。 第一步,新建項目 去github中新建一個項目,然后依據項目來進行本地的開發工作。 第二步,拉取項目 git c…

2025年滲透測試面試題總結-某深信服-深藍攻防實驗室(題目+回答)

網絡安全領域各種資源,學習文檔,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各種好玩的項目及好用的工具,歡迎關注。 目錄 深信服-深藍攻防實驗室 一、內網攻擊核心思路(2025版) 1. 攻擊階段分層 2. 最…

JAVA學習*Object類

Object類 Object類是所有類的父類 類中有一些方法(都需要掌握) toString()方法 在學習類的對象的時候有介紹過了,當我們重新給此方法就會打印類與對象的信息 equals()方法 在Java中的比較, 如果左右兩側是基本類型變量&#…

《Operating System Concepts》閱讀筆記:p471-p472

《Operating System Concepts》學習第 37 天,p471-p472 總結,總計 2 頁。 一、技術總結 1.NAS (1)定義 network-attached storage (NAS):Storage accessed from a computer over a network. 雖然平時經常看到 NAS 這個名稱,之…

gonet開源游戲服務器環境配置

1.mysql搭建 搜索mysql-server apt安裝包名 sudo apt search mysql-server 安裝mysql-server sudo apt-get install mysql-server 安裝完成后會,啟動mysql服務及創建系統服務 查看服務狀態 systemctl status mysql.service 使用超級權限登陸mysql sudo mysql 授…

HarmonyOS NEXT(九) :圖形渲染體系

HarmonyOS NEXT(九) :圖形渲染體系 前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,可以分享一下給大家。點擊跳轉到網站。 https://www.captainbed.cn/ccc 文章目錄 HarmonyOS NEXT&#xff0…

網絡安全威脅與防護措施(上)

1. SQL注入(SQL Injection) SQL注入是一種常見的安全漏洞,攻擊者通過在用戶輸入中插入惡意的SQL代碼,從而篡改、操控數據庫,執行未授權的數據庫操作,如查詢、修改、刪除數據,甚至獲取系統控制權…

3.22模擬面試

前端模擬面試(1 年經驗) 面試時長:40-60 分鐘 面試難度:初中級 技術棧:Vue 3、TypeScript、微前端(qiankun)、Webpack/Rspack、Ant Design、組件庫遷移 一、基礎知識 HTML & CSS 介紹一下…

kotlin 函數引用

引言 先確認一下,什么叫做引用 Object obj new Object() //這里的obj就是一個強引用 再確認一個結論: lambda 屬于函數類型對象 。 fun methodResponseResult(msg: String , respo:(Int, String)->Unit){}fun methodRespoResunt(type: Int ,msg: S…

微前端qiankun框架的使用

文章描述 隨著工作時間的增加,發現公司的項目逐漸多了起來,有一個項目比較龐大,是需要集成多個子系統而形成的大項目。其中便是使用微前端的概念qiankun框架來集成其他多個子項目的。接下來,一起來看一下qiankun框架的具體使用方…

基于CVX優化器的儲能電池調峰調頻算法matlab仿真

目錄 1.課題概述 2.系統仿真結果 3.核心程序與模型 4.系統原理簡介 4.1 原理概述 4.2 CVX工具箱概述 5.完整工程文件 1.課題概述 基于CVX優化器的儲能電池調峰調頻算法matlab仿真。CVX 是一種用于求解凸優化問題的強大工具。凸優化問題具有良好的數學性質,能…

回歸——數學公式推導全過程

文章目錄 一、案例引入 二、如何求出正確參數 1. 最速下降法 1)多項式回歸 2)多重回歸 2. 隨機梯度下降法 一、案例引入 以Web廣告和點擊量的關系為例來學習回歸,假設投入的廣告費和點擊量呈現下圖對應關系。 思考:如果花了…

微服務中的服務發現

微服務中的服務發現 什么是服務發現 服務發現是微服務架構中的關鍵機制,用于確定各個微服務的地址。例如,在一個 API Server 服務中,我們可能需要調用 User 服務來處理用戶注冊、登錄和信息查詢,也可能需要 Product 服務來獲取商…

C#與西門子PLC的六大通信庫

C#與西門子PLC的六大通信庫: 一、S7.NET S7.NET是一款開源的S7協議通信庫,支持西門子S7通信。 二、Sharp7 Sharp7與S7.NET一樣,是一款.NET版本的S7通信庫。 三、Snap7 Snap7是一個開源的C通信庫,支持西門子S7通信。 四、Prodave P…

IOS接入微信方法

導入SDK 和配置 SDK 的不做介紹; 1 在IOS 開發者中心 Identifiers 打開‘Associated Domains’ 2 建立一個文件(不帶后綴的)apple-app-site-association, teamid在 IOS 開發者中心的會員找,appid在 xcode里面找 {"applin…

DHCPv6 Stateless Vs Stateful Vs Stateless Stateful

DHCPv6常見配置模式 在 IPv6 網絡中,DHCPv6 的 Stateless(無狀態)、Stateful(有狀態) 和 Stateless + Stateful(混合模式) 是三種常見的配置模式。它們的主要區別在于客戶端如何獲取 IPv6 地址和其他網絡配置信息(如 DNS 服務器)。 Stateless(無狀態)模式 Statele…

HTTPS協議—加密算法和中間攻擊人的博弈

活動發起人小虛竹 想對你說: 這是一個以寫作博客為目的的創作活動,旨在鼓勵大學生博主們挖掘自己的創作潛能,展現自己的寫作才華。如果你是一位熱愛寫作的、想要展現自己創作才華的小伙伴,那么,快來參加吧&#xff01…