X-Git-Url: https://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fmaskauto.C;h=e490f4c854334bf259f9a1bc4958ebabe2cef1e6;hb=3f801b05e0de577b00e98019b099ed38d66b9550;hp=8b5a2a4222d35a501cc9c2cb2cb457227da9cde8;hpb=7ead9f7382846e81c2f8efb25780014e5f8834c3;p=goodguy%2Fcinelerra.git diff --git a/cinelerra-5.1/cinelerra/maskauto.C b/cinelerra-5.1/cinelerra/maskauto.C index 8b5a2a42..e490f4c8 100644 --- a/cinelerra-5.1/cinelerra/maskauto.C +++ b/cinelerra-5.1/cinelerra/maskauto.C @@ -96,10 +96,12 @@ int SubMask::operator==(SubMask& ptr) return equivalent(ptr); } -void SubMask::copy_from(SubMask& ptr) +void SubMask::copy_from(SubMask& ptr, int do_name) { - memset(name, 0, sizeof(name)); - strncpy(name, ptr.name, sizeof(name-1)); + if( do_name ) { + memset(name, 0, sizeof(name)); + strncpy(name, ptr.name, sizeof(name-1)); + } fader = ptr.fader; feather = ptr.feather; points.remove_all_objects(); @@ -140,7 +142,8 @@ void SubMask::copy(FileXML *file) if(points.total) { file->tag.set_title("MASK"); - file->tag.set_property("NUMBER", keyframe->masks.number_of(this)); + file->tag.set_property("NUMBER", + !keyframe ? -1 : keyframe->masks.number_of(this)); file->tag.set_property("NAME", name); file->tag.set_property("FADER", fader); file->tag.set_property("FEATHER", feather); @@ -174,12 +177,12 @@ void SubMask::copy(FileXML *file) } } -void SubMask::dump() +void SubMask::dump(FILE *fp) { for( int i=0; ix, points.values[i]->y, points.values[i]->control_x1, points.values[i]->control_y1, points.values[i]->control_x2, points.values[i]->control_y2); @@ -345,9 +348,9 @@ void MaskAuto::set_points(ArrayList *points, void MaskAuto::load(FileXML *file) { // legacy, moved to SubMask - int old_mode = file->tag.get_property("MODE", MASK_MULTIPLY_ALPHA); - int old_feather = file->tag.get_property("FEATHER", 0); + int old_mode = file->tag.get_property("MODE", -1); int old_value = file->tag.get_property("VALUE", 100); + float old_feather = file->tag.get_property("FEATHER", 0); apply_before_plugins = file->tag.get_property("APPLY_BEFORE_PLUGINS", apply_before_plugins); disable_opengl_masking = file->tag.get_property("DISABLE_OPENGL_MASKING", disable_opengl_masking); for( int i=0; iname, name, sizeof(mask->name)); mask->feather = file->tag.get_property("FEATHER", old_feather); mask->fader = file->tag.get_property("FADER", old_value); - if( old_mode == MASK_SUBTRACT_ALPHA ) + if( old_mode == MASK_MULTIPLY_ALPHA ) mask->fader = -mask->fader; mask->load(file); } } -// dump(); } void MaskAuto::copy(int64_t start, int64_t end, FileXML *file, int default_auto) @@ -393,11 +395,13 @@ void MaskAuto::copy(int64_t start, int64_t end, FileXML *file, int default_auto) file->append_newline(); } -void MaskAuto::dump() +void MaskAuto::dump(FILE *fp) { + fprintf(fp,"mask_auto: apply_before_plugins %d, disable_opengl_masking %d\n", + apply_before_plugins, disable_opengl_masking); for( int i=0; idump(); + fprintf(fp," submask %d:\n", i); + masks.values[i]->dump(fp); } } @@ -435,4 +439,17 @@ void MaskAuto::scale_submasks(int orig_scale, int new_scale) } } +int MaskAuto::has_active_mask() +{ + int total_points = 0; + float min_fader = 100; + for( int i=0; ipoints.size(); + if( submask_points > 1 ) total_points += submask_points; + int fader = mask->fader; + if( fader < min_fader ) min_fader = fader; + } + return min_fader >= 0 && total_points < 2 ? 0 : 1; +}