logo

nikq::cube

2006年8月29日(火) 23:17

XVD decoder decompile

ついこの間出た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の取得かな?
}

written by nikq [/program] [この記事のURL] [コメントを書く] [コメント(0)]

Comments

TrackBacks

nikq::cube

MySketch 2.7.2 written by 夕雨