X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fplugins%2Frgb601%2Fivtc.C.2;h=0435464c962aebd04c536007ca089e16b03dd4e1;hb=b55798fc64eee00c6fab3b4763e791befb7275f9;hp=ef39aba98602ffb4d40a9ca0a63304bb767d4f96;hpb=089f2be86316b88f72a6c359ab10e2b95539005b;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/plugins/rgb601/ivtc.C.2 b/cinelerra-5.1/plugins/rgb601/ivtc.C.2 index ef39aba9..0435464c 100644 --- a/cinelerra-5.1/plugins/rgb601/ivtc.C.2 +++ b/cinelerra-5.1/plugins/rgb601/ivtc.C.2 @@ -42,7 +42,7 @@ RGB601Main::~RGB601Main() delete defaults; } -char* RGB601Main::plugin_title() { return _("Inverse Telecine"); } +char* RGB601Main::plugin_title() { return "Inverse Telecine"; } int RGB601Main::is_realtime() { return 1; } int RGB601Main::load_defaults() @@ -95,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(); } @@ -129,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); @@ -178,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; @@ -247,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 || @@ -281,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 @@ -299,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]) @@ -314,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 @@ -337,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++) @@ -347,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); } @@ -385,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); }