TheoraLib.DLL(Theora再生Delphiライブラリ)


とりあえず出来たのでアップしておきます。
OggTheora動画再生ライブラリ(DLL)です。


・ダウンロード(2011/09/29 更新)
http://kota.dokkoisho.com/#TheoraLib


/---LICENSE---/
"TheoraLib" free for private or commercial use.
but apply to the OggTheora BSD-Style License.
http://www.theora.org/faq/#14


・概要
OggTheora形式(*.ogv)の動画再生を行うライブラリです。
ogm形式(*.ogm)は別物ですので注意して下さい。
(正確には、ogm形式の動画:Theora/音声:Oggの組み合わせがOggTheora形式に相当します。ogm形式はそれ以外の組み合わせも容認したフォーマットなので別物になります)
映像と音声の抜き出しを行います。
主にゲームで使用するであろう小規模(10M)〜中規模(100M)の使用に最適化したものになっているため、ストリーミングデータや2ch以上の音声には対応しておりません。
またシーク情報を読み込み時に構築するため、ギガ単位の巨大なファイルも扱うことが出来ません。


デコーダ部分はDLL形式で提供します。
DLLを扱うためのDelphiのヘッダ・ソースファイルが付いてきます。
13Kぐらいの単純なものですから、C++やDやC#なんかにも簡単に移植できると思います。
(DLLはC++製なんですよタハハ・・・)


・ライセンス
個人及び商用利用することが出来ます。
ライセンスはOggTheoraライセンス(FreeBSD)に沿ってご使用下さい。
私からは特に何も設けるつもりはありません。ご自由に。


・サンプル
DLL読み込みや下準備を無視するとして、こんな感じで使用します。
七面倒なシークに関する処理は内部に隠蔽され、最適化されます。

//映像取得
//コールバック関数で指定ビットマップ(メモリ領域)に指定フレームの映像が転送されます。
theoralib_m_decodeframe(movie,FFrameNo);

//音声取得
//FSoundBuffer(TMemoryStream)に波形が出力されます。
theoralib_w_decodewave(wave,FSoundBuffer.Memory,FWavePos,4096);

※ただし、スレッドが分かれる場合は映像取得と音声取得を競合させないよう排他処理すること。


・あとがき
なんせOggパケット解析から組む必要があったので、ものによっては読み込めないファイルもあるかも知れません。
あと、色々変な部分があるかも知れません。


・修正情報
2011/09/29...YUV420の画質を向上。(UVの縦方向にも補間をかけました)
2011/07/01...一部のムービーでTotalTimeがおかしくなる点を修正。
2009/10/03...LibTheora-1.1.1でコンパイルし直しました。速くなってるといいなぁ。
2009/10/02...DigitalYUV変換がバグってたのを修正。YUV変換修正。
2009/09/25...ColorSpace=2の場合のYUV変換公式が違っていた点を修正。マニュアル修正(SetDecodeMode)
2009/09/15...最終フレーム付近が単色一色の場合、最後のフレームが取得でき無い場合があるったのを修正。
2009/07/11...ちょっぴり画質向上。(UVプレーンの伸長に横方向のみ線形補間処理を適用しました)
2009/07/02...KeyFrame間隔が小さい場合に希に表示がおかしくなる点を修正。
2009/04/11...theoralib_w_totaltimeがオーバーフローして変な値を返していた点を修正。
2009/02/15...theoralib_w_decodesampleの波形が壊れちゃってたのを修正。
2009/02/12...若干異なるパケット構造のファイルも読み込めるように修正。
2009/02/11...Win98でも動くようにしました。