setPreviewWindow in camera hal

usb camera HAL层中的 CameraHardware.cpp 分析 USB camera 的 HAL 层 /** Copyright (C) 2010 SpectraCore Technologies ** Author : Venkat Raju ** Email : codredruids@spectracoretech.com ** Initial Code : http://code.google.com/p/android-m912/downloads 阅读详情

1. mPreviewWindow  在hardware/intel/libcamera/CameraHardware.h 中定义

preview_stream_ops_t* mPreviewWindow;
preview_stream_ops_t 定义:
   1. typedef struct preview_stream_ops {
   2.     int (*dequeue_buffer)(struct preview_stream_ops* w,
   3.                           buffer_handle_t** buffer, int *stride);
   4.     int (*enqueue_buffer)(struct preview_stream_ops* w,
   5.                 buffer_handle_t* buffer);
   6.     int (*cancel_buffer)(struct preview_stream_ops* w,
   7.                 buffer_handle_t* buffer);
   8.     int (*set_buffer_count)(struct preview_stream_ops* w, int count);
   9.     int (*set_buffers_geometry)(struct preview_stream_ops* pw,
  10.                 int w, int h, int format);
  11.     int (*set_crop)(struct preview_stream_ops *w,
  12.                 int left, int top, int right, int bottom);
  13.     int (*set_usage)(struct preview_stream_ops* w, int usage);
  14.     int (*set_swap_interval)(struct preview_stream_ops *w, int interval);
  15.     int (*get_min_undequeued_buffer_count)(const struct preview_stream_ops *w,
  16.                 int *count);
  17.     int (*lock_buffer)(struct preview_stream_ops* w,
  18.                 buffer_handle_t* buffer);
  19. } preview_stream_ops_t;

2. 初始化:
# if (mPreviewWindow != 0) {
#         int preview_width, preview_height;
#         mParameters.getPreviewSize(&preview_width, &preview_height);
#         mPreviewWindow->set_buffers_geometry(
#             mPreviewWindow,
#             preview_width,
#             preview_height,
#             HAL_PIXEL_FORMAT_RGB_565);
#     } 



mPreviewWindow->set_buffers_geometry() 在/frameworks/base/services/camera/libcameraservice/CameraHardwareInterface.h 中定义

   1. void initHalPreviewWindow()
   2.     {
   3.         mHalPreviewWindow.nw.cancel_buffer = __cancel_buffer;
   4.         mHalPreviewWindow.nw.lock_buffer = __lock_buffer;
   5.         mHalPreviewWindow.nw.dequeue_buffer = __dequeue_buffer;
   6.         mHalPreviewWindow.nw.enqueue_buffer = __enqueue_buffer;
   7.         mHalPreviewWindow.nw.set_buffer_count = __set_buffer_count;
   8.         mHalPreviewWindow.nw.set_buffers_geometry = __set_buffers_geometry;
   9.         mHalPreviewWindow.nw.set_crop = __set_crop;
  10.         mHalPreviewWindow.nw.set_usage = __set_usage;
  11.         mHalPreviewWindow.nw.set_swap_interval = __set_swap_interval;
  12.

  13.         mHalPreviewWindow.nw.get_min_undequeued_buffer_count =
  14.                 __get_min_undequeued_buffer_count;
  15.     }
  16.

  17.     sp<ANativeWindow> mPreviewWindow;
  18.

  19.     struct camera_preview_window {
  20.         struct preview_stream_ops nw;
  21.         void *user;
  22.     };
  23.

  24.     struct camera_preview_window mHalPreviewWindow;

__set_buffers_geometry 封装了 native_window_set_buffers_geometry().

   1. static int __set_buffers_geometry(struct preview_stream_ops* w,
   2.                       int width, int height, int format)
   3.     {
   4.         ANativeWindow *a = anw(w);
   5.         return native_window_set_buffers_geometry(a,
   6.                           width, height, format);
   7.     }

native_window_set_buffers_geometry().  在system/core/include/system/window.h 中定义:
   1. /*
   2.  * native_window_set_buffers_geometry(..., int w, int h, int format)
   3.  * All buffers dequeued after this call will have the dimensions and format
   4.  * specified. A successful call to this function has the same effect as calling
   5.  * native_window_set_buffers_size and native_window_set_buffers_format.
   6.  *
   7.  * XXX: This function is deprecated. The native_window_set_buffers_dimensions
   8.  * and native_window_set_buffers_format functions should be used instead.
   9.  */
  10. static inline int native_window_set_buffers_geometry(
  11.         struct ANativeWindow* window,
  12.         int w, int h, int format)
  13. {
  14.     return window->perform(window, NATIVE_WINDOW_SET_BUFFERS_GEOMETRY,
  15.             w, h, format);
  16. }


