2011-09-17 8 views
1

私はムービープレーヤを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*

を得なければならないので、私は、メディアプレーヤーの主要な構成を変更することはできません!

+0

私はAVFoundationを使うことができると知っていますが、そのフレームワークはLionでのみ利用可能で、私のアプリはSnow Leopardでも互換性があります。 – Andrea3000

答えて

1

QuickTimeの置き換えはAVFoundationです。それはあなたが今必要とするすべてを含んでいるとは限りませんが、これは未来です。

+0

私はそれを恐れていました.. 私はライオンに移動します。多く;-) – Andrea3000