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

相关推荐
Kapaseker3 小时前
Kotlin Toolchain 0.11 发布:主要是把 Amper 干没了
android·kotlin
三少爷的鞋4 小时前
Android 现代架构不需要事件总线进阶篇
android
杉氧19 小时前
深入理解 Compose 重组机制:快照系统如何驱动 UI 精准刷新?
android·架构·android jetpack
召钱熏19 小时前
状态枚举正确≠渲染正确:一个语音按钮的状态机边界修复实录
android·前端
杉氧20 小时前
深度解析:Jetpack Compose 核心架构与底层原理 —— 十年安卓老兵的“破茧重生”
android·架构·android jetpack
通玄20 小时前
Jetpack Compose 入门系列(七):ViewModel 与界面状态管理
android
落魄Android在线炒饭20 小时前
Android Framework 开发技巧:android.jar 生成与系统快速编译验证
android
如此风景21 小时前
Kotlin Flow操作符学习
android·kotlin
plainGeekDev1 天前
GreenDAO → Room
android·java·kotlin
weiggle1 天前
第八篇:ViewModel + Compose——生产级状态管理实践
android