MSM-AOSP相机适配进阶教程(以泛泰A910为例)

本文是关于MSM-AOSP相机适配的进阶教程,以泛泰A910手机为例,详细介绍了如何从libcamera_client.so中获取CameraParameters和导出函数,包括查看Sections、解读rodata和text段信息,以及如何自己编写程序读取rodata。适配过程包括分析官方和自编译的libcamera_client.so,查找并补充缺失的参数和函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

libcamera_client.so这个lib里,有相机的相关参数,比如相机支持的场景模式参数、白平衡模式参数,对焦模式参数……等等

大部分参数是高通或google定义的标准参数,部分手机厂商不更改直接使用这些参数。

有些手机,被消费者批为没个性,甚至从电路板到模具外壳都一样,当然手机厂商终极目标就是千元机,为了节省研发成本和材料成本,这么做无可厚非。但其实这种手机,对于咱第三方开发者来讲也是省时省力,皆大欢喜。

而有些手机厂商则会新增一些自定义的参数以个性化,这样才不会沦为通用模具的大路货,手机售价也相应噌噌地往上涨,但逼格高的代价就是适配起来更麻烦,泛泰就属于这种。

同级适配msm-aosp可能不需要用到这个技巧,可以直接替换官方rom里的libcamera_client.so。

但在越级适配msm-aosp或CM等第三方rom的时候,就必须从源代码下手,编译出可配合高版本系统的libcamera_client.so

本文所属方法为笔者自己摸索总结的方法,可能也有其它更加方便快捷的方法。

最后,老生常谈,本文只可参考,切勿照搬。

一、思路&方法

通过查看frameworks/av/camera/Android.mk
可知,此文件夹编译后生成libcamera_client.so

对比相近版本的cm与msm-aosp的
frameworks/av/camera/CameraParameters.cpp
frameworks/av/include/camera/CameraParameters.h

先看cpp文件,左边为cm11,右边为msm-aosp4.4.2
这里写图片描述
可以看出cm比msm-aosp多出了许多类似

#ifdef OPPO_CAMERA_HARDWARE
#ifdef SAMSUNG_CAMERA_HARDWARE

等等各手机厂商特殊CameraParameters定义,以及各厂商自定义的导出函数
如果你的手机正好是CM11支持的手机厂商,那么就直接照抄cm11的frameworks/av/camera和frameworks/av/include/camera
然后在BoardConfig.mk里增加对应的的cflags,例如

COMMON_GLOBAL_CFLAGS += -DOPPO_CAMERA_HARDWARE

二、获取libcamera_client.so中的CameraParameters以及导出函数

如果cm11正好不支持本机型,其实cm仍然不支持大多数手机厂商,那么苦逼开发者就必须自己手动分析CameraParameters
接下来要用到objdump这个工具,在源码源代码目录里的prebuilts/gcc/linux-x86/arm/arm-eabi-4.7/bin/arm-eabi-objdump,可以单独复制出来到任意目录使用

新建一个目录,把arm-eabi-objdump和需要分析的libcamera_client.so复制进去

1.查看所有Sections

./arm-eabi-objdump -h libcamera_client.so

libcamera_client.so:     file format elf32-littlearm

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .interp       00000013  00000134  00000134  00000134  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  1 .dynsym       000044c0  00000148  00000148  00000148  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  2 .dynstr       0000d6dd  00004608  00004608  00004608  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  3 .hash         00002154  00011ce8  00011ce8  00011ce8  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  4 .rel.dyn      0000aa80  00013e3c  00013e3c  00013e3c  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  5 .rel.plt      00000560  0001e8bc  0001e8bc  0001e8bc  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  6 .plt          00000824  0001ee1c  0001ee1c  0001ee1c  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  7 .text         00009058  0001f640  0001f640  0001f640  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  8 .ARM.exidx    00001000  00028698  00028698  00028698  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  9 .ARM.extab    00000090  00029698  00029698  00029698  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
 10 .rodata       0000188c  00029728  00029728  00029728  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
 11 .data.rel.ro.local 00000010  0002c7f0  0002c7f0  0002b7f0  2**3
                  CONTENTS, ALLOC, LOAD, DATA
 12 .fini_array   00000004  0002c800  0002c800  0002b800  2**2
                  CONTENTS, ALLOC, LOAD, DATA
 13 .data.rel.ro  00008260  0002c808  0002c80
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值