reset current frame when switching streams, reset offset when switching streams

This commit is contained in:
c0ntrol
2019-05-18 21:18:57 +02:00
parent da9e64097d
commit bf8f5876be
4 changed files with 23 additions and 6 deletions

View File

@@ -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)
{

View File

@@ -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);

View File

@@ -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 )

View File

@@ -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;
}