高通camera架构 (三) .

高通平台camX架构与mm-camera架构的区别(camera tuning角度分析) 高通老平台SM6125,其使用的架构是mm-camera,其sensor文件路径为:vendor/qcom/proprietary/mm-camera/mm-camera2/media-controller/modules/sensor 高通新平台SM4250.其使用的架构是cam X,sensor文件路径为: vendor/qcom/proprietary/chi-cdk/oem/qcom/sensor ... 阅读详情

四 android_hardware_Camera_setPreviewDisplay(JNI)

这个接口函数的作用是为Preview分配内存。

static void android_hardware_Camera_setPreviewDisplay(JNIEnv *env, jobject thiz, jobject jSurface)
{
    LOGV("setPreviewDisplay");
    sp<Camera> camera = get_native_camera(env, thiz, NULL);
    if (camera == 0) return;

    sp<Surface> surface = NULL;
    if (jSurface != NULL) {
        surface = reinterpret_cast<Surface*>(env->GetIntField(jSurface, fields.surface));
    }
    if (camera->setPreviewDisplay(surface) != NO_ERROR) {
        jniThrowException(env, "java/io/IOException", "setPreviewDisplay failed");
    }
}

 

在camera.cpp中;

status_t Camera::setPreviewDisplay(const sp<Surface>& surface)
{
    LOGV("setPreviewDisplay");
    sp <ICamera> c = mCamera;
    if (c == 0) return NO_INIT;
    if (surface != 0) {
        return c->setPreviewDisplay(surface->getISurface());
    } else {
        LOGD("app passed NULL surface");
        return c->setPreviewDisplay(0);
    }
}

这里跳到cameraservice.cpp 中。

status_t CameraService::Client::setPreviewDisplay(const sp<ISurface>& surface) {
    LOG1("setPreviewDisplay(%p) (pid %d)", surface.get(), getCallingPid());
    Mutex::Autolock lock(mLock);
    status_t result = checkPidAndHardware();
    if (result != NO_ERROR) return result;

    result = NO_ERROR;

    // return if no change in surface.
    // asBinder() is safe on NULL (returns NULL)
    if (surface->asBinder() == mSurface->asBinder()) {
        return result;
    }

    if (mSurface != 0) {
        LOG1("clearing old preview surface %p", mSurface.get());
        if (mUseOverlay) {
            // Force the destruction of any previous overlay
            sp<Overlay> dummy;
            mHardware->setOverlay(dummy);
            mOverlayRef = 0;
        } else {
            mSurface->unregisterBuffers();
        }
    }
    mSurface = surface;
    mOverlayRef = 0;
    // If preview has been already started, set overlay or register preview
    // buffers now.
    if (mHardware->previewEnabled() || mUseOverlay) {
        if (mUseOverlay) {
            if( mSurface != NULL)
                result = setOverlay(); //创建、初始化overlay

//在实际中对这些Surface 进行merge 可以采用两种方式,一种就是采用软件的形式来merge ,还一种就是采用硬件的方式,软件的方式就是我们的SurfaceFlinger ,而硬件的方式就是Overlay
        } else if (mSurface != 0) {
            result = registerPreviewBuffers();  //注册preview buffer
        }
    }

    return result;
}


Camera安卓源码-高通mm_camera架构剖析 主要涉及三方面: 1. Camera open 2. Camera preview 3. Camera capture1. Camera Open mm_camera&mm_camera_open() 首先,mm_camera层用一个结构体去表示从底层获取的camera对象,这个结构体叫做mm_camera_obj。 如下结构体所示,mm_camera对象包含了两个线程: 1. mm_ 阅读详情

相关推荐

高通 camera hal 流程

以高通 msm8998 平台为例介绍高通 camera hal。库文件名称:camera.msm8998.so源码目录:/hardware/qcom/camera/msm8998/QCamera2主要文件:QCamera2Hal.cpp 定义了 HAL_MODULE_INFO_SYMQCamera2Hal.cpp 中定义的 HAL_MODULE_INFO_SYM 初始化 camera_module_t 对象,

kk3087961的博客 4012

调用相机异常app passed NULL surface   java.lang.RuntimeException: startPreview failed

