というわけで、前に記事を書いてからlibtheoraを使った動画再生を実装していましたが・・・・。
思った以上に大変な作業でした。というのも
- oggコンテナを使うことが前提で実装されているのでoggコンテナの知識が必要
- oggコンテナから直接theoraとvorbisを読み出す形の実装なのでほとんど素で処理の実装が必要(vorbisfileを自前で実装するようなもの)
- oggコンテナがストリーミングを前提としたものなのでシーク処理の実装がとっても大変・・・というよりlibtheoraがシーク処理を前提にしていないよう
というかなりの悪条件が響いたからです。
実装中は各ライブラリのドキュメント+サンプルとにらめっこしならがどの関数がどの処理をするのかを理解しながらの進行になりました。
ogg-vorbisを再生させるだけならvorbisfileの実装を簡単に理解できればそれでいいのですが、このレベルになるといろんな部分に処理が飛ぶので
ドキュメントを閉じたり開いたりと面倒なことこの上なかったです。
おかげでoggコンテナがどういう構造をしているかほぼ完全にわかったところがある種意味がないけれども理解ができたというところですが。
なお、その1を書いているということで、まずはデコーダのベース部分が仮組みが終わったというところです。
YUV=>RGB変換はSIMD化を後回しにしてとりあえず変換させるだけの組み込みです。平面からピクセルパックへの変換なので前に組んだコードが使えないんですね・・・。
シーク処理などはかなり怪しいので次の実装をして動きを見ながら修正というところでしょうか。
次はDirectShowのフィルタとして実装して動きを見てみるか、自前の動画処理で実装して動きを見てみるか何ですが・・・。