【发布时间】:2020-07-30 10:56:35
【问题描述】:
所以我有一些代码来创建 H264ParameterSets,例如:
var formatDesc: CMVideoFormatDescription?
func createH264FormatDescription(SPS: Array<UInt8>, PPS: Array<UInt8>) -> OSStatus {
if formatDesc != nil { formatDesc = nil }
let paramSet = [UnsafePointer<UInt8>(SPS), UnsafePointer<UInt8>(PPS)]
let paramPointers = UnsafePointer<UnsafePointer<UInt8>>(paramSet)
let paramSizes = UnsafePointer<Int>([SPS.count, PPS.count])
let status = CMVideoFormatDescriptionCreateFromH264ParameterSets(allocator: kCFAllocatorDefault, parameterSetCount: 2, parameterSetPointers: paramPointers, parameterSetSizes: paramSizes, nalUnitHeaderLength: 4, formatDescriptionOut: &formatDesc)
return status
}
从 Xcode 11.4 开始,我收到了有关 UnsafePointer() 的警告,这在以前似乎没有发生过:
Initialization of UnsafePointer<UInt8> results in a dangling pointer
Initialization of UnsafePointer<UnsafePointer<UInt8>> results in a dangling pointer
Initialization of UnsafePointer<Int> results in a dangling pointer
我不确定我们为什么会看到这个?以及如何删除警告?提前致谢。
【问题讨论】:
-
@matt 我不认为您发布的问题解决了我的问题,我之前已经检查过,但没有给出明确的答案。所以downvote实际上是在滥用它的工作机制
-
真的吗?这些链接在我看来是正确的。传递不安全的指针总是错误的。现在是警告,将来会出现编译错误。这些链接也给出了正确的答案。
-
@matt 问题是使用 .withUnsafeBufferPointer {} 会触发新的错误,请参阅下面的答案和我的评论。我希望您可以重新打开它,因为这是一个稍微不同的问题,或者您发布的主题不能直接导致解决方案。
-
@matt 此外,Apple 的 API 要求我传递 UnsafePointer 类型。
-
即使我可以从 UnsafeBufferPointer 获取 UnsafePointer,它也会破坏我需要返回的代码。使用块会有返回值会更复杂吗?无论如何,关键是我的问题不能简单地通过查看上面的帖子来解决。我想像我这样不熟悉 Videodecode+Swift 的人会有同样的困惑。