调用系统相机扫码时报错:app passed NULL surface   java.lang.RuntimeException: startPreview failed D/Camera: app passed NULL surface W/System.err: java.lang.RuntimeException: startPreview failed W/System.err: ...

u011050129的博客 5307

kernel:高通camera架构qcom_daemon

1.Camera 软件系统 QTI =Qualcomm Technologies, Inc 高通对于camera的代码组织大体是遵循Android架构的,但对于最核心的sensor端底层设置、ISP效果参数等进行了单独的剥离,放在daemon进程中进行。【但是我在比较新的文档里面有看到把daemon拿掉了。放在了camera_server里面。这个消息待验证】 1. Camera ...

maze的专栏 3566

Android调用相机预览黑屏app passed NULL surface解决

由于项目需求,要实现一个调用相机拍照然后将矩形框中的部分切割出来的功能,于是在网上找了 一个PlayCamera的demo程序。但运行的时候发现,只有第一次安装上时拍照界面能成功预览,一旦用back按键返回或者按home键回到主界面,再启动程序的时候,预览界面就变黑了。 猜测是surfaceview一旦后台就自动destroy有没有重新绘制的缘故。所以先将CameraActivity.java的

yxq408576080的博客 1万+

高通camx架构学习(一)——高通 Camera Camx 架构

目前主流的机型都使用camx架构,这个架构和之前架构的主要区别就是 芯片接口层的代码从hardware/qcom 迁移到 vendor/qcom/proprietary/下面,我们主要关注的camera hal层的源码也是放在vendor/qcom/proprietary/camx/下面。都是从 vendor/qcom/proprietary/chi-cdk/vendor/chioverride/default/chxextensionmodule.cpp中调用过来的。

图像学习之旅 1804

高通camera之对camx架构的浅析

参考网上的笔记去整理一些自己对camx的理解

永不秃头的程序员的博客 8240

高通camera架构 (三)

