#include <QApplication>
#include <QGLFormat>
#include <QSurfaceFormat>
+#include <QProgressDialog>
#include <movit/init.h>
#include <movit/util.h>
// TODO: Delete the surface, too.
}
+ load_existing_frames();
+
MainWindow main_window;
main_window.show();
init_jpeg_vaapi();
- load_existing_frames();
thread record_thread(record_thread_func);
int ret = app.exec();
return ret;
}
-void load_frame_file(const char *filename, unsigned filename_idx, DB *db)
+void load_frame_file(const char *filename, const string &basename, unsigned filename_idx, DB *db)
{
struct stat st;
if (stat(filename, &st) == -1) {
exit(1);
}
- vector<DB::FrameOnDiskAndStreamIdx> all_frames = db->load_frame_file(filename, st.st_size, filename_idx);
+ vector<DB::FrameOnDiskAndStreamIdx> all_frames = db->load_frame_file(basename, st.st_size, filename_idx);
if (!all_frames.empty()) {
// We already had this cached in the database, so no need to look in the file.
for (const DB::FrameOnDiskAndStreamIdx &frame : all_frames) {
size_t size = ftell(fp);
fclose(fp);
- db->store_frame_file(filename, size, all_frames);
+ db->store_frame_file(basename, size, all_frames);
}
void load_existing_frames()
{
- DB db(global_flags.working_directory + "/futatabi.db");
+ QProgressDialog progress("Scanning frame directory...", "Abort", 0, 1);
+ progress.setWindowTitle("Futatabi");
+ progress.setWindowModality(Qt::WindowModal);
+ progress.setMinimumDuration(1000);
+ progress.setMaximum(1);
+ progress.setValue(0);
string frame_dir = global_flags.working_directory + "/frames";
DIR *dir = opendir(frame_dir.c_str());
return;
}
+ vector<string> frame_basenames;
for ( ;; ) {
errno = 0;
dirent *de = readdir(dir);
break;
}
- if (de->d_type == DT_REG) {
+ if (de->d_type == DT_REG || de->d_type == DT_LNK) {
string filename = frame_dir + "/" + de->d_name;
- load_frame_file(filename.c_str(), frame_filenames.size(), &db);
frame_filenames.push_back(filename);
+ frame_basenames.push_back(de->d_name);
}
- }
+ if (progress.wasCanceled()) {
+ exit(1);
+ }
+ }
closedir(dir);
+ progress.setMaximum(frame_filenames.size() + 2);
+ progress.setValue(1);
+
+ progress.setLabelText("Opening database...");
+ DB db(global_flags.working_directory + "/futatabi.db");
+
+ progress.setLabelText("Reading frame files...");
+ progress.setValue(2);
+
+ for (size_t i = 0; i < frame_filenames.size(); ++i) {
+ load_frame_file(frame_filenames[i].c_str(), frame_basenames[i], i, &db);
+ progress.setValue(i + 3);
+ if (progress.wasCanceled()) {
+ exit(1);
+ }
+ }
+
if (start_pts == -1) {
start_pts = 0;
} else {