ついこの間出たXVD codecのサンプルページを見ていたら、
Javaで実装されたプレイヤーがあったので
http://xvd.bha.co.jp/
http://xvd.bha.co.jp/gallery/
逆コンパイルしてみたよ。
jarパッケージの中のv8.classがビデオデコーダ本体で、
もちろんobfuscateされてるんだけど、
努力と根気で元に戻してみた。
p8.classがプレイヤースレッドで、そこからv8を読んでるので
いろいろ意味を推定して言った結果、以下のようになった。
インターフェース部分はこんな感じ。
public class video_codec
{
private int _cos_tab[];
int height_orig, width, height;
int C[]; // output frame
int ac; // play buffer offset?
private int Const1, Const2, Const3, Const4, Const5, Const6;
public video_codec(); // コンストラクタ
public int a( byte abyte0[], int i1 ); // pack 4 bytes into dword
private void _mthint(); // r
private int _mthif( int ai1[] ); // read codes ( arithmetic?
private int _mthif( int i1 ); // read code ( arithmetic?
private void a(); // read code initialize
private void _mthdo( int ai1[], int i1 ); // なんか初期化
private int _mthdo(); // read one bit
private int a( int i1 ); // read bits
private void a_intp( int ai1[] ); // do dct stuff
void dct_hori( int ai1[], int i1 );
void dct_vert( int ai1[], int i1 );
private void init_costab( void ); // cosine table initialize( 使ってないけど )
private void _mthif( int ai1[], int i1, int j1 );
private int _mthdo( int ai1[], int i1, int j1 );
public void _mthif( byte abyte0[] ); // ヘッダ部分のリード&デコーダ初期化?
public int a( byte abyte0[] ); // 多分バッファに追加&フレームデコード
public void _mthfor();
public void a( int ai1[], int ai2[], int ai3[], int ai4[], int i1, int j1, int k1, int l1 );
private void a( int ai1[], int i1, int j1 );
private void a( int ai1[], int ai2[], int ai3[], int i1, int j1, int k1, int l1 );
void a( int ai1[], int ai2[], int i1, int j1, int k1 ); // I-Frameの取得かな?
}