自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(303)
  • 收藏
  • 关注

原创 C2ComponentStore

接口定义(Google AOSP,抽象类)。:厂商实现(Qualcomm,继承并实现 C2ComponentStore,用于硬件 codec)。其他厂商(联发科 MTK、三星 Exynos 等)也会有自己的或,逻辑类似。面向 HAL,封装 AIDL/HIDL,提供 API 给 framework 使用。就像「钥匙」,能打开 HAL 的 codec 工厂和组件。CCodec面向 Stagefright/MediaCodec 层,是 Codec2.0 的插件。内部依赖去真正调用 HAL。

2025-08-21 22:29:32 832

原创 OMX_UseBuffer和OMX_AllocateBuffer的区别

你(客户端)分配内存,然后交给 OMX 使用。OMX 组件自己分配内存,你只拿到指针。OMX 自己调用malloc或 ION(甚至 gralloc)来分配内存你只拿到 buffer header,内部 buffer 归组件所有你先分配好内存(如malloc()),然后告诉 OMX 用这块内存组件不会再调用自己的分配器,而是直接使用你提供的 buffer使用让事情简单,使用提高性能和灵活性,但你要管理好 buffer 生命周期与内存属性。可被 DMA 或 IOMMU 访问(ION 或物理地址)

2025-08-06 08:19:23 549

原创 IntraRefreshVOP是什么

IntraRefreshVOP 是一种特殊的帧内刷新方式,通常用于 MPEG-4 或特定硬件平台上,能在不插入完整 I 帧的前提下刷新一部分帧内容为帧内编码,从而达到节省码率和提升抗误码能力的目的。如你使用的是 Qualcomm 平台,并看到这个参数出现在 HAL 或 OpenMAX 中,可能是历史兼容逻辑或者平台特定优化路径。

2025-08-06 08:07:08 408

原创 QOMX_INDEXEXTRADATATYPE.nIndex

中的一些枚举值,这些值用于配置视频编码器在每帧输出中附带的,以便后续模块(如帧处理器、播放器、网络传输等)可以获取更多关于帧的信息。这些是(QOMX - Qualcomm OMX),在使用 Qualcomm 视频编码器(如 Snapdragon 平台)时非常常见。

2025-08-06 07:58:15 638

原创 OMX_IndexParamVideoIntraRefresh(output port)

帧内刷新是一种视频压缩技术,用于替代频繁插入完整的 I 帧,以降低码率波动,同时还能让码流具备较好的错误恢复能力(例如在网络丢包时)。编码器按照固定顺序周期性地将一些宏块(macroblocks)刷新为帧内编码(类似于局部 I 帧)。:通常是视频编码器的输出端口(即 compressed stream output)。综合使用两种策略,有更强的鲁棒性,但可能稍微增加编码复杂度。编码器根据图像内容或错误概率判断哪些宏块需要帧内刷新。枚举值),用于配置视频编码器的。:指定帧内刷新方式,下面详细解释。

2025-08-06 07:46:17 317

原创 Default node,Bypassable node,Inplace node

这几个术语(Default Node、Bypassable Node、Inplace Node)是指。

2025-07-23 09:58:26 383

原创 使用错误的 gralloc usage flag甚至会掉帧

