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

相关推荐
BINGCHN44 分钟前
NSSCTF每日一练 SWPUCTF2021 include--web
android·前端·android studio
fundroid1 小时前
Androidify:谷歌官方 AI + Android 开源示例应用
android·人工智能·开源
4z331 小时前
Android15 Framework(2):应用进程的孵化器 Zygote 进程解析
android·源码阅读
00后程序员张2 小时前
iOS 抓不到包怎么办?从 HTTPS 解密、QUIC 排查到 TCP 数据流分析的完整解决方案
android·tcp/ip·ios·小程序·https·uni-app·iphone
李斯维3 小时前
布局性能优化利器:ViewStub 极简指南
android·性能优化
循环不息优化不止5 小时前
Ktor Pipeline 机制深度解析
android
q***56385 小时前
Springboot3学习(5、Druid使用及配置)
android·学习
q***64975 小时前
SpringSecurity踢出指定用户
android·前端·后端
q***76665 小时前
SpringSecurity 实现token 认证
android·前端·后端
Chejdj5 小时前
ViewModel#onCleared的实现原理
android·源码阅读