自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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 6064 14

原创 2021-04-10

进现在公司大半年了,在进这家公司之前,一直觉得自己挺牛逼的。毕竟虚拟摄像头、边录mp4边写软字幕,都是我第一个做出来的。特别是虚拟摄像头做出来后,带动了很多人围绕这个技术,深入研究并商用。进了mtk,系统性的学习camera hal后,才觉得之前自己所掌握的太肤浅了。之前有多自信,现在就有多惶恐。为了不掉队,为了能早一日将camera从上到下,真正的做到全线融会贯通,差不多都是朝九晚十了。 希望能在接下来的几年内,早日将camera吃透。加油加油...

2021-04-10 19:49:02 686 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 1148

原创 android8.1 mtk camera hal各种操作流程

写在前面的话:从前一直以为能力比学历重要,直到最近接连面了几家大厂,技术面都过了,但最后因为本科不是全日制的,是成考的,所以都卡在hr那里的学历上。哎,想找个大平台,安安静静的做我的技术,一直做到退休,咋就这么难呢? 好了,言归正传。最近一年,一直在做android上的视频编解码和录相、以及camera hal和系统框架这一块。随着做的慢慢的深入,越发觉得mtk的camera hal这一块,有其独到之处。偏偏网上相关的资料却是极少,对新入手的人而言,很难从上到下吃透。趁着最...

2020-08-03 22:16:14 3913 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 1474 2

原创 virtual camera

敲下标题的这一刻,内心还是有点儿小激动的。毕竟虚拟摄像头,也做了几个星期了,硬生生的在android原生系统不支持的情况下,绕过重重限制,完美的实现了这一功能。接下来几天,终于可以睡个好觉了。 好了,闲话少说,我们先来分析下虚拟摄像头。一说到虚拟摄像头,大家印象里,肯定首先想到的是这么一个情景:某个猥琐男在网上正兴致勃勃的撩妹,看着视频里美女漂亮的容颜,不仅春心大动,口水流了一地。而实际上,在网络的另一端,和这猥琐男聊天视频的,根本就不是视频里的美女,而是一位一边抠着脚一边...

2020-07-27 09:55:03 5032 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 5190

原创 android mtk camera 数据处理基本流程

2020-07-16 17:54:14 1201

原创 工作小感

在公司里,一个人负责整个视频、camera、多媒体模块,是一件幸运的事,因为可以逼迫你主动学习更多的知识。同时也是一件很心累的事,因为当遇到难题,放眼整个团队,却没有一个人可以讨论。特别是接手的任务,大多都是“前无古人、后无来者”,硬生生的要在android原生系统里横插一脚,改变即有模式的任务。这其中的寂寞无奈,也只有经历过的人才能体会。 抱怨是没有用的,遇到难题,哪怕难得整晚整晚睡不着,最终也都一一解决了。希望这次的问题,能像往常一样迎刃而解。攻城狮的眼里,没有解决不了...

2020-05-13 19:59:17 507

原创 camera api2 同一个应用内,在多个TextureView上显示同一个camera

有的时候,客户需求在同一个app内的两个texttureview上,显示同一个camera画面。也就是将同一份camera预览数据,分发到不同的TexttureView上。针对这个需求,实现非常简单。我们先来普及一下camera api2的预览基本流程。 1.)CameraManager调用openCamera()打开指定相机设备,并返回一个CameraDevice对象,后续通过该CameraDevice对象操控具体的相机设备。 2.)使用CameraDe...

2020-05-11 16:50:20 3182 6

原创 H264马赛克、延时的优化

最近将前几年做无人机图传时代码翻出来看了看,发现当时虽然做的比较肤浅,不过对于h264视频流的优化方面,还是有一定借鉴意义的。 当时的应用场景是这样的,无人机上当做服务端,用rtsp往外广播无人机摄像头采集到的视频流。再用一台或多台手机当成客户端,用rtsp协议来接收视频流并播放。我们这里不讨论rtsp协议,只说下h264的优化方案。 因为无人机...

2020-04-23 20:45:25 2678 1

原创 android mpeg2ts 流媒体打包MediaMuxer 和 录制MPEG2TSWriter 以及抽帧MPEG2TSExtractor

目前android上,录相大多是mp4的视频,这在一般情况下,已经够用了。但是在一些特定的场景,比如远程临控录相或者行车记录仪上,用mp4录相,就不太理想了。为什么呢?因为远程录相,或者行车记录仪上都有一个共同的问题,那就是录相有可能中断。比如突然撞车了,或者是远程监控断电了,如果这时录的是Mp4的视频,那么就会导致,没有来得及写和mp4的文件头信息,而打不开视频。所以在远程监控录相...

