MTK-Android12-13 Camera2 設置默認視頻畫質功能實現

MTK-Android12-13 Camera2 設置默認視頻畫質功能實現
場景:部分客戶使用自己的mipi相機安裝到我們主板上,最大分辨率為1280720,但是視頻畫質默認的是640480。實際場景中,在默認視頻分辨率情況下拍出來的視頻比較模糊、預覽也不清晰
解決方案:默認最大分辨率,這樣拍攝的視頻效果基本滿足需求

文章目錄

  • 需求
  • 參考資料
  • 解決方案
    • 修改文件
    • 解決方案
  • 思路
    • 追蹤源碼
    • 源碼分析
  • 總結


需求

默認視頻畫質大小最大,默認為1280*720,如下實際默認的畫質圖。
在這里插入圖片描述

參考資料

實際發現網上參考資料基本沒有,最終還是需要死啃源碼,在源碼里面找答案。
Android 13.0 MTK Camera2 設置默認拍照尺寸功能實現

這里自己從兩方面參考資料:源碼里面找視頻畫質相關代碼+參考拍照時候的業務邏輯,特別是默認拍照尺寸的業務邏輯有一些借鑒意義,實際上默認的代碼思路是一樣的。 可以相互對比來看,分析邏輯和代碼。

解決方案

修改文件

路徑:

\vendor\mediatek\proprietary\packages\apps\Camera2\feature\setting\videoquality\src\com\mediatek\camera\feature\setting\videoquality\VideoQualityCaptureRequestConfig.java

解決方案

最終分析代碼,發現默認分辨率邏輯是獲取視頻默認質量地方修改,默認選擇支持分辨率第二大的選項,現在默認index=0,屏蔽掉 defaultIndex=1 的邏輯

   /*** Get the max size as default value of video quality.* @return getDefaultValue.*/private String getDefaultQuality() {int defaultIndex = 0;/*if (mVideoQuality.getSupportedPlatformValues().size() > QUALITY_INDEX_NUMBER) {defaultIndex = 1;}*/String defaultSize = mVideoQuality.getSupportedPlatformValues().get(defaultIndex);return defaultSize;}

思路

  • 先從界面開始,找到對應的文件,如何找到對應的界面? 那就adb 來實現,找其中的Fragment【Camera2
    源碼以前跟蹤過,就一個Activity】,所以核心是找到對應的Fragment
  • 假使找到了對應的Fragment,再從源碼里面找到對應的源碼位置和相關聯文件,研習源碼,看邏輯和業務。
    如下,圖片是自己的思路,方便大家提供一個類似的解決問題思路。

追蹤源碼

在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述
跟蹤到這里,我們基本上找到這個類在源碼里面的位置了,那我們就跟蹤過去,看看都有啥?
在這里插入圖片描述

找到這個目錄,基本心理有底了,這里不就是全部跟quality(質量)相關的源碼了嘛。

源碼分析

大家可以看一下videoquality 目錄下面每一個java 文件有哪些內容,源碼文件都不大,邏輯也不復雜的。然后整理分類下部分 類 有哪些內容,做什么的。
在這里插入圖片描述

源碼文件類描述
RadioPreferencevideo quality radio preference.
VideoQualityVideoQuality setting item
VideoQualityCaptureRequestConfigConfigure video quality in capture request in camera api2.
VideoQualityEntryVideo quality entry.
VideoQualityHelperVideo quality helper to provide util methods.
VideoQualitySelectorVideo quality selector.
VideoQualitySettingViewVideo quality setting view.

上面分析了每個源碼的類注釋,其實也已經描述的非常明白了的,每個類文件有哪些作用等。 處于對源碼的敏感,以前經驗告訴自己:Camera2 API 實現相機邏輯、參數設置,都是基于session,設置參數 Capture 來實現的。 正好這里 有一個類 VideoQualityCaptureRequestConfig.java 類。再看一下每個方法,居然發現了一個方法,如下:

   /*** Get the max size as default value of video quality.* @return getDefaultValue.*/private String getDefaultQuality() {int defaultIndex = 0;if (mVideoQuality.getSupportedPlatformValues().size() > QUALITY_INDEX_NUMBER) {defaultIndex = 1;}String defaultSize = mVideoQuality.getSupportedPlatformValues().get(defaultIndex);return defaultSize;}