其他的函数也是类似的调用情况。
高校技术转移办公室人员如何提升技术成果的推介效果和市场转化率?.docx 科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。 立即下载

相关推荐

两相交错并联BuckBoost变换器仿真模型(Simulink仿真实现)

内容概要:本文档系统整合了电力电子与新能源领域的Simulink仿真资源,聚焦于两相交错并联Buck-Boost变换器的双闭环PWM控制建模与仿真,同时涵盖多种典型拓扑结构,包括交错并联Boost、PFC功率因数校正、LLC谐振变换器、双向CLLC、DAB变换器、VIENNA整流器等。资源体系完整,包含仿真模型、设计报告、计算书、PPT说明文档及Matlab/Python代码,覆盖从基础建模到高级控制策略(如软开关技术、谐波抑制、状态估计、双闭环控制)的全流程。此外,还拓展至状态估计(卡尔曼滤波、粒子滤波)、智能优化算法、机器学习、信号处理、路径规划等多个交叉学科方向,构建了一个面向科研与工程应用的综合性技术平台。; 适合人群:电气工程、自动化、电力电子、新能源科学与工程等专业的硕士博士研究生、高校科研人员,以及从事新能源发电、智能电网、电动汽车、电力传动等领域技术研发的工程师。; 使用场景及目标:①开展电力电子变换器(如Buck-Boost、LLC、DAB、PFC等)的建模、控制与仿真研究;②支撑课程设计、学位论文、科研项目中的系统仿真与算法验证;③学习并复现高水平期刊(如EI)提出的先进控制策略,如基于KKT条件的最优控制、扩展移相调制、恒压恒流双环竞争控制等;④结合智能算法(如粒子群、秃鹰算法)进行微电网调度、储能配置、路径规划等多目标优化问题的研究与快速原型开发。; 阅读建议:建议依据提供的资源目录循序渐进地查阅资料,优先选取与自身研究方向高度契合的内容进行深入学习;应结合仿真模型与配套文档动手实践,调试参数并分析结果,充分利用百度网盘与公众号渠道获取完整资源,提升科研工作的系统性、规范性与创新性。

Android Camera Preview ANativeWindow的处理

为什么80%的码农都做不了架构师?>>> ...

weixin_34248705的博客 318

【基于Zernike矩的良性和恶性肿块的分类】应用于乳腺癌诊断中的快速相反权重学习规则(Matlab代码实现)

内容概要:本文详细介绍了基于Plecs软件构建的全桥LLC谐振变换器仿真模型,重点阐述了其在软开关技术条件下的建模方法与仿真分析过程。该模型能够精确模拟LLC谐振变换器在不同运行工况下的动态响应特性,涵盖开环与闭环控制策略的设计与实现,适用于研究变换器的效率优化、谐振参数匹配、系统稳定性及软开关性能等问题。相较于Simulink等传统仿真工具,Plecs在高频电力电子系统仿真中展现出更高的仿真速度与数值精度,尤其适合用于复杂电力电子拓扑的快速原型验证与优化设计。; 适合人群:具备扎实电力电子技术基础和仿真经验,从事高频功率变换器设计、新能源电源开发、电力电子系统研究的研发工程师及高校研究生。; 使用场景及目标:①深入理解全桥LLC谐振变换器的工作原理与软开关实现机制;②掌握在Plecs环境中搭建高精度、高效率电力电子系统仿真模型的方法;③开展变换器控制策略(如变频控制、闭环稳压)的仿真验证与参数优化;④为科研课题、学位论文或工业项目提供可靠的仿真平台与技术支持。; 阅读建议:建议结合相关电力电子教材与LLC变换器设计指南,深入掌握谐振参数计算与系统稳定性分析方法,并通过反复调试仿真模型,观察关键波形(如原边电流零点切换、副边整流波形),以全面理解软开关过程的物理本质与控制实现细节。

黑电平和白电平

黑电平 定义图像数据为0时对应的信号电平,调节黑电平不影响信号的放大倍数,而仅仅是对信号进行上下平移。如果向上调节黑电平,图像将便暗,如果向下调节黑电平图像将变亮。HV系列摄像机黑电平为0时,对应0V以下的电平都转换为图像数据0,0V以上的电平则按照增益定义的放大倍数转换,最大数值为255。 黑电平(也称绝对黑电平)设定,也就是黑色的最低点。所谓黑色的最低点就是CRT显像管内射出的电子束能

