已关闭
HEIF采样回退后色彩转换缓冲区尺寸不一致导致崩溃 #4891
huchao53创建于  9月16日关闭于  9月17日
huchao53
9月16日 创建

问题描述

HEIF 采样解码失败后回退到原尺寸软件解码,实际像素缓冲区和 context.outInfo 已恢复原尺寸,但 dstInfo_ 仍可能保留采样尺寸。后续指定色彩空间转换使用过期的 hwDstInfo_ 分配目标内存,写入尺寸却来自实际 SurfaceBuffer,导致目标容量与转换尺寸不一致并发生崩溃。

已观察到的参数

原图和实际缓冲区为 3072 × 4096,RGBA8888,源 stride 为 12288;hwDstInfo_.computeMinByteSize() 为 786432 字节。原尺寸转换至少需要 50331648 字节。崩溃栈位于 SkBitmap::readPixels / SkConvertPixels / store_8888。
采样成功时还存在另一条失败路径:源缓冲区已缩小,但 installPixels 使用原图宽高,导致宽度与源 stride 不匹配。

预期行为与修复范围

  • 软解回退时同步恢复 dstInfo_ 宽高。
  • 色彩转换按实际源缓冲区宽高构造源图描述,按本次 dst.info 申请目标内存。
  • 使用目标自己的 stride,写入前检查行布局、尺寸计算溢出及实际容量。
  • 增加采样缓冲区、过期采样尺寸、大 stride 对齐三个 RGBA8888 回归用例。

验证与后续关注

已完成本地静态检视及差异空白检查,尚未完成本地编译、单测、fuzz、XTS 和真实设备验证;当前无完整 OpenHarmony 编译环境及连接设备,XTS 目标未确认。
需验证 HEIF 采样成功/失败回退、JPEG 硬解和 AVIF 共用色彩转换路径。BGRA/RGB565 源格式描述、JPEG 缓存同步以及批量回退时的内存峰值属于已记录的后续关注项,本次修复聚焦尺寸和 stride 一致性。

likedislike
openharmony_ci
openharmony_ci成员
9月16日 评论:

感谢提交Issue!关于Issue的交互操作,请访问OpenHarmony社区支持命令清单。如果有问题,请联系 [@yaozhupeng](https://gitcode.com/yaozhupeng) [@yangfan9527](https://gitcode.com/yangfan9527) [@chen-yuheng5](https://gitcode.com/chen-yuheng5) 。如果需要调整订阅PR、Issue的变更状态,请访问链接。


Thanks for submitting the issue. For more commands, please visit OpenHarmony Command List. If you have any questions, please refer to committer gitcode for help. If you need to change the subscription of a Pull Request or Issue, please visit the link.

likedislike
openharmony_ciopenharmony_ci成员
9月16日 添加了label:waiting_for_assign
Hhuchao53
9月16日 关联了pull request:fix(codec): align color conversion with decoded buffer layout
openharmony_ciopenharmony_ci成员
9月17日 关闭了 issue
openharmony_ciopenharmony_ci成员
9月17日 issue状态由 待办的 改变为 已完成