fix segfault in chain fade switch sample

This commit is contained in:
niels
2015-04-21 23:35:37 +02:00
parent de196ec96a
commit 3b77ee8c20

View File

@@ -2779,15 +2779,19 @@ static int vj_perform_post_chain_sample(veejay_t *info, VJFrame *frame)
opacity_blend_apply( frame->data ,temp_buffer,frame->len, len2, opacity ); opacity_blend_apply( frame->data ,temp_buffer,frame->len, len2, opacity );
if( follow ) { if( follow ) {
//@ find something to jump to, start with last on chain //@ find first to jump to
int i; int i,k;
int tmp = 0;
for( i = SAMPLE_MAX_EFFECTS - 1; i > 0; i -- ) { for( i = 0; i < SAMPLE_MAX_EFFECTS; i ++) {
if( sample_get_chain_channel( info->uc->sample_id, i ) > 0 ) { k = sample_get_chain_channel(info->uc->sample_id, i );
pvar_.follow_now[0] = sample_get_chain_channel(info->uc->sample_id, i ); tmp = sample_get_chain_source( info->uc->sample_id, i );
pvar_.follow_now[1] = sample_get_chain_source( info->uc->sample_id, i ); if( (tmp == 0 && sample_exists(k) || (tmp > 0 && vj_tag_exists(k)) )) {
pvar_.follow_now[1] = tmp;
pvar_.follow_now[0] = k;
break;
} }
} }
} }
return follow; return follow;
@@ -2846,13 +2850,16 @@ static int vj_perform_post_chain_tag(veejay_t *info, VJFrame *frame)
opacity_blend_apply( frame->data ,temp_buffer,frame->len, len2, opacity ); opacity_blend_apply( frame->data ,temp_buffer,frame->len, len2, opacity );
if( follow ) { if( follow ) {
//@ find something to jump to, start with last on chain //@ find first to jump to
int i; int i;
int tmp=0,k;
for( i = SAMPLE_MAX_EFFECTS - 1; i > 0; i -- ) { for( i = 0; i < SAMPLE_MAX_EFFECTS - 1; i ++ ) {
if( sample_get_chain_channel( info->uc->sample_id, i ) > 0 ) { k = vj_tag_get_chain_channel(info->uc->sample_id, i );
pvar_.follow_now[0] = vj_tag_get_chain_channel(info->uc->sample_id, i ); tmp = vj_tag_get_chain_source( info->uc->sample_id, i );
pvar_.follow_now[1] = vj_tag_get_chain_source( info->uc->sample_id, i ); if( (tmp == 0 && sample_exists(k) || (tmp > 0 && vj_tag_exists(k)) )) {
pvar_.follow_now[1] = tmp;
pvar_.follow_now[0] = k;
break;
} }
} }
} }
@@ -3434,10 +3441,10 @@ int vj_perform_queue_frame(veejay_t * info, int skip )
if( pvar_.follow_now[1] == 0 ) { if( pvar_.follow_now[1] == 0 ) {
info->uc->playback_mode = VJ_PLAYBACK_MODE_SAMPLE; info->uc->playback_mode = VJ_PLAYBACK_MODE_SAMPLE;
veejay_set_sample( info, pvar_.follow_now[1] ); veejay_set_sample( info, pvar_.follow_now[0] );
} else { } else {
info->uc->playback_mode = VJ_PLAYBACK_MODE_TAG; info->uc->playback_mode = VJ_PLAYBACK_MODE_TAG;
veejay_set_sample( info, pvar_.follow_now[1] ); veejay_set_sample( info, pvar_.follow_now[0] );
} }
pvar_.follow_run = 0; pvar_.follow_run = 0;