initial commit
[goodguy/history.git] / cinelerra-5.0 / db / utils / framediff.C
1
2 #include<stdio.h>
3 #include<stdarg.h>
4 #include<time.h>
5
6 #include "tdb.h"
7 #include "s.C"
8
9 int clip(int v) { return v > 255 ? 255 : v < 0 ? 0 : v; }
10
11 int main(int ac, char **av)
12 {
13   setbuf(stdout,0);
14   theDb db;
15   db.open(av[1]);
16   //db.access(av[1], 34543, 0);
17   if( !db.opened() || db.error() ) exit(1);
18   int aid = atoi(av[2]);
19   int bid = atoi(av[3]);
20
21   Video_frameLoc aframe(db.video_frame);
22   Video_frameLoc bframe(db.video_frame);
23   if( aframe.FindId(aid) ) {
24     printf("cant access frame %d\n", aid);
25     exit(1);
26   }
27   if( bframe.FindId(bid) ) {
28     printf("cant access frame %d\n", aid);
29     exit(1);
30   }
31
32   uint8_t *adat = aframe._Frame_data(), *bdat = bframe._Frame_data();
33   FILE *sfp = stdout;
34   int w = 80, h = 45;
35   int n = 0, m = 0;
36   if( ac > 4 ) {
37     FILE *fp;
38     if( !strcmp(av[4],"-") ) {
39       fp = stdout;
40       sfp = stderr;
41     }
42     else
43       fp = fopen(av[4],"w");
44     if( fp ) {
45       fprintf(fp,"P5\n%d %d\n255\n",w,h);
46       uint8_t *ap = adat, *bp = bdat;
47       for( int i=w*h; --i>=0; ++ap, ++bp ) {
48         int d = *ap-*bp;      m += d;
49         if( d < 0 ) d = -d;   n += d;
50         putc(clip(*ap-*bp+128), fp);
51       }
52       if( fp != stdout ) fclose(fp);
53     }
54     else {
55       perror(av[4]);
56       exit(1);
57     }
58   }
59   else {
60     uint8_t *ap = adat, *bp = bdat;
61     int n = 0, m = 0;
62     for( int i=w*h; --i>=0; ++ap, ++bp ) {
63       int d = *ap-*bp;      m += d;
64       if( d < 0 ) d = -d;   n += d;
65     }
66   }
67   fprintf(sfp, "%d %d\n",n,m);
68   db.close();
69   return 0;
70 }