Tech と Culture

テクノロジーとカルチャー

djpeg の motionJPEG対応

入力データとなる多数の画像が含まれるjpegファイル (motionJPEGファイル)が生成できたので、今度はプログラムの方を変更して次々と画像を表示していくようにする。

libjpeg.doc を読んでいくと、 Abbreviated datastreams and multiple images という章がある。

create JPEG decompression object
set source to tables-only file
jpeg_read_header(&cinfo, FALSE);
set source to abbreviated image file
jpeg_read_header(&cinfo, TRUE);
set decompression parameters
jpeg_start_decompress(&cinfo);
read data...
jpeg_finish_decompress(&cinfo);

という構造にして、 jpeg_read_header()....jpeg_finish_decompress()を繰り返すと次々と画像を繰り返し処理するようになるそうだ。例によって、ホストのXwindows版のプログラムで調査する。

djpeg.c の main() をいじってこの処理ができるようにする。
for(i=0;i<1000;i++){
jpeg_start_decompress()
while(cinfo.output_scanline < cinfo................){
num_scanlines = jpeg_read_scanlines(&cinfo...........)
/*(*dest_mgr->put_pixel_rows)(&cinfo,........)*/
}
}

こんな感じに一行処理のwhile文の外側にfor loopを入れる(これが画像一枚毎のループ)。

このように変更してコンパイル、ffmpeg で生成したmotionJPEGファイルを読み込むと無事に動画を再生してくれた。