FrameInfoHelperImpl 构造时,先通过 std::move(drdc_lock) 将 DrDc 锁传递给基类,随后又将同一个参数传递给 GPU 序列上的 OnGpu 对象。
FrameInfoHelperImpl
std::move(drdc_lock)
OnGpu
第一次移动后,本地的 scoped_refptr 已经为空,导致 OnGpu 收到空的 DrDc 锁。播放 HEVC 视频并初始化解码器时,会触发 RefCountedLock DCHECK,随后 GPU 进程因 SIGABRT 退出。
scoped_refptr
RefCountedLock
GPU 进程退出后,视频解码 Mojo 连接断开,最终表现为:
PIPELINE_ERROR_DISCONNECTED
原实现第一次初始化基类时移动了 drdc_lock:
drdc_lock
gpu::RefCountedLockHelperDrDc(std::move(drdc_lock))
问题描述
FrameInfoHelperImpl构造时,先通过std::move(drdc_lock)将DrDc 锁传递给基类,随后又将同一个参数传递给 GPU 序列上的
OnGpu对象。第一次移动后,本地的
scoped_refptr已经为空,导致OnGpu收到空的 DrDc 锁。播放 HEVC 视频并初始化解码器时,会触发
RefCountedLockDCHECK,随后 GPU 进程因 SIGABRT 退出。GPU 进程退出后,视频解码 Mojo 连接断开,最终表现为:
PIPELINE_ERROR_DISCONNECTED根本原因
原实现第一次初始化基类时移动了
drdc_lock:gpu::RefCountedLockHelperDrDc(std::move(drdc_lock))