這就解釋了,為啥每次都是默認第二個選中,那么 屏蔽到 默認選中第二,defaultIndex=1 這個邏輯改成默認第一個不就行嘛,實際確實如此,默認defaultIndex 為0 。 編譯、打包項目源碼生成固件,問題解決。

總結

  • 對比圖片默認拍攝大小,邏輯一樣的,都是在獲取默認分辨率的地方,進行修改。 如下圖 足以說明 拍照和錄像默認質量、分辨率
    其實邏輯一樣的,修改默認值即可。

在這里插入圖片描述

  • 設置默認值的這個過程中,有很多邏輯的,比如setValue , 拍照和錄屏 也是基本一樣的思路,代碼邏輯。 這里不是重點,暫不討論。深究其它部分這里就不參與了。

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

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

相關文章

QtDBus模塊功能及架構解析

Qt 6.0 中的 QtDBus 模塊是一個用于進程間通信(IPC)的核心模塊,它基于 D-Bus 協議實現。D-Bus 是一種在 Linux 和其他類 Unix 系統上廣泛使用的消息總線系統,允許應用程序和服務相互通信。 一、QtDBus模塊主要功能: 1…

Spring AI 項目實戰(六):Spring Boot + AI + DeepSeek 打造智能成語接龍游戲(附完整源碼)

