|
|
@@ -237,7 +237,11 @@ public final class LNMP4FrameHWDecoder: LNBaseDecoder {
|
|
|
}
|
|
|
|
|
|
deinit {
|
|
|
- onInputEnd()
|
|
|
+ // 与 ObjC 版 onInputEnd 对齐:用 decodeQueue.sync 确保队列上正在进行的
|
|
|
+ // 解码任务全部完成后再执行清理,防止 VTDecompressionSession 在使用中被销毁。
|
|
|
+ // ObjC 版在主线程时用 dispatch_sync,非主线程用 dispatch_async;
|
|
|
+ // Swift 版统一用 sync,保证 deinit 返回前资源已安全释放。
|
|
|
+ decodeQueue.sync { self.onInputEnd() }
|
|
|
fileInfo.occupiedCount -= 1
|
|
|
}
|
|
|
|
|
|
@@ -476,6 +480,8 @@ public final class LNMP4FrameHWDecoder: LNBaseDecoder {
|
|
|
guard let pixelBuffer = pixelBuffer else { return }
|
|
|
|
|
|
let newFrame = LNMP4AnimatedImageFrame()
|
|
|
+ // Swift 的 CVPixelBuffer? 属性赋值时,ARC 会通过 __bridge_transfer 自动 Retain/Release,
|
|
|
+ // 与 ObjC 版手动 CVPixelBufferRetain 效果等价,无需额外调用。
|
|
|
newFrame.pixelBuffer = pixelBuffer
|
|
|
newFrame.frameIndex = frameIndex
|
|
|
newFrame.decodeTime = Date().timeIntervalSince(startDate) * 1000.0
|