FAQ09075:6572平台相机拍照,拍下来的照片无法查看,图库查看时提示“无缩略图”

描述:在一些复杂场景,用camera拍出来的照片在电脑上无法查看,在手机的图库中浏览时提示"无缩略图"

分析:拍一些复杂的场景时,jpeg encode出来的file大小可能超出我们预留的buffer,导致buffer中存放的数据不完整(若有做插值会更容易出现)。可以按如下方法来check对应的Log:在mtk log中的main log搜索关键字"JpgEncHal",对比Buffer Size和Jpeg encodedone的size的值,若是Buffer Size比Jpeg encode done的size要小,则会出现该问题。例如:

08-03 11:23:50.429 5365 5427 D JpgEncHal: JpgEncHalJpgEncHal::JpgEncHal

08-03 11:23:50.429 5365 5427 D JpgEncHal: JpgEncHalJpgEncHal::lock

08-03 11:23:50.429 5365 5427 D JpgEncHal: JpgEncHal JpgEncHal::start -> config jpeg encoder

08-03 11:23:50.429 5365 5427 D JpgEncHal: JpgEncHal Src Addr:0x448c7000, width/height:[1920, 2560], format:0

08-03 11:23:50.429 5365 5427 D JpgEncHal: JpgEncHal Src Size:0x960000, 0x0, Stride f00!!

08-03 11:23:50.429 5365 5427 D JpgEncHal: JpgEncHal Dst Addr:0x432b7000, Quality:90, Buffer Size:599136, Need add SOI:0

08-03 11:23:50.592 5365 5427 D JpgEncHal: JpgEncHalJpgEncHal::jpeg encoder done

08-03 11:23:50.592 5365 5427 D CamShot/JpegCodec: [encode] Jpeg encode done, size = 659270

08-03 11:23:50.592 5365 5427 D JpgEncHal: JpgEncHalJpgEncHal::unlock

08-03 11:23:50.592 5365 5427 I MtkCam/MtkCamUtils: {CamProfile}[JpegCodec::encode] : (0-th) ===> [start-->now: 163 ms]

08-03 11:23:50.592 5365 5427 D JpgEncHal: JpgEncHalJpgEncHal::~JpgEncHal

可以从这段log看出Buffer Size:599136 < Jpeg encode done, size = 659270,因此会有问题。

解决:原理:将buffer大小适当加大,并在HAL层将jpeg quality的最大值限制在95。

方案:可申请两个patch:ALPS00842512 和ALPS00712097。

或者按下面的方法修改代码(patch的中改动和下面的修改方法一样)。

1.在文件 \mediatek\platform\mt6572\hardware\camera\core\camshot\SImager\SImager.cpp 将方法setEncodeParam(MUINT32 const & u4IsSOI, MUINT32 const & u4Quality)中的这段code

{

FUNCTION_LOG_START;

MY_LOGI("enc param (SOI, Quality) = (%d, %d)", u4IsSOI, u4Quality);

mTargetImgInfo.u4IsSOI = u4IsSOI;

mTargetImgInfo.u4Quality = u4Quality;

FUNCTION_LOG_END;

//

return MTRUE;

}

修改为

setEncodeParam(MUINT32 const & u4IsSOI, MUINT32 const & u4Quality)

{

FUNCTION_LOG_START;

MY_LOGI("enc param (SOI, Quality) = (%d, %d)", u4IsSOI, u4Quality);

mTargetImgInfo.u4IsSOI = u4IsSOI;

mTargetImgInfo.u4Quality = u4Quality>95?95:u4Quality;

MY_LOGI("enc param (SOI, Quality) = (%d, %d)", u4IsSOI, u4Quality);

FUNCTION_LOG_END;

//

return MTRUE;

}

  1. 在文件 \mediatek\platform\mt6572\hardware\camera\core\camshot\utils\ImageUtils.cpp 将方法queryImgBufSize(EImageFormat const eFmt, MUINT32 const u4Width, MUINT32 const u4Height)中的这段code

case eImgFmt_JPEG:

u4BufSize = u4Width * u4Height; // * 2 / 4; //? assume the JPEG ratio is 1/4

修改为

case eImgFmt_JPEG:

u4BufSize = u4Width * u4Height * 6 / 5;

  1. \mediatek\platform\mt6572\hardware\camera\core\camshot\SingleShot\SingleShot.cpp 将方法queryJpegImgBufInfo()中的这段code

if (0 != mRawMem.size)

修改为

if (0 != mRawMem.size && mRawMem.size>=queryImgBufSize(eImgFmt_JPEG, u4Width, u4Height))

相关推荐
Sinclair2 小时前
简单几步,安卓手机秒变服务器,安装 CMS 程序
android·服务器
雮尘6 小时前
手把手带你玩转Android gRPC:一篇搞定原理、配置与客户端开发
android·前端·grpc
ktl7 小时前
Android 编译加速/优化 80%:一个文件搞定,零侵入零配置
android
alexhilton18 小时前
使用FunctionGemma进行设备端函数调用
android·kotlin·android jetpack
冬奇Lab21 小时前
InputManagerService:输入事件分发与ANR机制
android·源码阅读
张小潇1 天前
AOSP15 Input专题InputManager源码分析
android·操作系统
RdoZam1 天前
Android-封装基类Activity\Fragment,从0到1记录
android·kotlin
奥陌陌1 天前
android 打印函数调用堆栈
android
用户985120035831 天前
Compose Navigation 3 深度解析(二):基础用法
android·android jetpack
恋猫de小郭1 天前
Android 官方正式官宣 AI 支持 AppFunctions ,Android 官方 MCP 和系统级 OpenClaw 雏形
android·前端·flutter