四 android_hardware_Camera_setPreviewDisplay(JNI) 这个接口函数的作用是为Preview分配内存。 static void android_hardware_Camera_setPreviewDisplay(JNIEnv *env, jobject thiz, jobject jSurface) {     LOGV("setPreviewD

曼云-->孤峰 5377

内存泄漏系列专题分析之六:高通camx 内存泄漏测试的未回收问题分析

即打开相机分配的内存,在测试完退出相机后并未释放,包含构造函数里分配的内存,一般应该在析构函数里释放掉。

1484

app passed NULL surface报错以及onPreviewFrame不被调用的原因

前段时间,需要开发一个人脸识别的程序,实现如下功能:程序通过摄像机实时获取图像,但是不直接显示获取的图像,而是显示处理过后的图像。 就这个如何不显示处理前只显示处理后的图像,纠结了很久,网上搜索了很多,对于这个问题,网上的信息都是重复无用的,根本无法解决。接下来我详细的说明遇见的问题和解决方法。 一开始程序见程序段1,这么写的话,屏幕上面只会显示摄像头获取到的图片,处理过后的图片完全不会显示,后面...

Easyhood的博客 2192

高通Camera架构之mm-camera与Camx其区别(二十九)

本篇目的:介绍高通Camera架构mm-camera和Camx的区别其中 camx 代表了通用功能性接口的代码实现集合(CamX),chi-cdk代表了可定制化需求的代码实现集合(CHI),从图中可以看出Camx部分对上作为HAL3接口的实现,对下通过v4l2框架与Kernel保持通讯,中间通过互相dlopen so库并获取对方操作接口的方式保持着与CHI的交互。core/ : 用于存放camx的核心实现模块,其中还包含了主要用于实现hal3接口的hal/目录,以及负责与CHI进行交互的chi/目录。

Android系统攻城狮 3596

高通 Camera 架构全景图:Sensor–ISP–DPU–GPU 数据流向解析

本文将深入解析高通 Snapdragon 平台下 Camera 系统的全链路数据流向,从 Sensor 输入到 ISP 图像信号处理、再到 DPU 显示输出与 GPU 并行处理的完整通路。通过结合 MSM 系列 SoC 的实际驱动架构与硬件模块功能,复现一个从相机图像采集到多媒体系统渲染的闭环处理路径,并重点分析高通在多模块协同、高速缓存设计、硬件队列调度等方面的系统化优化策略,为开发者与影像系统架构师提供一份完整的技术参考。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 3420

android 相机预览 报错 app passed NULL surface

android 相机预览 报错 app passed NULL surface 项目中用到相机预览作为背景,在主页嵌入SurfaceView做背景,做法如下: onCreate中初始化SurfaceView sfv; onResume中获取1.SurfaceHolder sfh; 2.camera设置并开始预览 第一次启动都预览不了 报错 app passed NULL surface

3121

Android后台开启服务默默拍照

Android后台开启服务默默拍照http://blog.csdn.net/yangzl2008/article/details/9262505

高通平台Camera驱动和HAL层代码架构

本文主要研究高通平台Camera驱动和HAL层代码架构,熟悉高通Camera的控制流程。 平台:Qcom-高通平台 Hal版本:【HAL1】 知识点如下: 从HAL层到driver层:研究Camera以下内容 1.打开(open)流程 2.预览(preview)流程 3.拍照(tackPicture)流程 2、Camera软件架构 camera软件架构 由上图可以看出,Android ...

maze的专栏 1万+

Android自定义照相机Camera出现黑屏的解决方法

主要介绍了Android自定义照相机Camera出现黑屏的解决方法,分析了黑屏出现的原因及参考解决方法,需要的朋友可以参考下

曙光服务器RAID配置避坑指南:MegaRAID SAS 9361-8i实战(含Foreign状态处理)

本文详细解析了曙光服务器搭配MegaRAID SAS 9361-8i控制器的RAID配置全流程,包括RAID0和RAID5的创建、Foreign状态处理及性能优化策略。特别针对磁盘迁移中的Foreign状态问题,提供了系统化的解决方案和高级恢复技巧,助力企业级IT运维提升存储配置的稳定性和可靠性。

weixin_29200741的博客 410

高通Camera驱动(1)--Camx架构介绍

参考文档:Android Camera简单整理(二)-Qcom HAL3 Camx架构学习 - 简书 (jianshu.com) 一、Android分层架构 图片内容来自:https://source.android.google.cn/setup Android分层架构: APP层:每一个应用程序由一个或多个活动组成,都是java写的 Framework层:用java编写一些规范化的模块封装框架。用Java Native Interface(JNI 是...

Cam_韦的博客 1万+

竞赛无人机模块化开发实战:2023 TI电赛G题空地协同消防系统(飞控与视觉融合篇)

本文以2023年TI电赛G题为例,详细阐述了采用模块化开发思维构建空地协同智能消防系统的实战方法。文章重点拆解了无人机飞控二次开发、视觉识别与融合控制等核心模块,提供了硬件选型、代码实现与系统联调的完整指南,旨在帮助参赛者通过“搭积木”式编程高效完成复杂系统集成。

js777的博客 452

高通Camera基本架构及Sensor移植

camera基本代码架构   Camera原理:外部光线穿过lens后,经过color filter滤波后照射到sensor面上,sensor将从lens上传到过来的光线转换成电信号,再通过内部的AD转换为数字信号,如果sensor没有集成DSP,则通过DVP的方式传输到baseband,此时的数据格式是RAW DATA。必须通过平台的isp来处理。如果集成了DSP,这RAW ...

u012462519的专栏 7184

避坑指南:Windows11语言包安装后部分界面仍显示中文的终极解决方案

本文详细解析了Windows11语言包安装后部分界面仍显示中文的问题,提供了从基础到进阶的完整解决方案。通过PowerShell命令、注册表清理和系统文件检查等方法,帮助用户彻底解决语言显示不一致的问题,确保系统界面语言统一。

weixin_29232507的博客 1625

华为OD机试真题 新系统【查找能被整除的最大整数】

华为OD新系统机试真题【查找能被整除的最大整数】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【查找能被整除的最大整数】

qq_45776114的博客 671
上一篇: 高通CAMERA架构(二)
下一篇: C语言 命令行参数 函数指针 gdb调试 .
TopicDev
博客等级 码龄14年 128粉丝 111原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值