2020-04-01 17:32:06 2663 4

原创 ImageReader丢帧卡顿的优化

我们知道,在android camera里,可以给一个request添加多个target.比如以google的camera2Basic为例:private void createCameraPreviewSession() { try { SurfaceTexture texture = mTextureView.getSurfaceT...

2020-02-20 17:23:00 8240 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 1622

原创 mtk android8.1上,camera主摄的调用流程

mtk的摄像头hal模块,跟android原生的有很大的出入,基本上是自己重写了一套,不熟悉的话,查看起来相当的复杂。特别是在8.0以后,mtk的hal,既使用了hidl接口,又没有完全按照hidl的标准来,底层仍是他们自己的一套流程。如果按google的流程来看,是别想弄明白的。 前段时间,我调了下mtk的camera,大致弄清了它们的流程。随手记了点笔记,写得...

2019-12-28 15:06:59 2074

原创 android8.1上新增camera设备

在工作中,camera这一块上,可能会有各种各样的需求。比如有人想新增一个虚拟摄像头,当用户app打开摄像头设备时,打开的不是系统默认的camera hal代码,而是自己指定的代码,用自己事先准备好的视频数据,来喂给app;也有人想在系统默认的一套app框架上,新增一个外接的usbcamera,并且要能溶入到camera框架中。app只需要指定usbcamera的id,就能像打开普...

2019-12-28 11:51:09 6936 2

原创 使用virtualbox安装ubuntu

1.)安装virtualbox2.)新建一个虚拟电脑,取个名字,比如ubuntu3.)设置虚拟内存4.)创建虚拟硬盘,用于安装ubuntu系统。个人建议,ubuntu系统盘和数据盘不要共用一个虚拟硬盘vdi,因为如共用一个虚拟盘的话,一旦系统出了问题,无法恢复时,存放在这个虚拟硬盘里的数据,就无法恢复了。选择“现在创建虚拟硬盘”,然后点击“创建”单击“下一步”...

2019-12-27 18:49:07 389

原创 win10和virtualbox里的ubuntu共享文件夹

在win10上,用virtualbox安装ubuntu的步骤如下: 1.)在win10上创建一个共享文件夹,比如E:\ubuntu_share 2.)在virbualbox上,依次单击“设置”--“共享文件夹”,然后单击右左的添加按钮,在弹出的菜单里如下选择: 3.)的virtualbox里的ubuntu要共享的文件夹所在...

2019-12-27 11:46:14 1019

原创 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 5284 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 =&gt...

2019-12-17 14:56:11 626

原创 YUV420之YV12格式以及yuv422格式的显示

