- 博客(88)
- 资源 (21)
- 收藏
- 关注
原创 android camera hal3 新增vendor tag
前段时间,我在android8.1的系统层上,新增了一个usbcamera hal,和一个虚拟摄像头hal。在实际使用的过程中,遇到了一个问题——客户app在用camera api接口调用usbcamera或virtual camera时,希望能够知道当前调用的是系统本身的mipi摄像头,还是usbcamera或virtualcamera。也就是说,客户想知道,我当前调用的摄像头,是个什么东西。 要实现这个功能,有三种方法。第一种,是最下乘的方法,也就是在hal层,open ...
2020-09-07 15:55:24 6422 14
原创 2021-04-10
进现在公司大半年了,在进这家公司之前,一直觉得自己挺牛逼的。毕竟虚拟摄像头、边录mp4边写软字幕,都是我第一个做出来的。特别是虚拟摄像头做出来后,带动了很多人围绕这个技术,深入研究并商用。进了mtk,系统性的学习camera hal后,才觉得之前自己所掌握的太肤浅了。之前有多自信,现在就有多惶恐。为了不掉队,为了能早一日将camera从上到下,真正的做到全线融会贯通,差不多都是朝九晚十了。 希望能在接下来的几年内,早日将camera吃透。加油加油...
2021-04-10 19:49:02 737 2
转载 MTK6580(Android6.0)-camera 驱动分析
一、MTK6580 平台 Camera 驱动整体框架mtk平台三大件调试中,camera的调试难度最大,问题也就最多,为此特地分析了一下整个camera驱动部分实现过程,以下为camera驱动框架序列图: 从图中可以看出,整个框架分为三个部分hal部分逻辑调用,kernel层的通用驱动sensorlist.c 和具体IC的驱动xxxx_mipi_raw.c,kernel起来后不会直接去访问硬件sensor,而是会注册相关的驱动,之后Android系统起来后会启动相关的...
2020-08-15 23:54:05 1233
原创 android8.1 mtk camera hal各种操作流程
写在前面的话:从前一直以为能力比学历重要,直到最近接连面了几家大厂,技术面都过了,但最后因为本科不是全日制的,是成考的,所以都卡在hr那里的学历上。哎,想找个大平台,安安静静的做我的技术,一直做到退休,咋就这么难呢? 好了,言归正传。最近一年,一直在做android上的视频编解码和录相、以及camera hal和系统框架这一块。随着做的慢慢的深入,越发觉得mtk的camera hal这一块,有其独到之处。偏偏网上相关的资料却是极少,对新入手的人而言,很难从上到下吃透。趁着最...
2020-08-03 22:16:14 4075 6
原创 android mtk8.1上api1录相流程,从app到hal
做mtk camera这一块有一段时间了,有些想法,一直没有整理起来。这样的后果就是,虽然这些东西你都做过,但是要让你说清楚是怎么一回事,你就很难说得清了。但是如果你将你做过的东西,在心里理清楚后,再写出来,就难转化为自己的理解,就能真正的将做过的东西吸收为自己知识沉淀的一部份了。这篇博客,先将mtk上用api1录相的流程整理一下。 1.)在app上录相的代码基本上如下package com.example.dcamera;import androidx.appc...
2020-07-27 14:29:25 1499 2
原创 virtual camera
敲下标题的这一刻,内心还是有点儿小激动的。毕竟虚拟摄像头,也做了几个星期了,硬生生的在android原生系统不支持的情况下,绕过重重限制,完美的实现了这一功能。接下来几天,终于可以睡个好觉了。 好了,闲话少说,我们先来分析下虚拟摄像头。一说到虚拟摄像头,大家印象里,肯定首先想到的是这么一个情景:某个猥琐男在网上正兴致勃勃的撩妹,看着视频里美女漂亮的容颜,不仅春心大动,口水流了一地。而实际上,在网络的另一端,和这猥琐男聊天视频的,根本就不是视频里的美女,而是一位一边抠着脚一边...
2020-07-27 09:55:03 5324 4
原创 虚拟摄像头搭配高德AR导航出现的内存和cpu问题
最近在处理虚拟摄像头搭配高德AR导航时,出现了一些内存和cpu问题,这里做个初步记录,后面再完善1.)开一个hal3的后台录相、预览app,再开一个高德AR导航虚拟摄像头。这时cpu消耗最高达到了600%以上, AR导航界面卡顿严重,录相APP录下来的帧丢帧严重。 刚开始是从降cpu着手的,因为AR导航占用的cpu达到了300以上,加上地图的其他进程消耗,高德一个APP就达到了400%以上。 刚开始降cpu手段: 1.在虚拟摄像头hal3的processCaptureReq...
2020-07-16 21:15:30 5348
原创 工作小感
在公司里,一个人负责整个视频、camera、多媒体模块,是一件幸运的事,因为可以逼迫你主动学习更多的知识。同时也是一件很心累的事,因为当遇到难题,放眼整个团队,却没有一个人可以讨论。特别是接手的任务,大多都是“前无古人、后无来者”,硬生生的要在android原生系统里横插一脚,改变即有模式的任务。这其中的寂寞无奈,也只有经历过的人才能体会。 抱怨是没有用的,遇到难题,哪怕难得整晚整晚睡不着,最终也都一一解决了。希望这次的问题,能像往常一样迎刃而解。攻城狮的眼里,没有解决不了...
2020-05-13 19:59:17 528
原创 camera api2 同一个应用内,在多个TextureView上显示同一个camera
有的时候,客户需求在同一个app内的两个texttureview上,显示同一个camera画面。也就是将同一份camera预览数据,分发到不同的TexttureView上。针对这个需求,实现非常简单。我们先来普及一下camera api2的预览基本流程。 1.)CameraManager调用openCamera()打开指定相机设备,并返回一个CameraDevice对象,后续通过该CameraDevice对象操控具体的相机设备。 2.)使用CameraDe...
2020-05-11 16:50:20 3361 6
原创 H264马赛克、延时的优化
最近将前几年做无人机图传时代码翻出来看了看,发现当时虽然做的比较肤浅,不过对于h264视频流的优化方面,还是有一定借鉴意义的。 当时的应用场景是这样的,无人机上当做服务端,用rtsp往外广播无人机摄像头采集到的视频流。再用一台或多台手机当成客户端,用rtsp协议来接收视频流并播放。我们这里不讨论rtsp协议,只说下h264的优化方案。 因为无人机...
2020-04-23 20:45:25 3071 1
原创 android mpeg2ts 流媒体打包MediaMuxer 和 录制MPEG2TSWriter 以及抽帧MPEG2TSExtractor
目前android上,录相大多是mp4的视频,这在一般情况下,已经够用了。但是在一些特定的场景,比如远程临控录相或者行车记录仪上,用mp4录相,就不太理想了。为什么呢?因为远程录相,或者行车记录仪上都有一个共同的问题,那就是录相有可能中断。比如突然撞车了,或者是远程监控断电了,如果这时录的是Mp4的视频,那么就会导致,没有来得及写和mp4的文件头信息,而打不开视频。所以在远程监控录相...
2020-04-01 17:32:06 2942 4
原创 ImageReader丢帧卡顿的优化
我们知道,在android camera里,可以给一个request添加多个target.比如以google的camera2Basic为例:private void createCameraPreviewSession() { try { SurfaceTexture texture = mTextureView.getSurfaceT...
2020-02-20 17:23:00 8524 8
原创 android8.1上开机启动应用的权限配置
在android8.1上,我们写hidl接口,并让它开机启动它定义的service的时候,经常是在它的rc文件里配置。例如我在hardware\interfaces\下有个文件夹avi_memory\1.0\default,里面有个android.hardware.avi_memory@1.0-service.rc,它的内容如下:service avi_memory /ven...
2020-01-08 10:39:21 1665
原创 mtk android8.1上,camera主摄的调用流程
mtk的摄像头hal模块,跟android原生的有很大的出入,基本上是自己重写了一套,不熟悉的话,查看起来相当的复杂。特别是在8.0以后,mtk的hal,既使用了hidl接口,又没有完全按照hidl的标准来,底层仍是他们自己的一套流程。如果按google的流程来看,是别想弄明白的。 前段时间,我调了下mtk的camera,大致弄清了它们的流程。随手记了点笔记,写得...
2019-12-28 15:06:59 2173
原创 android8.1上新增camera设备
在工作中,camera这一块上,可能会有各种各样的需求。比如有人想新增一个虚拟摄像头,当用户app打开摄像头设备时,打开的不是系统默认的camera hal代码,而是自己指定的代码,用自己事先准备好的视频数据,来喂给app;也有人想在系统默认的一套app框架上,新增一个外接的usbcamera,并且要能溶入到camera框架中。app只需要指定usbcamera的id,就能像打开普...
2019-12-28 11:51:09 7100 2
原创 使用virtualbox安装ubuntu
1.)安装virtualbox2.)新建一个虚拟电脑,取个名字,比如ubuntu3.)设置虚拟内存4.)创建虚拟硬盘,用于安装ubuntu系统。个人建议,ubuntu系统盘和数据盘不要共用一个虚拟硬盘vdi,因为如共用一个虚拟盘的话,一旦系统出了问题,无法恢复时,存放在这个虚拟硬盘里的数据,就无法恢复了。选择“现在创建虚拟硬盘”,然后点击“创建”单击“下一步”...
2019-12-27 18:49:07 417
原创 win10和virtualbox里的ubuntu共享文件夹
在win10上,用virtualbox安装ubuntu的步骤如下: 1.)在win10上创建一个共享文件夹,比如E:\ubuntu_share 2.)在virbualbox上,依次单击“设置”--“共享文件夹”,然后单击右左的添加按钮,在弹出的菜单里如下选择: 3.)的virtualbox里的ubuntu要共享的文件夹所在...
2019-12-27 11:46:14 1061
原创 android 8.1上新增hidl接口,从hal层往framework层传共享内存
android8.1和之前的版本有一个很大的不同,那就是8.1以后的版本将hal层和framework层分隔开来,不在同一个进程,不能直接通信。如果framework层需要和hal层通信,需要用到hidl接口。 之前我这边有个模块,在android6.0上时,需要在hal层通过ashmem_create_region来创建一块共享内存。然后将创建的共享内存句柄,...
2019-12-24 15:14:19 5438 4
原创 I420ToNV21 YV12toNV21
YUV420P,Y,U,V三个分量都是平面格式,分为I420和YV12。在I420格式(即:YUV);但YV12则是相反(即:YVU)。YUV420SP, Y分量平面格式,UV打包格式, 即NV12。 NV12与NV21类似,U 和 V 交错排列,不同在于UV顺序。I420: YYYYYYYY UU VV =>YUV420PYV12: YYYYYYYY VV UU =>...
2019-12-17 14:56:11 644
原创 YUV420之YV12格式以及yuv422格式的显示
这段时间,在做一个动态配置录相预览帧上的字符样式以及颜色等等的功能。因为要移植到几个不同的项目上,刚好这几个项目的camera原始预览数据格式,一个为yv12,一个yuv422,所以将这两种格式都做了送显的处理。先上一段传统的代码,也就是网上流行的给camera帧打上时间戳的代码:DisplayClient::addPreviewTimestamps(sp<Strea...
2019-11-08 12:00:35 1453
原创 java上argb转yuv422数据
public byte[] rgb2YCbCr422(int[] pixels, int width, int height) { int len = width * height; int index = 0; //yuv格式数组大小,y亮度占len长度,u,v各占len/4长度。 byte[] yuv = new byte[le...
2019-10-24 09:48:22 799
原创 android mediaserver占用cpu资源过高的优化方案
如果app打开相机进行预览,但是不通过setPreviewCallbackWithBuffer函数来获取预览的数据的话,mediaserver占用的cpu资源会非常的低, 在10%左右。而如果想通过setPreviewCallbackWithBuffer等回调获取数据的话,占用的cpu资源就会相当的高了,增幅可达15%左右。 如果想要优化这个cpu的占用率的话,最...
2019-10-09 18:58:28 2651 1
原创 相互依赖的so库,在编译时如何解耦
有时候,我们写的程序,会涉及到相互引用的问题。比如frameworks\av\media\libstagefright下的这个libstagefright,被frameworks\av\media\libstagefright\codecs\avienc我们这个新增的avienc引用到了,而反过来,libstagefright在录制avi视频时,又用到了我们的avienc.so这个...
2019-08-15 10:14:06 3570
转载 Android HIDL 简介
本文基于 Android 8.0 进行分析。1、HIDL 的概念 HIDL 读作 hide-l,全称是 Hardware Interface Definition Language。它在 Android Project Treble 中被起草,在 Android 8.0 中被全面使用,其诞生目的是使 Android 可以在不重新编译 HAL 的情况下对 Framework 进行 OTA 升...
2019-08-03 14:38:55 702
原创 android录制avi视频时aac音频的正确配置方法
在android上面,用avilib.c开源库录制过avi视频加aac音频的同学们,应该都有一段为了aac音频无法正确录制和播放而抓狂的经历。我本人也经历了这样的折磨,现在将踩过的坑记录下来,让后来者少走些弯路。 先从camera app上讲起,在app应用里,要录制一个avi(我这里讲的是利用在系统新增的avi接口,具体参考我前几篇博客。当然纯粹在app上也可以...
2019-07-19 18:17:14 1601 1
原创 android录制avi视频
大家都知道,在android上,现在录制支持的主流视频是mp4,mpeg2,也就是流媒体,也写了个大概,但是支持的不完全,原生的用来录流媒体会有种种问题。 当然,在大多数情况下,mp4视频是够用了的,一般人录制也就只需要mp4格式就够了,用户并不关心你录的什么格式的,只要能播放就ok。但是在某些特定的行业,或者特定的需求下,mp4就不够用了。 比...
2019-07-13 01:03:40 1734 1
转载 Android Tombstone 分析
1.什么是tombstone当一个动态库(native 程序)开始执行时,系统会注册一些连接到debuggerd 的signal handlers,当系统 crash 的时候,会保存一个 tombstone 文件到/data/tombstones目录下(Logcat中也会有相应的信息),文件的确就像墓碑一样记录了死亡了的进程的基本信息(例如进程的进程号,线程号),死亡的地址(在哪个地址上发...
2019-05-16 20:04:59 767
原创 android 边录制视频边写软字幕
目前,对于边录制视频,边要显示时间戳的需求,都是通过用对应字符的bitmap图片的yuv数据,来替换每一帧yuv数据的像素点来实现的。这样做的坏处显而易见,这个时间戳数据,是硬生生的印在每一帧数据上的,无法剥离。不能在播放的时候,由用户来控制显不显示。不能动态的配置时间戳字体颜色、大小等样式。 要想解决这个问题,可以用给视频配置对应的字幕来实现。当然,如果一边录一...
2019-05-16 14:46:01 1494 1
转载 视音频录制流程
音视频录制状态机:start→ Initial -→Initialized → DataSource Configured → Prepared-→Recording录制过程从上到下涉及很多模块:1),app层,描述各种录制参数;2)framework层,主要指java层framework,如MeidaRecorder,在收到app层的录制需求后,协调camera,micphone等模...
2019-04-24 16:45:51 758
原创 清空v4l2 usbcamera缓存
做过usbcamera的同学们应该都知道,usbcamera有一个缓存队列,当应用上面调用startPreview的时候,就会层层的调到usbcamera 的ioctl(mFd, VIDIOC_DQBUF, &tmp_buf);用于从队列里出去一个缓存,并将这个缓存返回给用户去处理。当处理完后,要接着调用ioctl (mFd, VIDIOC_QBUF, &tmp_b...
2019-04-22 16:21:35 1152 1
原创 android 9.0上,实现双mipi屏
我们知道,在android上,本就支持mipi(primary display)、HDMI(external display)、wifi display、virtual display这四种屏,但是并不支持双mipi屏。如果需要做到集成双mipi屏,外面普通的作法有两个:1.)在一套主板上用两个cpu、两套android代码,然后中间用一条USB数据线连接起来,实现两个disp...
2019-04-16 20:10:38 8162 14
原创 高通平台上新增一个分区
客户有个需求,需要增加一个100m大小的分区,用来存放客户预置的资料,并且不能被恢复出厂设置删除。针对这个需求,客户的资料肯定不能放在原有的分区里面,新增的分区,也不能挂载到原有的分区目录下,否则恢复出厂设置时,一定会被清空。这么看来,就只能在系统根目录下,新建个文件夹,并将客户分区,挂载到这个根目录上才行。因为我们用的是android9.0,在这套代码上,会有很多的权限限制,如果...
2019-04-12 10:22:45 4773 6
原创 android降噪回路测试
在android手机上,如果喇叭和mic离得过近,没有采取硬件上的降噪手段(比如采取双mic,一个装在上面,一个装在下面,利用两个mic录取声音时的音量差来过滤掉远处的噪音),那么在回路测试的过程中,mic会将你对着mic说话的声音,和喇叭发出的声音全部录入,从而产生尖锐的回声,也就是啸叫声。针对这个情况,要么硬件上来修改,要么在软件上,利用AcousticEchoCanceler接口来消除部份噪...
2019-03-18 11:05:43 884
转载 Android 8.1 开机流程分析(1)
1. 启动过程概述图:android_boot_process学习任何软硬件系统,研究系统启动过程都是一种非常有效地起步手段。上面的这张图可以帮助理解 Android 系统的启动过程。(1) Boot ROM 阶段Android 设备上电后,首先会从处理器上 ROM 的启动引导代码开始执行,片上 ROM 会需找 Boot loader 的代码,并加载到内存中。这一步由”芯片厂商”负责...
2019-02-25 11:42:55 634
原创 关于android9.0上开启了加密后,开机动画会播放两次的问题
android9.0上,开启了默认加密后,手机在开机的过程中,会发现开机动画在播放一会儿,突然黑屏或闪屏一下,然后重新播放,看起来像是手机ap端突然重启了一样的。针对这个问题,仔细分析后发现,这个不是手机ap端重启了,而是加密导致的framework重启。具体原因如下: 加密又分全盘加密(Android 4.4 引入)和文件级加密(Android 7.0 引入),...
2019-02-25 10:05:06 2536 3
转载 Android -- Vold机制简要分析
Vold是用于管理和控制Android外部存储介质的后台进程,这里说的管控,主要包括SD卡的插拔、挂载/卸载和格式化等;它是Android平台外部存储系统的管控枢纽。Vold的整个控制模块主要由三个类模块构成:NetlinkManager、VolumeManager和CommandListener,它们的功能划分大概是:NetlinkManager:用于从kernel中获取SD卡插拔的Uev...
2019-02-23 11:34:04 754
转载 手机蓝牙相关
先说说蓝牙的Profiles MTK_BT_PROFILE_OPP :Object Push Profile 普遍用于文件、名片的传输,从文件管理器中通过蓝牙分享即使用该协议 MTK_BT_PROFILE_SIMAP :SIM Access Profile 车载蓝牙会通过该协议使用手机上的SIM服务,如通话等,仅将手机作为SIM卡槽,使用车载蓝牙的自带的无...
2019-02-15 10:30:55 821
转载 JNI 实战全面解析
简介JNI是什么?JNI(Java Native Interface)意为JAVA本地调用,它允许Java代码和其他语言写的代码进行交互,简单的说,一种在Java虚拟机控制下执行代码的标准机制。NDK是什么?Android NDK(Native Development Kit )是一套工具集合,允许你用像C/C++语言那样实现应用程序的一部分。为什么要用NDK?1、安全性,...
2019-01-09 17:17:19 237
转载 configtx.yaml配置文件解析
YAML语言语法首先需要了解YAML语言的语法。可以参考<<YAML 语言教程>>configtx.yaml主要用到了以下语法:符号 含义 << 合并到当前数据 - 数组 * 别名 & 锚点 configtx.yaml分析configtx.yaml文件开头部分,主要配置项如下:...
2018-11-16 15:13:12 964
DCamera.rar
2020-05-29
adb1.0.41.zip
2020-05-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人