minor changes; mostly for new Context Help feature
[goodguy/cinelerra.git] / cinelerra-5.1 / 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;
49         m += d;
50         if( d < 0 ) d = -d;
51         n += d;
52         putc(clip(*ap-*bp+128), fp);
53       }
54       if( fp != stdout ) fclose(fp);
55     }
56     else {
57       perror(av[4]);
58       exit(1);
59     }
60   }
61   else {
62     uint8_t *ap = adat, *bp = bdat;
63     int n = 0, m = 0;
64     for( int i=w*h; --i>=0; ++ap, ++bp ) {
65       int d = *ap-*bp;
66       m += d;
67       if( d < 0 ) d = -d;
68       n += d;
69     }
70   }
71   fprintf(sfp, "%d %d\n",n,m);
72   db.close();
73   return 0;
74 }