立即注册
查看: 1110|回复: 0

[MTK软件经验分享] mtk faq:解决HDR拍照后需要重新startPreview的问题

已绑定手机
已实名认证
发表于 2019-10-15 10:41:21 | 显示全部楼层 |阅读模式 来自 广东省深圳市
Isp4.0架构, zsd on, hdrshot完成后, 如果不stopPreview+startPreview, 直接再进行其他基于zsd的shot会出现Runtime Exception。这样子的行为显得hdr+zsd有点怪。
问题分析
不restart preview时报出的Runtime Exception如下:
QQ截图20191015104507.png
08-29 16:19:15.278210 349 12062 D MTKCam/ResourceContainer: [clearPipelineResource] +
08-29 16:19:15.278274 349 12062 D hdrshot : [HDRShot] onCmd_cancel: +
08-29 16:19:15.278530 349 12062 D hdrshot : [HDRShot] onCmd_cancel: -
08-29 16:19:15.279847 349 12062 D MtkCam/ResourceContainer: [clearPipelineResource] -
// 进入ZsdVendershot
08-29 16:19:15.283446 349 12062 D MtkCam/Shot: (12062)(ZSDVendor)[createPipeline] +
08-29 16:19:15.308276 349 12062 D MtkCam/PipeBuilderCapture: (12062)[create] Legacy
Pipeline +
08-29 16:19:15.308308 349 12062 D MtkCam/PipeBuilderCapture: (12062)[create] Legacy
Pipeline -
08-29 16:19:15.308344 349 12062 D MtkCam/Shot: (12062)(ZSDVendor)[createPipeline] -
08-29 16:19:15.308377 349 12062 D MtkCam/ResultProcessor: [registerlistener]
RangeListener:MtkCam/Shot(1) range(0,1000) partial:1
08-29 16:19:15.308408 349 12062 D MtkCam/MfcSelector: no result, start waiting 1000
millisecond
08-29 16:19:16.308599 349 12062 E MtkCam/MfcSelector: timeout after 1000 millisecond,
no result can get
(getResult){#242:vendor/MediaTek/proprietary/hardware/mtkcam/middleware/v1.4/LegacyPipe
line/mfc/buffer/Selector.cpp}
08-29 16:19:16.308720 349 12062 E MtkCam/Shot: (12062)(ZSDVendor)[getSelectorData]
Selector getResult Fail!
(getSelectorData){#1123:vendor/mediatek/proprietary/hardware/mtkcam/middleware/v1.4/v1/
adapter/Scenario/Shot/FIHNightZsdVendorShot/FIHNightZsdVendorShot.cpp}
可以看到,进入的是ZsdVenderShot,但是shot的selector却是MfcSelector,行为逻辑不匹配,导
致shot没有buffer出现报错。
在ZsdPreview的初始化过程,DefaultFlowControl/FeatureFlowControl会在创建pipeline的时候把
每一个stream id的bufferprovider设置好,同时也会配置selector。而且shot中除了特殊的
shotmode如vss/mfc,不会再重新配置selector。

[SOLUTION]
QQ截图20191015104551.png
if( pProvider == NULL) {
MY_LOGE("can't find StreamBufferProvider in ConsumerContainer");
}
后面添加
// 这里是贵司在zsdvendershot中使用的selector,如果不是zsdselector,请替换成相应的
sp<ZsdSelector> pSelector = new ZsdSelector();
pConsumer->setSelector(pSelector);
2. ZsdShot.cpp的prepareSetting()函数的
if(mpConsumer.promote() == NULL)
{
MY_LOGE("can't find StreamBufferProvider in ConsumerContainer");
}
后面添加
sp<ZsdSelector> pSelector = new ZsdSelector();
pConsumer->setSelector(pSelector);
3. 在MultiShot.cpp的start函数的
sp<StreamBufferProvider> spProvider = spContainer-
>queryConsumer(eSTREAMID_IMAGE_PIPE_RAW_OPAQUE);
if( spProvider.get() == NULL )
{
MY_LOGE("spProvider.get() == NULL");
return MFALSE;
}
后面添加
游客,如果您要查看本帖隐藏内容请回复

开发板/核心板定制开发(技术支持):https://bbs.16rd.com/mall_list-2.html
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

合作/建议

TEL: 19168984579

工作时间:
周一到周五 9:00-11:30 13:30-19:30
  • 扫一扫关注公众号
  • 扫一扫打开小程序
Copyright © 2013-2024 一牛网 版权所有 All Rights Reserved. 帮助中心|隐私声明|联系我们|手机版|粤ICP备13053961号|营业执照|EDI证
在本版发帖搜索
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表