■
妄想です。試してません。十分調べてもいません。勝手な決めつけが大部分を占めています。ご注意を。
Matroskaコンテナが名前のとおり、入れ子にできるのだとしたら。例えば、"天地無用.mka"のようなファイルを想像する。天地無用にはOVA版が1期〜3期とTV版が3種*1ある。まず、CDが準拠しているシリーズごとにmkaを作る。その中には、さらにタイトルごとにmkaがあり、中にはディスクが複数あるものもあるだろう。私が所持しているのはOVA第三期其ノ一〜三。つまり、2段階くらいなら作れてしまうわけだ。もちろん全部持ってる人もいるだろうし。
しかし、実際問題そんな入れ子に対応したプレイヤーはあるのだろうか。なんとなくなさそう。となれば、自作するしかない。*2
おそらくツリー状のコントロールで管理するのがよいだろう。とりあえず、GUIのアプリはJavaでしか作ったことないからJavaで。しかし、困るのは中のファイルを再生するのに外部のDLLを使わないとやってられないこと。まさかTTA再生用のJavaクラスがあるとは思えない。
そこで、Javaから、既存のネイティブコードなDLLを利用できるのか?という疑問が沸く。ちょっとだけ調べてみると、Javaからネイティブメソッドを呼ぶのにはJNIというインターフェイス*3を使うようだ。しかし、これはJavaのクラスコードの一部をネイティブに置き換えるためのもので、既存のライブラリを使うことはできないようだった。
そこで、JNIを使ったJava用のネイティブDLLから、既存のネイティブコードなDLLを呼べばいいんではないかと思いつく。つまり、JNIのDLLは、既存のDLLとJavaクラスとの橋渡し役となる。
ここまで考えてから、そもそもJNIの利用価値ってこれくらいしかないんじゃないかと思った。最近ではJavaがC++を実行速度で上回ったりすることもあるようだし。ネイティブで書けばいいってもんでもない*4。結局、既存の資源を利用するために使うのが、もっとも有用な使い道な気がした。
あー長い。