#include <assert.h>
#include <stdio.h>
-#include "flow2rgb.h"
+#include "util.h"
#include <algorithm>
#include <memory>
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;
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;
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) {
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);
}
}
fclose(fp);
+ fclose(flowfp);
fprintf(stderr, "err = %d\n", glGetError());
}