这段时间,在做一个动态配置录相预览帧上的字符样式以及颜色等等的功能。因为要移植到几个不同的项目上,刚好这几个项目的camera原始预览数据格式,一个为yv12,一个yuv422,所以将这两种格式都做了送显的处理。先上一段传统的代码,也就是网上流行的给camera帧打上时间戳的代码:DisplayClient::addPreviewTimestamps(sp<Strea...

2019-11-08 12:00:35 1382

原创 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 775

原创 android mediaserver占用cpu资源过高的优化方案

如果app打开相机进行预览,但是不通过setPreviewCallbackWithBuffer函数来获取预览的数据的话,mediaserver占用的cpu资源会非常的低, 在10%左右。而如果想通过setPreviewCallbackWithBuffer等回调获取数据的话,占用的cpu资源就会相当的高了,增幅可达15%左右。 如果想要优化这个cpu的占用率的话,最...

2019-10-09 18:58:28 2497 1

原创 相互依赖的so库,在编译时如何解耦

有时候,我们写的程序,会涉及到相互引用的问题。比如frameworks\av\media\libstagefright下的这个libstagefright,被frameworks\av\media\libstagefright\codecs\avienc我们这个新增的avienc引用到了,而反过来,libstagefright在录制avi视频时,又用到了我们的avienc.so这个...

2019-08-15 10:14:06 3479

转载 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 671

原创 android录制avi视频时aac音频的正确配置方法

在android上面,用avilib.c开源库录制过avi视频加aac音频的同学们,应该都有一段为了aac音频无法正确录制和播放而抓狂的经历。我本人也经历了这样的折磨,现在将踩过的坑记录下来,让后来者少走些弯路。 先从camera app上讲起,在app应用里,要录制一个avi(我这里讲的是利用在系统新增的avi接口,具体参考我前几篇博客。当然纯粹在app上也可以...

2019-07-19 18:17:14 1515 1

原创 android录制avi视频

大家都知道,在android上,现在录制支持的主流视频是mp4,mpeg2,也就是流媒体,也写了个大概,但是支持的不完全,原生的用来录流媒体会有种种问题。 当然,在大多数情况下,mp4视频是够用了的,一般人录制也就只需要mp4格式就够了,用户并不关心你录的什么格式的,只要能播放就ok。但是在某些特定的行业,或者特定的需求下,mp4就不够用了。 比...

2019-07-13 01:03:40 1664 1

转载 Android Tombstone 分析

1.什么是tombstone当一个动态库(native 程序)开始执行时,系统会注册一些连接到debuggerd 的signal handlers,当系统 crash 的时候,会保存一个 tombstone 文件到/data/tombstones目录下(Logcat中也会有相应的信息),文件的确就像墓碑一样记录了死亡了的进程的基本信息(例如进程的进程号,线程号),死亡的地址(在哪个地址上发...

2019-05-16 20:04:59 746

原创 android 边录制视频边写软字幕

目前,对于边录制视频,边要显示时间戳的需求,都是通过用对应字符的bitmap图片的yuv数据,来替换每一帧yuv数据的像素点来实现的。这样做的坏处显而易见,这个时间戳数据,是硬生生的印在每一帧数据上的,无法剥离。不能在播放的时候,由用户来控制显不显示。不能动态的配置时间戳字体颜色、大小等样式。 要想解决这个问题,可以用给视频配置对应的字幕来实现。当然,如果一边录一...

2019-05-16 14:46:01 1427 1

转载 视音频录制流程

音视频录制状态机:start→ Initial -→Initialized → DataSource Configured → Prepared-→Recording录制过程从上到下涉及很多模块:1),app层,描述各种录制参数;2)framework层,主要指java层framework,如MeidaRecorder,在收到app层的录制需求后,协调camera,micphone等模...

2019-04-24 16:45:51 708

原创 清空v4l2 usbcamera缓存

做过usbcamera的同学们应该都知道,usbcamera有一个缓存队列,当应用上面调用startPreview的时候,就会层层的调到usbcamera 的ioctl(mFd, VIDIOC_DQBUF, &tmp_buf);用于从队列里出去一个缓存,并将这个缓存返回给用户去处理。当处理完后,要接着调用ioctl (mFd, VIDIOC_QBUF, &tmp_b...

2019-04-22 16:21:35 1097 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 7860 13

原创 高通平台上新增一个分区

客户有个需求,需要增加一个100m大小的分区,用来存放客户预置的资料,并且不能被恢复出厂设置删除。针对这个需求,客户的资料肯定不能放在原有的分区里面,新增的分区,也不能挂载到原有的分区目录下,否则恢复出厂设置时,一定会被清空。这么看来,就只能在系统根目录下,新建个文件夹,并将客户分区,挂载到这个根目录上才行。因为我们用的是android9.0,在这套代码上,会有很多的权限限制,如果...

2019-04-12 10:22:45 4655 6

原创 android降噪回路测试

在android手机上,如果喇叭和mic离得过近,没有采取硬件上的降噪手段(比如采取双mic,一个装在上面,一个装在下面,利用两个mic录取声音时的音量差来过滤掉远处的噪音),那么在回路测试的过程中,mic会将你对着mic说话的声音,和喇叭发出的声音全部录入,从而产生尖锐的回声,也就是啸叫声。针对这个情况,要么硬件上来修改,要么在软件上,利用AcousticEchoCanceler接口来消除部份噪...

2019-03-18 11:05:43 857

转载 Android 8.1 开机流程分析(1)

1. 启动过程概述图:android_boot_process学习任何软硬件系统,研究系统启动过程都是一种非常有效地起步手段。上面的这张图可以帮助理解 Android 系统的启动过程。(1) Boot ROM 阶段Android 设备上电后,首先会从处理器上 ROM 的启动引导代码开始执行,片上 ROM 会需找 Boot loader 的代码,并加载到内存中。这一步由”芯片厂商”负责...

2019-02-25 11:42:55 593

原创 关于android9.0上开启了加密后,开机动画会播放两次的问题

        android9.0上,开启了默认加密后,手机在开机的过程中,会发现开机动画在播放一会儿,突然黑屏或闪屏一下,然后重新播放,看起来像是手机ap端突然重启了一样的。针对这个问题,仔细分析后发现,这个不是手机ap端重启了,而是加密导致的framework重启。具体原因如下:        加密又分全盘加密(Android 4.4 引入)和文件级加密(Android 7.0 引入),...

2019-02-25 10:05:06 2476 3

转载 Android -- Vold机制简要分析

Vold是用于管理和控制Android外部存储介质的后台进程,这里说的管控,主要包括SD卡的插拔、挂载/卸载和格式化等;它是Android平台外部存储系统的管控枢纽。Vold的整个控制模块主要由三个类模块构成:NetlinkManager、VolumeManager和CommandListener,它们的功能划分大概是:NetlinkManager:用于从kernel中获取SD卡插拔的Uev...

2019-02-23 11:34:04 733

转载 手机蓝牙相关

先说说蓝牙的Profiles    MTK_BT_PROFILE_OPP    :Object Push Profile  普遍用于文件、名片的传输,从文件管理器中通过蓝牙分享即使用该协议     MTK_BT_PROFILE_SIMAP  :SIM Access Profile  车载蓝牙会通过该协议使用手机上的SIM服务,如通话等,仅将手机作为SIM卡槽,使用车载蓝牙的自带的无...

2019-02-15 10:30:55 751

转载 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 218

转载 configtx.yaml配置文件解析

YAML语言语法首先需要了解YAML语言的语法。可以参考&lt;&lt;YAML 语言教程&gt;&gt;configtx.yaml主要用到了以下语法:符号 含义 &lt;&lt; 合并到当前数据 - 数组 * 别名 &amp; 锚点  configtx.yaml分析configtx.yaml文件开头部分,主要配置项如下:...

2018-11-16 15:13:12 954

android共享内存,mem.rar

本资源,利用hidl接口规范,写了一个共享内存的服务,简单明了,用到了IAllocator、native_handle_t等等等标准方法

2020-05-29

DCamera.rar

本应用可以同时打开多个camera,只需要手动更改id,即可以在同一个app里打开不同的camera.如果id相同,则可以利用我博客里的虚拟摄像头技术,打开同一个摄像头

2020-05-29

bgrecord.rar

android后台录相服务,可以在后台录相。完整的android studio包,用android studio打开即可使用

2020-05-29

adb1.0.41.zip

最新版本的adb, 版本号为1.0.41,完整版,带fastboot. Android Debug Bridge version 1.0.41 Version 29.0.2-5738569

2020-05-26

Avilib.rar

解决了avilib录制的aac音频无法播放的问题

2019-07-19

NEWAVIExtractor.rar

解决了android原生的AVIExtractor.cpp对aac音频支持不友好,无法播放的问题

2019-07-19

testEventBus.rar

本例子可以用来测试将一个包含音、视频轨和字幕轨的mp4,每一个轨道信息都抽取出来,然后重新写到另一个mp4里去。

2019-05-16

subtitle.rar

在android里,新增一个边录视频边内嵌时间戳字幕的功能

2019-05-16

手机游戏(成三棋)

小时候玩的成三棋游戏的代码,目前只做了320*480这一套分辨率的, 可以了解一个游戏的开发基本流程.

2013-09-13

手机黑名单应用

详细的手机黑名单应用代码,包括电话拦截,短信拦截,可以添加删除黑名单. 里面的APK,可以直接安装在手机上使用

2013-09-13

android手电筒

手电筒应用,包括源代码和APK文件,源代码可以直接编译使用

2013-09-13

手机截屏源代码

android手机截屏应用源代码,可以直接编译使用

2013-09-13

抓包工具EzSniffer

智能手机抓包工具,能在手机上抓包.相当于PC端的sniffer,可以拦截手机里发出的一切网络数据包

2009-09-07

T9拼音输入法全套代码

一全套的T9拼音输入法代码,对于做手机输入法很有帮助

2009-03-06

Windows核心编程.rar

Windows核心编程.rar

2008-05-19

More Effective C++.pdf

More Effective C++.pdf,很精典的一本书

2008-05-19

高质量编程C++

高质量C++编程规范,其中有很多公司面试时必考的题目

2008-05-19

C++面试题

C++面试题,各大公司面试时经常出的题目

2008-05-19

Oracle

Oracle从入门到精通 pdf.rar

2008-04-22

插件清理软件

插件清理软件,好用的软件

2008-04-19

FTP软件

FTP软件,本人只是为了赚点分好下东东,各位别介意啊

2008-04-19

空空如也

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

TA关注的人

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