Gralloc(Graphics Allocation)是 Android HAL 中用于 GPU/Camera/Display/Codec 等模块分配图形 buffer 的服务。这些 buffer 的用途千差万别,所以需要使用一组标志()告诉 gralloc:谁会访问这个 buffer(CPU 还是 GPU 还是硬件 codec)?怎么访问(读?写?频繁?偶尔?是否需要物理连续内存?是否用于 DMA?缺少正确的。

2025-07-23 09:36:05 399

原创 CHI定制

Pipeline 决定了一帧图像是怎么被处理的,比如:是否经过 IPE / BPS / FD / JPEG 节点是否分成多个输出路径(例如 Preview + Snapshot)

2025-07-23 08:38:54 381

原创 多camera同步

层级同步目标实现机制Sensor 层同步快门采集HAL Session 层同步 Request同步提交、GroupID、DeferThreadCHI Usecase 层同步结果处理pipeline join、统一 output 拼接pacer/follower 模型虽然是来自 display,但它的思想在 camera 中同样存在,只是换了名字和实现机制。

2025-07-23 08:33:44 878

原创 compare_exchange_weak详解

对于类型的变量atomic_var特点内容功能CAS(Compare And Swap):相等就替换类型weak允许虚假失败,适合 retry 循环关键参数expected是传引用,会在失败时被更新用途lock-free 数据结构(栈、队列、哈希表)和锁对比更高性能、更复杂、更容易出错常见错误忘了处理 expected 被修改、忽视内存序影响会自动更新expected// 读当前 head!// CAS 尝试替换 head为什么不重新load()也可以继续工作?

2025-06-26 10:54:16 955

原创 C++内存序memory_order

C++ 原子操作提供,分别控制编译器和 CPU 如何对内存操作进行重排序优化,确保并发程序在多线程之间的行为可控、正确。

2025-06-25 14:21:26 496

原创 std::atomic_flag实现自旋锁

代码解释:这段代码实现了一个简单的自旋锁(spinlock),其中用到了,它是 C++ 提供的最轻量级的原子类型之一,专门用于实现自旋锁等低级同步原语。

2025-06-25 14:06:30 189

原创 两段快排代码

注意其中splice函数的作用:转移元素。

2025-06-18 16:33:16 175

原创 对future,promise,async,packaged_task的彻底理解

future的引入是为了解决thread并不提供直接接收返回值的机制的问题。的设计理念是:只负责调度和执行线程函数,不负责管理其结果。所以,如果你想要线程函数返回值,你需要使用 std::future配合 std::async或 std::promise来实现。

2025-06-18 10:48:13 331

原创 为什么 C++ 的 const 成员函数也要加锁?mutable 的使用详解

如果另一个线程正在调用 push(),你这边的 empty() 就可能访问到未同步的状态,从而导致数据竞争、未定义行为。// ✅ mutable 允许在 const 函数中加锁。std::mutex 是可变状态,需要 mutable 才能在 const 函数里使用;C++ 官方文档:mutable、std::mutex、std::lock_guard。你在 const 成员函数里调用它会报错,因为你不能修改非 mutable 成员。std::mutex::lock() 是非 const 的成员函数;

2025-06-18 10:00:49 466

原创 atomic的使用例子

这种情况下可以代替Mutex的使用(注释掉的部分)

2025-06-17 15:51:55 107

原创 深入理解 std::thread 参数传递中的引用问题:左值、右值、万能引用与 std::forward 的背后

深入理解 std::thread 参数传递中的引用问题:左值、右值、万能引用与 std::forward 的背后。std::move 是强制右值,std::forward 是条件转发。std::thread 默认复制参数,传引用要用 std::ref。std::ref 和 std::forward 的实际意义。

2025-06-17 14:54:59 326

原创 线程函数传参的陷阱

以上这个代码的问题解释如下:这是一个。

2025-06-17 14:38:50 610

原创 td::thread my_thread(background_task()); std::thread my_thread((background_task()));的区别

写法实际含义是否正确声明了一个函数❌ 错误调用函数并传给✅ 正确花括号方式,避免解析歧义✅ 正确。

2025-06-17 11:20:23 144

原创 多线程协作问题(面试问题)

目标是使用三个线程,让它们依次打印数字 1、2、3,并且循环这个过程。今天才知道,之前某司面试的时候我根本没写对。

2025-06-11 15:05:14 94

原创 FrameLength和Shutter

项目说明Shutter 单位✅ 行(lines)LineTime 单位✅ 时间,= LineLength / PCLK✅ 就是总曝光时间FrameLength = Shutter 是否可行?❌ 不推荐:没有 margin 会导致读取问题实际做法。

2025-06-06 09:27:19 159

原创 erase-remove idiom介绍

lists是一个vector类型的变量。remove_if。

2025-06-03 10:52:04 155

原创 unordered_map的遍历方法

注意strings的类型不是指针。

2025-06-01 09:06:16 161

原创 unordered_map增加元素的接口学习

方法会自动创建 key 吗?是否覆盖已有 key?是否构造 value?推荐用途✅ 是✅ 是✅ 默认构造后赋值简洁更新或插入❌ 否❌ 否✅ 构造后判断仅插入❌ 否❌ 否✅ 直接构造原地插入性能更优❌ 否❌ 否✅ 仅必要时构造高效插入。

2025-06-01 08:42:41 405

原创 gralloc的layer count字段

项目行为gralloc 分配时设置GPU/Display HAL 处理按层访问内存、分别渲染、或者合成Camera HAL 处理多帧捕捉,按 layer 拆开处理本质:layer count > 1 只是一种优化手段,让一次分配的内存能承载更多数据,减少多次分配和管理的开销。属性来源说明layerCountAOSP 原生表示一个 buffer 包含几个图层(非帧数)高通是否定制否(字段原生支持),但可能有定制用法会结合使用场景(如 Camera、VR)做一些定制处理常见用途。

2025-04-29 11:27:58 784

原创 __iomem不能解引用(deref)

为什么不能直接 ?因为 MMIO 区域可能:访问延迟:不像 RAM,可以缓存 + 快速访问副作用强:写入某寄存器会触发中断、DMA 等不支持缓存 / 缓冲操作 会加上 + ,确保顺序和正确性

2025-04-21 16:54:58 183

原创 MMIO、IOMAP 和 IOMMU 总结

MMIO 是将外设的寄存器映射到内存地址空间中的一种机制,使得 CPU 可以像读写内存一样访问硬件寄存器。ioremap()是 Linux 内核提供的一个函数,用于将 MMIO 物理地址映射到内核虚拟地址空间,让驱动能用指针读写设备寄存器。IOMMU 是为设备提供地址转换的 MMU,作用是在设备访问内存(DMA)时,将其使用的虚拟地址(IOVA)翻译为实际的物理地址(PA)。

2025-04-21 16:46:06 873

原创 volatile的进一步深入理解

特性volatile/ 加锁防编译器优化✅ 是✅ 是防 CPU 重排序❌ 否✅ 可选(acquire 等)保证原子性❌ 否✅ 是多线程下安全⚠️ 有条件✅ 是驱动开发适用✅ 非常适合❌ 不适合。

2025-04-18 17:06:33 299

原创 volatile 和 memory barrier 的组合用法

volatile是给编译器的提示,memory barrier 是给CPU的命令。“写完再标记”“先设寄存器 A,再设寄存器 B”“先检查条件,再做动作”

2025-04-18 16:55:18 451

原创 volatile再深入

避免编译器对某个变量的访问进行“优化缓存”,强制每次都从内存读取。上面这段代码中,如果没有volatile,编译器可能会这样优化:你一直没改变flag,那我只读取一次好了,放在寄存器里一直用。结果如果别的线程或硬件中断在后台改变了 flag 的值,主线程永远也看不到,程序就卡死了。加了volatile,就告诉编译器:别优化这个变量,每次循环都从内存重新读一次!问题答案为什么对地址加volatile?告诉编译器“这个地址值不能缓存,每次都得真的访问”如果不加会怎样?

2025-04-18 16:48:11 949

原创 DMA Pipeline深入理解

在高通的里,所有输出到显示器或内存的图像数据都需要经过这样一个路径。

2025-04-17 09:39:29 471

原创 Pipeline更多理解

Pipe 类型用途VIGVideo Image Generator:用于图层显示,支持 scaling、rotationRGB简单图层显示,较低优先级DMA主要用于 writeback / WFD / composition output,即从 framebuffer 输出到外部设备(或 memory)Cursor小图层,用于显示指针等很可能是:分别用于主屏、仪表、虚拟显示的输出路径或者用于不同的 display 去做 GPU_TARGET / writeback 的拷贝你看到的意思。

2025-04-16 18:04:42 885

原创 Dual-Pipe Split 合成模式

大尺寸画面会在必要时被拆分成“左/右两半”,分别交给两个 pipeline 合成和输出,这叫Dual-Pipe Split(左右分屏合成),可以显著提升大分辨率下的效率和性能。

2025-04-16 17:51:25 309

原创 HWDeviceDRM的三个子类,HWPeripheralDRM HWTVDRM HWVirtualDRM

/ 抽象的 DRM 显示设备接口protected:...// 主屏实现// 额外支持 panel boot、partial update、brightness、Qsync 等// HDMI/DP 实现// 支持 EDID、HDCP、可拔插、色彩空间切换// 虚拟屏实现// 不接 connector,主要为视频输出或投屏用途子类用途典型连接方式特征主屏幕MIPI DSIpanel 固定、默认开机、支持 brightnessHWTVDRM外接屏HDMI / DP。

2025-04-16 17:33:46 692

原创 display的一些学习记录

今天突然一下子反应过来,Virtual Display是依赖于CWB的。所以DISABLE_VIRTUAL_DISPLAY这个是我自己反应过来以后才去寻找证据,得到印证的。3. 说明之前ScreenRecord只能走GPU合成路径。2.目前的配置,我们永远不可能从HWC得到output layer。后续初始化 cluster 屏(SDM id = 57)负责初始化主屏(SDM id = 54)从Log里总结的话,

2025-04-16 17:09:56 445

原创 Node 处理 request 的过程中,都会更新哪些 metadata 和 property

用于描述帧状态、控制参数、处理结果等是随 request 流动的结构,通常是,每一帧一份属于 HAL3 metadata 树的组成部分是 CamX 内部定义的一种帧级别的轻量信息块不一定会传到上层,但用于 Node 之间的同步和依赖判断通常以定义,和配套使用类型举例发布方式目的MetadataAE 状态,曝光时间,AF 状态提供给上层、下游模块Propertyframe 处理状态,内部依赖标记,frame group info用于 CamX 内部节点依赖调度。

2025-04-10 17:02:32 917

原创 DeferredRequestQueue依赖更新流程

找出所有“准备好处理”的节点(依赖满足),并将其投递给线程池去执行。同时支持 preemption(抢占)机制。功能块说明preemption 检查可跳过非关键节点的依赖(提高灵活性)依赖检查通过把节点转移到 readyNodes分发 ready 节点投递到线程池异步执行memory 管理小心释放链表节点本身,保留 dependency 本体直到执行完成—— 这是CamX 中关键的依赖更新入口函数,但它并不是直接去遍历,而是走了一条更“优化”的路:它用一个依赖映射表来快速找到那些受影响的。

2025-04-10 15:49:09 1126

原创 fusion场景分析

概念说明普通拍照是否做 Fusion视场景而定,夜景 / HDR 会做ZSL 和 MFNR 的关系ZSL 提供多帧,MFNR 处理多帧picking 的参数控制从 ZSL buffer 里挑多少帧参与 fusionFusion 动作在哪发生Chi Node 里的 MFNR/HDR/Fusion node,或 ISP pipeline。

2025-04-10 09:12:58 608

原创 一行代码引出来的学习

在 Android 相机 HAL 中,metadata(元数据)系统用来传递各种参数,比如:ISO、快门、AWB 状态等 —— 都是标准 tag(系统预定义)厂商也可以自定义 metadata 字段 ——这就是 Vendor Tag这段代码的作用是从 vendor tag 系统中查找这个自定义字段的 ID,后续用来在 CameraMetadata 中读取/写入多摄帧率匹配信息。接下来从同步帧率(FPS Match)入手,学习一下两个sensor需要同步的一些设置:在双摄 / 多摄场景。

2025-04-10 09:00:02 725

原创 EV值澄清

EV 是一个数值,用来衡量特定组合下的曝光条件N是光圈值(f-number)t是曝光时间(秒)

2025-04-09 17:41:38 614

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除