#include #include #include #include "tdb.h" #include "s.C" void write_pbm(uint8_t *tp, int w, int h, const char *fmt, ...) { va_list ap; va_start(ap, fmt); char fn[256]; vsnprintf(fn, sizeof(fn), fmt, ap); va_end(ap); FILE *fp = !strcmp(fn,"-") ? stdout : fopen(fn,"w"); if( fp ) { fprintf(fp,"P5\n%d %d\n255\n",w,h); fwrite(tp,w,h,fp); fclose(fp); } } int del_clip_set(theDb *db, int clip_id) { printf("del clip %d\n",clip_id); if( db->clip_set.FindId(clip_id) ) return 1; db->clip_set.Destruct(); db->clip_set.Deallocate(); if( Clip_viewsLoc::ikey_Clip_access(db->clip_views,clip_id).Find() ) return 1; db->clip_views.Destruct(); db->clip_views.Deallocate(); while( !TimelineLoc::ikey_Sequences(db->timeline,clip_id,0).Locate() ) { if( clip_id != (int)db->timeline.Clip_id() ) break; int frame_id = db->timeline.Frame_id(); db->timeline.Destruct(); db->timeline.Deallocate(); if( !TimelineLoc::ikey_Timelines(db->timeline, frame_id).Locate() && frame_id == (int)db->timeline.Frame_id() ) continue; if( db->video_frame.FindId(frame_id) ) continue; db->video_frame.Destruct(); db->video_frame.Deallocate(); } return 0; } int main(int ac, char **av) { int ret; setbuf(stdout,0); theDb db; db.open(av[1]); //db.access(av[1], 34543, 0); if( !db.opened() || db.error() ) exit(1); while( !(ret=db.clip_set.FirstId()) ) { printf("clip %d %f %d\n", db.clip_set.id(), db.clip_set.Position(), db.clip_set.Frames()); del_clip_set(&db, db.clip_set.id()); } if( !(ret=db.video_frame.FirstId()) ) do { printf("frame %d\n", db.video_frame.id()); if( ac > 2 ) { uint8_t *dat = db.video_frame._Frame_data(); write_pbm(dat,80,45,"%s/f%05d.pbm",av[2],db.video_frame.id()); } } while( !(ret=db.video_frame.NextId()) ); db.close(); return 0; }