2003年6月の技術日記


Jun.9,2003 (Mon)

ndiary

日記をはじめる。主に技術的なメモを記録する予定。更新の頻度はあまり高くない模様。

参考:毎日, 快適に日記を書くために―ndiary_mode

Jun.16,2003 (Mon)

FreeBSD 5.1

VMware3.2 on Linux (TL8WS) にFreeBSD5.1を入れる。FTPでは何故か途中でVMのネットワークカードが固まってしまい、インストールできない。CD-ROMイメージを落としてきて、CD-ROMからインストールすると成功。早速カーネル再構築。とりあえず、今のところ問題は無いみたい。

Jun.21,2003 (Sat)

AVIファイルのプレビューを作る。

今までtranscodeを使ってきたが、一部読み込めないAVIがあった。下位ライブラリのAVIfileでは読み込めていたので多分transcodeのバグだろうと思ってソースを見ると大変汚い。開発サイドに報告しようにもAVIファイルを送る以外に再現が難しそうだったので、別方法を考える。JavaのJMFが使えそうだったので調べる。

JMF から必要なものを取ってくる。

Howto 的なサンプルもたくさんあるので非常に便利。

Accesing Individual Decoded Video Frames を参考にして、各フレームにアクセスするプログラムを作る。


// PostAccessCodec というオブジェクトに各フレームにアクセスさせる。
TrackControl videoTrack = null;
for (int i = 0; i < tc.length; i++) {
    if (tc[i].getFormat() instanceof VideoFormat) {
        videoTrack = tc[i];
        break;
    }
}
Codec codec[] = { null ,  new PostAccessCodec()};
videoTrack.setCodecChain(codec);

PostAccessCode の accessFrame の内容を以下のように書くことで、各フレームの画像をJPEGで保存できる。


void accessFrame(Buffer buffer) {
    Object data = buffer.getData();
    if (!(data instanceof int[]))
        return;
    RGBFormat format = (RGBFormat) buffer.getFormat();
    frameImage = new BufferedImage(format.getLineStride(),
                                   format.getSize().height,
                                   BufferedImage.TYPE_INT_BGR);//※注意
    frameImage.getRaster().setDataElements(0,0,format.getLineStride(),
                                           format.getSize().height,
                                           data);
    try {
        FileOutputStream fout = 
            new FileOutputStream(new File("test-out.jpg"));
        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fout);
        encoder.encode(frameImage);
        fout.flush();
        fout.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
//この後停止処理...

※RGBかBGRかの判定は、どうやら人間の目でしか判定できないらしい。

GPLなライブラリではないが、圧倒的なドキュメントとライブラリの素晴らしさはさすがIBMとSun。



[最新にもどる]
桜井雅史: E-mail : m.sakurai@cmt.phys.kyushu-u.ac.jp
Web page : http://www.cmt.phys.kyushu-u.ac.jp/~M.Sakurai/