系列文章 序號文章名稱1Spring AI 項目實戰(一):Spring AI 核心模塊入門2Spring AI 項目實戰(二):Spring Boot + AI + DeepSeek 深度實戰(附完整源碼)3Spring AI 項目實戰(三):Spring Boot + AI + DeepSeek 打造智能客服系統(附完整源碼)4Spring AI 項目實戰(四…

【HarmonyOS 5】教育開發實踐詳解以及詳細代碼案例

以下是基于 ?HarmonyOS 5? 的教育應用開發實踐詳解及核心代碼案例,結合分布式能力與教育場景需求設計: 一、教育應用核心開發技術 ?ArkTS聲明式UI? 使用 State 管理學習進度狀態,LocalStorageProp 實現跨頁面數據同步(如課程…

【鴻蒙在 ETS (Extendable TypeScript) 中創建多級目錄或文件,可以使用鴻蒙的文件系統 API】

鴻蒙在 ETS (Extendable TypeScript) 中創建多級目錄或文件,可以使用鴻蒙的文件系統 API。 // 導入需要的模塊 import fs from ohos.file.fs;const TAG"Index" Entry Component struct Index {State message: string Hello World;build() {Row() {Colum…

11. vue pinia 和react redux、jotai對比

對比 Vue 的 Pinia,和 React 的 Redux、Jotai,分中英文簡要介紹、特性、底層原理、使用場景。 簡單介紹 1.1 Pinia(Vue) ? 英文:Pinia is the official state management library for Vue 3, designed to be simple…

OPenCV CUDA模塊目標檢測----- HOG 特征提取和目標檢測類cv::cuda::HOG

操作系統:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 編程語言:C11 算法描述 cv::cuda::HOG 是 OpenCV 的 CUDA 模塊中對 HOG 特征提取和目標檢測 提供的 GPU 實現。它與 CPU 版本的 cv::HOGDescriptor 類似,但利…

(一)單例模式

一、前言 單例模式屬于六大創建型模式,即在軟件設計過程中,主要關注創建對象的結果,并不關心創建對象的過程及細節。創建型設計模式將類對象的實例化過程進行抽象化接口設計,從而隱藏了類對象的實例是如何被創建的,封裝了軟件系統使用的具體對象類型。 六大創建型模式包括…

【QT】QT多語言切換

QT多語言切換 1.創建任意一個項目2. 利用lupdate(language update)工具生成.ts文件2.1 在工程中的.pro文件中指定.ts文件要存放的位置2.2 選擇工具--》外部--》Qt語言家--》更新翻譯 3. 利用 lrelease(Language Release)將 .ts 文…

【差分】詳解二維前綴和和差分問題

文章目錄 1. 二維前綴和2. 公式推導3. LeetCode 304 二維區域和檢索 - 矩陣不可變3.1 304 二維區域和檢索 - 矩陣不可變3.2 LeetCode 1139 最大的以 1 為邊界的正方形 4. 二維差分問題5. 二維差分的原理以及差分數組計算6. 題目6.1 牛客二維差分6.2 LeetCode 2132. 用郵票貼滿網…

Unity 大型手游碰撞性能優化指南

Unity 大型手游碰撞性能優化指南 版本: 2.1 作者: Unity性能優化團隊 語言: 中文 前言 在Unity大型手游的開發征途中,碰撞檢測如同一位隱形的舞者,它在游戲的物理世界中賦予物體交互的靈魂。然而,當這位舞者的舞步變得繁復冗余時,便會悄然消耗寶貴的計算資源,導致幀率下…

【hive】函數集錦:窗口函數、列轉行、日期函數

窗口函數 https://www.cnblogs.com/Uni-Hoang/p/17411313.html <窗口函數> OVER ([PARTITION BY <分組列> [, <分組列>...]][ORDER BY <排序列> [ASC | DESC] [, <排序列> [ASC | DESC]]...][<rows or range clause>]) )窗口函數主要是…

DAY 25 異常處理

目錄 DAY 25 異常處理1.異常處理機制2.debug過程中的各類報錯3.try-except機制4.try-except-else-finally機制作業&#xff1a;理解今日的內容即可&#xff0c;可以檢查自己過去借助ai寫的代碼是否帶有try-except機制&#xff0c;以后可以嘗試采用這類寫法增加代碼健壯性。 DAY…

幾何繪圖與三角函數計算應用

幾何繪圖與三角函數計算應用 設計思路 左側為繪圖控制面板&#xff0c;右側為繪圖區域支持繪制點、線、矩形、圓、多邊形等基本幾何圖形實現三角函數計算器&#xff08;正弦、余弦、正切等&#xff09;包含角度/弧度切換和常用數學常數歷史記錄功能保存用戶繪圖 完整實現代碼…

CSS 定位:原理 + 場景 + 示例全解析

一. 什么是CSS定位? CSS中的position屬性用于設置元素的定位方式,它決定了元素在頁面中的"定位行為" 為什么需要定位? 常規布局(如 display: block)適用于主結構 定位適用于浮動按鈕,彈出層,粘性標題等場景幫助我們精確控制元素在頁面中的位置 二. 定位類型全…

GESP 二級復習參考 A

本教程完整包含&#xff1a; 5000字詳細知識點解析 36個Python/C雙語言示例 15個GESP真題及模擬題 8張專業圖表和流程圖 # C編程二級標準終極教程## 一、計算機存儲系統深度解析### 1.1 存儲體系架構 mermaid graph TDA[CPU寄存器] --> B[L1緩存 1-2ns]B --> C[L2緩…

嵌入式面試常問問題

以下內容面向嵌入式/系統方向的初學者與面試備考者,全面梳理了以下幾大板塊,并在每個板塊末尾列出常見的面試問答思路,幫助你既能夯實基礎,又能應對面試挑戰。 一、TCP/IP 協議 1.1 TCP/IP 五層模型概述 鏈路層(Link Layer) 包括網卡驅動、以太網、Wi?Fi、PPP 等。負責…

【人工智能 | 項目開發】Python Flask實現本地AI大模型可視化界面

文末獲取項目源碼。 文章目錄 項目背景項目結構app.py(后端服務)index.html(前端界面)項目運行項目圖示項目源碼項目背景 隨著人工智能技術的快速發展,大語言模型在智能交互領域展現出巨大潛力。本項目基于 Qwen3-1.7B 模型,搭建一個輕量化的智能聊天助手,旨在為用戶提…

【設計模式】1.簡單工廠、工廠、抽象工廠模式

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 以下是 簡單工廠模式、工廠方法模式 和 抽象工廠模式 的 Python 實現與對比&#xff0c;結合代碼示例和實際應用場景說明&#xff1a; 1. 簡單工廠模式&a…

瀏覽器訪問 AWS ECS 上部署的 Docker 容器(監聽 80 端口)

? 一、ECS 服務配置 Dockerfile 確保監聽 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任務定義&#xff08;Task Definition&…

01.SQL語言概述

SQL 語言概述 SQL &#xff08;Structured Query Language&#xff09;結構化査詢語言 1. 關系型數據庫的常見組件 數據庫: database 表的集合&#xff0c;物理上表現為一個目錄表: table&#xff0c;行: row 列: column索引: index視圖: view&#xff0c;虛擬的表存儲過程:…