diff --git a/veejay-current/veejay-server/libsample/sampleadm.c b/veejay-current/veejay-server/libsample/sampleadm.c index c131fc15..1f6f1e6c 100644 --- a/veejay-current/veejay-server/libsample/sampleadm.c +++ b/veejay-current/veejay-server/libsample/sampleadm.c @@ -360,6 +360,7 @@ sample_info *sample_skeleton_new(long startFrame, long endFrame) si->fade_alpha = 0; si->fade_entry = -1; si->subrender = 1; + si->transition_length = 25; si->edit_list_file = sample_default_edl_name(si->sample_id); sample_eff_chain *sec = (sample_eff_chain*) vj_calloc(sizeof(sample_eff_chain) * SAMPLE_MAX_EFFECTS ); @@ -1893,7 +1894,7 @@ void sample_set_transition_length(int s1, int length) { int transition_length = length; if(transition_length <= 0) { - transition_length = DEFAULT_TRANSITION_LENGTH; + transition_length = 0; } if (sample->marker_end > 0 && sample->marker_start >= 0) { @@ -1919,7 +1920,7 @@ void sample_set_transition_active(int s1, int status) { sample->transition_active = status; if( sample->transition_length <= 0 ) { - sample_set_transition_length( s1, 0); + sample_set_transition_length( s1, DEFAULT_TRANSITION_LENGTH); } } diff --git a/veejay-current/veejay-server/libstream/vj-tag.c b/veejay-current/veejay-server/libstream/vj-tag.c index 33c17466..4fbe272c 100644 --- a/veejay-current/veejay-server/libstream/vj-tag.c +++ b/veejay-current/veejay-server/libstream/vj-tag.c @@ -797,9 +797,8 @@ void vj_tag_set_transition_length(int t1, int length) if(!tag) return; int transition_length = length; - if( transition_length <= 0 ) { - transition_length = 25; - } + if( transition_length < 0) + transition_length = 0; if( transition_length > tag->n_frames ) { transition_length = tag->n_frames; @@ -816,7 +815,7 @@ void vj_tag_set_transition_active(int t1, int status) if( tag->transition_active == 1 ) { if( tag->transition_length <= 0 ) { - vj_tag_set_transition_length( t1, 25 ); + vj_tag_set_transition_length( t1, tag->n_frames ); } } } @@ -988,6 +987,7 @@ int vj_tag_new(int type, char *filename, int stream_nr, editlist * el, int pix_f tag->opacity = 0; tag->priv = NULL; tag->subrender = 1; + tag->transition_length = 25; if(type == VJ_TAG_TYPE_AVFORMAT ) tag->priv = avformat_thread_allocate(_tag_info->effect_frame1); @@ -1011,7 +1011,10 @@ int vj_tag_new(int type, char *filename, int stream_nr, editlist * el, int pix_f { veejay_msg(0, "Unable to open capture stream '%dx%d' (norm=%c,format=%x,device=%d,channel=%d)", w,h,el->video_norm, pix_fmt, extra,channel ); free(tag->source_name); + if(tag->method_filename) + free(tag->method_filename); free(tag); + return -1; } break; @@ -1020,7 +1023,10 @@ int vj_tag_new(int type, char *filename, int stream_nr, editlist * el, int pix_f snprintf(tag->source_name,SOURCE_NAME_LEN, "%s", filename ); if( _vj_tag_new_net( tag,stream_nr, w,h,pix_fmt, filename, channel ,palette,type) != 1 ) { free(tag->source_name); + if(tag->method_filename) + free(tag->method_filename); free(tag); + return -1; } break; @@ -1029,6 +1035,8 @@ int vj_tag_new(int type, char *filename, int stream_nr, editlist * el, int pix_f if(!avformat_thread_start(tag, _tag_info->effect_frame1)) { veejay_msg(VEEJAY_MSG_ERROR, "Unable to start thread"); free(tag->source_name); + if(tag->method_filename) + free(tag->method_filename); free(tag); return -1; } @@ -1048,6 +1056,8 @@ int vj_tag_new(int type, char *filename, int stream_nr, editlist * el, int pix_f #else veejay_msg(VEEJAY_MSG_DEBUG, "libdv not enabled at compile time"); free(tag->source_name); + if(tag->method_filename) + free(tag->method_filename); free(tag); return -1; #endif @@ -1056,6 +1066,8 @@ int vj_tag_new(int type, char *filename, int stream_nr, editlist * el, int pix_f snprintf(tag->source_name,SOURCE_NAME_LEN, "%s", filename); if( _vj_tag_new_picture(tag, stream_nr, w, h, fps) != 1 ) { free(tag->source_name); + if(tag->method_filename) + free(tag->method_filename); free(tag); return -1; } @@ -1065,6 +1077,8 @@ int vj_tag_new(int type, char *filename, int stream_nr, editlist * el, int pix_f snprintf(tag->source_name,SOURCE_NAME_LEN,"%s",filename); if(_vj_tag_new_cali( tag,stream_nr,w,h) != 1 ) { free(tag->source_name); + if(tag->method_filename) + free(tag->method_filename); free(tag); return -1; } @@ -1074,6 +1088,8 @@ int vj_tag_new(int type, char *filename, int stream_nr, editlist * el, int pix_f if (_vj_tag_new_yuv4mpeg(tag, stream_nr, w,h,fps) != 1) { free(tag->source_name); + if(tag->method_filename) + free(tag->method_filename); free(tag); return -1; } @@ -1099,7 +1115,9 @@ int vj_tag_new(int type, char *filename, int stream_nr, editlist * el, int pix_f channel = plug_get_idx_by_name( filename ); if( channel == - 1) { veejay_msg(0, "'%s' not found",filename ); - free(tag->source_name ); + free(tag->source_name); + if(tag->method_filename) + free(tag->method_filename); free(tag); return -1; } @@ -1115,6 +1133,8 @@ int vj_tag_new(int type, char *filename, int stream_nr, editlist * el, int pix_f if( tag->generator == NULL ) { veejay_msg(0, "Unable to load selected generator"); free(tag->source_name); + if(tag->method_filename) + free(tag->method_filename); free(tag); return -1; } @@ -1130,6 +1150,8 @@ int vj_tag_new(int type, char *filename, int stream_nr, editlist * el, int pix_f veejay_msg(0, "Plug '%s' is not a generator", filename); plug_deactivate(tag->generator); free(tag->source_name); + if(tag->method_filename) + free(tag->method_filename); free(tag); return -1; } @@ -1142,6 +1164,8 @@ int vj_tag_new(int type, char *filename, int stream_nr, editlist * el, int pix_f } else { free(tag->source_name); + if(tag->method_filename) + free(tag->method_filename); free(tag); return -1; } diff --git a/veejay-current/veejay-server/veejay/liblavplayvj.c b/veejay-current/veejay-server/veejay/liblavplayvj.c index 6b38efa7..d4e2e6fa 100644 --- a/veejay-current/veejay-server/veejay/liblavplayvj.c +++ b/veejay-current/veejay-server/veejay/liblavplayvj.c @@ -195,9 +195,9 @@ void veejay_change_state(veejay_t * info, int new_state) { video_playback_setup *settings = (video_playback_setup *) info->settings; -// pthread_mutex_lock(&(settings->valid_mutex)); + pthread_mutex_lock(&(settings->valid_mutex)); settings->state = new_state; -// pthread_mutex_unlock(&(settings->valid_mutex)); + pthread_mutex_unlock(&(settings->valid_mutex)); } void veejay_change_state_save(veejay_t * info, int new_state) @@ -633,7 +633,7 @@ int veejay_start_playing_sample( veejay_t *info, int sample_id ) veejay_set_speed(info, speed); - veejay_msg(VEEJAY_MSG_INFO, "Playing sample %d (Slow: %d, Speed: %d, Start: %d, End: %d, Looptype: %d, Current position: %ld)", + veejay_msg(VEEJAY_MSG_INFO, "Playing sample %d (Slow: %d, Speed: %d, Start: %d, End: %d, Looptype: %d, Current position: %d)", sample_id, info->sfd, speed, start, end, looptype, info->settings->current_frame_num ); @@ -1176,6 +1176,8 @@ static void veejay_pipe_write_status(veejay_t * info) int seq_cur = (info->seq->active ? info->seq->current : MAX_SEQUENCES ); if(tags>0) total_slots+=tags; + + veejay_memset( info->status_what, 0, sizeof(info->status_what)); switch (info->uc->playback_mode) { case VJ_PLAYBACK_MODE_SAMPLE: @@ -1387,7 +1389,6 @@ void veejay_handle_signal(void *arg, int sig) veejay_t *info = (veejay_t *) arg; if (sig == SIGINT || sig == SIGQUIT ) { - veejay_msg(VEEJAY_MSG_WARNING, "Veejay interrupted by user. Bye!"); veejay_change_state(info, LAVPLAY_STATE_STOP); } else @@ -1660,7 +1661,6 @@ int veejay_open(veejay_t * info) { video_playback_setup *settings = (video_playback_setup *) info->settings; int i; - veejay_msg(VEEJAY_MSG_DEBUG, "Initializing the threading system"); veejay_memset( &(settings->lastframe_completion), 0, sizeof(struct timeval)); diff --git a/veejay-current/veejay-server/veejay/veejay.c b/veejay-current/veejay-server/veejay/veejay.c index c5b3f852..5332d7c4 100644 --- a/veejay-current/veejay-server/veejay/veejay.c +++ b/veejay-current/veejay-server/veejay/veejay.c @@ -754,9 +754,9 @@ static void print_license() static void donothing(int sig) { - vj_lock(info); +// vj_lock(info); veejay_handle_signal( info, sig ); - vj_unlock(info); +// vj_unlock(info); } static void veejay_backtrace_handler(int n , siginfo_t *si, void *ptr) diff --git a/veejay-current/veejay-server/veejay/vj-event.c b/veejay-current/veejay-server/veejay/vj-event.c index 1019ac16..ae0c1a54 100644 --- a/veejay-current/veejay-server/veejay/vj-event.c +++ b/veejay-current/veejay-server/veejay/vj-event.c @@ -3895,19 +3895,23 @@ void vj_event_set_transition(void *ptr, const char format[], va_list ap) int transition_length = args[4]; if( playmode == VJ_PLAYBACK_MODE_SAMPLE ) { - sample_set_transition_length( sample_id, transition_length ); + if(transition_length > 0) + sample_set_transition_length( sample_id, transition_length ); + sample_set_transition_shape( sample_id, transition_shape ); sample_set_transition_active( sample_id, transition_active ); } if( playmode == VJ_PLAYBACK_MODE_TAG ) { - vj_tag_set_transition_length( sample_id, transition_length ); + if(transition_length > 0) + vj_tag_set_transition_length( sample_id, transition_length ); vj_tag_set_transition_shape( sample_id, transition_shape ); vj_tag_set_transition_active( sample_id, transition_active ); } - veejay_msg(VEEJAY_MSG_DEBUG,"Sample %d set transition active %d, shape %d, length %d", + veejay_msg(VEEJAY_MSG_DEBUG,"%s %d set transition active %d, shape %d, length %d", + (playmode == VJ_PLAYBACK_MODE_SAMPLE ? "Sample" : "Stream"), sample_id, transition_active, transition_shape, transition_length ); } diff --git a/veejay-current/veejay-server/veejay/vj-perform.c b/veejay-current/veejay-server/veejay/vj-perform.c index 5372af6d..4c4fab27 100644 --- a/veejay-current/veejay-server/veejay/vj-perform.c +++ b/veejay-current/veejay-server/veejay/vj-perform.c @@ -202,7 +202,7 @@ static void vj_perform_pre_chain(performer_t *p, VJFrame *frame); static int vj_perform_post_chain_sample(veejay_t *info,performer_t *p, VJFrame *frame,int sample_id); static int vj_perform_post_chain_tag(veejay_t *info,performer_t*p, VJFrame *frame, int sample_id); static int vj_perform_next_sequence( veejay_t *info, int *type, int *new_current ); -static void vj_perform_plain_fill_buffer(veejay_t * info,performer_t *p,VJFrame *dst,int sample_id, long frame_num); +static void vj_perform_plain_fill_buffer(veejay_t * info,performer_t *p,VJFrame *dst,int sample_id, int mode, long frame_num); static void vj_perform_tag_fill_buffer(veejay_t * info, performer_t *p, VJFrame *dst, int sample_id); static void vj_perform_clear_cache(performer_global_t *g); static int vj_perform_increase_tag_frame(veejay_t * info, long num); @@ -1240,12 +1240,14 @@ static void vj_perform_free_performer(performer_t *p) void vj_perform_free(veejay_t * info) { performer_global_t *global = (performer_global_t*)info->performer; + if( global == NULL ) { + return; + } munlockall(); sample_record_free(); - if(global) { if (global->preview_buffer){ if(global->preview_buffer->Y) free(global->preview_buffer->Y); @@ -1258,16 +1260,15 @@ void vj_perform_free(veejay_t * info) vj_perform_free_performer( global->A ); vj_perform_free_performer( global->B ); - } if(info->edit_list && info->edit_list->has_audio) vj_perform_close_audio(global->A); vj_perform_record_buffer_free(global); - if( global ) { - vj_avcodec_stop(global->encoder_,0); - } + vj_avcodec_stop(global->encoder_,0); + + free(global); } int vj_perform_preview_max_width(veejay_t *info) { @@ -2419,7 +2420,7 @@ static void vj_perform_tag_complete_buffers(veejay_t * info, performer_t *p,vjp_ *hint444 = frames[0]->ssm; } -static void vj_perform_plain_fill_buffer(veejay_t * info, performer_t *p,VJFrame *dst, int sample_id, long frame_num) +static void vj_perform_plain_fill_buffer(veejay_t * info, performer_t *p,VJFrame *dst, int sample_id, int mode, long frame_num) { video_playback_setup *settings = (video_playback_setup*) info->settings; performer_global_t *g = (performer_global_t*) info->performer; @@ -2452,7 +2453,7 @@ static void vj_perform_plain_fill_buffer(veejay_t * info, performer_t *p,VJFrame p->primary_buffer[PSLOW_A]->Cr, p->primary_buffer[PSLOW_A]->alpha }; - if(info->uc->playback_mode == VJ_PLAYBACK_MODE_SAMPLE) + if(mode == VJ_PLAYBACK_MODE_SAMPLE) { vj_perform_get_frame_(info, sample_id, frame_num,&frame,&frame, p0_buffer,p1_buffer,0 ); @@ -2460,11 +2461,10 @@ static void vj_perform_plain_fill_buffer(veejay_t * info, performer_t *p,VJFrame g->cached_sample_frames[ g->n_cached_sample_frames ].frame = p->primary_buffer[0]; g->n_cached_sample_frames ++; - } else if ( info->uc->playback_mode == VJ_PLAYBACK_MODE_PLAIN ) { + } else if ( mode == VJ_PLAYBACK_MODE_PLAIN ) { vj_perform_get_frame_(info, 0, frame_num,&frame,&frame, p0_buffer, p1_buffer,0 ); } - //FIXME error important ? } static int rec_audio_sample_ = 0; @@ -3394,9 +3394,6 @@ static void vj_perform_finish_render( veejay_t *info,performer_t *p,VJFrame pri[2] = p->primary_buffer[0]->Cr; pri[3] = p->primary_buffer[0]->alpha; - // vj_perform_transition_sample( info, frame ); - - if( settings->composite ) { //@ scales in software if( settings->ca ) { @@ -3833,7 +3830,7 @@ int vj_perform_queue_video_frames(veejay_t *info, VJFrame *frame, VJFrame *frame int is_sample = (mode == VJ_PLAYBACK_MODE_SAMPLE); if(mode != VJ_PLAYBACK_MODE_TAG ) { - vj_perform_plain_fill_buffer(info,p, p->tmp1, sample_id, frame_num); + vj_perform_plain_fill_buffer(info,p, p->tmp1, sample_id,mode, frame_num); if( is_sample ) fx_chain = sample_get_effect_chain( sample_id ); } @@ -3995,19 +3992,21 @@ int vj_perform_queue_video_frame(veejay_t *info, const int skip_incr) int transition_enabled = info->settings->transition.active; if(transition_enabled) { - if(info->settings->current_playback_speed < 0 ) { + /*if(info->settings->current_playback_speed < 0 ) { if(info->settings->current_frame_num < info->settings->transition.end || info->settings->current_frame_num > info->settings->transition.start) transition_enabled = 0; } else { if(info->settings->current_frame_num < info->settings->transition.start || info->settings->current_frame_num > info->settings->transition.end ) transition_enabled = 0; - } + }*/ + if(info->settings->current_frame_num < info->settings->transition.start || info->settings->current_frame_num > info->settings->transition.end ) + transition_enabled = 0; } if(transition_enabled) { int sample_position = 0; - if(info->uc->playback_mode == VJ_PLAYBACK_MODE_SAMPLE) + if(info->settings->transition.next_type == VJ_PLAYBACK_MODE_SAMPLE) sample_position = vj_perform_transition_get_sample_position( info->settings->transition.next_id ); vj_perform_queue_video_frames( info,info->effect_frame3, info->effect_frame4, g->B, skip_incr, info->settings->transition.next_id, info->settings->transition.next_type, sample_position ); vje_disable_parallel();