私はムービープレーヤを64ビットに移行しています。Snow Leopard:QuickTime APIの64ビット置換
現在、QuickTime APIとFFmpegの両方で映画をデコードすることができます。 QuickTimeのAPIを使用して復号する
Iは、QTVisualContextRef
を提供QTOpenGLTextureContext
を作成し、IはQTVisualContextCopyImageForTime
を使用してタイプCVOpenGLTextureRef
の復号フレームを得ます。
私のアプリケーションを64ビットにしたいので、この機能が64ビットではないため、QuickTime APIをもう使用できません。
私はQTKitに渡り、さまざまな画像フォーマットでデコードされたフレームを与えるframeImageAtTime:withAttributes:error:
というメソッドを使ってフレームをデコードし始めました。現在私はディスプレイルーチンの実際の構造をすべて使用するためにCVOpenGLTextureRef
を返すようにしました。 このメソッドは実際に動作し、私は32ビットのQTVisualContextRef
を取り除くことができます。
この方法は非常に遅いです。アップルのh264映画予告編をリアルタイムで再生することはできません。これは、古いメソッドがCVOpenGLTextureRef
を出力するのに必要な時間の4倍を必要とします!
私はsuccess..itが、時には遅くだなしframeImageAtTime:withAttributes:error:
は、出力に扱うことができる他の画像タイプのすべてを試してみました。..
指定された属性
は以下のとおりです。本当の交換がある[_imageAttr setObject:QTMovieFrameImageTypeCVOpenGLTextureRef forKey:QTMovieFrameImageType];
[_imageAttr setObject:[NSValue valueWithPointer:[openGLContext CGLContextObj]] forKey:QTMovieFrameImageOpenGLContext];
[_imageAttr setObject:[NSValue valueWithPointer:[openGLPixelFormat CGLPixelFormatObj]] forKey:QTMovieFrameImagePixelFormat];
[_imageAttr setObject:[NSNumber numberWithBool:YES] forKey:QTMovieFrameImageSessionMode];
[_imageAttr setObject:[NSNumber numberWithBool:YES] forKey:QTMovieFrameImageHighQuality];
[_imageAttr setObject:[NSNumber numberWithBool:YES] forKey:QTMovieFrameImageDeinterlaceFields];
QuickTime APIは64ビットですか?何かありますか?
私は私はあなたが私を助けることができると思いますCVOpenGLTextureRef
またはCVPixelBufferRef
またはCIImage*
を得なければならないので、私は、メディアプレーヤーの主要な構成を変更することはできません!
私はAVFoundationを使うことができると知っていますが、そのフレームワークはLionでのみ利用可能で、私のアプリはSnow Leopardでも互換性があります。 – Andrea3000