static AUO_RESULT set_keyframe_from_aviutl(std::vector<int> *keyframe_list, const OUTPUT_INFO *oip) { AUO_RESULT ret = AUO_RESULT_SUCCESS; const int prev_chap_count = keyframe_list->size(); const char * const MES_SEARCH_KEYFRAME = "Aviutl キーフレーム検出中…"; DWORD tm = 0, tm_prev = 0; set_window_title(MES_SEARCH_KEYFRAME, PROGRESSBAR_CONTINUOUS); //検出ループ for (int i = 0; i < oip->n; i++) { //中断 if (oip->func_is_abort()) { ret |= AUO_RESULT_ABORT; write_log_auo_line(LOG_INFO, "Aviutl キーフレーム検出を中断しました。"); break; } //フラグ検出 if (oip->func_get_flag(i) & OUTPUT_INFO_FRAME_FLAG_KEYFRAME) keyframe_list->push_back(i); //進捗表示 (自動24fps化などしていると時間がかかる) if ((tm = timeGetTime()) - tm_prev > LOG_UPDATE_INTERVAL * 5) { set_log_progress(i / (double)oip->n); tm_prev = tm; } } set_window_title(MES_SEARCH_KEYFRAME, PROGRESSBAR_DISABLED); write_log_auo_line_fmt(LOG_INFO, "Aviutlから %d箇所 キーフレーム設定を検出しました。", keyframe_list->size() - prev_chap_count); return ret; }
void unity_server::start(const unity_server_initializer& server_initializer) { // log files if (!options.log_file.empty()) { if (options.log_rotation_interval) { graphlab::begin_log_rotation(options.log_file, options.log_rotation_interval, options.log_rotation_truncate); } else { global_logger().set_log_file(options.log_file); } } graphlab::configure_global_environment(options.root_path); graphlab::global_startup::get_instance().perform_startup(); // server address options.server_address = parse_server_address(options.server_address); // construct the server server = new cppipc::comm_server(std::vector<std::string>(), "", options.server_address, options.control_address, options.publish_address, options.secret_key); set_log_progress(true); // initialize built-in data structures, toolkits and models, defined in unity_server_init.cpp server_initializer.init_toolkits(*toolkit_functions); server_initializer.init_models(*toolkit_classes); create_unity_global_singleton(toolkit_functions, toolkit_classes, server); auto unity_global_ptr = get_unity_global_singleton(); server_initializer.register_base_classes(server, unity_global_ptr); // initialize extension modules and lambda workers server_initializer.init_extensions(options.root_path, unity_global_ptr); lambda::set_pylambda_worker_binary_from_environment_variables(); // start the cppipc server server->start(); logstream(LOG_EMPH) << "Unity server listening on: " << options.server_address << std::endl; logstream(LOG_EMPH) << "Total System Memory Detected: " << total_mem() << std::endl; }
//自動フィールドシフトが、動きを検出できない部分では正しく設定できないこともある static AUO_RESULT adjust_keyframe_as_afs_24fps(std::vector<int> &keyframe_list, const std::set<int> &keyframe_set, const OUTPUT_INFO *oip) { AUO_RESULT ret = AUO_RESULT_SUCCESS; #if 0 //デバッグ用 { const char * const MES_AFS_DEBUG = "Aviutl afs検出中…"; set_window_title(MES_AFS_DEBUG, PROGRESSBAR_CONTINUOUS); DWORD tm = 0, tm_prev = 0; char afs_csv_file[MAX_PATH_LEN] = { 0 }; strcpy_s(afs_csv_file, _countof(afs_csv_file), oip->savefile); change_ext(afs_csv_file, _countof(afs_csv_file), "x264guiEx_afs_log.csv"); FILE *fp_log = NULL; if (fopen_s(&fp_log, afs_csv_file, "wb") || fp_log == NULL) { write_log_auo_line(LOG_WARNING, "x264guiEx_afsログファイルを開けませんでした。"); } else { int drop = FALSE, next_jitter = 0; for (int i = 0; i < oip->n; i++) { afs_get_video((OUTPUT_INFO *)oip, i, &drop, &next_jitter); fprintf(fp_log, "%d\r\n%d,%d,", drop, next_jitter, 4*(i+1) + next_jitter); //進捗表示 (自動24fps化などしていると時間がかかる) if ((tm = timeGetTime()) - tm_prev > LOG_UPDATE_INTERVAL * 5) { set_log_progress(i / (double)oip->n); log_process_events(); tm_prev = tm; } } fclose(fp_log); } set_window_title(MES_AFS_DEBUG, PROGRESSBAR_DISABLED); } #endif //24fps化を仮定して設定し直す keyframe_list.clear(); const char * const MES_CHAPTER_AFS_ADJUST = "チャプター 補正計算中(afs 24fps化)..."; set_window_title(MES_CHAPTER_AFS_ADJUST, PROGRESSBAR_CONTINUOUS); int last_chapter = 0; for (auto keyframe : keyframe_set) { DWORD tm = 0, tm_prev = 0; const int check_start = (std::max)(0, ((keyframe - 300) / 5) * 5); int drop_count = 0; for (int i_frame = check_start, drop = FALSE, next_jitter = 0; i_frame < (std::min)(keyframe, oip->n); i_frame++) { afs_get_video((OUTPUT_INFO *)oip, i_frame, &drop, &next_jitter); drop_count += !!drop; //中断 if (oip->func_is_abort()) { ret |= AUO_RESULT_ABORT; write_log_auo_line(LOG_INFO, "Aviutl キーフレーム検出を中断しました。"); break; } //進捗表示 if ((tm = timeGetTime()) - tm_prev > LOG_UPDATE_INTERVAL * 5) { double progress_current_chapter = (i_frame - check_start) / (double)(keyframe - check_start); set_log_progress((last_chapter + progress_current_chapter * (keyframe - last_chapter)) / (double)oip->n); log_process_events(); tm_prev = tm; } } last_chapter = keyframe; keyframe_list.push_back(4*check_start/5 + (keyframe - check_start) - drop_count); } set_window_title(MES_CHAPTER_AFS_ADJUST, PROGRESSBAR_DISABLED); write_log_auo_line(LOG_INFO, "チャプター 補正計算(afs 24fps化)が完了しました。"); return ret; }
/** * Cleanup the server state */ void unity_server::stop() { delete server; server = nullptr; set_log_progress(false); graphlab::global_teardown::get_instance().perform_teardown(); }