現在のムービーのネイティブ サイズで QTPixelBufferContextCreate を使用してピクセル バッファを作成しています。次に、コンテキストでムービーを開き、必要なフレームをキューに入れ、QTVisualContextIsNewImageAvailable を使用してチェックします。次に、QTVisualContextCopyImageForTime を呼び出してフレームをリードバックし、さらに CPU ベースの画像処理を行います。
これは、kCVPixelBufferPixelFormatTypeKey として k32ARGBPixelFormat または k422YpCbCr8CodecType を使用して、すべてのムービー解像度で正常に機能しています。
ここで、kCVPixelBufferPixelFormatTypeKey を k422YpCbCr10CodecType または k64ARGBPixelFormat に切り替えます。QTVisualContextCopyImageForTime は、特定の大きなムービー解像度で失敗します。QTPixelBufferContextCreate は機能し、QTVisualContextIsNewImageAvailable は使用可能なフレームがあることを示します。
1280 幅未満のムービーのデコードはすべて問題ありません (720、960、1216 など)。
1280 または 1920 のような幅の広いムービーをデコードすると、QTVisualContextCopyImageForTime は -6683 または kCVReturnPixelBufferNotOpenGLCompatible を返しますOpenGL テクスチャなので、OpenGL を使用しないでください。
k32ARGBPixelFormat に戻すと、すべてが再び機能します。QTPixelBufferContextCreate を呼び出すときに、kCVPixelBufferWidthKey と kCVPixelBufferHeightKey を含めたり除外したりできますが、違いはありません。ネイティブのスケーリングされていないサイズが返され、ソース ムービーは 10 ビットの非圧縮または ProRes であり、結果は変わりません。
したがって、より広い映画とより深い Pixel フォーマットの組み合わせが失敗の原因になっているようです。
すべてがSDムービーで動作しているため、アイデアは大歓迎です.HDムービーでテストしたときに問題が発見されました.
ありがとう、
アダム