In the context of an app that uses a VTDecompressionSession
to decode incoming ts streams, the creation of the decompression session always fails for some h264 streams with code -12911 when running on a M1 iPad (iPad Pro, 12.9-inch, 5th generation, iOS 15.5).
When the same app is executed on my M1 Mac mini -as My Mac (Designed for iPad)- with the same stream, VTDecompressionSessionCreate
succeeds and the stream can be decoded.
Any idea of what could cause this error on the iPad?
The code:
decompressionSessionCreationStatus = VTDecompressionSessionCreate(allocator: kCFAllocatorDefault,
formatDescription: videoFormatDescription!,
decoderSpecification: nil,
imageBufferAttributes: nil,
outputCallback: nil,
decompressionSessionOut: &videoDecompressionSession)
if videoDecompressionSession != nil { ... }
else {
NSLog("videoDecompressionSession could not be created (status: %d): video format: %@",
decompressionSessionCreationStatus, (videoFormatDescription != nil) ? (CFCopyDescription(videoFormatDescription!) as String) : "{?}")
}
where videoFormatDescription
was previously created by extracting h264 parameter sets and calling CMVideoFormatDescriptionCreateFromH264ParameterSets
.
Output:
videoDecompressionSession could not be created (status: -12911):
video format: <CMVideoFormatDescription 0x281894360 [0x1dacc01b8]> {
mediaType:'vide'
mediaSubType:'avc1'
mediaSpecific: {
codecType: 'avc1' dimensions: 1920 x 1080
}
extensions: {{
CVImageBufferChromaLocationBottomField = Left;
CVImageBufferChromaLocationTopField = Left;
CVImageBufferColorPrimaries = "ITU_R_709_2";
CVImageBufferTransferFunction = "ITU_R_709_2";
CVImageBufferYCbCrMatrix = "ITU_R_709_2";
CVPixelAspectRatio = {
HorizontalSpacing = 1;
VerticalSpacing = 1;
};
FullRangeVideo = 0;
SampleDescriptionExtensionAtoms = {
avcC = {length = 119, bytes = 0x01640028 ffe10064 67640028 ad90a470 ... 68ff3cb0 fdf8f800 };
};
}}
}
Any help on this would be greatly appreciated! :)