12 xuhui_7810

尚未进行身份认证

暂无相关简介

等级
TA的排名 5w+

ImageReader丢帧卡顿的优化

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

2020-02-20 00:17:05

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

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

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

2019-12-28 15:06:59

android8.1上新增camera设备

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

2019-12-28 11:51:09

使用virtualbox安装ubuntu

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

2019-12-27 18:49:07

win10和virtualbox里的ubuntu共享文件夹

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

2019-12-27 11:46:14

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

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

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

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

2019-11-08 11:17:58

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:36:37

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

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

2019-10-09 17:59:28

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

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

2019-08-15 10:14:06

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

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

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

2019-07-19 18:17:14

android录制avi视频

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

2019-07-13 01:03:40

Android Tombstone 分析

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

2019-05-16 20:04:59

android 边录制视频边写软字幕

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

2019-05-16 14:46:01

视音频录制流程

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

2019-04-24 16:45:51

清空v4l2 usbcamera缓存

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

2019-04-22 16:21:35

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

查看更多

勋章 我的勋章
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 1024勋章
    1024勋章
    #1024程序员节#活动勋章,当日发布原创博客即可获得
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。