From bf8f5876be1e9feb355d18f133c163f29e1339bb Mon Sep 17 00:00:00 2001 From: c0ntrol Date: Sat, 18 May 2019 21:18:57 +0200 Subject: [PATCH] reset current frame when switching streams, reset offset when switching streams --- veejay-current/veejay-server/libstream/vj-tag.c | 13 ++++++++++++- veejay-current/veejay-server/libstream/vj-tag.h | 2 +- veejay-current/veejay-server/veejay/liblavplayvj.c | 1 + veejay-current/veejay-server/veejay/vj-perform.c | 13 +++++++++---- 4 files changed, 23 insertions(+), 6 deletions(-) diff --git a/veejay-current/veejay-server/libstream/vj-tag.c b/veejay-current/veejay-server/libstream/vj-tag.c index 86555bbe..cac2df03 100644 --- a/veejay-current/veejay-server/libstream/vj-tag.c +++ b/veejay-current/veejay-server/libstream/vj-tag.c @@ -3017,7 +3017,18 @@ int vj_tag_by_type(int type) return 0; } - +int vj_tag_reset_offset(int t1) +{ + vj_tag *tag = vj_tag_get(t1); + if (!tag) + return -1; + int i; + for(i=0; i < SAMPLE_MAX_EFFECTS; i++) + { + tag->effect_chain[i]->frame_offset = 0; + } + return 1; +} int vj_tag_set_offset(int t1, int chain_entry, int frame_offset) { diff --git a/veejay-current/veejay-server/libstream/vj-tag.h b/veejay-current/veejay-server/libstream/vj-tag.h index 9f9104f4..4681ed22 100644 --- a/veejay-current/veejay-server/libstream/vj-tag.h +++ b/veejay-current/veejay-server/libstream/vj-tag.h @@ -268,7 +268,7 @@ int vj_tag_get_offset(int t1, int entry); int vj_tag_set_offset(int t1, int entry, int offset); -//int vj_tag_record_frame(int t1, uint8_t *buffer[3]); +int vj_tag_reset_offset(int t1); int vj_tag_get_frame(int t1, VJFrame *dst, uint8_t *abuf); diff --git a/veejay-current/veejay-server/veejay/liblavplayvj.c b/veejay-current/veejay-server/veejay/liblavplayvj.c index 572e08d9..cf2ac8af 100644 --- a/veejay-current/veejay-server/veejay/liblavplayvj.c +++ b/veejay-current/veejay-server/veejay/liblavplayvj.c @@ -729,6 +729,7 @@ void veejay_change_playback_mode( veejay_t *info, int new_pm, int sample_id ) } info->settings->min_frame_num = 0; info->settings->max_frame_num = vj_tag_get_n_frames( cur_id ); + info->settings->current_frame_num = 0; } if(new_pm == VJ_PLAYBACK_MODE_PLAIN ) diff --git a/veejay-current/veejay-server/veejay/vj-perform.c b/veejay-current/veejay-server/veejay/vj-perform.c index 377554aa..60dc3d80 100644 --- a/veejay-current/veejay-server/veejay/vj-perform.c +++ b/veejay-current/veejay-server/veejay/vj-perform.c @@ -474,10 +474,14 @@ static int vj_perform_next_sequence( veejay_t *info, int *type ) info->seq->current = cur; - sample_update_ascociated_samples( info->seq->samples[cur].sample_id ); - sample_reset_offset( info->seq->samples[cur].sample_id ); - sample_set_loops( info->seq->samples[cur].sample_id, -1 ); /* reset loop count */ - + if( info->seq->samples[info->seq->current].type == 0 ) { + sample_update_ascociated_samples( info->seq->samples[cur].sample_id ); + sample_reset_offset( info->seq->samples[cur].sample_id ); + sample_set_loops( info->seq->samples[cur].sample_id, -1 ); /* reset loop count */ + } + else { + vj_tag_reset_offset( info->seq->samples[cur].sample_id ); + } *type = info->seq->samples[cur].type; return info->seq->samples[cur].sample_id; } @@ -504,6 +508,7 @@ static int vj_perform_try_transition( veejay_t *info, int is_tag ) int id = vj_tag_chain_entry_transition_now(info->uc->sample_id,c, &type); if( id == 0 ) continue; + vj_tag_reset_offset(id); veejay_change_playback_mode( info, (type == 0 ? VJ_PLAYBACK_MODE_SAMPLE : VJ_PLAYBACK_MODE_TAG), id ); return 1; }