So-net無料ブログ作成
検索選択

一段落。 [開発系とか]

一旦、libavPlayer.frameworkの更新ペースを落とそうと思う。

主立った問題はほぼ対処出来たし、クラッシュネタもほぼ潰せたから。

//

思いつく範囲で、フレームワーク側で考える必要があるのは、ColorSync/Display Color Profile対応の箇所くらいかな。でも、これはパス。知覚系カラースペースとかICCプロファイルとか、そういう世界になりそうで、面倒くさそう。

残るは、ほぼlibavformat側の問題ばかりだ。
・・・libavformatのMPEG TS/PS(.mpg、.vobを含む)のサポートが酷いな。

//

6月頃にmuken氏が書いたlibavformat/mov.cのパッチは、正直理解出来ない。

痛烈なMLのやりとりを読み返してみたが、自分には難しすぎる。あれはLP64とLLP64とILP32の環境で等しく動作するのか?とか、gcc 4.2とllvm-gcc-4.2とclang 1.7とclang 2.0とclang 2.1のどれとも互換性あるのか?とか、考えてみたが想像もつかない。

例示されていたあんなunionを使う必要もなくて、単にポインタをキャストして(uint32* → sint32*)、sint32で中身を取り出してから、sint64にサイズ拡張すればいいんじゃね?とか思った。冗長で汚いコードになるけど、そう書けば実装依存にならないと思うんだよね。

ってそう言う話じゃないんだろうな。あれだけやり合ってるんだから・・・。
nice!(0)  コメント(5)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 5

Shuna

素晴らしいライブラリに感動しました。
早速Document-Basedなアプリに組み込んでみたところ、これまでQTMovieでは再生出来なかったメディアがいくつも再生できました。
ありがとうございます。

なお、途中でいくつかの不具合に遭遇しました。いきなりの不具合報告で恐縮ですが、ご報告します。
まず、LAVPLayerにLAVPStreamをセットするのが早過ぎると
glFramebufferTexture2DEXT() failed! やGL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT
としてエラーになってしまうようです。
この場合、メモリを食い尽くしてしまいます。

またLAVPLayerを親ウィンドウへ配置するのが早過ぎると
再生したときにレイヤーが真っ白になってしまい、うまく再生されません。こちらも同じようなエラーがデバッグウィンドウに出力されます。

試行錯誤したところ、performSelector:withObject:AfterDelayで0.5秒ずつずらして初期化するなどすると回避できるようです。
まだライブラリ自体をビルドしたりはしていないので、今後はそちらと絡めて試してみたいと思っています。
by Shuna (2011-10-07 22:50) 

MyCometG3

バグレポートありがとうございます。
エラーするのは、読み込みに時間のかかる大きなファイルですか?

現在のLAVPStreamの初期化処理は、1.5秒で待機を打ち切りしてしまいます。
LAVPStreamのreadyForCurrentを繰り返し呼び出しチェックすることで、映像が用意出来るまで待機することが可能ですので試してみてください。

by MyCometG3 (2011-10-08 13:16) 

Shuna

ありがとうございます。
確認してみましたところ、仰る通りサイズによる読み込み時間に関係するようです。初期化処理のタイムアウトを設定できるようになると嬉しいですね。

(とはいえ、readyForCurrentで1が返るまで待機した後でも、StreamをLAVPLayerにセットした後に再生するまでが早過ぎると、レイヤーが真っ白になる時や、最初のフレームから更新されなくなる時がありました。必ずしもreadyForCurrentでOKとはいかないようです。。。)

また、ライブラリのアプリケーションバンドルへの同梱について、お聞きしてもよろしいでしょうか。
フレームワークをコピーするようビルドフェーズを構成しても、以下のエラーが出てしまいます:
warning: Unable to read symbols for /Library/Frameworks/libavPlayer.framework/Versions/A/libavPlayer (file not found).
warning: Unable to read symbols from "libavPlayer" (not yet mapped into memory).
dyld: Library not loaded: /Library/Frameworks/libavPlayer.framework/Versions/A/libavPlayer

このフレームワークは、かならず/Libraryにインストールしなくてはならないのでしょうか?
by Shuna (2011-10-11 00:43) 

MyCometG3

>最初のフレームから更新されなくなる時
これはこちらでも確認していますが、再現性が低くて調べ切れていません。いずれ直します。

>このフレームワークは、かならず/Libraryにインストールしなくてはならないのでしょうか?

いいえ。一応、/Library/Frameworksないし${HOME}/Library/Frameworksを想定して作っていますが、Privateでも使えると思います。該当のエラーはframework search pathの指定に問題がありそうですね。
Private Frameworkでの組み込み方は、「@executable_path」でググるといっぱい出てきます。お試しください。
by MyCometG3 (2011-10-11 20:41) 

Shuna

返信有難うございます。
一般的なフレームワークの使用法についてもう少し知らなくてはなりませんでした。otoolやinstall_name_toolの使い方についても調べてみたいと思います。
by Shuna (2011-10-13 07:56) 

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この記事のトラックバックURL:
※言及リンクのないトラックバックは受信されません。

関連リンク

メッセージを送る

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。