X-Git-Url: http://git.cinelerra-gg.org/git/?p=goodguy%2Fhistory.git;a=blobdiff_plain;f=cinelerra-5.1%2Fplugins%2Frgb601%2Fivtc.C.2;h=5fb34f7e7799cb523cd507f529065c6e417784db;hp=3da4aa68a4ebe93a3553d860162e4b1a3af67e69;hb=21c2e6b36d6a96c2f662a89459d607b5a387f4eb;hpb=30bdb85eb33a8ee7ba675038a86c6be59c43d7bd diff --git a/cinelerra-5.1/plugins/rgb601/ivtc.C.2 b/cinelerra-5.1/plugins/rgb601/ivtc.C.2 index 3da4aa68..5fb34f7e 100644 --- a/cinelerra-5.1/plugins/rgb601/ivtc.C.2 +++ b/cinelerra-5.1/plugins/rgb601/ivtc.C.2 @@ -1,4 +1,5 @@ #include "bccmodels.h" +#include "file.h" #include "filexml.h" #include "rgb601.h" #include "rgb601window.h" @@ -48,7 +49,7 @@ int RGB601Main::load_defaults() { char directory[1024], string[1024]; // set the default directory - sprintf(directory, "%srgb601.rc", BCASTDIR); + sprintf(directory, "%s/rgb601.rc", File::get_config_path()); // load the defaults defaults = new Defaults(directory); @@ -94,6 +95,8 @@ void RGB601Main::save_data(KeyFrame *keyframe) output.tag.set_property("AUTOMATIC", config.automatic); output.tag.set_property("AUTO_THRESHOLD", config.auto_threshold); output.append_tag(); + output.tag.set_title("/RGB601"); + output.append_tag(); output.terminate_string(); } @@ -128,7 +131,7 @@ void RGB601Main::read_data(KeyFrame *keyframe) // average = -1; // } - if(thread) + if(thread) { thread->window->frame_offset->update((long)config.frame_offset); thread->window->first_field->update(config.first_field); @@ -177,40 +180,40 @@ int64_t RGB601Main::compare_fields(VFrame *frame1, VFrame *frame2, int field) { case BC_RGB888: case BC_YUV888: - COMPARE_ROWS(result, - frame1->get_rows()[row], - frame2->get_rows()[row], - unsigned char, - frame1->get_w(), + COMPARE_ROWS(result, + frame1->get_rows()[row], + frame2->get_rows()[row], + unsigned char, + frame1->get_w(), 3); break; case BC_RGBA8888: case BC_YUVA8888: - COMPARE_ROWS(result, - frame1->get_rows()[row], - frame2->get_rows()[row], - unsigned char, + COMPARE_ROWS(result, + frame1->get_rows()[row], + frame2->get_rows()[row], + unsigned char, frame1->get_w(), 4); break; case BC_RGB161616: case BC_YUV161616: - COMPARE_ROWS(result, - frame1->get_rows()[row], - frame2->get_rows()[row], - u_int16_t, + COMPARE_ROWS(result, + frame1->get_rows()[row], + frame2->get_rows()[row], + u_int16_t, frame1->get_w(), 3); break; - + case BC_RGBA16161616: case BC_YUVA16161616: - COMPARE_ROWS(result, - frame1->get_rows()[row], - frame2->get_rows()[row], - u_int16_t, + COMPARE_ROWS(result, + frame1->get_rows()[row], + frame2->get_rows()[row], + u_int16_t, frame1->get_w(), 4); break; @@ -246,8 +249,8 @@ int RGB601Main::process_realtime(VFrame *input_ptr, VFrame *output_ptr) { int64_t field1 = compare_fields(temp_frame[0], input_ptr, 0); int64_t field2 = compare_fields(temp_frame[0], input_ptr, 1); - int64_t threshold = (int64_t)(config.auto_threshold * - input_ptr->get_w() * + int64_t threshold = (int64_t)(config.auto_threshold * + input_ptr->get_w() * input_ptr->get_h()); // if(input_ptr->get_color_model() == BC_RGBA8888 || @@ -280,7 +283,7 @@ int RGB601Main::process_realtime(VFrame *input_ptr, VFrame *output_ptr) for(int i = 0; i < input_ptr->get_h(); i++) { if((i + new_field) & 1) - memcpy(output_ptr->get_rows()[i], + memcpy(output_ptr->get_rows()[i], input_ptr->get_rows()[i], row_size); else @@ -298,8 +301,8 @@ int RGB601Main::process_realtime(VFrame *input_ptr, VFrame *output_ptr) state = 0; // Compute new threshold for next time - average = (int64_t)(average * total_average + - field1 + + average = (int64_t)(average * total_average + + field1 + field2) / (total_average + 2); if(input_ptr->get_rows()[0] != output_ptr->get_rows()[0]) @@ -313,13 +316,13 @@ int RGB601Main::process_realtime(VFrame *input_ptr, VFrame *output_ptr) new_field = 1; // Compute new threshold for next time - average = (int64_t)(average * total_average + + average = (int64_t)(average * total_average + field1) / (total_average + 1); for(int i = 0; i < input_ptr->get_h(); i++) { if(i & 1) - memcpy(output_ptr->get_rows()[i], + memcpy(output_ptr->get_rows()[i], temp_frame[0]->get_rows()[i], row_size); else @@ -336,7 +339,7 @@ int RGB601Main::process_realtime(VFrame *input_ptr, VFrame *output_ptr) new_field = 0; // Compute new threshold for next time - average = (int64_t)(average * total_average + + average = (int64_t)(average * total_average + field2) / (total_average + 1); for(int i = 0; i < input_ptr->get_h(); i++) @@ -346,7 +349,7 @@ int RGB601Main::process_realtime(VFrame *input_ptr, VFrame *output_ptr) input_ptr->get_rows()[i], row_size); else - memcpy(output_ptr->get_rows()[i], + memcpy(output_ptr->get_rows()[i], temp_frame[0]->get_rows()[i], row_size); } @@ -384,11 +387,11 @@ int RGB601Main::process_realtime(VFrame *input_ptr, VFrame *output_ptr) for(int i = 0; i < input_ptr->get_h(); i++) { if((i + config.first_field) & 1) - memcpy(output_ptr->get_rows()[i], + memcpy(output_ptr->get_rows()[i], input_ptr->get_rows()[i], row_size); else - memcpy(output_ptr->get_rows()[i], + memcpy(output_ptr->get_rows()[i], temp_frame[1]->get_rows()[i], row_size); }