]> git.sesse.net Git - nageru/blobdiff - flow.cpp
Write a .flo file for easier evaluation.
[nageru] / flow.cpp
index 205b24f098e4035f9f725a2f16e0c8b493fe6289..43daa787905c87584b9bbdc54cb31063733b05ac 100644 (file)
--- a/flow.cpp
+++ b/flow.cpp
@@ -455,6 +455,10 @@ int main(void)
        MotionSearch motion_search;
        Densify densify;
 
+       GLuint query;
+       glGenQueries(1, &query);
+       glBeginQuery(GL_TIME_ELAPSED, query);
+
        for (int level = coarsest_level; level >= int(finest_level); --level) {
                int level_width = WIDTH >> level;
                int level_height = HEIGHT >> level;
@@ -507,6 +511,15 @@ int main(void)
 
                prev_level_flow_tex = dense_flow_tex;
        }
+       glEndQuery(GL_TIME_ELAPSED);
+
+       GLint available;
+       do {
+               glGetQueryObjectiv(query, GL_QUERY_RESULT_AVAILABLE, &available);
+       } while (!available);
+       GLuint64 time_elapsed;
+       glGetQueryObjectui64v(query, GL_QUERY_RESULT, &time_elapsed);
+       fprintf(stderr, "GPU time used = %.1f ms\n", time_elapsed / 1e6);
 
        int level_width = WIDTH >> finest_level;
        int level_height = HEIGHT >> finest_level;
@@ -514,7 +527,11 @@ int main(void)
        glGetTextureImage(prev_level_flow_tex, 0, GL_RGB, GL_FLOAT, level_width * level_height * 3 * sizeof(float), dense_flow.get());
 
        FILE *fp = fopen("flow.ppm", "wb");
+       FILE *flowfp = fopen("flow.flo", "wb");
        fprintf(fp, "P6\n%d %d\n255\n", level_width, level_height);
+       fprintf(flowfp, "FEIH");
+       fwrite(&level_width, 4, 1, flowfp);
+       fwrite(&level_height, 4, 1, flowfp);
        for (unsigned y = 0; y < unsigned(level_height); ++y) {
                int yy = level_height - y - 1;
                for (unsigned x = 0; x < unsigned(level_width); ++x) {
@@ -525,6 +542,9 @@ int main(void)
                        du = (du / w) * level_width;
                        dv = (-dv / w) * level_height;
 
+                       fwrite(&du, 4, 1, flowfp);
+                       fwrite(&dv, 4, 1, flowfp);
+
                        uint8_t r, g, b;
                        flow2rgb(du, dv, &r, &g, &b);
                        putc(r, fp);
@@ -533,6 +553,7 @@ int main(void)
                }
        }
        fclose(fp);
+       fclose(flowfp);
 
        fprintf(stderr, "err = %d\n", glGetError());
 }