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

相关推荐
2401_8332693031 分钟前
RecyclerView多布局详解
android
v_348360876244 分钟前
Android_8 zygote启动分析
android
消失的旧时光-19431 小时前
Android 系统层扫盲 11:JNI 到底是什么?Java / Kotlin 是怎么调用 C/C++ 的?
android·binder·zygote·system_server·aops
mmsx2 小时前
Android 地图几万要素卡成幻灯片?顶点缓冲批上传与显存复用
android·opengl·地图·栅格
北京自在科技12 小时前
谷歌 Find Hub 迎来新版本更新
android·安卓
古法安卓18 小时前
Android-休眠唤醒后onLocationChanged没有数据问题排查
android·java·android studio
Htr_20 小时前
Creem 2.0 使用指南:面向 AI 构建时代的资金平台
android·数据库·人工智能·ui·photoshop
wardenlzr1 天前
车机看门狗(Watchdog)为何会让整机硬重启
android·优化·车机
IT毕设实战小研1 天前
基于大数据的商场商铺数据分析与可视化的设计与实现
android·java·大数据·django·课程设计