4430

LVGL与STM32的理解(基于正点原子资料)

我们要在lcd_draw_fast_rgb_color里面实现对屏的具体操作(也就是在这里实现自己的代码)。lcd_set_window、lcd_write_ram_prepare、lcd_wr_data这三个函数是本例程LCD屏的控制函数(也就是自己写的函数)。以下是stm32工程的文件目录,GUI_APP也可以忽略(细节参考正点原子例程):这里主要是再次加强一下印象,主要就是把。,里面的lcd_init()与lcd_display_dir是。它们都是LVGL的接口,按照它们的需求,把内容给它们即可。

weixin_39257775的博客 3437

基于光电传感的非接触式酒精浓度检测系统设计与实现

本文详细介绍了基于光电传感技术的非接触式酒精浓度检测系统设计与实现。系统利用940nm红外LED和OPT101光电传感器,结合朗伯-比尔定律,通过STM32微控制器进行信号采集与处理,实现了快速、准确的酒精浓度测量,测量精度达±1%,适用于工业检测和便携式应用场景。

y7z8a的博客 363

图像传感器术语汇总

1. CCD(ChargeCoupledDevices)电荷耦合器件, CCD是20世纪70年代初发展起来的新型半导体集成光电器件。由于CCD器件具有诸多优点:灵敏度高、光谱响应宽、动态范围大、空间自扫描,抗震动、抗磁场、体积小、无残影等。主要厂家:Sony,Sharp,Panasonic,Nextchip,Hitachi,LG等。目前CCD主要使用高质量的DC、DV和高档手机上,其图像质量较好

2714

视觉SLAM十四讲--第13讲 实践:设计SLAM系统(最详细的代码调试运行步骤)

最详细的代码调试运行避坑说明,也包含了我自己对代码的理解,如有理解错误的地方,欢迎指正交流。

记录和分享 1万+

照度/感光度(Lux)

何谓照度?照度(LUX)数值达到多少为低照度?多少数值能适应摄取影像的周围环境? 照度是反映光照强度的一种单位,其物理意义是照射到单位面积上的光通量,照度的单位是每平方米的流明(Lm)数,也叫做勒克斯(Lux):1Lux=1Lm/平方米上式中,Lm是光通量的单位,其定义是纯铂在熔化温度(约1770℃)时,其1/60平方米的表面面积于1球面度的立体角内所辐射的光量。 为了对照度的量有一个感性

2061

时序基础模型Timer-S1:十亿参数如何革新时间序列预测

时间序列预测是数据分析与机器学习中的核心任务,旨在基于历史数据预测未来趋势。其原理在于捕捉数据中的趋势、周期性和季节性等时序依赖关系。这项技术的价值在于赋能业务决策,广泛应用于金融风控、能源管理、物联网监控和供应链优化等关键场景。传统方法依赖针对特定任务的专用模型,面临泛化能力弱和开发成本高的挑战。本文聚焦的时序基础模型,通过在海量跨领域数据上进行预训练,学习时序通用模式,并结合十亿级参数带来的强大容量,实现了性能的显著突破。这种范式转变,使得模型能够像“全科医生”一样,通过少量数据微调即可快速适应新任务,

weixin_29164843的博客 269

踩坑实录:C#上位机YOLOv11从2FPS到45FPS,ONNX Runtime GPU加速全解析

算力迁移:将推理核心从CPU迁移至GPU(核心提速手段);内存复用:避免重复分配/释放内存,减少GC压力;维度固定:工业场景固定输入分辨率,关闭动态维度;资源限制:合理限制GPU/CPU/内存占用,避免资源耗尽;解耦设计:推理线程与UI线程解耦,避免跨线程问题。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 570

libcameraservice.so : CameraService.cpp 分析

** Copyright (C) 2008, The Android Open Source Project ** ** Licensed under the Apache License, Version 2.0 (the "License"); ** you may not use this file except in compliance with the License. ** You

1709

QGis软件 —— 2、QGis加载在线地图两种方式(谷歌地图、天地图)

QGis软件 —— 2、QGis加载在线地图两种方式(谷歌地图)

1万+

伽玛校正(Gamma Correction)

