Android系统攻城狮
《Android系统多媒体进阶实战》一书作者
展开
-
Camera之NextRequest、CaptureRequest、camera_capture_request_t、camera_stream_buffer_t的关系(三十三)
本篇目的:理解NextRequest、CaptureRequest、camera_capture_request_t、camera_stream_buffer_t的关系NextRequest:是RequestThread的内部类,用于准备批量向Camera HAL层发送请求。// 由NDK客户端使用,通过Stream或Surface索引传递Surface。//从Android O开始,从Parcel创建一个Surface将需要一个额外的IPC调用。原创 2023-08-05 23:45:25 · 510 阅读 · 0 评论 -
Camera之PhysicalCameraSettingsList/SurfaceMap/CameraMetadata/RequestList的关系(三十二)
本篇目的:理解PhysicalCameraSettingsList、SurfaceMap、CameraMetadata、camera_metadata_ro_entry之间的关系unordered_map的用法和map是一样的,提供了 insert,size,count等操作,用来存储key-value键值对。SurfaceMap是std::u nordered_map的别名,key为int类型,value为vector类型。原创 2023-08-05 15:44:00 · 364 阅读 · 0 评论 -
Camera之元数据(meta data)和原始数据(raw data)区别(三十一)
本篇目的:理解Camera元数据(meta data)和原始数据(raw data)区别。原创 2023-08-03 17:28:53 · 1796 阅读 · 0 评论 -
Camera之android8.0以上HIDL与C++数据类型转换(三十)
本篇目的:学习了解Android8.0以上的HIDL和HAL之间的类型转换。Android O 对 Android 操作系统的架构重新进行了设计,以在独立于设备的 Android 平台与特定于设备和供应商的代码之间定义清晰的接口。Android 已经以 HAL 接口的形式(在 hardware/libhardware 中定义为 C 头文件)定义了许多此类接口。HIDL 将这些 HAL 接口替换为带版本编号的稳定接口,它们可以是采用 C++(如下所述)或 Java 的客户端和服务器端 HIDL 接口。原创 2023-06-23 18:30:34 · 409 阅读 · 0 评论 -
高通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/目录。转载 2023-06-20 19:37:26 · 2182 阅读 · 0 评论 -
HDR概念 (二十八)
什么是HDR?HDR全称是High-Dynamic Range,即高动态范围图像技术。这项技术最早应用于摄影,在拍照过程中开启HDR,可以让原先的暗场景变得更明亮更通透。现在,HDR技术已经应用在了家电、智能终端等各个方面。简而言之,就是把几张不同曝光的照片合并到一起,找回大光比环境中的高光和阴影细节。HDR能带来什么?拿电脑显示器举个例子。传统显示器所能展现的亮度范围极为有限,与人眼所能感知的范围相差甚远。其原因是传统显示器在画面明亮处的亮度提不上去,暗处暗不下来。这导致了人眼最终所感知到转载 2022-03-14 15:11:33 · 3561 阅读 · 0 评论 -
图像采样、量化、编码(二十七)
采样;就是把一幅连续图像在空间上分割成M×N个网格,每个网格用一亮度值来表示。一个网格称为一个像素。M×N的取值满足采样定理。量化;就是把采样点上对应的亮度连续变化区间转换为单个特定数码的过程。量化后,图像就被表示成一个整数矩阵。每个像素具有两个属性:位置和灰度。位置由行、列表示。灰度表示该像素位置上亮暗程度的整数。此数字矩阵M×N就作为计算机处理的对象了。灰度级一般为0-255(8bit量化)。量化示意图(a)为量化过程(b)为量化为8bit在现实生活中,采集到的图像都需要经过离散...转载 2022-03-14 14:58:10 · 4855 阅读 · 0 评论 -
Camera HW组成(二十六)
成像系统的组成从成像过程来看,成像系统由如下部分组成:当你打开手机准备拍照,镜头(Lens)会首先把被摄景物投影在图像传感器(Sensor)上,与此同时,影像处理器(ISP)会通过测光、测距算出合适的参数并指示镜头对焦,随着你按下拍照键,图像传感器(Sensor)会完成一次曝光,并通过影像处理器(ISP)变成图片,再经手机应用的后期处理,最终呈现在屏幕上。而这其中的某一步,都关系到这张图片的画质,尤其在光线昏暗的夜晚。拍照质量相关:视角、曝光、后期处理视角拍照最基本的是视角,转载 2022-03-14 14:47:03 · 680 阅读 · 1 评论 -
Camera ISP与DSP的区别(二十五)
Camera的工作流程拍摄景物通过镜头,将生成的光学图像投射到传感器上,然后光学图像被转换成电信号,电信号再经过模数转换变为数字信号,数字信号经过DSP加工处理,再被送到电脑中进行处理,最终转换成手机屏幕上能够看到的图像。数字信号处理器DSP(DIGITAL SIGNAL PROCESSING)功能:主要是通过一系列复杂的数学算法运算,对数字图像信号参数进行优化处理,并把处理后的信号通过USB等接口传到PC等设备。DSP结构框架:ISP(image signal processor)(图像信转载 2022-03-14 14:14:51 · 1913 阅读 · 0 评论 -
Camera成像原理(二十四)
目前各大手机厂商每年都在推出各种关于手机摄像头的新卖点以求引起消费者关注。了解摄像头是怎样工作可以更好地帮助我们理解目前的消费级产品,其中摄像头工作的核心概念就是数字成像系统。 本期主要对数字成像系统进行概述总结,行文主要分为:数字成像系统组成、摄像头关键部位概述、ISP概述、关于摄像头相关的技术指标概述以及总结。现在互联网资源比较丰富,对于每个部分关键知识点本文只提出关键知识点,读者如果有兴趣可以进一步深入检索进行学习。 对于人眼来说我们观察到一个物体很容易。初中物理和生物知识已经告诉我们当我转载 2022-03-14 14:07:09 · 2055 阅读 · 0 评论 -
Android8.0前后Camera架构对比(二十三)
Android 的相机硬件抽象层 (HAL) 可将Camera2中较高层级的相机框架 API 连接到底层的相机驱动程序和硬件。相机子系统包括相机管道组件的实现,而相机 HAL 可提供用于实现您的这些组件版本的接口。Android 8.0 及更高版本的设备上实现相机 HAL,则必须使用 HIDL 接口.1.Android8.0以上Camera架构1.应用框架应用代码位于应用框架级别,它使用 Camera 2 API 与相机硬件进行互动。在内部,此代码会调用相应的 Binder 接口,.原创 2022-01-10 10:10:52 · 390 阅读 · 0 评论 -
android之AString类型介绍(二十二)
1.定义实现frameworks/av/media/libstagefright/foundation/AString.cppAString::AString(const char *s) : mData(NULL), mSize(0), mAllocSize(1) { setTo(s);}AString::AString(const char *s, size_t size) : mData(NULL), mSize(0), .原创 2021-11-05 16:04:09 · 2200 阅读 · 0 评论 -
Android8.1 Camere1+HAL3获取分辨率和芯片支持不一致(二十一)
开发中会不会遇到这样的情况,明明Camera芯片支持到4160x3120的分辨率,但是通过Camera api1或ap2获取的分辨率最大只支持1920x1080,这是为什么呢?今天就来撸下代码,每个平台芯片可能不一样,今天以展讯为例.以Camera.java中的getParameters()为例,看看Camera api1内部是怎么实现的,飞起!!!一、Java层1.frameworks/base/core/java/android/hardware/Camera.javaprivate n.原创 2021-07-13 15:16:38 · 451 阅读 · 0 评论 -
Android8.1 Camera2+HAL3之HIDL open()流程(二十)
1.frameworks/base/core/java/android/hardware/camera2/CameraManager.java<0>.packages/apps/Camera2/src/com/android/camera/device/PortabilityCameraActions.javaCameraManager manager;Handler handler;manager.openCamera(cameraId, this, handler);//打开摄像头.原创 2021-07-10 21:27:07 · 565 阅读 · 2 评论 -
Android7.1之SurfaceFlinger实时显示帧率FPS/LCD帧数/Camera帧数(十九)
一、帧数FPS:显卡GPU越强,处理速度越快定义:一秒钟内画面刷新的速度,60fps就是一秒钟出现60张画面,而对帧数起到决定性的是电脑中的显卡,显卡性能越强,帧数当然就越高啦,然后画面就越流畅。1.在frameworks/native/services/surfaceflinger/SurfaceFlinger.hclass SurfaceFlinger : public BnSurfa...原创 2018-05-07 16:30:14 · 5861 阅读 · 1 评论 -
MediaPlayer到ACodec到OMX流程(十九)
********************************************************************************OpenMax(OMX)框架位置及作用1.android系统中只用openmax来做code,所以android向上抽象了一层OMXCodec,提供给上层播放器用。 播放器中音视频解码器mVideosource、mAudiosou...原创 2018-09-01 18:12:36 · 4032 阅读 · 0 评论 -
打印Camera参数及帧率Parameters(十八)
1.设置摄像头硬件每秒捕获多少帧数,是摄像头硬件决定的,和SurfaceFlinger的绘制、渲染、显示的帧数没有1毛钱关系代码目录:frameworks/base/core/java/android/hardware/Camera.java<1>.一般支持Camera支持帧率范围:15000,15000;20000,20000;24000,24000;7000,30000;300...原创 2018-06-08 15:32:25 · 5154 阅读 · 0 评论 -
AMessage/ACodec消息分析(十七)
1.发送Action:kWhatPullerNotifysp<AMessage> notify = new AMessage(kWhatPullerNotify, mReflector);2.接收Action:kWhatPullerNotifyvoid MediaCodecSource::onMessageReceived(const sp<AMessage> &a...原创 2018-03-28 21:19:56 · 721 阅读 · 0 评论 -
android7.1之MediaCodec到OMX流程(十六)
0.frameworks/base/media/java/android/media/MediaCodec.java<1>.public static MediaCodec createDecoderByType(@NonNull String type) { eturn new MediaCodec(type, true /* nameIsType */, false /*...原创 2018-04-03 22:05:36 · 1548 阅读 · 0 评论 -
Android Java到OMX调用流程(十五)
1.frameworks/base/media/java/android/media/MediaPlayer.java public void start() throws IllegalStateException { _start(); } private native void _start() throws IllegalStateException;...原创 2016-11-29 19:05:05 · 1093 阅读 · 0 评论 -
Android4.4之Camera2预览流程APP到Driver(十四)
1.APP调用 packages/apps/Camera2/src/com/android/camera/PhotoModule.java private void startPreview() { Log.v(TAG, "startPreview"); mCameraDevice.startPreviewAsync(); mFocu...原创 2016-11-03 18:59:46 · 3728 阅读 · 0 评论 -
SurfaceFlinger中queueBuffer与dequeueBuffer作用(十二)
From1.图形数据流:图中最左侧是指渲染器,用于生产graphics buffers, 比如状态栏,systemUI等.再来看看图中BufferQueue的工作2.生成者消费者模式生产者和消费者运行在不同的进程.生产者请求一块空闲的缓存区:dequeueBuffer() 生产者填充缓存区并返回给队列: queueBuffer() 消费者获取一块缓存区: acqui...翻译 2019-06-25 18:00:46 · 8412 阅读 · 1 评论 -
Camera之luvcview使用(十一)
1.Install Depened# sudo apt-get install debhelper libsdl1.2-dev libv4l-dev pkg-config2.Donload:https://packages.ubuntu.com/source/trusty/luvcview# tar -xvf luvcview_xxx.orig.tar.gz# cd luvcview# make<1>报错:uvcvideo.h:5:10: fatal error: linux.原创 2020-07-30 22:46:20 · 1146 阅读 · 0 评论 -
UVC and V4L2 Carmera Tools(十)
V4L2 tools# apt-get install v4l2-utils# v4l2-ctl --list-devices# v4l2-ctl -d /dev/video0 --list-ctrlsUVC Camera:# apt-get install uvcdynctrl# uvcdynctrl -d video0 -c原创 2020-07-30 22:19:47 · 696 阅读 · 0 评论 -
Android12之BufferQueue sample(九)
【代码】Android12之BufferQueue sample(九)原创 2020-07-25 21:16:27 · 773 阅读 · 0 评论 -
Android BufferQueue生产消费原理(八)
Android BufferQueue中核心数据是一个GraphicBuffer的队列。而GraphicBuffer根据使用场合的不同可以从共享内存(即Ashmem,因为这块内存要在应用程序和服务端程序两个进程间共享)或者从硬件图形缓冲区(即Framebuffer,因为它是SurfaceFlinger渲染完要放到屏幕上的)中分配。另外因为用途不同,它的格式,大小,以及在BufferQueue中的数量都可能是不同的.本文根据网上现有资源进行整合,以及自己的理解,有误之处欢迎指正~~一、Why连接图转载 2020-07-25 21:05:49 · 874 阅读 · 0 评论 -
android8.0以上新增Camera(七)
在工作中,camera这一块上,可能会有各种各样的需求。比如有人想新增一个虚拟摄像头,当用户app打开摄像头设备时,打开的不是系统默认的camera hal代码,而是自己指定的代码,用自己事先准备好的视频数据,来喂给app;也有人想在系统默认的一套app框架上,新增一个外接的usbcamera,并且要能溶入到camera框架中。app只需要指定usbcamera的id,就能像打开普通摄像头那样,去打开我们的usbcamera;也有人,想在现有的框架上,同时兼容老的hal1+api1流程的android8.0转载 2020-07-25 18:41:48 · 2610 阅读 · 0 评论 -
Workshop V4L2(六)
apt install ffmpeg # required to see the visualize the video streamapt install evince # require to visualize postscript files# mkdir linux && cd linux #(if required)# Run docker sudo docker run -i -t --volume $(realpath linux):/linux -w /...翻译 2020-07-25 18:11:11 · 366 阅读 · 0 评论 -
V4L2&&Gstreamer媒体控制工具(五)
媒体控制器现代的片上系统(SoC)设备以内部硬件模块的方式支持广泛的功能,这导致采用多种方式互连SoC中的功能,从而改变了V4L设备的内容。媒体控制器内核API旨在将有关媒体设备和捕获设备的详细信息公开给用户空间,以使它们可以在运行时以动态和复杂的方式互连。媒体控制器设备将实体公开给媒体控制器框架。每个实体具有一个或多个源极焊盘和一个或多个汇聚焊盘。您可以使用媒体控制器内核API(即通过media-ctl)来查询实体,将源填充链接到接收填充,以及设置填充格式。请注意,IMX6媒体控制器驱动程翻译 2020-07-25 13:58:40 · 2378 阅读 · 0 评论 -
Android MediaCodec硬编码H264文件(四)
在 Android 4.1 版本提供了 MediaCodec 接口来访问设备的编解码器,不同于 FFmpeg 的软件编解码,它采用的是硬件编解码能力,因此在速度上会比软解更具有优势,但是由于 Android 的碎片化问题,机型众多,版本各异,导致 MediaCodec 在机型兼容性上需要花精力去适配,并且编解码流程不可控,全交由厂商的底层硬件去实现,最终得到的视频质量不一定很理想。虽然 MediaCodec 仍然存在一定的弊端,但是对于快速实现编解码需求,还是很值得参考的。以将相机预览的 YUV 数转载 2020-07-25 10:07:48 · 1368 阅读 · 0 评论 -
颜色空间YUV、RGB理解(二)
接触到了一些yuv相关的信息。从Camera中拿到的每一帧,它的默认格式是NV21,它是一种yuv格式,然后转成OpenCV所需的BGR。Camera的每一帧的数据格式还可以指定成别的格式。因此开始关注了yuv这个名词,后面还有yuv的各种衍生,因此仔细地梳理一下自己的理解,以及与RGB对比。转载 2020-06-30 10:18:51 · 2164 阅读 · 0 评论 -
Camera系统之ISP综述(一)
1.ISP位置ISP(Image Signal Processor),即图像信号处理器,用于处理图像信号传感器输出的图像信号。它在相机系统中占有核心主导的地位,是构成相机的重要设备。主要内部构成如下图所示,ISP 内部包含 CPU、SUP IP、IF 等设备,事实上,可以认为 ISP 是一个 SOC,可以运行各种算法程序,实时处理图像信号。ISP 架构 CPU CPU 即中央处理器,可以运行 AF、LSC 等各种图像处理算法,控制外围设备。现代的 ISP 内部的 CPU 一般都是.转载 2020-06-24 16:02:45 · 11084 阅读 · 3 评论