X-Git-Url: https://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fkeyframe.C;h=363c72df3ca797ddf3e283507a40f15dec6f0402;hb=172ef8e133b80572d7d81b06f6658ce89bf709a3;hp=8d6a57557f86f881e8bde110ed4de3d1adb3ef5a;hpb=83bfb86d01b353bab485d0ccc336e0572bcb63c6;p=goodguy%2Fcinelerra.git diff --git a/cinelerra-5.1/cinelerra/keyframe.C b/cinelerra-5.1/cinelerra/keyframe.C index 8d6a5755..363c72df 100644 --- a/cinelerra-5.1/cinelerra/keyframe.C +++ b/cinelerra-5.1/cinelerra/keyframe.C @@ -25,6 +25,8 @@ #include "cstrdup.h" #include "filexml.h" #include "keyframe.h" +#include "keyframes.h" +#include "transportque.inc" #include #include @@ -181,7 +183,7 @@ void KeyFrame::update_parameter(BC_Hash *params, output.append_tag(); // Write anonymous text & duplicate the rest - output.append_text(text ? text : this_text); + output.append_data(text ? text : this_text); output.append_data(extra ? extra : this_extra); output.terminate_string(); // Move output to input @@ -232,6 +234,27 @@ void KeyFrame::get_diff(KeyFrame *src, delete [] src_extra; } +void KeyFrame::span_keyframes(int64_t start, int64_t end) +{ + BC_Hash *params = 0; + char *text = 0, *extra = 0; +// The first one determines the changed parameters since it is the one displayed + KeyFrames *keyframes = (KeyFrames *)autos; + KeyFrame *current = keyframes->get_prev_keyframe(start, PLAY_FORWARD); + current->get_diff(this, ¶ms, &text, &extra); +// Always update the first one + current->update_parameter(params, text, extra); + +// Replace changed parameter in all selected keyframes. + for( current = (KeyFrame*)NEXT; current; current = (KeyFrame*)NEXT ) { + if( current->position >= end ) break; + current->update_parameter(params, text, extra); + } + delete params; + delete [] text, + delete [] extra; +} + int KeyFrame::operator==(Auto &that) { return identical((KeyFrame*)&that);