γ校正(Gamma Correction,伽玛校正):所谓伽玛校正就是对图像的伽玛曲线进行编辑,以对图像进行非线性色调编辑的方法,检出图像信号中的深色部分和浅色部分,并使两者比例增大,从而提高图像对比度效果。计算机绘图领域惯以此屏幕输出电压与对应亮度的转换关系曲线,称为伽玛曲线(Gamma Curve)。以传统CRT(Cathode Ray Tube)屏幕的特性而言,该曲线通常是一个乘幂函数,Y=

1516

Orin 调试GMSL camera 96712手册重点

96712基础理解

乐于分享 9188

rk3588 LightSensor适配从驱动到应用层

本文详细介绍了在RK3588平台上实现光感驱动的开发流程。主要包括:1) 在设备树中配置I2C5接口挂载光感设备;2) 编写内核驱动代码实现光感数据采集;3) HAL层通过ioctl与驱动交互;4) 在BoardConfig.mk中启用相关宏定义;5) Framework层通过AutomaticBrightnessController实现自动亮度调节算法;6) 应用层可通过监听系统设置获取光感变化并调整屏幕亮度。整个流程涵盖了从底层驱动到上层应用的完整实现方案,重点解决了光感设备注册、数据采集传输和自动亮度

tzj1058756809的博客 449

take picture 过程分析

这两天一直在调拍照,由于之前拍照照片的格式只支持VGA以下的,我拿我的pad一看,居然可以支持5M和1.3M,也就是前后摄像头的最大分辨率。这让我想到肯定是软件没做好,有待改善,然后这两天有空,就调了调。终于调出来了,一直卡在死锁状态。 由于软件功底不够,对于锁,没什么概念,还好最后还是搞出来了,过程真是痛苦啊。。 流程如下: 首先cameraservice 会调用  takepic

1477

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

camera recording流程

开始app调用到cameraservices // start recording mode status_t CameraService::Client::startRecording() { LOG1("startRecording (pid %d)", getCallingPid()); return startCameraMode(CAMERA_RECORDING_MO

1418

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

摄像机的几个重要的技术指标

(1)清晰度     清晰度是一个摄像机的最重要指标,在监控系统中对图像的清晰度有很高的要求,如在交通监控中,对车辆要能看清车牌号码,对行人要能看清脸部特征,如果这些都看不清楚,那么监控将失去意义。线数的多少决定着清晰度,线数越高看到的图像也就越清晰,与CCD芯片及尺寸也是有一定关系的。高速球型摄像机一定要达到480线清晰度才能满足要求。在普通的商场,酒店,学校等一般用420线的清晰度就能达到要

1282

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

8M sensor mt9e013 驱动

1.  最上层的数据结构 v4l2_i2c_data,V4L2设备mt9e013的i2c数据表示: 1. static struct v4l2_i2c_driver_data v4l2_i2c_data = { 2. .name = MT9E013_NAME, 3. .probe = mt9e013_probe, 4. .remove = mt9e

1252

camera hardware module

ICS 中 沿用了linux驱动模块化的方式,把camera hal 形成一个hardware module,这点跟HC明显不同。 打开camera时, cameraservice 会先打开camera hw_moudle, 如下代码所示: void CameraService::onFirstRef() { BnCameraService::onFirstRe

1215

digital zoom

android HC 中 digital zoom 工作原理: 1. 声明 zoom变量 280 //zoom 281 p.set(CameraParameters::KEY_ZOOM_SUPPORTED, "true"); 282 p.set(CameraParameters::KEY_MAX_ZOOM, "60"); //zoom值可以在0-60之间

1207

YUV422 to YUV420sp color invert

最近在做camera模块,出现了几个bug很有意思。   1. 颜色翻转,红色 变成了 蓝绿色。分析后是YUV422 to YUV420SP的时候,算法出现问题。后来把cb,cr互换了一下,颜色就对了。真的很奇怪。   2. 转换video quality的时候,从high quality 切换到 low quality的时候,camera报错了。后来发现是分辨率不一样。

1151

mGetMemory()

在 void CameraHardware::initPreviewBuffer(int size) 中, ICS 用了 mGetMemory()来申请previewbuffer. 1. mPreviewBuffer.mem = mGetMemory(-1, size_aligned, kBufferCount, NULL); 2. LogDeta

1068
上一篇: mGetMemory()
下一篇: Android启动错误“Waiting for sevice media.audio_flinger”的解决方案
lamdoc
博客等级 码龄18年 155粉丝 655原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值