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))

相关推荐
_祝你今天愉快9 小时前
从驱动来分析服务的添加过程
android
Dovis(誓平步青云)11 小时前
折叠屏悬停看视频,上半屏和下半屏应该各做什么
android·java·服务器·开发语言·安全·音视频
alexhilton12 小时前
让架构边界变成可执行的测试
android·kotlin·android jetpack
hai_android14 小时前
SendChannel 与 ReceiveChannel 通信机制
android
数据治理自习室16 小时前
AI 应用评测体系(GraphRAG)
android·大数据·人工智能·kotlin
爱笑鱼16 小时前
Android 系统启动机制(五):system_server 是 init 启动的,还是 Zygote fork 出来的?
android
智购科技无人售货机工厂17 小时前
2026自动售货机防拆机物理安全设计:从安全螺丝到结构互锁的工程实践~YH
android·网络·驱动开发·python·单片机·安全·云原生
开开心心就好17 小时前
电子教鞭工具支持画框写字插图片功能齐全
android·开发语言·前端·javascript·人工智能·pdf·html
Dovis(誓平步青云)17 小时前
拍视频前先把镜头想清楚:做一个分镜取景辅助器
android·java·服务器·javascript·人工智能
峥嵘life19 小时前
Android16 系统 APEX 模块说明
android·大数据·开发语言