diff --git a/veejay-current/veejay-server/libel/lav_io.c b/veejay-current/veejay-server/libel/lav_io.c index f95a7470..a5f43b72 100644 --- a/veejay-current/veejay-server/libel/lav_io.c +++ b/veejay-current/veejay-server/libel/lav_io.c @@ -60,20 +60,20 @@ static int internal_error=0; #define ERROR_NOAUDIO 4 #ifdef USE_GDK_PIXBUF -static int output_scale_width = 0; -static int output_scale_height = 0; -static float output_fps = 25.0; -static int output_yuv = 1; // 422 +static int output_scale_width = 0; +static int output_scale_height = 0; +static float output_fps = 25.0; +static int output_yuv = 1; // 422 -void lav_set_project(int w, int h, float f, int fmt) +void lav_set_project(int w, int h, float f, int fmt) { - output_scale_width = w; - output_scale_height = h; - output_fps = f; - output_yuv = fmt; + output_scale_width = w; + output_scale_height = h; + output_fps = f; + output_yuv = fmt; } #else -void lav_set_project(int w, int h, float f, int fmt) +void lav_set_project(int w, int h, float f, int fmt) { } #endif @@ -81,9 +81,9 @@ void lav_set_project(int w, int h, float f, int fmt) #define M_SOF0 0xC0 #define M_SOF1 0xC1 #define M_DHT 0xC4 -#define M_SOI 0xD8 /* Start Of Image (beginning of datastream) */ -#define M_EOI 0xD9 /* End Of Image (end of datastream) */ -#define M_SOS 0xDA /* Start Of Scan (begins compressed data) */ +#define M_SOI 0xD8 /* Start Of Image (beginning of datastream) */ +#define M_EOI 0xD9 /* End Of Image (end of datastream) */ +#define M_SOS 0xDA /* Start Of Scan (begins compressed data) */ #define M_DQT 0xDB #define M_APP0 0xE0 #define M_APP1 0xE1 @@ -123,7 +123,7 @@ int lav_query_polarity(char format) switch(format) { /* case 'b': // todo: must implement polarity for DV? - return LAV_NOT_INTERLACED; + return LAV_NOT_INTERLACED; case 'a': return LAV_INTER_TOP_FIRST; case 'A': return LAV_INTER_BOTTOM_FIRST; @@ -147,10 +147,10 @@ int lav_query_polarity(char format) void lav_set_default_chroma(int _chroma) { - if(_chroma == CHROMAUNKNOWN || _chroma == CHROMA420 || - _chroma == CHROMA422 || _chroma == CHROMA444 || - _chroma == CHROMA422F || _chroma == CHROMA420F) - _lav_io_default_chroma = _chroma; + if(_chroma == CHROMAUNKNOWN || _chroma == CHROMA420 || + _chroma == CHROMA422 || _chroma == CHROMA444 || + _chroma == CHROMA422F || _chroma == CHROMA420F) + _lav_io_default_chroma = _chroma; } @@ -178,188 +178,190 @@ lav_file_t *lav_open_output_file(char *filename, char format, switch(format) { - case 'a': - case 'A': - /* Open AVI output file */ - veejay_msg(VEEJAY_MSG_DEBUG, "\tWriting output file in AVI MJPEG"); - sprintf(fourcc, "MJPG" ); - break; - case 'c': - veejay_msg(VEEJAY_MSG_DEBUG, "\tWriting output file in AVI MJPEG-b"); - sprintf(fourcc, "MJPB" ); - break; - case 'l': - veejay_msg(VEEJAY_MSG_DEBUG, "\tWriting output file in AVI LJPEG"); - sprintf(fourcc, "JPGL"); - break; - case 'L': - veejay_msg(VEEJAY_MSG_DEBUG, "\tWriting output file in AVI LZO (veejay's fourcc)"); - sprintf(fourcc, "MLZO" ); - break; - case 'v': - veejay_msg(VEEJAY_MSG_DEBUG, "\tWriting output file in AVI VJ20 (veejay's fourcc)"); - sprintf(fourcc,"VJ20"); - break; - case 'V': - veejay_msg(VEEJAY_MSG_DEBUG, "\tWriting output file in AVI VJ22 (veejay's fourcc)"); - sprintf(fourcc,"VJ22"); - break; - case 'Y': - veejay_msg(VEEJAY_MSG_DEBUG, "\tWriting output file in AVI IYUV"); - sprintf(fourcc, "IYUV" ); - break; - case 'P': - veejay_msg(VEEJAY_MSG_DEBUG, "\tWriting output file in AVI YV16"); - sprintf(fourcc, "YV16"); - break; - case 'D': - veejay_msg(VEEJAY_MSG_DEBUG, "\tWriting output file in AVI DIV3"); - sprintf(fourcc, "DIV3"); - break; - case 'M': - veejay_msg(VEEJAY_MSG_DEBUG, "\tWriting output file in AVI MP4V"); - sprintf(fourcc,"MP4V"); - break; - case 'b': - case 'd': - veejay_msg(VEEJAY_MSG_DEBUG, "\tWriting output file in AVI DVSD"); - sprintf(fourcc, "DVSD"); - break; + case 'a': + case 'A': + /* Open AVI output file */ + veejay_msg(VEEJAY_MSG_DEBUG, "\tWriting output file in AVI MJPEG"); + sprintf(fourcc, "MJPG" ); + break; + case 'c': + veejay_msg(VEEJAY_MSG_DEBUG, "\tWriting output file in AVI MJPEG-b"); + sprintf(fourcc, "MJPB" ); + break; + case 'l': + veejay_msg(VEEJAY_MSG_DEBUG, "\tWriting output file in AVI LJPEG"); + sprintf(fourcc, "JPGL"); + break; + case 'L': + veejay_msg(VEEJAY_MSG_DEBUG, "\tWriting output file in AVI LZO (veejay's fourcc)"); + sprintf(fourcc, "MLZO" ); + break; + case 'v': + veejay_msg(VEEJAY_MSG_DEBUG, "\tWriting output file in AVI VJ20 (veejay's fourcc)"); + sprintf(fourcc,"VJ20"); + break; + case 'V': + veejay_msg(VEEJAY_MSG_DEBUG, "\tWriting output file in AVI VJ22 (veejay's fourcc)"); + sprintf(fourcc,"VJ22"); + break; + case 'Y': + veejay_msg(VEEJAY_MSG_DEBUG, "\tWriting output file in AVI IYUV"); + sprintf(fourcc, "IYUV" ); + break; + case 'P': + veejay_msg(VEEJAY_MSG_DEBUG, "\tWriting output file in AVI YV16"); + sprintf(fourcc, "YV16"); + break; + case 'D': + veejay_msg(VEEJAY_MSG_DEBUG, "\tWriting output file in AVI DIV3"); + sprintf(fourcc, "DIV3"); + break; + case 'M': + veejay_msg(VEEJAY_MSG_DEBUG, "\tWriting output file in AVI MP4V"); + sprintf(fourcc,"MP4V"); + break; + case 'b': + case 'd': + veejay_msg(VEEJAY_MSG_DEBUG, "\tWriting output file in AVI DVSD"); + sprintf(fourcc, "DVSD"); + break; - case 'q': - case 'Q': - veejay_msg(VEEJAY_MSG_DEBUG, "\tWriting output file in Quicktime MJPA/JPEG"); - is_avi = 0; - break; - case 'x': - is_avi = 0; - break; - } + case 'q': + case 'Q': + veejay_msg(VEEJAY_MSG_DEBUG, "\tWriting output file in Quicktime MJPA/JPEG"); + is_avi = 0; + break; + case 'x': + is_avi = 0; + break; + } - if( is_avi ) - { - lav_fd->avi_fd = AVI_open_output_file(filename); - if(!lav_fd->avi_fd) - { - free(lav_fd); - return NULL; - } - AVI_set_video(lav_fd->avi_fd, width, height, fps, fourcc ); - if (asize) - { - if(AVI_set_audio(lav_fd->avi_fd, achans, arate, asize, WAVE_FORMAT_PCM)==-1) - { - veejay_msg(0, "Too many channels or invalid AVI file"); - lav_close( lav_fd ); - return NULL; - } - } - return lav_fd; - } else { + if( is_avi ) + { + lav_fd->avi_fd = AVI_open_output_file(filename); + if(!lav_fd->avi_fd) + { + free(lav_fd); + return NULL; + } + AVI_set_video(lav_fd->avi_fd, width, height, fps, fourcc ); + if (asize) + { + if(AVI_set_audio(lav_fd->avi_fd, achans, arate, asize, WAVE_FORMAT_PCM)==-1) + { + veejay_msg(0, "Too many channels or invalid AVI file"); + lav_close( lav_fd ); + return NULL; + } + } + return lav_fd; + } else { #ifdef HAVE_LIBQUICKTIME - /* open quicktime output file */ + /* open quicktime output file */ - /* since the documentation says that the file should be empty, - we try to remove it first */ - remove(filename); + /* since the documentation says that the file should be empty, + we try to remove it first */ + remove(filename); - lav_fd->qt_fd = quicktime_open(filename, 0, 1); - if(!lav_fd->qt_fd) - { - veejay_msg(VEEJAY_MSG_ERROR, "\tCannot open '%s' for writing", filename); - free(lav_fd); - return NULL; - } - if(format=='q') - quicktime_set_video(lav_fd->qt_fd, 1, width, height, fps, + lav_fd->qt_fd = quicktime_open(filename, 0, 1); + if(!lav_fd->qt_fd) + { + veejay_msg(VEEJAY_MSG_ERROR, "\tCannot open '%s' for writing", filename); + free(lav_fd); + return NULL; + } + if(format=='q') + quicktime_set_video(lav_fd->qt_fd, 1, width, height, fps, (interlaced ? QUICKTIME_MJPA : QUICKTIME_JPEG)); - else - quicktime_set_video(lav_fd->qt_fd,1, width,height,fps, - QUICKTIME_DV ); - if (asize) - quicktime_set_audio(lav_fd->qt_fd, achans, arate, asize, QUICKTIME_TWOS); + else + quicktime_set_video(lav_fd->qt_fd,1, width,height,fps, + QUICKTIME_DV ); + + + if (asize) + quicktime_set_audio(lav_fd->qt_fd, achans, arate, asize, QUICKTIME_TWOS); - int has_kf = quicktime_has_keyframes( lav_fd->qt_fd, 0 ); - char *copyright = quicktime_get_copyright( lav_fd->qt_fd ); - char *name = quicktime_get_name( lav_fd->qt_fd ); - char *info = quicktime_get_info( lav_fd->qt_fd ); - - veejay_msg(VEEJAY_MSG_DEBUG, - "(C) %s by %s, %s, has keyframes = %d", copyright,name,info,has_kf ); - - return lav_fd; + int has_kf = quicktime_has_keyframes( lav_fd->qt_fd, 0 ); + char *copyright = quicktime_get_copyright( lav_fd->qt_fd ); + char *name = quicktime_get_name( lav_fd->qt_fd ); + char *info = quicktime_get_info( lav_fd->qt_fd ); + + veejay_msg(VEEJAY_MSG_DEBUG, + "(C) %s by %s, %s, has keyframes = %d", copyright,name,info,has_kf ); + + return lav_fd; #else - veejay_msg(0,"Quicktime not compiled in, cannot use Quicktime."); - internal_error = ERROR_FORMAT; - return NULL; + veejay_msg(0,"Quicktime not compiled in, cannot use Quicktime."); + internal_error = ERROR_FORMAT; + return NULL; #endif - - } - if(lav_fd) free(lav_fd); - return NULL; + + } + if(lav_fd) free(lav_fd); + return NULL; } int lav_close(lav_file_t *lav_file) { - int ret = 0; - video_format = lav_file->format; internal_error = 0; /* for error messages */ - switch(video_format) - { + int ret = 0; + video_format = lav_file->format; internal_error = 0; /* for error messages */ + switch(video_format) + { #ifdef SUPPORT_READ_DV2 - case 'b': - if( lav_file->dv_fd ) - { - ret = rawdv_close(lav_file->dv_fd); - } - break; + case 'b': + if( lav_file->dv_fd ) + { + ret = rawdv_close(lav_file->dv_fd); + } + break; #endif - case 'x': - vj_picture_cleanup( lav_file->picture ); - ret = 1; - break; + case 'x': + vj_picture_cleanup( lav_file->picture ); + ret = 1; + break; #ifdef HAVE_LIBQUICKTIME - case 'q': - if( lav_file->qt_fd ) - { - ret = quicktime_close( lav_file->qt_fd ); - } - break; -#endif - default: - if( lav_file->avi_fd ) - { - ret = AVI_close(lav_file->avi_fd); - } - break; - } + case 'q': + if( lav_file->qt_fd ) + { + ret = quicktime_close( lav_file->qt_fd ); + } + break; +#endif + default: + if( lav_file->avi_fd ) + { + ret = AVI_close(lav_file->avi_fd); + } + break; + } if(lav_file) free(lav_file); - lav_file = NULL; + lav_file = NULL; return ret; } -long lav_bytes_remain( lav_file_t *lav_file ) +long lav_bytes_remain( lav_file_t *lav_file ) { - switch( lav_file->format ) - { - case 'a': - case 'A': - case 'M': - case 'P': - case 'D': - case 'v': - case 'V': - case 'Y': - case 'L': - case 'l': - case 'd': - return AVI_bytes_remain( lav_file->avi_fd ); - default: - return -1; - } - return -1; + switch( lav_file->format ) + { + case 'a': + case 'A': + case 'M': + case 'P': + case 'D': + case 'v': + case 'V': + case 'Y': + case 'L': + case 'l': + case 'd': + return AVI_bytes_remain( lav_file->avi_fd ); + default: + return -1; + } + return -1; } @@ -369,49 +371,49 @@ int lav_write_frame(lav_file_t *lav_file, uint8_t *buff, long size, long count) video_format = lav_file->format; internal_error = 0; /* for error messages */ #ifdef SUPPORT_READ_DV2 if(video_format == 'b') - return -1; //rawdv, no stream writing support yet + return -1; //rawdv, no stream writing support yet #endif /* For interlaced video insert the apropriate APPn markers */ #ifdef USE_GDK_PIXBUF if(video_format == 'x') - return -1;//picture + return -1;//picture #endif - for(n=0;nformat) - { - case 'a': - case 'A': - case 'M': - case 'P': - case 'D': - case 'v': - case 'V': - case 'Y': - case 'L': - case 'l': - case 'd': - if(n==0) { - res = AVI_write_frame( lav_file->avi_fd, buff, size ); - } - else - { - res = AVI_dup_frame( lav_file->avi_fd ); - } - break; - + switch(lav_file->format) + { + case 'a': + case 'A': + case 'M': + case 'P': + case 'D': + case 'v': + case 'V': + case 'Y': + case 'L': + case 'l': + case 'd': + if(n==0) { + res = AVI_write_frame( lav_file->avi_fd, buff, size ); + } + else + { + res = AVI_dup_frame( lav_file->avi_fd ); + } + break; + #ifdef HAVE_LIBQUICKTIME case 'q': - case 'Q': + case 'Q': res = quicktime_write_frame( lav_file->qt_fd, buff, size, 0 ); break; #endif - default: - res = -1; - break; + default: + res = -1; + break; - } + } } return res; } @@ -428,15 +430,15 @@ int lav_write_audio(lav_file_t *lav_file, uint8_t *buff, long samps) #endif qt_audion = malloc(channels * sizeof (int16_t **)); for (i = 0; i < channels; i++) - qt_audion[i] = (int16_t *)malloc(samps * lav_file->bps); + qt_audion[i] = (int16_t *)malloc(samps * lav_file->bps); #endif - switch(lav_file->format ) - { + switch(lav_file->format ) + { #ifdef HAVE_LIBQUICKTIME case 'q': case 'Q': - if (bits != 16 || channels > 1) - { + if (bits != 16 || channels > 1) + { /* Deinterleave the audio into the two channels and/or convert * bits per sample to the required format. */ @@ -446,54 +448,55 @@ int lav_write_audio(lav_file_t *lav_file, uint8_t *buff, long samps) if (bits == 16) for (i = 0; i < samps; i++) - for (j = 0; j < channels; j++) - qt_audion[j][i] = qt_audio[channels * i + j]; + for (j = 0; j < channels; j++) + qt_audion[j][i] = qt_audio[channels * i + j]; else if (bits == 8) - for (i = 0; i < samps; i++) - for (j = 0; j < channels; j++) - qt_audion[j][i] = ((int16_t)(buff[channels * i + j]) << 8) ^ 0x8000; + for (i = 0; i < samps; i++) + for (j = 0; j < channels; j++) + qt_audion[j][i] = ((int16_t)(buff[channels * i + j]) << 8) ^ 0x8000; if (bits == 8 || bits == 16) res = lqt_encode_audio_track(lav_file->qt_fd, qt_audion, NULL, samps, 0); - for (i = 0; i < channels; i++) - free(qt_audion[i]); - free(qt_audion); - } - else - { - qt_audion = &qt_audio; - res = lqt_encode_audio_track(lav_file->qt_fd, qt_audion, NULL, samps, 0); - } + for (i = 0; i < channels; i++) + free(qt_audion[i]); - return res; + free(qt_audion); + } + else + { + qt_audion = &qt_audio; + res = lqt_encode_audio_track(lav_file->qt_fd, qt_audion, NULL, samps, 0); + } + + return res; break; #endif #ifdef SUPPORT_READ_DV2 - case 'b': - return 0; + case 'b': + return 0; #endif #ifdef USE_GDK_PIXBUF - case 'x': - return 0; + case 'x': + return 0; #endif - default: - return AVI_write_audio( lav_file->avi_fd, buff, samps*lav_file->bps); - } - return 0; + default: + return AVI_write_audio( lav_file->avi_fd, buff, samps*lav_file->bps); + } + return 0; } -void lav_bogus_set_length( lav_file_t *lav_file , int len ) +void lav_bogus_set_length( lav_file_t *lav_file , int len ) { - lav_file->bogus_len = len; + lav_file->bogus_len = len; } -int lav_bogus_video_length( lav_file_t *lav_file ) +int lav_bogus_video_length( lav_file_t *lav_file ) { - video_format = lav_file->format; - if( lav_file->format == 'x' ) - return lav_file->bogus_len; - return 0; + video_format = lav_file->format; + if( lav_file->format == 'x' ) + return lav_file->bogus_len; + return 0; } long lav_video_frames(lav_file_t *lav_file) @@ -502,12 +505,12 @@ long lav_video_frames(lav_file_t *lav_file) switch(lav_file->format) { #ifdef SUPPORT_READ_DV2 - case 'b': - return rawdv_video_frames(lav_file->dv_fd); + case 'b': + return rawdv_video_frames(lav_file->dv_fd); #endif #ifdef USE_GDK_PIXBUF - case 'x': - return lav_file->bogus_len; + case 'x': + return lav_file->bogus_len; #endif #ifdef HAVE_LIBQUICKTIME case 'q': @@ -516,7 +519,7 @@ long lav_video_frames(lav_file_t *lav_file) #endif default: - return AVI_video_frames( lav_file->avi_fd ); + return AVI_video_frames( lav_file->avi_fd ); } return -1; } @@ -524,21 +527,21 @@ long lav_video_frames(lav_file_t *lav_file) int lav_video_width(lav_file_t *lav_file) { video_format = lav_file->format; internal_error = 0; /* for error messages */ - switch(lav_file->format) - { + switch(lav_file->format) + { #ifdef SUPPORT_READ_DV2 - case 'b': return rawdv_width(lav_file->dv_fd); + case 'b': return rawdv_width(lav_file->dv_fd); #endif #ifdef USE_GDK_PIXBUF - case 'x': return output_scale_width; + case 'x': return output_scale_width; #endif #ifdef HAVE_LIBQUICKTIME - case 'q': case 'Q': return quicktime_video_width(lav_file->qt_fd,0); -#endif - default: - return AVI_video_width( lav_file->avi_fd); - } - return -1; + case 'q': case 'Q': return quicktime_video_width(lav_file->qt_fd,0); +#endif + default: + return AVI_video_width( lav_file->avi_fd); + } + return -1; } int lav_video_height(lav_file_t *lav_file) @@ -547,18 +550,18 @@ int lav_video_height(lav_file_t *lav_file) switch( lav_file->format ) { #ifdef SUPPORT_READ_DV2 - case 'b': return rawdv_height( lav_file->dv_fd ); + case 'b': return rawdv_height( lav_file->dv_fd ); #endif -#ifdef USE_GDK_PIXBUF - case 'x': return output_scale_height; +#ifdef USE_GDK_PIXBUF + case 'x': return output_scale_height; #endif #ifdef HAVE_LIBQUICKTIME - case 'q': case 'Q': return quicktime_video_height(lav_file->qt_fd,0); + case 'q': case 'Q': return quicktime_video_height(lav_file->qt_fd,0); #endif - default: - return AVI_video_height(lav_file->avi_fd); + default: + return AVI_video_height(lav_file->avi_fd); } - return -1; + return -1; } double lav_frame_rate(lav_file_t *lav_file) @@ -567,19 +570,19 @@ double lav_frame_rate(lav_file_t *lav_file) switch(lav_file->format) { #ifdef SUPPORT_READ_DV2 - case 'b': - return rawdv_fps(lav_file->dv_fd); + case 'b': + return rawdv_fps(lav_file->dv_fd); #endif #ifdef USE_GDK_PIXBUF - case 'x': - return output_fps; + case 'x': + return output_fps; #endif #ifdef HAVE_LIBQUICKTIME - case 'q': case 'Q': - return quicktime_frame_rate(lav_file->qt_fd,0); -#endif - default: - return AVI_frame_rate( lav_file->avi_fd ); + case 'q': case 'Q': + return quicktime_frame_rate(lav_file->qt_fd,0); +#endif + default: + return AVI_frame_rate( lav_file->avi_fd ); } return -1; } @@ -587,12 +590,12 @@ double lav_frame_rate(lav_file_t *lav_file) int lav_video_interlacing(lav_file_t *lav_file) { #ifdef SUPPORT_READ_DV2 - if(video_format == 'b') - return rawdv_interlacing(lav_file->dv_fd); + if(video_format == 'b') + return rawdv_interlacing(lav_file->dv_fd); #endif #ifdef USE_GDK_PIXBUF - if(video_format == 'x') - return LAV_NOT_INTERLACED; + if(video_format == 'x') + return LAV_NOT_INTERLACED; #endif return lav_file->interlacing; } @@ -611,27 +614,27 @@ int lav_video_is_MJPG(lav_file_t *lav_file) int lav_video_MJPG_chroma(lav_file_t *lav_file) { - return lav_file->MJPG_chroma; + return lav_file->MJPG_chroma; } int lav_video_compressor_type(lav_file_t *lav_file) { #ifdef SUPPORT_READ_DV2 - if(lav_file->format == 'b') - return rawdv_compressor( lav_file->dv_fd ); + if(lav_file->format == 'b') + return rawdv_compressor( lav_file->dv_fd ); #endif #ifdef USE_GDK_PIXBUF - if(lav_file->format == 'x') - return 0xffff; + if(lav_file->format == 'x') + return 0xffff; #endif #ifdef HAVE_LIBQUICKTIME - if(lav_file->format == 'q' || lav_file->format == 'Q') - { - const char *compressor = quicktime_video_compressor(lav_file->qt_fd,0); - return vj_el_get_decoder_from_fourcc( compressor ); - } + if(lav_file->format == 'q' || lav_file->format == 'Q') + { + const char *compressor = quicktime_video_compressor(lav_file->qt_fd,0); + return vj_el_get_decoder_from_fourcc( compressor ); + } #endif - return vj_el_get_decoder_from_fourcc( AVI_video_compressor(lav_file->avi_fd) ); + return vj_el_get_decoder_from_fourcc( AVI_video_compressor(lav_file->avi_fd) ); } @@ -645,22 +648,22 @@ const char *lav_video_compressor(lav_file_t *lav_file) #ifdef SUPPORT_READ_DV2 if( video_format == 'b' ) { - return FOURCC_DV; + return FOURCC_DV; } #endif #ifdef USE_GDK_PIXBUF if( video_format == 'x') { - return FOURCC_PIC; + return FOURCC_PIC; } #endif if( video_format == 'L' ) { - return FOURCC_LZO; + return FOURCC_LZO; } #ifdef HAVE_LIBQUICKTIME if(lav_file->format == 'q' || lav_file->format == 'Q') - return quicktime_video_compressor(lav_file->qt_fd,0); + return quicktime_video_compressor(lav_file->qt_fd,0); #endif return AVI_video_compressor(lav_file->avi_fd); } @@ -671,11 +674,11 @@ int lav_audio_channels(lav_file_t *lav_file) video_format = lav_file->format; internal_error = 0; /* for error messages */ #ifdef SUPPORT_READ_DV2 if(video_format == 'b') - return rawdv_audio_channels(lav_file->dv_fd); + return rawdv_audio_channels(lav_file->dv_fd); #endif #ifdef USE_GDK_PIXBUF if(video_format == 'x') - return 0; + return 0; #endif #ifdef HAVE_LIBQUICKTIME if(video_format == 'q' || video_format =='Q') @@ -690,16 +693,16 @@ int lav_audio_bits(lav_file_t *lav_file) video_format = lav_file->format; internal_error = 0; /* for error messages */ #ifdef SUPPORT_READ_DV2 if(video_format == 'b') - return rawdv_audio_bits(lav_file->dv_fd); + return rawdv_audio_bits(lav_file->dv_fd); #endif #ifdef USE_GDK_PIXBUF - if(video_format == 'x' ) - return 0; + if(video_format == 'x' ) + return 0; #endif #ifdef HAVE_LIBQUICKTIME if(video_format == 'q'|| video_format =='Q') return quicktime_audio_bits(lav_file->qt_fd,0); -#endif +#endif return (AVI_audio_bits(lav_file->avi_fd)); } @@ -708,17 +711,17 @@ long lav_audio_rate(lav_file_t *lav_file) if(!lav_file->has_audio) return 0; video_format = lav_file->format; internal_error = 0; /* for error messages */ #ifdef SUPPORT_READ_DV2 - if(video_format=='b') - return rawdv_audio_rate(lav_file->dv_fd); + if(video_format=='b') + return rawdv_audio_rate(lav_file->dv_fd); #endif #ifdef USE_GDK_PIXBUF - if(video_format == 'x') - return 0; + if(video_format == 'x') + return 0; #endif #ifdef HAVE_LIBQUICKTIME - if( video_format == 'q'|| video_format =='Q') - return quicktime_sample_rate(lav_file->qt_fd,0); -#endif + if( video_format == 'q'|| video_format =='Q') + return quicktime_sample_rate(lav_file->qt_fd,0); +#endif return (AVI_audio_rate(lav_file->avi_fd)); } @@ -728,16 +731,16 @@ long lav_audio_clips(lav_file_t *lav_file) video_format = lav_file->format; internal_error = 0; /* for error messages */ #ifdef SUPPORT_READ_DV2 if(video_format=='b') - return rawdv_audio_bps(lav_file->dv_fd); + return rawdv_audio_bps(lav_file->dv_fd); #endif #ifdef USE_GDK_PIXBUF - if(video_format == 'x') - return 0; + if(video_format == 'x') + return 0; #endif #ifdef HAVE_LIBQUICKTIME - if(video_format == 'q'|| video_format == 'Q') - return quicktime_audio_length(lav_file->qt_fd,0); -#endif + if(video_format == 'q'|| video_format == 'Q') + return quicktime_audio_length(lav_file->qt_fd,0); +#endif return (AVI_audio_bytes(lav_file->avi_fd)/lav_file->bps); } @@ -746,16 +749,16 @@ long lav_frame_size(lav_file_t *lav_file, long frame) video_format = lav_file->format; internal_error = 0; /* for error messages */ #ifdef SUPPORT_READ_DV2 if(video_format == 'b') - return rawdv_frame_size( lav_file->dv_fd ); + return rawdv_frame_size( lav_file->dv_fd ); #endif #ifdef USE_GDK_PIXBUF - if(video_format == 'x') - return output_scale_width * output_scale_height * 3; + if(video_format == 'x') + return output_scale_width * output_scale_height * 3; #endif #ifdef HAVE_LIBQUICKTIME - if( video_format == 'q' || video_format == 'Q') - return quicktime_frame_size(lav_file->qt_fd,frame,0); -#endif + if( video_format == 'q' || video_format == 'Q') + return quicktime_frame_size(lav_file->qt_fd,frame,0); +#endif return (AVI_frame_size(lav_file->avi_fd,frame)); } @@ -764,11 +767,11 @@ int lav_seek_start(lav_file_t *lav_file) video_format = lav_file->format; internal_error = 0; /* for error messages */ #ifdef SUPPORT_READ_DV2 if(video_format == 'b') - return rawdv_set_position( lav_file->dv_fd, 0 ); + return rawdv_set_position( lav_file->dv_fd, 0 ); #endif #ifdef USE_GDK_PIXBUF if(video_format == 'x') - return 1; + return 1; #endif #ifdef HAVE_LIBQUICKTIME return quicktime_seek_start(lav_file->qt_fd); @@ -781,15 +784,15 @@ int lav_set_video_position(lav_file_t *lav_file, long frame) video_format = lav_file->format; internal_error = 0; /* for error messages */ #ifdef SUPPORT_READ_DV2 if(video_format == 'b') - return rawdv_set_position( lav_file->dv_fd, frame ); + return rawdv_set_position( lav_file->dv_fd, frame ); #endif #ifdef USE_GDK_PIXBUF if(video_format == 'x') - return 1; + return 1; #endif #ifdef HAVE_LIBQUICKTIME - if(video_format == 'q' || video_format == 'Q') - return quicktime_set_video_position(lav_file->qt_fd,(int64_t)frame,0); + if(video_format == 'q' || video_format == 'Q') + return quicktime_set_video_position(lav_file->qt_fd,(int64_t)frame,0); #endif return (AVI_set_video_position(lav_file->avi_fd,frame)); } @@ -799,25 +802,25 @@ int lav_read_frame(lav_file_t *lav_file, uint8_t *vidbuf) video_format = lav_file->format; internal_error = 0; /* for error messages */ #ifdef SUPPORT_READ_DV2 if(lav_file->format == 'b') - { - return rawdv_read_frame( lav_file->dv_fd, vidbuf ); - } + { + return rawdv_read_frame( lav_file->dv_fd, vidbuf ); + } #endif #ifdef USE_GDK_PIXBUF - if(lav_file->format == 'x') - return -1; + if(lav_file->format == 'x') + return -1; #endif #ifdef HAVE_LIBQUICKTIME - if(lav_file->format == 'q'|| lav_file->format == 'Q') - return quicktime_read_frame(lav_file->qt_fd,vidbuf,0); + if(lav_file->format == 'q'|| lav_file->format == 'Q') + return quicktime_read_frame(lav_file->qt_fd,vidbuf,0); #endif - int kf = 1; + int kf = 1; int ret = (AVI_read_frame(lav_file->avi_fd,vidbuf,&kf)); /* if(!kf) { -// veejay_msg(0, "Requested frame is not a keyframe"); - return ret; +// veejay_msg(0, "Requested frame is not a keyframe"); + return ret; } */ return ret; @@ -827,24 +830,24 @@ int lav_read_frame(lav_file_t *lav_file, uint8_t *vidbuf) #ifdef USE_GDK_PIXBUF VJFrame *lav_get_frame_ptr( lav_file_t *lav_file ) { - if(lav_file->format == 'x') - return vj_picture_get( lav_file->picture ); - return NULL; + if(lav_file->format == 'x') + return vj_picture_get( lav_file->picture ); + return NULL; } #else uint8_t *lav_get_frame_ptr( lav_file_t *lav_file) { - return NULL; + return NULL; } #endif int lav_is_DV(lav_file_t *lav_file) { #ifdef SUPPORT_READ_DV2 - if(lav_file->format == 'b') - return 1; + if(lav_file->format == 'b') + return 1; #endif - return 0; + return 0; } int lav_set_audio_position(lav_file_t *lav_file, long clip) @@ -853,86 +856,86 @@ int lav_set_audio_position(lav_file_t *lav_file, long clip) video_format = lav_file->format; internal_error = 0; /* for error messages */ #ifdef SUPPORT_READ_DV2 if(video_format == 'b') - return 0; + return 0; #endif #ifdef USE_GDK_PIXBUF if(video_format == 'x') - return 0; + return 0; #endif #ifdef HAVE_LIBQUICKTIME - if(video_format =='q'|| video_format == 'Q' ) { - quicktime_set_audio_position(lav_file->qt_fd,clip,0); - return 1; - } + if(video_format =='q'|| video_format == 'Q' ) { + quicktime_set_audio_position(lav_file->qt_fd,clip,0); + return 1; + } #endif return (AVI_set_audio_position(lav_file->avi_fd,clip*lav_file->bps)); } int lav_read_audio(lav_file_t *lav_file, uint8_t *audbuf, long samps) { - if(!lav_file->has_audio) - { - internal_error = ERROR_NOAUDIO; - return -1; - } + if(!lav_file->has_audio) + { + internal_error = ERROR_NOAUDIO; + return -1; + } #ifdef SUPPORT_READ_DV2 - if(video_format == 'b') - return rawdv_read_audio_frame( lav_file->dv_fd, audbuf ); + if(video_format == 'b') + return rawdv_read_audio_frame( lav_file->dv_fd, audbuf ); #endif #ifdef USE_GDK_PIXBUF - if(video_format == 'x') - return 0; + if(video_format == 'x') + return 0; #endif - video_format = lav_file->format; internal_error = 0; /* for error messages */ + video_format = lav_file->format; internal_error = 0; /* for error messages */ #ifdef HAVE_LIBQUICKTIME - if( video_format == 'q' || video_format == 'Q') - { - int64_t last_pos, start_pos; - int res, i, j; - int16_t *qt_audio = (int16_t *)audbuf, **qt_audion; - int channels = lav_audio_channels(lav_file); - uint8_t b0, b1; - qt_audion = malloc(channels * sizeof (int16_t **)); - for (i = 0; i < channels; i++) - qt_audion[i] = (int16_t *)malloc(samps * lav_file->bps); + if( video_format == 'q' || video_format == 'Q') + { + int64_t last_pos, start_pos; + int res, i, j; + int16_t *qt_audio = (int16_t *)audbuf, **qt_audion; + int channels = lav_audio_channels(lav_file); + uint8_t b0, b1; + qt_audion = malloc(channels * sizeof (int16_t **)); + for (i = 0; i < channels; i++) + qt_audion[i] = (int16_t *)malloc(samps * lav_file->bps); - start_pos = quicktime_audio_position(lav_file->qt_fd, 0); - lqt_decode_audio_track(lav_file->qt_fd, qt_audion, NULL, samps, 0); - last_pos = lqt_last_audio_position(lav_file->qt_fd, 0); - res = last_pos - start_pos; - if (res <= 0) - goto out; - /* Interleave the channels of audio into the one buffer provided */ - for (i =0; i < res; i++) - { - for (j = 0; j < channels; j++) - qt_audio[(channels*i) + j] = qt_audion[j][i]; - } + start_pos = quicktime_audio_position(lav_file->qt_fd, 0); + lqt_decode_audio_track(lav_file->qt_fd, qt_audion, NULL, samps, 0); + last_pos = lqt_last_audio_position(lav_file->qt_fd, 0); + res = last_pos - start_pos; + if (res <= 0) + goto out; + /* Interleave the channels of audio into the one buffer provided */ + for (i =0; i < res; i++) + { + for (j = 0; j < channels; j++) + qt_audio[(channels*i) + j] = qt_audion[j][i]; + } - if (lav_detect_endian()) - { - i= 0; - while (i < (2*res) ) - { - b0 = 0; - b1 = 0; - b0 = (qt_audio[i] & 0x00FF); - b1 = (qt_audio[i] & 0xFF00) >> 8; - qt_audio[i] = (b0 <<8) + b1; - i = i +1; - } - } + if (lav_detect_endian()) + { + i= 0; + while (i < (2*res) ) + { + b0 = 0; + b1 = 0; + b0 = (qt_audio[i] & 0x00FF); + b1 = (qt_audio[i] & 0xFF00) >> 8; + qt_audio[i] = (b0 <<8) + b1; + i = i +1; + } + } out: - for (j = 0; j < channels; j++) - free(qt_audion[j]); - free(qt_audion); - return(res); - } + for (j = 0; j < channels; j++) + free(qt_audion[j]); + free(qt_audion); + return(res); + } #endif - int res = AVI_read_audio( lav_file->avi_fd, audbuf, - (samps * lav_file->bps) ); - return res; + int res = AVI_read_audio( lav_file->avi_fd, audbuf, + (samps * lav_file->bps) ); + return res; } int lav_filetype(lav_file_t *lav_file) @@ -953,15 +956,15 @@ lav_file_t *lav_open_input_file(char *filename, long mmap_size) /* Set lav_fd */ -#ifdef HAVE_LIBQUICKTIME +#ifdef HAVE_LIBQUICKTIME char *audio_comp; #endif lav_fd->avi_fd = 0; #ifdef SUPPORT_READ_DV2 - lav_fd->dv_fd = 0; + lav_fd->dv_fd = 0; #endif #ifdef USE_GDK_PIXBUF - lav_fd->picture = NULL; + lav_fd->picture = NULL; #endif lav_fd->format = 0; lav_fd->interlacing = LAV_INTER_UNKNOWN; @@ -973,320 +976,320 @@ lav_file_t *lav_open_input_file(char *filename, long mmap_size) lav_fd->MJPG_chroma = CHROMAUNKNOWN; lav_fd->mmap_size = mmap_size; - int ret = 0; + int ret = 0; - /* open file, check if file is a file */ - struct stat s; - if( stat(filename, &s ) != 0 ) - { - if(lav_fd) free(lav_fd); - veejay_msg(VEEJAY_MSG_ERROR, "Invalid file '%s'. Proper permissions?",filename); - return NULL; - } + /* open file, check if file is a file */ + struct stat s; + if( stat(filename, &s ) != 0 ) + { + if(lav_fd) free(lav_fd); + veejay_msg(VEEJAY_MSG_ERROR, "Invalid file '%s'. Proper permissions?",filename); + return NULL; + } - if(!S_ISREG( s.st_mode) ) - { - veejay_msg(VEEJAY_MSG_ERROR, "'%s' is not a regular file",filename); - if(lav_fd) free(lav_fd); - return NULL; - } + if(!S_ISREG( s.st_mode) ) + { + veejay_msg(VEEJAY_MSG_ERROR, "'%s' is not a regular file",filename); + if(lav_fd) free(lav_fd); + return NULL; + } #ifdef USE_GDK_PIXBUF - lav_fd->picture = vj_picture_open( (const char*) filename, - output_scale_width, output_scale_height, get_ffmpeg_pixfmt(output_yuv) ); - if(lav_fd->picture) - { - lav_fd->format = 'x'; - lav_fd->bogus_len = (int) output_fps; - video_comp = pict; - ret = 1; - veejay_msg(VEEJAY_MSG_DEBUG,"\tLoaded image file"); - return lav_fd; - } + lav_fd->picture = vj_picture_open( (const char*) filename, + output_scale_width, output_scale_height, get_ffmpeg_pixfmt(output_yuv) ); + if(lav_fd->picture) + { + lav_fd->format = 'x'; + lav_fd->bogus_len = (int) output_fps; + video_comp = pict; + ret = 1; + veejay_msg(VEEJAY_MSG_DEBUG,"\tLoaded image file"); + return lav_fd; + } #endif - else - { - lav_fd->avi_fd = AVI_open_input_file(filename,1,mmap_size); - - if( lav_fd->avi_fd && AVI_errno == AVI_ERR_EMPTY ) - { - veejay_msg(VEEJAY_MSG_ERROR, "Empty AVI file"); - if(lav_fd) free(lav_fd); - return NULL; - } - else if ( lav_fd->avi_fd && AVI_errno == 0 ) - { - veejay_msg(VEEJAY_MSG_DEBUG, - "\tFile is AVI" ); - ret =1; - } - } + else + { + lav_fd->avi_fd = AVI_open_input_file(filename,1,mmap_size); + + if( lav_fd->avi_fd && AVI_errno == AVI_ERR_EMPTY ) + { + veejay_msg(VEEJAY_MSG_ERROR, "Empty AVI file"); + if(lav_fd) free(lav_fd); + return NULL; + } + else if ( lav_fd->avi_fd && AVI_errno == 0 ) + { + veejay_msg(VEEJAY_MSG_DEBUG, + "\tFile is AVI" ); + ret =1; + } + } - int alt = 0; - - if(lav_fd->avi_fd) - { - ret = 1; - alt = 1; - lav_fd->format = 'a'; - lav_fd->has_audio = (AVI_audio_bits(lav_fd->avi_fd)>0 && + int alt = 0; + + if(lav_fd->avi_fd) + { + ret = 1; + alt = 1; + lav_fd->format = 'a'; + lav_fd->has_audio = (AVI_audio_bits(lav_fd->avi_fd)>0 && AVI_audio_format(lav_fd->avi_fd)==WAVE_FORMAT_PCM); - video_comp = AVI_video_compressor(lav_fd->avi_fd); - if(video_comp == NULL || strlen(video_comp) <= 0) - { - veejay_msg(VEEJAY_MSG_ERROR, "Unable to read FOURCC from AVI"); - if(lav_fd) free(lav_fd); - return NULL; - } - veejay_msg(VEEJAY_MSG_DEBUG, "\tFOURCC is %s", video_comp ); - } - else if( AVI_errno==AVI_ERR_NO_AVI || (!lav_fd->avi_fd && !ret) ) - { + video_comp = AVI_video_compressor(lav_fd->avi_fd); + if(video_comp == NULL || strlen(video_comp) <= 0) + { + veejay_msg(VEEJAY_MSG_ERROR, "Unable to read FOURCC from AVI"); + if(lav_fd) free(lav_fd); + return NULL; + } + veejay_msg(VEEJAY_MSG_DEBUG, "\tFOURCC is %s", video_comp ); + } + else if( AVI_errno==AVI_ERR_NO_AVI || (!lav_fd->avi_fd && !ret) ) + { #ifdef HAVE_LIBQUICKTIME - if(quicktime_check_sig(filename)) - { - quicktime_pasp_t pasp; - int nfields, detail; - lav_fd->qt_fd = quicktime_open(filename,1,0); - video_format = 'q'; /* for error messages */ - if (!lav_fd->qt_fd) - { - veejay_msg(VEEJAY_MSG_ERROR, "Unable to open quicktime file"); - free(lav_fd); - return NULL; - } - else - veejay_msg(VEEJAY_MSG_DEBUG, "\tOpening Quicktime file"); - lav_fd->avi_fd = NULL; - lav_fd->format = 'q'; - video_comp = quicktime_video_compressor(lav_fd->qt_fd,0); - veejay_msg(VEEJAY_MSG_DEBUG,"\tFile has fourcc '%s'", - video_comp ); - /* We want at least one video track */ - if (quicktime_video_tracks(lav_fd->qt_fd) < 1) - { - veejay_msg(VEEJAY_MSG_ERROR, "At least one video track required"); - lav_close(lav_fd); - internal_error = ERROR_FORMAT; - return NULL; - } - /* - * If the quicktime file has the sample aspect atom then use it to set - * the sar values in the lav_fd structure. Hardwired (like everywhere else) - * to only look at track 0. - */ - - if (lqt_get_pasp(lav_fd->qt_fd, 0, &pasp) != 0) - { - lav_fd->sar_w = pasp.hSpacing; - lav_fd->sar_h = pasp.vSpacing; - } - /* - * If a 'fiel' atom is present (not guaranteed) then use it to set the - * interlacing type. - */ - - if (lqt_get_fiel(lav_fd->qt_fd, 0, &nfields, &detail) != 0) - { - if (nfields == 2) - { - if (detail == 14 || detail == 6) - lav_fd->interlacing = LAV_INTER_BOTTOM_FIRST; - else if (detail == 9 || detail == 1) - lav_fd->interlacing = LAV_INTER_TOP_FIRST; - else - veejay_msg(VEEJAY_MSG_DEBUG, "Unknown 'detail' in 'fiel' atom: %d", detail); - } - else - lav_fd->interlacing = LAV_NOT_INTERLACED; - } - /* Check for audio tracks */ - lav_fd->has_audio = 0; - if (quicktime_audio_tracks(lav_fd->qt_fd)) - { - audio_comp = quicktime_audio_compressor(lav_fd->qt_fd,0); - if (strncasecmp(audio_comp, QUICKTIME_TWOS,4)==0) - lav_fd->has_audio = 1; - else - veejay_msg(VEEJAY_MSG_WARNING, "Audio compressor '%s' not supported", - audio_comp ); - } - alt = 1; - ret = 1; - } - else - veejay_msg(VEEJAY_MSG_DEBUG, "\tNot a Quicktime file"); + if(quicktime_check_sig(filename)) + { + quicktime_pasp_t pasp; + int nfields, detail; + lav_fd->qt_fd = quicktime_open(filename,1,0); + video_format = 'q'; /* for error messages */ + if (!lav_fd->qt_fd) + { + veejay_msg(VEEJAY_MSG_ERROR, "Unable to open quicktime file"); + free(lav_fd); + return NULL; + } + else + veejay_msg(VEEJAY_MSG_DEBUG, "\tOpening Quicktime file"); + lav_fd->avi_fd = NULL; + lav_fd->format = 'q'; + video_comp = quicktime_video_compressor(lav_fd->qt_fd,0); + veejay_msg(VEEJAY_MSG_DEBUG,"\tFile has fourcc '%s'", + video_comp ); + /* We want at least one video track */ + if (quicktime_video_tracks(lav_fd->qt_fd) < 1) + { + veejay_msg(VEEJAY_MSG_ERROR, "At least one video track required"); + lav_close(lav_fd); + internal_error = ERROR_FORMAT; + return NULL; + } + /* + * If the quicktime file has the sample aspect atom then use it to set + * the sar values in the lav_fd structure. Hardwired (like everywhere else) + * to only look at track 0. + */ + + if (lqt_get_pasp(lav_fd->qt_fd, 0, &pasp) != 0) + { + lav_fd->sar_w = pasp.hSpacing; + lav_fd->sar_h = pasp.vSpacing; + } + /* + * If a 'fiel' atom is present (not guaranteed) then use it to set the + * interlacing type. + */ + + if (lqt_get_fiel(lav_fd->qt_fd, 0, &nfields, &detail) != 0) + { + if (nfields == 2) + { + if (detail == 14 || detail == 6) + lav_fd->interlacing = LAV_INTER_BOTTOM_FIRST; + else if (detail == 9 || detail == 1) + lav_fd->interlacing = LAV_INTER_TOP_FIRST; + else + veejay_msg(VEEJAY_MSG_DEBUG, "Unknown 'detail' in 'fiel' atom: %d", detail); + } + else + lav_fd->interlacing = LAV_NOT_INTERLACED; + } + /* Check for audio tracks */ + lav_fd->has_audio = 0; + if (quicktime_audio_tracks(lav_fd->qt_fd)) + { + audio_comp = quicktime_audio_compressor(lav_fd->qt_fd,0); + if (strncasecmp(audio_comp, QUICKTIME_TWOS,4)==0) + lav_fd->has_audio = 1; + else + veejay_msg(VEEJAY_MSG_WARNING, "Audio compressor '%s' not supported", + audio_comp ); + } + alt = 1; + ret = 1; + } + else + veejay_msg(VEEJAY_MSG_DEBUG, "\tNot a Quicktime file"); #endif #ifdef SUPPORT_READ_DV2 - if(!alt) - { - ret = 0; - lav_fd->dv_fd = rawdv_open_input_file(filename,mmap_size); - if(lav_fd->dv_fd > 0) - { - lav_fd->MJPG_chroma = rawdv_sampling( lav_fd->dv_fd ); - video_comp = rawdv_video_compressor( lav_fd->dv_fd ); - lav_fd->format = 'b'; - lav_fd->has_audio = 0; - ret = 1; - alt = 1; - veejay_msg(VEEJAY_MSG_DEBUG, - "RAW DV file '%s'", - video_comp ); - } - else - veejay_msg(VEEJAY_MSG_DEBUG, "\tNot a raw dv file"); - } + if(!alt) + { + ret = 0; + lav_fd->dv_fd = rawdv_open_input_file(filename,mmap_size); + if(lav_fd->dv_fd > 0) + { + lav_fd->MJPG_chroma = rawdv_sampling( lav_fd->dv_fd ); + video_comp = rawdv_video_compressor( lav_fd->dv_fd ); + lav_fd->format = 'b'; + lav_fd->has_audio = 0; + ret = 1; + alt = 1; + veejay_msg(VEEJAY_MSG_DEBUG, + "RAW DV file '%s'", + video_comp ); + } + else + veejay_msg(VEEJAY_MSG_DEBUG, "\tNot a raw dv file"); + } #endif - } + } - if(ret == 0 || video_comp == NULL || alt == 0) - { - free(lav_fd); - internal_error = ERROR_FORMAT; - return NULL; - } - + if(ret == 0 || video_comp == NULL || alt == 0) + { + free(lav_fd); + internal_error = ERROR_FORMAT; + return NULL; + } + lav_fd->bps = (lav_audio_channels(lav_fd)*lav_audio_bits(lav_fd)+7)/8; if(lav_fd->bps==0) lav_fd->bps=1; /* make it save since we will divide by that value */ - /* if(strlen(video_comp) == 1 ) { - lav_fd->MJPG_chroma = CHROMA422; - lav_fd->format = 'V'; - lav_fd->interlacing = LAV_NOT_INTERLACED; - return lav_fd; - } + /* if(strlen(video_comp) == 1 ) { + lav_fd->MJPG_chroma = CHROMA422; + lav_fd->format = 'V'; + lav_fd->interlacing = LAV_NOT_INTERLACED; + return lav_fd; + } */ #ifdef USE_GDK_PIXBUF - if(strncasecmp(video_comp, "PICT",4) == 0 ) - { - switch(output_yuv) - { - case FMT_420: - case FMT_420F: - lav_fd->MJPG_chroma = CHROMA420; - break; - case FMT_422: - case FMT_422F: - lav_fd->MJPG_chroma = CHROMA422; - break; - default: - lav_fd->MJPG_chroma = CHROMAUNKNOWN; - break; - } - lav_fd->format = 'x'; - lav_fd->interlacing = LAV_NOT_INTERLACED; - return lav_fd; - } + if(strncasecmp(video_comp, "PICT",4) == 0 ) + { + switch(output_yuv) + { + case FMT_420: + case FMT_420F: + lav_fd->MJPG_chroma = CHROMA420; + break; + case FMT_422: + case FMT_422F: + lav_fd->MJPG_chroma = CHROMA422; + break; + default: + lav_fd->MJPG_chroma = CHROMAUNKNOWN; + break; + } + lav_fd->format = 'x'; + lav_fd->interlacing = LAV_NOT_INTERLACED; + return lav_fd; + } #endif if ( strncasecmp(video_comp,"iyuv",4)==0 || - strncasecmp(video_comp,"yv12",4)==0 || - strncasecmp(video_comp,"i420",4)==0) - { - lav_fd->MJPG_chroma = CHROMA420; - lav_fd->format = 'Y'; - lav_fd->interlacing = LAV_NOT_INTERLACED; - return lav_fd; - } + strncasecmp(video_comp,"yv12",4)==0 || + strncasecmp(video_comp,"i420",4)==0) + { + lav_fd->MJPG_chroma = CHROMA420; + lav_fd->format = 'Y'; + lav_fd->interlacing = LAV_NOT_INTERLACED; + return lav_fd; + } - if(strncasecmp(video_comp,"vj22",4)==0 || strncasecmp(video_comp, "y42b",4) == 0) - { - lav_fd->MJPG_chroma = CHROMA422F; - lav_fd->format = 'V'; - lav_fd->interlacing = LAV_NOT_INTERLACED; - return lav_fd; - } - if(strncasecmp(video_comp,"vj20",4)==0) - { - lav_fd->MJPG_chroma = CHROMA420F; - lav_fd->format = 'v'; - lav_fd->interlacing = LAV_NOT_INTERLACED; - return lav_fd; - } + if(strncasecmp(video_comp,"vj22",4)==0 || strncasecmp(video_comp, "y42b",4) == 0) + { + lav_fd->MJPG_chroma = CHROMA422F; + lav_fd->format = 'V'; + lav_fd->interlacing = LAV_NOT_INTERLACED; + return lav_fd; + } + if(strncasecmp(video_comp,"vj20",4)==0) + { + lav_fd->MJPG_chroma = CHROMA420F; + lav_fd->format = 'v'; + lav_fd->interlacing = LAV_NOT_INTERLACED; + return lav_fd; + } if (strncasecmp(video_comp,"yv16",4)==0 || - strncasecmp(video_comp,"i422",4)==0 || - strncasecmp(video_comp,"hfyu",4)==0) - { - lav_fd->MJPG_chroma = CHROMA422; - lav_fd->format = 'P'; - lav_fd->interlacing = LAV_NOT_INTERLACED; - return lav_fd; - } + strncasecmp(video_comp,"i422",4)==0 || + strncasecmp(video_comp,"hfyu",4)==0) + { + lav_fd->MJPG_chroma = CHROMA422; + lav_fd->format = 'P'; + lav_fd->interlacing = LAV_NOT_INTERLACED; + return lav_fd; + } - if( strncasecmp( video_comp, "mlzo", 4 ) == 0 ) - { - lav_fd->MJPG_chroma = CHROMA422; - lav_fd->interlacing = LAV_NOT_INTERLACED; - return lav_fd; - } - - if (strncasecmp(video_comp,"dvsd",4)==0 || - strncasecmp(video_comp,"dvcp",4) ==0 || - strncasecmp(video_comp,"dxsd",4) == 0 || - strncasecmp(video_comp,"dvp",3) == 0 || - strncasecmp(video_comp,"dvhd",4) == 0 || - strncasecmp(video_comp,"dv",2 ) == 0) - { - int gw = lav_video_height( lav_fd ); - if( gw == 480 ) - lav_fd->MJPG_chroma = CHROMA411; - else - lav_fd->MJPG_chroma = CHROMA422; + if( strncasecmp( video_comp, "mlzo", 4 ) == 0 ) + { + lav_fd->MJPG_chroma = CHROMA422; + lav_fd->interlacing = LAV_NOT_INTERLACED; + return lav_fd; + } + + if (strncasecmp(video_comp,"dvsd",4)==0 || + strncasecmp(video_comp,"dvcp",4) ==0 || + strncasecmp(video_comp,"dxsd",4) == 0 || + strncasecmp(video_comp,"dvp",3) == 0 || + strncasecmp(video_comp,"dvhd",4) == 0 || + strncasecmp(video_comp,"dv",2 ) == 0) + { + int gw = lav_video_height( lav_fd ); + if( gw == 480 ) + lav_fd->MJPG_chroma = CHROMA411; + else + lav_fd->MJPG_chroma = CHROMA422; - lav_fd->interlacing = LAV_INTER_BOTTOM_FIRST; - return lav_fd; - } + lav_fd->interlacing = LAV_INTER_BOTTOM_FIRST; + return lav_fd; + } - if( strncasecmp(video_comp, "png", 3 ) == 0 || - strncasecmp(video_comp, "mpng",4) == 0 ) - { - lav_fd->MJPG_chroma = CHROMA420; - lav_fd->interlacing = LAV_INTER_UNKNOWN; - return lav_fd; - } - - if( strncasecmp(video_comp, "svq1", 4 ) == 0 || - strncasecmp(video_comp, "svq3", 4 ) == 0 || - strncasecmp(video_comp, "rpza", 4 ) == 0 || - strncasecmp(video_comp, "cyuv", 4 ) == 0 ) - { - lav_fd->MJPG_chroma = CHROMA420; - lav_fd->interlacing = LAV_INTER_UNKNOWN; - return lav_fd; - } - - if (strncasecmp(video_comp,"mjpg", 4) == 0 || - strncasecmp(video_comp,"mjpa", 4) == 0 || - strncasecmp(video_comp,"jpeg", 4) == 0 || - strncasecmp(video_comp,"mjpb" ,4) == 0 || - strncasecmp(video_comp,"ljpg", 4) == 0 || - strncasecmp(video_comp,"sp5x", 4) == 0 || - strncasecmp(video_comp,"jpgl", 4) == 0 || - strncasecmp(video_comp,"jfif", 4 ) == 0 || - strncasecmp(video_comp,"dmb1", 4)==0 ) - { - lav_fd->MJPG_chroma = CHROMA420; - lav_fd->interlacing = LAV_INTER_UNKNOWN; - lav_fd->is_MJPG = 1; - if ( lav_set_video_position(lav_fd,0) < 0 ) goto ERREXIT; - lav_fd->MJPG_chroma = CHROMAUNKNOWN; + if( strncasecmp(video_comp, "png", 3 ) == 0 || + strncasecmp(video_comp, "mpng",4) == 0 ) + { + lav_fd->MJPG_chroma = CHROMA420; lav_fd->interlacing = LAV_INTER_UNKNOWN; - return lav_fd; - } - - ierr = ERROR_FORMAT; - veejay_msg(VEEJAY_MSG_ERROR, "Unrecognized format '%s'", video_comp); + return lav_fd; + } + + if( strncasecmp(video_comp, "svq1", 4 ) == 0 || + strncasecmp(video_comp, "svq3", 4 ) == 0 || + strncasecmp(video_comp, "rpza", 4 ) == 0 || + strncasecmp(video_comp, "cyuv", 4 ) == 0 ) + { + lav_fd->MJPG_chroma = CHROMA420; + lav_fd->interlacing = LAV_INTER_UNKNOWN; + return lav_fd; + } + + if (strncasecmp(video_comp,"mjpg", 4) == 0 || + strncasecmp(video_comp,"mjpa", 4) == 0 || + strncasecmp(video_comp,"jpeg", 4) == 0 || + strncasecmp(video_comp,"mjpb" ,4) == 0 || + strncasecmp(video_comp,"ljpg", 4) == 0 || + strncasecmp(video_comp,"sp5x", 4) == 0 || + strncasecmp(video_comp,"jpgl", 4) == 0 || + strncasecmp(video_comp,"jfif", 4 ) == 0 || + strncasecmp(video_comp,"dmb1", 4)==0 ) + { + lav_fd->MJPG_chroma = CHROMA420; + lav_fd->interlacing = LAV_INTER_UNKNOWN; + lav_fd->is_MJPG = 1; + if ( lav_set_video_position(lav_fd,0) < 0 ) goto ERREXIT; + lav_fd->MJPG_chroma = CHROMAUNKNOWN; + lav_fd->interlacing = LAV_INTER_UNKNOWN; + return lav_fd; + } + + ierr = ERROR_FORMAT; + veejay_msg(VEEJAY_MSG_ERROR, "Unrecognized format '%s'", video_comp); ERREXIT: lav_close(lav_fd); if(frame) free(frame); internal_error = ierr; - veejay_msg(VEEJAY_MSG_ERROR, "%s", lav_strerror()); + veejay_msg(VEEJAY_MSG_ERROR, "%s", lav_strerror()); return 0; } @@ -1356,20 +1359,20 @@ static int check_DV2_input(lav_file_t *lav_fd) switch (decoder->system) { case e_dv_system_525_60: if (dv_format_wide(decoder)) { - lav_fd->sar_w = 40; - lav_fd->sar_h = 33; + lav_fd->sar_w = 40; + lav_fd->sar_h = 33; } else { - lav_fd->sar_w = 10; - lav_fd->sar_h = 11; + lav_fd->sar_w = 10; + lav_fd->sar_h = 11; } break; case e_dv_system_625_50: if (dv_format_wide(decoder)) { - lav_fd->sar_w = 118; - lav_fd->sar_h = 81; + lav_fd->sar_w = 118; + lav_fd->sar_h = 81; } else { - lav_fd->sar_w = 59; - lav_fd->sar_h = 54; + lav_fd->sar_w = 59; + lav_fd->sar_h = 54; } break; default: @@ -1378,7 +1381,7 @@ static int check_DV2_input(lav_file_t *lav_fd) break; } veejay_msg(VEEJAY_MSG_DEBUG, "DV System %s (sar w %d sar h %d)", - (decoder->system == e_dv_system_525_60 ? "525-60" : ( decoder->system == e_dv_system_625_50 ? "625-50" : "unknown!")),lav_fd->sar_w,lav_fd->sar_h); + (decoder->system == e_dv_system_525_60 ? "525-60" : ( decoder->system == e_dv_system_625_50 ? "625-50" : "unknown!")),lav_fd->sar_w,lav_fd->sar_h); dv_decoder_free(decoder); } @@ -1405,16 +1408,16 @@ int lav_fileno(lav_file_t *lav_file) #ifdef HAVE_LIBQUICKTIME case 'q': case 'Q': - { + { #if ( LQT_CODEC_API_VERSION & 0xffff ) > 6 - res = lqt_fileno( (quicktime_t*) lav_file->qt_fd ); + res = lqt_fileno( (quicktime_t*) lav_file->qt_fd ); #else - quicktime_t *q = lav_file->qt_fd; - res = (int) fileno( (quicktime_t*) q->stream ); + quicktime_t *q = lav_file->qt_fd; + res = (int) fileno( (quicktime_t*) q->stream ); #endif - } - break; -#endif + } + break; +#endif default: res = AVI_fileno(lav_file->avi_fd); } diff --git a/veejay-current/veejay-server/libsample/sampleadm.c b/veejay-current/veejay-server/libsample/sampleadm.c index 3d8fc45a..1335517e 100644 --- a/veejay-current/veejay-server/libsample/sampleadm.c +++ b/veejay-current/veejay-server/libsample/sampleadm.c @@ -20,7 +20,7 @@ * * 05/03/2003: Added XML code from Jeff Carpenter ( jrc@dshome.net ) * 05/03/2003: Included more sample properties in Jeff's code - * Create is used to write the Sample to XML, Parse is used to load from XML + * Create is used to write the Sample to XML, Parse is used to load from XML */ @@ -70,13 +70,13 @@ #define VJ_VIDEO_EFFECT_MIN vj_effect_get_min_v() #define VJ_VIDEO_EFFECT_MAX vj_effect_get_max_v() -static int this_sample_id = 0; /* next available sample id */ -static int next_avail_num = 0; /* available sample id */ -static int initialized = 0; /* whether we are initialized or not */ -static hash_t *SampleHash; /* hash of sample information structs */ -static int avail_num[SAMPLE_MAX_SAMPLES]; /* an array of freed sample id's */ +static int this_sample_id = 0; /* next available sample id */ +static int next_avail_num = 0; /* available sample id */ +static int initialized = 0; /* whether we are initialized or not */ +static hash_t *SampleHash; /* hash of sample information structs */ +static int avail_num[SAMPLE_MAX_SAMPLES]; /* an array of freed sample id's */ static void *sample_font_ = NULL; -static int sampleadm_state = SAMPLE_PEEK; /* default state */ +static int sampleadm_state = SAMPLE_PEEK; /* default state */ static void *sample_cache[SAMPLE_MAX_SAMPLES]; static editlist *plain_editlist=NULL; @@ -88,7 +88,7 @@ extern int veejay_sprintf( char *s, size_t size, const char *format, ... ); unsigned int sample_size() { // return this_sample_id; - return (unsigned int) hash_count( SampleHash ); + return (unsigned int) hash_count( SampleHash ); } int sample_highest() @@ -98,14 +98,14 @@ int sample_highest() int sample_highest_valid_id() { - int id = this_sample_id; - while( !sample_exists( id ) ) { - id --; - if( id <= 0 ) - break; - } + int id = this_sample_id; + while( !sample_exists( id ) ) { + id --; + if( id <= 0 ) + break; + } - return id; + return id; } @@ -144,11 +144,11 @@ static hash_val_t int_hash(const void *key) static int int_compare(const void *key1, const void *key2) { #ifdef ARCH_X86_64 - return ((uint64_t) key1 < (uint64_t) key2 ? -1 : - ((uint64_t) key1 < (uint64_t) key2 ? + 1 : 0 )); + return ((uint64_t) key1 < (uint64_t) key2 ? -1 : + ((uint64_t) key1 < (uint64_t) key2 ? + 1 : 0 )); #else return ((uint32_t) key1 < (uint32_t) key2 ? -1 : - ((uint32_t) key1 > (uint32_t) key2 ? +1 : 0)); + ((uint32_t) key1 > (uint32_t) key2 ? +1 : 0)); #endif } @@ -163,74 +163,74 @@ static int int_compare(const void *key1, const void *key2) ****************************************************************************************************/ static char *sample_default_edl_name(int s1) { - char tmp_file[1024]; - snprintf(tmp_file,sizeof(tmp_file), "sample_%05d.edl", s1 ); - return strdup( tmp_file ); + char tmp_file[1024]; + snprintf(tmp_file,sizeof(tmp_file), "sample_%05d.edl", s1 ); + return strdup( tmp_file ); } static void sample_close_edl(int s1, editlist *el) { - /* check if another sample has same EDL */ - if( el != NULL ) { - int end = sample_highest_valid_id(); - int same = 0; - int i; + /* check if another sample has same EDL */ + if( el != NULL ) { + int end = sample_highest_valid_id(); + int same = 0; + int i; - if( el == plain_editlist ) { - same = 1; - } + if( el == plain_editlist ) { + same = 1; + } - if( same == 0 ) { - for (i = 1; i < end; i++) { - if (!sample_exists(i) || s1 == i) - continue; + if( same == 0 ) { + for (i = 1; i < end; i++) { + if (!sample_exists(i) || s1 == i) + continue; - sample_info *b = sample_get(i); - if( b->edit_list == el ) { - same = 1; - break; - } - } - } + sample_info *b = sample_get(i); + if( b->edit_list == el ) { + same = 1; + break; + } + } + } - if( same == 0 ) { - vj_el_free(el); - } - } + if( same == 0 ) { + vj_el_free(el); + } + } } /* Evil code for edl saving/restoring */ typedef struct { - int fmt; - int deinterlace; - int flags; - int force; - char norm; - int width; - int height; + int fmt; + int deinterlace; + int flags; + int force; + char norm; + int width; + int height; } sample_setting; static sample_setting __sample_project_settings; -void sample_set_project(int fmt, int deinterlace, int flags, int force, char norm, int w, int h ) +void sample_set_project(int fmt, int deinterlace, int flags, int force, char norm, int w, int h ) { - __sample_project_settings.fmt = fmt; - __sample_project_settings.deinterlace = deinterlace; - __sample_project_settings.flags = flags; - __sample_project_settings.force = force; - __sample_project_settings.norm = norm; - __sample_project_settings.width = w; - __sample_project_settings.height = h; + __sample_project_settings.fmt = fmt; + __sample_project_settings.deinterlace = deinterlace; + __sample_project_settings.flags = flags; + __sample_project_settings.force = force; + __sample_project_settings.norm = norm; + __sample_project_settings.width = w; + __sample_project_settings.height = h; } -void *sample_get_dict( int sample_id ) +void *sample_get_dict( int sample_id ) { #ifdef HAVE_FREETYPE - sample_info *si = sample_get(sample_id); - if(si) - return si->dict; + sample_info *si = sample_get(sample_id); + if(si) + return si->dict; #endif - return NULL; + return NULL; } /**************************************************************************************************** @@ -246,37 +246,37 @@ void *sample_get_dict( int sample_id ) int sample_init(int len, void *font, editlist *pedl) { if (!initialized) { - veejay_memset(avail_num, 0, sizeof(avail_num)); - this_sample_id = 1; /* do not start with zero */ - SampleHash = hash_create(HASHCOUNT_T_MAX, int_compare, int_hash); - if(!SampleHash) { - return 0; - } - initialized = 1; - veejay_memset( &__sample_project_settings,0,sizeof(sample_setting)); + veejay_memset(avail_num, 0, sizeof(avail_num)); + this_sample_id = 1; /* do not start with zero */ + SampleHash = hash_create(HASHCOUNT_T_MAX, int_compare, int_hash); + if(!SampleHash) { + return 0; + } + initialized = 1; + veejay_memset( &__sample_project_settings,0,sizeof(sample_setting)); } sample_font_ = font; - plain_editlist = pedl; + plain_editlist = pedl; - return 1; + return 1; } -void sample_free(void *edl) +void sample_free(void *edl) { - if(!SampleHash) - return; - - sample_del_all(edl); + if(!SampleHash) + return; + + sample_del_all(edl); - hash_destroy( SampleHash ); + hash_destroy( SampleHash ); } int sample_set_state(int new_state) { if (new_state == SAMPLE_LOAD || new_state == SAMPLE_RUN - || new_state == SAMPLE_PEEK) { - sampleadm_state = new_state; + || new_state == SAMPLE_PEEK) { + sampleadm_state = new_state; } return sampleadm_state; } @@ -289,24 +289,24 @@ int sample_get_state() static int _new_id() { /* perhaps we can reclaim a sample id */ - int n; - int id = 0; - for (n = 0; n <= next_avail_num; n++) - { - if (avail_num[n] != 0) - { - id = avail_num[n]; - avail_num[n] = 0; - break; - } - } - if( id == 0 ) - { - if(!this_sample_id) this_sample_id = 1; - id = this_sample_id; - this_sample_id ++; - } - return id; + int n; + int id = 0; + for (n = 0; n <= next_avail_num; n++) + { + if (avail_num[n] != 0) + { + id = avail_num[n]; + avail_num[n] = 0; + break; + } + } + if( id == 0 ) + { + if(!this_sample_id) this_sample_id = 1; + id = this_sample_id; + this_sample_id ++; + } + return id; } /**************************************************************************************************** @@ -324,7 +324,7 @@ sample_info *sample_skeleton_new(long startFrame, long endFrame) int i; if (!initialized) { - return NULL; + return NULL; } si = (sample_info *) vj_calloc(sizeof(sample_info)); @@ -332,20 +332,20 @@ sample_info *sample_skeleton_new(long startFrame, long endFrame) if(endFrame <= startFrame ) { - veejay_msg(VEEJAY_MSG_ERROR,"End frame %ld must be greater then start frame %ld", endFrame, startFrame); - return NULL; + veejay_msg(VEEJAY_MSG_ERROR,"End frame %ld must be greater then start frame %ld", endFrame, startFrame); + return NULL; } if (!si) { - return NULL; + return NULL; } si->sample_id = _new_id(); snprintf(si->descr,SAMPLE_MAX_DESCR_LEN, "Sample %4d", si->sample_id); si->first_frame = startFrame; si->last_frame = endFrame; - si->resume_pos = startFrame; - si->edit_list = NULL; // clone later + si->resume_pos = startFrame; + si->edit_list = NULL; // clone later si->soft_edl = 1; si->speed = 1; si->looptype = 1; // normal looping @@ -354,30 +354,30 @@ sample_info *sample_skeleton_new(long startFrame, long endFrame) si->marker_end = 0; si->loopcount = 0; si->effect_toggle = 1; - si->fade_method = 0; - si->fade_alpha = 0; - si->fade_entry = -1; - si->subrender = 1; + si->fade_method = 0; + si->fade_alpha = 0; + si->fade_entry = -1; + si->subrender = 1; 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 ); /* the effect chain is initially empty ! */ for (i = 0; i < SAMPLE_MAX_EFFECTS; i++) { - si->effect_chain[i] = &sec[i]; - if (si->effect_chain[i] == NULL) { - veejay_msg(VEEJAY_MSG_ERROR, "Error allocating entry %d in Effect Chain for new sample",i); - return NULL; - } - si->effect_chain[i]->effect_id = -1; - si->effect_chain[i]->volume = 50; - si->effect_chain[i]->channel = ( sample_highest_valid_id() <= 0 ? si->sample_id : sample_highest_valid_id()); + si->effect_chain[i] = &sec[i]; + if (si->effect_chain[i] == NULL) { + veejay_msg(VEEJAY_MSG_ERROR, "Error allocating entry %d in Effect Chain for new sample",i); + return NULL; + } + si->effect_chain[i]->effect_id = -1; + si->effect_chain[i]->volume = 50; + si->effect_chain[i]->channel = ( sample_highest_valid_id() <= 0 ? si->sample_id : sample_highest_valid_id()); } #ifdef HAVE_FREETYPE si->dict = vpn( VEVO_ANONYMOUS_PORT ); #endif - sample_cache[ si->sample_id ] = (void*) si; + sample_cache[ si->sample_id ] = (void*) si; return si; } @@ -388,37 +388,37 @@ int sample_store(sample_info * skel) { hnode_t *sample_node; if (!skel) - return -1; + return -1; sample_node = hnode_create(skel); if (!sample_node) - return -1; + return -1; if(skel->edit_list) - { - skel->play_length = vj_el_bogus_length( skel->edit_list, 0 ); - } + { + skel->play_length = vj_el_bogus_length( skel->edit_list, 0 ); + } #ifdef ARCH_X86_64 - uint64_t sid = (uint64_t) skel->sample_id; + uint64_t sid = (uint64_t) skel->sample_id; #else - uint32_t sid = (uint32_t) skel->sample_id; + uint32_t sid = (uint32_t) skel->sample_id; #endif if (!sample_exists(skel->sample_id)) { - hash_insert(SampleHash, sample_node, (const void*) sid); + hash_insert(SampleHash, sample_node, (const void*) sid); } else { - hnode_put(sample_node, (void *) sid); + hnode_put(sample_node, (void *) sid); } return 0; } -void sample_new_simple( void *el, long start, long end ) +void sample_new_simple( void *el, long start, long end ) { - sample_info *sample = sample_skeleton_new(start,end); - if(sample) { - sample->edit_list = el; - sample->soft_edl = 1; - sample_store(sample); - } + sample_info *sample = sample_skeleton_new(start,end); + if(sample) { + sample->edit_list = el; + sample->soft_edl = 1; + sample_store(sample); + } } /**************************************************************************************************** @@ -430,23 +430,23 @@ void sample_new_simple( void *el, long start, long end ) ****************************************************************************************************/ sample_info *sample_get(int sample_id) { - if( sample_id < 0 || sample_id > SAMPLE_MAX_SAMPLES) - return NULL; + if( sample_id < 0 || sample_id > SAMPLE_MAX_SAMPLES) + return NULL; #ifdef ARCH_X86_64 - uint64_t sid = (uint64_t) sample_id; + uint64_t sid = (uint64_t) sample_id; #else - uint32_t sid = (uint32_t) sample_id; + uint32_t sid = (uint32_t) sample_id; #endif - if( sample_cache[sample_id] == NULL ) { - - hnode_t *sample_node = hash_lookup(SampleHash, (const void *) sid); - if(!sample_node) - return NULL; - sample_cache[sample_id] = hnode_get(sample_node); - } + if( sample_cache[sample_id] == NULL ) { + + hnode_t *sample_node = hash_lookup(SampleHash, (const void *) sid); + if(!sample_node) + return NULL; + sample_cache[sample_id] = hnode_get(sample_node); + } - return (sample_info*) sample_cache[sample_id]; + return (sample_info*) sample_cache[sample_id]; } /**************************************************************************************************** @@ -459,22 +459,22 @@ sample_info *sample_get(int sample_id) int sample_exists(int sample_id) { - - hnode_t *sample_node; - if (!sample_id) return 0; + + hnode_t *sample_node; + if (!sample_id) return 0; #ifdef ARCH_X86_64 - uint64_t sid = (uint64_t) sample_id; + uint64_t sid = (uint64_t) sample_id; #else - uint32_t sid = (uint32_t) sample_id; + uint32_t sid = (uint32_t) sample_id; #endif - sample_node = hash_lookup(SampleHash, (void*) sid); - if (!sample_node) { - return 0; - } - - if(!sample_get(sample_id)) return 0; - return 1; + sample_node = hash_lookup(SampleHash, (void*) sid); + if (!sample_node) { + return 0; + } + + if(!sample_get(sample_id)) return 0; + return 1; } /* int sample_exists(int sample_id) @@ -486,45 +486,45 @@ int sample_exists(int sample_id) int sample_copy(int sample_id) { - int i; - sample_info *org, *copy; - if (!sample_exists(sample_id)) - return 0; - org = sample_get(sample_id); - copy = (sample_info*) vj_malloc(sizeof(sample_info)); - veejay_memcpy( copy,org,sizeof(sample_info));\ + int i; + sample_info *org, *copy; + if (!sample_exists(sample_id)) + return 0; + org = sample_get(sample_id); + copy = (sample_info*) vj_malloc(sizeof(sample_info)); + veejay_memcpy( copy,org,sizeof(sample_info));\ - sample_eff_chain *b = vj_malloc(sizeof(sample_eff_chain) * SAMPLE_MAX_EFFECTS ); + sample_eff_chain *b = vj_malloc(sizeof(sample_eff_chain) * SAMPLE_MAX_EFFECTS ); - for (i = 0; i < SAMPLE_MAX_EFFECTS; i++) - { -// copy->effect_chain[i] = -// (sample_eff_chain *) vj_malloc(sizeof(sample_eff_chain)); + for (i = 0; i < SAMPLE_MAX_EFFECTS; i++) + { +// copy->effect_chain[i] = +// (sample_eff_chain *) vj_malloc(sizeof(sample_eff_chain)); // - copy->effect_chain[i] = &b[i]; + copy->effect_chain[i] = &b[i]; - if (copy->effect_chain[i] == NULL) - { - veejay_msg(VEEJAY_MSG_ERROR, "Error allocating entry %d in Effect Chain for new sample",i); - return 0; - } - veejay_memcpy( copy->effect_chain[i], org->effect_chain[i], sizeof( sample_eff_chain ) ); - } + if (copy->effect_chain[i] == NULL) + { + veejay_msg(VEEJAY_MSG_ERROR, "Error allocating entry %d in Effect Chain for new sample",i); + return 0; + } + veejay_memcpy( copy->effect_chain[i], org->effect_chain[i], sizeof( sample_eff_chain ) ); + } - copy->sample_id = _new_id(); - snprintf(copy->descr,SAMPLE_MAX_DESCR_LEN, "Sample %4d", copy->sample_id); + copy->sample_id = _new_id(); + snprintf(copy->descr,SAMPLE_MAX_DESCR_LEN, "Sample %4d", copy->sample_id); - if(org->edit_list) - { - copy->edit_list = vj_el_clone( org->edit_list ); - copy->soft_edl = 1; - } + if(org->edit_list) + { + copy->edit_list = vj_el_clone( org->edit_list ); + copy->soft_edl = 1; + } - if (sample_store(copy) != 0) - return 0; + if (sample_store(copy) != 0) + return 0; - return copy->sample_id; + return copy->sample_id; } /**************************************************************************************************** @@ -536,108 +536,108 @@ int sample_copy(int sample_id) ****************************************************************************************************/ int sample_get_longest(int sample_id) { - sample_info *si = sample_get(sample_id); - if(si) - { - int len = (si->last_frame - - si->first_frame ); - int c = 0; - int tmp = 0; - int t=0; - int _id=0; - int speed = abs(si->speed); - if( speed == 0 ) { - veejay_msg(VEEJAY_MSG_WARNING, - "Starting paused sample %d at normal speed", - sample_id); - speed = 1; - } - int duration = len / speed; //how many frames are played of this sample + sample_info *si = sample_get(sample_id); + if(si) + { + int len = (si->last_frame - + si->first_frame ); + int c = 0; + int tmp = 0; + int t=0; + int _id=0; + int speed = abs(si->speed); + if( speed == 0 ) { + veejay_msg(VEEJAY_MSG_WARNING, + "Starting paused sample %d at normal speed", + sample_id); + speed = 1; + } + int duration = len / speed; //how many frames are played of this sample - if( si->looptype == 2) duration *= 2; // pingpong loop duration + if( si->looptype == 2) duration *= 2; // pingpong loop duration - if( sample_get_framedup(sample_id) > 0 ) - duration *= sample_get_framedup(sample_id); + if( sample_get_framedup(sample_id) > 0 ) + duration *= sample_get_framedup(sample_id); - for(c=0; c < SAMPLE_MAX_EFFECTS; c++) - { - _id = sample_get_chain_channel(sample_id,c); - t = sample_get_chain_source(sample_id,c); - + for(c=0; c < SAMPLE_MAX_EFFECTS; c++) + { + _id = sample_get_chain_channel(sample_id,c); + t = sample_get_chain_source(sample_id,c); + if(t==0 && sample_exists(_id)) - { - tmp = sample_get_endFrame( _id) - sample_get_startFrame(_id); - if(tmp>0) - { - tmp = tmp / sample_get_speed(_id); - if(tmp < 0) tmp *= -1; - if(sample_get_looptype(_id)==2) tmp *= 2; //pingpong loop underlying sample - } - if(tmp > duration) duration = tmp; //which one is longer ... - } - } - veejay_msg(VEEJAY_MSG_DEBUG, "Length of sample in video frames: %ld (slow=%d, loop=%d, speed=%d)",duration, - sample_get_framedup(sample_id), si->looptype, si->speed ); - + { + tmp = sample_get_endFrame( _id) - sample_get_startFrame(_id); + if(tmp>0) + { + tmp = tmp / sample_get_speed(_id); + if(tmp < 0) tmp *= -1; + if(sample_get_looptype(_id)==2) tmp *= 2; //pingpong loop underlying sample + } + if(tmp > duration) duration = tmp; //which one is longer ... + } + } + veejay_msg(VEEJAY_MSG_DEBUG, "Length of sample in video frames: %ld (slow=%d, loop=%d, speed=%d)",duration, + sample_get_framedup(sample_id), si->looptype, si->speed ); + - return duration; - } - return 0; + return duration; + } + return 0; } int sample_get_startFrame(int sample_id) { sample_info *si = sample_get(sample_id); if (si) { - if (si->marker_start >= 0 || si->marker_end > 0) - return si->marker_start; - else - return si->first_frame; - } + if (si->marker_start >= 0 || si->marker_end > 0) + return si->marker_start; + else + return si->first_frame; + } return -1; } -int sample_has_cali_fx(int sample_id) +int sample_has_cali_fx(int sample_id) { - sample_info *si = sample_get(sample_id); - if(si == NULL) - return -1; - int i; - for( i =0;i < SAMPLE_MAX_EFFECTS; i ++ ) { - if(si->effect_chain[i]->effect_id == 190) - return i; - } - return -1; + sample_info *si = sample_get(sample_id); + if(si == NULL) + return -1; + int i; + for( i =0;i < SAMPLE_MAX_EFFECTS; i ++ ) { + if(si->effect_chain[i]->effect_id == 190) + return i; + } + return -1; } -void sample_cali_prepare( int sample_id, int slot, int chan ) +void sample_cali_prepare( int sample_id, int slot, int chan ) { - sample_info *si = sample_get(sample_id); - if(si == NULL) - return; - vj_tag *tag = vj_tag_get( chan ); - if( tag == NULL || tag->source_type != VJ_TAG_TYPE_CALI ) - return; - int fx_id = vj_effect_real_to_sequence( - si->effect_chain[slot]->effect_id ); - if( fx_id >= 0 ) { - vj_tag_cali_prepare_now( chan, fx_id ); - veejay_msg(VEEJAY_MSG_DEBUG, "Prepared calibration data."); - } + sample_info *si = sample_get(sample_id); + if(si == NULL) + return; + vj_tag *tag = vj_tag_get( chan ); + if( tag == NULL || tag->source_type != VJ_TAG_TYPE_CALI ) + return; + int fx_id = vj_effect_real_to_sequence( + si->effect_chain[slot]->effect_id ); + if( fx_id >= 0 ) { + vj_tag_cali_prepare_now( chan, fx_id ); + veejay_msg(VEEJAY_MSG_DEBUG, "Prepared calibration data."); + } } -int sample_get_el_position( int sample_id, int *start, int *end ) +int sample_get_el_position( int sample_id, int *start, int *end ) { - sample_info *si = sample_get(sample_id); - if(si) - { - *start = si->first_frame; - *end = si->last_frame; - return 1; - } - return -1; + sample_info *si = sample_get(sample_id); + if(si) + { + *start = si->first_frame; + *end = si->last_frame; + return 1; + } + return -1; } @@ -646,17 +646,17 @@ int sample_get_el_position( int sample_id, int *start, int *end ) int sample_get_short_info(int sample_id, int *start, int *end, int *loop, int *speed) { sample_info *si = sample_get(sample_id); if(si) { - if(si->marker_start >= 0 && si->marker_end > 0) { - *start = si->marker_start; - *end = si->marker_end; - } + if(si->marker_start >= 0 && si->marker_end > 0) { + *start = si->marker_start; + *end = si->marker_end; + } else { - *start = si->first_frame; - *end = si->last_frame; - } + *start = si->first_frame; + *end = si->last_frame; + } *speed = si->speed; *loop = si->looptype; - return 0; + return 0; } return -1; @@ -666,16 +666,16 @@ int sample_entry_is_rendering(int s1, int position) { sample_info *sample; sample = sample_get(s1); if (!sample) - return -1; + return -1; if (position >= SAMPLE_MAX_EFFECTS || position < 0) - return -1; + return -1; return sample->effect_chain[position]->is_rendering; } int sample_entry_set_is_rendering(int s1, int position, int value) { sample_info *si = sample_get(s1); if (!si) - return -1; + return -1; if( position >= SAMPLE_MAX_EFFECTS || position < 0) return -1; si->effect_chain[position]->is_rendering = value; @@ -685,26 +685,26 @@ int sample_entry_set_is_rendering(int s1, int position, int value) { int sample_update_offset(int s1, int n_frame) { - int len; - sample_info *si = sample_get(s1); + int len; + sample_info *si = sample_get(s1); - if(!si) return -1; - si->offset = (n_frame - si->first_frame); - len = si->last_frame - si->first_frame; - if(si->offset < 0) - { - veejay_msg(VEEJAY_MSG_WARNING,"Sample bounces outside sample by %d frames", - si->offset); - si->offset = 0; - } - if(si->offset > len) - { - veejay_msg(VEEJAY_MSG_WARNING,"Sample bounces outside sample with %d frames", - si->offset); - si->offset = len; - } - return 1; -} + if(!si) return -1; + si->offset = (n_frame - si->first_frame); + len = si->last_frame - si->first_frame; + if(si->offset < 0) + { + veejay_msg(VEEJAY_MSG_WARNING,"Sample bounces outside sample by %d frames", + si->offset); + si->offset = 0; + } + if(si->offset > len) + { + veejay_msg(VEEJAY_MSG_WARNING,"Sample bounces outside sample with %d frames", + si->offset); + si->offset = len; + } + return 1; +} int sample_set_manual_fader( int s1, int value) { @@ -714,7 +714,7 @@ int sample_set_manual_fader( int s1, int value) si->fader_val = (float) value; si->fader_inc = 0.0; if(si->effect_toggle == 0) - si->effect_toggle = 1; + si->effect_toggle = 1; return 1; } @@ -726,9 +726,9 @@ int sample_set_fader_active( int s1, int nframes, int direction ) { si->fader_active = 1; if(direction<0) - si->fader_val = 255.0f; + si->fader_val = 255.0f; else - si->fader_val = 0.0f; + si->fader_val = 0.0f; si->fader_inc = (float) (255.0f / (float) nframes); si->fader_direction = direction; @@ -736,42 +736,42 @@ int sample_set_fader_active( int s1, int nframes, int direction ) { /* inconsistency check */ if(si->effect_toggle == 0) { - si->effect_toggle = 1; + si->effect_toggle = 1; } return 1; } int sample_get_fade_alpha(int s1) { - sample_info *si = sample_get(s1); - if(!si) return -1; - return si->fade_alpha; + sample_info *si = sample_get(s1); + if(!si) return -1; + return si->fade_alpha; } int sample_get_fade_entry(int s1) { - sample_info *si = sample_get(s1); - if(!si) return -1; - return si->fade_entry; + sample_info *si = sample_get(s1); + if(!si) return -1; + return si->fade_entry; } void sample_set_fade_entry(int s1, int entry) { - sample_info *si = sample_get(s1); - if(!si) return; - si->fade_entry = entry; + sample_info *si = sample_get(s1); + if(!si) return; + si->fade_entry = entry; } void sample_set_fade_method(int s1, int method) { - sample_info *si = sample_get(s1); - if(!si) return; - si->fade_method = method; + sample_info *si = sample_get(s1); + if(!si) return; + si->fade_method = method; } void sample_set_fade_alpha(int s1, int alpha) { - sample_info *si = sample_get(s1); - if(!si) return; - si->fade_alpha = alpha; + sample_info *si = sample_get(s1); + if(!si) return; + si->fade_alpha = alpha; } int sample_reset_fader(int s1) { @@ -783,15 +783,15 @@ int sample_reset_fader(int s1) { } int sample_get_fader_active(int s1) { - sample_info *si = sample_get(s1); - if(!si) return -1; - return (si->fader_active); + sample_info *si = sample_get(s1); + if(!si) return -1; + return (si->fader_active); } int sample_get_fade_method(int s1) { - sample_info *si = sample_get(s1); - if(!si) return -1; - return si->fade_method; + sample_info *si = sample_get(s1); + if(!si) return -1; + return si->fade_method; } float sample_get_fader_val(int s1) { @@ -810,7 +810,7 @@ int sample_get_fader_direction(int s1) { sample_info *si = sample_get(s1); if(!si) return -1; if(si->fader_active == 0) - return 0; // no direction + return 0; // no direction return si->fader_direction; } @@ -822,12 +822,12 @@ int sample_set_fader_val(int s1, float val) { } int sample_apply_fader_inc(int s1) { - sample_info *si = sample_get(s1); - if(!si) return -1; - si->fader_val += si->fader_inc; - if(si->fader_val > 255.0f ) si->fader_val = 255.0f; - if(si->fader_val < 0.0f ) si->fader_val = 0.0f; - return (int) si->fader_val; + sample_info *si = sample_get(s1); + if(!si) return -1; + si->fader_val += si->fader_inc; + if(si->fader_val > 255.0f ) si->fader_val = 255.0f; + if(si->fader_val < 0.0f ) si->fader_val = 0.0f; + return (int) si->fader_val; } int sample_set_fader_inc(int s1, float inc) { @@ -840,11 +840,11 @@ int sample_set_fader_inc(int s1, float inc) { int sample_marker_clear(int sample_id) { sample_info *si = sample_get(sample_id); if (!si) - return -1; + return -1; si->marker_start = 0; si->marker_end = 0; veejay_msg(VEEJAY_MSG_INFO, "Marker cleared (%d - %d) - (speed=%d)", - si->marker_start, si->marker_end, si->speed); + si->marker_start, si->marker_end, si->speed); return 1; } @@ -852,17 +852,17 @@ int sample_set_marker_start(int sample_id, int marker) { sample_info *si = sample_get(sample_id); if (!si) - return -1; - if(si->speed < 0 ) - { - int swap = si->marker_end; - si->marker_end = marker; - si->marker_start = swap; - } - else - { - si->marker_start = marker; - } + return -1; + if(si->speed < 0 ) + { + int swap = si->marker_end; + si->marker_end = marker; + si->marker_start = swap; + } + else + { + si->marker_start = marker; + } return 1; } @@ -872,16 +872,16 @@ int sample_set_marker(int sample_id, int start, int end) if(!si) return 0; if( start < si->first_frame ) - return 0; - if( start > si->last_frame ) - return 0; - if( end < si->first_frame ) - return 0; - if( end > si->last_frame ) - return 0; + return 0; + if( start > si->last_frame ) + return 0; + if( end < si->first_frame ) + return 0; + if( end > si->last_frame ) + return 0; - si->marker_start = start; - si->marker_end = end; + si->marker_start = start; + si->marker_end = end; return 1; } @@ -890,20 +890,20 @@ int sample_set_marker_end(int sample_id, int marker) { sample_info *si = sample_get(sample_id); if (!si) - return -1; + return -1; - if(si->speed < 0 ) - { - // mapping in reverse! - int swap = si->marker_start; - si->marker_start = marker; - si->marker_end = swap; - } - else - { - si->marker_end = marker; - } - + if(si->speed < 0 ) + { + // mapping in reverse! + int swap = si->marker_start; + si->marker_start = marker; + si->marker_end = swap; + } + else + { + si->marker_end = marker; + } + return 1; } @@ -911,11 +911,11 @@ int sample_set_description(int sample_id, char *description) { sample_info *si = sample_get(sample_id); if (!si) - return -1; + return -1; if (!description || strlen(description) <= 0) { - snprintf(si->descr, SAMPLE_MAX_DESCR_LEN, "Sample%04d", si->sample_id ); + snprintf(si->descr, SAMPLE_MAX_DESCR_LEN, "Sample%04d", si->sample_id ); } else { - snprintf(si->descr, SAMPLE_MAX_DESCR_LEN, "%s", description); + snprintf(si->descr, SAMPLE_MAX_DESCR_LEN, "%s", description); } return 1; } @@ -925,7 +925,7 @@ int sample_get_description(int sample_id, char *description) sample_info *si; si = sample_get(sample_id); if (!si) - return -1; + return -1; snprintf(description, SAMPLE_MAX_DESCR_LEN,"%s", si->descr); return 0; } @@ -941,11 +941,11 @@ int sample_get_endFrame(int sample_id) { sample_info *si = sample_get(sample_id); if (si) { - if (si->marker_end > 0 && si->marker_start >= 0) - return si->marker_end; - else { - return si->last_frame; - } + if (si->marker_end > 0 && si->marker_start >= 0) + return si->marker_end; + else { + return si->last_frame; + } } return -1; } @@ -958,47 +958,47 @@ int sample_get_endFrame(int sample_id) ****************************************************************************************************/ int sample_verify_delete( int sample_id, int sample_type ) { - int i,j; - int n = sample_highest(); + int i,j; + int n = sample_highest(); - for( i = 1; i <= n; i ++ ) - { - sample_info *s = sample_get(i); - - if(s) - { - for( j = 0 ; j < SAMPLE_MAX_EFFECTS; j ++ ) - { - if(s->effect_chain[j]->channel == sample_id && - s->effect_chain[j]->source_type == sample_type ) - { - s->effect_chain[j]->channel = i; - s->effect_chain[j]->source_type = 0; - } - } - } - } + for( i = 1; i <= n; i ++ ) + { + sample_info *s = sample_get(i); + + if(s) + { + for( j = 0 ; j < SAMPLE_MAX_EFFECTS; j ++ ) + { + if(s->effect_chain[j]->channel == sample_id && + s->effect_chain[j]->source_type == sample_type ) + { + s->effect_chain[j]->channel = i; + s->effect_chain[j]->source_type = 0; + } + } + } + } - n = vj_tag_highest(); - for( i = 1; i <= n; i ++ ) - { - vj_tag *s = vj_tag_get(i); - if(s) - { - for( j = 0 ; j < SAMPLE_MAX_EFFECTS; j ++ ) - { - if(s->effect_chain[j]->channel == sample_id && - s->effect_chain[j]->source_type == sample_type ) - { - s->effect_chain[j]->channel = i; - s->effect_chain[j]->source_type = 1; - } - } - } - } + n = vj_tag_highest(); + for( i = 1; i <= n; i ++ ) + { + vj_tag *s = vj_tag_get(i); + if(s) + { + for( j = 0 ; j < SAMPLE_MAX_EFFECTS; j ++ ) + { + if(s->effect_chain[j]->channel == sample_id && + s->effect_chain[j]->source_type == sample_type ) + { + s->effect_chain[j]->channel = i; + s->effect_chain[j]->source_type = 1; + } + } + } + } - return 1; + return 1; } int sample_del(int sample_id) @@ -1007,54 +1007,54 @@ int sample_del(int sample_id) sample_info *si; si = sample_get(sample_id); if (!si) - return 0; + return 0; #ifdef ARCH_X86_64 - uint64_t sid = (uint64_t) sample_id; + uint64_t sid = (uint64_t) sample_id; #else - uint32_t sid = (uint32_t) sample_id; + uint32_t sid = (uint32_t) sample_id; #endif sample_node = hash_lookup(SampleHash, (void *) sid); if (sample_node) { - int i; + int i; - sample_chain_free( sample_id,1 ); + sample_chain_free( sample_id,1 ); - if(si->soft_edl == 0 && si->edit_list != NULL) - vj_el_break_cache( si->edit_list ); //@ destroy cache, if any + if(si->soft_edl == 0 && si->edit_list != NULL) + vj_el_break_cache( si->edit_list ); //@ destroy cache, if any - for(i=0; i < SAMPLE_MAX_EFFECTS; i++) - { - if( si->effect_chain[i]->kf ) - vpf( si->effect_chain[i]->kf ); - } - if( si->effect_chain[0] ) - free(si->effect_chain[0]); + for(i=0; i < SAMPLE_MAX_EFFECTS; i++) + { + if( si->effect_chain[i]->kf ) + vpf( si->effect_chain[i]->kf ); + } + if( si->effect_chain[0] ) + free(si->effect_chain[0]); - if(si->encoder_destination ) - free(si->encoder_destination ); - - if(si->edit_list_file) - free( si->edit_list_file ); + if(si->encoder_destination ) + free(si->encoder_destination ); + + if(si->edit_list_file) + free( si->edit_list_file ); #ifdef HAVE_FREETYPE - if( si->dict ) - vj_font_dictionary_destroy( sample_font_,si->dict ); + if( si->dict ) + vj_font_dictionary_destroy( sample_font_,si->dict ); #endif - if(si->edit_list) { - /* check if another sample has same EDL */ - sample_close_edl( sample_id, si->edit_list ); - } + if(si->edit_list) { + /* check if another sample has same EDL */ + sample_close_edl( sample_id, si->edit_list ); + } - /* store freed sample_id */ - avail_num[next_avail_num] = sample_id; - next_avail_num++; - hash_delete_free(SampleHash, sample_node); + /* store freed sample_id */ + avail_num[next_avail_num] = sample_id; + next_avail_num++; + hash_delete_free(SampleHash, sample_node); - sample_cache[ sample_id ] = NULL; - - free(si); + sample_cache[ sample_id ] = NULL; + + free(si); - return 1; + return 1; } return 0; @@ -1066,25 +1066,25 @@ void sample_del_all(void *edl) int i; for (i = 1; i <= end; i++) { - if (!sample_exists(i)) - continue; - - sample_chain_clear(i); - sample_del(i); - } + if (!sample_exists(i)) + continue; + + sample_chain_clear(i); + sample_del(i); + } - veejay_memset( avail_num, 0, sizeof(avail_num) ); - next_avail_num = 0; - this_sample_id = 0; + veejay_memset( avail_num, 0, sizeof(avail_num) ); + next_avail_num = 0; + this_sample_id = 0; - hash_free_nodes( SampleHash ); + hash_free_nodes( SampleHash ); } sample_eff_chain **sample_get_effect_chain(int s1) { - sample_info *sample = sample_get(s1); - if(sample == NULL) - return NULL; - return sample->effect_chain; + sample_info *sample = sample_get(s1); + if(sample == NULL) + return NULL; + return sample->effect_chain; } /**************************************************************************************************** @@ -1099,34 +1099,34 @@ int sample_get_effect(int s1, int position) sample_info *sample = sample_get(s1); if(position >= SAMPLE_MAX_EFFECTS || position < 0 ) return -1; if(sample) { - if(sample->effect_chain[position]->e_flag==0) return -1; - return sample->effect_chain[position]->effect_id; + if(sample->effect_chain[position]->e_flag==0) return -1; + return sample->effect_chain[position]->effect_id; } return -1; } -void *sample_get_plugin( int s1, int position, void *ptr) +void *sample_get_plugin( int s1, int position, void *ptr) { - sample_info *sample = sample_get(s1); + sample_info *sample = sample_get(s1); if(position >= SAMPLE_MAX_EFFECTS || position < 0 ) return NULL; - if(sample) { + if(sample) { - if( ptr != NULL ) - sample->effect_chain[position]->fx_instance = ptr; - return sample->effect_chain[position]->fx_instance; + if( ptr != NULL ) + sample->effect_chain[position]->fx_instance = ptr; + return sample->effect_chain[position]->fx_instance; } return NULL; } int sample_get_effect_any(int s1, int position) { - sample_info *sample = sample_get(s1); - // if(position >= SAMPLE_MAX_EFFECTS || position < 0 ) return -1; - if(sample) { - return sample->effect_chain[position]->effect_id; - } - return -1; + sample_info *sample = sample_get(s1); + // if(position >= SAMPLE_MAX_EFFECTS || position < 0 ) return -1; + if(sample) { + return sample->effect_chain[position]->effect_id; + } + return -1; } int sample_get_chain_status(int s1, int position) @@ -1134,55 +1134,55 @@ int sample_get_chain_status(int s1, int position) sample_info *sample; sample = sample_get(s1); if (!sample) - return -1; + return -1; if (position >= SAMPLE_MAX_EFFECTS) - return -1; + return -1; return sample->effect_chain[position]->e_flag; } -int sample_get_first_mix_offset(int s1, int *parent, int look_for) +int sample_get_first_mix_offset(int s1, int *parent, int look_for) { - sample_info *sample = sample_get(s1); - if(!sample) - return 0; - int p = 0; - for( p = 0; p < SAMPLE_MAX_EFFECTS; p ++ ) { - if( sample->effect_chain[p]->source_type == 0 && look_for == sample->effect_chain[p]->channel) - { - return sample->effect_chain[p]->frame_offset; - } + sample_info *sample = sample_get(s1); + if(!sample) + return 0; + int p = 0; + for( p = 0; p < SAMPLE_MAX_EFFECTS; p ++ ) { + if( sample->effect_chain[p]->source_type == 0 && look_for == sample->effect_chain[p]->channel) + { + return sample->effect_chain[p]->frame_offset; + } - } - return 0; + } + return 0; } -int sample_set_resume(int s1,long position) +int sample_set_resume(int s1,long position) { - sample_info *sample = sample_get(s1); - if(!sample) - return -1; - sample->resume_pos = position; - return 1; + sample_info *sample = sample_get(s1); + if(!sample) + return -1; + sample->resume_pos = position; + return 1; } -long sample_get_resume(int s1) +long sample_get_resume(int s1) { - sample_info *sample = sample_get(s1); - if(!sample) - return -1; - if( sample->resume_pos < sample->first_frame ) - sample->resume_pos = sample->first_frame; - else if ( sample->resume_pos > sample->last_frame ) - sample->resume_pos = sample->last_frame; - - if( sample->marker_start >= 0 && sample->marker_end > 0 ) { - if( sample->resume_pos < sample->marker_start ) - sample->resume_pos = sample->marker_start; - else if ( sample->resume_pos > sample->marker_end ) - sample->resume_pos = sample->marker_end; - } - - return sample->resume_pos; + sample_info *sample = sample_get(s1); + if(!sample) + return -1; + if( sample->resume_pos < sample->first_frame ) + sample->resume_pos = sample->first_frame; + else if ( sample->resume_pos > sample->last_frame ) + sample->resume_pos = sample->last_frame; + + if( sample->marker_start >= 0 && sample->marker_end > 0 ) { + if( sample->resume_pos < sample->marker_start ) + sample->resume_pos = sample->marker_start; + else if ( sample->resume_pos > sample->marker_end ) + sample->resume_pos = sample->marker_end; + } + + return sample->resume_pos; } int sample_get_offset(int s1, int position) @@ -1190,9 +1190,9 @@ int sample_get_offset(int s1, int position) sample_info *sample; sample = sample_get(s1); if (!sample) - return -1; + return -1; if (position >= SAMPLE_MAX_EFFECTS) - return -1; + return -1; return sample->effect_chain[position]->frame_offset; } @@ -1202,9 +1202,9 @@ int sample_get_trimmer(int s1, int position) sample_info *sample; sample = sample_get(s1); if (!sample) - return -1; + return -1; if (position < 0 || position >= SAMPLE_MAX_EFFECTS) - return -1; + return -1; return sample->effect_chain[position]->frame_trimmer; } @@ -1213,9 +1213,9 @@ int sample_get_chain_volume(int s1, int position) sample_info *sample; sample = sample_get(s1); if (!sample) - return -1; + return -1; if (position >= SAMPLE_MAX_EFFECTS) - return -1; + return -1; return sample->effect_chain[position]->volume; } @@ -1241,7 +1241,7 @@ int sample_get_looptype(int s1) { sample_info *sample = sample_get(s1); if (sample) { - return sample->looptype; + return sample->looptype; } return 0; } @@ -1250,7 +1250,7 @@ int sample_get_playmode(int s1) { sample_info *sample = sample_get(s1); if (sample) { - return sample->playmode; + return sample->playmode; } return -1; } @@ -1272,17 +1272,17 @@ int sample_set_depth(int s1, int n) hnode_t *sample_node; if (n == 0 || n == 1) { - sample = sample_get(s1); - if (!sample) - return -1; - if (sample->depth == n) - return 1; - sample->depth = n; - sample_node = hnode_create(sample); - if (!sample_node) { - return -1; - } - return 1; + sample = sample_get(s1); + if (!sample) + return -1; + if (sample->depth == n) + return 1; + sample->depth = n; + sample_node = hnode_create(sample); + if (!sample_node) { + return -1; + } + return 1; } return -1; } @@ -1290,10 +1290,10 @@ int sample_set_chain_status(int s1, int position, int status) { sample_info *sample; if (position < 0 || position >= SAMPLE_MAX_EFFECTS) - return -1; + return -1; sample = sample_get(s1); if (!sample) - return -1; + return -1; sample->effect_chain[position]->e_flag = status; return 1; } @@ -1311,42 +1311,42 @@ int sample_get_speed(int s1) { sample_info *sample = sample_get(s1); if (sample) - return sample->speed; + return sample->speed; return 0; } int sample_get_framedup(int s1) { - sample_info *sample = sample_get(s1); - if(sample) return sample->dup; - return 0; + sample_info *sample = sample_get(s1); + if(sample) return sample->dup; + return 0; } int sample_get_framedups(int s1) { - sample_info *sample = sample_get(s1); - if(sample) return sample->dups; - return 0; + sample_info *sample = sample_get(s1); + if(sample) return sample->dups; + return 0; } int sample_get_effect_status(int s1) { - sample_info *sample = sample_get(s1); - if(sample) return sample->effect_toggle; - return 0; + sample_info *sample = sample_get(s1); + if(sample) return sample->effect_toggle; + return 0; } -int sample_var( int s1, int *type, int *fader, int *fx, int *rec, int *active, int *method, int *entry, int *alpha ) +int sample_var( int s1, int *type, int *fader, int *fx, int *rec, int *active, int *method, int *entry, int *alpha ) { - sample_info *si = sample_get(s1); - if(!si) return 0; - *type = 0; + sample_info *si = sample_get(s1); + if(!si) return 0; + *type = 0; *fader = si->fader_active; - *fx = si->effect_toggle; - *rec = si->encoder_active; - *active= 1; - *method = si->fade_method; - *entry = si->fade_entry; - *alpha = si->fade_alpha; - return 1; + *fx = si->effect_toggle; + *rec = si->encoder_active; + *active= 1; + *method = si->fade_method; + *entry = si->fade_entry; + *alpha = si->fade_alpha; + return 1; } /**************************************************************************************************** @@ -1361,21 +1361,21 @@ int sample_get_effect_arg(int s1, int position, int argnr) sample_info *sample; sample = sample_get(s1); if (!sample) - return -1; + return -1; if (position >= SAMPLE_MAX_EFFECTS) - return -1; + return -1; if (argnr < 0 || argnr > SAMPLE_MAX_PARAMETERS) - return -1; + return -1; return sample->effect_chain[position]->arg[argnr]; } int sample_get_selected_entry(int s1) { - sample_info *sample; - sample = sample_get(s1); - if(!sample) return -1; - return sample->selected_entry; -} + sample_info *sample; + sample = sample_get(s1); + if(!sample) return -1; + return sample->selected_entry; +} int sample_get_all_effect_arg(int s1, int position, int *args, int arg_len, int n_frame) { @@ -1383,37 +1383,37 @@ int sample_get_all_effect_arg(int s1, int position, int *args, int arg_len, int sample_info *sample; sample = sample_get(s1); if( arg_len == 0) - return 1; + return 1; if (!sample) - return -1; + return -1; if (position >= SAMPLE_MAX_EFFECTS) - return -1; + return -1; if (arg_len < 0 || arg_len > SAMPLE_MAX_PARAMETERS) - return -1; + return -1; if( sample->effect_chain[position]->kf ) { - for( i = 0; i < arg_len; i ++ ) - { - if( sample->effect_chain[position]->kf_status ) { - int tmp = 0; - if(!get_keyframe_value( sample->effect_chain[position]->kf, n_frame, i, &tmp ) ) { - args[i] = sample->effect_chain[position]->arg[i]; - } - else { - args[i] = tmp; - } - } - else { - args[i] = sample->effect_chain[position]->arg[i]; - } - } + for( i = 0; i < arg_len; i ++ ) + { + if( sample->effect_chain[position]->kf_status ) { + int tmp = 0; + if(!get_keyframe_value( sample->effect_chain[position]->kf, n_frame, i, &tmp ) ) { + args[i] = sample->effect_chain[position]->arg[i]; + } + else { + args[i] = tmp; + } + } + else { + args[i] = sample->effect_chain[position]->arg[i]; + } + } } else { - for (i = 0; i < arg_len; i++) { - args[i] = sample->effect_chain[position]->arg[i]; - } + for (i = 0; i < arg_len; i++) { + args[i] = sample->effect_chain[position]->arg[i]; + } } return i; } @@ -1428,14 +1428,14 @@ int sample_has_extra_frame(int s1, int position) sample_info *sample; sample = sample_get(s1); if (!sample) - return -1; + return -1; if (position >= SAMPLE_MAX_EFFECTS) - return -1; + return -1; if (sample->effect_chain[position]->effect_id == -1) - return -1; + return -1; if (vj_effect_get_extra_frame - (sample->effect_chain[position]->effect_id) == 1) - return 1; + (sample->effect_chain[position]->effect_id) == 1) + return 1; return -1; } @@ -1452,172 +1452,172 @@ int sample_set_effect_arg(int s1, int position, int argnr, int value) { sample_info *sample = sample_get(s1); if (!sample) - return -1; + return -1; if (position >= SAMPLE_MAX_EFFECTS) - return -1; + return -1; if (argnr < 0 || argnr > SAMPLE_MAX_PARAMETERS) - return -1; + return -1; sample->effect_chain[position]->arg[argnr] = value; return 1; } int sample_set_selected_entry(int s1, int position) { - sample_info *sample = sample_get(s1); - if(!sample) return -1; - if(position< 0 || position >= SAMPLE_MAX_EFFECTS) return -1; - sample->selected_entry = position; - return 1; + sample_info *sample = sample_get(s1); + if(!sample) return -1; + if(position< 0 || position >= SAMPLE_MAX_EFFECTS) return -1; + sample->selected_entry = position; + return 1; } int sample_set_effect_status(int s1, int status) { - sample_info *sample = sample_get(s1); - if(!sample) return -1; - if(status == 1 || status == 0 ) - { - sample->effect_toggle = status; - return 1; - } - return -1; + sample_info *sample = sample_get(s1); + if(!sample) return -1; + if(status == 1 || status == 0 ) + { + sample->effect_toggle = status; + return 1; + } + return -1; } int sample_set_chain_channel(int s1, int position, int input) { sample_info *sample = sample_get(s1); if (!sample) - return -1; + return -1; if (position < 0 || position >= SAMPLE_MAX_EFFECTS) - return -1; + return -1; //sample->effect_chain[position]->channel = input; int src_type = sample->effect_chain[position]->source_type; // now, reset cache and setup - if( src_type == 0) - { - if( sample->effect_chain[position]->channel != input && sample->effect_chain[position]->effect_id > 0) - { - sample_info *new = sample_get(input); - sample_info *old = sample_get( sample->effect_chain[position]->channel ); - if(old) - vj_el_break_cache( old->edit_list ); // no longer needed - - if(new) - vj_el_setup_cache( new->edit_list ); // setup new cache - - } - } - if( src_type == 1 && - vj_tag_get_active( sample->effect_chain[position]->channel ) && - vj_tag_get_type( sample->effect_chain[position]->channel ) == VJ_TAG_TYPE_NET ) { - vj_tag_disable( sample->effect_chain[position]->channel ); - } + if( src_type == 0) + { + if( sample->effect_chain[position]->channel != input && sample->effect_chain[position]->effect_id > 0) + { + sample_info *new = sample_get(input); + sample_info *old = sample_get( sample->effect_chain[position]->channel ); + if(old) + vj_el_break_cache( old->edit_list ); // no longer needed + + if(new) + vj_el_setup_cache( new->edit_list ); // setup new cache + + } + } + if( src_type == 1 && + vj_tag_get_active( sample->effect_chain[position]->channel ) && + vj_tag_get_type( sample->effect_chain[position]->channel ) == VJ_TAG_TYPE_NET ) { + vj_tag_disable( sample->effect_chain[position]->channel ); + } - sample->effect_chain[position]->channel = input; - sample->effect_chain[position]->clear = 1; + sample->effect_chain[position]->channel = input; + sample->effect_chain[position]->clear = 1; return 1; } -static int sample_sample_used(sample_info *a, int b ) +static int sample_sample_used(sample_info *a, int b ) { - int i; - for( i = 0; i < SAMPLE_MAX_EFFECTS; i ++ ) - { - int src_type = a->effect_chain[i]->source_type; - int id = a->effect_chain[i]->channel; - if( src_type == 0 && id == b ) - return 1; - } - return 0; + int i; + for( i = 0; i < SAMPLE_MAX_EFFECTS; i ++ ) + { + int src_type = a->effect_chain[i]->source_type; + int id = a->effect_chain[i]->channel; + if( src_type == 0 && id == b ) + return 1; + } + return 0; } -int sample_stop_playing(int s1, int new_s1) +int sample_stop_playing(int s1, int new_s1) { - sample_info *sample = sample_get(s1); - sample_info *newsample = NULL; - if( new_s1 ) - newsample = sample_get(new_s1); - if (!sample) - return 0; - if (new_s1 && !newsample) - return 0; - unsigned int i; - - //@ stop playing, if new_s1 + sample_info *sample = sample_get(s1); + sample_info *newsample = NULL; + if( new_s1 ) + newsample = sample_get(new_s1); + if (!sample) + return 0; + if (new_s1 && !newsample) + return 0; + unsigned int i; + + //@ stop playing, if new_s1 - if( new_s1 == s1 ) - return 1; + if( new_s1 == s1 ) + return 1; - int destroy_s1 = 1; + int destroy_s1 = 1; - if( new_s1 ) - { - for( i = 0; i < SAMPLE_MAX_EFFECTS ; i ++ ) - { - int src_type = newsample->effect_chain[i]->source_type; - int id = newsample->effect_chain[i]->channel; - if( src_type == 0 && id == s1 ) - destroy_s1 = 0; // no need to destroy cache, used by newsample - } - } + if( new_s1 ) + { + for( i = 0; i < SAMPLE_MAX_EFFECTS ; i ++ ) + { + int src_type = newsample->effect_chain[i]->source_type; + int id = newsample->effect_chain[i]->channel; + if( src_type == 0 && id == s1 ) + destroy_s1 = 0; // no need to destroy cache, used by newsample + } + } - if(destroy_s1) - vj_el_break_cache( sample->edit_list ); // break the cache + if(destroy_s1) + vj_el_break_cache( sample->edit_list ); // break the cache - - if( new_s1 ) - { - for( i = 0; i < SAMPLE_MAX_EFFECTS;i++ ) - { - int src_type = sample->effect_chain[i]->source_type; - int id = sample->effect_chain[i]->channel; - if( src_type == 0 && id > 0 ) - { - //@ if ID is not in newsample, - if( !sample_sample_used( newsample, id )) - { - sample_info *second = sample_get( id ); - if(second) //@ get and destroy its cache - vj_el_break_cache( second->edit_list ); - } - } - } - } + + if( new_s1 ) + { + for( i = 0; i < SAMPLE_MAX_EFFECTS;i++ ) + { + int src_type = sample->effect_chain[i]->source_type; + int id = sample->effect_chain[i]->channel; + if( src_type == 0 && id > 0 ) + { + //@ if ID is not in newsample, + if( !sample_sample_used( newsample, id )) + { + sample_info *second = sample_get( id ); + if(second) //@ get and destroy its cache + vj_el_break_cache( second->edit_list ); + } + } + } + } - return 1; + return 1; } -int sample_cache_used( int s1 ) +int sample_cache_used( int s1 ) { - return cache_avail_mb(); + return cache_avail_mb(); } -int sample_start_playing(int s1, int no_cache) +int sample_start_playing(int s1, int no_cache) { - sample_info *sample = sample_get(s1); - if (!sample) - return -1; - int i; + sample_info *sample = sample_get(s1); + if (!sample) + return -1; + int i; - if(!no_cache) - vj_el_setup_cache( sample->edit_list ); + if(!no_cache) + vj_el_setup_cache( sample->edit_list ); - for( i = 0; i < SAMPLE_MAX_EFFECTS; i ++ ) - { - int src_type = sample->effect_chain[i]->source_type; - int id = sample->effect_chain[i]->channel; - if( src_type == 0 && id > 0 && sample->effect_chain[i]->effect_id > 0 ) - { - sample_info *second = sample_get( id ); - if(second) - vj_el_setup_cache( second->edit_list ); - } - } + for( i = 0; i < SAMPLE_MAX_EFFECTS; i ++ ) + { + int src_type = sample->effect_chain[i]->source_type; + int id = sample->effect_chain[i]->channel; + if( src_type == 0 && id > 0 && sample->effect_chain[i]->effect_id > 0 ) + { + sample_info *second = sample_get( id ); + if(second) + vj_el_setup_cache( second->edit_list ); + } + } - return 1; + return 1; } int sample_set_chain_source(int s1, int position, int input) @@ -1625,40 +1625,42 @@ int sample_set_chain_source(int s1, int position, int input) sample_info *sample; sample = sample_get(s1); if (!sample) - return -1; + return -1; + if (position < 0 || position >= SAMPLE_MAX_EFFECTS) - return -1; + return -1; - if( sample->effect_chain[position]->source_type == 0 && - sample->effect_chain[position]->channel > 0 && - sample->effect_chain[position]->effect_id > 0 && - input != sample->effect_chain[position]->source_type ) - { - sample_info *second = sample_get( sample->effect_chain[position]->channel ); - if(second && second->edit_list) - vj_el_clear_cache( second->edit_list ); - } - if( sample->effect_chain[position]->source_type == 0 && - sample->effect_chain[position]->effect_id > 0 && - sample->effect_chain[position]->channel > 0 && - input != sample->effect_chain[position]->source_type) - { - sample_info *new = sample_get( input ); - if(new) - vj_el_setup_cache( new->edit_list ); - } + if( sample->effect_chain[position]->source_type == 0 && + sample->effect_chain[position]->channel > 0 && + sample->effect_chain[position]->effect_id > 0 && + input != sample->effect_chain[position]->source_type ) + { + sample_info *second = sample_get( sample->effect_chain[position]->channel ); + if(second && second->edit_list) + vj_el_clear_cache( second->edit_list ); + } - if( sample->effect_chain[position]->source_type == 1 && - vj_tag_get_active( sample->effect_chain[position]->channel ) && - vj_tag_get_type( sample->effect_chain[position]->channel ) == VJ_TAG_TYPE_NET && - input != 1) { - vj_tag_disable( sample->effect_chain[position]->channel ); - } + if( sample->effect_chain[position]->source_type == 0 && + sample->effect_chain[position]->effect_id > 0 && + sample->effect_chain[position]->channel > 0 && + input != sample->effect_chain[position]->source_type) + { + sample_info *new = sample_get( input ); + if(new) + vj_el_setup_cache( new->edit_list ); + } + + if( sample->effect_chain[position]->source_type == 1 && + vj_tag_get_active( sample->effect_chain[position]->channel ) && + vj_tag_get_type( sample->effect_chain[position]->channel ) == VJ_TAG_TYPE_NET && + input != 1) { + vj_tag_disable( sample->effect_chain[position]->channel ); + } sample->effect_chain[position]->source_type = input; - sample->effect_chain[position]->clear = 1; + sample->effect_chain[position]->clear = 1; - return 1; + return 1; } /**************************************************************************************************** @@ -1675,16 +1677,16 @@ void sample_loopcount(int s1) if (!sample) return; sample->loopcount ++; if(sample->loopcount > 1000000 ) - sample->loopcount = 0; + sample->loopcount = 0; } -int sample_get_loopcount(int s1) +int sample_get_loopcount(int s1) { sample_info *sample = sample_get(s1); if (!sample) return 0; return sample->loopcount; } -void sample_reset_loopcount(int s1) +void sample_reset_loopcount(int s1) { sample_info *sample = sample_get(s1); if (!sample) return; @@ -1695,39 +1697,39 @@ int sample_set_speed(int s1, int speed) { sample_info *sample = sample_get(s1); if (!sample) return -1; - int len = sample->last_frame - - sample->first_frame; + int len = sample->last_frame - + sample->first_frame; if( (speed < -(MAX_SPEED) ) || (speed > MAX_SPEED)) - return -1; + return -1; if( speed > len ) - return -1; + return -1; if( speed < -(len)) - return -1; + return -1; sample->speed = speed; return 1; } int sample_set_framedups(int s1, int n) { - sample_info *sample = sample_get(s1); - if(!sample) return -1; - sample->dups = n; - return 1; + sample_info *sample = sample_get(s1); + if(!sample) return -1; + sample->dups = n; + return 1; } int sample_set_framedup(int s1, int n) { - sample_info *sample = sample_get(s1); - if(!sample) return -1; - sample->dup = n; - sample->dups = 0; - return 1; + sample_info *sample = sample_get(s1); + if(!sample) return -1; + sample->dup = n; + sample->dups = 0; + return 1; } int sample_get_chain_channel(int s1, int position) { sample_info *sample = sample_get(s1); if (!sample) - return -1; + return -1; if (position < 0 || position >= SAMPLE_MAX_EFFECTS) - return -1; + return -1; return sample->effect_chain[position]->channel; } @@ -1735,9 +1737,9 @@ int sample_get_chain_source(int s1, int position) { sample_info *sample = sample_get(s1); if (!sample) - return -1; + return -1; if (position < 0 || position >= SAMPLE_MAX_EFFECTS) - return -1; + return -1; return sample->effect_chain[position]->source_type; } @@ -1745,8 +1747,8 @@ int sample_get_loops(int s1) { sample_info *sample = sample_get(s1); if (sample) { - return sample->max_loops; - } + return sample->max_loops; + } return -1; } int sample_get_loops2(int s1) @@ -1754,7 +1756,7 @@ int sample_get_loops2(int s1) sample_info *sample; sample = sample_get(s1); if (!sample) - return -1; + return -1; return sample->max_loops2; } @@ -1772,9 +1774,9 @@ int sample_set_looptype(int s1, int looptype) sample_info *sample = sample_get(s1); if(!sample) return -1; - if( looptype >= 0 && looptype < 5 ) { - sample->looptype = looptype; - return 1; + if( looptype >= 0 && looptype < 5 ) { + sample->looptype = looptype; + return 1; } return 0; } @@ -1783,7 +1785,7 @@ int sample_set_playmode(int s1, int playmode) { sample_info *sample = sample_get(s1); if (!sample) - return -1; + return -1; sample->playmode = playmode; return 1; @@ -1799,100 +1801,100 @@ int sample_set_startframe(int s1, long frame_num) { sample_info *sample = sample_get(s1); if (!sample) - return 0; + return 0; if( frame_num < 0 ) - return 0; + return 0; if(sample->play_length ) - return 1; //@ simpler to lie + return 1; //@ simpler to lie if(sample->edit_list) - if( frame_num > sample->edit_list->total_frames ) - frame_num = sample->edit_list->total_frames; + if( frame_num > sample->edit_list->total_frames ) + frame_num = sample->edit_list->total_frames; sample->first_frame = frame_num; if(sample->first_frame >= sample->last_frame ) - sample->first_frame = sample->last_frame-1; + sample->first_frame = sample->last_frame-1; - if( sample->resume_pos < frame_num ) - sample->resume_pos = frame_num; - + if( sample->resume_pos < frame_num ) + sample->resume_pos = frame_num; + return 1; } -int sample_usable_edl( int s1 ) +int sample_usable_edl( int s1 ) { - sample_info *sample = sample_get(s1); - if(!sample) return 0; - if( sample->play_length ) - return 0; - if( sample->edit_list ) - return 1; - return 0; + sample_info *sample = sample_get(s1); + if(!sample) return 0; + if( sample->play_length ) + return 0; + if( sample->edit_list ) + return 1; + return 0; } -int sample_max_video_length(int s1) +int sample_max_video_length(int s1) { - sample_info *sample = sample_get(s1); - float fps = 25.0; - if(!sample) return 0; - if(sample->edit_list) - fps = sample->edit_list->video_fps; + sample_info *sample = sample_get(s1); + float fps = 25.0; + if(!sample) return 0; + if(sample->edit_list) + fps = sample->edit_list->video_fps; - if( sample->play_length ) - return (60 * fps * 6); // 6 minutes - - if( sample->edit_list ) - return (int) sample->edit_list->total_frames; - return 0; + if( sample->play_length ) + return (60 * fps * 6); // 6 minutes + + if( sample->edit_list ) + return (int) sample->edit_list->total_frames; + return 0; } -int sample_video_length( int s1 ) +int sample_video_length( int s1 ) { - sample_info *sample = sample_get(s1); - if(!sample) return 0; - if( sample->play_length ) - return sample->play_length; - if( sample->edit_list ) - return sample->edit_list->total_frames; - return 0; + sample_info *sample = sample_get(s1); + if(!sample) return 0; + if( sample->play_length ) + return sample->play_length; + if( sample->edit_list ) + return sample->edit_list->total_frames; + return 0; } int sample_set_endframe(int s1, long frame_num) { sample_info *sample = sample_get(s1); if (!sample) - return 0; + return 0; if(frame_num < 0) - return 0; + return 0; if(sample->play_length) { - int new_len = ( frame_num - sample->first_frame ); - if( new_len <= 1 ) - new_len = 1; - sample->last_frame = sample->first_frame + new_len; + int new_len = ( frame_num - sample->first_frame ); + if( new_len <= 1 ) + new_len = 1; + sample->last_frame = sample->first_frame + new_len; - if( sample->resume_pos > frame_num ) - sample->resume_pos = frame_num; - - if( vj_el_set_bogus_length( sample->edit_list, 0, new_len ) ) - { - sample->play_length = new_len; - return 1; - } - return 0; + if( sample->resume_pos > frame_num ) + sample->resume_pos = frame_num; + + if( vj_el_set_bogus_length( sample->edit_list, 0, new_len ) ) + { + sample->play_length = new_len; + return 1; + } + return 0; } if(sample->edit_list) - if( frame_num > sample->edit_list->total_frames ) - frame_num = sample->edit_list->total_frames; + if( frame_num > sample->edit_list->total_frames ) + frame_num = sample->edit_list->total_frames; sample->last_frame = frame_num; - if( sample->resume_pos > frame_num ) - sample->resume_pos = frame_num; + if( sample->resume_pos > frame_num ) + sample->resume_pos = frame_num; return 1; } @@ -1901,14 +1903,14 @@ int sample_get_next(int s1) { sample_info *sample = sample_get(s1); if (!sample) - return -1; + return -1; return sample->next_sample_id; } int sample_set_loops(int s1, int nr_of_loops) { sample_info *sample = sample_get(s1); if (!sample) - return -1; + return -1; sample->max_loops = nr_of_loops; return 1; } @@ -1916,32 +1918,32 @@ int sample_set_loops2(int s1, int nr_of_loops) { sample_info *sample = sample_get(s1); if (!sample) - return -1; + return -1; sample->max_loops2 = nr_of_loops; return 1; } -int sample_get_subrender(int s1) +int sample_get_subrender(int s1) { - sample_info *sample = sample_get(s1); - if(!sample) - return 0; - return sample->subrender; + sample_info *sample = sample_get(s1); + if(!sample) + return 0; + return sample->subrender; } void sample_set_subrender(int s1, int status ) { - sample_info *sample = sample_get(s1); - if(sample) - sample->subrender = status; -} + sample_info *sample = sample_get(s1); + if(sample) + sample->subrender = status; +} int sample_get_sub_audio(int s1) { sample_info *sample; sample = sample_get(s1); if (!sample) - return -1; + return -1; return sample->sub_audio; } @@ -1950,7 +1952,7 @@ int sample_set_sub_audio(int s1, int audio) sample_info *sample = sample_get(s1); if(!sample) return -1; if (audio < 0 && audio > 1) - return -1; + return -1; sample->sub_audio = audio; return 1; } @@ -1959,20 +1961,20 @@ int sample_get_audio_volume(int s1) { sample_info *sample = sample_get(s1); if (sample) { - return sample->audio_volume; - } + return sample->audio_volume; + } return -1; } int sample_set_audio_volume(int s1, int volume) { sample_info *sample = sample_get(s1); - if(sample == NULL) - return -1; - if (volume < 0) - volume = 0; + if(sample == NULL) + return -1; + if (volume < 0) + volume = 0; if (volume > 100) - volume = 100; + volume = 100; sample->audio_volume = volume; return 1; } @@ -1982,7 +1984,7 @@ int sample_set_next(int s1, int next_sample_id) { sample_info *sample = sample_get(s1); if (!sample) - return -1; + return -1; /* just add, do not verify on module generation, next sample may not yet be created. checks in parameter set in libveejayvj.c @@ -2006,16 +2008,16 @@ int sample_chain_malloc(int s1) int e_id = 0; int sum =0; if (!sample) - return -1; + return -1; for(i=0; i < SAMPLE_MAX_EFFECTS; i++) { - e_id = sample->effect_chain[i]->effect_id; - if(e_id) - { - int res = 0; - sample->effect_chain[i]->fx_instance = vj_effect_activate(e_id, &res ); - if(res) sum++; - } + e_id = sample->effect_chain[i]->effect_id; + if(e_id) + { + int res = 0; + sample->effect_chain[i]->fx_instance = vj_effect_activate(e_id, &res ); + if(res) sum++; + } } // veejay_msg(VEEJAY_MSG_DEBUG, "Allocated %d effects",sum); return sum; @@ -2028,118 +2030,118 @@ int sample_chain_free(int s1, int global) int e_id = 0; int sum = 0; if (!sample) - return -1; - for(i=0; i < SAMPLE_MAX_EFFECTS; i++) - { - e_id = sample->effect_chain[i]->effect_id; - if(e_id!=-1) - { - if(vj_effect_initialized(e_id, sample->effect_chain[i]->fx_instance)) - { - vj_effect_deactivate(e_id, sample->effect_chain[i]->fx_instance, global); - sample->effect_chain[i]->fx_instance = NULL; - sample->effect_chain[i]->clear = 1; - sum++; - - if( sample->effect_chain[i]->source_type == 1 && - vj_tag_get_active( sample->effect_chain[i]->channel ) && - vj_tag_get_type( sample->effect_chain[i]->channel ) == VJ_TAG_TYPE_NET ) { - vj_tag_disable( sample->effect_chain[i]->channel ); - } - } - } - } + return -1; + for(i=0; i < SAMPLE_MAX_EFFECTS; i++) + { + e_id = sample->effect_chain[i]->effect_id; + if(e_id!=-1) + { + if(vj_effect_initialized(e_id, sample->effect_chain[i]->fx_instance)) + { + vj_effect_deactivate(e_id, sample->effect_chain[i]->fx_instance, global); + sample->effect_chain[i]->fx_instance = NULL; + sample->effect_chain[i]->clear = 1; + sum++; + + if( sample->effect_chain[i]->source_type == 1 && + vj_tag_get_active( sample->effect_chain[i]->channel ) && + vj_tag_get_type( sample->effect_chain[i]->channel ) == VJ_TAG_TYPE_NET ) { + vj_tag_disable( sample->effect_chain[i]->channel ); + } + } + } + } return sum; } -int sample_chain_reset_kf( int s1, int entry ) +int sample_chain_reset_kf( int s1, int entry ) { - sample_info *sample = sample_get(s1); + sample_info *sample = sample_get(s1); if(!sample) return 0; - sample->effect_chain[entry]->kf_status = 0; - sample->effect_chain[entry]->kf_type = 0; - if(sample->effect_chain[entry]->kf) - vpf(sample->effect_chain[entry]->kf ); - sample->effect_chain[entry]->kf = NULL; - return 1; + sample->effect_chain[entry]->kf_status = 0; + sample->effect_chain[entry]->kf_type = 0; + if(sample->effect_chain[entry]->kf) + vpf(sample->effect_chain[entry]->kf ); + sample->effect_chain[entry]->kf = NULL; + return 1; } /* -int sample_get_kf_tokens( int s1, int entry, int id, int *start, int *end, int *type ) +int sample_get_kf_tokens( int s1, int entry, int id, int *start, int *end, int *type ) { - sample_info *sample = sample_get(s1); - if(!sample) return 0; - if( sample->effect_chain[entry]->kf == NULL ) - return 0; - return keyframe_get_tokens( sample->effect_chain[entry]->kf, id, start,end,type ); + sample_info *sample = sample_get(s1); + if(!sample) return 0; + if( sample->effect_chain[entry]->kf == NULL ) + return 0; + return keyframe_get_tokens( sample->effect_chain[entry]->kf, id, start,end,type ); } */ -void *sample_get_kf_port( int s1, int entry ) +void *sample_get_kf_port( int s1, int entry ) { - sample_info *sample = sample_get(s1); + sample_info *sample = sample_get(s1); if(!sample) return NULL; - return sample->effect_chain[entry]->kf; + return sample->effect_chain[entry]->kf; } -int sample_get_kf_status( int s1, int entry, int *type ) +int sample_get_kf_status( int s1, int entry, int *type ) { sample_info *sample = sample_get(s1); if(!sample) return 0; - if(type != NULL) - *type = sample->effect_chain[entry]->kf_type; + if(type != NULL) + *type = sample->effect_chain[entry]->kf_type; - return sample->effect_chain[entry]->kf_status; + return sample->effect_chain[entry]->kf_status; } -void sample_set_kf_type(int s1, int entry, int type ) +void sample_set_kf_type(int s1, int entry, int type ) { sample_info *sample = sample_get(s1); if(!sample) return; - sample->effect_chain[entry]->kf_type = type; + sample->effect_chain[entry]->kf_type = type; } -int sample_chain_set_kf_status( int s1, int entry, int status ) +int sample_chain_set_kf_status( int s1, int entry, int status ) { sample_info *sample = sample_get(s1); if (!sample) - return -1; + return -1; sample->effect_chain[entry]->kf_status = status; - return 1; + return 1; } -unsigned char * sample_chain_get_kfs( int s1, int entry, int parameter_id, int *len ) +unsigned char * sample_chain_get_kfs( int s1, int entry, int parameter_id, int *len ) { sample_info *sample = sample_get(s1); if (!sample) - return NULL; + return NULL; if ( entry < 0 || entry > SAMPLE_MAX_EFFECTS ) return NULL; if( parameter_id < 0 || parameter_id > 9 ) - return NULL; + return NULL; if( sample->effect_chain[entry]->kf == NULL ) - return NULL; + return NULL; unsigned char *data = keyframe_pack( sample->effect_chain[entry]->kf, parameter_id, entry,len ); if( data ) - return data; + return data; return NULL; } -int sample_chain_set_kfs( int s1, int len, char *data ) +int sample_chain_set_kfs( int s1, int len, char *data ) { sample_info *sample = sample_get(s1); if (!sample) - return -1; + return -1; if( len <= 0 ) - return 0; + return 0; int entry = 0; if(!keyframe_unpack( (unsigned char*) data, len, &entry,s1,1 )) { - veejay_msg(0, "Unable to unpack keyframe packet"); - return -1; + veejay_msg(0, "Unable to unpack keyframe packet"); + return -1; } return 1; } @@ -2148,130 +2150,130 @@ int sample_chain_add(int s1, int c, int effect_nr) int effect_params = 0, i; sample_info *sample = sample_get(s1); if (!sample) - return 0; + return 0; if (c < 0 || c >= SAMPLE_MAX_EFFECTS) - return 0; + return 0; - if( vj_effect_single_instance( effect_nr )) - return 0; + if( vj_effect_single_instance( effect_nr )) + return 0; if( sample->effect_chain[c]->effect_id != -1 && sample->effect_chain[c]->effect_id != effect_nr ) { - //verify if the effect should be discarded - if(vj_effect_initialized( sample->effect_chain[c]->effect_id, sample->effect_chain[c]->fx_instance ) ) - { - if(!vj_effect_is_plugin( sample->effect_chain[c]->effect_id ) ) { - int frm = 1; - - for( i = 0; i < SAMPLE_MAX_EFFECTS ; i ++ ) { - if( i == c ) - continue; - if( sample->effect_chain[i]->effect_id == effect_nr ) - frm = 0; - } - - if( frm == 1 ) { - vj_effect_deactivate( sample->effect_chain[c]->effect_id, sample->effect_chain[c]->fx_instance,1 ); - sample->effect_chain[c]->fx_instance = NULL; - sample->effect_chain[c]->clear = 1; - } - } else { - vj_effect_deactivate( sample->effect_chain[c]->effect_id, sample->effect_chain[c]->fx_instance,1 ); - sample->effect_chain[c]->fx_instance = NULL; - sample->effect_chain[c]->clear = 1; - } - } + //verify if the effect should be discarded + if(vj_effect_initialized( sample->effect_chain[c]->effect_id, sample->effect_chain[c]->fx_instance ) ) + { + if(!vj_effect_is_plugin( sample->effect_chain[c]->effect_id ) ) { + int frm = 1; + + for( i = 0; i < SAMPLE_MAX_EFFECTS ; i ++ ) { + if( i == c ) + continue; + if( sample->effect_chain[i]->effect_id == effect_nr ) + frm = 0; + } + + if( frm == 1 ) { + vj_effect_deactivate( sample->effect_chain[c]->effect_id, sample->effect_chain[c]->fx_instance,1 ); + sample->effect_chain[c]->fx_instance = NULL; + sample->effect_chain[c]->clear = 1; + } + } else { + vj_effect_deactivate( sample->effect_chain[c]->effect_id, sample->effect_chain[c]->fx_instance,1 ); + sample->effect_chain[c]->fx_instance = NULL; + sample->effect_chain[c]->clear = 1; + } + } } if(!vj_effect_initialized(effect_nr, sample->effect_chain[c]->fx_instance) ) { - int res = 0; - sample->effect_chain[c]->fx_instance = vj_effect_activate( effect_nr, &res ); - if(!res) - { - veejay_msg(VEEJAY_MSG_ERROR, "Cannot activate %d", effect_nr); - //@ clear - sample->effect_chain[c]->effect_id = -1; - sample->effect_chain[c]->e_flag = 1; - for( i = 0; i < SAMPLE_MAX_PARAMETERS; i ++ ) - sample->effect_chain[c]->arg[i] = 0; - - sample->effect_chain[c]->frame_trimmer = 0; - if( c == sample->fade_entry ) - sample->fade_entry = -1; - return 0; - } + int res = 0; + sample->effect_chain[c]->fx_instance = vj_effect_activate( effect_nr, &res ); + if(!res) + { + veejay_msg(VEEJAY_MSG_ERROR, "Cannot activate %d", effect_nr); + //@ clear + sample->effect_chain[c]->effect_id = -1; + sample->effect_chain[c]->e_flag = 1; + for( i = 0; i < SAMPLE_MAX_PARAMETERS; i ++ ) + sample->effect_chain[c]->arg[i] = 0; + + sample->effect_chain[c]->frame_trimmer = 0; + if( c == sample->fade_entry ) + sample->fade_entry = -1; + return 0; + } } effect_params = vj_effect_get_num_params(effect_nr); - if( sample->effect_chain[c]->effect_id != effect_nr ) { - if( effect_params > 0 ) { - /* there are parameters, set default values */ - for (i = 0; i < effect_params; i++) - { - int val = vj_effect_get_default(effect_nr, i); - sample->effect_chain[c]->arg[i] = val; - } - } - /* effect enabled standard */ - sample->effect_chain[c]->e_flag = 1; - //clear fx anim - sample->effect_chain[c]->kf_status = 0; - sample->effect_chain[c]->kf_type = 0; - if(sample->effect_chain[c]->kf) - vpf(sample->effect_chain[c]->kf ); - sample->effect_chain[c]->kf = NULL; + if( sample->effect_chain[c]->effect_id != effect_nr ) { + if( effect_params > 0 ) { + /* there are parameters, set default values */ + for (i = 0; i < effect_params; i++) + { + int val = vj_effect_get_default(effect_nr, i); + sample->effect_chain[c]->arg[i] = val; + } + } + /* effect enabled standard */ + sample->effect_chain[c]->e_flag = 1; + //clear fx anim + sample->effect_chain[c]->kf_status = 0; + sample->effect_chain[c]->kf_type = 0; + if(sample->effect_chain[c]->kf) + vpf(sample->effect_chain[c]->kf ); + sample->effect_chain[c]->kf = NULL; } sample->effect_chain[c]->effect_id = effect_nr; if (vj_effect_get_extra_frame(effect_nr)) { - //sample->effect_chain[c]->frame_offset = 0; - sample->effect_chain[c]->frame_trimmer = 0; + //sample->effect_chain[c]->frame_offset = 0; + sample->effect_chain[c]->frame_trimmer = 0; - if(s1 > 1) - s1 = s1 - 1; - if(!sample_exists(s1)) s1 = s1 + 1; + if(s1 > 1) + s1 = s1 - 1; + if(!sample_exists(s1)) s1 = s1 + 1; - if(sample->effect_chain[c]->channel <= 0) - sample->effect_chain[c]->channel = sample_highest_valid_id(); // follow newest - if(sample->effect_chain[c]->source_type < 0) - sample->effect_chain[c]->source_type = 0; + if(sample->effect_chain[c]->channel <= 0) + sample->effect_chain[c]->channel = sample_highest_valid_id(); // follow newest + if(sample->effect_chain[c]->source_type < 0) + sample->effect_chain[c]->source_type = 0; veejay_msg(VEEJAY_MSG_DEBUG,"Effect %s on entry %d overlaying with sample %d", - vj_effect_get_description(sample->effect_chain[c]->effect_id),c,sample->effect_chain[c]->channel); + vj_effect_get_description(sample->effect_chain[c]->effect_id),c,sample->effect_chain[c]->channel); - } - else - { - if( c == sample->fade_entry ) { - if( sample->fade_method == 4 ) - sample->fade_method = 2; /* auto switch */ - else if (sample->fade_method == 3 ) - sample->fade_method = 1; - } - } - return 1; /* return position on which it was added */ + } + else + { + if( c == sample->fade_entry ) { + if( sample->fade_method == 4 ) + sample->fade_method = 2; /* auto switch */ + else if (sample->fade_method == 3 ) + sample->fade_method = 1; + } + } + return 1; /* return position on which it was added */ } int sample_reset_offset(int s1) { - sample_info *sample = sample_get(s1); - int i; - if(!sample) return -1; - for(i=0; i < SAMPLE_MAX_EFFECTS; i++) - { - sample->effect_chain[i]->frame_offset = 0; - } - return 1; + sample_info *sample = sample_get(s1); + int i; + if(!sample) return -1; + for(i=0; i < SAMPLE_MAX_EFFECTS; i++) + { + sample->effect_chain[i]->frame_offset = 0; + } + return 1; } int sample_set_offset(int s1, int chain_entry, int frame_offset) { sample_info *sample = sample_get(s1); if (!sample) - return -1; + return -1; /* set to zero if frame_offset is greater than sample length */ //if(frame_offset > (sample->last_frame - sample->first_frame)) frame_offset=0; sample->effect_chain[chain_entry]->frame_offset = frame_offset; @@ -2282,12 +2284,12 @@ int sample_set_trimmer(int s1, int chain_entry, int trimmer) { sample_info *sample = sample_get(s1); if (!sample) - return -1; + return -1; /* set to zero if frame_offset is greater than sample length */ if (chain_entry < 0 || chain_entry >= SAMPLE_MAX_PARAMETERS) - return -1; + return -1; if (trimmer > (sample->last_frame - sample->first_frame)) - trimmer = 0; + trimmer = 0; if (trimmer < 0 ) trimmer = 0; sample->effect_chain[chain_entry]->frame_trimmer = trimmer; @@ -2297,9 +2299,9 @@ int sample_set_chain_audio(int s1, int chain_entry, int val) { sample_info *sample = sample_get(s1); if (!sample) - return -1; + return -1; if (chain_entry < 0 || chain_entry >= SAMPLE_MAX_PARAMETERS) - return -1; + return -1; sample->effect_chain[chain_entry]->a_flag = val; return 1; } @@ -2308,12 +2310,12 @@ int sample_set_chain_volume(int s1, int chain_entry, int volume) { sample_info *sample = sample_get(s1); if (!sample) - return -1; + return -1; /* set to zero if frame_offset is greater than sample length */ if (volume < 0) - volume = 100; + volume = 100; if (volume > 100) - volume = 0; + volume = 0; sample->effect_chain[chain_entry]->volume = volume; return 1; } @@ -2335,52 +2337,52 @@ int sample_chain_clear(int s1) sample_info *sample = sample_get(s1); if (!sample) - return -1; + return -1; for (i = 0; i < SAMPLE_MAX_EFFECTS; i++) - { - if(sample->effect_chain[i]->effect_id != -1) - { - if(vj_effect_initialized( sample->effect_chain[i]->effect_id, sample->effect_chain[i]->fx_instance )) { - vj_effect_deactivate( sample->effect_chain[i]->effect_id, sample->effect_chain[i]->fx_instance,1 ); - sample->effect_chain[i]->fx_instance = NULL; - sample->effect_chain[i]->clear = 1; - } - - } + { + if(sample->effect_chain[i]->effect_id != -1) + { + if(vj_effect_initialized( sample->effect_chain[i]->effect_id, sample->effect_chain[i]->fx_instance )) { + vj_effect_deactivate( sample->effect_chain[i]->effect_id, sample->effect_chain[i]->fx_instance,1 ); + sample->effect_chain[i]->fx_instance = NULL; + sample->effect_chain[i]->clear = 1; + } + + } - sample->effect_chain[i]->effect_id = -1; - sample->effect_chain[i]->frame_offset = 0; - sample->effect_chain[i]->frame_trimmer = 0; - sample->effect_chain[i]->volume = 0; - sample->effect_chain[i]->a_flag = 0; - if( sample->effect_chain[i]->kf ) - vpf( sample->effect_chain[i]->kf ); - sample->effect_chain[i]->kf = NULL; - - int src_type = sample->effect_chain[i]->source_type; - int id = sample->effect_chain[i]->channel; - if( src_type == 0 && id > 0 ) - { - sample_info *old = sample_get( id ); - if(old && old->edit_list) - { - vj_el_clear_cache(old->edit_list); - } - } - if( sample->effect_chain[i]->source_type == 1 && - vj_tag_get_active( sample->effect_chain[i]->channel ) && - vj_tag_get_type( sample->effect_chain[i]->channel ) == VJ_TAG_TYPE_NET ) { - vj_tag_disable( sample->effect_chain[i]->channel ); - } + sample->effect_chain[i]->effect_id = -1; + sample->effect_chain[i]->frame_offset = 0; + sample->effect_chain[i]->frame_trimmer = 0; + sample->effect_chain[i]->volume = 0; + sample->effect_chain[i]->a_flag = 0; + if( sample->effect_chain[i]->kf ) + vpf( sample->effect_chain[i]->kf ); + sample->effect_chain[i]->kf = NULL; + + int src_type = sample->effect_chain[i]->source_type; + int id = sample->effect_chain[i]->channel; + if( src_type == 0 && id > 0 ) + { + sample_info *old = sample_get( id ); + if(old && old->edit_list) + { + vj_el_clear_cache(old->edit_list); + } + } + if( sample->effect_chain[i]->source_type == 1 && + vj_tag_get_active( sample->effect_chain[i]->channel ) && + vj_tag_get_type( sample->effect_chain[i]->channel ) == VJ_TAG_TYPE_NET ) { + vj_tag_disable( sample->effect_chain[i]->channel ); + } - sample->effect_chain[i]->source_type = 0; - sample->effect_chain[i]->channel = s1; - for (j = 0; j < SAMPLE_MAX_PARAMETERS; j++) - sample->effect_chain[i]->arg[j] = 0; - } + sample->effect_chain[i]->source_type = 0; + sample->effect_chain[i]->channel = s1; + for (j = 0; j < SAMPLE_MAX_PARAMETERS; j++) + sample->effect_chain[i]->arg[j] = 0; + } - sample->fade_entry = -1; + sample->fade_entry = -1; return 1; } @@ -2400,11 +2402,11 @@ int sample_chain_size(int s1) sample_info *sample; sample = sample_get(s1); if (!sample) - return -1; + return -1; e = 0; for (i = 0; i < SAMPLE_MAX_EFFECTS; i++) - if (sample->effect_chain[i]->effect_id != -1) - e++; + if (sample->effect_chain[i]->effect_id != -1) + e++; return e; } @@ -2421,10 +2423,10 @@ int sample_chain_get_free_entry(int s1) sample_info *sample; sample = sample_get(s1); if (!sample) - return -1; + return -1; for (i = 0; i < SAMPLE_MAX_EFFECTS; i++) - if (sample->effect_chain[i]->effect_id == -1) - return i; + if (sample->effect_chain[i]->effect_id == -1) + return i; return -1; } @@ -2440,17 +2442,17 @@ int sample_chain_get_free_entry(int s1) static int _sample_can_free(sample_info *sample, int reserved, int effect_id) { - int i; + int i; - if( vj_effect_is_plugin(effect_id ) ) - return 1; + if( vj_effect_is_plugin(effect_id ) ) + return 1; - for(i=0; i < SAMPLE_MAX_EFFECTS; i++) - { - if(i != reserved && effect_id == sample->effect_chain[i]->effect_id) - return 0; - } - return 1; + for(i=0; i < SAMPLE_MAX_EFFECTS; i++) + { + if(i != reserved && effect_id == sample->effect_chain[i]->effect_id) + return 0; + } + return 1; } @@ -2460,16 +2462,16 @@ int sample_chain_remove(int s1, int position) sample_info *sample; sample = sample_get(s1); if (!sample) - return -1; + return -1; if (position < 0 || position >= SAMPLE_MAX_EFFECTS) - return -1; + return -1; if(sample->effect_chain[position]->effect_id != -1) { - if(vj_effect_initialized( sample->effect_chain[position]->effect_id, sample->effect_chain[position]->fx_instance ) && _sample_can_free( sample, position, sample->effect_chain[position]->effect_id) ) { - vj_effect_deactivate( sample->effect_chain[position]->effect_id, sample->effect_chain[position]->fx_instance, 1); - sample->effect_chain[position]->fx_instance = NULL; - sample->effect_chain[position]->clear = 1; - } + if(vj_effect_initialized( sample->effect_chain[position]->effect_id, sample->effect_chain[position]->fx_instance ) && _sample_can_free( sample, position, sample->effect_chain[position]->effect_id) ) { + vj_effect_deactivate( sample->effect_chain[position]->effect_id, sample->effect_chain[position]->fx_instance, 1); + sample->effect_chain[position]->fx_instance = NULL; + sample->effect_chain[position]->clear = 1; + } } sample->effect_chain[position]->effect_id = -1; sample->effect_chain[position]->frame_offset = 0; @@ -2477,32 +2479,32 @@ int sample_chain_remove(int s1, int position) sample->effect_chain[position]->volume = 0; sample->effect_chain[position]->a_flag = 0; - if( sample->effect_chain[position]->kf ) - vpf( sample->effect_chain[position]->kf ); - sample->effect_chain[position]->kf = NULL; + if( sample->effect_chain[position]->kf ) + vpf( sample->effect_chain[position]->kf ); + sample->effect_chain[position]->kf = NULL; - int src_type = sample->effect_chain[position]->source_type; - int id = sample->effect_chain[position]->channel; - if( src_type == 0 && id > 0 ) - { - sample_info *old = sample_get( id ); - if(old) - vj_el_clear_cache(old->edit_list); - } + int src_type = sample->effect_chain[position]->source_type; + int id = sample->effect_chain[position]->channel; + if( src_type == 0 && id > 0 ) + { + sample_info *old = sample_get( id ); + if(old) + vj_el_clear_cache(old->edit_list); + } - if( sample->effect_chain[position]->source_type == 1 && - vj_tag_get_active( sample->effect_chain[position]->channel ) && - vj_tag_get_type( sample->effect_chain[position]->channel ) == VJ_TAG_TYPE_NET ) { - vj_tag_disable( sample->effect_chain[position]->channel ); - } + if( sample->effect_chain[position]->source_type == 1 && + vj_tag_get_active( sample->effect_chain[position]->channel ) && + vj_tag_get_type( sample->effect_chain[position]->channel ) == VJ_TAG_TYPE_NET ) { + vj_tag_disable( sample->effect_chain[position]->channel ); + } sample->effect_chain[position]->source_type = 0; sample->effect_chain[position]->channel = 0; for (j = 0; j < SAMPLE_MAX_PARAMETERS; j++) - sample->effect_chain[position]->arg[j] = 0; + sample->effect_chain[position]->arg[j] = 0; - if( position == sample->fade_entry ) - sample->fade_entry = -1; + if( position == sample->fade_entry ) + sample->fade_entry = -1; return 1; } @@ -2522,59 +2524,62 @@ int sample_get_loop_dec(int s1) { editlist *sample_get_editlist(int s1) { - sample_info *sample = sample_get(s1); - if(!sample) return NULL; - return sample->edit_list; + sample_info *sample = sample_get(s1); + if(!sample) return NULL; + return sample->edit_list; } //@ is sample k in fx chain ? -int sample_cached(sample_info *s, int b_sample ) +int sample_cached(sample_info *s, int b_sample ) { - int i = 0; - for( i = 0; i < SAMPLE_MAX_EFFECTS ;i++ ) - if( s->effect_chain[i]->source_type == 0 && s->effect_chain[i]->channel == b_sample) - return 1; + int i = 0; + for( i = 0; i < SAMPLE_MAX_EFFECTS ;i++ ) { + if( s->effect_chain[i]->source_type == 0 && s->effect_chain[i]->channel == b_sample) { + return 1; + } + } + + return 0; +} + +void sample_chain_alloc_kf( int s1, int entry ) +{ + sample_info *sample = sample_get(s1); + if(!sample) return; + sample->effect_chain[entry]->kf = vpn( VEVO_ANONYMOUS_PORT ); +} + +int sample_set_editlist(int s1, editlist *edl) +{ + sample_info *sample = sample_get(s1); + if(!sample) return -1; + if(sample->edit_list) + { + veejay_msg(VEEJAY_MSG_ERROR, "Sample %d already has EDL", s1 ); return 0; -} - -void sample_chain_alloc_kf( int s1, int entry ) -{ - sample_info *sample = sample_get(s1); - if(!sample) return; - sample->effect_chain[entry]->kf = vpn( VEVO_ANONYMOUS_PORT ); -} - -int sample_set_editlist(int s1, editlist *edl) -{ - sample_info *sample = sample_get(s1); - if(!sample) return -1; - if(sample->edit_list) - { - veejay_msg(VEEJAY_MSG_ERROR, "Sample %d already has EDL", s1 ); - return 0; - } - sample->edit_list = edl; - sample->soft_edl = 1; - return 1; + } + sample->edit_list = edl; + sample->soft_edl = 1; + return 1; } int sample_apply_loop_dec(int s1, double fps) { sample_info *sample = sample_get(s1); if(!sample) return -1; /* if(sample->loop_dec==1) { - if( (sample->first_frame + inc) >= sample->last_frame) { - sample->first_frame = sample->last_frame-1; - sample->loop_dec = 0; - } - else { - sample->first_frame += (inc / sample->loop_periods); - } - veejay_msg(VEEJAY_MSG_DEBUG, "New starting postions are %ld - %ld", - sample->first_frame, sample->last_frame); - return ( sample_update(sample, s1)); + if( (sample->first_frame + inc) >= sample->last_frame) { + sample->first_frame = sample->last_frame-1; + sample->loop_dec = 0; + } + else { + sample->first_frame += (inc / sample->loop_periods); + } + veejay_msg(VEEJAY_MSG_DEBUG, "New starting postions are %ld - %ld", + sample->first_frame, sample->last_frame); + return ( sample_update(sample, s1)); }*/ - sample->loop_dec ++; + sample->loop_dec ++; return 1; } @@ -2582,64 +2587,64 @@ int sample_apply_loop_dec(int s1, double fps) { /* print sample status information into an allocated string str*/ //int sample_chain_sprint_status(int s1, int entry, int changed, int r_changed,char *str, -// int frame) -int sample_chain_sprint_status( int s1,int tags,int cache,int sa,int ca, int pfps, int frame, int mode,int total_slots, int seq_rec,int curfps, uint32_t lo, uint32_t hi,int macro,char *str ) +// int frame) +int sample_chain_sprint_status( int s1,int tags,int cache,int sa,int ca, int pfps, int frame, int mode,int total_slots, int seq_rec,int curfps, uint32_t lo, uint32_t hi,int macro,char *str ) { - sample_info *sample; - sample = sample_get(s1); + sample_info *sample; + sample = sample_get(s1); if (!sample) { - return -1; - } - int e_a, e_d, e_s; - if( sa && seq_rec) - { - sample_info *rs = sample_get( seq_rec ); - e_a = rs->encoder_active; - e_d = rs->encoder_frames_to_record; - e_s = rs->encoder_total_frames_recorded; - } - else - { - e_a = sample->encoder_active; - e_d = sample->encoder_frames_to_record; - e_s = sample->encoder_total_frames_recorded; - } + return -1; + } + int e_a, e_d, e_s; + if( sa && seq_rec) + { + sample_info *rs = sample_get( seq_rec ); + e_a = rs->encoder_active; + e_d = rs->encoder_frames_to_record; + e_s = rs->encoder_total_frames_recorded; + } + else + { + e_a = sample->encoder_active; + e_d = sample->encoder_frames_to_record; + e_s = sample->encoder_total_frames_recorded; + } - char *ptr = str; - ptr = vj_sprintf( ptr, pfps ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, frame ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, mode ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, s1 ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, sample->effect_toggle ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, sample->first_frame ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, sample->last_frame ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, sample->speed ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, sample->looptype ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, e_a); *ptr++ = ' '; - ptr = vj_sprintf( ptr, e_d ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, e_s ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, sample_size() ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, sample->marker_start ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, sample->marker_end ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, sample->selected_entry ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, total_slots ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, cache ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, curfps ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, lo ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, hi ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, sa ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, ca ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, (int) sample->fader_val ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, sample->dup ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, macro ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, sample->subrender ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, sample->fade_method ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, sample->fade_entry ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, sample->fade_alpha );*ptr++ = ' '; - ptr = vj_sprintf( ptr, tags ); - return 0; + char *ptr = str; + ptr = vj_sprintf( ptr, pfps ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, frame ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, mode ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, s1 ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, sample->effect_toggle ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, sample->first_frame ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, sample->last_frame ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, sample->speed ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, sample->looptype ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, e_a); *ptr++ = ' '; + ptr = vj_sprintf( ptr, e_d ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, e_s ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, sample_size() ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, sample->marker_start ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, sample->marker_end ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, sample->selected_entry ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, total_slots ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, cache ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, curfps ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, lo ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, hi ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, sa ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, ca ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, (int) sample->fader_val ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, sample->dup ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, macro ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, sample->subrender ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, sample->fade_method ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, sample->fade_entry ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, sample->fade_alpha );*ptr++ = ' '; + ptr = vj_sprintf( ptr, tags ); + return 0; } @@ -2655,28 +2660,28 @@ void ParseArguments(xmlDocPtr doc, xmlNodePtr cur, int *arg) { int argIndex = 0; if (cur == NULL) - return; + return; while (cur != NULL && argIndex < SAMPLE_MAX_PARAMETERS) { - if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_ARGUMENT)) - { - arg[argIndex] = get_xml_int( doc, cur ); - argIndex ++; - } - cur = cur->next; + if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_ARGUMENT)) + { + arg[argIndex] = get_xml_int( doc, cur ); + argIndex ++; + } + cur = cur->next; } } -static void ParseKeys( xmlDocPtr doc, xmlNodePtr cur, void *port ) +static void ParseKeys( xmlDocPtr doc, xmlNodePtr cur, void *port ) { - while( cur != NULL ) - { - if(!xmlStrcmp( cur->name, (const xmlChar*) "KEYFRAMES" )) - { - keyframe_xml_unpack( doc, cur->xmlChildrenNode, port ); - } - cur = cur->next; - } + while( cur != NULL ) + { + if(!xmlStrcmp( cur->name, (const xmlChar*) "KEYFRAMES" )) + { + keyframe_xml_unpack( doc, cur->xmlChildrenNode, port ); + } + cur = cur->next; + } } @@ -2705,108 +2710,108 @@ void ParseEffect(xmlDocPtr doc, xmlNodePtr cur, int dst_sample, int start_at) xmlNodePtr anim = NULL; for (i = 0; i < SAMPLE_MAX_PARAMETERS; i++) { - arg[i] = 0; + arg[i] = 0; } if (cur == NULL) - return; + return; while (cur != NULL) { - if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_EFFECTID)) { - effect_id = get_xml_int( doc, cur ); - } + if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_EFFECTID)) { + effect_id = get_xml_int( doc, cur ); + } - if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_EFFECTPOS)) { - chain_index = get_xml_int( doc, cur ); - } + if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_EFFECTPOS)) { + chain_index = get_xml_int( doc, cur ); + } - if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_ARGUMENTS)) { + if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_ARGUMENTS)) { - ParseArguments(doc, cur->xmlChildrenNode, arg); - } + ParseArguments(doc, cur->xmlChildrenNode, arg); + } - if( !xmlStrcmp(cur->name, (const xmlChar*) "ANIM" )) - { - anim = cur->xmlChildrenNode; - } - + if( !xmlStrcmp(cur->name, (const xmlChar*) "ANIM" )) + { + anim = cur->xmlChildrenNode; + } + - /* add source,channel,trimmer,e_flag */ - if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_EFFECTSOURCE)) { - source_type = get_xml_int( doc, cur ); - } + /* add source,channel,trimmer,e_flag */ + if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_EFFECTSOURCE)) { + source_type = get_xml_int( doc, cur ); + } - if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_EFFECTCHANNEL)) { - channel = get_xml_int( doc, cur ); - } + if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_EFFECTCHANNEL)) { + channel = get_xml_int( doc, cur ); + } - if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_EFFECTTRIMMER)) { - frame_trimmer = get_xml_int( doc, cur ); - } + if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_EFFECTTRIMMER)) { + frame_trimmer = get_xml_int( doc, cur ); + } - if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_EFFECTOFFSET)) { - frame_offset = get_xml_int( doc, cur ); - } + if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_EFFECTOFFSET)) { + frame_offset = get_xml_int( doc, cur ); + } - if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_EFFECTACTIVE)) { - e_flag = get_xml_int( doc, cur ); - } + if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_EFFECTACTIVE)) { + e_flag = get_xml_int( doc, cur ); + } - if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_EFFECTAUDIOFLAG)) { - a_flag = get_xml_int( doc, cur ); - } + if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_EFFECTAUDIOFLAG)) { + a_flag = get_xml_int( doc, cur ); + } - if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_EFFECTAUDIOVOLUME)) { - volume = get_xml_int( doc, cur ); - } - - if(!xmlStrcmp( cur->name, (const xmlChar*) "kf_status" )) { - kf_status = get_xml_int( doc, cur ); - } + if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_EFFECTAUDIOVOLUME)) { + volume = get_xml_int( doc, cur ); + } + + if(!xmlStrcmp( cur->name, (const xmlChar*) "kf_status" )) { + kf_status = get_xml_int( doc, cur ); + } - if(!xmlStrcmp( cur->name, (const xmlChar*) "kf_type" )) { - kf_type = get_xml_int( doc, cur ); - } + if(!xmlStrcmp( cur->name, (const xmlChar*) "kf_type" )) { + kf_type = get_xml_int( doc, cur ); + } - cur = cur->next; + cur = cur->next; } if (effect_id != -1) { - int j; - if (!sample_chain_add(dst_sample, chain_index, effect_id)) { - veejay_msg(VEEJAY_MSG_ERROR, "Error parsing effect %d (pos %d)", effect_id, chain_index); - } - else { - /* load the parameter values */ - for (j = 0; j < vj_effect_get_num_params(effect_id); j++) { - sample_set_effect_arg(dst_sample, chain_index, j, arg[j]); - } - sample_set_chain_channel(dst_sample, chain_index, channel); - sample_set_chain_source(dst_sample, chain_index, source_type); + int j; + if (!sample_chain_add(dst_sample, chain_index, effect_id)) { + veejay_msg(VEEJAY_MSG_ERROR, "Error parsing effect %d (pos %d)", effect_id, chain_index); + } + else { + /* load the parameter values */ + for (j = 0; j < vj_effect_get_num_params(effect_id); j++) { + sample_set_effect_arg(dst_sample, chain_index, j, arg[j]); + } + sample_set_chain_channel(dst_sample, chain_index, channel); + sample_set_chain_source(dst_sample, chain_index, source_type); - /* set other parameters */ - if (a_flag) { - sample_set_chain_audio(dst_sample, chain_index, a_flag); - sample_set_chain_volume(dst_sample, chain_index, volume); - } - - if( effect_id != -1 ) { - sample_set_chain_status(dst_sample, chain_index, e_flag); - sample_set_offset(dst_sample, chain_index, frame_offset); - sample_set_trimmer(dst_sample, chain_index, frame_trimmer); - } - - sample_info *skel = sample_get(dst_sample); - if(anim) - { - sample_chain_alloc_kf( dst_sample, chain_index ); - ParseKeys( doc, anim, skel->effect_chain[ chain_index ]->kf ); - sample_chain_set_kf_status( dst_sample, chain_index, kf_status ); - sample_set_kf_type(dst_sample,chain_index,kf_type); - } - } - } + /* set other parameters */ + if (a_flag) { + sample_set_chain_audio(dst_sample, chain_index, a_flag); + sample_set_chain_volume(dst_sample, chain_index, volume); + } + + if( effect_id != -1 ) { + sample_set_chain_status(dst_sample, chain_index, e_flag); + sample_set_offset(dst_sample, chain_index, frame_offset); + sample_set_trimmer(dst_sample, chain_index, frame_trimmer); + } + + sample_info *skel = sample_get(dst_sample); + if(anim) + { + sample_chain_alloc_kf( dst_sample, chain_index ); + ParseKeys( doc, anim, skel->effect_chain[ chain_index ]->kf ); + sample_chain_set_kf_status( dst_sample, chain_index, kf_status ); + sample_set_kf_type(dst_sample,chain_index,kf_type); + } + } + } } @@ -2821,80 +2826,80 @@ void ParseEffects(xmlDocPtr doc, xmlNodePtr cur, sample_info * skel, int start_a { int effectIndex = 0; while (cur != NULL && effectIndex < SAMPLE_MAX_EFFECTS) { - if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_EFFECT)) { - ParseEffect(doc, cur->xmlChildrenNode, skel->sample_id, start_at); - effectIndex++; - } - //effectIndex++; - cur = cur->next; + if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_EFFECT)) { + ParseEffect(doc, cur->xmlChildrenNode, skel->sample_id, start_at); + effectIndex++; + } + //effectIndex++; + cur = cur->next; } } -static void ParseCalibration( xmlDocPtr doc, xmlNodePtr cur, sample_info *skel , void *vp) +static void ParseCalibration( xmlDocPtr doc, xmlNodePtr cur, sample_info *skel , void *vp) { } -static void LoadCurrentPlaying( xmlDocPtr doc, xmlNodePtr cur , int *id, int *mode ) +static void LoadCurrentPlaying( xmlDocPtr doc, xmlNodePtr cur , int *id, int *mode ) { while (cur != NULL) { if (!xmlStrcmp(cur->name, (const xmlChar *) "PLAYING_ID")) { - *id = get_xml_int( doc, cur ); - } - - if( !xmlStrcmp(cur->name, (const xmlChar*) "PLAYING_MODE" )) - { - *mode = get_xml_int( doc, cur); - } + *id = get_xml_int( doc, cur ); + } + + if( !xmlStrcmp(cur->name, (const xmlChar*) "PLAYING_MODE" )) + { + *mode = get_xml_int( doc, cur); + } - cur = cur->next; - } + cur = cur->next; + } } -static void LoadSequences( xmlDocPtr doc, xmlNodePtr cur, void *seq, int n_samples ) +static void LoadSequences( xmlDocPtr doc, xmlNodePtr cur, void *seq, int n_samples ) { - sequencer_t *s = (sequencer_t*) seq; - seq_sample_t tmp_seq[MAX_SEQUENCES]; + sequencer_t *s = (sequencer_t*) seq; + seq_sample_t tmp_seq[MAX_SEQUENCES]; - int i; - int tmp_idx = 0; + int i; + int tmp_idx = 0; - veejay_memset( &tmp_seq, 0, sizeof(tmp_seq)); + veejay_memset( &tmp_seq, 0, sizeof(tmp_seq)); - while (cur != NULL) - { - if (!xmlStrcmp(cur->name, (const xmlChar *) "TYPE")) { - tmp_seq[ tmp_idx ].type = get_xml_int( doc, cur ); - } + while (cur != NULL) + { + if (!xmlStrcmp(cur->name, (const xmlChar *) "TYPE")) { + tmp_seq[ tmp_idx ].type = get_xml_int( doc, cur ); + } - if (!xmlStrcmp(cur->name, (const xmlChar *) "SEQ_ID")) { - tmp_seq[ tmp_idx ].sample_id = get_xml_int( doc, cur ); - tmp_idx ++; - } - cur = cur->next; - } + if (!xmlStrcmp(cur->name, (const xmlChar *) "SEQ_ID")) { + tmp_seq[ tmp_idx ].sample_id = get_xml_int( doc, cur ); + tmp_idx ++; + } + cur = cur->next; + } - if( tmp_idx == 0 ) - return; + if( tmp_idx == 0 ) + return; - if( s->size == 0 ) { - for( i = 0; i < tmp_idx; i ++ ) { - s->samples[i].sample_id = tmp_seq[i].sample_id; - s->samples[i].type = tmp_seq[i].type; - } - s->size = tmp_idx; - return; - } + if( s->size == 0 ) { + for( i = 0; i < tmp_idx; i ++ ) { + s->samples[i].sample_id = tmp_seq[i].sample_id; + s->samples[i].type = tmp_seq[i].type; + } + s->size = tmp_idx; + return; + } - if( (s->size + tmp_idx ) < MAX_SEQUENCES ) { - for( i = 0; i < tmp_idx; i ++ ) { - s->samples[ s->size + i ].sample_id = tmp_seq[ i ].sample_id + n_samples; - s->samples[ s->size + i ].type = tmp_seq[i].type; - } - s->size = s->size + tmp_idx; - } else { - veejay_msg(VEEJAY_MSG_DEBUG, "Can't load this sequence, sequence bank is full."); - } + if( (s->size + tmp_idx ) < MAX_SEQUENCES ) { + for( i = 0; i < tmp_idx; i ++ ) { + s->samples[ s->size + i ].sample_id = tmp_seq[ i ].sample_id + n_samples; + s->samples[ s->size + i ].type = tmp_seq[i].type; + } + s->size = s->size + tmp_idx; + } else { + veejay_msg(VEEJAY_MSG_DEBUG, "Can't load this sequence, sequence bank is full."); + } } /************************************************************************************************* @@ -2908,170 +2913,170 @@ xmlNodePtr ParseSample(xmlDocPtr doc, xmlNodePtr cur, sample_info * skel,void *e { xmlNodePtr subs = NULL; - int original_id = 0; + int original_id = 0; - int marker_start = 0, marker_end = 0; + int marker_start = 0, marker_end = 0; while (cur != NULL) { - if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_SAMPLEID)) { - original_id = get_xml_int( doc, cur ); - skel->sample_id = original_id + start_at; - sample_store(skel); - } - - if( !xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_BOGUSVIDEO ) ) { - skel->play_length = get_xml_int( doc, cur ); - } - - if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_EDIT_LIST_FILE)) { + if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_SAMPLEID)) { + original_id = get_xml_int( doc, cur ); + skel->sample_id = original_id + start_at; + sample_store(skel); + } + + if( !xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_BOGUSVIDEO ) ) { + skel->play_length = get_xml_int( doc, cur ); + } + + if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_EDIT_LIST_FILE)) { - skel->edit_list_file = get_xml_str( doc, cur ); - if( start_at > 0 ) { - free(skel->edit_list_file); - skel->edit_list_file = sample_default_edl_name( original_id ); - } - - if(!sample_read_edl( skel )) - skel->edit_list = NULL; - - if(!skel->edit_list) - { - veejay_msg(VEEJAY_MSG_DEBUG, "Sample %d is using EDL from plain mode", skel->sample_id ); - skel->edit_list = el; - skel->soft_edl = 1; - } - else - { - skel->soft_edl = 0; - if( start_at == 0 ) { - veejay_msg(VEEJAY_MSG_DEBUG, "Sample %d has its own EDL", skel->sample_id, el ); - } - else { - veejay_msg(VEEJAY_MSG_DEBUG, "Sample %d is using Sample's %d EDL", skel->sample_id, original_id ); - } - } - } + skel->edit_list_file = get_xml_str( doc, cur ); + if( start_at > 0 ) { + free(skel->edit_list_file); + skel->edit_list_file = sample_default_edl_name( original_id ); + } + + if(!sample_read_edl( skel )) + skel->edit_list = NULL; + + if(!skel->edit_list) + { + veejay_msg(VEEJAY_MSG_DEBUG, "Sample %d is using EDL from plain mode", skel->sample_id ); + skel->edit_list = el; + skel->soft_edl = 1; + } + else + { + skel->soft_edl = 0; + if( start_at == 0 ) { + veejay_msg(VEEJAY_MSG_DEBUG, "Sample %d has its own EDL", skel->sample_id, el ); + } + else { + veejay_msg(VEEJAY_MSG_DEBUG, "Sample %d is using Sample's %d EDL", skel->sample_id, original_id ); + } + } + } - if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_CHAIN_ENABLED)) { - skel->effect_toggle = get_xml_int( doc, cur ); - } + if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_CHAIN_ENABLED)) { + skel->effect_toggle = get_xml_int( doc, cur ); + } - if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_SAMPLEDESCR) && start_at == 0) { - get_xml_str_n( doc, cur, skel->descr, sizeof(skel->descr) ); - } + if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_SAMPLEDESCR) && start_at == 0) { + get_xml_str_n( doc, cur, skel->descr, sizeof(skel->descr) ); + } - if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_FIRSTFRAME)) { - skel->first_frame = get_xml_int( doc, cur ); - } + if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_FIRSTFRAME)) { + skel->first_frame = get_xml_int( doc, cur ); + } - if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_VOL)) { - skel->audio_volume = get_xml_int( doc, cur ); - } + if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_VOL)) { + skel->audio_volume = get_xml_int( doc, cur ); + } - if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_LASTFRAME)) { - skel->last_frame = get_xml_int( doc, cur ); - } + if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_LASTFRAME)) { + skel->last_frame = get_xml_int( doc, cur ); + } - if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_SPEED)) { - skel->speed = get_xml_int( doc, cur ); - } + if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_SPEED)) { + skel->speed = get_xml_int( doc, cur ); + } - if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_FRAMEDUP)) { - skel->dup = get_xml_int( doc, cur ); - } + if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_FRAMEDUP)) { + skel->dup = get_xml_int( doc, cur ); + } - if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_LOOPTYPE)) { - skel->looptype = get_xml_int( doc, cur ); - } - - if (!xmlStrcmp(cur->name, (const xmlChar *) "subrender")) { - skel->subrender = get_xml_int( doc, cur ); - } + if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_LOOPTYPE)) { + skel->looptype = get_xml_int( doc, cur ); + } + + if (!xmlStrcmp(cur->name, (const xmlChar *) "subrender")) { + skel->subrender = get_xml_int( doc, cur ); + } - if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_MAXLOOPS)) { - skel->max_loops = get_xml_int( doc, cur ); - } + if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_MAXLOOPS)) { + skel->max_loops = get_xml_int( doc, cur ); + } - if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_NEXTSAMPLE)) { - skel->next_sample_id = get_xml_int( doc,cur ); - } + if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_NEXTSAMPLE)) { + skel->next_sample_id = get_xml_int( doc,cur ); + } - if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_DEPTH)) { - skel->depth = get_xml_int( doc, cur ); - } + if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_DEPTH)) { + skel->depth = get_xml_int( doc, cur ); + } - if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_PLAYMODE)) { - skel->playmode = get_xml_int( doc, cur ); - } + if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_PLAYMODE)) { + skel->playmode = get_xml_int( doc, cur ); + } - if (!xmlStrcmp(cur->name,(const xmlChar *) XMLTAG_FADER_ACTIVE)) { - skel->fader_active = get_xml_int( doc, cur ); - } - - if (!xmlStrcmp(cur->name,(const xmlChar *) XMLTAG_FADE_METHOD)) { - skel->fade_method = get_xml_int( doc, cur ); - } + if (!xmlStrcmp(cur->name,(const xmlChar *) XMLTAG_FADER_ACTIVE)) { + skel->fader_active = get_xml_int( doc, cur ); + } + + if (!xmlStrcmp(cur->name,(const xmlChar *) XMLTAG_FADE_METHOD)) { + skel->fade_method = get_xml_int( doc, cur ); + } - if (!xmlStrcmp(cur->name,(const xmlChar *) XMLTAG_FADE_ALPHA)) { - skel->fade_alpha = get_xml_int( doc, cur ); - } + if (!xmlStrcmp(cur->name,(const xmlChar *) XMLTAG_FADE_ALPHA)) { + skel->fade_alpha = get_xml_int( doc, cur ); + } - if (!xmlStrcmp(cur->name,(const xmlChar *) XMLTAG_FADE_ENTRY)) { - skel->fade_entry = get_xml_int( doc, cur ); - } + if (!xmlStrcmp(cur->name,(const xmlChar *) XMLTAG_FADE_ENTRY)) { + skel->fade_entry = get_xml_int( doc, cur ); + } - if (!xmlStrcmp(cur->name,(const xmlChar *) XMLTAG_FADER_VAL)) { - skel->fader_val = get_xml_int( doc, cur ); - } + if (!xmlStrcmp(cur->name,(const xmlChar *) XMLTAG_FADER_VAL)) { + skel->fader_val = get_xml_int( doc, cur ); + } - if (!xmlStrcmp(cur->name,(const xmlChar*) XMLTAG_FADER_INC)) { - skel->fader_inc = get_xml_int( doc, cur ); - } + if (!xmlStrcmp(cur->name,(const xmlChar*) XMLTAG_FADER_INC)) { + skel->fader_inc = get_xml_int( doc, cur ); + } - if (!xmlStrcmp(cur->name,(const xmlChar*) XMLTAG_FADER_DIRECTION)) { - skel->fader_direction = get_xml_int( doc, cur ); - } + if (!xmlStrcmp(cur->name,(const xmlChar*) XMLTAG_FADER_DIRECTION)) { + skel->fader_direction = get_xml_int( doc, cur ); + } - if(!xmlStrcmp(cur->name,(const xmlChar*) XMLTAG_LASTENTRY)) { - skel->selected_entry = get_xml_int( doc, cur ); - } + if(!xmlStrcmp(cur->name,(const xmlChar*) XMLTAG_LASTENTRY)) { + skel->selected_entry = get_xml_int( doc, cur ); + } - if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_MARKERSTART)) { - marker_start = get_xml_int( doc, cur ); - } + if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_MARKERSTART)) { + marker_start = get_xml_int( doc, cur ); + } - if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_MARKEREND)) { - marker_end = get_xml_int( doc, cur ); - } + if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_MARKEREND)) { + marker_end = get_xml_int( doc, cur ); + } - if(!xmlStrcmp(cur->name, (const xmlChar*) "SUBTITLES" )) - { - subs = cur->xmlChildrenNode; - // vj_font_xml_unpack( doc, cur->xmlChildrenNode, font ); - } + if(!xmlStrcmp(cur->name, (const xmlChar*) "SUBTITLES" )) + { + subs = cur->xmlChildrenNode; + // vj_font_xml_unpack( doc, cur->xmlChildrenNode, font ); + } - ParseEffects(doc, cur->xmlChildrenNode, skel, start_at); + ParseEffects(doc, cur->xmlChildrenNode, skel, start_at); - if( !xmlStrcmp( cur->name, (const xmlChar*) "calibration" ) ) { - ParseCalibration( doc, cur->xmlChildrenNode, skel ,vp); - } - - cur = cur->next; + if( !xmlStrcmp( cur->name, (const xmlChar*) "calibration" ) ) { + ParseCalibration( doc, cur->xmlChildrenNode, skel ,vp); + } + + cur = cur->next; } - if( marker_end != marker_start || marker_end != 0 ) - { - //check if marker is sane - if( marker_start > marker_end && skel->speed == 0 ) { - int tmp = marker_start; - marker_start = marker_end; - marker_end = tmp; - } + if( marker_end != marker_start || marker_end != 0 ) + { + //check if marker is sane + if( marker_start > marker_end && skel->speed == 0 ) { + int tmp = marker_start; + marker_start = marker_end; + marker_end = tmp; + } - skel->marker_start = marker_start; - skel->marker_end = marker_end; - } + skel->marker_start = marker_start; + skel->marker_end = marker_end; + } return subs; } @@ -3086,50 +3091,50 @@ xmlNodePtr ParseSample(xmlDocPtr doc, xmlNodePtr cur, sample_info * skel,void *e ****************************************************************************************************/ int sample_read_edl( sample_info *sample ) { - char *files[1] = {0}; - int res = 0; + char *files[1] = {0}; + int res = 0; - files[0] = sample->edit_list_file; + files[0] = sample->edit_list_file; - void *old = sample->edit_list; + void *old = sample->edit_list; - //EDL is stored in CWD, samplelist file can be anywhere. Cannot always load samplelists due to - // missing EDL files in CWD. - veejay_msg(VEEJAY_MSG_DEBUG, "Loading '%s' from current working directory" , files[0] ); + //EDL is stored in CWD, samplelist file can be anywhere. Cannot always load samplelists due to + // missing EDL files in CWD. + veejay_msg(VEEJAY_MSG_DEBUG, "Loading '%s' from current working directory" , files[0] ); - sample->edit_list = vj_el_init_with_args( files,1, - __sample_project_settings.flags, - __sample_project_settings.deinterlace, - __sample_project_settings.force, - __sample_project_settings.norm, - __sample_project_settings.fmt, - __sample_project_settings.width, - __sample_project_settings.height); + sample->edit_list = vj_el_init_with_args( files,1, + __sample_project_settings.flags, + __sample_project_settings.deinterlace, + __sample_project_settings.force, + __sample_project_settings.norm, + __sample_project_settings.fmt, + __sample_project_settings.width, + __sample_project_settings.height); - if(sample->edit_list) - { - res = 1; - sample->soft_edl = 0; + if(sample->edit_list) + { + res = 1; + sample->soft_edl = 0; - if( old ) { - sample_close_edl( sample->sample_id, old ); - } - } - else - { - sample->edit_list = old; - veejay_msg(VEEJAY_MSG_ERROR, "Error loading '%s' from current working directory", files[0] ); - } + if( old ) { + sample_close_edl( sample->sample_id, old ); + } + } + else + { + sample->edit_list = old; + veejay_msg(VEEJAY_MSG_ERROR, "Error loading '%s' from current working directory", files[0] ); + } - return res; + return res; } -static void LoadSubtitles( sample_info *skel, char *file, void *font ) +static void LoadSubtitles( sample_info *skel, char *file, void *font ) { - char tmp[512]; + char tmp[512]; - snprintf(tmp,sizeof(tmp), "%s-SUB-%d.srt", file,skel->sample_id ); - vj_font_load_srt( font, tmp ); + snprintf(tmp,sizeof(tmp), "%s-SUB-%d.srt", file,skel->sample_id ); + vj_font_load_srt( font, tmp ); } int sample_readFromFile(char *sampleFile, void *vp, void *seq, void *font, void *el,int *id, int *mode) @@ -3143,65 +3148,65 @@ int sample_readFromFile(char *sampleFile, void *vp, void *seq, void *font, void */ doc = xmlParseFile(sampleFile); if (doc == NULL) - return 0; + return 0; /* * Check the document is of the right kind */ int start_at = sample_size(); - if( start_at <= 0 ) - start_at = 0; + if( start_at <= 0 ) + start_at = 0; - if( start_at != 0 ) - veejay_msg(VEEJAY_MSG_INFO, "Merging %s into current samplelist, auto number starts at %d", sampleFile, start_at ); + if( start_at != 0 ) + veejay_msg(VEEJAY_MSG_INFO, "Merging %s into current samplelist, auto number starts at %d", sampleFile, start_at ); cur = xmlDocGetRootElement(doc); if (cur == NULL) { - veejay_msg(VEEJAY_MSG_ERROR,"Empty samplelist. Nothing to do.\n"); - xmlFreeDoc(doc); - return 0; + veejay_msg(VEEJAY_MSG_ERROR,"Empty samplelist. Nothing to do.\n"); + xmlFreeDoc(doc); + return 0; } if (xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_SAMPLES)) { - veejay_msg(VEEJAY_MSG_ERROR, "This is not a samplelist: %s",XMLTAG_SAMPLES); - xmlFreeDoc(doc); - return 0; + veejay_msg(VEEJAY_MSG_ERROR, "This is not a samplelist: %s",XMLTAG_SAMPLES); + xmlFreeDoc(doc); + return 0; } cur = cur->xmlChildrenNode; while (cur != NULL) - { - if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_SAMPLE)) { - skel = sample_skeleton_new(0, 1); - if( skel == NULL ) - continue; + { + if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_SAMPLE)) { + skel = sample_skeleton_new(0, 1); + if( skel == NULL ) + continue; - void *d = vj_font_get_dict(font); + void *d = vj_font_get_dict(font); - xmlNodePtr subs = ParseSample( doc, cur->xmlChildrenNode, skel, el, font, start_at ,vp ); - if(subs) - { - LoadSubtitles( skel, sampleFile, font ); - vj_font_xml_unpack( doc, subs, font ); - } - - vj_font_set_dict(font,d); - } + xmlNodePtr subs = ParseSample( doc, cur->xmlChildrenNode, skel, el, font, start_at ,vp ); + if(subs) + { + LoadSubtitles( skel, sampleFile, font ); + vj_font_xml_unpack( doc, subs, font ); + } + + vj_font_set_dict(font,d); + } - if( !xmlStrcmp( cur->name, (const xmlChar*) "CURRENT" )) { - LoadCurrentPlaying( doc, cur->xmlChildrenNode, id, mode ); - } + if( !xmlStrcmp( cur->name, (const xmlChar*) "CURRENT" )) { + LoadCurrentPlaying( doc, cur->xmlChildrenNode, id, mode ); + } - if( !xmlStrcmp( cur->name, (const xmlChar *) "SEQUENCE" )) { - LoadSequences( doc, cur->xmlChildrenNode,seq, start_at ); - } + if( !xmlStrcmp( cur->name, (const xmlChar *) "SEQUENCE" )) { + LoadSequences( doc, cur->xmlChildrenNode,seq, start_at ); + } - if( !xmlStrcmp( cur->name, (const xmlChar*) "stream" )) { - tagParseStreamFX( sampleFile, doc, cur->xmlChildrenNode, font,vp ); - } + if( !xmlStrcmp( cur->name, (const xmlChar*) "stream" )) { + tagParseStreamFX( sampleFile, doc, cur->xmlChildrenNode, font,vp ); + } - cur = cur->next; + cur = cur->next; } xmlFreeDoc(doc); @@ -3213,42 +3218,42 @@ void CreateArguments(xmlNodePtr node, int *arg, int argcount) { int i; for (i = 0; i < argcount; i++) { - put_xml_int( node, XMLTAG_ARGUMENT, arg[i] ); - } + put_xml_int( node, XMLTAG_ARGUMENT, arg[i] ); + } } -void CreateKeys( xmlNodePtr node, int argcount, void *port ) +void CreateKeys( xmlNodePtr node, int argcount, void *port ) { - int i; - for( i = 0; i < argcount ; i++ ) - { - xmlNodePtr childnode = xmlNewChild(node, NULL, (const xmlChar*) "KEYFRAMES", NULL); - keyframe_xml_pack( childnode, port, i ); - } + int i; + for( i = 0; i < argcount ; i++ ) + { + xmlNodePtr childnode = xmlNewChild(node, NULL, (const xmlChar*) "KEYFRAMES", NULL); + keyframe_xml_pack( childnode, port, i ); + } } void CreateEffect(xmlNodePtr node, sample_eff_chain * effect, int position) { xmlNodePtr childnode; - put_xml_int( node, XMLTAG_EFFECTPOS, position ); - put_xml_int( node, XMLTAG_EFFECTID, effect->effect_id ); - put_xml_int( node, XMLTAG_EFFECTACTIVE, effect->e_flag ); - put_xml_int( node, XMLTAG_EFFECTSOURCE, effect->source_type ); - put_xml_int( node, XMLTAG_EFFECTCHANNEL, effect->channel ); - put_xml_int( node, XMLTAG_EFFECTOFFSET, effect->frame_offset ); - put_xml_int( node, XMLTAG_EFFECTTRIMMER, effect->frame_trimmer ); - put_xml_int( node, XMLTAG_EFFECTAUDIOFLAG, effect->a_flag ); - put_xml_int( node, XMLTAG_EFFECTAUDIOVOLUME, effect->volume ); - put_xml_int( node, "kf_status", effect->kf_status ); - put_xml_int( node, "kf_type", effect->kf_type ); + put_xml_int( node, XMLTAG_EFFECTPOS, position ); + put_xml_int( node, XMLTAG_EFFECTID, effect->effect_id ); + put_xml_int( node, XMLTAG_EFFECTACTIVE, effect->e_flag ); + put_xml_int( node, XMLTAG_EFFECTSOURCE, effect->source_type ); + put_xml_int( node, XMLTAG_EFFECTCHANNEL, effect->channel ); + put_xml_int( node, XMLTAG_EFFECTOFFSET, effect->frame_offset ); + put_xml_int( node, XMLTAG_EFFECTTRIMMER, effect->frame_trimmer ); + put_xml_int( node, XMLTAG_EFFECTAUDIOFLAG, effect->a_flag ); + put_xml_int( node, XMLTAG_EFFECTAUDIOVOLUME, effect->volume ); + put_xml_int( node, "kf_status", effect->kf_status ); + put_xml_int( node, "kf_type", effect->kf_type ); childnode = xmlNewChild(node, NULL, (const xmlChar *) XMLTAG_ARGUMENTS, NULL); CreateArguments(childnode, effect->arg, vj_effect_get_num_params(effect->effect_id)); if( effect->kf != NULL ) { - childnode = xmlNewChild(node,NULL,(const xmlChar*) "ANIM", NULL ); - CreateKeys( childnode, vj_effect_get_num_params(effect->effect_id), effect->kf ); + childnode = xmlNewChild(node,NULL,(const xmlChar*) "ANIM", NULL ); + CreateKeys( childnode, vj_effect_get_num_params(effect->effect_id), effect->kf ); } } @@ -3259,66 +3264,66 @@ void CreateEffects(xmlNodePtr node, sample_eff_chain ** effects) xmlNodePtr childnode; for (i = 0; i < SAMPLE_MAX_EFFECTS; i++) { - if (effects[i]->effect_id != -1) { - childnode = xmlNewChild(node, NULL, (const xmlChar *) XMLTAG_EFFECT, NULL); - CreateEffect(childnode, effects[i], i); - } + if (effects[i]->effect_id != -1) { + childnode = xmlNewChild(node, NULL, (const xmlChar *) XMLTAG_EFFECT, NULL); + CreateEffect(childnode, effects[i], i); + } } } -static void SaveSequences( xmlNodePtr node, void *seq ) +static void SaveSequences( xmlNodePtr node, void *seq ) { int i = 0; sequencer_t *s = (sequencer_t*) seq; for( i = 0; i < MAX_SEQUENCES; i ++ ) { - put_xml_int( node, "TYPE", s->samples[i].type ); - put_xml_int( node, "SEQ_ID", s->samples[i].sample_id ); - } - + put_xml_int( node, "TYPE", s->samples[i].type ); + put_xml_int( node, "SEQ_ID", s->samples[i].sample_id ); + } + } -static void SaveCurrentPlaying( xmlNodePtr node, int id, int mode ) +static void SaveCurrentPlaying( xmlNodePtr node, int id, int mode ) { - put_xml_int( node, "PLAYING_ID", id ); - put_xml_int( node, "PLAYING_MODE", mode ); + put_xml_int( node, "PLAYING_ID", id ); + put_xml_int( node, "PLAYING_MODE", mode ); } void CreateSample(xmlNodePtr node, sample_info * sample, void *font) { xmlNodePtr childnode; - put_xml_int( node, XMLTAG_SAMPLEID, sample->sample_id ); - put_xml_int( node, XMLTAG_CHAIN_ENABLED, sample->effect_toggle ); + put_xml_int( node, XMLTAG_SAMPLEID, sample->sample_id ); + put_xml_int( node, XMLTAG_CHAIN_ENABLED, sample->effect_toggle ); - if(sample->edit_list_file) - { - put_xml_str( node, XMLTAG_EDIT_LIST_FILE, sample->edit_list_file ); - } + if(sample->edit_list_file) + { + put_xml_str( node, XMLTAG_EDIT_LIST_FILE, sample->edit_list_file ); + } - put_xml_str( node, XMLTAG_SAMPLEDESCR, sample->descr ); + put_xml_str( node, XMLTAG_SAMPLEDESCR, sample->descr ); put_xml_int( node, XMLTAG_FIRSTFRAME, sample->first_frame ); - put_xml_int( node, XMLTAG_LASTFRAME, sample->last_frame ); - put_xml_int( node, XMLTAG_BOGUSVIDEO, sample->play_length ); - put_xml_int( node, XMLTAG_SPEED, sample->speed ); - put_xml_int( node, XMLTAG_FRAMEDUP, sample->dup ); - put_xml_int( node, XMLTAG_LOOPTYPE, sample->looptype ); - put_xml_int( node, XMLTAG_MAXLOOPS, sample->max_loops ); + put_xml_int( node, XMLTAG_LASTFRAME, sample->last_frame ); + put_xml_int( node, XMLTAG_BOGUSVIDEO, sample->play_length ); + put_xml_int( node, XMLTAG_SPEED, sample->speed ); + put_xml_int( node, XMLTAG_FRAMEDUP, sample->dup ); + put_xml_int( node, XMLTAG_LOOPTYPE, sample->looptype ); + put_xml_int( node, XMLTAG_MAXLOOPS, sample->max_loops ); put_xml_int( node, XMLTAG_NEXTSAMPLE, sample->next_sample_id ); put_xml_int( node, XMLTAG_DEPTH, sample->depth ); - put_xml_int( node, XMLTAG_PLAYMODE, sample->playmode ); - put_xml_int( node, XMLTAG_VOL, sample->audio_volume ); - put_xml_int( node, XMLTAG_MARKERSTART, sample->marker_start ); + put_xml_int( node, XMLTAG_PLAYMODE, sample->playmode ); + put_xml_int( node, XMLTAG_VOL, sample->audio_volume ); + put_xml_int( node, XMLTAG_MARKERSTART, sample->marker_start ); put_xml_int( node, XMLTAG_MARKEREND, sample->marker_end ); - put_xml_int( node, XMLTAG_FADER_ACTIVE, sample->fader_active ); - put_xml_int( node, XMLTAG_FADE_METHOD, sample->fade_method ); - put_xml_int( node, XMLTAG_FADE_ALPHA, sample->fade_alpha ); - put_xml_int( node, XMLTAG_FADE_ENTRY, sample->fade_entry ); - put_xml_int( node, XMLTAG_FADER_INC, sample->fader_inc ); - put_xml_int( node, XMLTAG_FADER_VAL, sample->fader_val ); - put_xml_int( node, XMLTAG_FADER_DIRECTION, sample->fader_direction ); - put_xml_int( node, XMLTAG_LASTENTRY, sample->selected_entry ); - put_xml_int( node, "subrender", sample->subrender ); + put_xml_int( node, XMLTAG_FADER_ACTIVE, sample->fader_active ); + put_xml_int( node, XMLTAG_FADE_METHOD, sample->fade_method ); + put_xml_int( node, XMLTAG_FADE_ALPHA, sample->fade_alpha ); + put_xml_int( node, XMLTAG_FADE_ENTRY, sample->fade_entry ); + put_xml_int( node, XMLTAG_FADER_INC, sample->fader_inc ); + put_xml_int( node, XMLTAG_FADER_VAL, sample->fader_val ); + put_xml_int( node, XMLTAG_FADER_DIRECTION, sample->fader_direction ); + put_xml_int( node, XMLTAG_LASTENTRY, sample->selected_entry ); + put_xml_int( node, "subrender", sample->subrender ); vj_font_xml_pack( node, font ); @@ -3333,46 +3338,46 @@ void CreateSample(xmlNodePtr node, sample_info * sample, void *font) * writes all sample info to a file. * ****************************************************************************************************/ -static int sample_write_edl(sample_info *sample) +static int sample_write_edl(sample_info *sample) { - editlist *edl = sample->edit_list; - if(edl) - { - if(vj_el_write_editlist( sample->edit_list_file, - sample->first_frame, - sample->last_frame, - edl )) - veejay_msg(VEEJAY_MSG_DEBUG, "Saved EDL '%s' of sample %d", - sample->edit_list_file, sample->sample_id ); - return 1; - } - else - { - veejay_msg(VEEJAY_MSG_ERROR, "Sample %d has no EDL", sample->sample_id ); - } - return 0; + editlist *edl = sample->edit_list; + if(edl) + { + if(vj_el_write_editlist( sample->edit_list_file, + sample->first_frame, + sample->last_frame, + edl )) + veejay_msg(VEEJAY_MSG_DEBUG, "Saved EDL '%s' of sample %d", + sample->edit_list_file, sample->sample_id ); + return 1; + } + else + { + veejay_msg(VEEJAY_MSG_ERROR, "Sample %d has no EDL", sample->sample_id ); + } + return 0; } -static void WriteSubtitles( sample_info *next_sample, void *font, char *file ) +static void WriteSubtitles( sample_info *next_sample, void *font, char *file ) { - char tmp[512]; + char tmp[512]; - void *d = vj_font_get_dict( font ); + void *d = vj_font_get_dict( font ); - sprintf(tmp, "%s-SUB-%d.srt", file,next_sample->sample_id ); - - vj_font_set_dict( font, next_sample->dict ); + sprintf(tmp, "%s-SUB-%d.srt", file,next_sample->sample_id ); + + vj_font_set_dict( font, next_sample->dict ); - vj_font_save_srt( font, tmp ); + vj_font_save_srt( font, tmp ); - vj_font_set_dict( font, d ); + vj_font_set_dict( font, d ); } int sample_writeToFile(char *sampleFile, void *vp,void *seq, void *font, int id, int mode) { int i; - const char *encoding = "UTF-8"; - xmlChar *version = xmlCharStrdup("1.0"); + const char *encoding = "UTF-8"; + xmlChar *version = xmlCharStrdup("1.0"); sample_info *next_sample; xmlDocPtr doc; xmlNodePtr rootnode, childnode; @@ -3385,23 +3390,23 @@ int sample_writeToFile(char *sampleFile, void *vp,void *seq, void *font, int id, SaveSequences( childnode, seq ); childnode = xmlNewChild( rootnode, NULL, (const xmlChar*) "CURRENT" , NULL ); - + SaveCurrentPlaying( childnode , id, mode ); - int n= sample_highest(); + int n= sample_highest(); for (i = 1; i <= n; i++) { - next_sample = sample_get(i); - if (next_sample) { - if(sample_write_edl( next_sample )) - veejay_msg(VEEJAY_MSG_DEBUG ,"Saved sample %d EDL '%s'", next_sample->sample_id,next_sample->edit_list_file ); - - childnode = xmlNewChild(rootnode, NULL, (const xmlChar *) XMLTAG_SAMPLE, NULL); + next_sample = sample_get(i); + if (next_sample) { + if(sample_write_edl( next_sample )) + veejay_msg(VEEJAY_MSG_DEBUG ,"Saved sample %d EDL '%s'", next_sample->sample_id,next_sample->edit_list_file ); + + childnode = xmlNewChild(rootnode, NULL, (const xmlChar *) XMLTAG_SAMPLE, NULL); WriteSubtitles( next_sample,font, sampleFile ); - CreateSample(childnode, next_sample, font); - - } + CreateSample(childnode, next_sample, font); + + } } int max = vj_tag_highest_valid_id(); @@ -3409,12 +3414,12 @@ int sample_writeToFile(char *sampleFile, void *vp,void *seq, void *font, int id, for( i = 1; i <= max; i ++ ) { childnode = xmlNewChild(rootnode,NULL,(const xmlChar*) "stream", NULL ); - tag_writeStream( sampleFile, i, childnode, font ,vp); + tag_writeStream( sampleFile, i, childnode, font ,vp); } xmlSaveFormatFileEnc( sampleFile, doc, encoding, 1 ); xmlFreeDoc(doc); - xmlFree(version); + xmlFree(version); return 1; } diff --git a/veejay-current/veejay-server/libstream/vj-tag.c b/veejay-current/veejay-server/libstream/vj-tag.c index e5b323aa..dff656b4 100644 --- a/veejay-current/veejay-server/libstream/vj-tag.c +++ b/veejay-current/veejay-server/libstream/vj-tag.c @@ -82,13 +82,13 @@ extern int cali_prepare( void *ed, double meanY, double meanU, double meanV, uin typedef struct { - uint8_t *data; - uint8_t *bf; - uint8_t *lf; - uint8_t *mf; - int uv_len; - int len; - double mean[3]; + uint8_t *data; + uint8_t *bf; + uint8_t *lf; + uint8_t *mf; + int uv_len; + int len; + double mean[3]; } cali_tag_t; #define CALI_DARK 0 @@ -97,51 +97,51 @@ typedef struct #define CALI_BUF 4 #define CALI_MFLAT 3 -static uint8_t *cali_get(vj_tag *tag, int type, int len, int uv_len ) { - uint8_t *p = tag->blackframe; - switch(type) { - case CALI_DARK: - return p; //@ start of dark current - case CALI_LIGHT: - return p + (len + (2*uv_len)); //@ start of light frame - case CALI_FLAT: - return p + (2*(len + (2*uv_len))); //@ start of master frame - case CALI_MFLAT: - return p + (3*(len + (2*uv_len))); //@ processing buffer - case CALI_BUF: - return p + (4*(len + (2*uv_len))); - } - return NULL; +static uint8_t *cali_get(vj_tag *tag, int type, int len, int uv_len ) { + uint8_t *p = tag->blackframe; + switch(type) { + case CALI_DARK: + return p; //@ start of dark current + case CALI_LIGHT: + return p + (len + (2*uv_len)); //@ start of light frame + case CALI_FLAT: + return p + (2*(len + (2*uv_len))); //@ start of master frame + case CALI_MFLAT: + return p + (3*(len + (2*uv_len))); //@ processing buffer + case CALI_BUF: + return p + (4*(len + (2*uv_len))); + } + return NULL; } static uint8_t *_temp_buffer[4]={NULL,NULL,NULL,NULL}; static VJFrame _tmp; -void vj_tag_free(void) +void vj_tag_free(void) { - int i; - for( i = 0; i < 3 ; i ++ ) - { - if( _temp_buffer[i] ) - free( _temp_buffer[i] ); - _temp_buffer[i] = NULL; - } - - vj_tag_close_all(); + int i; + for( i = 0; i < 3 ; i ++ ) + { + if( _temp_buffer[i] ) + free( _temp_buffer[i] ); + _temp_buffer[i] = NULL; + } + + vj_tag_close_all(); - if( vj_tag_input) - free(vj_tag_input); + if( vj_tag_input) + free(vj_tag_input); - if( TagHash ) { - hash_destroy( TagHash ); - TagHash = NULL; - } + if( TagHash ) { + hash_destroy( TagHash ); + TagHash = NULL; + } } int vj_tag_get_last_tag() { - return last_added_tag; + return last_added_tag; } int vj_tag_highest() @@ -152,24 +152,24 @@ int vj_tag_highest() int vj_tag_highest_valid_id() { - int id = this_tag_id; - while(!vj_tag_exists(id) ) { - id --; - if( id <= 0 ) - break; - } + int id = this_tag_id; + while(!vj_tag_exists(id) ) { + id --; + if( id <= 0 ) + break; + } - return id; + return id; } unsigned int vj_tag_size() { // return this_tag_id; - return (unsigned int) hash_count( TagHash ); + return (unsigned int) hash_count( TagHash ); } void vj_tag_set_veejay_t(void *info) { - _tag_info = (veejay_t*)info; + _tag_info = (veejay_t*)info; } static hash_val_t int_tag_hash(const void *key) @@ -180,131 +180,131 @@ static hash_val_t int_tag_hash(const void *key) static int int_tag_compare(const void *key1, const void *key2) { #ifdef ARCH_X86_64 - return ((uint64_t)key1 < (uint64_t) key2 ? -1 : - ((uint64_t)key1 < (uint64_t) key2 ? 1 : 0 ) - ); + return ((uint64_t)key1 < (uint64_t) key2 ? -1 : + ((uint64_t)key1 < (uint64_t) key2 ? 1 : 0 ) + ); #else return ((uint32_t) key1 < (uint32_t) key2 ? -1 : - ((uint32_t) key1 > (uint32_t) key2 ? 1 : 0) - ); + ((uint32_t) key1 > (uint32_t) key2 ? 1 : 0) + ); #endif } vj_tag *vj_tag_get(int id) { if (id <= 0 || id > this_tag_id || TagHash == NULL) { - return NULL; + return NULL; } #ifdef ARCH_X86_64 - uint64_t tid = (uint64_t) id; + uint64_t tid = (uint64_t) id; #else - uint32_t tid = (uint32_t) id; + uint32_t tid = (uint32_t) id; #endif - if( tag_cache[ id ] == NULL ) { - hnode_t *tag_node = hash_lookup(TagHash, (void *) tid); - if (!tag_node) { - return NULL; - } - tag_cache[ id ] = hnode_get(tag_node); - } - return (vj_tag*) tag_cache[id]; + if( tag_cache[ id ] == NULL ) { + hnode_t *tag_node = hash_lookup(TagHash, (void *) tid); + if (!tag_node) { + return NULL; + } + tag_cache[ id ] = hnode_get(tag_node); + } + return (vj_tag*) tag_cache[id]; } int vj_tag_put(vj_tag * tag) { hnode_t *tag_node; if (!tag) - return 0; + return 0; tag_node = hnode_create(tag); if (!tag_node) - return 0; + return 0; #ifdef ARCH_X86_64 - uint64_t tid = (uint64_t) tag->id; + uint64_t tid = (uint64_t) tag->id; #else - uint32_t tid = (uint32_t) tag->id; + uint32_t tid = (uint32_t) tag->id; #endif if (!vj_tag_exists(tag->id)) { - hash_insert(TagHash, tag_node, (void *) tid); + hash_insert(TagHash, tag_node, (void *) tid); } else { - hnode_put(tag_node, (void *) tid); + hnode_put(tag_node, (void *) tid); } return 1; } -int vj_tag_num_devices() +int vj_tag_num_devices() { #ifdef HAVE_V4L2 - return v4l2_num_devices(); + return v4l2_num_devices(); #else - return 0; + return 0; #endif } char *vj_tag_scan_devices( void ) { - const char *default_str = "000000"; - int i; - int len = 0; - char **device_list = NULL; + const char *default_str = "000000"; + int i; + int len = 0; + char **device_list = NULL; #ifdef HAVE_V4L2 - device_list = v4l2_get_device_list(); + device_list = v4l2_get_device_list(); #endif - if(device_list==NULL) - return strdup(default_str); + if(device_list==NULL) + return strdup(default_str); - for( i = 0; device_list[i] != NULL ;i++ ) - len += strlen( device_list[i] ); + for( i = 0; device_list[i] != NULL ;i++ ) + len += strlen( device_list[i] ); - char *n = (char*) vj_calloc(sizeof(char) * (16 + len) ); - char *p = n + 6; + char *n = (char*) vj_calloc(sizeof(char) * (16 + len) ); + char *p = n + 6; - sprintf(n, "%06d", len ); - for( i = 0; device_list[i] != NULL ;i++ ) - { - char tmp[1024]; - snprintf( tmp, sizeof(tmp)-1, "%s", device_list[i] ); - int str_len = strlen(tmp); - strncpy( p, tmp, str_len ); - p += str_len; - free(device_list[i]); - } - free(device_list); - return n; + sprintf(n, "%06d", len ); + for( i = 0; device_list[i] != NULL ;i++ ) + { + char tmp[1024]; + snprintf( tmp, sizeof(tmp)-1, "%s", device_list[i] ); + int str_len = strlen(tmp); + strncpy( p, tmp, str_len ); + p += str_len; + free(device_list[i]); + } + free(device_list); + return n; } -int vj_tag_get_width() { - return vj_tag_input->width; +int vj_tag_get_width() { + return vj_tag_input->width; } -int vj_tag_get_height() { - return vj_tag_input->height; +int vj_tag_get_height() { + return vj_tag_input->height; } -int vj_tag_get_uvlen() { - return vj_tag_input->uv_len; +int vj_tag_get_uvlen() { + return vj_tag_input->uv_len; } int vj_tag_init(int width, int height, int pix_fmt, int video_driver) { TagHash = hash_create(HASHCOUNT_T_MAX, int_tag_compare, int_tag_hash); if (!TagHash || width <= 0 || height <= 0) - return -1; - - vj_tag_input = (vj_tag_data *) vj_malloc(sizeof(vj_tag_data)); + return -1; + + vj_tag_input = (vj_tag_data *) vj_malloc(sizeof(vj_tag_data)); - if (vj_tag_input == NULL) { - veejay_msg(VEEJAY_MSG_ERROR, "Error Allocating Memory for stream data\n"); - return -1; + if (vj_tag_input == NULL) { + veejay_msg(VEEJAY_MSG_ERROR, "Error Allocating Memory for stream data\n"); + return -1; } - int format = get_ffmpeg_pixfmt(pix_fmt); + int format = get_ffmpeg_pixfmt(pix_fmt); - VJFrame *tmp = yuv_yuv_template( NULL,NULL,NULL, width,height, format ); - if( tmp == NULL ) { - return -1; - } + VJFrame *tmp = yuv_yuv_template( NULL,NULL,NULL, width,height, format ); + if( tmp == NULL ) { + return -1; + } - vj_tag_input->width = tmp->width; + vj_tag_input->width = tmp->width; vj_tag_input->height = tmp->height; vj_tag_input->depth = 3; vj_tag_input->pix_fmt = pix_fmt; @@ -316,23 +316,23 @@ int vj_tag_init(int width, int height, int pix_fmt, int video_driver) veejay_memset( &_tmp, 0, sizeof(VJFrame)); - veejay_memcpy( &_tmp, tmp, sizeof(VJFrame)); - + veejay_memcpy( &_tmp, tmp, sizeof(VJFrame)); + _temp_buffer[0] = (uint8_t*) vj_calloc(sizeof(uint8_t)* tmp->len); _temp_buffer[1] = (uint8_t*) vj_calloc(sizeof(uint8_t)* tmp->len); _temp_buffer[2] = (uint8_t*) vj_calloc(sizeof(uint8_t)* tmp->len); - veejay_memset( tag_cache,0,sizeof(tag_cache)); - veejay_memset( avail_tag, 0, sizeof(avail_tag)); + veejay_memset( tag_cache,0,sizeof(tag_cache)); + veejay_memset( avail_tag, 0, sizeof(avail_tag)); - char *v4l2threading = getenv( "VEEJAY_V4L2_NO_THREADING" ); - if( v4l2threading ) { - no_v4l2_threads_ = atoi(v4l2threading); - } - else { - veejay_msg(VEEJAY_MSG_DEBUG, "env VEEJAY_V4L2_NO_THREADING=[0|1] not set"); - } + char *v4l2threading = getenv( "VEEJAY_V4L2_NO_THREADING" ); + if( v4l2threading ) { + no_v4l2_threads_ = atoi(v4l2threading); + } + else { + veejay_msg(VEEJAY_MSG_DEBUG, "env VEEJAY_V4L2_NO_THREADING=[0|1] not set"); + } - free(tmp); + free(tmp); return 0; } @@ -343,480 +343,480 @@ void vj_tag_record_init(int w, int h) static int _vj_tag_new_clone(vj_tag *tag, int which_id ) { - vj_tag *tag2 = vj_tag_get(which_id); - if( tag2 == NULL ) { - return 0; - } + vj_tag *tag2 = vj_tag_get(which_id); + if( tag2 == NULL ) { + return 0; + } - char tmp[128]; - snprintf(tmp,sizeof(tmp),"T%d", which_id ); - tag->extra = strdup(tmp); + char tmp[128]; + snprintf(tmp,sizeof(tmp),"T%d", which_id ); + tag->extra = strdup(tmp); - tag2->clone ++; + tag2->clone ++; - tag->active = 1; - tag->video_channel = which_id; - return 1; + tag->active = 1; + tag->video_channel = which_id; + return 1; } int _vj_tag_new_net(vj_tag *tag, int stream_nr, int w, int h,int f, char *host, int port, int p, int type ) { - char tmp[1024]; - if( !host ) { - veejay_msg(0, "No hostname given"); - return 0; - } - if( port <= 0 ) { - veejay_msg(0, "Port number %d invalid", port ); - return 0; - } - if(stream_nr < 0 || stream_nr > VJ_TAG_MAX_STREAM_IN) - { - veejay_msg(0, "Unable to create more network streams (%d reached)", - VJ_TAG_MAX_STREAM_IN ); - return 0; - } + char tmp[1024]; + if( !host ) { + veejay_msg(0, "No hostname given"); + return 0; + } + if( port <= 0 ) { + veejay_msg(0, "Port number %d invalid", port ); + return 0; + } + if(stream_nr < 0 || stream_nr > VJ_TAG_MAX_STREAM_IN) + { + veejay_msg(0, "Unable to create more network streams (%d reached)", + VJ_TAG_MAX_STREAM_IN ); + return 0; + } -/* vj_tag_input->net[stream_nr] = vj_client_alloc(w,h,f); - v = vj_tag_input->net[stream_nr]; - if(!v) - { - veejay_msg(0, "Memory allocation error while creating network stream"); - return 0; - }*/ - snprintf(tmp,sizeof(tmp), "%s %d", host, port ); - tag->extra = (void*) strdup(tmp); +/* vj_tag_input->net[stream_nr] = vj_client_alloc(w,h,f); + v = vj_tag_input->net[stream_nr]; + if(!v) + { + veejay_msg(0, "Memory allocation error while creating network stream"); + return 0; + }*/ + snprintf(tmp,sizeof(tmp), "%s %d", host, port ); + tag->extra = (void*) strdup(tmp); - if( tag->socket_ready == 0 ) - { - tag->socket_frame = (uint8_t*) vj_calloc(sizeof(uint8_t) * RUP8( w * h * 3)); - tag->socket_len = w * h * 3; - if(!tag->socket_frame) - { - veejay_msg(VEEJAY_MSG_ERROR, "Insufficient error to allocate memory for Network Stream"); - return 0; - } - tag->socket_ready = 1; - } + if( tag->socket_ready == 0 ) + { + tag->socket_frame = (uint8_t*) vj_calloc(sizeof(uint8_t) * RUP8( w * h * 3)); + tag->socket_len = w * h * 3; + if(!tag->socket_frame) + { + veejay_msg(VEEJAY_MSG_ERROR, "Insufficient error to allocate memory for Network Stream"); + return 0; + } + tag->socket_ready = 1; + } - return 1; + return 1; } static int _vj_tag_new_unicap( vj_tag * tag, int stream_nr, int width, int height, int device_num, - char norm, int palette,int pixfmt, int freq, int channel, int has_composite, int driver) + char norm, int palette,int pixfmt, int freq, int channel, int has_composite, int driver) { - char refname[100]; - if (stream_nr < 0 || stream_nr > vj_tag_num_devices()) - { - return 0; - } - - snprintf(refname,sizeof(refname), "/dev/video%d",device_num ); // freq->device_num - tag->capture_type = driver; - veejay_msg(VEEJAY_MSG_INFO, "Open capture device with %s", - ( driver == 1 ? "v4l[x]" : "Unicap" ) ); - if( tag->capture_type == 1 ) { + char refname[100]; + if (stream_nr < 0 || stream_nr > vj_tag_num_devices()) + { + return 0; + } + + snprintf(refname,sizeof(refname), "/dev/video%d",device_num ); // freq->device_num + tag->capture_type = driver; + veejay_msg(VEEJAY_MSG_INFO, "Open capture device with %s", + ( driver == 1 ? "v4l[x]" : "Unicap" ) ); + if( tag->capture_type == 1 ) { #ifdef HAVE_V4L2 - if( no_v4l2_threads_ ) { - vj_tag_input->unicap[stream_nr] = v4l2open( refname, channel, palette,width,height, - _tag_info->dummy->fps,_tag_info->dummy->norm ); - } else { - vj_tag_input->unicap[stream_nr] = v4l2_thread_new( refname, channel,palette,width,height, - _tag_info->dummy->fps,_tag_info->dummy->norm ); - } - if( !vj_tag_input->unicap[stream_nr] ) { - veejay_msg(0, "Unable to open device %d (%s)",device_num, refname ); - return 0; - } - snprintf(refname,sizeof(refname), "%d", channel ); - tag->extra = strdup(refname); + if( no_v4l2_threads_ ) { + vj_tag_input->unicap[stream_nr] = v4l2open( refname, channel, palette,width,height, + _tag_info->dummy->fps,_tag_info->dummy->norm ); + } else { + vj_tag_input->unicap[stream_nr] = v4l2_thread_new( refname, channel,palette,width,height, + _tag_info->dummy->fps,_tag_info->dummy->norm ); + } + if( !vj_tag_input->unicap[stream_nr] ) { + veejay_msg(0, "Unable to open device %d (%s)",device_num, refname ); + return 0; + } + snprintf(refname,sizeof(refname), "%d", channel ); + tag->extra = strdup(refname); #else - veejay_msg(0,"No support for video capture built-in"); + veejay_msg(0,"No support for video capture built-in"); #endif - return 1; - } - - return 1; + return 1; + } + + return 1; } #ifdef USE_GDK_PIXBUF static int _vj_tag_new_picture( vj_tag *tag, int stream_nr, int width, int height, float fps) { - if(stream_nr < 0 || stream_nr > VJ_TAG_MAX_STREAM_IN) return 0; - vj_picture *p = NULL; + if(stream_nr < 0 || stream_nr > VJ_TAG_MAX_STREAM_IN) return 0; + vj_picture *p = NULL; - if( vj_picture_probe( tag->source_name ) == 0 ) - return 0; + if( vj_picture_probe( tag->source_name ) == 0 ) + return 0; - p = (vj_picture*) vj_malloc(sizeof(vj_picture)); - if(!p) - return 0; - memset(p, 0, sizeof(vj_picture)); + p = (vj_picture*) vj_malloc(sizeof(vj_picture)); + if(!p) + return 0; + memset(p, 0, sizeof(vj_picture)); - vj_tag_input->picture[stream_nr] = p; + vj_tag_input->picture[stream_nr] = p; - veejay_msg(VEEJAY_MSG_INFO, "Opened [%s] , %d x %d @ %2.2f fps ", - tag->source_name, - width, height, fps ); + veejay_msg(VEEJAY_MSG_INFO, "Opened [%s] , %d x %d @ %2.2f fps ", + tag->source_name, + width, height, fps ); - return 1; + return 1; } #endif -uint8_t *vj_tag_get_cali_buffer(int t1, int type, int *total, int *plane, int *planeuv) +uint8_t *vj_tag_get_cali_buffer(int t1, int type, int *total, int *plane, int *planeuv) { - vj_tag *tag = vj_tag_get(t1); - if(!tag) - return NULL; - - int w = vj_tag_input->width; - int h = vj_tag_input->height; - int len = (w*h); - int uv_len = vj_tag_input->uv_len; + vj_tag *tag = vj_tag_get(t1); + if(!tag) + return NULL; + + int w = vj_tag_input->width; + int h = vj_tag_input->height; + int len = (w*h); + int uv_len = vj_tag_input->uv_len; - *total = len + (2*uv_len); - *plane = len; - *planeuv= uv_len; - return cali_get(tag,type,w*h,uv_len); + *total = len + (2*uv_len); + *plane = len; + *planeuv= uv_len; + return cali_get(tag,type,w*h,uv_len); } -static int cali_write_file( char *file, vj_tag *tag , editlist *el) +static int cali_write_file( char *file, vj_tag *tag , editlist *el) { - FILE *f = fopen( file, "w" ); - if(!f) { - veejay_msg(VEEJAY_MSG_ERROR, "Unable to open '%s' for writing",file ); - return 0; - } + FILE *f = fopen( file, "w" ); + if(!f) { + veejay_msg(VEEJAY_MSG_ERROR, "Unable to open '%s' for writing",file ); + return 0; + } - char header[256]; - int w = vj_tag_input->width; - int h = vj_tag_input->height; - int len = (w*h); - int uv_len = vj_tag_input->uv_len; + char header[256]; + int w = vj_tag_input->width; + int h = vj_tag_input->height; + int len = (w*h); + int uv_len = vj_tag_input->uv_len; - char fileheader[256]; + char fileheader[256]; - snprintf(header,sizeof(header),"%08d %08d %08d %08d %g %g %g", - w, - h, - len, - uv_len, - tag->mean[0], - tag->mean[1], - tag->mean[2] ); + snprintf(header,sizeof(header),"%08d %08d %08d %08d %g %g %g", + w, + h, + len, + uv_len, + tag->mean[0], + tag->mean[1], + tag->mean[2] ); - int offset = 4 + strlen(header); + int offset = 4 + strlen(header); - snprintf(fileheader,sizeof(fileheader), "%03d %s",offset,header ); + snprintf(fileheader,sizeof(fileheader), "%03d %s",offset,header ); - if( fwrite( fileheader,strlen(fileheader),1, f ) <= 0 ) { - veejay_msg(0 ,"Error while writing file header."); - return 0; - } - int n = 0; + if( fwrite( fileheader,strlen(fileheader),1, f ) <= 0 ) { + veejay_msg(0 ,"Error while writing file header."); + return 0; + } + int n = 0; - //@ write dark current frame - if( (n=fwrite( tag->blackframe,sizeof(uint8_t), len + uv_len + uv_len, f )) <= 0 ) { - goto CALIERR; - } - if( n != (len+uv_len + uv_len)) - goto CALIERR; + //@ write dark current frame + if( (n=fwrite( tag->blackframe,sizeof(uint8_t), len + uv_len + uv_len, f )) <= 0 ) { + goto CALIERR; + } + if( n != (len+uv_len + uv_len)) + goto CALIERR; - uint8_t *lightframe = cali_get(tag,CALI_LIGHT,w*h,uv_len); - if( (n=fwrite( lightframe,sizeof(uint8_t), len + uv_len + uv_len, f )) <= 0 ) { - goto CALIERR; - } - if( n != (len+uv_len+uv_len)) - goto CALIERR; + uint8_t *lightframe = cali_get(tag,CALI_LIGHT,w*h,uv_len); + if( (n=fwrite( lightframe,sizeof(uint8_t), len + uv_len + uv_len, f )) <= 0 ) { + goto CALIERR; + } + if( n != (len+uv_len+uv_len)) + goto CALIERR; - uint8_t *masterframe = cali_get(tag,CALI_FLAT,w*h,uv_len); - if( (n=fwrite( masterframe, sizeof(uint8_t), len + uv_len + uv_len, f )) <= 0 ) { - goto CALIERR; - } - if( n != (len+uv_len+uv_len)) - goto CALIERR; + uint8_t *masterframe = cali_get(tag,CALI_FLAT,w*h,uv_len); + if( (n=fwrite( masterframe, sizeof(uint8_t), len + uv_len + uv_len, f )) <= 0 ) { + goto CALIERR; + } + if( n != (len+uv_len+uv_len)) + goto CALIERR; - fclose(f); + fclose(f); - return 1; + return 1; CALIERR: - fclose(f); - veejay_msg(0, "File write error."); + fclose(f); + veejay_msg(0, "File write error."); - - return 0; + + return 0; } -int vj_tag_cali_write_file( int t1, char *name, editlist *el ) { - vj_tag *tag = vj_tag_get(t1); - if(!tag) - return 0; - if(tag->source_type != VJ_TAG_TYPE_V4L) { - veejay_msg(0, "Stream is not of type Video4Linux"); - return 0; - } - if(tag->noise_suppression == 0 ) { - veejay_msg(0, "Stream %d is not yet calibrated.", t1 ); - return 0; - } - if(tag->noise_suppression != V4L_BLACKFRAME_PROCESS ) { - veejay_msg(0, "Please finish calibration first."); - return 0; - } - if(! cali_write_file( name, tag, el ) ) { - return 0; - } - return 1; +int vj_tag_cali_write_file( int t1, char *name, editlist *el ) { + vj_tag *tag = vj_tag_get(t1); + if(!tag) + return 0; + if(tag->source_type != VJ_TAG_TYPE_V4L) { + veejay_msg(0, "Stream is not of type Video4Linux"); + return 0; + } + if(tag->noise_suppression == 0 ) { + veejay_msg(0, "Stream %d is not yet calibrated.", t1 ); + return 0; + } + if(tag->noise_suppression != V4L_BLACKFRAME_PROCESS ) { + veejay_msg(0, "Please finish calibration first."); + return 0; + } + if(! cali_write_file( name, tag, el ) ) { + return 0; + } + return 1; } -static int cali_read_file( cali_tag_t *p, char *file,int w, int h ) +static int cali_read_file( cali_tag_t *p, char *file,int w, int h ) { - FILE *f = fopen( file , "r" ); - if( f == NULL ) { - return 0; - } + FILE *f = fopen( file , "r" ); + if( f == NULL ) { + return 0; + } - char buf[256]; + char buf[256]; - char *header = fgets( buf, sizeof(buf), f ); - int len = 0; - int uv_len = 0; - int offset = 0; + char *header = fgets( buf, sizeof(buf), f ); + int len = 0; + int uv_len = 0; + int offset = 0; - int Euv_len = vj_tag_input->uv_len; + int Euv_len = vj_tag_input->uv_len; - double mean[3]; + double mean[3]; - if(sscanf(header, "%3d %8d %8d %8d %8d %lf %lf %lf",&offset, &w,&h,&len,&uv_len, - &mean[0],&mean[1],&mean[2] ) != 8 ) - { - veejay_msg(VEEJAY_MSG_ERROR, "Invalid header."); - return 0; - } + if(sscanf(header, "%3d %8d %8d %8d %8d %lf %lf %lf",&offset, &w,&h,&len,&uv_len, + &mean[0],&mean[1],&mean[2] ) != 8 ) + { + veejay_msg(VEEJAY_MSG_ERROR, "Invalid header."); + return 0; + } - if( len != (w*h)) { - veejay_msg(VEEJAY_MSG_ERROR, "Invalid length for plane Y"); - fclose(f); - return 0; - } + if( len != (w*h)) { + veejay_msg(VEEJAY_MSG_ERROR, "Invalid length for plane Y"); + fclose(f); + return 0; + } - if( Euv_len != uv_len ) { - veejay_msg(VEEJAY_MSG_ERROR, "Invalid length for planes UV"); - fclose(f); - return 0; - } + if( Euv_len != uv_len ) { + veejay_msg(VEEJAY_MSG_ERROR, "Invalid length for planes UV"); + fclose(f); + return 0; + } - p->data = (uint8_t*) vj_malloc(sizeof(uint8_t) * 3 * (len+uv_len+uv_len)); - p->bf = p->data; - p->lf = p->data + (len + (2*uv_len)); - p->mf = p->lf + (len + (2*uv_len)); + p->data = (uint8_t*) vj_malloc(sizeof(uint8_t) * 3 * (len+uv_len+uv_len)); + p->bf = p->data; + p->lf = p->data + (len + (2*uv_len)); + p->mf = p->lf + (len + (2*uv_len)); - p->uv_len = uv_len; - p->len = len; - p->mean[0] = mean[0]; - p->mean[1] = mean[1]; - p->mean[2] = mean[2]; + p->uv_len = uv_len; + p->len = len; + p->mean[0] = mean[0]; + p->mean[1] = mean[1]; + p->mean[2] = mean[2]; - veejay_memset( p->data,0, 3 * (len+(2*uv_len))); + veejay_memset( p->data,0, 3 * (len+(2*uv_len))); - int n = 0; + int n = 0; - if( (n=fread( p->bf, 1, (len+2*uv_len), f )) <= 0 ) { - goto CALIREADERR; - } + if( (n=fread( p->bf, 1, (len+2*uv_len), f )) <= 0 ) { + goto CALIREADERR; + } - if( (n=fread( p->lf,1, (len+2*uv_len), f )) <= 0 ) { - goto CALIREADERR; - } + if( (n=fread( p->lf,1, (len+2*uv_len), f )) <= 0 ) { + goto CALIREADERR; + } - if( (n=fread( p->mf,1, (len+2*uv_len),f)) <= 0 ) { - goto CALIREADERR; - } + if( (n=fread( p->mf,1, (len+2*uv_len),f)) <= 0 ) { + goto CALIREADERR; + } - veejay_msg(VEEJAY_MSG_INFO, "Image calibration data loaded."); + veejay_msg(VEEJAY_MSG_INFO, "Image calibration data loaded."); - return 1; + return 1; CALIREADERR: - veejay_msg(VEEJAY_MSG_ERROR, "Only got %d bytes.",n); - return 0; + veejay_msg(VEEJAY_MSG_ERROR, "Only got %d bytes.",n); + return 0; } -static int _vj_tag_new_cali( vj_tag *tag, int stream_nr, int w, int h ) +static int _vj_tag_new_cali( vj_tag *tag, int stream_nr, int w, int h ) { - if(stream_nr < 0 || stream_nr > VJ_TAG_MAX_STREAM_IN) return 0; - - cali_tag_t *p = NULL; + if(stream_nr < 0 || stream_nr > VJ_TAG_MAX_STREAM_IN) return 0; + + cali_tag_t *p = NULL; - p = (cali_tag_t*) vj_malloc(sizeof(cali_tag_t)); - if(!p) - return 0; - memset(p, 0, sizeof(cali_tag_t)); + p = (cali_tag_t*) vj_malloc(sizeof(cali_tag_t)); + if(!p) + return 0; + memset(p, 0, sizeof(cali_tag_t)); - if(!cali_read_file( p, tag->source_name,w,h ) ) { - veejay_msg(VEEJAY_MSG_ERROR, "Failed to find dark frame '%s'", tag->source_name ); - free(p); - return 0; - } - - vj_tag_input->cali[stream_nr] = (void*)p; - - veejay_msg(VEEJAY_MSG_INFO, "Image Cailbration files ready."); - - return 1; + if(!cali_read_file( p, tag->source_name,w,h ) ) { + veejay_msg(VEEJAY_MSG_ERROR, "Failed to find dark frame '%s'", tag->source_name ); + free(p); + return 0; + } + + vj_tag_input->cali[stream_nr] = (void*)p; + + veejay_msg(VEEJAY_MSG_INFO, "Image Cailbration files ready."); + + return 1; } -uint8_t *vj_tag_get_cali_data( int t1, int what ) { - vj_tag *tag = vj_tag_get(t1); - if(tag == NULL) - return NULL; - int w = vj_tag_input->width; - int h = vj_tag_input->height; - int uv_len = vj_tag_input->uv_len; - switch(what) { - case 0: - return tag->blackframe; - case 1: - return tag->blackframe + ((w*h)+(2*uv_len)); - case 2: - return tag->blackframe + 2 * ((w*h)+(2*uv_len)); - } - return NULL; +uint8_t *vj_tag_get_cali_data( int t1, int what ) { + vj_tag *tag = vj_tag_get(t1); + if(tag == NULL) + return NULL; + int w = vj_tag_input->width; + int h = vj_tag_input->height; + int uv_len = vj_tag_input->uv_len; + switch(what) { + case 0: + return tag->blackframe; + case 1: + return tag->blackframe + ((w*h)+(2*uv_len)); + case 2: + return tag->blackframe + 2 * ((w*h)+(2*uv_len)); + } + return NULL; } int _vj_tag_new_yuv4mpeg(vj_tag * tag, int stream_nr, int w, int h, float fps) { if (stream_nr < 0 || stream_nr > VJ_TAG_MAX_STREAM_IN) - return 0; + return 0; vj_tag_input->stream[stream_nr] = vj_yuv4mpeg_alloc(w, h, fps, _tag_info->pixel_format); if(vj_tag_input->stream[stream_nr] == NULL) - return 0; + return 0; if(vj_yuv_stream_start_read(vj_tag_input->stream[stream_nr],tag->source_name,w,h ) != 0 ) { - veejay_msg(VEEJAY_MSG_ERROR,"Unable to read from %s",tag->source_name); - vj_yuv4mpeg_free( vj_tag_input->stream[stream_nr] ); - return 0; + veejay_msg(VEEJAY_MSG_ERROR,"Unable to read from %s",tag->source_name); + vj_yuv4mpeg_free( vj_tag_input->stream[stream_nr] ); + return 0; } return 1; } #ifdef SUPPORT_READ_DV2 -int _vj_tag_new_dv1394(vj_tag *tag, int stream_nr, int channel,int quality, editlist *el) +int _vj_tag_new_dv1394(vj_tag *tag, int stream_nr, int channel,int quality, editlist *el) { vj_tag_input->dv1394[stream_nr] = vj_dv1394_init( (void*) el, channel,quality); if(vj_tag_input->dv1394[stream_nr]) { - veejay_msg(VEEJAY_MSG_INFO, "DV1394 ready for capture"); -// vj_dv_decoder_set_audio( vj_tag_input->dv1394[stream_nr], el->has_audio); - return 1; + veejay_msg(VEEJAY_MSG_INFO, "DV1394 ready for capture"); +// vj_dv_decoder_set_audio( vj_tag_input->dv1394[stream_nr], el->has_audio); + return 1; } return 0; } #endif -void *vj_tag_get_dict( int t1 ) +void *vj_tag_get_dict( int t1 ) { #ifdef HAVE_FREETYPE - vj_tag *tag = vj_tag_get(t1); - if(tag) - return tag->dict; + vj_tag *tag = vj_tag_get(t1); + if(tag) + return tag->dict; #endif - return NULL; + return NULL; } -int vj_tag_set_stream_layout( int t1, int stream_id_g, int screen_no_b, int value ) +int vj_tag_set_stream_layout( int t1, int stream_id_g, int screen_no_b, int value ) { - vj_tag *tag = vj_tag_get(t1); - if(!tag) return 0; + vj_tag *tag = vj_tag_get(t1); + if(!tag) return 0; - if( screen_no_b >= 0 ) { - tag->color_b = screen_no_b; - } + if( screen_no_b >= 0 ) { + tag->color_b = screen_no_b; + } - if( stream_id_g > 0 ) { - if( vj_tag_exists(stream_id_g) ) { - tag->color_g = stream_id_g; - } - } + if( stream_id_g > 0 ) { + if( vj_tag_exists(stream_id_g) ) { + tag->color_g = stream_id_g; + } + } - if( value >= 0 ) { - if( value > 7 ) - value = 7; - tag->color_r = value; - } - return 1; + if( value >= 0 ) { + if( value > 7 ) + value = 7; + tag->color_r = value; + } + return 1; } -int vj_tag_generator_set_arg(int t1, int *values) +int vj_tag_generator_set_arg(int t1, int *values) { - vj_tag *tag = vj_tag_get(t1); - if(!tag) - return 0; - if(tag->generator) { - int i; - for( i = 0; i < 16; i ++ ) { - tag->genargs[i] = values[i]; - } - return 1; - } - return 0; + vj_tag *tag = vj_tag_get(t1); + if(!tag) + return 0; + if(tag->generator) { + int i; + for( i = 0; i < 16; i ++ ) { + tag->genargs[i] = values[i]; + } + return 1; + } + return 0; } int vj_tag_generator_get_args(int t1, int *args, int *n_args, int *fx_id) { - vj_tag *tag = vj_tag_get(t1); - if(!tag) - return 0; - if(tag->generator) { - vevo_property_get(tag->generator, "HOST_id", 0, fx_id ); - int i; - int n = plug_instance_get_num_parameters( tag->generator ); - for( i = 0; i < n; i ++ ) { - args[i] = tag->genargs[i]; - } - *n_args = n; + vj_tag *tag = vj_tag_get(t1); + if(!tag) + return 0; + if(tag->generator) { + vevo_property_get(tag->generator, "HOST_id", 0, fx_id ); + int i; + int n = plug_instance_get_num_parameters( tag->generator ); + for( i = 0; i < n; i ++ ) { + args[i] = tag->genargs[i]; + } + *n_args = n; - return 1; - } - return 0; + return 1; + } + return 0; } -int vj_tag_set_stream_color(int t1, int r, int g, int b) +int vj_tag_set_stream_color(int t1, int r, int g, int b) { vj_tag *tag = vj_tag_get(t1); if(!tag) - return 0; - - veejay_msg(VEEJAY_MSG_DEBUG,"Set stream %d color %d,%d,%d",t1, r,g, b ); + return 0; + + veejay_msg(VEEJAY_MSG_DEBUG,"Set stream %d color %d,%d,%d",t1, r,g, b ); tag->color_r = r; tag->color_g = g; tag->color_b = b; /* - if( tag->generator ) { - plug_set_parameter( tag->generator, 0,1,&r ); - plug_set_parameter( tag->generator, 1,1,&g ); - plug_set_parameter( tag->generator, 2,1,&b ); - } + if( tag->generator ) { + plug_set_parameter( tag->generator, 0,1,&r ); + plug_set_parameter( tag->generator, 1,1,&g ); + plug_set_parameter( tag->generator, 2,1,&b ); + } */ return 1; } -int vj_tag_get_stream_color(int t1, int *r, int *g, int *b ) +int vj_tag_get_stream_color(int t1, int *r, int *g, int *b ) { vj_tag *tag = vj_tag_get(t1); if(!tag) - return 0; + return 0; if(tag->source_type != VJ_TAG_TYPE_COLOR) - return 0; + return 0; *r = tag->color_r; *g = tag->color_g; *b = tag->color_b; - return 1; + return 1; } // for network, filename /channel is passed as host/port num @@ -833,66 +833,66 @@ int vj_tag_new(int type, char *filename, int stream_nr, editlist * el, int pix_f vj_tag *tag; if( this_tag_id == 0) - { - this_tag_id = 1; // first tag - } + { + this_tag_id = 1; // first tag + } n = this_tag_id; /* see if we are already using the source */ if( type == VJ_TAG_TYPE_NET || type == VJ_TAG_TYPE_MCAST ) { - if(net_already_opened( filename,n, channel )) - { - veejay_msg(0, "There is already a unicast connection to %s: %d", filename, channel ); - return -1; - } + if(net_already_opened( filename,n, channel )) + { + veejay_msg(0, "There is already a unicast connection to %s: %d", filename, channel ); + return -1; + } } tag = (vj_tag *) vj_calloc(sizeof(vj_tag)); - if(!tag) - { - veejay_msg(0, "Memory allocation error"); - return -1; - } + if(!tag) + { + veejay_msg(0, "Memory allocation error"); + return -1; + } tag->source_name = (char *) vj_calloc(sizeof(char) * SOURCE_NAME_LEN); - if (!tag->source_name) - { - free(tag); - veejay_msg(0, "Memory allocation error"); - return -1; - } + if (!tag->source_name) + { + free(tag); + veejay_msg(0, "Memory allocation error"); + return -1; + } #ifdef ARCH_X86_64 - uint64_t tid = (uint64_t) id; + uint64_t tid = (uint64_t) id; #else - uint32_t tid = (uint32_t) id; + uint32_t tid = (uint32_t) id; #endif /* see if we can reclaim some id */ for(i=0; i <= next_avail_tag; i++) { - if(avail_tag[i] != 0) { - hnode_t *tag_node; - tag_node = hnode_create(tag); - if (!tag_node) - { - veejay_msg(0, "Unable to find available ID"); - free(tag->source_name); - free(tag); - return -1; - } - id = avail_tag[i]; - avail_tag[i] = 0; - hash_insert(TagHash, tag_node, (void *) tid); - break; + if(avail_tag[i] != 0) { + hnode_t *tag_node; + tag_node = hnode_create(tag); + if (!tag_node) + { + veejay_msg(0, "Unable to find available ID"); + free(tag->source_name); + free(tag); + return -1; + } + id = avail_tag[i]; + avail_tag[i] = 0; + hash_insert(TagHash, tag_node, (void *) tid); + break; } } if(id==0) { - tag->id = this_tag_id; - } + tag->id = this_tag_id; + } else { - tag->id = id; - } + tag->id = id; + } - tag->extra = NULL; + tag->extra = NULL; tag->next_id = 0; tag->nframes = 0; tag->video_channel = channel; @@ -913,13 +913,13 @@ int vj_tag_new(int type, char *filename, int stream_nr, editlist * el, int pix_f tag->source = 0; tag->fader_active = 0; tag->fader_val = 0.0; - tag->fade_method = 0; - tag->fade_alpha = 0; - tag->fade_entry = -1; + tag->fade_method = 0; + tag->fade_alpha = 0; + tag->fade_entry = -1; tag->fader_inc = 0.0; tag->fader_direction = 0; tag->selected_entry = 0; - tag->depth = 0; + tag->depth = 0; tag->effect_toggle = 1; /* same as for samples */ tag->socket_ready = 0; tag->socket_frame = NULL; @@ -928,276 +928,276 @@ int vj_tag_new(int type, char *filename, int stream_nr, editlist * el, int pix_f tag->color_g = 0; tag->color_b = 0; tag->opacity = 0; - tag->priv = NULL; - tag->subrender = 1; - if(type == VJ_TAG_TYPE_MCAST || type == VJ_TAG_TYPE_NET) - tag->priv = net_threader(_tag_info->effect_frame1); + tag->priv = NULL; + tag->subrender = 1; + if(type == VJ_TAG_TYPE_MCAST || type == VJ_TAG_TYPE_NET) + tag->priv = net_threader(_tag_info->effect_frame1); - palette = get_ffmpeg_pixfmt( pix_fmt ); + palette = get_ffmpeg_pixfmt( pix_fmt ); - switch (type) { - case VJ_TAG_TYPE_V4L: - snprintf(tag->source_name,SOURCE_NAME_LEN, "%s", filename ); - - if (!_vj_tag_new_unicap( tag, - stream_nr,w,h, - extra, // device num - el->video_norm, - palette, - pix_fmt, - 0, - channel, - has_composite, - video_driver_ )) - { - 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); - free(tag); - return -1; - } - break; - case VJ_TAG_TYPE_MCAST: - case VJ_TAG_TYPE_NET: - 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); - free(tag); - return -1; - } - break; + switch (type) { + case VJ_TAG_TYPE_V4L: + snprintf(tag->source_name,SOURCE_NAME_LEN, "%s", filename ); + + if (!_vj_tag_new_unicap( tag, + stream_nr,w,h, + extra, // device num + el->video_norm, + palette, + pix_fmt, + 0, + channel, + has_composite, + video_driver_ )) + { + 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); + free(tag); + return -1; + } + break; + case VJ_TAG_TYPE_MCAST: + case VJ_TAG_TYPE_NET: + 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); + free(tag); + return -1; + } + break; case VJ_TAG_TYPE_DV1394: #ifdef SUPPORT_READ_DV2 - snprintf(tag->source_name, SOURCE_NAME_LEN,"dv1394 %d", channel); - if( _vj_tag_new_dv1394( tag, stream_nr,channel,1,el ) == 0 ) - { - veejay_msg(VEEJAY_MSG_ERROR, "error opening dv1394 %d", channel); - free(tag->source_name); - free(tag); - return -1; - } - tag->active = 1; - break; + snprintf(tag->source_name, SOURCE_NAME_LEN,"dv1394 %d", channel); + if( _vj_tag_new_dv1394( tag, stream_nr,channel,1,el ) == 0 ) + { + veejay_msg(VEEJAY_MSG_ERROR, "error opening dv1394 %d", channel); + free(tag->source_name); + free(tag); + return -1; + } + tag->active = 1; + break; #else - veejay_msg(VEEJAY_MSG_DEBUG, "libdv not enabled at compile time"); - free(tag->source_name); - free(tag); - return -1; + veejay_msg(VEEJAY_MSG_DEBUG, "libdv not enabled at compile time"); + free(tag->source_name); + free(tag); + return -1; #endif #ifdef USE_GDK_PIXBUF - case VJ_TAG_TYPE_PICTURE: - 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); - free(tag); - return -1; - } - break; + case VJ_TAG_TYPE_PICTURE: + 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); + free(tag); + return -1; + } + break; #endif case VJ_TAG_TYPE_CALI: - snprintf(tag->source_name,SOURCE_NAME_LEN,"%s",filename); - if(_vj_tag_new_cali( tag,stream_nr,w,h) != 1 ) { - free(tag->source_name); - free(tag); - return -1; - } - break; + snprintf(tag->source_name,SOURCE_NAME_LEN,"%s",filename); + if(_vj_tag_new_cali( tag,stream_nr,w,h) != 1 ) { + free(tag->source_name); + free(tag); + return -1; + } + break; case VJ_TAG_TYPE_YUV4MPEG: - snprintf(tag->source_name,SOURCE_NAME_LEN, "%s", filename); - if (_vj_tag_new_yuv4mpeg(tag, stream_nr, w,h,fps) != 1) - { - free(tag->source_name); - free(tag); - return -1; - } - tag->active = 1; - break; - case VJ_TAG_TYPE_GENERATOR: + snprintf(tag->source_name,SOURCE_NAME_LEN, "%s", filename); + if (_vj_tag_new_yuv4mpeg(tag, stream_nr, w,h,fps) != 1) + { + free(tag->source_name); + free(tag); + return -1; + } + tag->active = 1; + break; + case VJ_TAG_TYPE_GENERATOR: - snprintf(tag->source_name,SOURCE_NAME_LEN, "[GEN %d]", channel); + snprintf(tag->source_name,SOURCE_NAME_LEN, "[GEN %d]", channel); - if( channel == -1 && filename == NULL ) { - int total = 0; - int agen = plug_find_generator_plugins( &total, 0 ); - - if( agen >= 0 ) { - channel = agen; - } - } - - if(channel >= 0 || filename != NULL) { - if( filename != NULL ) { - channel = plug_get_idx_by_so_name( filename ); - if( channel == -1 ) { - channel = plug_get_idx_by_name( filename ); - if( channel == - 1) { - veejay_msg(0, "'%s' not found.",filename ); - free(tag->source_name ); - free(tag); - return -1; - } - } - } - - int foo_arg = vj_shm_get_id(); - - if( extra != 0 ) //@ vj_shm_set_id is a hack - vj_shm_set_id( extra ); - - tag->generator = plug_activate(channel); - if( tag->generator == NULL ) { - veejay_msg(0, "Unable to load selected generator"); - free(tag->source_name); - free(tag); - return -1; - } - - int vj_plug_id = 500 + channel; - vevo_property_set(tag->generator, "HOST_id",VEVO_ATOM_TYPE_INT, 1, &vj_plug_id ); - - if(tag->generator != NULL) { - vj_shm_set_id( foo_arg ); - - if( plug_get_num_input_channels( channel ) > 0 || - plug_get_num_output_channels( channel ) == 0 ) { - veejay_msg(0, "Plug '%s' is not a generator", filename); - plug_deactivate(tag->generator); - free(tag->source_name); - free(tag); - return -1; - } - int tmp = 0; - - plug_get_parameters( tag->generator, tag->genargs, &tmp); - - if( filename != NULL ) - strcpy( tag->source_name, filename ); - } - else { - free(tag->source_name); - free(tag); - return -1; - } - } - break; - - case VJ_TAG_TYPE_COLOR: - - snprintf(tag->source_name, SOURCE_NAME_LEN, "[solid %d]", tag->id ); -/* - if( channel == -1 ) { - int total = 0; - int agen = plug_find_generator_plugins( &total, 0 ); - - if( agen >= 0 ) { - char *plugname = plug_get_name( agen ); - channel = agen; - veejay_msg(VEEJAY_MSG_DEBUG, "first available generator '%s' at index %d",plugname, agen ); - free(plugname); - } - else { - veejay_msg(VEEJAY_MSG_WARNING, "No generator plugins found. Using built-in."); - } - } - - if( channel >= 0 ) { - tag->generator = plug_activate( channel ); - if( tag->generator ) { - char *plugname = plug_get_name( channel ); - if( plug_get_num_input_channels( channel ) > 0 || - plug_get_num_output_channels( channel ) != 1 ) { - veejay_msg(0, "Plug '%s' is not a generator", plugname); - plug_deactivate(tag->generator); - free(tag->source_name ); - free(tag); - return -1; - } - veejay_msg(VEEJAY_MSG_DEBUG, "Using plug '%s' to generate frames for this stream.",plugname); - strcpy( tag->source_name, plugname ); - free(plugname); - } else { - veejay_msg(VEEJAY_MSG_ERROR, "Failed to initialize generator."); - free(tag->source_name); - free(tag); - return -1; - } - }*/ - - tag->active = 1; - break; - case VJ_TAG_TYPE_CLONE: - snprintf(tag->source_name, SOURCE_NAME_LEN, "[clone %d]", tag->id ); - - if( _vj_tag_new_clone(tag,channel) == 0 ) { - free(tag->source_name); - free(tag); - return -1; - } - break; - default: - veejay_msg(0, "Stream type %d invalid", type ); - free(tag->source_name); - free(tag); - return -1; + if( channel == -1 && filename == NULL ) { + int total = 0; + int agen = plug_find_generator_plugins( &total, 0 ); + + if( agen >= 0 ) { + channel = agen; + } } - vj_tag_get_by_type( tag->id, tag->source_type, tag->descr); + if(channel >= 0 || filename != NULL) { + if( filename != NULL ) { + channel = plug_get_idx_by_so_name( filename ); + if( channel == -1 ) { + channel = plug_get_idx_by_name( filename ); + if( channel == - 1) { + veejay_msg(0, "'%s' not found.",filename ); + free(tag->source_name ); + free(tag); + return -1; + } + } + } + + int foo_arg = vj_shm_get_id(); + + if( extra != 0 ) //@ vj_shm_set_id is a hack + vj_shm_set_id( extra ); + + tag->generator = plug_activate(channel); + if( tag->generator == NULL ) { + veejay_msg(0, "Unable to load selected generator"); + free(tag->source_name); + free(tag); + return -1; + } + + int vj_plug_id = 500 + channel; + vevo_property_set(tag->generator, "HOST_id",VEVO_ATOM_TYPE_INT, 1, &vj_plug_id ); + + if(tag->generator != NULL) { + vj_shm_set_id( foo_arg ); + + if( plug_get_num_input_channels( channel ) > 0 || + plug_get_num_output_channels( channel ) == 0 ) { + veejay_msg(0, "Plug '%s' is not a generator", filename); + plug_deactivate(tag->generator); + free(tag->source_name); + free(tag); + return -1; + } + int tmp = 0; + + plug_get_parameters( tag->generator, tag->genargs, &tmp); + + if( filename != NULL ) + strcpy( tag->source_name, filename ); + } + else { + free(tag->source_name); + free(tag); + return -1; + } + } + break; + + case VJ_TAG_TYPE_COLOR: + + snprintf(tag->source_name, SOURCE_NAME_LEN, "[solid %d]", tag->id ); +/* + if( channel == -1 ) { + int total = 0; + int agen = plug_find_generator_plugins( &total, 0 ); + + if( agen >= 0 ) { + char *plugname = plug_get_name( agen ); + channel = agen; + veejay_msg(VEEJAY_MSG_DEBUG, "first available generator '%s' at index %d",plugname, agen ); + free(plugname); + } + else { + veejay_msg(VEEJAY_MSG_WARNING, "No generator plugins found. Using built-in."); + } + } + + if( channel >= 0 ) { + tag->generator = plug_activate( channel ); + if( tag->generator ) { + char *plugname = plug_get_name( channel ); + if( plug_get_num_input_channels( channel ) > 0 || + plug_get_num_output_channels( channel ) != 1 ) { + veejay_msg(0, "Plug '%s' is not a generator", plugname); + plug_deactivate(tag->generator); + free(tag->source_name ); + free(tag); + return -1; + } + veejay_msg(VEEJAY_MSG_DEBUG, "Using plug '%s' to generate frames for this stream.",plugname); + strcpy( tag->source_name, plugname ); + free(plugname); + } else { + veejay_msg(VEEJAY_MSG_ERROR, "Failed to initialize generator."); + free(tag->source_name); + free(tag); + return -1; + } + }*/ + + tag->active = 1; + break; + case VJ_TAG_TYPE_CLONE: + snprintf(tag->source_name, SOURCE_NAME_LEN, "[clone %d]", tag->id ); + + if( _vj_tag_new_clone(tag,channel) == 0 ) { + free(tag->source_name); + free(tag); + return -1; + } + break; + default: + veejay_msg(0, "Stream type %d invalid", type ); + free(tag->source_name); + free(tag); + return -1; + } + + vj_tag_get_by_type( tag->id, tag->source_type, tag->descr); /* effect chain is empty */ for (i = 0; i < SAMPLE_MAX_EFFECTS; i++) - { - tag->effect_chain[i] = - (sample_eff_chain *) vj_calloc(sizeof(sample_eff_chain)); - tag->effect_chain[i]->effect_id = -1; - tag->effect_chain[i]->e_flag = 0; - tag->effect_chain[i]->frame_trimmer = 0; - tag->effect_chain[i]->frame_offset = 0; - tag->effect_chain[i]->volume = 0; - tag->effect_chain[i]->a_flag = 0; - tag->effect_chain[i]->channel = 0; - tag->effect_chain[i]->source_type = 1; - tag->effect_chain[i]->is_rendering = 0; - for (j = 0; j < SAMPLE_MAX_PARAMETERS; j++) { - tag->effect_chain[i]->arg[j] = 0; - } - tag->effect_chain[i]->kf_status = 0; - tag->effect_chain[i]->kf_type = 0; - tag->effect_chain[i]->kf = vpn( VEVO_ANONYMOUS_PORT ); + { + tag->effect_chain[i] = + (sample_eff_chain *) vj_calloc(sizeof(sample_eff_chain)); + tag->effect_chain[i]->effect_id = -1; + tag->effect_chain[i]->e_flag = 0; + tag->effect_chain[i]->frame_trimmer = 0; + tag->effect_chain[i]->frame_offset = 0; + tag->effect_chain[i]->volume = 0; + tag->effect_chain[i]->a_flag = 0; + tag->effect_chain[i]->channel = 0; + tag->effect_chain[i]->source_type = 1; + tag->effect_chain[i]->is_rendering = 0; + for (j = 0; j < SAMPLE_MAX_PARAMETERS; j++) { + tag->effect_chain[i]->arg[j] = 0; + } + tag->effect_chain[i]->kf_status = 0; + tag->effect_chain[i]->kf_type = 0; + tag->effect_chain[i]->kf = vpn( VEVO_ANONYMOUS_PORT ); + } + if (!vj_tag_put(tag)) + { + veejay_msg(0, "Unable to store stream %d - Internal Error", tag->id); + free(tag->source_name); + free(tag); + return -1; } - if (!vj_tag_put(tag)) - { - veejay_msg(0, "Unable to store stream %d - Internal Error", tag->id); - free(tag->source_name); - free(tag); - return -1; - } last_added_tag = tag->id; - this_tag_id++; + this_tag_id++; #ifdef HAVE_FREETYPE tag->dict = vpn(VEVO_ANONYMOUS_PORT ); #endif - tag_cache[ tag->id ] = (void*) tag; + tag_cache[ tag->id ] = (void*) tag; return (int)(tag->id); } int vj_tag_is_deleted(int id) { - int i; + int i; for (i = 0; i < next_avail_tag; i++) { - if (avail_tag[i] == id) - return 1; + if (avail_tag[i] == id) + return 1; } - return 0; + return 0; } int vj_tag_exists(int id) { if (id <= 0) - return 0; - if (!vj_tag_get(id)) - return 0; + return 0; + if (!vj_tag_get(id)) + return 0; return 1; } @@ -1205,54 +1205,54 @@ int vj_tag_clear_chain(int id) { int i = 0; for (i = 0; i < SAMPLE_MAX_EFFECTS; i++) { - if (vj_tag_chain_remove(id, i) == -1) - return -1; + if (vj_tag_chain_remove(id, i) == -1) + return -1; } return 1; } -int vj_tag_verify_delete(int id, int type ) +int vj_tag_verify_delete(int id, int type ) { - int i,j; - int n = vj_tag_highest(); + int i,j; + int n = vj_tag_highest(); - for( i = 1; i <= n; i ++ ) - { - vj_tag *s = vj_tag_get(i); + for( i = 1; i <= n; i ++ ) + { + vj_tag *s = vj_tag_get(i); - if(s) - { - for( j = 0 ; j < SAMPLE_MAX_EFFECTS; j ++ ) - { - if(s->effect_chain[j]->channel == id && - s->effect_chain[j]->source_type == type ) - { - s->effect_chain[j]->channel = i; - s->effect_chain[j]->source_type = 1; - } - } - } - } + if(s) + { + for( j = 0 ; j < SAMPLE_MAX_EFFECTS; j ++ ) + { + if(s->effect_chain[j]->channel == id && + s->effect_chain[j]->source_type == type ) + { + s->effect_chain[j]->channel = i; + s->effect_chain[j]->source_type = 1; + } + } + } + } - n = sample_highest(); - for( i = 1; i <= n; i ++ ) - { - sample_info *s = sample_get(i); - if(s) - { - for( j = 0 ; j < SAMPLE_MAX_EFFECTS; j ++ ) - { - if(s->effect_chain[j]->channel == id && - s->effect_chain[j]->source_type == type ) - { - s->effect_chain[j]->channel = i; - s->effect_chain[j]->source_type = 0; - } - } - } - } + n = sample_highest(); + for( i = 1; i <= n; i ++ ) + { + sample_info *s = sample_get(i); + if(s) + { + for( j = 0 ; j < SAMPLE_MAX_EFFECTS; j ++ ) + { + if(s->effect_chain[j]->channel == id && + s->effect_chain[j]->source_type == type ) + { + s->effect_chain[j]->channel = i; + s->effect_chain[j]->source_type = 0; + } + } + } + } - return 1; + return 1; } int vj_tag_del(int id) @@ -1262,141 +1262,141 @@ int vj_tag_del(int id) int i; tag = vj_tag_get(id); if(!tag) - return 0; + return 0; #ifdef HAVE_FREETYPE - vj_font_dictionary_destroy(_tag_info->font ,tag->dict); + vj_font_dictionary_destroy(_tag_info->font ,tag->dict); #endif if(tag->extra) - free(tag->extra); + free(tag->extra); /* stop streaming in first */ switch(tag->source_type) { - case VJ_TAG_TYPE_CLONE: - { - int t2 = tag->video_channel; - vj_tag *tag2 = vj_tag_get( t2 ); - if( tag2 ) { - if(tag2->clone > 0 ) - tag2->clone --; - } - } - case VJ_TAG_TYPE_V4L: - if(tag->capture_type==1) { + case VJ_TAG_TYPE_CLONE: + { + int t2 = tag->video_channel; + vj_tag *tag2 = vj_tag_get( t2 ); + if( tag2 ) { + if(tag2->clone > 0 ) + tag2->clone --; + } + } + case VJ_TAG_TYPE_V4L: + if(tag->capture_type==1) { #ifdef HAVE_V4L2 - if( no_v4l2_threads_ ) { - v4l2_close( vj_tag_input->unicap[tag->index]); - } else { - v4l2_thread_stop( v4l2_thread_info_get(vj_tag_input->unicap[tag->index])); - } + if( no_v4l2_threads_ ) { + v4l2_close( vj_tag_input->unicap[tag->index]); + } else { + v4l2_thread_stop( v4l2_thread_info_get(vj_tag_input->unicap[tag->index])); + } #endif - } - if(tag->blackframe)free(tag->blackframe); - if( tag->bf ) free(tag->bf); - if( tag->bfu ) free(tag->bfu); - if( tag->bfv ) free(tag->bfv); - if( tag->lf ) free(tag->lf); - if( tag->lfu ) free(tag->lfu); - if( tag->lfv ) free(tag->lfv); + } + if(tag->blackframe)free(tag->blackframe); + if( tag->bf ) free(tag->bf); + if( tag->bfu ) free(tag->bfu); + if( tag->bfv ) free(tag->bfv); + if( tag->lf ) free(tag->lf); + if( tag->lfu ) free(tag->lfu); + if( tag->lfv ) free(tag->lfv); - break; + break; case VJ_TAG_TYPE_YUV4MPEG: - veejay_msg(VEEJAY_MSG_INFO,"Closing yuv4mpeg file %s (Stream %d)", - tag->source_name,id); - vj_yuv_stream_stop_read(vj_tag_input->stream[tag->index]); -// vj_yuv4mpeg_free( vj_tag_input->stream[tag->index]); - break; + veejay_msg(VEEJAY_MSG_INFO,"Closing yuv4mpeg file %s (Stream %d)", + tag->source_name,id); + vj_yuv_stream_stop_read(vj_tag_input->stream[tag->index]); +// vj_yuv4mpeg_free( vj_tag_input->stream[tag->index]); + break; #ifdef SUPPORT_READ_DV2 case VJ_TAG_TYPE_DV1394: - vj_dv1394_close( vj_tag_input->dv1394[tag->index] ); - break; + vj_dv1394_close( vj_tag_input->dv1394[tag->index] ); + break; #endif #ifdef USE_GDK_PIXBUF - case VJ_TAG_TYPE_PICTURE: - veejay_msg(VEEJAY_MSG_INFO, "Closing picture stream %s", tag->source_name); - vj_picture *pic = vj_tag_input->picture[tag->index]; - if(pic) - { - vj_picture_cleanup( pic->pic ); - free( pic ); - } - vj_tag_input->picture[tag->index] = NULL; - break; + case VJ_TAG_TYPE_PICTURE: + veejay_msg(VEEJAY_MSG_INFO, "Closing picture stream %s", tag->source_name); + vj_picture *pic = vj_tag_input->picture[tag->index]; + if(pic) + { + vj_picture_cleanup( pic->pic ); + free( pic ); + } + vj_tag_input->picture[tag->index] = NULL; + break; #endif - case VJ_TAG_TYPE_CALI: - { - cali_tag_t *calpic = (cali_tag_t*) vj_tag_input->cali[tag->index]; - if(calpic) { - if(calpic->lf) free(calpic->data); - free(calpic); - } - vj_tag_input->cali[tag->index] = NULL; - } - break; - case VJ_TAG_TYPE_MCAST: - case VJ_TAG_TYPE_NET: - net_thread_stop(tag); - if(tag->priv) free(tag->priv); - break; - case VJ_TAG_TYPE_COLOR: - break; - case VJ_TAG_TYPE_GENERATOR: - if( tag->generator ) { - plug_deactivate( tag->generator ); - } - tag->generator = NULL; - break; + case VJ_TAG_TYPE_CALI: + { + cali_tag_t *calpic = (cali_tag_t*) vj_tag_input->cali[tag->index]; + if(calpic) { + if(calpic->lf) free(calpic->data); + free(calpic); + } + vj_tag_input->cali[tag->index] = NULL; + } + break; + case VJ_TAG_TYPE_MCAST: + case VJ_TAG_TYPE_NET: + net_thread_stop(tag); + if(tag->priv) free(tag->priv); + break; + case VJ_TAG_TYPE_COLOR: + break; + case VJ_TAG_TYPE_GENERATOR: + if( tag->generator ) { + plug_deactivate( tag->generator ); + } + tag->generator = NULL; + break; } - vj_tag_chain_free( tag->id,1 ); + vj_tag_chain_free( tag->id,1 ); - if(tag->encoder_active) - vj_tag_stop_encoder( tag->id ); + if(tag->encoder_active) + vj_tag_stop_encoder( tag->id ); if(tag->source_name) - free(tag->source_name); - - if(tag->method_filename) - { - free(tag->method_filename); - tag->method_filename = NULL; - } + free(tag->source_name); + + if(tag->method_filename) + { + free(tag->method_filename); + tag->method_filename = NULL; + } - for (i = 0; i < SAMPLE_MAX_EFFECTS; i++) { - if (tag->effect_chain[i]) { - if( tag->effect_chain[i]->kf ) - vpf(tag->effect_chain[i]->kf); - free(tag->effect_chain[i]); - } - tag->effect_chain[i] = NULL; - } + for (i = 0; i < SAMPLE_MAX_EFFECTS; i++) { + if (tag->effect_chain[i]) { + if( tag->effect_chain[i]->kf ) + vpf(tag->effect_chain[i]->kf); + free(tag->effect_chain[i]); + } + tag->effect_chain[i] = NULL; + } - if(tag->socket_frame) - { - free(tag->socket_frame); - tag->socket_frame = NULL; - } + if(tag->socket_frame) + { + free(tag->socket_frame); + tag->socket_frame = NULL; + } #ifdef ARCH_X86_64 - uint64_t tid = (uint64_t) tag->id; + uint64_t tid = (uint64_t) tag->id; #else - uint32_t tid = (uint32_t) tag->id; + uint32_t tid = (uint32_t) tag->id; #endif - tag_node = hash_lookup(TagHash, (void *) tid); + tag_node = hash_lookup(TagHash, (void *) tid); - if(tag_node) - { - hash_delete(TagHash, tag_node); - hnode_destroy(tag_node); - } + if(tag_node) + { + hash_delete(TagHash, tag_node); + hnode_destroy(tag_node); + } - free(tag); - tag = NULL; + free(tag); + tag = NULL; avail_tag[ next_avail_tag] = id; next_avail_tag++; - tag_cache[ id ] = NULL; + tag_cache[ id ] = NULL; - return 1; + return 1; } void vj_tag_close_all() { @@ -1407,62 +1407,62 @@ void vj_tag_close_all() { for(i=1; i <= n; i++) { tag = vj_tag_get(i); if(tag) { - if(vj_tag_del(i)) veejay_msg(VEEJAY_MSG_DEBUG, "Deleted stream %d", i); - } + if(vj_tag_del(i)) veejay_msg(VEEJAY_MSG_DEBUG, "Deleted stream %d", i); + } } - + if( TagHash ) { - hash_free_nodes( TagHash ); - TagHash = NULL; + hash_free_nodes( TagHash ); + TagHash = NULL; } } -int vj_tag_get_n_frames(int t1) +int vj_tag_get_n_frames(int t1) { vj_tag *tag = vj_tag_get(t1); if (!tag) - return 0; - return tag->n_frames; + return 0; + return tag->n_frames; } -int vj_tag_set_n_frames( int t1, int n ) +int vj_tag_set_n_frames( int t1, int n ) { - vj_tag *tag = vj_tag_get(t1); - if (!tag) - return 0; - tag->n_frames = n; - return 1; + vj_tag *tag = vj_tag_get(t1); + if (!tag) + return 0; + tag->n_frames = n; + return 1; } -sample_eff_chain **vj_tag_get_effect_chain(int t1) +sample_eff_chain **vj_tag_get_effect_chain(int t1) { - vj_tag * tag = vj_tag_get(t1); - if(tag == NULL) - return NULL; - return tag->effect_chain; + vj_tag * tag = vj_tag_get(t1); + if(tag == NULL) + return NULL; + return tag->effect_chain; } int vj_tag_get_effect(int t1, int position) { vj_tag *tag = vj_tag_get(t1); if (!tag) - return -1; - if (position >= SAMPLE_MAX_EFFECTS) - return -1; + return -1; + if (position >= SAMPLE_MAX_EFFECTS) + return -1; if (tag->effect_chain[position]->e_flag == 0) - return -1; + return -1; return tag->effect_chain[position]->effect_id; } void *vj_tag_get_plugin(int t1, int position, void *instance) { vj_tag *tag = vj_tag_get(t1); if (!tag) - return NULL; + return NULL; if (position >= SAMPLE_MAX_EFFECTS) - return NULL; + return NULL; if( instance != NULL ) - tag->effect_chain[position]->fx_instance = instance; + tag->effect_chain[position]->fx_instance = instance; return tag->effect_chain[position]->fx_instance; } @@ -1475,48 +1475,48 @@ float vj_tag_get_fader_val(int t1) { } void vj_tag_set_fade_method(int t1, int method) { - vj_tag *tag = vj_tag_get(t1); + vj_tag *tag = vj_tag_get(t1); if(!tag) return; - tag->fade_method = method; + tag->fade_method = method; } void vj_tag_set_fade_alpha(int t1, int alpha) { - vj_tag *tag = vj_tag_get(t1); + vj_tag *tag = vj_tag_get(t1); if(!tag) return; - tag->fade_alpha = alpha; + tag->fade_alpha = alpha; } void vj_tag_set_fade_entry(int t1, int entry) { - vj_tag *tag = vj_tag_get(t1); + vj_tag *tag = vj_tag_get(t1); if(!tag) return; - tag->fade_entry = entry; + tag->fade_entry = entry; } -int vj_tag_set_description(int t1, char *description) +int vj_tag_set_description(int t1, char *description) { - vj_tag *tag = vj_tag_get(t1); - if(!tag) return 0; - if(!description || strlen(description) <= 0 ) - snprintf( tag->descr, TAG_MAX_DESCR_LEN, "%s","Untitled"); - else - snprintf( tag->descr, TAG_MAX_DESCR_LEN, "%s", description ); - return 1; + vj_tag *tag = vj_tag_get(t1); + if(!tag) return 0; + if(!description || strlen(description) <= 0 ) + snprintf( tag->descr, TAG_MAX_DESCR_LEN, "%s","Untitled"); + else + snprintf( tag->descr, TAG_MAX_DESCR_LEN, "%s", description ); + return 1; } -int vj_tag_get_description( int t1, char *description ) +int vj_tag_get_description( int t1, char *description ) { - vj_tag *tag = vj_tag_get(t1); - if(!tag) return 0; - snprintf( description ,TAG_MAX_DESCR_LEN, "%s", tag->descr ); - return 1; + vj_tag *tag = vj_tag_get(t1); + if(!tag) return 0; + snprintf( description ,TAG_MAX_DESCR_LEN, "%s", tag->descr ); + return 1; } -int vj_tag_get_fade_alpha( int t1, int alpha) +int vj_tag_get_fade_alpha( int t1, int alpha) { - vj_tag *tag = vj_tag_get(t1); - if(!tag) return 0; - return tag->fade_alpha; + vj_tag *tag = vj_tag_get(t1); + if(!tag) return 0; + return tag->fade_alpha; } int vj_tag_set_manual_fader(int t1, int value ) @@ -1527,7 +1527,7 @@ int vj_tag_set_manual_fader(int t1, int value ) tag->fader_inc = 0.0; tag->fader_val = (float)value; if(tag->effect_toggle == 0) - tag->effect_toggle = 1; + tag->effect_toggle = 1; return 1; } @@ -1558,21 +1558,21 @@ int vj_tag_get_fader_active(int t1) { return (tag->fader_active); } int vj_tag_get_fade_entry(int t1) { - vj_tag *tag = vj_tag_get(t1); - if(!tag) return -1; - return tag->fade_entry; + vj_tag *tag = vj_tag_get(t1); + if(!tag) return -1; + return tag->fade_entry; } int vj_tag_get_fade_method(int t1) { - vj_tag *tag = vj_tag_get(t1); - if(!tag) return -1; - return tag->fade_method; + vj_tag *tag = vj_tag_get(t1); + if(!tag) return -1; + return tag->fade_method; } int vj_tag_get_fader_direction(int t1) { vj_tag *tag = vj_tag_get(t1); if(!tag) return -1; if( tag->fader_active == 0 ) - return 0; // no direction + return 0; // no direction return (tag->fader_direction); } @@ -1591,14 +1591,14 @@ int vj_tag_set_fader_active(int t1, int nframes , int direction) { if(nframes <= 0) return -1; tag->fader_active = 1; if(direction<0) - tag->fader_val = 255.0f; + tag->fader_val = 255.0f; else - tag->fader_val = 0.0f; + tag->fader_val = 0.0f; tag->fader_inc = (float) (255.0f / (float)nframes ); tag->fader_direction = direction; tag->fader_inc *= direction; if(tag->effect_toggle == 0 ) - tag->effect_toggle = 1; + tag->effect_toggle = 1; return 1; } @@ -1606,18 +1606,18 @@ int vj_tag_stop_encoder(int t1) { vj_tag *tag = vj_tag_get(t1); if(!tag) { - veejay_msg(VEEJAY_MSG_ERROR, "Tag %d does not exist", t1); - return -1; + veejay_msg(VEEJAY_MSG_ERROR, "Tag %d does not exist", t1); + return -1; } if(tag->encoder_active) { - if(tag->encoder_file) - lav_close(tag->encoder_file); + if(tag->encoder_file) + lav_close(tag->encoder_file); if(tag->encoder) - vj_avcodec_stop( tag->encoder, tag->encoder_format ); - tag->encoder = NULL; - tag->encoder_file = NULL; - tag->encoder_active = 0; - return 1; + vj_avcodec_stop( tag->encoder, tag->encoder_format ); + tag->encoder = NULL; + tag->encoder_file = NULL; + tag->encoder_active = 0; + return 1; } return 0; @@ -1639,153 +1639,153 @@ void vj_tag_reset_encoder(int t1) int vj_tag_get_encoded_file(int t1, char *description) { - vj_tag *tag = vj_tag_get(t1); - if(!tag) return 0; - sprintf(description, "%s", tag->encoder_destination ); - return 1; + vj_tag *tag = vj_tag_get(t1); + if(!tag) return 0; + sprintf(description, "%s", tag->encoder_destination ); + return 1; } -int vj_tag_get_num_encoded_files(int t1) +int vj_tag_get_num_encoded_files(int t1) { - vj_tag *tag = vj_tag_get(t1); - if(!tag) return -1; - return tag->sequence_num; + vj_tag *tag = vj_tag_get(t1); + if(!tag) return -1; + return tag->sequence_num; } -int vj_tag_get_encoder_format(int t1) +int vj_tag_get_encoder_format(int t1) { - vj_tag *tag = vj_tag_get(t1); - if(!tag) return -1; - return tag->encoder_format; + vj_tag *tag = vj_tag_get(t1); + if(!tag) return -1; + return tag->encoder_format; } -int vj_tag_get_sequenced_file(int t1, char *descr, int num, char *ext) +int vj_tag_get_sequenced_file(int t1, char *descr, int num, char *ext) { - vj_tag *tag = vj_tag_get(t1); - if(!tag) return -1; - sprintf(descr, "%s-%05d.%s", tag->encoder_destination,num,ext ); - return 1; + vj_tag *tag = vj_tag_get(t1); + if(!tag) return -1; + sprintf(descr, "%s-%05d.%s", tag->encoder_destination,num,ext ); + return 1; } -int vj_tag_try_filename(int t1, char *filename, int format) +int vj_tag_try_filename(int t1, char *filename, int format) { - vj_tag *tag = vj_tag_get(t1); - if(!tag) - { - return 0; - } - if(filename != NULL) - { - snprintf(tag->encoder_base, 255, "%s", filename); - } - char ext[5]; - switch(format) - { - case ENCODER_QUICKTIME_DV: - case ENCODER_QUICKTIME_MJPEG: - sprintf(ext, "mov"); - break; - case ENCODER_YUV4MPEG: - sprintf(ext, "yuv"); - break; - case ENCODER_DVVIDEO: - sprintf(ext,"dv"); - break; - default: - sprintf(ext,"avi"); - break; - } - - sprintf(tag->encoder_destination, "%s-%04d.%s", tag->encoder_base, (int)tag->sequence_num, ext); - return 1; + vj_tag *tag = vj_tag_get(t1); + if(!tag) + { + return 0; + } + if(filename != NULL) + { + snprintf(tag->encoder_base, 255, "%s", filename); + } + char ext[5]; + switch(format) + { + case ENCODER_QUICKTIME_DV: + case ENCODER_QUICKTIME_MJPEG: + sprintf(ext, "mov"); + break; + case ENCODER_YUV4MPEG: + sprintf(ext, "yuv"); + break; + case ENCODER_DVVIDEO: + sprintf(ext,"dv"); + break; + default: + sprintf(ext,"avi"); + break; + } + + sprintf(tag->encoder_destination, "%s-%04d.%s", tag->encoder_base, (int)tag->sequence_num, ext); + return 1; } static int vj_tag_start_encoder(vj_tag *tag, int format, long nframes) { - char cformat = vj_avcodec_find_lav( format ); - - tag->encoder = vj_avcodec_start( _tag_info->effect_frame1, format, tag->encoder_destination ); - if(!tag->encoder) - { - veejay_msg(0, "Unable to use selected encoder, please choose another."); - return 0; - } - tag->encoder_active = 1; - tag->encoder_format = format; + char cformat = vj_avcodec_find_lav( format ); + + tag->encoder = vj_avcodec_start( _tag_info->effect_frame1, format, tag->encoder_destination ); + if(!tag->encoder) + { + veejay_msg(0, "Unable to use selected encoder, please choose another."); + return 0; + } + tag->encoder_active = 1; + tag->encoder_format = format; - int tmp = _tag_info->effect_frame1->len; + int tmp = _tag_info->effect_frame1->len; - if(format==ENCODER_DVVIDEO) - tag->encoder_max_size = ( _tag_info->video_output_height == 480 ? 120000: 144000); - else - switch(format) - { - case ENCODER_YUV420: - case ENCODER_YUV420F: - tag->encoder_max_size = 2048 + tmp + (tmp/4) + (tmp/4);break; - case ENCODER_YUV422: - case ENCODER_YUV422F: - case ENCODER_YUV4MPEG: - tag->encoder_max_size = 2048 + tmp + (tmp/2) + (tmp/2);break; - case ENCODER_LZO: - tag->encoder_max_size = tmp * 3; break; - default: - tag->encoder_max_size = ( 4 * 65535 ); - break; - } + if(format==ENCODER_DVVIDEO) + tag->encoder_max_size = ( _tag_info->video_output_height == 480 ? 120000: 144000); + else + switch(format) + { + case ENCODER_YUV420: + case ENCODER_YUV420F: + tag->encoder_max_size = 2048 + tmp + (tmp/4) + (tmp/4);break; + case ENCODER_YUV422: + case ENCODER_YUV422F: + case ENCODER_YUV4MPEG: + tag->encoder_max_size = 2048 + tmp + (tmp/2) + (tmp/2);break; + case ENCODER_LZO: + tag->encoder_max_size = tmp * 3; break; + default: + tag->encoder_max_size = ( 4 * 65535 ); + break; + } - if(tag->encoder_total_frames_recorded == 0) - { - tag->encoder_frames_to_record = nframes ; - tag->encoder_frames_recorded = 0; - } - else - { - tag->encoder_frames_recorded = 0; - } + if(tag->encoder_total_frames_recorded == 0) + { + tag->encoder_frames_to_record = nframes ; + tag->encoder_frames_recorded = 0; + } + else + { + tag->encoder_frames_recorded = 0; + } - if( cformat != 'S' ) { - tag->encoder_file = lav_open_output_file( - tag->encoder_destination, - cformat, - _tag_info->effect_frame1->width, - _tag_info->effect_frame1->height, - 0, - _tag_info->effect_frame1->fps, - 0, - 0, - 0 - ); + if( cformat != 'S' ) { + tag->encoder_file = lav_open_output_file( + tag->encoder_destination, + cformat, + _tag_info->effect_frame1->width, + _tag_info->effect_frame1->height, + 0, + _tag_info->effect_frame1->fps, + 0, + 0, + 0 + ); - if(!tag->encoder_file) - { - veejay_msg(VEEJAY_MSG_ERROR,"Cannot write to %s (No permissions?)",tag->encoder_destination); - if(tag->encoder) - vj_avcodec_close_encoder( tag->encoder ); - tag->encoder = NULL; - tag->encoder_active = 0; - return 0; - } - } + if(!tag->encoder_file) + { + veejay_msg(VEEJAY_MSG_ERROR,"Cannot write to %s (No permissions?)",tag->encoder_destination); + if(tag->encoder) + vj_avcodec_close_encoder( tag->encoder ); + tag->encoder = NULL; + tag->encoder_active = 0; + return 0; + } + } - veejay_msg(VEEJAY_MSG_INFO, "Recording to file [%s] %ldx%ld@%2.2f %d/%d/%d >%09ld<", - tag->encoder_destination, - _tag_info->effect_frame1->width, - _tag_info->effect_frame1->height, - (float) _tag_info->effect_frame1->fps, - 0,0,0, - (long)( tag->encoder_frames_to_record) - ); + veejay_msg(VEEJAY_MSG_INFO, "Recording to file [%s] %ldx%ld@%2.2f %d/%d/%d >%09ld<", + tag->encoder_destination, + _tag_info->effect_frame1->width, + _tag_info->effect_frame1->height, + (float) _tag_info->effect_frame1->fps, + 0,0,0, + (long)( tag->encoder_frames_to_record) + ); - tag->encoder_width = _tag_info->effect_frame1->width; - tag->encoder_height = _tag_info->effect_frame1->height; - - return 1; + tag->encoder_width = _tag_info->effect_frame1->width; + tag->encoder_height = _tag_info->effect_frame1->height; + + return 1; } @@ -1795,18 +1795,18 @@ int vj_tag_init_encoder(int t1, char *filename, int format, long nframes ) { if(tag->encoder_active) { - veejay_msg(VEEJAY_MSG_ERROR, "Already recording Stream %d to [%s]",t1, tag->encoder_destination); + veejay_msg(VEEJAY_MSG_ERROR, "Already recording Stream %d to [%s]",t1, tag->encoder_destination); return 0; } if(!vj_tag_try_filename( t1,filename,format)) { - return 0; + return 0; } if(nframes <= 0) { - veejay_msg(VEEJAY_MSG_ERROR, "It makes no sense to encode for %ld frames", nframes); - return 0; + veejay_msg(VEEJAY_MSG_ERROR, "It makes no sense to encode for %ld frames", nframes); + return 0; } return vj_tag_start_encoder( tag,format, nframes ); @@ -1814,184 +1814,184 @@ int vj_tag_init_encoder(int t1, char *filename, int format, long nframes ) { int vj_tag_continue_record( int t1 ) { - vj_tag *tag = vj_tag_get(t1); - if(!tag) return -1; + vj_tag *tag = vj_tag_get(t1); + if(!tag) return -1; - long bytesRemaining = lav_bytes_remain( tag->encoder_file ); - if( bytesRemaining >= 0 && bytesRemaining < (512 * 1024) ) { - tag->sequence_num ++; - veejay_msg(VEEJAY_MSG_WARNING, - "Auto splitting file, %ld frames left to record.", - (tag->encoder_frames_to_record - tag->encoder_total_frames_recorded )); - tag->encoder_frames_recorded=0; + long bytesRemaining = lav_bytes_remain( tag->encoder_file ); + if( bytesRemaining >= 0 && bytesRemaining < (512 * 1024) ) { + tag->sequence_num ++; + veejay_msg(VEEJAY_MSG_WARNING, + "Auto splitting file, %ld frames left to record.", + (tag->encoder_frames_to_record - tag->encoder_total_frames_recorded )); + tag->encoder_frames_recorded=0; - return 2; - } - - if( tag->encoder_total_frames_recorded >= tag->encoder_frames_to_record) - { - veejay_msg(VEEJAY_MSG_INFO, "Recorded %ld frames.", - tag->encoder_total_frames_recorded ); - return 1; - } - - return 0; + return 2; + } + + if( tag->encoder_total_frames_recorded >= tag->encoder_frames_to_record) + { + veejay_msg(VEEJAY_MSG_INFO, "Recorded %ld frames.", + tag->encoder_total_frames_recorded ); + return 1; + } + + return 0; } int vj_tag_set_brightness(int t1, int value) { - vj_tag *tag = vj_tag_get(t1); - if(!tag) return 0; - if(value < 0 || value > 65535) - { - veejay_msg(VEEJAY_MSG_ERROR,"Brightness valid range is 0 - 65535"); - return 0; - } - else - { - if(tag->capture_type==1) { + vj_tag *tag = vj_tag_get(t1); + if(!tag) return 0; + if(value < 0 || value > 65535) + { + veejay_msg(VEEJAY_MSG_ERROR,"Brightness valid range is 0 - 65535"); + return 0; + } + else + { + if(tag->capture_type==1) { #ifdef HAVE_V4L2 - v4l2_set_brightness( vj_tag_input->unicap[tag->index],value); + v4l2_set_brightness( vj_tag_input->unicap[tag->index],value); #endif - } - } - return 1; + } + } + return 1; } int vj_tag_set_white(int t1, int value) { - vj_tag *tag = vj_tag_get(t1); - if(!tag) return -1; - if(value < 0 || value > 65535) - { - veejay_msg(VEEJAY_MSG_ERROR,"White valid range is 0 - 65535"); - return -1; - } - else - { - if(tag->capture_type==1) { + vj_tag *tag = vj_tag_get(t1); + if(!tag) return -1; + if(value < 0 || value > 65535) + { + veejay_msg(VEEJAY_MSG_ERROR,"White valid range is 0 - 65535"); + return -1; + } + else + { + if(tag->capture_type==1) { #ifdef HAVE_V4L2 - v4l2_set_gamma( vj_tag_input->unicap[tag->index],value); + v4l2_set_gamma( vj_tag_input->unicap[tag->index],value); #endif - } - } - return 1; + } + } + return 1; } int vj_tag_set_hue(int t1, int value) { - vj_tag *tag = vj_tag_get(t1); - if(!tag) return -1; - if(value < 0 || value > 65535) - { - veejay_msg(VEEJAY_MSG_ERROR,"Hue valid range is 0 - 65535"); - return -1; - } - if( tag->capture_type==1) { + vj_tag *tag = vj_tag_get(t1); + if(!tag) return -1; + if(value < 0 || value > 65535) + { + veejay_msg(VEEJAY_MSG_ERROR,"Hue valid range is 0 - 65535"); + return -1; + } + if( tag->capture_type==1) { #ifdef HAVE_V4L2 - v4l2_set_hue( vj_tag_input->unicap[tag->index],value ); + v4l2_set_hue( vj_tag_input->unicap[tag->index],value ); #endif - } - return 1; + } + return 1; } int vj_tag_set_contrast(int t1,int value) { - vj_tag *tag = vj_tag_get(t1); - if(!tag) return -1; - if(value < 0 || value > 65535) - { - veejay_msg(VEEJAY_MSG_ERROR,"Contrast valid range is 0 - 65535"); - return -1; - } - else - { - if(tag->capture_type==1) { + vj_tag *tag = vj_tag_get(t1); + if(!tag) return -1; + if(value < 0 || value > 65535) + { + veejay_msg(VEEJAY_MSG_ERROR,"Contrast valid range is 0 - 65535"); + return -1; + } + else + { + if(tag->capture_type==1) { #ifdef HAVE_V4L2 - v4l2_set_contrast( vj_tag_input->unicap[tag->index], value ); + v4l2_set_contrast( vj_tag_input->unicap[tag->index], value ); #endif - } - } - return 1; + } + } + return 1; } int vj_tag_set_color(int t1, int value) { - vj_tag *tag = vj_tag_get(t1); + vj_tag *tag = vj_tag_get(t1); - if(!tag) return -1; - if(value < 0 || value > 65535) - { - veejay_msg(VEEJAY_MSG_ERROR,"Contrast valid range is 0 - 65535"); - return -1; - } - else - { - if(tag->capture_type==1) { + if(!tag) return -1; + if(value < 0 || value > 65535) + { + veejay_msg(VEEJAY_MSG_ERROR,"Contrast valid range is 0 - 65535"); + return -1; + } + else + { + if(tag->capture_type==1) { #ifdef HAVE_V4L2 - v4l2_set_whiteness( vj_tag_input->unicap[tag->index], value ); + v4l2_set_whiteness( vj_tag_input->unicap[tag->index], value ); #endif - return -1; - } - } - return 1; + return -1; + } + } + return 1; } -int vj_tag_get_v4l_properties(int t1, int *values ) +int vj_tag_get_v4l_properties(int t1, int *values ) { - vj_tag *tag = vj_tag_get(t1); - if(!tag) return -1; - if(tag->source_type!=VJ_TAG_TYPE_V4L) - { - return 0; - } - - if(tag->capture_type == 1 ) { + vj_tag *tag = vj_tag_get(t1); + if(!tag) return -1; + if(tag->source_type!=VJ_TAG_TYPE_V4L) + { + return 0; + } + + if(tag->capture_type == 1 ) { #ifdef HAVE_V4L2 - values[0] = v4l2_get_brightness( vj_tag_input->unicap[tag->index] ); - values[1] = v4l2_get_contrast( vj_tag_input->unicap[tag->index] ); - values[2] = v4l2_get_hue( vj_tag_input->unicap[tag->index] ); - values[3] = v4l2_get_saturation( vj_tag_input->unicap[tag->index] ); - values[4] = v4l2_get_temperature( vj_tag_input->unicap[tag->index] ); - values[5] = v4l2_get_gamma( vj_tag_input->unicap[tag->index] ); - values[6] = v4l2_get_sharpness( vj_tag_input->unicap[tag->index] ); - values[7] = v4l2_get_gain( vj_tag_input->unicap[tag->index] ); - values[8] = v4l2_get_red_balance( vj_tag_input->unicap[tag->index] ); - values[9] = v4l2_get_blue_balance( vj_tag_input->unicap[tag->index] ); - values[10]= -1; - values[11]= v4l2_get_gain(vj_tag_input->unicap[tag->index]); - values[12]= v4l2_get_backlight_compensation( vj_tag_input->unicap[tag->index] ); - values[13]= v4l2_get_whiteness( vj_tag_input->unicap[tag->index] ); - values[14]= v4l2_get_black_level( vj_tag_input->unicap[tag->index]); - values[15]= v4l2_get_exposure(vj_tag_input->unicap[tag->index] ); - values[16]= v4l2_get_auto_white_balance( vj_tag_input->unicap[tag->index] ); - values[17]= v4l2_get_autogain( vj_tag_input->unicap[tag->index] ); - values[18]= v4l2_get_hue_auto(vj_tag_input->unicap[tag->index] ); - values[19]= v4l2_get_hflip(vj_tag_input->unicap[tag->index] ); - values[20]= v4l2_get_vflip(vj_tag_input->unicap[tag->index]); - return 1; + values[0] = v4l2_get_brightness( vj_tag_input->unicap[tag->index] ); + values[1] = v4l2_get_contrast( vj_tag_input->unicap[tag->index] ); + values[2] = v4l2_get_hue( vj_tag_input->unicap[tag->index] ); + values[3] = v4l2_get_saturation( vj_tag_input->unicap[tag->index] ); + values[4] = v4l2_get_temperature( vj_tag_input->unicap[tag->index] ); + values[5] = v4l2_get_gamma( vj_tag_input->unicap[tag->index] ); + values[6] = v4l2_get_sharpness( vj_tag_input->unicap[tag->index] ); + values[7] = v4l2_get_gain( vj_tag_input->unicap[tag->index] ); + values[8] = v4l2_get_red_balance( vj_tag_input->unicap[tag->index] ); + values[9] = v4l2_get_blue_balance( vj_tag_input->unicap[tag->index] ); + values[10]= -1; + values[11]= v4l2_get_gain(vj_tag_input->unicap[tag->index]); + values[12]= v4l2_get_backlight_compensation( vj_tag_input->unicap[tag->index] ); + values[13]= v4l2_get_whiteness( vj_tag_input->unicap[tag->index] ); + values[14]= v4l2_get_black_level( vj_tag_input->unicap[tag->index]); + values[15]= v4l2_get_exposure(vj_tag_input->unicap[tag->index] ); + values[16]= v4l2_get_auto_white_balance( vj_tag_input->unicap[tag->index] ); + values[17]= v4l2_get_autogain( vj_tag_input->unicap[tag->index] ); + values[18]= v4l2_get_hue_auto(vj_tag_input->unicap[tag->index] ); + values[19]= v4l2_get_hflip(vj_tag_input->unicap[tag->index] ); + values[20]= v4l2_get_vflip(vj_tag_input->unicap[tag->index]); + return 1; #endif - } + } - return 0; + return 0; } -int vj_tag_v4l_set_control( int t1, uint32_t id, int value ) +int vj_tag_v4l_set_control( int t1, uint32_t id, int value ) { - vj_tag *tag = vj_tag_get(t1); - if(tag == NULL) - return 0; - if(tag->source_type != VJ_TAG_TYPE_V4L ) - return 0; + vj_tag *tag = vj_tag_get(t1); + if(tag == NULL) + return 0; + if(tag->source_type != VJ_TAG_TYPE_V4L ) + return 0; #ifdef HAVE_V4L2 - v4l2_set_control( vj_tag_input->unicap[tag->index], id, value ); + v4l2_set_control( vj_tag_input->unicap[tag->index], id, value ); #endif - return 1; + return 1; } int vj_tag_get_effect_any(int t1, int position) { - vj_tag *tag = vj_tag_get(t1); - if(!tag ) - return 0; - return tag->effect_chain[position]->effect_id; + vj_tag *tag = vj_tag_get(t1); + if(!tag ) + return 0; + return tag->effect_chain[position]->effect_id; } int vj_tag_chain_malloc(int t1) @@ -2003,16 +2003,16 @@ int vj_tag_chain_malloc(int t1) for(i=0; i < SAMPLE_MAX_EFFECTS; i++) { - e_id = tag->effect_chain[i]->effect_id; - if(e_id) - { - int res = 0; - tag->effect_chain[i]->fx_instance = vj_effect_activate(e_id, &res); - if( res ) - sum ++; - } - } - return sum; + e_id = tag->effect_chain[i]->effect_id; + if(e_id) + { + int res = 0; + tag->effect_chain[i]->fx_instance = vj_effect_activate(e_id, &res); + if( res ) + sum ++; + } + } + return sum; } int vj_tag_chain_free(int t1, int global) @@ -2024,34 +2024,34 @@ int vj_tag_chain_free(int t1, int global) for(i=0; i < SAMPLE_MAX_EFFECTS; i++) { - e_id = tag->effect_chain[i]->effect_id; - if(e_id!=-1) - { - if(vj_effect_initialized(e_id, tag->effect_chain[i]->fx_instance) ) - { - vj_effect_deactivate(e_id, tag->effect_chain[i]->fx_instance, global); - tag->effect_chain[i]->fx_instance = NULL; - tag->effect_chain[i]->clear = 1; - if(tag->effect_chain[i]->kf) - vpf(tag->effect_chain[i]->kf ); - tag->effect_chain[i]->kf = vpn(VEVO_ANONYMOUS_PORT ); + e_id = tag->effect_chain[i]->effect_id; + if(e_id!=-1) + { + if(vj_effect_initialized(e_id, tag->effect_chain[i]->fx_instance) ) + { + vj_effect_deactivate(e_id, tag->effect_chain[i]->fx_instance, global); + tag->effect_chain[i]->fx_instance = NULL; + tag->effect_chain[i]->clear = 1; + if(tag->effect_chain[i]->kf) + vpf(tag->effect_chain[i]->kf ); + tag->effect_chain[i]->kf = vpn(VEVO_ANONYMOUS_PORT ); - sum++; - - if( tag->effect_chain[i]->source_type == 1 && - vj_tag_get_active( tag->effect_chain[i]->channel ) && - vj_tag_get_type( tag->effect_chain[i]->channel ) == VJ_TAG_TYPE_NET ) { - vj_tag_disable( tag->effect_chain[i]->channel ); - } - } + sum++; + + if( tag->effect_chain[i]->source_type == 1 && + vj_tag_get_active( tag->effect_chain[i]->channel ) && + vj_tag_get_type( tag->effect_chain[i]->channel ) == VJ_TAG_TYPE_NET ) { + vj_tag_disable( tag->effect_chain[i]->channel ); + } + } - } - } + } + } return sum; } -int vj_tag_chain_reset_kf( int s1, int entry ) +int vj_tag_chain_reset_kf( int s1, int entry ) { vj_tag *tag = vj_tag_get(s1); if (!tag) return -1; @@ -2060,94 +2060,94 @@ int vj_tag_chain_reset_kf( int s1, int entry ) if(tag->effect_chain[entry]->kf) vpf( tag->effect_chain[entry]->kf); tag->effect_chain[entry]->kf = vpn( VEVO_ANONYMOUS_PORT ); - return 1; + return 1; } -int vj_tag_get_kf_status(int s1, int entry, int *type ) +int vj_tag_get_kf_status(int s1, int entry, int *type ) { vj_tag *tag = vj_tag_get(s1); if (!tag) - return 0; + return 0; if(type != NULL) - *type = tag->effect_chain[entry]->kf_type; + *type = tag->effect_chain[entry]->kf_type; return tag->effect_chain[entry]->kf_status; } -void vj_tag_set_kf_type(int s1, int entry, int type ) +void vj_tag_set_kf_type(int s1, int entry, int type ) { vj_tag *tag = vj_tag_get(s1); if (!tag) - return; + return; tag->effect_chain[entry]->kf_type = type; } -int vj_tag_get_kf_tokens( int s1, int entry, int id, int *start,int *end, int *type, int *status) +int vj_tag_get_kf_tokens( int s1, int entry, int id, int *start,int *end, int *type, int *status) { vj_tag *tag = vj_tag_get(s1); if (!tag) - return 0; + return 0; return keyframe_get_tokens( tag->effect_chain[entry]->kf,id, start,end,type,status); } -int vj_tag_chain_set_kf_status( int s1, int entry, int status ) +int vj_tag_chain_set_kf_status( int s1, int entry, int status ) { vj_tag *tag = vj_tag_get(s1); if (!tag) return -1; tag->effect_chain[entry]->kf_status = status; - return 1; + return 1; } unsigned char *vj_tag_chain_get_kfs( int s1, int entry, int parameter_id, int *len ) { vj_tag *tag = vj_tag_get(s1); if (!tag) - return NULL; + return NULL; if ( entry < 0 || entry > SAMPLE_MAX_EFFECTS ) return NULL; if( parameter_id < 0 || parameter_id > 9 ) - return NULL; + return NULL; unsigned char *data = keyframe_pack( tag->effect_chain[entry]->kf, parameter_id,entry, len ); if( data ) - return data; + return data; return NULL; } void *vj_tag_get_kf_port( int s1, int entry ) { - vj_tag *tag = vj_tag_get(s1); - if(!tag) return NULL; + vj_tag *tag = vj_tag_get(s1); + if(!tag) return NULL; return tag->effect_chain[entry]->kf; } -int vj_tag_chain_set_kfs( int s1, int len, unsigned char *data ) +int vj_tag_chain_set_kfs( int s1, int len, unsigned char *data ) { - vj_tag *tag = vj_tag_get(s1); - if (!tag) return -1; - if( len <= 0 ) - { - veejay_msg(0, "Invalid keyframe packet length"); - return -1; - } + vj_tag *tag = vj_tag_get(s1); + if (!tag) return -1; + if( len <= 0 ) + { + veejay_msg(0, "Invalid keyframe packet length"); + return -1; + } - int entry = 0; - if(!keyframe_unpack( data, len, &entry,s1,0) ) - { - veejay_msg(0, "Unable to unpack keyframe packet"); - return -1; - } + int entry = 0; + if(!keyframe_unpack( data, len, &entry,s1,0) ) + { + veejay_msg(0, "Unable to unpack keyframe packet"); + return -1; + } - if ( entry < 0 || entry > SAMPLE_MAX_EFFECTS ) - { - veejay_msg(0, "Invalid FX entry in KF packet"); - return -1; - } + if ( entry < 0 || entry > SAMPLE_MAX_EFFECTS ) + { + veejay_msg(0, "Invalid FX entry in KF packet"); + return -1; + } - return 1; + return 1; } @@ -2158,146 +2158,146 @@ int vj_tag_set_effect(int t1, int position, int effect_id) vj_tag *tag = vj_tag_get(t1); if (!tag) - return 0; + return 0; if (position < 0 || position >= SAMPLE_MAX_EFFECTS) - return 0; + return 0; - if( vj_effect_single_instance( effect_id )) - return 0; + if( vj_effect_single_instance( effect_id )) + return 0; if( tag->effect_chain[position]->effect_id != -1 && tag->effect_chain[position]->effect_id != effect_id ) { - //verify if the effect should be discarded - if(vj_effect_initialized( tag->effect_chain[position]->effect_id, tag->effect_chain[position]->fx_instance )) - { - if(!vj_effect_is_plugin( tag->effect_chain[position]->effect_id )) { - int frm = 1; - for( i =0; i < SAMPLE_MAX_EFFECTS; i ++ ) { - if( i == position ) - continue; - if( tag->effect_chain[i]->effect_id == effect_id ) - frm = 0; - } - if( frm == 1 ) { - vj_effect_deactivate( tag->effect_chain[position]->effect_id, tag->effect_chain[position]->fx_instance,1 ); - tag->effect_chain[position]->fx_instance = NULL; - tag->effect_chain[position]->clear = 1; - } - } - else { - vj_effect_deactivate( tag->effect_chain[position]->effect_id, tag->effect_chain[position]->fx_instance,1 ); - tag->effect_chain[position]->fx_instance = NULL; - tag->effect_chain[position]->clear = 1; - } - } - if( tag->effect_chain[position]->source_type == 1 && - vj_tag_get_active( tag->effect_chain[position]->channel ) && - tag->effect_chain[position]->channel != t1 && - vj_tag_get_type( tag->effect_chain[position]->channel ) == VJ_TAG_TYPE_NET ) { - vj_tag_disable( tag->effect_chain[position]->channel ); - } + //verify if the effect should be discarded + if(vj_effect_initialized( tag->effect_chain[position]->effect_id, tag->effect_chain[position]->fx_instance )) + { + if(!vj_effect_is_plugin( tag->effect_chain[position]->effect_id )) { + int frm = 1; + for( i =0; i < SAMPLE_MAX_EFFECTS; i ++ ) { + if( i == position ) + continue; + if( tag->effect_chain[i]->effect_id == effect_id ) + frm = 0; + } + if( frm == 1 ) { + vj_effect_deactivate( tag->effect_chain[position]->effect_id, tag->effect_chain[position]->fx_instance,1 ); + tag->effect_chain[position]->fx_instance = NULL; + tag->effect_chain[position]->clear = 1; + } + } + else { + vj_effect_deactivate( tag->effect_chain[position]->effect_id, tag->effect_chain[position]->fx_instance,1 ); + tag->effect_chain[position]->fx_instance = NULL; + tag->effect_chain[position]->clear = 1; + } + } + if( tag->effect_chain[position]->source_type == 1 && + vj_tag_get_active( tag->effect_chain[position]->channel ) && + tag->effect_chain[position]->channel != t1 && + vj_tag_get_type( tag->effect_chain[position]->channel ) == VJ_TAG_TYPE_NET ) { + vj_tag_disable( tag->effect_chain[position]->channel ); + } } if (!vj_effect_initialized(effect_id, tag->effect_chain[position]->fx_instance )) { - int res = 0; - tag->effect_chain[position]->fx_instance = vj_effect_activate( effect_id, &res ); - if(!res) { - veejay_msg(VEEJAY_MSG_ERROR, "Cannot activate FX %d", effect_id ); - tag->effect_chain[position]->effect_id = -1; - tag->effect_chain[position]->e_flag = 1; - for( i = 0; i < SAMPLE_MAX_PARAMETERS; i ++ ) - tag->effect_chain[position]->arg[i] = 0; + int res = 0; + tag->effect_chain[position]->fx_instance = vj_effect_activate( effect_id, &res ); + if(!res) { + veejay_msg(VEEJAY_MSG_ERROR, "Cannot activate FX %d", effect_id ); + tag->effect_chain[position]->effect_id = -1; + tag->effect_chain[position]->e_flag = 1; + for( i = 0; i < SAMPLE_MAX_PARAMETERS; i ++ ) + tag->effect_chain[position]->arg[i] = 0; - tag->effect_chain[position]->frame_trimmer = 0; - if( position == tag->fade_entry ) - tag->fade_entry = -1; - return 0; - } + tag->effect_chain[position]->frame_trimmer = 0; + if( position == tag->fade_entry ) + tag->fade_entry = -1; + return 0; + } } - if( tag->effect_chain[position]->effect_id != effect_id ) - { - params = vj_effect_get_num_params(effect_id); - for (i = 0; i < params; i++) { - tag->effect_chain[position]->arg[i] = vj_effect_get_default(effect_id, i); - } - tag->effect_chain[position]->e_flag = 1; - tag->effect_chain[position]->kf_status = 0; - tag->effect_chain[position]->kf_type = 0; - if(tag->effect_chain[position]->kf) - vpf(tag->effect_chain[position]->kf ); - // tag does not have chain_alloc_kf - tag->effect_chain[position]->kf = vpn(VEVO_ANONYMOUS_PORT ); - } + if( tag->effect_chain[position]->effect_id != effect_id ) + { + params = vj_effect_get_num_params(effect_id); + for (i = 0; i < params; i++) { + tag->effect_chain[position]->arg[i] = vj_effect_get_default(effect_id, i); + } + tag->effect_chain[position]->e_flag = 1; + tag->effect_chain[position]->kf_status = 0; + tag->effect_chain[position]->kf_type = 0; + if(tag->effect_chain[position]->kf) + vpf(tag->effect_chain[position]->kf ); + // tag does not have chain_alloc_kf + tag->effect_chain[position]->kf = vpn(VEVO_ANONYMOUS_PORT ); + } tag->effect_chain[position]->effect_id = effect_id; - if (vj_effect_get_extra_frame(effect_id)) - { - if(tag->effect_chain[position]->source_type < 0) - tag->effect_chain[position]->source_type = 1; - if(tag->effect_chain[position]->channel <= 0 ) - tag->effect_chain[position]->channel = t1; + if (vj_effect_get_extra_frame(effect_id)) + { + if(tag->effect_chain[position]->source_type < 0) + tag->effect_chain[position]->source_type = 1; + if(tag->effect_chain[position]->channel <= 0 ) + tag->effect_chain[position]->channel = t1; } - else - { - if( position == tag->fade_entry) { - if( tag->fade_method == 4 ) - tag->fade_method = 2; /* auto switch */ - else if(tag->fade_method == 3 ) - tag->fade_method = 1; - } - } - return 1; + else + { + if( position == tag->fade_entry) { + if( tag->fade_method == 4 ) + tag->fade_method = 2; /* auto switch */ + else if(tag->fade_method == 3 ) + tag->fade_method = 1; + } + } + return 1; } -int vj_tag_has_cali_fx( int t1 ) { +int vj_tag_has_cali_fx( int t1 ) { vj_tag *tag = vj_tag_get(t1); if (!tag) - return -1; + return -1; int i; for( i = 0; i < SAMPLE_MAX_EFFECTS; i ++ ) { - if( tag->effect_chain[i]->effect_id == VJ_IMAGE_EFFECT_CALI ) - return i; + if( tag->effect_chain[i]->effect_id == VJ_IMAGE_EFFECT_CALI ) + return i; } return -1; } -void vj_tag_cali_prepare_now( int t1, int fx_id ) { - vj_tag *tag = vj_tag_get(t1); - if(tag==NULL) - return; - if(tag->source_type != VJ_TAG_TYPE_CALI ) - return; - cali_tag_t *p = (cali_tag_t*) vj_tag_input->cali[tag->index]; - if( p == NULL ) - return; - if( fx_id <= 0) - return; +void vj_tag_cali_prepare_now( int t1, int fx_id ) { + vj_tag *tag = vj_tag_get(t1); + if(tag==NULL) + return; + if(tag->source_type != VJ_TAG_TYPE_CALI ) + return; + cali_tag_t *p = (cali_tag_t*) vj_tag_input->cali[tag->index]; + if( p == NULL ) + return; + if( fx_id <= 0) + return; - cali_prepare( vj_effect_get_data(fx_id), - p->mean[0], - p->mean[1], - p->mean[2], - p->data, - vj_tag_input->width * vj_tag_input->height, - vj_tag_input->uv_len ); + cali_prepare( vj_effect_get_data(fx_id), + p->mean[0], + p->mean[1], + p->mean[2], + p->data, + vj_tag_input->width * vj_tag_input->height, + vj_tag_input->uv_len ); } -void vj_tag_cali_prepare( int t1 , int pos, int cali_tag) { +void vj_tag_cali_prepare( int t1 , int pos, int cali_tag) { vj_tag *tag = vj_tag_get(t1); if (!tag) - return; + return; vj_tag *tagc = vj_tag_get(cali_tag); if(!tagc) - return; + return; if(tagc->source_type != VJ_TAG_TYPE_CALI) - return; + return; int fx_id = vj_effect_real_to_sequence( tag->effect_chain[pos]->effect_id ); if (fx_id >= 0 ) { - vj_tag_cali_prepare_now( cali_tag, fx_id ); + vj_tag_cali_prepare_now( cali_tag, fx_id ); } } @@ -2305,9 +2305,9 @@ int vj_tag_get_chain_status(int t1, int position) { vj_tag *tag = vj_tag_get(t1); if (!tag) - return -1; + return -1; if (position >= SAMPLE_MAX_EFFECTS) - return -1; + return -1; return tag->effect_chain[position]->e_flag; } @@ -2316,7 +2316,7 @@ int vj_tag_set_chain_status(int t1, int position, int status) vj_tag *tag = vj_tag_get(t1); if (position >= SAMPLE_MAX_EFFECTS) - return -1; + return -1; tag->effect_chain[position]->e_flag = status; return 1; } @@ -2325,9 +2325,9 @@ int vj_tag_get_trimmer(int t1, int position) { vj_tag *tag = vj_tag_get(t1); if (!tag) - return 0; + return 0; if (position < 0 || position >= SAMPLE_MAX_EFFECTS) - return 0; + return 0; return tag->effect_chain[position]->frame_trimmer; } @@ -2335,51 +2335,51 @@ int vj_tag_set_trimmer(int t1, int position, int trim) { vj_tag *tag = vj_tag_get(t1); if (!tag) - return -1; + return -1; if (position < 0 || position >= SAMPLE_MAX_EFFECTS) - return -1; + return -1; tag->effect_chain[position]->frame_trimmer = trim; return 1; } int vj_tag_get_all_effect_args(int t1, int position, int *args, - int arg_len, int n_frame) + int arg_len, int n_frame) { int i = 0; vj_tag *tag = vj_tag_get(t1); if (!tag) - return -1; + return -1; if (arg_len == 0 ) - return 1; + return 1; if (!args) - return -1; + return -1; if (position < 0 || position >= SAMPLE_MAX_EFFECTS) - return -1; + return -1; if (arg_len < 0 || arg_len > SAMPLE_MAX_PARAMETERS) - return -1; + return -1; - if( tag->effect_chain[position]->kf_status ) - { - for( i =0;i effect_chain[position]->kf_status) { - int tmp = 0; - if(!get_keyframe_value( tag->effect_chain[position]->kf, n_frame, i ,&tmp ) ) - args[i] = tag->effect_chain[position]->arg[i]; - else { - args[i] = tmp; - } - } - else { - args[i] = tag->effect_chain[position]->arg[i]; - } - } - } - else - { - for( i = 0; i < arg_len; i ++ ) - args[i] = tag->effect_chain[position]->arg[i]; - } + if( tag->effect_chain[position]->kf_status ) + { + for( i =0;i effect_chain[position]->kf_status) { + int tmp = 0; + if(!get_keyframe_value( tag->effect_chain[position]->kf, n_frame, i ,&tmp ) ) + args[i] = tag->effect_chain[position]->arg[i]; + else { + args[i] = tmp; + } + } + else { + args[i] = tag->effect_chain[position]->arg[i]; + } + } + } + else + { + for( i = 0; i < arg_len; i ++ ) + args[i] = tag->effect_chain[position]->arg[i]; + } return 1; } @@ -2388,11 +2388,11 @@ int vj_tag_get_effect_arg(int t1, int position, int argnr) { vj_tag *tag = vj_tag_get(t1); if (!tag) - return -1; + return -1; if (position < 0 || position >= SAMPLE_MAX_EFFECTS) - return -1; + return -1; if (argnr < 0 || argnr > SAMPLE_MAX_PARAMETERS) - return -1; + return -1; return tag->effect_chain[position]->arg[argnr]; } @@ -2401,11 +2401,11 @@ int vj_tag_set_effect_arg(int t1, int position, int argnr, int value) { vj_tag *tag = vj_tag_get(t1); if (!tag) - return -1; + return -1; if (position < 0 || position >= SAMPLE_MAX_EFFECTS) - return -1; + return -1; if (argnr < 0 || argnr > SAMPLE_MAX_PARAMETERS) - return -1; + return -1; tag->effect_chain[position]->arg[argnr] = value; return 1; @@ -2415,7 +2415,7 @@ int vj_tag_get_type(int t1) { vj_tag *tag = vj_tag_get(t1); if (!tag) - return -1; + return -1; return tag->source_type; } @@ -2423,7 +2423,7 @@ int vj_tag_get_logical_index(int t1) { vj_tag *tag = vj_tag_get(t1); if (!tag) - return -1; + return -1; return tag->index; } @@ -2431,7 +2431,7 @@ int vj_tag_set_logical_index(int t1, int stream_nr) { vj_tag *tag = vj_tag_get(t1); if (!tag) - return -1; + return -1; tag->index = stream_nr; return 1; } @@ -2440,99 +2440,99 @@ int vj_tag_get_depth(int t1) { vj_tag *tag = vj_tag_get(t1); if (!tag) - return -1; + return -1; return tag->index; } int vj_tag_disable(int t1) { - vj_tag *tag = vj_tag_get(t1); - if(!tag) return -1; - if(tag->active == 0) - { - veejay_msg(VEEJAY_MSG_INFO, "Already inactive"); - return 1; - } - if(tag->source_type == VJ_TAG_TYPE_NET || tag->source_type == VJ_TAG_TYPE_MCAST) - { - net_thread_stop( tag ); - } - if(tag->source_type == VJ_TAG_TYPE_V4L && !tag->clone ) - { + vj_tag *tag = vj_tag_get(t1); + if(!tag) return -1; + if(tag->active == 0) + { + veejay_msg(VEEJAY_MSG_INFO, "Already inactive"); + return 1; + } + if(tag->source_type == VJ_TAG_TYPE_NET || tag->source_type == VJ_TAG_TYPE_MCAST) + { + net_thread_stop( tag ); + } + if(tag->source_type == VJ_TAG_TYPE_V4L && !tag->clone ) + { #ifdef HAVE_V4L2 - if(tag->capture_type==1) { - if( no_v4l2_threads_ ) { - v4l2_set_status( vj_tag_input->unicap[tag->index],1); - } else { - v4l2_thread_set_status( v4l2_thread_info_get(vj_tag_input->unicap[tag->index]),0 ); - } - } + if(tag->capture_type==1) { + if( no_v4l2_threads_ ) { + v4l2_set_status( vj_tag_input->unicap[tag->index],1); + } else { + v4l2_thread_set_status( v4l2_thread_info_get(vj_tag_input->unicap[tag->index]),0 ); + } + } #endif - } + } #ifdef USE_GDK_PIXBUF - if(tag->source_type == VJ_TAG_TYPE_PICTURE ) - { - vj_picture *pic = vj_tag_input->picture[tag->index]; - if(pic) - { - vj_picture_cleanup( pic->pic ); - } - vj_tag_input->picture[tag->index] = pic; - } + if(tag->source_type == VJ_TAG_TYPE_PICTURE ) + { + vj_picture *pic = vj_tag_input->picture[tag->index]; + if(pic) + { + vj_picture_cleanup( pic->pic ); + } + vj_tag_input->picture[tag->index] = pic; + } #endif - tag->active = 0; - return 1; + tag->active = 0; + return 1; } int vj_tag_enable(int t1) { - vj_tag *tag = vj_tag_get(t1); - if( tag->source_type == VJ_TAG_TYPE_V4L ) - { - if(tag->capture_type == 1 ) { + vj_tag *tag = vj_tag_get(t1); + if( tag->source_type == VJ_TAG_TYPE_V4L ) + { + if(tag->capture_type == 1 ) { #ifdef HAVE_V4L2 - if( no_v4l2_threads_ ) { - v4l2_set_status( vj_tag_input->unicap[tag->index],1); - } else { - v4l2_thread_set_status( v4l2_thread_info_get( vj_tag_input->unicap[tag->index] ), 1 ); - } + if( no_v4l2_threads_ ) { + v4l2_set_status( vj_tag_input->unicap[tag->index],1); + } else { + v4l2_thread_set_status( v4l2_thread_info_get( vj_tag_input->unicap[tag->index] ), 1 ); + } #endif - } - return 1; - } - if(tag->source_type == VJ_TAG_TYPE_NET || tag->source_type == VJ_TAG_TYPE_MCAST ) - { - if(!net_thread_start(tag, vj_tag_input->width , vj_tag_input->height, vj_tag_input->pix_fmt)) - { - veejay_msg(VEEJAY_MSG_ERROR, - "Unable to start thread"); - return 1; - } - } + } + return 1; + } + if(tag->source_type == VJ_TAG_TYPE_NET || tag->source_type == VJ_TAG_TYPE_MCAST ) + { + if(!net_thread_start(tag, vj_tag_input->width , vj_tag_input->height, vj_tag_input->pix_fmt)) + { + veejay_msg(VEEJAY_MSG_ERROR, + "Unable to start thread"); + return 1; + } + } #ifdef USE_GDK_PIXBUF - if( tag->source_type == VJ_TAG_TYPE_PICTURE ) - { - vj_picture *p = vj_tag_input->picture[ tag->index ]; - p->pic = vj_picture_open( tag->source_name, - vj_tag_input->width, vj_tag_input->height, - vj_tag_input->pix_fmt ); + if( tag->source_type == VJ_TAG_TYPE_PICTURE ) + { + vj_picture *p = vj_tag_input->picture[ tag->index ]; + p->pic = vj_picture_open( tag->source_name, + vj_tag_input->width, vj_tag_input->height, + vj_tag_input->pix_fmt ); - if(!p->pic) - return -1; + if(!p->pic) + return -1; - vj_tag_input->picture[tag->index] = p; - veejay_msg(VEEJAY_MSG_DEBUG, "Streaming from picture '%s'", tag->source_name ); - } + vj_tag_input->picture[tag->index] = p; + veejay_msg(VEEJAY_MSG_DEBUG, "Streaming from picture '%s'", tag->source_name ); + } #endif - tag->active = 1; + tag->active = 1; - return 1; + return 1; } int vj_tag_set_depth(int t1, int depth) { vj_tag *tag = vj_tag_get(t1); if (!tag) - return -1; + return -1; tag->depth = depth; return 1; } @@ -2543,44 +2543,44 @@ int vj_tag_set_active(int t1, int active) vj_tag *tag; tag = vj_tag_get(t1); if (!tag) - return -1; + return -1; if(active == tag->active) - return 1; - + return 1; + switch (tag->source_type) { - case VJ_TAG_TYPE_V4L: + case VJ_TAG_TYPE_V4L: - if(tag->capture_type == 1 ) { + if(tag->capture_type == 1 ) { #ifdef HAVE_V4L2 - if( no_v4l2_threads_ ) { - v4l2_set_status( vj_tag_input->unicap[tag->index],1); + if( no_v4l2_threads_ ) { + v4l2_set_status( vj_tag_input->unicap[tag->index],1); - } else { - v4l2_thread_set_status( v4l2_thread_info_get( vj_tag_input->unicap[tag->index]), active ); - } + } else { + v4l2_thread_set_status( v4l2_thread_info_get( vj_tag_input->unicap[tag->index]), active ); + } #endif - } - tag->active = active; - break; - case VJ_TAG_TYPE_YUV4MPEG: - if(active==0) - { - tag->active = 0; - vj_yuv_stream_stop_read( vj_tag_input->stream[tag->index]); - } - break; - case VJ_TAG_TYPE_MCAST: - case VJ_TAG_TYPE_NET: - case VJ_TAG_TYPE_PICTURE: - if(active == 1 ) - vj_tag_enable( t1 ); - else - vj_tag_disable( t1 ); - break; + } + tag->active = active; + break; + case VJ_TAG_TYPE_YUV4MPEG: + if(active==0) + { + tag->active = 0; + vj_yuv_stream_stop_read( vj_tag_input->stream[tag->index]); + } + break; + case VJ_TAG_TYPE_MCAST: + case VJ_TAG_TYPE_NET: + case VJ_TAG_TYPE_PICTURE: + if(active == 1 ) + vj_tag_enable( t1 ); + else + vj_tag_disable( t1 ); + break; default: - tag->active = active; - break; + tag->active = active; + break; } return 1; @@ -2590,39 +2590,39 @@ int vj_tag_get_active(int t1) { vj_tag *tag = vj_tag_get(t1); if (!tag) - return -1; + return -1; return tag->active; } -int vj_tag_get_subrender(int t1) +int vj_tag_get_subrender(int t1) { - vj_tag *tag = vj_tag_get(t1); - if(!tag) - return -1; - return tag->subrender; + vj_tag *tag = vj_tag_get(t1); + if(!tag) + return -1; + return tag->subrender; } -void vj_tag_set_subrender(int t1, int status) +void vj_tag_set_subrender(int t1, int status) { - vj_tag *tag = vj_tag_get(t1); - if(!tag) - return; - tag->subrender = status; + vj_tag *tag = vj_tag_get(t1); + if(!tag) + return; + tag->subrender = status; } int vj_tag_set_chain_channel(int t1, int position, int channel) { vj_tag *tag = vj_tag_get(t1); if (!tag) - return -1; + return -1; if (position < 0 || position >= SAMPLE_MAX_EFFECTS) - return -1; + return -1; if( tag->effect_chain[position]->source_type == 1 && - vj_tag_get_active( tag->effect_chain[position]->channel ) && - tag->effect_chain[position]->channel != t1 && - vj_tag_get_type( tag->effect_chain[position]->channel ) == VJ_TAG_TYPE_NET ) { - vj_tag_disable( tag->effect_chain[position]->channel ); + vj_tag_get_active( tag->effect_chain[position]->channel ) && + tag->effect_chain[position]->channel != t1 && + vj_tag_get_type( tag->effect_chain[position]->channel ) == VJ_TAG_TYPE_NET ) { + vj_tag_disable( tag->effect_chain[position]->channel ); } @@ -2635,25 +2635,25 @@ int vj_tag_get_chain_channel(int t1, int position) { vj_tag *tag = vj_tag_get(t1); if (!tag) - return -1; + return -1; if (position < 0 || position >= SAMPLE_MAX_EFFECTS) - return -1; + return -1; return tag->effect_chain[position]->channel; } int vj_tag_set_chain_source(int t1, int position, int source) { vj_tag *tag = vj_tag_get(t1); if (!tag) - return -1; + return -1; if (position < 0 || position >= SAMPLE_MAX_EFFECTS) - return -1; + return -1; - if( tag->effect_chain[position]->source_type == 1 && - vj_tag_get_active( tag->effect_chain[position]->channel ) && - tag->effect_chain[position]->channel != t1 && - vj_tag_get_type( tag->effect_chain[position]->channel ) == VJ_TAG_TYPE_NET ) { - vj_tag_disable( tag->effect_chain[position]->channel ); - } + if( tag->effect_chain[position]->source_type == 1 && + vj_tag_get_active( tag->effect_chain[position]->channel ) && + tag->effect_chain[position]->channel != t1 && + vj_tag_get_type( tag->effect_chain[position]->channel ) == VJ_TAG_TYPE_NET ) { + vj_tag_disable( tag->effect_chain[position]->channel ); + } tag->effect_chain[position]->source_type = source; return 1; @@ -2663,9 +2663,9 @@ int vj_tag_get_chain_source(int t1, int position) { vj_tag *tag = vj_tag_get(t1); if (!tag) - return -1; + return -1; if (position < 0 || position >= SAMPLE_MAX_EFFECTS) - return -1; + return -1; return tag->effect_chain[position]->source_type; } @@ -2674,101 +2674,101 @@ int vj_tag_chain_size(int t1) int i; vj_tag *tag = vj_tag_get(t1); if (!tag) - return -1; + return -1; for (i = SAMPLE_MAX_EFFECTS - 1; i != 0; i--) { - if (tag->effect_chain[i]->effect_id != -1) - return i; + if (tag->effect_chain[i]->effect_id != -1) + return i; } return 0; } int vj_tag_get_effect_status(int t1) { - vj_tag *tag = vj_tag_get(t1); - if(!tag) return -1; - return tag->effect_toggle; + vj_tag *tag = vj_tag_get(t1); + if(!tag) return -1; + return tag->effect_toggle; } int vj_tag_get_selected_entry(int t1) { - vj_tag *tag = vj_tag_get(t1); - if(!tag) return -1; - return tag->selected_entry; + vj_tag *tag = vj_tag_get(t1); + if(!tag) return -1; + return tag->selected_entry; } int vj_tag_set_effect_status(int t1, int status) { - vj_tag *tag = vj_tag_get(t1); - if(!tag) return -1; - if(status==1 || status==0) - { - tag->effect_toggle = status; - } - return 1; + vj_tag *tag = vj_tag_get(t1); + if(!tag) return -1; + if(status==1 || status==0) + { + tag->effect_toggle = status; + } + return 1; } int vj_tag_set_selected_entry(int t1, int position) { - vj_tag *tag = vj_tag_get(t1); - if(!tag) return -1; - if(position < 0 || position >= SAMPLE_MAX_EFFECTS) return -1; - tag->selected_entry = position; - return 1; + vj_tag *tag = vj_tag_get(t1); + if(!tag) return -1; + if(position < 0 || position >= SAMPLE_MAX_EFFECTS) return -1; + tag->selected_entry = position; + return 1; } static int vj_tag_chain_can_delete(vj_tag *tag, int reserved, int effect_id) { - int i; + int i; - if( vj_effect_is_plugin(effect_id ) ) - return 1; + if( vj_effect_is_plugin(effect_id ) ) + return 1; - for(i=0; i < SAMPLE_MAX_EFFECTS; i++) - { - if(i != reserved && effect_id == tag->effect_chain[i]->effect_id) - return 0; - } - - return 1; + for(i=0; i < SAMPLE_MAX_EFFECTS; i++) + { + if(i != reserved && effect_id == tag->effect_chain[i]->effect_id) + return 0; + } + + return 1; } int vj_tag_chain_remove(int t1, int index) { vj_tag *tag = vj_tag_get(t1); if (!tag) - return -1; + return -1; if( tag->effect_chain[index]->effect_id != -1) { - if( vj_effect_initialized( tag->effect_chain[index]->effect_id, tag->effect_chain[index]->fx_instance ) && vj_tag_chain_can_delete( tag, index, tag->effect_chain[index]->effect_id ) ) - { - vj_effect_deactivate( tag->effect_chain[index]->effect_id, tag->effect_chain[index]->fx_instance,1 ); - tag->effect_chain[index]->fx_instance = NULL; - tag->effect_chain[index]->clear = 1; - } + if( vj_effect_initialized( tag->effect_chain[index]->effect_id, tag->effect_chain[index]->fx_instance ) && vj_tag_chain_can_delete( tag, index, tag->effect_chain[index]->effect_id ) ) + { + vj_effect_deactivate( tag->effect_chain[index]->effect_id, tag->effect_chain[index]->fx_instance,1 ); + tag->effect_chain[index]->fx_instance = NULL; + tag->effect_chain[index]->clear = 1; + } } tag->effect_chain[index]->effect_id = -1; tag->effect_chain[index]->e_flag = 0; if( tag->effect_chain[index]->kf ) - vpf(tag->effect_chain[index]->kf ); - - tag->effect_chain[index]->kf = vpn(VEVO_ANONYMOUS_PORT); + vpf(tag->effect_chain[index]->kf ); + + tag->effect_chain[index]->kf = vpn(VEVO_ANONYMOUS_PORT); - if( tag->effect_chain[index]->source_type == 1 && - vj_tag_get_active( tag->effect_chain[index]->channel ) && - tag->effect_chain[index]->channel != t1 && - vj_tag_get_type( tag->effect_chain[index]->channel ) == VJ_TAG_TYPE_NET ) { - vj_tag_disable( tag->effect_chain[index]->channel ); - } + if( tag->effect_chain[index]->source_type == 1 && + vj_tag_get_active( tag->effect_chain[index]->channel ) && + tag->effect_chain[index]->channel != t1 && + vj_tag_get_type( tag->effect_chain[index]->channel ) == VJ_TAG_TYPE_NET ) { + vj_tag_disable( tag->effect_chain[index]->channel ); + } tag->effect_chain[index]->source_type = 1; tag->effect_chain[index]->channel = t1; //set to self - int j; + int j; for (j = 0; j < SAMPLE_MAX_PARAMETERS; j++) - tag->effect_chain[index]->arg[j] = 0; + tag->effect_chain[index]->arg[j] = 0; - if( index == tag->fade_entry ) - tag->fade_entry = -1; + if( index == tag->fade_entry ) + tag->fade_entry = -1; return 1; } @@ -2778,69 +2778,69 @@ void vj_tag_get_source_name(int t1, char *dst) { vj_tag *tag = vj_tag_get(t1); if (tag) { - sprintf(dst, "%s", tag->source_name); + sprintf(dst, "%s", tag->source_name); } else { - vj_tag_get_description( tag->source_type, dst ); + vj_tag_get_description( tag->source_type, dst ); } } -void vj_tag_get_by_type(int id,int type, char *description ) +void vj_tag_get_by_type(int id,int type, char *description ) { - switch (type) { - case VJ_TAG_TYPE_GENERATOR: - sprintf(description, "Generator"); - break; + switch (type) { + case VJ_TAG_TYPE_GENERATOR: + sprintf(description, "Generator"); + break; case VJ_TAG_TYPE_COLOR: - sprintf(description, "Solid" ); - break; + sprintf(description, "Solid" ); + break; case VJ_TAG_TYPE_NONE: - sprintf(description, "%s", "EditList"); - break; - case VJ_TAG_TYPE_MCAST: - sprintf(description, "%s", "Multicast"); - break; - case VJ_TAG_TYPE_NET: - sprintf(description, "%s", "Unicast"); - break; + sprintf(description, "%s", "EditList"); + break; + case VJ_TAG_TYPE_MCAST: + sprintf(description, "%s", "Multicast"); + break; + case VJ_TAG_TYPE_NET: + sprintf(description, "%s", "Unicast"); + break; #ifdef USE_GDK_PIXBUF - case VJ_TAG_TYPE_PICTURE: - sprintf(description, "%s", "GdkPixbuf"); - break; + case VJ_TAG_TYPE_PICTURE: + sprintf(description, "%s", "GdkPixbuf"); + break; #endif case VJ_TAG_TYPE_V4L: - sprintf(description, "%s", "Video4Linux"); - break; + sprintf(description, "%s", "Video4Linux"); + break; #ifdef SUPPORT_READ_DV2 - case VJ_TAG_TYPE_DV1394: - sprintf(description, "%s", "DV1394"); - break; + case VJ_TAG_TYPE_DV1394: + sprintf(description, "%s", "DV1394"); + break; #endif case VJ_TAG_TYPE_YUV4MPEG: - sprintf(description, "%s", "YUV4MPEG"); - break; + sprintf(description, "%s", "YUV4MPEG"); + break; case VJ_TAG_TYPE_CALI: - sprintf(description, "%s", "Image Calibration"); - break; - case VJ_TAG_TYPE_CLONE: - sprintf(description, "%s", "Clone" ); - break; - default: - sprintf(description ,"T%d", id ); - break; - } + sprintf(description, "%s", "Image Calibration"); + break; + case VJ_TAG_TYPE_CLONE: + sprintf(description, "%s", "Clone" ); + break; + default: + sprintf(description ,"T%d", id ); + break; + } } void vj_tag_get_descriptive(int id, char *description) { vj_tag *tag = vj_tag_get(id); if(!tag) - { - sprintf(description, "invalid"); - } - else - { - vj_tag_get_by_type( id, tag->source_type, description ); - } + { + sprintf(description, "invalid"); + } + else + { + vj_tag_get_by_type( id, tag->source_type, description ); + } } /* this method tries to find a tag of given type */ @@ -2848,8 +2848,8 @@ int vj_tag_by_type(int type) { int min; for (min = 1; min < this_tag_id; ++min) { - if (vj_tag_get_type(min) == type) - return min; + if (vj_tag_get_type(min) == type) + return min; } return 0; } @@ -2860,10 +2860,10 @@ int vj_tag_set_offset(int t1, int chain_entry, int frame_offset) { vj_tag *tag = vj_tag_get(t1); if (!tag) - return -1; + return -1; /* set to zero if frame_offset is greater than sample length */ if (frame_offset < 0) - frame_offset = 0; + frame_offset = 0; tag->effect_chain[chain_entry]->frame_offset = frame_offset; return 1; @@ -2873,7 +2873,7 @@ int vj_tag_get_offset(int t1, int chain_entry) { vj_tag *tag = vj_tag_get(t1); if (!tag) - return -1; + return -1; return tag->effect_chain[chain_entry]->frame_offset; } @@ -2904,31 +2904,31 @@ int vj_tag_reset_autosplit(int s1) long vj_tag_get_frames_left(int s1) { - vj_tag *si= vj_tag_get(s1); - if(!si) return 0; - return ( si->encoder_frames_to_record - si->encoder_total_frames_recorded ); + vj_tag *si= vj_tag_get(s1); + if(!si) return 0; + return ( si->encoder_frames_to_record - si->encoder_total_frames_recorded ); } int vj_tag_encoder_active(int s1) { - vj_tag *si = vj_tag_get(s1); - if(!si)return 0; - return si->encoder_active; + vj_tag *si = vj_tag_get(s1); + if(!si)return 0; + return si->encoder_active; } -int vj_tag_var(int t1, int *type, int *fader, int *fx_sta , int *rec_sta, int *active, int *method, int *entry, int *alpha ) +int vj_tag_var(int t1, int *type, int *fader, int *fx_sta , int *rec_sta, int *active, int *method, int *entry, int *alpha ) { - vj_tag *tag = vj_tag_get(t1); - if(!tag) return 0; - *fader = tag->fader_active; - *fx_sta = tag->effect_toggle; - *rec_sta = tag->encoder_active; - *type = tag->source_type; - *active = tag->active; - *method = tag->fade_method; - *entry = tag->fade_entry; - *alpha = tag->fade_alpha; - return 1; + vj_tag *tag = vj_tag_get(t1); + if(!tag) return 0; + *fader = tag->fader_active; + *fx_sta = tag->effect_toggle; + *rec_sta = tag->encoder_active; + *type = tag->source_type; + *active = tag->active; + *method = tag->fade_method; + *entry = tag->fade_entry; + *alpha = tag->fade_alpha; + return 1; } int vj_tag_record_frame(int t1, uint8_t *buffer[4], uint8_t *abuff, int audio_size,int pixel_format) { @@ -2938,474 +2938,474 @@ int vj_tag_record_frame(int t1, uint8_t *buffer[4], uint8_t *abuff, int audio_si if(!tag->encoder_active) return -1; - long nframe = tag->encoder_frames_recorded; + long nframe = tag->encoder_frames_recorded; - buf_len = vj_avcodec_encode_frame( tag->encoder, nframe, tag->encoder_format, buffer, vj_avcodec_get_buf(tag->encoder), tag->encoder_max_size, pixel_format); + buf_len = vj_avcodec_encode_frame( tag->encoder, nframe, tag->encoder_format, buffer, vj_avcodec_get_buf(tag->encoder), tag->encoder_max_size, pixel_format); if(buf_len <= 0 ) { - veejay_msg(VEEJAY_MSG_ERROR, "Unable to encode frame" ); - return -1; + veejay_msg(VEEJAY_MSG_ERROR, "Unable to encode frame" ); + return -1; } - if(tag->encoder_file ) { - if(lav_write_frame(tag->encoder_file, vj_avcodec_get_buf(tag->encoder), buf_len,1)) - { - veejay_msg(VEEJAY_MSG_ERROR, "%s", lav_strerror()); - if( tag->encoder_frames_recorded > 1 ) { - veejay_msg(VEEJAY_MSG_WARNING, "Recorded only %ld frames", tag->encoder_frames_recorded); - return 1; //@ auto commit sample even if it did not write all frames - } - return -1; - } - - if(audio_size > 0) - { - if(lav_write_audio(tag->encoder_file, abuff, audio_size)) - { - veejay_msg(VEEJAY_MSG_ERROR, "Error writing output audio [%s]",lav_strerror()); - } - } - } - /* write OK */ - tag->encoder_frames_recorded ++; - tag->encoder_total_frames_recorded ++; + if(tag->encoder_file ) { + if(lav_write_frame(tag->encoder_file, vj_avcodec_get_buf(tag->encoder), buf_len,1)) + { + veejay_msg(VEEJAY_MSG_ERROR, "%s", lav_strerror()); + if( tag->encoder_frames_recorded > 1 ) { + veejay_msg(VEEJAY_MSG_WARNING, "Recorded only %ld frames", tag->encoder_frames_recorded); + return 1; //@ auto commit sample even if it did not write all frames + } + return -1; + } + + if(audio_size > 0) + { + if(lav_write_audio(tag->encoder_file, abuff, audio_size)) + { + veejay_msg(VEEJAY_MSG_ERROR, "Error writing output audio [%s]",lav_strerror()); + } + } + } + /* write OK */ + tag->encoder_frames_recorded ++; + tag->encoder_total_frames_recorded ++; - return (vj_tag_continue_record(t1)); + return (vj_tag_continue_record(t1)); } int vj_tag_get_audio_frame(int t1, uint8_t *dst_buffer) { - return 0; + return 0; } /* ccd image calibration */ -static uint8_t *blackframe_new( int w, int h, int uv_len, uint8_t *Y, uint8_t *U, uint8_t *V, int median_radius, vj_tag *tag ) { - uint8_t *buf = (uint8_t*) vj_malloc(sizeof(uint8_t) * 5 * ((w*h) + 2 * uv_len )); - if(buf == NULL) { - veejay_msg(0,"Insufficient memory to initialize calibration."); - return NULL; - } - veejay_memset( buf, 0, sizeof(uint8_t) * 5 * ((w*h)+2*uv_len)); - tag->blackframe = buf; - const int chroma=127; +static uint8_t *blackframe_new( int w, int h, int uv_len, uint8_t *Y, uint8_t *U, uint8_t *V, int median_radius, vj_tag *tag ) { + uint8_t *buf = (uint8_t*) vj_malloc(sizeof(uint8_t) * 5 * ((w*h) + 2 * uv_len )); + if(buf == NULL) { + veejay_msg(0,"Insufficient memory to initialize calibration."); + return NULL; + } + veejay_memset( buf, 0, sizeof(uint8_t) * 5 * ((w*h)+2*uv_len)); + tag->blackframe = buf; + const int chroma=127; - tag->lf = (double*) vj_malloc(sizeof(double) * (w*h)); - tag->lfu= (double*) vj_malloc(sizeof(double) *uv_len); - tag->lfv= (double*) vj_malloc(sizeof(double) *uv_len); + tag->lf = (double*) vj_malloc(sizeof(double) * (w*h)); + tag->lfu= (double*) vj_malloc(sizeof(double) *uv_len); + tag->lfv= (double*) vj_malloc(sizeof(double) *uv_len); - tag->bf = (double*) vj_malloc(sizeof(double) * (w*h)); - tag->bfu= (double*) vj_malloc(sizeof(double) * uv_len); - tag->bfv= (double*) vj_malloc(sizeof(double) * uv_len); + tag->bf = (double*) vj_malloc(sizeof(double) * (w*h)); + tag->bfu= (double*) vj_malloc(sizeof(double) * uv_len); + tag->bfv= (double*) vj_malloc(sizeof(double) * uv_len); - if(median_radius== 0 ) { - int i; - for(i = 0; i < (w*h); i ++ ) { - tag->lf[i] = 0.0f; - tag->bf[i] = 0.0f + (double) Y[i]; - } - for(i = 0; i < uv_len; i ++ ) { - tag->lfu[i] = 0.0f; - tag->lfv[i] = 0.0f; - tag->bfu[i] = 0.0f + (double) (U[i] - chroma); - tag->bfv[i] = 0.0f + (double) (V[i] - chroma); - } + if(median_radius== 0 ) { + int i; + for(i = 0; i < (w*h); i ++ ) { + tag->lf[i] = 0.0f; + tag->bf[i] = 0.0f + (double) Y[i]; + } + for(i = 0; i < uv_len; i ++ ) { + tag->lfu[i] = 0.0f; + tag->lfv[i] = 0.0f; + tag->bfu[i] = 0.0f + (double) (U[i] - chroma); + tag->bfv[i] = 0.0f + (double) (V[i] - chroma); + } - } else { - uint8_t *ptr = cali_get(tag,CALI_BUF,w*h,uv_len); - ctmf( Y, ptr, w,h,w,w,median_radius,1,512*1024); - ctmf( U, ptr + (w*h),w/2,h,w/2,w/2,median_radius,1,512*1024); - ctmf( V, ptr + (w*h)+uv_len,w/2,h,w/2,w/2,median_radius,1,512*1024); - int i; - for(i = 0; i < (w*h); i ++ ) { - tag->lf[i] = 0.0f; - tag->bf[i] = 0.0f + (double) ptr[i]; - } - uint8_t *ptru = ptr + (w*h); - uint8_t *ptrv = ptru + uv_len; - for(i = 0; i < uv_len; i ++ ) { - tag->lfu[i] = 0.0f; - tag->lfv[i] = 0.0f; - tag->bfu[i] = 0.0f + (double) (ptru[i] - chroma); - tag->bfv[i] = 0.0f + (double) (ptrv[i] - chroma); - } + } else { + uint8_t *ptr = cali_get(tag,CALI_BUF,w*h,uv_len); + ctmf( Y, ptr, w,h,w,w,median_radius,1,512*1024); + ctmf( U, ptr + (w*h),w/2,h,w/2,w/2,median_radius,1,512*1024); + ctmf( V, ptr + (w*h)+uv_len,w/2,h,w/2,w/2,median_radius,1,512*1024); + int i; + for(i = 0; i < (w*h); i ++ ) { + tag->lf[i] = 0.0f; + tag->bf[i] = 0.0f + (double) ptr[i]; + } + uint8_t *ptru = ptr + (w*h); + uint8_t *ptrv = ptru + uv_len; + for(i = 0; i < uv_len; i ++ ) { + tag->lfu[i] = 0.0f; + tag->lfv[i] = 0.0f; + tag->bfu[i] = 0.0f + (double) (ptru[i] - chroma); + tag->bfv[i] = 0.0f + (double) (ptrv[i] - chroma); + } - } + } - return buf; + return buf; } -static void blackframe_process( uint8_t *Y, uint8_t *U, uint8_t *V, int w, int h, int uv_len, int median_radius, vj_tag *tag ) +static void blackframe_process( uint8_t *Y, uint8_t *U, uint8_t *V, int w, int h, int uv_len, int median_radius, vj_tag *tag ) { - int i; - uint8_t *bf = cali_get(tag,CALI_DARK,w*h,uv_len); - const int chroma = 127; - double *blackframe = tag->bf; - double *blackframeu= tag->bfu; - double *blackframev= tag->bfv; + int i; + uint8_t *bf = cali_get(tag,CALI_DARK,w*h,uv_len); + const int chroma = 127; + double *blackframe = tag->bf; + double *blackframeu= tag->bfu; + double *blackframev= tag->bfv; - //@ YUV = input frame - if( median_radius > 0 ) { - bf = cali_get(tag,CALI_BUF,w*h,uv_len); - } - - uint8_t *bu = bf + (w*h); - uint8_t *bv = bu + uv_len; + //@ YUV = input frame + if( median_radius > 0 ) { + bf = cali_get(tag,CALI_BUF,w*h,uv_len); + } + + uint8_t *bu = bf + (w*h); + uint8_t *bv = bu + uv_len; - uint8_t *srcY = Y; - uint8_t *srcU = U; - uint8_t *srcV = V; + uint8_t *srcY = Y; + uint8_t *srcU = U; + uint8_t *srcV = V; - if( median_radius > 0 ) { - ctmf( Y, bf, w,h,w,w,median_radius,1,512*1024); - ctmf( U, bu, w/2,h,w/2,w/2,median_radius,1,512*1024); - ctmf( V, bv, w/2,h,w/2,w/2,median_radius,1,512*1024); - srcY = bf; - srcU = bu; - srcV = bv; - } - - for( i = 0; i < (w*h); i ++ ) { - blackframe[i] += srcY[i]; - } - for( i =0 ; i < uv_len; i ++ ) { - blackframeu[i] += (double) ( srcU[i] - chroma ); - blackframev[i] += (double) ( srcV[i] - chroma ); - } + if( median_radius > 0 ) { + ctmf( Y, bf, w,h,w,w,median_radius,1,512*1024); + ctmf( U, bu, w/2,h,w/2,w/2,median_radius,1,512*1024); + ctmf( V, bv, w/2,h,w/2,w/2,median_radius,1,512*1024); + srcY = bf; + srcU = bu; + srcV = bv; + } + + for( i = 0; i < (w*h); i ++ ) { + blackframe[i] += srcY[i]; + } + for( i =0 ; i < uv_len; i ++ ) { + blackframeu[i] += (double) ( srcU[i] - chroma ); + blackframev[i] += (double) ( srcV[i] - chroma ); + } } -static void whiteframe_new(uint8_t *buf, int w, int h, int uv_len, uint8_t *Y, uint8_t *U, uint8_t *V, int median_radius, vj_tag *tag ) { - int i; - uint8_t *bf = cali_get( tag,CALI_DARK,w*h,uv_len); - uint8_t *bu = bf + (w*h); - uint8_t *bv = bu + uv_len; - int p; - const int chroma = 127; +static void whiteframe_new(uint8_t *buf, int w, int h, int uv_len, uint8_t *Y, uint8_t *U, uint8_t *V, int median_radius, vj_tag *tag ) { + int i; + uint8_t *bf = cali_get( tag,CALI_DARK,w*h,uv_len); + uint8_t *bu = bf + (w*h); + uint8_t *bv = bu + uv_len; + int p; + const int chroma = 127; - double mean_of_y = 0.0; - double mean_of_u = 0.0f; - double mean_of_v = 0.0f; + double mean_of_y = 0.0; + double mean_of_u = 0.0f; + double mean_of_v = 0.0f; - if(median_radius > 0 ) { - uint8_t *ptr = cali_get(tag,CALI_BUF,w*h,uv_len); - ctmf( Y, ptr, w,h,w,w,median_radius,1,512*1024); - ctmf( U, ptr + (w*h),w/2,h,w/2,w/2,median_radius,1,512*1024); - ctmf( V, ptr + (w*h)+uv_len,w/2,h,w/2,w/2,median_radius,1,512*1024); - for(i = 0; i < (w*h); i ++ ) { - tag->lf[i] = 0.0f + (double) ptr[i] - bf[i]; - mean_of_y += tag->lf[i]; - } - uint8_t *ptru = ptr + (w*h); - uint8_t *ptrv = ptru + uv_len; - for(i = 0; i < uv_len; i ++ ) { - tag->lfu[i] = 0.0f + (double) (ptru[i] - chroma) - (bu[i]-chroma); - mean_of_u += tag->lfu[i]; - tag->lfv[i] = 0.0f + (double) (ptrv[i] - chroma) - (bv[i]-chroma); - mean_of_v += tag->lfv[i]; - } - } else { - for(i = 0; i < (w*h); i ++ ) { //@TODO subtract dark current - p = Y[i] - bf[i]; - if( p < 0 ) p = 0; - tag->lf[i] = 0.0f + (double)p; - mean_of_y += p; - } - for(i = 0; i < uv_len; i ++ ) { - p = ( (U[i]-chroma) - (bu[i]-chroma)); - tag->lfu[i] = 0.0f + (double)p; - mean_of_u += p; - p = ( (V[i]-chroma) - (bv[i]-chroma)); - tag->lfv[i] = 0.0f + (double) p; - mean_of_v += p; - } + if(median_radius > 0 ) { + uint8_t *ptr = cali_get(tag,CALI_BUF,w*h,uv_len); + ctmf( Y, ptr, w,h,w,w,median_radius,1,512*1024); + ctmf( U, ptr + (w*h),w/2,h,w/2,w/2,median_radius,1,512*1024); + ctmf( V, ptr + (w*h)+uv_len,w/2,h,w/2,w/2,median_radius,1,512*1024); + for(i = 0; i < (w*h); i ++ ) { + tag->lf[i] = 0.0f + (double) ptr[i] - bf[i]; + mean_of_y += tag->lf[i]; + } + uint8_t *ptru = ptr + (w*h); + uint8_t *ptrv = ptru + uv_len; + for(i = 0; i < uv_len; i ++ ) { + tag->lfu[i] = 0.0f + (double) (ptru[i] - chroma) - (bu[i]-chroma); + mean_of_u += tag->lfu[i]; + tag->lfv[i] = 0.0f + (double) (ptrv[i] - chroma) - (bv[i]-chroma); + mean_of_v += tag->lfv[i]; + } + } else { + for(i = 0; i < (w*h); i ++ ) { //@TODO subtract dark current + p = Y[i] - bf[i]; + if( p < 0 ) p = 0; + tag->lf[i] = 0.0f + (double)p; + mean_of_y += p; + } + for(i = 0; i < uv_len; i ++ ) { + p = ( (U[i]-chroma) - (bu[i]-chroma)); + tag->lfu[i] = 0.0f + (double)p; + mean_of_u += p; + p = ( (V[i]-chroma) - (bv[i]-chroma)); + tag->lfv[i] = 0.0f + (double) p; + mean_of_v += p; + } - } + } - mean_of_y = mean_of_y / (w*h); + mean_of_y = mean_of_y / (w*h); - tag->tabmean[0][ tag->bf_count - 1 ] = mean_of_y; + tag->tabmean[0][ tag->bf_count - 1 ] = mean_of_y; - mean_of_u = mean_of_u / uv_len; - mean_of_v = mean_of_v / uv_len; + mean_of_u = mean_of_u / uv_len; + mean_of_v = mean_of_v / uv_len; } -static void whiteframe_process( uint8_t *Y, uint8_t *U, uint8_t *V, int w, int h, int uv_len, int median_radius, vj_tag *tag) +static void whiteframe_process( uint8_t *Y, uint8_t *U, uint8_t *V, int w, int h, int uv_len, int median_radius, vj_tag *tag) { - int i; - const int chroma = 127; + int i; + const int chroma = 127; - double *lightframe = tag->lf; - double *lightframe_u = tag->lfu; - double *lightframe_v = tag->lfv; - - uint8_t *bf = cali_get( tag,CALI_DARK,w*h,uv_len); - uint8_t *bu = bf + (w*h); - uint8_t *bv = bu + uv_len; - double mean_of_y = 0.0; - double mean_of_u = 0.0f; - double mean_of_v = 0.0f; + double *lightframe = tag->lf; + double *lightframe_u = tag->lfu; + double *lightframe_v = tag->lfv; + + uint8_t *bf = cali_get( tag,CALI_DARK,w*h,uv_len); + uint8_t *bu = bf + (w*h); + uint8_t *bv = bu + uv_len; + double mean_of_y = 0.0; + double mean_of_u = 0.0f; + double mean_of_v = 0.0f; - //@ YUV = input frame - if( median_radius > 0 ) { - uint8_t *dbf = cali_get( tag,CALI_BUF,w*h,uv_len ); - uint8_t *dbu = dbf + (w*h); - uint8_t *dbv = dbu + uv_len; - ctmf( Y, dbf, w,h,w,w,median_radius,1,512*1024); - for( i = 0; i < (w*h); i ++ ) { - lightframe[i] += (double)(dbf[i] - bf[i]); - mean_of_y += lightframe[i]; - } - ctmf( U, dbu, w/2,h,w/2,w/2,median_radius,1,512*1024); - ctmf( V, dbv, w/2,h,w/2,w/2,median_radius,1,512*1024); - for( i =0 ; i < uv_len; i ++ ) { - lightframe_u[i] += (double) ( dbu[i]-chroma ) - ( bu[i]-chroma); - mean_of_u += lightframe_u[i]; - lightframe_v[i] += (double) ( dbv[i]-chroma ) - ( bv[i]-chroma); - mean_of_v += lightframe_v[i]; - } + //@ YUV = input frame + if( median_radius > 0 ) { + uint8_t *dbf = cali_get( tag,CALI_BUF,w*h,uv_len ); + uint8_t *dbu = dbf + (w*h); + uint8_t *dbv = dbu + uv_len; + ctmf( Y, dbf, w,h,w,w,median_radius,1,512*1024); + for( i = 0; i < (w*h); i ++ ) { + lightframe[i] += (double)(dbf[i] - bf[i]); + mean_of_y += lightframe[i]; + } + ctmf( U, dbu, w/2,h,w/2,w/2,median_radius,1,512*1024); + ctmf( V, dbv, w/2,h,w/2,w/2,median_radius,1,512*1024); + for( i =0 ; i < uv_len; i ++ ) { + lightframe_u[i] += (double) ( dbu[i]-chroma ) - ( bu[i]-chroma); + mean_of_u += lightframe_u[i]; + lightframe_v[i] += (double) ( dbv[i]-chroma ) - ( bv[i]-chroma); + mean_of_v += lightframe_v[i]; + } - } else { - int p; - //@ should subtract dark current, TODO - for( i = 0; i < (w*h); i ++ ) { - p = Y[i] - bf[i]; - if( p < 0 ) - p = 0; - lightframe[i] += (double) p; - mean_of_y += p; - } - for( i =0 ; i < uv_len; i ++ ) { - p = ((U[i]-chroma)-(bu[i]-chroma)); - lightframe_u[i] += (double) p; - mean_of_u += p; - p = ((V[i]-chroma)-(bv[i]-chroma)); - lightframe_v[i] += (double) p; - mean_of_v += p; - } - } - - mean_of_y = mean_of_y / (w*h); - mean_of_u = mean_of_u / uv_len; - mean_of_v = mean_of_v / uv_len; - tag->tabmean[0][ tag->bf_count - 1 ] = mean_of_y; + } else { + int p; + //@ should subtract dark current, TODO + for( i = 0; i < (w*h); i ++ ) { + p = Y[i] - bf[i]; + if( p < 0 ) + p = 0; + lightframe[i] += (double) p; + mean_of_y += p; + } + for( i =0 ; i < uv_len; i ++ ) { + p = ((U[i]-chroma)-(bu[i]-chroma)); + lightframe_u[i] += (double) p; + mean_of_u += p; + p = ((V[i]-chroma)-(bv[i]-chroma)); + lightframe_v[i] += (double) p; + mean_of_v += p; + } + } + + mean_of_y = mean_of_y / (w*h); + mean_of_u = mean_of_u / uv_len; + mean_of_v = mean_of_v / uv_len; + tag->tabmean[0][ tag->bf_count - 1 ] = mean_of_y; } -static void master_lightframe(int w,int h, int uv_len, vj_tag *tag) +static void master_lightframe(int w,int h, int uv_len, vj_tag *tag) { - int i; - int duration =tag->cali_duration -1; - uint8_t *bf = cali_get(tag,CALI_LIGHT,w*h,uv_len); - uint8_t *bu = bf + (w*h); - uint8_t *bv = bu + uv_len; - - int len = w*h; - - double *sY = tag->lf; - double *sU = tag->lfu; - double *sV = tag->lfv; - const int chroma = 127; - + int i; + int duration =tag->cali_duration -1; + uint8_t *bf = cali_get(tag,CALI_LIGHT,w*h,uv_len); + uint8_t *bu = bf + (w*h); + uint8_t *bv = bu + uv_len; + + int len = w*h; + + double *sY = tag->lf; + double *sU = tag->lfu; + double *sV = tag->lfv; + const int chroma = 127; + - double sum = 0.0; + double sum = 0.0; - for( i = 0; i < len; i ++ ) { - if( sY[i] <= 0 ) - bf[i] = 0; - else - { - bf[i] = (uint8_t) ( sY[i] / duration ); - } - sum += bf[i]; - } + for( i = 0; i < len; i ++ ) { + if( sY[i] <= 0 ) + bf[i] = 0; + else + { + bf[i] = (uint8_t) ( sY[i] / duration ); + } + sum += bf[i]; + } - sum = sum / len; + sum = sum / len; - for( i = 0; i cali_duration - 1; - uint8_t *bf = cali_get(tag,CALI_DARK,w*h,uv_len); - uint8_t *bu = bf + (w*h); - uint8_t *bv = bu + uv_len; - int len = w*h; - double *sY = tag->bf; - double *sU = tag->bfu; - double *sV = tag->bfv; - const int chroma = 127; - for( i = 0; i < len; i ++ ) { - if( sY[i] <= 0 ) - bf[i] = 0; - else - { - bf[i] = (uint8_t) ( sY[i] / duration ); - } - } + int i; + int duration =tag->cali_duration - 1; + uint8_t *bf = cali_get(tag,CALI_DARK,w*h,uv_len); + uint8_t *bu = bf + (w*h); + uint8_t *bv = bu + uv_len; + int len = w*h; + double *sY = tag->bf; + double *sU = tag->bfu; + double *sV = tag->bfv; + const int chroma = 127; + for( i = 0; i < len; i ++ ) { + if( sY[i] <= 0 ) + bf[i] = 0; + else + { + bf[i] = (uint8_t) ( sY[i] / duration ); + } + } - for( i = 0; i mean[0] = mean_y; - tag->mean[1] = mean_u; - tag->mean[2] = mean_v; + const int len = (w*h); + for( i = 0; i < len; i ++ ) { + sy[i] = wy[i] - by[i]; + my[i] = sy[i]; + sum += wy[i]; + } + for( i = 0; i < uv_len; i ++ ) { + su[i] = ( chroma + ( (wu[i]-chroma) - (bu[i]-chroma))); + sv[i] = ( chroma + ( (wv[i]-chroma) - (bv[i]-chroma))); + mu[i] = su[i]; + mv[i] = sv[i]; + sum_u += wu[i]; + sum_v += wv[i]; + } + double mean_u = ( sum_u / uv_len); + double mean_v = ( sum_v / uv_len); + double mean_y = ( sum / (w*h)); + + //@ store + tag->mean[0] = mean_y; + tag->mean[1] = mean_u; + tag->mean[2] = mean_v; } -static void blackframe_subtract( vj_tag *tag, uint8_t *Y, uint8_t *U, uint8_t *V, int w, int h, int uv_len,int use_light,const double mean_y,const double mean_u,const double mean_v ) +static void blackframe_subtract( vj_tag *tag, uint8_t *Y, uint8_t *U, uint8_t *V, int w, int h, int uv_len,int use_light,const double mean_y,const double mean_u,const double mean_v ) { - int i; - uint8_t *bf = cali_get(tag, CALI_DARK,w*h,uv_len); - uint8_t *wy = cali_get(tag, CALI_FLAT,w*h,uv_len); - uint8_t *wu = wy + (w*h); - uint8_t *wv = wu + uv_len; - uint8_t *bu = bf + (w*h); - uint8_t *bv = bu + uv_len; - const int chroma = 127; + int i; + uint8_t *bf = cali_get(tag, CALI_DARK,w*h,uv_len); + uint8_t *wy = cali_get(tag, CALI_FLAT,w*h,uv_len); + uint8_t *wu = wy + (w*h); + uint8_t *wv = wu + uv_len; + uint8_t *bu = bf + (w*h); + uint8_t *bv = bu + uv_len; + const int chroma = 127; - int d=0; - double p = 0.0; - const double dmean_y = (double) mean_y; - const double dmean_u = (double) mean_u; - const double dmean_v = (double) mean_v; - //@ process master flat image + int d=0; + double p = 0.0; + const double dmean_y = (double) mean_y; + const double dmean_u = (double) mean_u; + const double dmean_v = (double) mean_v; + //@ process master flat image - if( use_light ) { - for( i = 0; i <(w*h); i ++ ) { - p = (double) wy[i] /dmean_y; - if( p != 0.0 ) - d = (int) ( ( (double)Y[i] - bf[i]) / p); - else - d = 0.0f; //Y[i] - bf[i]; - - if( d < 0 ) d = 0; else if ( d > 255 ) d = 255; + if( use_light ) { + for( i = 0; i <(w*h); i ++ ) { + p = (double) wy[i] /dmean_y; + if( p != 0.0 ) + d = (int) ( ( (double)Y[i] - bf[i]) / p); + else + d = 0.0f; //Y[i] - bf[i]; + + if( d < 0 ) d = 0; else if ( d > 255 ) d = 255; - Y[i] = (uint8_t) d; + Y[i] = (uint8_t) d; - } - - int d1=0; - for( i =0 ; i < uv_len; i ++ ) - { - p = (double) wu[i] / dmean_u; - d1 = (double) ( chroma + ((U[i] - chroma) - (bu[i]-chroma))); - if( d1 == 0 ) - d = chroma; - else - d = (int) ( d1 / p ); - - if ( d < 0 ) { d = 0; } else if ( d > 255 ) { d = 255;} - - U[i] = (uint8_t) d; - - p = ( wv[i] / dmean_v ); - d1 = ( double) (chroma + ((V[i] - chroma) - (bv[i]-chroma))); - if( d1 == 0 ) - d= chroma; - else - d = (int) ( d1 / p ); - if( d < 0 ) { d = 0; } else if ( d > 255 ) { d= 255; } - V[i] = (uint8_t) d; - } + } + + int d1=0; + for( i =0 ; i < uv_len; i ++ ) + { + p = (double) wu[i] / dmean_u; + d1 = (double) ( chroma + ((U[i] - chroma) - (bu[i]-chroma))); + if( d1 == 0 ) + d = chroma; + else + d = (int) ( d1 / p ); + + if ( d < 0 ) { d = 0; } else if ( d > 255 ) { d = 255;} + + U[i] = (uint8_t) d; + + p = ( wv[i] / dmean_v ); + d1 = ( double) (chroma + ((V[i] - chroma) - (bv[i]-chroma))); + if( d1 == 0 ) + d= chroma; + else + d = (int) ( d1 / p ); + if( d < 0 ) { d = 0; } else if ( d > 255 ) { d= 255; } + V[i] = (uint8_t) d; + } - } else { - //@ just show result of frame - dark current - for( i = 0; i <(w*h); i ++ ) { - p = ( Y[i] - bf[i] ); - if( p < 0 ) - Y[i] = 0; - else - Y[i] = p; - } - for( i = 0; i < uv_len; i ++ ) { - p = U[i] - bu[i]; - if( p < 0 ) - U[i] = chroma; - else - U[i] = p; + } else { + //@ just show result of frame - dark current + for( i = 0; i <(w*h); i ++ ) { + p = ( Y[i] - bf[i] ); + if( p < 0 ) + Y[i] = 0; + else + Y[i] = p; + } + for( i = 0; i < uv_len; i ++ ) { + p = U[i] - bu[i]; + if( p < 0 ) + U[i] = chroma; + else + U[i] = p; - p = V[i] - bv[i]; - if( p < 0 ) - V[i] = chroma; - else - V[i] = p; - } - } + p = V[i] - bv[i]; + if( p < 0 ) + V[i] = chroma; + else + V[i] = p; + } + } @@ -3419,39 +3419,39 @@ int vj_tag_grab_blackframe(int t1, int duration, int median_radius , int mode) { vj_tag *tag = vj_tag_get(t1); if(!tag) - return 0; + return 0; if( tag->source_type != VJ_TAG_TYPE_V4L ) { - veejay_msg(VEEJAY_MSG_INFO, "Source is not a video device."); - return 0; + veejay_msg(VEEJAY_MSG_INFO, "Source is not a video device."); + return 0; } if( duration <= 0 ) - return 0; + return 0; if( median_radius <= 0 ) { - median_radius = 0; + median_radius = 0; } veejay_msg(VEEJAY_MSG_INFO, "Creating %s (%d frames) median=%d",(mode==0?"Blackframe":"Lightframe"),duration, median_radius ); tag->noise_suppression = (mode == 0 ? V4L_BLACKFRAME : V4L_WHITEFRAME ); tag->median_radius = median_radius; - tag->bf_count = duration; - tag->has_white = (mode == 1 ? 1 :0); + tag->bf_count = duration; + tag->has_white = (mode == 1 ? 1 :0); return 1; } int vj_tag_drop_blackframe(int t1) { vj_tag *tag = vj_tag_get(t1); if(!tag) - return 0; + return 0; if( tag->source_type != VJ_TAG_TYPE_V4L ) { - veejay_msg(VEEJAY_MSG_INFO, "Source is not a video device."); - return 0; + veejay_msg(VEEJAY_MSG_INFO, "Source is not a video device."); + return 0; } if( tag->blackframe ) { - tag->noise_suppression = -1; - veejay_msg(VEEJAY_MSG_INFO, "Black Frame dropped."); + tag->noise_suppression = -1; + veejay_msg(VEEJAY_MSG_INFO, "Black Frame dropped."); } return 1; @@ -3461,186 +3461,186 @@ int vj_tag_get_frame(int t1, VJFrame *dst, uint8_t * abuffer) { vj_tag *tag = vj_tag_get(t1); if(!tag) - return -1; + return -1; const int width = dst->width; const int height = dst->height; const int uv_len = dst->uv_len; const int len = dst->len; - int res = 0; - uint8_t **buffer = dst->data; + int res = 0; + uint8_t **buffer = dst->data; - switch (tag->source_type) - { - case VJ_TAG_TYPE_V4L: - if( tag->capture_type == 1 ) { + switch (tag->source_type) + { + case VJ_TAG_TYPE_V4L: + if( tag->capture_type == 1 ) { #ifdef HAVE_V4L2 - if( no_v4l2_threads_ ) { - res = v4l2_pull_frame( vj_tag_input->unicap[tag->index],v4l2_get_dst(vj_tag_input->unicap[tag->index],buffer[0],buffer[1],buffer[2],buffer[3]) ); - } else { - res = v4l2_thread_pull( v4l2_thread_info_get( vj_tag_input->unicap[tag->index]), - v4l2_get_dst( vj_tag_input->unicap[tag->index], buffer[0],buffer[1],buffer[2],buffer[3])); - } + if( no_v4l2_threads_ ) { + res = v4l2_pull_frame( vj_tag_input->unicap[tag->index],v4l2_get_dst(vj_tag_input->unicap[tag->index],buffer[0],buffer[1],buffer[2],buffer[3]) ); + } else { + res = v4l2_thread_pull( v4l2_thread_info_get( vj_tag_input->unicap[tag->index]), + v4l2_get_dst( vj_tag_input->unicap[tag->index], buffer[0],buffer[1],buffer[2],buffer[3])); + } #endif - } - switch( tag->noise_suppression ) { - case V4L_BLACKFRAME: - tag->cali_duration = tag->bf_count; - blackframe_new(width,height,uv_len,buffer[0],buffer[1],buffer[2],tag->median_radius,tag); - tag->tabmean[0] = (double*) vj_malloc(sizeof(double)* tag->cali_duration); - if(tag->blackframe == NULL ) { - tag->noise_suppression = 0; - } else { - tag->bf_count --; - tag->noise_suppression = V4L_BLACKFRAME_NEXT; - if(tag->bf_count==0) { - master_blackframe(width,height,uv_len,tag); - tag->noise_suppression = V4L_BLACKFRAME_PROCESS; - veejay_msg(VEEJAY_MSG_INFO, "Please create a lightframe (white)"); - } - } - //@ grab black frame - break; - case V4L_WHITEFRAME: - tag->cali_duration = tag->bf_count; - if(!tag->blackframe) { - veejay_msg(0, "Please start with a black frame first (Put cap on lens)"); - tag->noise_suppression = 0; - break; - } - whiteframe_new( tag->blackframe,width,height,uv_len,buffer[0],buffer[1],buffer[2],tag->median_radius, tag); - tag->bf_count --; - tag->noise_suppression = V4L_WHITEFRAME_NEXT; - if(tag->bf_count <= 0 ) { - tag->noise_suppression = V4L_BLACKFRAME_PROCESS; - master_lightframe( width,height,uv_len,tag ); - master_flatframe( width,height,uv_len, tag ); - veejay_msg(VEEJAY_MSG_DEBUG, "Master flat frame."); - } - break; - case V4L_WHITEFRAME_NEXT: - whiteframe_process(buffer[0],buffer[1],buffer[2],width,height,uv_len,tag->median_radius,tag ); - tag->bf_count --; - if( tag->bf_count <= 0 ) { - tag->noise_suppression = V4L_BLACKFRAME_PROCESS; - master_lightframe( width,height,uv_len,tag); - master_flatframe( width,height,uv_len, tag ); - veejay_msg(VEEJAY_MSG_DEBUG, "Master flat frame"); - } else { - veejay_msg(VEEJAY_MSG_DEBUG, "Whiteframe %d",tag->bf_count ); - } - break; - case V4L_BLACKFRAME_NEXT: - blackframe_process( buffer[0],buffer[1],buffer[2],width,height,uv_len, tag->median_radius,tag ); - if( tag->bf_count <= 0 ) { - tag->noise_suppression = 0; - master_blackframe(width,height,uv_len,tag); - veejay_msg(VEEJAY_MSG_INFO, "Please create a lightframe."); - } else { - veejay_msg(VEEJAY_MSG_DEBUG, "Blackframe %d", tag->bf_count ); - tag->bf_count --; - } - break; - case V4L_BLACKFRAME_PROCESS: - blackframe_subtract( tag,buffer[0],buffer[1],buffer[2],width,height,uv_len, tag->has_white , tag->mean[0],tag->mean[1],tag->mean[2]); - break; - case -1: - if( tag->blackframe ) { - free(tag->blackframe); - tag->blackframe = NULL; - tag->noise_suppression = 0; - } - if( tag->bf ) free(tag->bf); - if( tag->bfu ) free(tag->bfu); - if( tag->bfv ) free(tag->bfv); - if( tag->lf ) free(tag->lf); - if( tag->lfu ) free(tag->lfu); - if( tag->lfv ) free(tag->lfv); - if( tag->tabmean[0]) free(tag->tabmean[0]); - break; - //@ process black frame - default: - break; - } - if( tag->noise_suppression != 0 && tag->noise_suppression != 6 && tag->noise_suppression != 3 ) - veejay_msg(VEEJAY_MSG_DEBUG, "Calibration step %d of %d", tag->bf_count, tag->cali_duration ); + } + switch( tag->noise_suppression ) { + case V4L_BLACKFRAME: + tag->cali_duration = tag->bf_count; + blackframe_new(width,height,uv_len,buffer[0],buffer[1],buffer[2],tag->median_radius,tag); + tag->tabmean[0] = (double*) vj_malloc(sizeof(double)* tag->cali_duration); + if(tag->blackframe == NULL ) { + tag->noise_suppression = 0; + } else { + tag->bf_count --; + tag->noise_suppression = V4L_BLACKFRAME_NEXT; + if(tag->bf_count==0) { + master_blackframe(width,height,uv_len,tag); + tag->noise_suppression = V4L_BLACKFRAME_PROCESS; + veejay_msg(VEEJAY_MSG_INFO, "Please create a lightframe (white)"); + } + } + //@ grab black frame + break; + case V4L_WHITEFRAME: + tag->cali_duration = tag->bf_count; + if(!tag->blackframe) { + veejay_msg(0, "Please start with a black frame first (Put cap on lens)"); + tag->noise_suppression = 0; + break; + } + whiteframe_new( tag->blackframe,width,height,uv_len,buffer[0],buffer[1],buffer[2],tag->median_radius, tag); + tag->bf_count --; + tag->noise_suppression = V4L_WHITEFRAME_NEXT; + if(tag->bf_count <= 0 ) { + tag->noise_suppression = V4L_BLACKFRAME_PROCESS; + master_lightframe( width,height,uv_len,tag ); + master_flatframe( width,height,uv_len, tag ); + veejay_msg(VEEJAY_MSG_DEBUG, "Master flat frame."); + } + break; + case V4L_WHITEFRAME_NEXT: + whiteframe_process(buffer[0],buffer[1],buffer[2],width,height,uv_len,tag->median_radius,tag ); + tag->bf_count --; + if( tag->bf_count <= 0 ) { + tag->noise_suppression = V4L_BLACKFRAME_PROCESS; + master_lightframe( width,height,uv_len,tag); + master_flatframe( width,height,uv_len, tag ); + veejay_msg(VEEJAY_MSG_DEBUG, "Master flat frame"); + } else { + veejay_msg(VEEJAY_MSG_DEBUG, "Whiteframe %d",tag->bf_count ); + } + break; + case V4L_BLACKFRAME_NEXT: + blackframe_process( buffer[0],buffer[1],buffer[2],width,height,uv_len, tag->median_radius,tag ); + if( tag->bf_count <= 0 ) { + tag->noise_suppression = 0; + master_blackframe(width,height,uv_len,tag); + veejay_msg(VEEJAY_MSG_INFO, "Please create a lightframe."); + } else { + veejay_msg(VEEJAY_MSG_DEBUG, "Blackframe %d", tag->bf_count ); + tag->bf_count --; + } + break; + case V4L_BLACKFRAME_PROCESS: + blackframe_subtract( tag,buffer[0],buffer[1],buffer[2],width,height,uv_len, tag->has_white , tag->mean[0],tag->mean[1],tag->mean[2]); + break; + case -1: + if( tag->blackframe ) { + free(tag->blackframe); + tag->blackframe = NULL; + tag->noise_suppression = 0; + } + if( tag->bf ) free(tag->bf); + if( tag->bfu ) free(tag->bfu); + if( tag->bfv ) free(tag->bfv); + if( tag->lf ) free(tag->lf); + if( tag->lfu ) free(tag->lfu); + if( tag->lfv ) free(tag->lfv); + if( tag->tabmean[0]) free(tag->tabmean[0]); + break; + //@ process black frame + default: + break; + } + if( tag->noise_suppression != 0 && tag->noise_suppression != 6 && tag->noise_suppression != 3 ) + veejay_msg(VEEJAY_MSG_DEBUG, "Calibration step %d of %d", tag->bf_count, tag->cali_duration ); - return 1; - break; - case VJ_TAG_TYPE_CALI: - { - cali_tag_t *p = (cali_tag_t*)vj_tag_input->cali[tag->index]; - if(p) { - veejay_memcpy(buffer[0], p->mf, len ); - veejay_memcpy(buffer[1], p->mf + len, uv_len ); - veejay_memcpy(buffer[2], p->mf + len + uv_len, uv_len); - } - } - break; + return 1; + break; + case VJ_TAG_TYPE_CALI: + { + cali_tag_t *p = (cali_tag_t*)vj_tag_input->cali[tag->index]; + if(p) { + veejay_memcpy(buffer[0], p->mf, len ); + veejay_memcpy(buffer[1], p->mf + len, uv_len ); + veejay_memcpy(buffer[2], p->mf + len + uv_len, uv_len); + } + } + break; #ifdef USE_GDK_PIXBUF - case VJ_TAG_TYPE_PICTURE: - { - vj_picture *p = vj_tag_input->picture[tag->index]; - if(!p) - { - veejay_msg(VEEJAY_MSG_ERROR, "Picture never opened"); - vj_tag_disable(t1); - return -1; - } - VJFrame *pframe = vj_picture_get( p->pic ); - veejay_memcpy(buffer[0],pframe->data[0], len); - veejay_memcpy(buffer[1],pframe->data[1], uv_len); - veejay_memcpy(buffer[2],pframe->data[2], uv_len); - } - break; + case VJ_TAG_TYPE_PICTURE: + { + vj_picture *p = vj_tag_input->picture[tag->index]; + if(!p) + { + veejay_msg(VEEJAY_MSG_ERROR, "Picture never opened"); + vj_tag_disable(t1); + return -1; + } + VJFrame *pframe = vj_picture_get( p->pic ); + veejay_memcpy(buffer[0],pframe->data[0], len); + veejay_memcpy(buffer[1],pframe->data[1], uv_len); + veejay_memcpy(buffer[2],pframe->data[2], uv_len); + } + break; #endif - case VJ_TAG_TYPE_MCAST: - case VJ_TAG_TYPE_NET: - if(!net_thread_get_frame( tag,buffer )) - return 0; - return 1; - break; - case VJ_TAG_TYPE_YUV4MPEG: - res = vj_yuv_get_frame(vj_tag_input->stream[tag->index],buffer); - if( res == -1 ) - { - vj_tag_set_active(t1,0); - return -1; - } - return 1; - break; + case VJ_TAG_TYPE_MCAST: + case VJ_TAG_TYPE_NET: + if(!net_thread_get_frame( tag,buffer )) + return 0; + return 1; + break; + case VJ_TAG_TYPE_YUV4MPEG: + res = vj_yuv_get_frame(vj_tag_input->stream[tag->index],buffer); + if( res == -1 ) + { + vj_tag_set_active(t1,0); + return -1; + } + return 1; + break; #ifdef SUPPORT_READ_DV2 - case VJ_TAG_TYPE_DV1394: - vj_dv1394_read_frame( vj_tag_input->dv1394[tag->index], buffer , abuffer,vj_tag_input->pix_fmt); - break; + case VJ_TAG_TYPE_DV1394: + vj_dv1394_read_frame( vj_tag_input->dv1394[tag->index], buffer , abuffer,vj_tag_input->pix_fmt); + break; #endif - case VJ_TAG_TYPE_GENERATOR: - if( tag->generator ) { - plug_push_frame( tag->generator, 1, 0, dst ); - plug_set_parameters( tag->generator, plug_instance_get_num_parameters(tag->generator),tag->genargs ); - plug_process( tag->generator, -1.0 ); - } - break; - case VJ_TAG_TYPE_COLOR: - dummy_rgb_apply( dst, tag->color_r,tag->color_g,tag->color_b ); - break; - case VJ_TAG_TYPE_CLONE: - { - int t2 = tag->video_channel; - vj_tag *tag2 = vj_tag_get(t2); - if(tag2 && tag2->clone == 0) - tag2->clone ++; //@ auto restore + case VJ_TAG_TYPE_GENERATOR: + if( tag->generator ) { + plug_push_frame( tag->generator, 1, 0, dst ); + plug_set_parameters( tag->generator, plug_instance_get_num_parameters(tag->generator),tag->genargs ); + plug_process( tag->generator, -1.0 ); + } + break; + case VJ_TAG_TYPE_COLOR: + dummy_rgb_apply( dst, tag->color_r,tag->color_g,tag->color_b ); + break; + case VJ_TAG_TYPE_CLONE: + { + int t2 = tag->video_channel; + vj_tag *tag2 = vj_tag_get(t2); + if(tag2 && tag2->clone == 0) + tag2->clone ++; //@ auto restore - if( vj_tag_get_frame(t2, dst, NULL) <= 0 ) { - dummy_rgb_apply( dst, 0,0,0 ); - } - } - break; + if( vj_tag_get_frame(t2, dst, NULL) <= 0 ) { + dummy_rgb_apply( dst, 0,0,0 ); + } + } + break; case VJ_TAG_TYPE_NONE: - break; - default: - break; + break; + default: + break; } return 1; @@ -3653,57 +3653,57 @@ int vj_tag_sprint_status( int tag_id,int samples,int cache,int sa, int ca, int p vj_tag *tag; tag = vj_tag_get(tag_id); if(!tag) - return 0; + return 0; - int e_a, e_d, e_s; - //@ issue #60 - if( sa && seq_rec) - { - sample_info *rs = sample_get( seq_rec ); - e_a = rs->encoder_active; - e_d = rs->encoder_frames_to_record; - e_s = rs->encoder_total_frames_recorded; - } - else - { - e_a = tag->encoder_active; - e_d = tag->encoder_frames_to_record; - e_s = tag->encoder_total_frames_recorded; - } + int e_a, e_d, e_s; + //@ issue #60 + if( sa && seq_rec) + { + sample_info *rs = sample_get( seq_rec ); + e_a = rs->encoder_active; + e_d = rs->encoder_frames_to_record; + e_s = rs->encoder_total_frames_recorded; + } + else + { + e_a = tag->encoder_active; + e_d = tag->encoder_frames_to_record; + e_s = tag->encoder_total_frames_recorded; + } - char *ptr = str; - ptr = vj_sprintf( ptr, pfps ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, frame ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, mode ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, tag_id ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, tag->effect_toggle ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, tag->color_r ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, tag->color_g ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, tag->color_b ); *ptr++ = ' '; - *ptr++ = '0'; *ptr++ = ' '; - ptr = vj_sprintf( ptr, e_a ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, e_d ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, e_s ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, vj_tag_size() ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, tag->source_type ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, tag->n_frames ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, tag->selected_entry ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, ts ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, cache ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, curfps ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, (int) lo ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, (int) hi ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, sa ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, ca ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, (int) tag->fader_val ); *ptr++ = ' '; - *ptr++ = '0'; *ptr++ = ' '; - ptr = vj_sprintf( ptr, macro ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, tag->subrender); *ptr++ = ' '; - ptr = vj_sprintf( ptr, tag->fade_method); *ptr++ = ' '; - ptr = vj_sprintf( ptr, tag->fade_entry ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, tag->fade_alpha ); *ptr++ = ' '; - ptr = vj_sprintf( ptr, samples ); + char *ptr = str; + ptr = vj_sprintf( ptr, pfps ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, frame ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, mode ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, tag_id ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, tag->effect_toggle ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, tag->color_r ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, tag->color_g ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, tag->color_b ); *ptr++ = ' '; + *ptr++ = '0'; *ptr++ = ' '; + ptr = vj_sprintf( ptr, e_a ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, e_d ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, e_s ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, vj_tag_size() ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, tag->source_type ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, tag->n_frames ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, tag->selected_entry ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, ts ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, cache ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, curfps ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, (int) lo ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, (int) hi ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, sa ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, ca ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, (int) tag->fader_val ); *ptr++ = ' '; + *ptr++ = '0'; *ptr++ = ' '; + ptr = vj_sprintf( ptr, macro ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, tag->subrender); *ptr++ = ' '; + ptr = vj_sprintf( ptr, tag->fade_method); *ptr++ = ' '; + ptr = vj_sprintf( ptr, tag->fade_entry ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, tag->fade_alpha ); *ptr++ = ' '; + ptr = vj_sprintf( ptr, samples ); return 0; } @@ -3712,32 +3712,32 @@ static void tagParseArguments(xmlDocPtr doc, xmlNodePtr cur, int *arg) { int argIndex = 0; if (cur == NULL) - return; + return; while (cur != NULL && argIndex < SAMPLE_MAX_PARAMETERS) - { - if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_ARGUMENT)) - { - arg[argIndex] = get_xml_int( doc, cur ); - argIndex++; - } - cur = cur->next; + { + if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_ARGUMENT)) + { + arg[argIndex] = get_xml_int( doc, cur ); + argIndex++; + } + cur = cur->next; } } -static int tagParseKeys( xmlDocPtr doc, xmlNodePtr cur, void *port ) +static int tagParseKeys( xmlDocPtr doc, xmlNodePtr cur, void *port ) { - if(!cur) - return 0; + if(!cur) + return 0; - while (cur != NULL) - { - if( !xmlStrcmp( cur->name, (const xmlChar*) "KEYFRAMES" )) - { - keyframe_xml_unpack( doc, cur->xmlChildrenNode, port ); - } - cur = cur->next; - } - return 1; + while (cur != NULL) + { + if( !xmlStrcmp( cur->name, (const xmlChar*) "KEYFRAMES" )) + { + keyframe_xml_unpack( doc, cur->xmlChildrenNode, port ); + } + cur = cur->next; + } + return 1; } static void tagParseEffect(xmlDocPtr doc, xmlNodePtr cur, int dst_sample) @@ -3753,102 +3753,102 @@ static void tagParseEffect(xmlDocPtr doc, xmlNodePtr cur, int dst_sample) int anim_type = 0; int chain_index = 0; - veejay_memset( arg, 0, sizeof(arg)); + veejay_memset( arg, 0, sizeof(arg)); if (cur == NULL) - return; + return; xmlNodePtr curarg = cur; while (cur != NULL) - { - if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_EFFECTID)) { - effect_id = get_xml_int( doc, cur ); - } + { + if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_EFFECTID)) { + effect_id = get_xml_int( doc, cur ); + } - if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_EFFECTPOS)) { - chain_index = get_xml_int( doc, cur ); - } + if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_EFFECTPOS)) { + chain_index = get_xml_int( doc, cur ); + } - if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_EFFECTSOURCE)) { - source_type = get_xml_int( doc, cur ); - } + if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_EFFECTSOURCE)) { + source_type = get_xml_int( doc, cur ); + } - if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_EFFECTCHANNEL)) { - channel = get_xml_int( doc, cur ); - } + if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_EFFECTCHANNEL)) { + channel = get_xml_int( doc, cur ); + } - if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_EFFECTTRIMMER)) { - frame_trimmer = get_xml_int( doc, cur ); - } + if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_EFFECTTRIMMER)) { + frame_trimmer = get_xml_int( doc, cur ); + } - if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_EFFECTOFFSET)) { - frame_offset = get_xml_int( doc, cur ); - } + if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_EFFECTOFFSET)) { + frame_offset = get_xml_int( doc, cur ); + } - if (!xmlStrcmp(cur->name, (const xmlChar *) "kf_status")) { - anim = get_xml_int( doc, cur ); - } - - if (!xmlStrcmp(cur->name, (const xmlChar *) "kf_type")) { - anim_type = get_xml_int( doc, cur ); - } + if (!xmlStrcmp(cur->name, (const xmlChar *) "kf_status")) { + anim = get_xml_int( doc, cur ); + } + + if (!xmlStrcmp(cur->name, (const xmlChar *) "kf_type")) { + anim_type = get_xml_int( doc, cur ); + } - if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_EFFECTACTIVE)) { - e_flag = get_xml_int( doc, cur ); - } + if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_EFFECTACTIVE)) { + e_flag = get_xml_int( doc, cur ); + } - if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_ARGUMENTS)) { - tagParseArguments(doc, cur->xmlChildrenNode, arg ); - } + if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_ARGUMENTS)) { + tagParseArguments(doc, cur->xmlChildrenNode, arg ); + } - cur = cur->next; + cur = cur->next; } if (effect_id != -1) { - int j; - int res = vj_tag_set_effect( dst_sample, chain_index, effect_id ); + int j; + int res = vj_tag_set_effect( dst_sample, chain_index, effect_id ); - if(res < 0 ) { - veejay_msg(VEEJAY_MSG_ERROR, "Error parsing effect %d (pos %d) to stream %d", - effect_id, chain_index, dst_sample); - } - else { + if(res < 0 ) { + veejay_msg(VEEJAY_MSG_ERROR, "Error parsing effect %d (pos %d) to stream %d", + effect_id, chain_index, dst_sample); + } + else { - /* load the parameter values */ - for (j = 0; j < vj_effect_get_num_params(effect_id); j++) { - vj_tag_set_effect_arg(dst_sample, chain_index, j, arg[j]); - } - vj_tag_set_chain_channel(dst_sample, chain_index, channel); - vj_tag_set_chain_source(dst_sample, chain_index, source_type); - - vj_tag_set_chain_status(dst_sample, chain_index, e_flag); - - vj_tag_set_offset(dst_sample, chain_index, frame_offset); - vj_tag_set_trimmer(dst_sample, chain_index, frame_trimmer); - - j = 0; - vj_tag *t = vj_tag_get( dst_sample ); - while (curarg != NULL) - { - if(!xmlStrcmp(curarg->name,(const xmlChar*)"ANIM")) - { - if(t->effect_chain[chain_index]->effect_id > 0) - { - if(tagParseKeys( doc, curarg->xmlChildrenNode, t->effect_chain[chain_index]->kf)) - { - veejay_msg(VEEJAY_MSG_INFO, "Animating FX %d on entry %d (status=%d)", t->effect_chain[chain_index]->effect_id, j,anim); - vj_tag_chain_set_kf_status(dst_sample, chain_index, anim ); - vj_tag_set_kf_type( dst_sample,chain_index,anim_type); - } - j++; - } - } - curarg = curarg->next; - } + /* load the parameter values */ + for (j = 0; j < vj_effect_get_num_params(effect_id); j++) { + vj_tag_set_effect_arg(dst_sample, chain_index, j, arg[j]); + } + vj_tag_set_chain_channel(dst_sample, chain_index, channel); + vj_tag_set_chain_source(dst_sample, chain_index, source_type); + + vj_tag_set_chain_status(dst_sample, chain_index, e_flag); + + vj_tag_set_offset(dst_sample, chain_index, frame_offset); + vj_tag_set_trimmer(dst_sample, chain_index, frame_trimmer); + + j = 0; + vj_tag *t = vj_tag_get( dst_sample ); + while (curarg != NULL) + { + if(!xmlStrcmp(curarg->name,(const xmlChar*)"ANIM")) + { + if(t->effect_chain[chain_index]->effect_id > 0) + { + if(tagParseKeys( doc, curarg->xmlChildrenNode, t->effect_chain[chain_index]->kf)) + { + veejay_msg(VEEJAY_MSG_INFO, "Animating FX %d on entry %d (status=%d)", t->effect_chain[chain_index]->effect_id, j,anim); + vj_tag_chain_set_kf_status(dst_sample, chain_index, anim ); + vj_tag_set_kf_type( dst_sample,chain_index,anim_type); + } + j++; + } + } + curarg = curarg->next; + } - } - } + } + } } @@ -3863,16 +3863,16 @@ static void tagParseEffects(xmlDocPtr doc, xmlNodePtr cur, int dst_stream) { int effectIndex = 0; while (cur != NULL && effectIndex < SAMPLE_MAX_EFFECTS) { - if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_EFFECT)) { - tagParseEffect(doc, cur->xmlChildrenNode, dst_stream); - effectIndex++; - } - //effectIndex++; - cur = cur->next; + if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_EFFECT)) { + tagParseEffect(doc, cur->xmlChildrenNode, dst_stream); + effectIndex++; + } + //effectIndex++; + cur = cur->next; } } -static void tagParseCalibration( xmlDocPtr doc, xmlNodePtr cur, int dst_sample , void *vp) +static void tagParseCalibration( xmlDocPtr doc, xmlNodePtr cur, int dst_sample , void *vp) { } @@ -3885,192 +3885,192 @@ static void tagParseCalibration( xmlDocPtr doc, xmlNodePtr cur, int dst_sample , ****************************************************************************************************/ void tagParseStreamFX(char *sampleFile, xmlDocPtr doc, xmlNodePtr cur, void *font, void *vp) { - int fx_on=0, id=0, source_id=0, source_type=0; - char *source_file = NULL; - char *extra_data = NULL; - int col[3] = {0,0,0}; - int fader_active=0, fader_val=0, fader_dir=0, fade_method=0,fade_alpha = 0,fade_entry = -1,opacity=0, nframes=0; - xmlNodePtr fx[32]; - veejay_memset( fx, 0, sizeof(fx)); - int k = 0; - int subrender = 0; - xmlNodePtr subs = NULL; - xmlNodePtr cali = NULL; - void *d = vj_font_get_dict( font ); + int fx_on=0, id=0, source_id=0, source_type=0; + char *source_file = NULL; + char *extra_data = NULL; + int col[3] = {0,0,0}; + int fader_active=0, fader_val=0, fader_dir=0, fade_method=0,fade_alpha = 0,fade_entry = -1,opacity=0, nframes=0; + xmlNodePtr fx[32]; + veejay_memset( fx, 0, sizeof(fx)); + int k = 0; + int subrender = 0; + xmlNodePtr subs = NULL; + xmlNodePtr cali = NULL; + void *d = vj_font_get_dict( font ); - while (cur != NULL) - { - if( !xmlStrcmp(cur->name, (const xmlChar*) XMLTAG_SAMPLEID )) - id = get_xml_int( doc, cur ); - if( !xmlStrcmp(cur->name, (const xmlChar*) "source_id" ) ) - source_id = get_xml_int(doc,cur); - if( !xmlStrcmp(cur->name, (const xmlChar*) "source_type" ) ) - source_type = get_xml_int(doc,cur); - if( !xmlStrcmp(cur->name, (const xmlChar*) "source_file" ) ) - source_file = get_xml_str(doc,cur); - if( !xmlStrcmp(cur->name, (const xmlChar*) "extra_data" )) - extra_data = get_xml_str(doc,cur); + while (cur != NULL) + { + if( !xmlStrcmp(cur->name, (const xmlChar*) XMLTAG_SAMPLEID )) + id = get_xml_int( doc, cur ); + if( !xmlStrcmp(cur->name, (const xmlChar*) "source_id" ) ) + source_id = get_xml_int(doc,cur); + if( !xmlStrcmp(cur->name, (const xmlChar*) "source_type" ) ) + source_type = get_xml_int(doc,cur); + if( !xmlStrcmp(cur->name, (const xmlChar*) "source_file" ) ) + source_file = get_xml_str(doc,cur); + if( !xmlStrcmp(cur->name, (const xmlChar*) "extra_data" )) + extra_data = get_xml_str(doc,cur); - if(! xmlStrcmp(cur->name, (const xmlChar*) "red" ) ) - col[0] = get_xml_int(doc,cur); - if(! xmlStrcmp(cur->name, (const xmlChar*) "green" ) ) - col[1] = get_xml_int(doc,cur); - if(! xmlStrcmp(cur->name, (const xmlChar*) "blue" )) - col[2] = get_xml_int(doc,cur); - if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_CHAIN_ENABLED)) - fx_on = get_xml_int(doc,cur); - if (!xmlStrcmp(cur->name,(const xmlChar *) XMLTAG_FADER_ACTIVE)) - fader_active = get_xml_int(doc,cur); - if (!xmlStrcmp(cur->name,(const xmlChar *) XMLTAG_FADER_VAL)) - fader_val = get_xml_int(doc,cur); - if (!xmlStrcmp(cur->name,(const xmlChar *) XMLTAG_FADE_METHOD)) - fade_method = get_xml_int(doc,cur); - if (!xmlStrcmp(cur->name,(const xmlChar *) XMLTAG_FADE_ALPHA)) - fade_alpha = get_xml_int(doc,cur); - if (!xmlStrcmp(cur->name,(const xmlChar *) XMLTAG_FADE_METHOD)) - fade_entry = get_xml_int(doc,cur); - if (!xmlStrcmp(cur->name,(const xmlChar*) XMLTAG_FADER_DIRECTION)) - fader_dir = get_xml_int(doc,cur); - if (!xmlStrcmp(cur->name,(const xmlChar*) "opacity" ) ) - opacity = get_xml_int(doc,cur); - if (!xmlStrcmp(cur->name,(const xmlChar*) "nframes" ) ) - nframes = get_xml_int(doc,cur); + if(! xmlStrcmp(cur->name, (const xmlChar*) "red" ) ) + col[0] = get_xml_int(doc,cur); + if(! xmlStrcmp(cur->name, (const xmlChar*) "green" ) ) + col[1] = get_xml_int(doc,cur); + if(! xmlStrcmp(cur->name, (const xmlChar*) "blue" )) + col[2] = get_xml_int(doc,cur); + if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_CHAIN_ENABLED)) + fx_on = get_xml_int(doc,cur); + if (!xmlStrcmp(cur->name,(const xmlChar *) XMLTAG_FADER_ACTIVE)) + fader_active = get_xml_int(doc,cur); + if (!xmlStrcmp(cur->name,(const xmlChar *) XMLTAG_FADER_VAL)) + fader_val = get_xml_int(doc,cur); + if (!xmlStrcmp(cur->name,(const xmlChar *) XMLTAG_FADE_METHOD)) + fade_method = get_xml_int(doc,cur); + if (!xmlStrcmp(cur->name,(const xmlChar *) XMLTAG_FADE_ALPHA)) + fade_alpha = get_xml_int(doc,cur); + if (!xmlStrcmp(cur->name,(const xmlChar *) XMLTAG_FADE_METHOD)) + fade_entry = get_xml_int(doc,cur); + if (!xmlStrcmp(cur->name,(const xmlChar*) XMLTAG_FADER_DIRECTION)) + fader_dir = get_xml_int(doc,cur); + if (!xmlStrcmp(cur->name,(const xmlChar*) "opacity" ) ) + opacity = get_xml_int(doc,cur); + if (!xmlStrcmp(cur->name,(const xmlChar*) "nframes" ) ) + nframes = get_xml_int(doc,cur); - if (!xmlStrcmp(cur->name, (const xmlChar*) "SUBTITLES" )) - subs = cur->xmlChildrenNode; + if (!xmlStrcmp(cur->name, (const xmlChar*) "SUBTITLES" )) + subs = cur->xmlChildrenNode; - if (!xmlStrcmp(cur->name, (const xmlChar*) "calibration" )) - cali = cur->xmlChildrenNode; - if (!xmlStrcmp(cur->name, (const xmlChar*) "subrender" )) - subrender = get_xml_int(doc,cur); + if (!xmlStrcmp(cur->name, (const xmlChar*) "calibration" )) + cali = cur->xmlChildrenNode; + if (!xmlStrcmp(cur->name, (const xmlChar*) "subrender" )) + subrender = get_xml_int(doc,cur); - if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_EFFECTS)) { - fx[k] = cur->xmlChildrenNode; - k++; - } + if (!xmlStrcmp(cur->name, (const xmlChar *) XMLTAG_EFFECTS)) { + fx[k] = cur->xmlChildrenNode; + k++; + } - cur = cur->next; - } + cur = cur->next; + } - if( id > 0 ) - { - int zer = 0; + if( id > 0 ) + { + int zer = 0; - if( source_type == VJ_TAG_TYPE_V4L && extra_data ) - sscanf( extra_data, "%d",&zer ); + if( source_type == VJ_TAG_TYPE_V4L && extra_data ) + sscanf( extra_data, "%d",&zer ); - //vj_tag_del( id ); - - int n_id = id; + //vj_tag_del( id ); + + int n_id = id; - vj_tag *cur_tag = vj_tag_get( id ); - int identity = 0; - if( cur_tag ) { - char *cur_src_file = cur_tag->method_filename; - int type = cur_tag->source_type; - if(cur_src_file && source_file) { - if(strncasecmp(cur_tag->method_filename, source_file,strlen(cur_tag->method_filename)) == 0 && type == source_type) { - identity = 1; - } - } - } + vj_tag *cur_tag = vj_tag_get( id ); + int identity = 0; + if( cur_tag ) { + char *cur_src_file = cur_tag->method_filename; + int type = cur_tag->source_type; + if(cur_src_file && source_file) { + if(strncasecmp(cur_tag->method_filename, source_file,strlen(cur_tag->method_filename)) == 0 && type == source_type) { + identity = 1; + } + } + } - if(!identity) { - if(cur_tag) - vj_tag_del(id); - n_id = vj_tag_new( source_type, source_file, _tag_info->nstreams,_tag_info->current_edit_list, - _tag_info->pixel_format, source_id,zer, _tag_info->settings->composite ); - } + if(!identity) { + if(cur_tag) + vj_tag_del(id); + n_id = vj_tag_new( source_type, source_file, _tag_info->nstreams,_tag_info->current_edit_list, + _tag_info->pixel_format, source_id,zer, _tag_info->settings->composite ); + } - if(n_id > 0 ) - { - vj_tag *tag = vj_tag_get( n_id ); - tag->id = id; - tag->effect_toggle = fx_on; - tag->fader_active = fader_active; - tag->fader_val = fader_val; - tag->fade_method = fade_method; - tag->fade_alpha = fade_alpha; - tag->fade_entry = fade_entry; - tag->fader_direction = fader_dir; - tag->opacity = opacity; - tag->nframes = nframes; - tag->subrender = subrender; + if(n_id > 0 ) + { + vj_tag *tag = vj_tag_get( n_id ); + tag->id = id; + tag->effect_toggle = fx_on; + tag->fader_active = fader_active; + tag->fader_val = fader_val; + tag->fade_method = fade_method; + tag->fade_alpha = fade_alpha; + tag->fade_entry = fade_entry; + tag->fader_direction = fader_dir; + tag->opacity = opacity; + tag->nframes = nframes; + tag->subrender = subrender; - switch( source_type ) - { - case VJ_TAG_TYPE_COLOR: - vj_tag_set_stream_color( id, col[0],col[1],col[2] ); - break; - } + switch( source_type ) + { + case VJ_TAG_TYPE_COLOR: + vj_tag_set_stream_color( id, col[0],col[1],col[2] ); + break; + } - if( subs ) - { - char tmp[512]; - sprintf(tmp, "%s-SUB-s%d.srt", sampleFile, id ); - vj_font_set_dict( font, tag->dict ); + if( subs ) + { + char tmp[512]; + sprintf(tmp, "%s-SUB-s%d.srt", sampleFile, id ); + vj_font_set_dict( font, tag->dict ); - vj_font_load_srt( font, tmp ); + vj_font_load_srt( font, tmp ); - vj_font_xml_unpack( doc,subs, font ); - } + vj_font_xml_unpack( doc,subs, font ); + } - if( cali ) - { - tagParseCalibration( doc, cali, id, vp ); - } + if( cali ) + { + tagParseCalibration( doc, cali, id, vp ); + } - int q; - for( q = 0; q < k ; q ++ ) - { - if(fx[q] ) - tagParseEffects(doc, fx[q], id ); - } - } - } + int q; + for( q = 0; q < k ; q ++ ) + { + if(fx[q] ) + tagParseEffects(doc, fx[q], id ); + } + } + } - vj_font_set_dict( font, d ); + vj_font_set_dict( font, d ); } static void tagCreateArguments(xmlNodePtr node, int *arg, int argcount) { int i; for (i = 0; i < argcount; i++) { - put_xml_int( node, XMLTAG_ARGUMENT, arg[i] ); + put_xml_int( node, XMLTAG_ARGUMENT, arg[i] ); } } static void tagCreateKeys(xmlNodePtr node, int argcount, void *port ) { - int i; - for ( i = 0; i < argcount ; i ++ ) - { - xmlNodePtr childnode = xmlNewChild( node, NULL,(const xmlChar*) "KEYFRAMES",NULL ); - keyframe_xml_pack( childnode, port, i ); - } + int i; + for ( i = 0; i < argcount ; i ++ ) + { + xmlNodePtr childnode = xmlNewChild( node, NULL,(const xmlChar*) "KEYFRAMES",NULL ); + keyframe_xml_pack( childnode, port, i ); + } } - + static void tagCreateEffect(xmlNodePtr node, sample_eff_chain * effect, int position) { xmlNodePtr childnode; - put_xml_int( node, XMLTAG_EFFECTPOS, position ); - put_xml_int( node, XMLTAG_EFFECTID, effect->effect_id ); - put_xml_int( node, XMLTAG_EFFECTACTIVE, effect->e_flag ); - put_xml_int( node, XMLTAG_EFFECTSOURCE, effect->source_type ); - put_xml_int( node, XMLTAG_EFFECTCHANNEL, effect->channel ); - put_xml_int( node, XMLTAG_EFFECTOFFSET, effect->frame_offset ); - put_xml_int( node, XMLTAG_EFFECTTRIMMER, effect->frame_trimmer ); - put_xml_int( node, XMLTAG_EFFECTAUDIOFLAG, effect->a_flag ); - put_xml_int( node, XMLTAG_EFFECTAUDIOVOLUME, effect->volume ); - put_xml_int( node, "kf_status", effect->kf_status ); - put_xml_int( node, "kf_type", effect->kf_type ); + put_xml_int( node, XMLTAG_EFFECTPOS, position ); + put_xml_int( node, XMLTAG_EFFECTID, effect->effect_id ); + put_xml_int( node, XMLTAG_EFFECTACTIVE, effect->e_flag ); + put_xml_int( node, XMLTAG_EFFECTSOURCE, effect->source_type ); + put_xml_int( node, XMLTAG_EFFECTCHANNEL, effect->channel ); + put_xml_int( node, XMLTAG_EFFECTOFFSET, effect->frame_offset ); + put_xml_int( node, XMLTAG_EFFECTTRIMMER, effect->frame_trimmer ); + put_xml_int( node, XMLTAG_EFFECTAUDIOFLAG, effect->a_flag ); + put_xml_int( node, XMLTAG_EFFECTAUDIOVOLUME, effect->volume ); + put_xml_int( node, "kf_status", effect->kf_status ); + put_xml_int( node, "kf_type", effect->kf_type ); childnode = xmlNewChild(node, NULL, (const xmlChar *) XMLTAG_ARGUMENTS, NULL); tagCreateArguments(childnode, effect->arg,vj_effect_get_num_params(effect->effect_id)); - childnode = xmlNewChild(node, NULL, (const xmlChar*) "ANIM", NULL ); - tagCreateKeys( childnode, vj_effect_get_num_params(effect->effect_id), effect->kf ); + childnode = xmlNewChild(node, NULL, (const xmlChar*) "ANIM", NULL ); + tagCreateKeys( childnode, vj_effect_get_num_params(effect->effect_id), effect->kf ); } static void tagCreateEffects(xmlNodePtr node, sample_eff_chain ** effects) @@ -4079,62 +4079,62 @@ static void tagCreateEffects(xmlNodePtr node, sample_eff_chain ** effects) xmlNodePtr childnode; for (i = 0; i < SAMPLE_MAX_EFFECTS; i++) { - if (effects[i]->effect_id != -1) { - childnode = xmlNewChild(node, NULL, (const xmlChar *) XMLTAG_EFFECT,NULL); - tagCreateEffect(childnode, effects[i], i); - } + if (effects[i]->effect_id != -1) { + childnode = xmlNewChild(node, NULL, (const xmlChar *) XMLTAG_EFFECT,NULL); + tagCreateEffect(childnode, effects[i], i); + } } } void tagCreateStream(xmlNodePtr node, vj_tag *tag, void *font, void *vp) { - put_xml_int( node, XMLTAG_SAMPLEID, tag->id ); + put_xml_int( node, XMLTAG_SAMPLEID, tag->id ); put_xml_int( node, XMLTAG_CHAIN_ENABLED, tag->effect_toggle ); - put_xml_int( node, "source_type", tag->source_type ); - put_xml_int( node, "source_id", tag->video_channel ); - put_xml_str( node, "source_file", tag->source_name ); - put_xml_int( node, "subrender", tag->subrender ); + put_xml_int( node, "source_type", tag->source_type ); + put_xml_int( node, "source_id", tag->video_channel ); + put_xml_str( node, "source_file", tag->source_name ); + put_xml_int( node, "subrender", tag->subrender ); - if(tag->extra ) - { - put_xml_str( node, "extra_data", tag->extra ); - } - - put_xml_int( node, "red", tag->color_r ); - put_xml_int( node, "green", tag->color_g ); - put_xml_int( node, "blue", tag->color_b ); + if(tag->extra ) + { + put_xml_str( node, "extra_data", tag->extra ); + } + + put_xml_int( node, "red", tag->color_r ); + put_xml_int( node, "green", tag->color_g ); + put_xml_int( node, "blue", tag->color_b ); - put_xml_int( node, "nframes", tag->nframes ); - put_xml_int( node, "opacity", tag->opacity ); + put_xml_int( node, "nframes", tag->nframes ); + put_xml_int( node, "opacity", tag->opacity ); - vj_font_xml_pack( node, font ); + vj_font_xml_pack( node, font ); - xmlNodePtr childnode = xmlNewChild(node, NULL, (const xmlChar *) XMLTAG_EFFECTS, NULL); + xmlNodePtr childnode = xmlNewChild(node, NULL, (const xmlChar *) XMLTAG_EFFECTS, NULL); - tagCreateEffects(childnode, tag->effect_chain); + tagCreateEffects(childnode, tag->effect_chain); } -void tag_writeStream( char *file, int n, xmlNodePtr node, void *font, void *vp ) +void tag_writeStream( char *file, int n, xmlNodePtr node, void *font, void *vp ) { - vj_tag *tag = vj_tag_get(n); - if(!tag) { - veejay_msg(VEEJAY_MSG_ERROR, "Stream %d does not exist", n); - return; - } - char tmp[512]; - void *d = vj_font_get_dict( font ); - snprintf(tmp,sizeof(tmp), "%s-SUB-s%d.srt", file,tag->id ); + vj_tag *tag = vj_tag_get(n); + if(!tag) { + veejay_msg(VEEJAY_MSG_ERROR, "Stream %d does not exist", n); + return; + } + char tmp[512]; + void *d = vj_font_get_dict( font ); + snprintf(tmp,sizeof(tmp), "%s-SUB-s%d.srt", file,tag->id ); - if( tag->dict ) - { - vj_font_set_dict( font, tag->dict ); - vj_font_save_srt( font, tmp ); + if( tag->dict ) + { + vj_font_set_dict( font, tag->dict ); + vj_font_save_srt( font, tmp ); - vj_font_set_dict( font, d ); - } + vj_font_set_dict( font, d ); + } - tagCreateStream(node, tag , font,vp); + tagCreateStream(node, tag , font,vp); } #endif diff --git a/veejay-current/veejay-server/libvevo/vevo.c b/veejay-current/veejay-server/libvevo/vevo.c index d726766b..37754719 100644 --- a/veejay-current/veejay-server/libvevo/vevo.c +++ b/veejay-current/veejay-server/libvevo/vevo.c @@ -898,8 +898,14 @@ vevo_property_element_size(vevo_port_t * p, const char *key, const int idx ) \param port_type Type of Port to Create. Port types <= 1024 are typed, > 1024 are anonymous ports. \return A New Port */ +#ifdef STRICT_CHECKING +vevo_port_t *vevo_port_new(int port_type, const char *func, const int line_no) +{ + veejay_msg(VEEJAY_MSG_DEBUG,"New port %d called from %s:%d", port_type, func, line_no); +#else vevo_port_t *vevo_port_new(int port_type) { +#endif __vevo_port_t *port = (__vevo_port_t *) vj_malloc(sizeof(__vevo_port_t)); port->index = NULL; @@ -998,8 +1004,14 @@ int vevo_port_verify( vevo_port_t *port ) /*! \param p Port to destroy */ +#ifdef STRICT_CHECKING +void vevo_port_free( vevo_port_t *port, const char *func, const int line_no) +{ + veejay_msg(VEEJAY_MSG_DEBUG, "Free port called from %s:%d", func, line_no); +#else void vevo_port_free( vevo_port_t *port ) { +#endif if(port != NULL) { vevo_port_free_(port ); port = NULL; @@ -1506,7 +1518,7 @@ void *vevo_port_register( vevo_port_t *in, vevo_port_t *ref ) void *port = in; const void *store = ref; if(!port) - port = vevo_port_new( VEVO_PORT_POOL ); + port = vpn( VEVO_PORT_POOL ); char pkey[32]; if(store) { diff --git a/veejay-current/veejay-server/libvje/effects/perspective.c b/veejay-current/veejay-server/libvje/effects/perspective.c index 1873a392..6f4b92c6 100644 --- a/veejay-current/veejay-server/libvje/effects/perspective.c +++ b/veejay-current/veejay-server/libvje/effects/perspective.c @@ -27,41 +27,41 @@ vj_effect *perspective_init(int width , int height) { vj_effect *ve = (vj_effect *) vj_calloc(sizeof(vj_effect)); ve->num_params = 9; - ve->defaults = (int *) vj_calloc(sizeof(int) * ve->num_params); /* default values */ - ve->limits[0] = (int *) vj_calloc(sizeof(int) * ve->num_params); /* min */ - ve->limits[1] = (int *) vj_calloc(sizeof(int) * ve->num_params); /* max */ + ve->defaults = (int *) vj_calloc(sizeof(int) * ve->num_params); /* default values */ + ve->limits[0] = (int *) vj_calloc(sizeof(int) * ve->num_params); /* min */ + ve->limits[1] = (int *) vj_calloc(sizeof(int) * ve->num_params); /* max */ ve->defaults[0] = 30; /* x1, y1 */ ve->defaults[1] = 30; ve->defaults[2] = 70; /* x2, y2 */ ve->defaults[3] = 30; - ve->defaults[4] = 70; /* x3, y3 */ - ve->defaults[5] = 70; + ve->defaults[4] = 70; /* x3, y3 */ + ve->defaults[5] = 70; - ve->defaults[6] = 30; /* x3, y4 */ - ve->defaults[7] = 70; + ve->defaults[6] = 30; /* x3, y4 */ + ve->defaults[7] = 70; - ve->defaults[0] = 0; /* reverse */ + ve->defaults[0] = 0; /* reverse */ - int i; - for( i = 0; i < 8 ; i ++ ) { - ve->limits[0][i] = -100; - ve->limits[1][i] = 100; - } + int i; + for( i = 0; i < 8 ; i ++ ) { + ve->limits[0][i] = -100; + ve->limits[1][i] = 100; + } - ve->limits[0][8] = 0; - ve->limits[1][8] = 1; + ve->limits[0][8] = 0; + ve->limits[1][8] = 1; - ve->description = "Perspective Tool"; + ve->description = "Perspective Tool"; ve->sub_format = 1; ve->extra_frame = 0; ve->has_user = 0; - - ve->param_description = vje_build_param_list( ve->num_params, - "Point 1 (X)", "Point 1 (Y)", "Point 2 (X)", "Point 2 (Y)", - "Point 3 (X)", "Point 3 (Y)", "Point 4 (X)", "Point 4 (Y)", - "Reverse" ); + + ve->param_description = vje_build_param_list( ve->num_params, + "Point 1 (X)", "Point 1 (Y)", "Point 2 (X)", "Point 2 (Y)", + "Point 3 (X)", "Point 3 (Y)", "Point 4 (X)", "Point 4 (Y)", + "Reverse" ); return ve; } static int perspective_[9] = { 0 }; @@ -69,61 +69,62 @@ static void *perspective_vp_ = NULL; static uint8_t *perspective_private_[4] = { NULL, NULL, NULL, NULL }; -int perspective_malloc(int width, int height) +int perspective_malloc(int width, int height) { - int i; - for( i = 0; i < 3; i ++ ) { - perspective_private_[i] = (uint8_t*) vj_malloc( sizeof(uint8_t) * RUP8(width*height+width)); - if(!perspective_private_[i]) - return 0; - } - veejay_memset( perspective_, 0, sizeof(perspective_)); + int i; + for( i = 0; i < 3; i ++ ) { + perspective_private_[i] = (uint8_t*) vj_malloc( sizeof(uint8_t) * RUP8(width*height+width)); + if(!perspective_private_[i]) + return 0; + } + veejay_memset( perspective_, 0, sizeof(perspective_)); - return 1; + return 1; } void perspective_free() { - int i; - for( i = 0; i < 3; i ++ ) { - if( perspective_private_[i] ) - free(perspective_private_[i] ); - perspective_private_[i] = NULL; - } - if( perspective_vp_ ) - viewport_destroy( perspective_vp_ ); - perspective_vp_ = NULL; + int i; + for( i = 0; i < 3; i ++ ) { + if( perspective_private_[i] ) + free(perspective_private_[i] ); + perspective_private_[i] = NULL; + } + + if( perspective_vp_ ) + viewport_destroy( perspective_vp_ ); + perspective_vp_ = NULL; } void perspective_apply( VJFrame *frame, int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, int reverse) { - const unsigned int width = frame->width; - const unsigned int height = frame->height; - const int len = frame->len; + const unsigned int width = frame->width; + const unsigned int height = frame->height; + const int len = frame->len; - if( x1 != perspective_[0] || y1 != perspective_[1] || x2 != perspective_[2] || y2 != perspective_[3] || - x3 != perspective_[4] || y3 != perspective_[5] || x4 != perspective_[6] || y4 != perspective_[7] || reverse != perspective_[8] ) - { - if( perspective_vp_ ) - viewport_destroy( perspective_vp_ ); - perspective_vp_ = viewport_fx_init_map( width,height,x1,y1, x2,y2, x3,y3, x4,y4, reverse ); - if(!perspective_vp_ ) - return; - perspective_[0] = x1; - perspective_[1] = y1; - perspective_[2] = x2; - perspective_[3] = y2; - perspective_[4] = x3; - perspective_[5] = y3; - perspective_[6] = x4; - perspective_[7] = y4; - perspective_[8] = reverse; - } + if( x1 != perspective_[0] || y1 != perspective_[1] || x2 != perspective_[2] || y2 != perspective_[3] || + x3 != perspective_[4] || y3 != perspective_[5] || x4 != perspective_[6] || y4 != perspective_[7] || reverse != perspective_[8] ) + { + if( perspective_vp_ ) + viewport_destroy( perspective_vp_ ); + perspective_vp_ = viewport_fx_init_map( width,height,x1,y1, x2,y2, x3,y3, x4,y4, reverse ); + if(!perspective_vp_ ) + return; + perspective_[0] = x1; + perspective_[1] = y1; + perspective_[2] = x2; + perspective_[3] = y2; + perspective_[4] = x3; + perspective_[5] = y3; + perspective_[6] = x4; + perspective_[7] = y4; + perspective_[8] = reverse; + } - int strides[4] = { len, len, len, 0 }; - vj_frame_copy( frame->data, perspective_private_, strides ); + int strides[4] = { len, len, len, 0 }; + vj_frame_copy( frame->data, perspective_private_, strides ); - viewport_process_dynamic( perspective_vp_, perspective_private_, frame->data ); - + viewport_process_dynamic( perspective_vp_, perspective_private_, frame->data ); + } diff --git a/veejay-current/veejay-server/libvje/effects/rotozoom.c b/veejay-current/veejay-server/libvje/effects/rotozoom.c index 3262f43a..0fe971ab 100644 --- a/veejay-current/veejay-server/libvje/effects/rotozoom.c +++ b/veejay-current/veejay-server/libvje/effects/rotozoom.c @@ -37,9 +37,9 @@ vj_effect *rotozoom_init(int width, int height) vj_effect *ve = (vj_effect *) vj_calloc(sizeof(vj_effect)); ve->num_params = 4; - ve->defaults = (int *) vj_calloc(sizeof(int) * ve->num_params); /* default values */ - ve->limits[0] = (int *) vj_calloc(sizeof(int) * ve->num_params); /* min */ - ve->limits[1] = (int *) vj_calloc(sizeof(int) * ve->num_params); /* max */ + ve->defaults = (int *) vj_calloc(sizeof(int) * ve->num_params); /* default values */ + ve->limits[0] = (int *) vj_calloc(sizeof(int) * ve->num_params); /* min */ + ve->limits[1] = (int *) vj_calloc(sizeof(int) * ve->num_params); /* max */ ve->defaults[0] = 0; ve->defaults[1] = 1; ve->defaults[2] = 1; @@ -55,114 +55,109 @@ vj_effect *rotozoom_init(int width, int height) ve->description = "Rotozoom"; ve->sub_format = 1; ve->extra_frame = 0; - ve->param_description = vje_build_param_list(ve->num_params, "Mode", "Rotate", "Zoom" , "Automatic"); - ve->has_user = 0; + ve->param_description = vje_build_param_list(ve->num_params, "Mode", "Rotate", "Zoom" , "Automatic"); + ve->has_user = 0; for (j = 0; j < 9; j++) { - test_roto[j] = (int *) vj_malloc(sizeof(int) * 256); - test_roto2[j] = (int *) vj_malloc(sizeof(int) * 256); + test_roto[j] = (int *) vj_malloc(sizeof(int) * 256); + test_roto2[j] = (int *) vj_malloc(sizeof(int) * 256); } for (i = 0; i < 256; i++) { - float rad = (float) i * 1.41176 * 0.0174532; - float c = sin(rad); - test_roto[0][i] = (c + 0.8) * 4096.0; - test_roto2[0][i] = (2.0 * c) * 4096.0; + float rad = (float) i * 1.41176 * 0.0174532; + float c = sin(rad); + test_roto[0][i] = (c + 0.8) * 4096.0; + test_roto2[0][i] = (2.0 * c) * 4096.0; } for (i = 0; i < 256; i++) { - float rad = (float) i * 2.41176 * 0.0174532; - float c = sin(rad); - test_roto[1][i] = (c + 0.8) * 4096.0; - test_roto2[1][i] = (2.0 * c) * 4096.0; + float rad = (float) i * 2.41176 * 0.0174532; + float c = sin(rad); + test_roto[1][i] = (c + 0.8) * 4096.0; + test_roto2[1][i] = (2.0 * c) * 4096.0; } for (i = 0; i < 256; i++) { - float rad = (float) i * 3.41576 * 0.0174532; - float c = sin(rad); - test_roto[2][i] = (c + 0.8) * 4096.0; - test_roto2[2][i] = (2.0 * c) * 4096.0; + float rad = (float) i * 3.41576 * 0.0174532; + float c = sin(rad); + test_roto[2][i] = (c + 0.8) * 4096.0; + test_roto2[2][i] = (2.0 * c) * 4096.0; } for (i = 0; i < 256; i++) { - float rad = (float) i * 4.74176 * 0.0174532; - float c = sin(rad); - test_roto[3][i] = (c + 0.8) * 4096.0; - test_roto2[3][i] = (2.0 * c) * 4096.0; + float rad = (float) i * 4.74176 * 0.0174532; + float c = sin(rad); + test_roto[3][i] = (c + 0.8) * 4096.0; + test_roto2[3][i] = (2.0 * c) * 4096.0; } for (i = 0; i < 256; i++) { - float rad = (float) i * 5.91176 * 0.0174532; - float c = sin(rad); - test_roto[4][i] = (c + 0.8) * 4096.0; - test_roto2[4][i] = (2.0 * c) * 4096.0; + float rad = (float) i * 5.91176 * 0.0174532; + float c = sin(rad); + test_roto[4][i] = (c + 0.8) * 4096.0; + test_roto2[4][i] = (2.0 * c) * 4096.0; } for (i = 0; i < 256; i++) { - float rad = (float) i * 9.12345 * 0.0174532; - float c = sin(rad); - test_roto[5][i] = (c + 0.8) * 4096.0; - test_roto2[5][i] = (2.0 * c) * 4096.0; + float rad = (float) i * 9.12345 * 0.0174532; + float c = sin(rad); + test_roto[5][i] = (c + 0.8) * 4096.0; + test_roto2[5][i] = (2.0 * c) * 4096.0; } for (i = 0; i < 256; i++) { - float rad = (float) i * 9.12345 * 0.0174532; - float c = sin(rad); - test_roto[6][i] = (c + 0.8) * 8096.0; - test_roto2[6][i] = (2.0 * c) * 8096.0; + float rad = (float) i * 9.12345 * 0.0174532; + float c = sin(rad); + test_roto[6][i] = (c + 0.8) * 8096.0; + test_roto2[6][i] = (2.0 * c) * 8096.0; } for (i = 0; i < 256; i++) { - float rad = (float) i * 1.41176 * 0.0174532; - float c = sin(rad); - test_roto[7][i] = c * 4096.0; - test_roto2[7][i] = c * 4096.0; + float rad = (float) i * 1.41176 * 0.0174532; + float c = sin(rad); + test_roto[7][i] = c * 4096.0; + test_roto2[7][i] = c * 4096.0; } for (i = 0; i < 256; i++) { - float rad = (float) i * 1.0 * 0.0174532; - float c = sin(rad); - test_roto[8][i] = c * 4096.0; - test_roto2[8][i] = c * 4096.0; + float rad = (float) i * 1.0 * 0.0174532; + float c = sin(rad); + test_roto[8][i] = c * 4096.0; + test_roto2[8][i] = c * 4096.0; } - ve->hints = vje_init_value_hint_list( ve->num_params ); + ve->hints = vje_init_value_hint_list( ve->num_params ); - vje_build_value_hint_list( ve->hints, ve->limits[1][0], 0, "Normal", "Rotozoom II", - "Rotozoom III", "Rotozoom IV", "Rotozoom V", "Rotozoom VI", "Rotozoom VII", "Rotozoom VIII", "Rotozoom IX"); + vje_build_value_hint_list( ve->hints, ve->limits[1][0], 0, "Normal", "Rotozoom II", + "Rotozoom III", "Rotozoom IV", "Rotozoom V", "Rotozoom VI", "Rotozoom VII", "Rotozoom VIII", "Rotozoom IX"); return ve; } -void rotozoom_destroy() +void rotozoom_destroy() { int j; for (j = 0; j < 9; j++) { - if( test_roto[j] ) - free(test_roto[j]); - if( test_roto2[j]); - free(test_roto2[j]); + free(test_roto[j]); + free(test_roto2[j]); } } int rotozoom_malloc(int width, int height) { - - rotobuffer[0] = (uint8_t *) vj_calloc(sizeof(uint8_t) * width * height * 3); - if(!rotobuffer[0]) - return 0; - rotobuffer[1] = rotobuffer[0] + (width * height); - rotobuffer[2] = rotobuffer[1] + (width * height); - return 1; - + if(!rotobuffer[0]) + return 0; + rotobuffer[1] = rotobuffer[0] + (width * height); + rotobuffer[2] = rotobuffer[1] + (width * height); + return 1; } void rotozoom_free() { - if(rotobuffer[0]) - free(rotobuffer[0]); - rotobuffer[0] = NULL; - rotobuffer[1] = NULL; - rotobuffer[2] = NULL; + if(rotobuffer[0]) + free(rotobuffer[0]); + rotobuffer[0] = NULL; + rotobuffer[1] = NULL; + rotobuffer[2] = NULL; } /* rotozoomer, from the demo effects collection, works in supersampled YCbCr space. printf("Retro Rotozoom Effect - B. Ellacott, W.P. van Paassen - 2002\n"); */ static void draw_tile(int stepx, int stepy, int zoom, int w, int h, - uint8_t * src1[3], uint8_t * src2[3]) + uint8_t * src1[3], uint8_t * src2[3]) { int x, y, i, j, xd, yd, a, b, sx, sy; @@ -172,46 +167,46 @@ static void draw_tile(int stepx, int stepy, int zoom, int w, int h, yd = (stepy * zoom) >> 12; for (j = 0; j < h; j++) { - x = sx; - y = sy; - for (i = 0; i < w; i++) { - a = (x >> 12) & 255; - b = (y >> 12) & 255; - src1[0][(j * w) + i] = src2[0][b * w + a]; - src1[1][(j * w) + i] = src2[1][b * w + a]; - src1[2][(j * w) + i] = src2[2][b * w + a]; - x += xd; - y += yd; - } - sx -= yd; - sy += xd; + x = sx; + y = sy; + for (i = 0; i < w; i++) { + a = (x >> 12) & 255; + b = (y >> 12) & 255; + src1[0][(j * w) + i] = src2[0][b * w + a]; + src1[1][(j * w) + i] = src2[1][b * w + a]; + src1[2][(j * w) + i] = src2[2][b * w + a]; + x += xd; + y += yd; + } + sx -= yd; + sy += xd; } } static void rotozoom2_apply(VJFrame *frame, uint8_t *data[3], int width, - int height, int n, int p, int z) + int height, int n, int p, int z) { draw_tile(test_roto[n][p], - test_roto[n][(p + 128) & 0xFF], - test_roto2[n][z], width, height, frame->data, data); + test_roto[n][(p + 128) & 0xFF], + test_roto2[n][z], width, height, frame->data, data); } static void rotozoom1_apply(VJFrame *frame, uint8_t *data[3], int w, int h, - int n, int p, int z) + int n, int p, int z) { if (roto_old_p != p) { - roto_old_p = p; - new_path = p & 255; + roto_old_p = p; + new_path = p & 255; } if (roto_old_z != z) { - roto_old_z = z; - new_zpath = z & 255; + roto_old_z = z; + new_zpath = z & 255; } draw_tile(test_roto[n][new_path], - test_roto[n][(new_path + 128) & 0xff], - test_roto2[n][new_zpath], w, h, frame->data, data); + test_roto[n][(new_path + 128) & 0xff], + test_roto2[n][new_zpath], w, h, frame->data, data); new_path = (new_path - 1) & 255; new_zpath = (new_zpath + 1) & 255; @@ -221,19 +216,19 @@ static void rotozoom1_apply(VJFrame *frame, uint8_t *data[3], int w, int h, void rotozoom_apply( VJFrame *frame, int mode, int rotate, int zoom, int autom) { - const unsigned int width = frame->width; - const unsigned int height = frame->height; - const int len = frame->len; - int strides[4] = {len ,len ,len ,0}; - switch (autom) { /* alas must do memcpy */ + const unsigned int width = frame->width; + const unsigned int height = frame->height; + const int len = frame->len; + int strides[4] = {len ,len ,len ,0}; + switch (autom) { /* alas must do memcpy */ case 0: - vj_frame_copy( frame->data, rotobuffer, strides ); - rotozoom2_apply(frame, rotobuffer, width, height, mode, rotate, zoom); - break; + vj_frame_copy( frame->data, rotobuffer, strides ); + rotozoom2_apply(frame, rotobuffer, width, height, mode, rotate, zoom); + break; case 1: - vj_frame_copy( frame->data,rotobuffer, strides ); - rotozoom1_apply(frame, rotobuffer, width, height, mode, rotate, zoom); - break; + vj_frame_copy( frame->data,rotobuffer, strides ); + rotozoom1_apply(frame, rotobuffer, width, height, mode, rotate, zoom); + break; } diff --git a/veejay-current/veejay-server/veejay/libveejay.h b/veejay-current/veejay-server/veejay/libveejay.h index dbe92adb..c27f0eb7 100644 --- a/veejay-current/veejay-server/veejay/libveejay.h +++ b/veejay-current/veejay-server/veejay/libveejay.h @@ -60,12 +60,8 @@ void veejay_set_sample(veejay_t *info, int sample); int veejay_set_frame(veejay_t *info, long frame_num); -#ifdef STRICT_CHECKING -#define veejay_change_state(a,b) vcs(a,b,__FUNCTION__,__LINE__) -void vcs(veejay_t *info, int new_state,const char *caller_func,const int caller_line); -#else void veejay_change_state(veejay_t *info, int new_state); -#endif + int veejay_set_speed(veejay_t *info , int speed); int veejay_hold_frame(veejay_t *info, int rrp, int pos); diff --git a/veejay-current/veejay-server/veejay/vj-event.c b/veejay-current/veejay-server/veejay/vj-event.c index c36ebdd7..84b609cd 100644 --- a/veejay-current/veejay-server/veejay/vj-event.c +++ b/veejay-current/veejay-server/veejay/vj-event.c @@ -67,8 +67,8 @@ #include #include /* Highest possible SDL Key identifier */ -#define MAX_SDL_KEY (3 * SDLK_LAST) + 1 -#define MSG_MIN_LEN 4 /* stripped ';' */ +#define MAX_SDL_KEY (3 * SDLK_LAST) + 1 +#define MSG_MIN_LEN 4 /* stripped ';' */ #ifdef HAVE_FREETYPE #include #endif @@ -89,14 +89,14 @@ static hash_t *BundleHash = NULL; static uint8_t *sample_image_buffer = NULL; static int vj_event_valid_mode(int mode) { - switch(mode) { - case VJ_PLAYBACK_MODE_SAMPLE: - case VJ_PLAYBACK_MODE_TAG: - case VJ_PLAYBACK_MODE_PLAIN: - return 1; - } + switch(mode) { + case VJ_PLAYBACK_MODE_SAMPLE: + case VJ_PLAYBACK_MODE_TAG: + case VJ_PLAYBACK_MODE_PLAIN: + return 1; + } - return 0; + return 0; } /* define the function pointer to any event */ @@ -106,34 +106,34 @@ void vj_event_create_effect_bundle(veejay_t * v,char *buf, int key_id, int key_m /* struct for runtime initialization of event handlers */ typedef struct { - int list_id; // VIMS id - vj_event act; // function pointer + int list_id; // VIMS id + vj_event act; // function pointer } vj_events; -static vj_events net_list[VIMS_MAX]; -static int override_keyboard = 0; +static vj_events net_list[VIMS_MAX]; +static int override_keyboard = 0; #ifdef HAVE_SDL typedef struct { - vj_events *vims; - int key_symbol; - int key_mod; - int arg_len; - char *arguments; - int event_id; + vj_events *vims; + int key_symbol; + int key_mod; + int arg_len; + char *arguments; + int event_id; } vj_keyboard_event; static hash_t *keyboard_events = NULL; -static vj_keyboard_event *keyboard_event_map_[2048]; +static vj_keyboard_event *keyboard_event_map_[2048]; typedef struct { - int key_symbol; - int key_mod; - char *args; - int arg_len; - void *next; + int key_symbol; + int key_mod; + char *args; + int arg_len; + void *next; } vims_key_list; #endif @@ -142,12 +142,12 @@ static int _recorder_format = ENCODER_MJPEG; #define SEND_BUF 256000 -static char *get_print_buf(int size) { - int s = size; - if( s<= 0) - s = SEND_BUF; - char *res = (char*) vj_calloc(sizeof(char) * s ); - return res; +static char *get_print_buf(int size) { + int s = size; + if( s<= 0) + s = SEND_BUF; + char *res = (char*) vj_calloc(sizeof(char) * s ); + return res; } /** * MACRO|keystrokes|VIMS macro @@ -173,205 +173,205 @@ static char *get_print_buf(int size) { */ #define MAX_MACRO_BANKS 12 -static void *macro_bank_[MAX_MACRO_BANKS]; -static void *macro_port_ = NULL; -static int current_macro_ = 0; -static int macro_status_ = 0; -static int macro_line_[3] = {-1 ,0,0}; +static void *macro_bank_[MAX_MACRO_BANKS]; +static void *macro_port_ = NULL; +static int current_macro_ = 0; +static int macro_status_ = 0; +static int macro_line_[3] = {-1 ,0,0}; #define MAX_MACROS 16 typedef struct { - char *msg[MAX_MACROS]; + char *msg[MAX_MACROS]; } macro_block_t; -int vj_event_macro_status(void) +int vj_event_macro_status(void) { - return macro_status_; + return macro_status_; } -static char *retrieve_macro_(veejay_t *v,int idx, char *key ); -static void store_macro_( veejay_t *v,char *str, long frame ); -static void reset_macro_(void); -static void display_replay_macro_(void); +static char *retrieve_macro_(veejay_t *v,int idx, char *key ); +static void store_macro_( veejay_t *v,char *str, long frame ); +static void reset_macro_(void); +static void display_replay_macro_(void); static void vj_event_sample_next1( veejay_t *v ); -extern void veejay_pipe_write_status(veejay_t *info); -extern int _vj_server_del_client(vj_server * vje, int link_id); +extern void veejay_pipe_write_status(veejay_t *info); +extern int _vj_server_del_client(vj_server * vje, int link_id); extern int vj_event_exists( int id ); // forward decl int vj_event_get_video_format(void) { - return _recorder_format; + return _recorder_format; } enum { - VJ_ERROR_NONE=0, - VJ_ERROR_MODE=1, - VJ_ERROR_EXISTS=2, - VJ_ERROR_VIMS=3, - VJ_ERROR_DIMEN=4, - VJ_ERROR_MEM=5, - VJ_ERROR_INVALID_MODE = 6, + VJ_ERROR_NONE=0, + VJ_ERROR_MODE=1, + VJ_ERROR_EXISTS=2, + VJ_ERROR_VIMS=3, + VJ_ERROR_DIMEN=4, + VJ_ERROR_MEM=5, + VJ_ERROR_INVALID_MODE = 6, }; #ifdef HAVE_SDL #define VIMS_MOD_CAPSLOCK 4 -#define VIMS_MOD_SHIFT 3 -#define VIMS_MOD_NONE 0 -#define VIMS_MOD_CTRL 2 -#define VIMS_MOD_ALT 1 +#define VIMS_MOD_SHIFT 3 +#define VIMS_MOD_NONE 0 +#define VIMS_MOD_CTRL 2 +#define VIMS_MOD_ALT 1 -static struct { /* hardcoded keyboard layout (the default keys) */ - int event_id; - int key_sym; - int key_mod; - const char *value; +static struct { /* hardcoded keyboard layout (the default keys) */ + int event_id; + int key_sym; + int key_mod; + const char *value; } vj_event_default_sdl_keys[] = { - { 0,0,0,NULL }, - { VIMS_PROJ_INC, SDLK_LEFT, VIMS_MOD_CTRL, "-1 0" }, - { VIMS_PROJ_INC, SDLK_RIGHT, VIMS_MOD_CTRL, "1 0" }, - { VIMS_PROJ_INC, SDLK_UP, VIMS_MOD_CTRL, "0 -1" }, - { VIMS_PROJ_INC, SDLK_DOWN, VIMS_MOD_CTRL, "0 1" }, + { 0,0,0,NULL }, + { VIMS_PROJ_INC, SDLK_LEFT, VIMS_MOD_CTRL, "-1 0" }, + { VIMS_PROJ_INC, SDLK_RIGHT, VIMS_MOD_CTRL, "1 0" }, + { VIMS_PROJ_INC, SDLK_UP, VIMS_MOD_CTRL, "0 -1" }, + { VIMS_PROJ_INC, SDLK_DOWN, VIMS_MOD_CTRL, "0 1" }, - { VIMS_EFFECT_SET_BG, SDLK_b, VIMS_MOD_ALT, NULL }, - { VIMS_VIDEO_PLAY_FORWARD, SDLK_KP6, VIMS_MOD_NONE, NULL }, - { VIMS_VIDEO_PLAY_BACKWARD, SDLK_KP4, VIMS_MOD_NONE, NULL }, - { VIMS_VIDEO_PLAY_STOP, SDLK_KP5, VIMS_MOD_NONE, NULL }, - { VIMS_VIDEO_SKIP_FRAME, SDLK_KP9, VIMS_MOD_NONE, "1" }, - { VIMS_VIDEO_PREV_FRAME, SDLK_KP7, VIMS_MOD_NONE, "1" }, - { VIMS_VIDEO_SKIP_SECOND, SDLK_KP8, VIMS_MOD_NONE, NULL }, - { VIMS_VIDEO_PREV_SECOND, SDLK_KP2, VIMS_MOD_NONE, NULL }, - { VIMS_VIDEO_GOTO_START, SDLK_KP1, VIMS_MOD_NONE, NULL }, - { VIMS_VIDEO_GOTO_END, SDLK_KP3, VIMS_MOD_NONE, NULL }, - { VIMS_VIDEO_SET_SPEEDK, SDLK_a, VIMS_MOD_NONE, "1" }, - { VIMS_VIDEO_SET_SPEEDK, SDLK_s, VIMS_MOD_NONE, "2" }, - { VIMS_VIDEO_SET_SPEEDK, SDLK_d, VIMS_MOD_NONE, "3" }, - { VIMS_VIDEO_SET_SPEEDK, SDLK_f, VIMS_MOD_NONE, "4" }, - { VIMS_VIDEO_SET_SPEEDK, SDLK_g, VIMS_MOD_NONE, "5" }, - { VIMS_VIDEO_SET_SPEEDK, SDLK_h, VIMS_MOD_NONE, "6" }, - { VIMS_VIDEO_SET_SPEEDK, SDLK_j, VIMS_MOD_NONE, "7" }, - { VIMS_VIDEO_SET_SPEEDK, SDLK_k, VIMS_MOD_NONE, "8" }, - { VIMS_VIDEO_SET_SPEEDK, SDLK_l, VIMS_MOD_NONE, "9" }, - { VIMS_VIDEO_SET_SLOW, SDLK_a, VIMS_MOD_ALT, "1" }, - { VIMS_VIDEO_SET_SLOW, SDLK_s, VIMS_MOD_ALT, "2" }, - { VIMS_VIDEO_SET_SLOW, SDLK_d, VIMS_MOD_ALT, "3" }, - { VIMS_VIDEO_SET_SLOW, SDLK_e, VIMS_MOD_ALT, "4" }, - { VIMS_VIDEO_SET_SLOW, SDLK_f, VIMS_MOD_ALT, "5" }, - { VIMS_VIDEO_SET_SLOW, SDLK_g, VIMS_MOD_ALT, "6" }, - { VIMS_VIDEO_SET_SLOW, SDLK_h, VIMS_MOD_ALT, "7" }, - { VIMS_VIDEO_SET_SLOW, SDLK_j, VIMS_MOD_ALT, "8" }, - { VIMS_VIDEO_SET_SLOW, SDLK_k, VIMS_MOD_ALT, "9" }, - { VIMS_VIDEO_SET_SLOW, SDLK_l, VIMS_MOD_ALT, "10" }, + { VIMS_EFFECT_SET_BG, SDLK_b, VIMS_MOD_ALT, NULL }, + { VIMS_VIDEO_PLAY_FORWARD, SDLK_KP6, VIMS_MOD_NONE, NULL }, + { VIMS_VIDEO_PLAY_BACKWARD, SDLK_KP4, VIMS_MOD_NONE, NULL }, + { VIMS_VIDEO_PLAY_STOP, SDLK_KP5, VIMS_MOD_NONE, NULL }, + { VIMS_VIDEO_SKIP_FRAME, SDLK_KP9, VIMS_MOD_NONE, "1" }, + { VIMS_VIDEO_PREV_FRAME, SDLK_KP7, VIMS_MOD_NONE, "1" }, + { VIMS_VIDEO_SKIP_SECOND, SDLK_KP8, VIMS_MOD_NONE, NULL }, + { VIMS_VIDEO_PREV_SECOND, SDLK_KP2, VIMS_MOD_NONE, NULL }, + { VIMS_VIDEO_GOTO_START, SDLK_KP1, VIMS_MOD_NONE, NULL }, + { VIMS_VIDEO_GOTO_END, SDLK_KP3, VIMS_MOD_NONE, NULL }, + { VIMS_VIDEO_SET_SPEEDK, SDLK_a, VIMS_MOD_NONE, "1" }, + { VIMS_VIDEO_SET_SPEEDK, SDLK_s, VIMS_MOD_NONE, "2" }, + { VIMS_VIDEO_SET_SPEEDK, SDLK_d, VIMS_MOD_NONE, "3" }, + { VIMS_VIDEO_SET_SPEEDK, SDLK_f, VIMS_MOD_NONE, "4" }, + { VIMS_VIDEO_SET_SPEEDK, SDLK_g, VIMS_MOD_NONE, "5" }, + { VIMS_VIDEO_SET_SPEEDK, SDLK_h, VIMS_MOD_NONE, "6" }, + { VIMS_VIDEO_SET_SPEEDK, SDLK_j, VIMS_MOD_NONE, "7" }, + { VIMS_VIDEO_SET_SPEEDK, SDLK_k, VIMS_MOD_NONE, "8" }, + { VIMS_VIDEO_SET_SPEEDK, SDLK_l, VIMS_MOD_NONE, "9" }, + { VIMS_VIDEO_SET_SLOW, SDLK_a, VIMS_MOD_ALT, "1" }, + { VIMS_VIDEO_SET_SLOW, SDLK_s, VIMS_MOD_ALT, "2" }, + { VIMS_VIDEO_SET_SLOW, SDLK_d, VIMS_MOD_ALT, "3" }, + { VIMS_VIDEO_SET_SLOW, SDLK_e, VIMS_MOD_ALT, "4" }, + { VIMS_VIDEO_SET_SLOW, SDLK_f, VIMS_MOD_ALT, "5" }, + { VIMS_VIDEO_SET_SLOW, SDLK_g, VIMS_MOD_ALT, "6" }, + { VIMS_VIDEO_SET_SLOW, SDLK_h, VIMS_MOD_ALT, "7" }, + { VIMS_VIDEO_SET_SLOW, SDLK_j, VIMS_MOD_ALT, "8" }, + { VIMS_VIDEO_SET_SLOW, SDLK_k, VIMS_MOD_ALT, "9" }, + { VIMS_VIDEO_SET_SLOW, SDLK_l, VIMS_MOD_ALT, "10" }, #ifdef HAVE_SDL - { VIMS_FULLSCREEN, SDLK_f, VIMS_MOD_CTRL, NULL }, -#endif - { VIMS_CHAIN_ENTRY_DOWN, SDLK_KP_MINUS, VIMS_MOD_NONE, "1" }, - { VIMS_CHAIN_ENTRY_UP, SDLK_KP_PLUS, VIMS_MOD_NONE, "1" }, - { VIMS_CHAIN_ENTRY_CHANNEL_INC, SDLK_EQUALS, VIMS_MOD_NONE, NULL }, - { VIMS_CHAIN_ENTRY_CHANNEL_DEC, SDLK_MINUS, VIMS_MOD_NONE, NULL }, - { VIMS_CHAIN_ENTRY_SOURCE_TOGGLE,SDLK_SLASH, VIMS_MOD_NONE, NULL }, // stream/sample - { VIMS_CHAIN_ENTRY_INC_ARG, SDLK_PAGEUP, VIMS_MOD_NONE, "0 1" }, - { VIMS_CHAIN_ENTRY_INC_ARG, SDLK_KP_PERIOD, VIMS_MOD_NONE, "1 1" }, - { VIMS_CHAIN_ENTRY_INC_ARG, SDLK_PERIOD, VIMS_MOD_NONE, "2 1" }, - { VIMS_CHAIN_ENTRY_INC_ARG, SDLK_w, VIMS_MOD_NONE, "3 1" }, - { VIMS_CHAIN_ENTRY_INC_ARG, SDLK_r, VIMS_MOD_NONE, "4 1" }, - { VIMS_CHAIN_ENTRY_INC_ARG, SDLK_y, VIMS_MOD_NONE, "5 1" }, - { VIMS_CHAIN_ENTRY_INC_ARG, SDLK_i, VIMS_MOD_NONE, "6 1" }, - { VIMS_CHAIN_ENTRY_INC_ARG, SDLK_p, VIMS_MOD_NONE, "7 1" }, - { VIMS_CHAIN_ENTRY_DEC_ARG, SDLK_PAGEDOWN, VIMS_MOD_NONE, "0 -1" }, - { VIMS_CHAIN_ENTRY_DEC_ARG, SDLK_KP0, VIMS_MOD_NONE, "1 -1" }, - { VIMS_CHAIN_ENTRY_DEC_ARG, SDLK_COMMA, VIMS_MOD_NONE, "2 -1" }, - { VIMS_CHAIN_ENTRY_DEC_ARG, SDLK_q, VIMS_MOD_NONE, "3 -1" }, - { VIMS_CHAIN_ENTRY_DEC_ARG, SDLK_e, VIMS_MOD_NONE, "4 -1" }, - { VIMS_CHAIN_ENTRY_DEC_ARG, SDLK_t, VIMS_MOD_NONE, "5 -1" }, - { VIMS_CHAIN_ENTRY_DEC_ARG, SDLK_u, VIMS_MOD_NONE, "6 -1" }, - { VIMS_CHAIN_ENTRY_DEC_ARG, SDLK_o, VIMS_MOD_NONE, "7 -1" }, - { VIMS_OSD, SDLK_o, VIMS_MOD_CTRL, NULL }, - { VIMS_COPYRIGHT, SDLK_c, VIMS_MOD_CTRL, NULL }, - { VIMS_COMPOSITE, SDLK_i, VIMS_MOD_CTRL, NULL }, - { VIMS_OSD_EXTRA, SDLK_h, VIMS_MOD_CTRL, NULL }, - { VIMS_PROJ_STACK, SDLK_v, VIMS_MOD_CTRL, "1 0" }, - { VIMS_PROJ_STACK, SDLK_p, VIMS_MOD_CTRL, "0 1" }, - { VIMS_PROJ_TOGGLE, SDLK_a, VIMS_MOD_CTRL, NULL }, - { VIMS_FRONTBACK, SDLK_s, VIMS_MOD_CTRL, NULL }, - { VIMS_RENDER_DEPTH, SDLK_d, VIMS_MOD_CTRL, "2" }, - { VIMS_SELECT_BANK, SDLK_1, VIMS_MOD_NONE, "1" }, - { VIMS_SELECT_BANK, SDLK_2, VIMS_MOD_NONE, "2" }, - { VIMS_SELECT_BANK, SDLK_3, VIMS_MOD_NONE, "3" }, - { VIMS_SELECT_BANK, SDLK_4, VIMS_MOD_NONE, "4" }, - { VIMS_SELECT_BANK, SDLK_5, VIMS_MOD_NONE, "5" }, - { VIMS_SELECT_BANK, SDLK_6, VIMS_MOD_NONE, "6" }, - { VIMS_SELECT_BANK, SDLK_7, VIMS_MOD_NONE, "7" }, - { VIMS_SELECT_BANK, SDLK_8, VIMS_MOD_NONE, "8" }, - { VIMS_SELECT_BANK, SDLK_9, VIMS_MOD_NONE, "9" }, - { VIMS_SELECT_BANK, SDLK_1, VIMS_MOD_SHIFT, "1" }, - { VIMS_SELECT_BANK, SDLK_2, VIMS_MOD_SHIFT, "2" }, - { VIMS_SELECT_BANK, SDLK_3, VIMS_MOD_SHIFT, "3" }, - { VIMS_SELECT_BANK, SDLK_4, VIMS_MOD_SHIFT, "4" }, - { VIMS_SELECT_BANK, SDLK_5, VIMS_MOD_SHIFT, "5" }, - { VIMS_SELECT_BANK, SDLK_6, VIMS_MOD_SHIFT, "6" }, - { VIMS_SELECT_BANK, SDLK_7, VIMS_MOD_SHIFT, "7" }, - { VIMS_SELECT_BANK, SDLK_8, VIMS_MOD_SHIFT, "8" }, - { VIMS_SELECT_BANK, SDLK_9, VIMS_MOD_SHIFT, "9" }, - { VIMS_SELECT_ID, SDLK_F1, VIMS_MOD_NONE, "1" }, - { VIMS_SELECT_ID, SDLK_F2, VIMS_MOD_NONE, "2" }, - { VIMS_SELECT_ID, SDLK_F3, VIMS_MOD_NONE, "3" }, - { VIMS_SELECT_ID, SDLK_F4, VIMS_MOD_NONE, "4" }, - { VIMS_SELECT_ID, SDLK_F5, VIMS_MOD_NONE, "5" }, - { VIMS_SELECT_ID, SDLK_F6, VIMS_MOD_NONE, "6" }, - { VIMS_SELECT_ID, SDLK_F7, VIMS_MOD_NONE, "7" }, - { VIMS_SELECT_ID, SDLK_F8, VIMS_MOD_NONE, "8" }, - { VIMS_SELECT_ID, SDLK_F9, VIMS_MOD_NONE, "9" }, - { VIMS_SELECT_ID, SDLK_F10, VIMS_MOD_NONE, "10" }, - { VIMS_SELECT_ID, SDLK_F11, VIMS_MOD_NONE, "11" }, - { VIMS_SELECT_ID, SDLK_F12, VIMS_MOD_NONE, "12" }, - { VIMS_SET_PLAIN_MODE, SDLK_KP_DIVIDE, VIMS_MOD_NONE, NULL }, - { VIMS_REC_AUTO_START, SDLK_e, VIMS_MOD_CTRL, "100" }, - { VIMS_REC_STOP, SDLK_t, VIMS_MOD_CTRL, NULL }, - { VIMS_REC_START, SDLK_r, VIMS_MOD_CTRL, NULL }, - { VIMS_CHAIN_TOGGLE, SDLK_END, VIMS_MOD_NONE, NULL }, - { VIMS_CHAIN_ENTRY_SET_STATE, SDLK_END, VIMS_MOD_ALT, NULL }, - { VIMS_CHAIN_ENTRY_CLEAR, SDLK_DELETE, VIMS_MOD_NONE, NULL }, - { VIMS_FXLIST_INC, SDLK_UP, VIMS_MOD_NONE, "1" }, - { VIMS_FXLIST_DEC, SDLK_DOWN, VIMS_MOD_NONE, "1" }, - { VIMS_FXLIST_ADD, SDLK_RETURN, VIMS_MOD_NONE, NULL }, - { VIMS_SET_SAMPLE_START, SDLK_LEFTBRACKET,VIMS_MOD_NONE, NULL }, - { VIMS_SET_SAMPLE_END, SDLK_RIGHTBRACKET,VIMS_MOD_NONE, NULL }, - { VIMS_SAMPLE_SET_MARKER_START, SDLK_LEFTBRACKET,VIMS_MOD_ALT, NULL }, - { VIMS_SAMPLE_SET_MARKER_END, SDLK_RIGHTBRACKET,VIMS_MOD_ALT, NULL }, - { VIMS_SAMPLE_TOGGLE_LOOP, SDLK_KP_MULTIPLY,VIMS_MOD_NONE,NULL }, - { VIMS_SAMPLE_TOGGLE_RAND_LOOP, SDLK_KP_MULTIPLY, VIMS_MOD_SHIFT }, - { VIMS_SWITCH_SAMPLE_STREAM, SDLK_ESCAPE, VIMS_MOD_NONE, NULL }, - { VIMS_PRINT_INFO, SDLK_HOME, VIMS_MOD_NONE, NULL }, - { VIMS_OSL, SDLK_HOME, VIMS_MOD_CTRL, NULL }, - { VIMS_SAMPLE_CLEAR_MARKER, SDLK_BACKSPACE, VIMS_MOD_NONE, NULL }, - { VIMS_MACRO, SDLK_SPACE, VIMS_MOD_NONE, "2 1" }, - { VIMS_MACRO, SDLK_SPACE, VIMS_MOD_SHIFT, "1 1" }, - { VIMS_MACRO, SDLK_SPACE, VIMS_MOD_CTRL, "0 0" }, - { VIMS_MACRO, SDLK_SPACE, VIMS_MOD_CAPSLOCK, "3 1"}, - { VIMS_MACRO_SELECT, SDLK_F1, VIMS_MOD_CTRL, "0" }, - { VIMS_MACRO_SELECT, SDLK_F2, VIMS_MOD_CTRL, "1" }, - { VIMS_MACRO_SELECT, SDLK_F3, VIMS_MOD_CTRL, "2" }, - { VIMS_MACRO_SELECT, SDLK_F4, VIMS_MOD_CTRL, "3" }, - { VIMS_MACRO_SELECT, SDLK_F5, VIMS_MOD_CTRL, "4" }, - { VIMS_MACRO_SELECT, SDLK_F6, VIMS_MOD_CTRL, "5" }, - { VIMS_MACRO_SELECT, SDLK_F7, VIMS_MOD_CTRL, "6" }, - { VIMS_MACRO_SELECT, SDLK_F8, VIMS_MOD_CTRL, "7" }, - { VIMS_MACRO_SELECT, SDLK_F9, VIMS_MOD_CTRL, "8" }, - { VIMS_MACRO_SELECT, SDLK_F10, VIMS_MOD_CTRL, "9" }, - { VIMS_MACRO_SELECT, SDLK_F11, VIMS_MOD_CTRL, "10" }, - { VIMS_MACRO_SELECT, SDLK_F12, VIMS_MOD_CTRL, "11" }, - { VIMS_SAMPLE_HOLD_FRAME, SDLK_PAUSE, VIMS_MOD_NONE, "0 0 5" }, - { 0,0,0,NULL }, + { VIMS_FULLSCREEN, SDLK_f, VIMS_MOD_CTRL, NULL }, +#endif + { VIMS_CHAIN_ENTRY_DOWN, SDLK_KP_MINUS, VIMS_MOD_NONE, "1" }, + { VIMS_CHAIN_ENTRY_UP, SDLK_KP_PLUS, VIMS_MOD_NONE, "1" }, + { VIMS_CHAIN_ENTRY_CHANNEL_INC, SDLK_EQUALS, VIMS_MOD_NONE, NULL }, + { VIMS_CHAIN_ENTRY_CHANNEL_DEC, SDLK_MINUS, VIMS_MOD_NONE, NULL }, + { VIMS_CHAIN_ENTRY_SOURCE_TOGGLE,SDLK_SLASH, VIMS_MOD_NONE, NULL }, // stream/sample + { VIMS_CHAIN_ENTRY_INC_ARG, SDLK_PAGEUP, VIMS_MOD_NONE, "0 1" }, + { VIMS_CHAIN_ENTRY_INC_ARG, SDLK_KP_PERIOD, VIMS_MOD_NONE, "1 1" }, + { VIMS_CHAIN_ENTRY_INC_ARG, SDLK_PERIOD, VIMS_MOD_NONE, "2 1" }, + { VIMS_CHAIN_ENTRY_INC_ARG, SDLK_w, VIMS_MOD_NONE, "3 1" }, + { VIMS_CHAIN_ENTRY_INC_ARG, SDLK_r, VIMS_MOD_NONE, "4 1" }, + { VIMS_CHAIN_ENTRY_INC_ARG, SDLK_y, VIMS_MOD_NONE, "5 1" }, + { VIMS_CHAIN_ENTRY_INC_ARG, SDLK_i, VIMS_MOD_NONE, "6 1" }, + { VIMS_CHAIN_ENTRY_INC_ARG, SDLK_p, VIMS_MOD_NONE, "7 1" }, + { VIMS_CHAIN_ENTRY_DEC_ARG, SDLK_PAGEDOWN, VIMS_MOD_NONE, "0 -1" }, + { VIMS_CHAIN_ENTRY_DEC_ARG, SDLK_KP0, VIMS_MOD_NONE, "1 -1" }, + { VIMS_CHAIN_ENTRY_DEC_ARG, SDLK_COMMA, VIMS_MOD_NONE, "2 -1" }, + { VIMS_CHAIN_ENTRY_DEC_ARG, SDLK_q, VIMS_MOD_NONE, "3 -1" }, + { VIMS_CHAIN_ENTRY_DEC_ARG, SDLK_e, VIMS_MOD_NONE, "4 -1" }, + { VIMS_CHAIN_ENTRY_DEC_ARG, SDLK_t, VIMS_MOD_NONE, "5 -1" }, + { VIMS_CHAIN_ENTRY_DEC_ARG, SDLK_u, VIMS_MOD_NONE, "6 -1" }, + { VIMS_CHAIN_ENTRY_DEC_ARG, SDLK_o, VIMS_MOD_NONE, "7 -1" }, + { VIMS_OSD, SDLK_o, VIMS_MOD_CTRL, NULL }, + { VIMS_COPYRIGHT, SDLK_c, VIMS_MOD_CTRL, NULL }, + { VIMS_COMPOSITE, SDLK_i, VIMS_MOD_CTRL, NULL }, + { VIMS_OSD_EXTRA, SDLK_h, VIMS_MOD_CTRL, NULL }, + { VIMS_PROJ_STACK, SDLK_v, VIMS_MOD_CTRL, "1 0" }, + { VIMS_PROJ_STACK, SDLK_p, VIMS_MOD_CTRL, "0 1" }, + { VIMS_PROJ_TOGGLE, SDLK_a, VIMS_MOD_CTRL, NULL }, + { VIMS_FRONTBACK, SDLK_s, VIMS_MOD_CTRL, NULL }, + { VIMS_RENDER_DEPTH, SDLK_d, VIMS_MOD_CTRL, "2" }, + { VIMS_SELECT_BANK, SDLK_1, VIMS_MOD_NONE, "1" }, + { VIMS_SELECT_BANK, SDLK_2, VIMS_MOD_NONE, "2" }, + { VIMS_SELECT_BANK, SDLK_3, VIMS_MOD_NONE, "3" }, + { VIMS_SELECT_BANK, SDLK_4, VIMS_MOD_NONE, "4" }, + { VIMS_SELECT_BANK, SDLK_5, VIMS_MOD_NONE, "5" }, + { VIMS_SELECT_BANK, SDLK_6, VIMS_MOD_NONE, "6" }, + { VIMS_SELECT_BANK, SDLK_7, VIMS_MOD_NONE, "7" }, + { VIMS_SELECT_BANK, SDLK_8, VIMS_MOD_NONE, "8" }, + { VIMS_SELECT_BANK, SDLK_9, VIMS_MOD_NONE, "9" }, + { VIMS_SELECT_BANK, SDLK_1, VIMS_MOD_SHIFT, "1" }, + { VIMS_SELECT_BANK, SDLK_2, VIMS_MOD_SHIFT, "2" }, + { VIMS_SELECT_BANK, SDLK_3, VIMS_MOD_SHIFT, "3" }, + { VIMS_SELECT_BANK, SDLK_4, VIMS_MOD_SHIFT, "4" }, + { VIMS_SELECT_BANK, SDLK_5, VIMS_MOD_SHIFT, "5" }, + { VIMS_SELECT_BANK, SDLK_6, VIMS_MOD_SHIFT, "6" }, + { VIMS_SELECT_BANK, SDLK_7, VIMS_MOD_SHIFT, "7" }, + { VIMS_SELECT_BANK, SDLK_8, VIMS_MOD_SHIFT, "8" }, + { VIMS_SELECT_BANK, SDLK_9, VIMS_MOD_SHIFT, "9" }, + { VIMS_SELECT_ID, SDLK_F1, VIMS_MOD_NONE, "1" }, + { VIMS_SELECT_ID, SDLK_F2, VIMS_MOD_NONE, "2" }, + { VIMS_SELECT_ID, SDLK_F3, VIMS_MOD_NONE, "3" }, + { VIMS_SELECT_ID, SDLK_F4, VIMS_MOD_NONE, "4" }, + { VIMS_SELECT_ID, SDLK_F5, VIMS_MOD_NONE, "5" }, + { VIMS_SELECT_ID, SDLK_F6, VIMS_MOD_NONE, "6" }, + { VIMS_SELECT_ID, SDLK_F7, VIMS_MOD_NONE, "7" }, + { VIMS_SELECT_ID, SDLK_F8, VIMS_MOD_NONE, "8" }, + { VIMS_SELECT_ID, SDLK_F9, VIMS_MOD_NONE, "9" }, + { VIMS_SELECT_ID, SDLK_F10, VIMS_MOD_NONE, "10" }, + { VIMS_SELECT_ID, SDLK_F11, VIMS_MOD_NONE, "11" }, + { VIMS_SELECT_ID, SDLK_F12, VIMS_MOD_NONE, "12" }, + { VIMS_SET_PLAIN_MODE, SDLK_KP_DIVIDE, VIMS_MOD_NONE, NULL }, + { VIMS_REC_AUTO_START, SDLK_e, VIMS_MOD_CTRL, "100" }, + { VIMS_REC_STOP, SDLK_t, VIMS_MOD_CTRL, NULL }, + { VIMS_REC_START, SDLK_r, VIMS_MOD_CTRL, NULL }, + { VIMS_CHAIN_TOGGLE, SDLK_END, VIMS_MOD_NONE, NULL }, + { VIMS_CHAIN_ENTRY_SET_STATE, SDLK_END, VIMS_MOD_ALT, NULL }, + { VIMS_CHAIN_ENTRY_CLEAR, SDLK_DELETE, VIMS_MOD_NONE, NULL }, + { VIMS_FXLIST_INC, SDLK_UP, VIMS_MOD_NONE, "1" }, + { VIMS_FXLIST_DEC, SDLK_DOWN, VIMS_MOD_NONE, "1" }, + { VIMS_FXLIST_ADD, SDLK_RETURN, VIMS_MOD_NONE, NULL }, + { VIMS_SET_SAMPLE_START, SDLK_LEFTBRACKET,VIMS_MOD_NONE, NULL }, + { VIMS_SET_SAMPLE_END, SDLK_RIGHTBRACKET,VIMS_MOD_NONE, NULL }, + { VIMS_SAMPLE_SET_MARKER_START, SDLK_LEFTBRACKET,VIMS_MOD_ALT, NULL }, + { VIMS_SAMPLE_SET_MARKER_END, SDLK_RIGHTBRACKET,VIMS_MOD_ALT, NULL }, + { VIMS_SAMPLE_TOGGLE_LOOP, SDLK_KP_MULTIPLY,VIMS_MOD_NONE,NULL }, + { VIMS_SAMPLE_TOGGLE_RAND_LOOP, SDLK_KP_MULTIPLY, VIMS_MOD_SHIFT }, + { VIMS_SWITCH_SAMPLE_STREAM, SDLK_ESCAPE, VIMS_MOD_NONE, NULL }, + { VIMS_PRINT_INFO, SDLK_HOME, VIMS_MOD_NONE, NULL }, + { VIMS_OSL, SDLK_HOME, VIMS_MOD_CTRL, NULL }, + { VIMS_SAMPLE_CLEAR_MARKER, SDLK_BACKSPACE, VIMS_MOD_NONE, NULL }, + { VIMS_MACRO, SDLK_SPACE, VIMS_MOD_NONE, "2 1" }, + { VIMS_MACRO, SDLK_SPACE, VIMS_MOD_SHIFT, "1 1" }, + { VIMS_MACRO, SDLK_SPACE, VIMS_MOD_CTRL, "0 0" }, + { VIMS_MACRO, SDLK_SPACE, VIMS_MOD_CAPSLOCK, "3 1"}, + { VIMS_MACRO_SELECT, SDLK_F1, VIMS_MOD_CTRL, "0" }, + { VIMS_MACRO_SELECT, SDLK_F2, VIMS_MOD_CTRL, "1" }, + { VIMS_MACRO_SELECT, SDLK_F3, VIMS_MOD_CTRL, "2" }, + { VIMS_MACRO_SELECT, SDLK_F4, VIMS_MOD_CTRL, "3" }, + { VIMS_MACRO_SELECT, SDLK_F5, VIMS_MOD_CTRL, "4" }, + { VIMS_MACRO_SELECT, SDLK_F6, VIMS_MOD_CTRL, "5" }, + { VIMS_MACRO_SELECT, SDLK_F7, VIMS_MOD_CTRL, "6" }, + { VIMS_MACRO_SELECT, SDLK_F8, VIMS_MOD_CTRL, "7" }, + { VIMS_MACRO_SELECT, SDLK_F9, VIMS_MOD_CTRL, "8" }, + { VIMS_MACRO_SELECT, SDLK_F10, VIMS_MOD_CTRL, "9" }, + { VIMS_MACRO_SELECT, SDLK_F11, VIMS_MOD_CTRL, "10" }, + { VIMS_MACRO_SELECT, SDLK_F12, VIMS_MOD_CTRL, "11" }, + { VIMS_SAMPLE_HOLD_FRAME, SDLK_PAUSE, VIMS_MOD_NONE, "0 0 5" }, + { 0,0,0,NULL }, }; #endif -#define VIMS_REQUIRE_ALL_PARAMS (1<<0) /* all params needed */ -#define VIMS_DONT_PARSE_PARAMS (1<<1) /* dont parse arguments */ -#define VIMS_LONG_PARAMS (1<<3) /* long string arguments (bundle, plugin) */ -#define VIMS_ALLOW_ANY (1<<4) /* use defaults when optional arguments are not given */ +#define VIMS_REQUIRE_ALL_PARAMS (1<<0) /* all params needed */ +#define VIMS_DONT_PARSE_PARAMS (1<<1) /* dont parse arguments */ +#define VIMS_LONG_PARAMS (1<<3) /* long string arguments (bundle, plugin) */ +#define VIMS_ALLOW_ANY (1<<4) /* use defaults when optional arguments are not given */ #define FORMAT_MSG(dst,str) sprintf(dst,"%03zu%s",strlen(str),str) #define APPEND_MSG(dst,str) veejay_strncat(dst,str,strlen(str)) @@ -383,9 +383,9 @@ int __done = 0;\ veejay_msg(VEEJAY_MSG_INFO, "--------------------------------------------------------");\ for(__done = 0; __len > (__done + 80); __done += 80)\ {\ - char *__tmp = vj_strndup( str+__done, 80 );\ + char *__tmp = vj_strndup( str+__done, 80 );\ veejay_msg(VEEJAY_MSG_INFO, "[%zu][%s]",strlen(str),__tmp);\ - if(__tmp) free(__tmp);\ + if(__tmp) free(__tmp);\ }\ veejay_msg(VEEJAY_MSG_INFO, "[%s]", str + __done );\ vj_server_send(v->vjs[0], v->uc->current_link, __buf, strlen(__buf));\ @@ -396,20 +396,20 @@ veejay_msg(VEEJAY_MSG_INFO, "--------------------------------------------------- {\ int res_ = vj_server_send(v->vjs[VEEJAY_PORT_CMD], v->uc->current_link, (uint8_t*) buf, buflen);\ if(res_ <= 0) { \ - _vj_server_del_client( v->vjs[VEEJAY_PORT_CMD], v->uc->current_link); \ - _vj_server_del_client( v->vjs[VEEJAY_PORT_STA], v->uc->current_link); \ - _vj_server_del_client( v->vjs[VEEJAY_PORT_DAT], v->uc->current_link); \ - return;\ - }\ + _vj_server_del_client( v->vjs[VEEJAY_PORT_CMD], v->uc->current_link); \ + _vj_server_del_client( v->vjs[VEEJAY_PORT_STA], v->uc->current_link); \ + _vj_server_del_client( v->vjs[VEEJAY_PORT_DAT], v->uc->current_link); \ + return;\ + }\ } #define SEND_MSG(v,str)\ {\ int bf_len = strlen(str);\ if(bf_len && vj_server_send(v->vjs[VEEJAY_PORT_CMD], v->uc->current_link, (uint8_t*) str, bf_len) < 0) { \ - _vj_server_del_client( v->vjs[VEEJAY_PORT_CMD], v->uc->current_link); \ - _vj_server_del_client( v->vjs[VEEJAY_PORT_STA], v->uc->current_link); \ - _vj_server_del_client( v->vjs[VEEJAY_PORT_DAT], v->uc->current_link);} \ + _vj_server_del_client( v->vjs[VEEJAY_PORT_CMD], v->uc->current_link); \ + _vj_server_del_client( v->vjs[VEEJAY_PORT_STA], v->uc->current_link); \ + _vj_server_del_client( v->vjs[VEEJAY_PORT_DAT], v->uc->current_link);} \ } @@ -425,7 +425,7 @@ if(bf_len && vj_server_send(v->vjs[VEEJAY_PORT_CMD], v->uc->current_link, (uint8 #define SAMPLE_DEFAULTS(args) {\ \ - if(args == -1) args = sample_highest_valid_id();\ + if(args == -1) args = sample_highest_valid_id();\ if(args == 0) args = v->uc->sample_id;\ } @@ -447,16 +447,18 @@ for(__rp = 0; __rp < __rplen; __rp++) a[__rp] = 0;\ while(*c) { \ if(__z > _last_known_num_args ) break; \ switch(*c++) {\ - case 's':\ -__tmpstr = (char*)va_arg(d,char*);\ -if(__tmpstr != NULL) {\ - sprintf( b,"%s",__tmpstr);\ - }\ -__z++ ;\ - break;\ - case 'd': a[__z] = *( va_arg(d, int*)); __z++ ;\ - break; }\ - }\ + case 's':\ + if( b != NULL ) {\ + __tmpstr = (char*)va_arg(d,char*);\ + if(__tmpstr != NULL) {\ + sprintf( b,"%s",__tmpstr);\ + }\ + __z++ ;\ + }\ + break;\ + case 'd': a[__z] = *( va_arg(d, int*)); __z++ ;\ + break; }\ +}\ } @@ -475,167 +477,167 @@ else { veejay_msg(VEEJAY_MSG_DEBUG,"arg has size of 0x0");} static void init_vims_for_macro(); -static void macro_select( int slot ) +static void macro_select( int slot ) { - if( slot >= 0 && slot < MAX_MACRO_BANKS ) - { - void *oldptr = macro_bank_[ current_macro_ ]; - int old = current_macro_; + if( slot >= 0 && slot < MAX_MACRO_BANKS ) + { + void *oldptr = macro_bank_[ current_macro_ ]; + int old = current_macro_; - if(macro_bank_[slot] == NULL ) { - macro_bank_[slot] = vpn( VEVO_ANONYMOUS_PORT ); - if(!macro_bank_[slot]) { - veejay_msg(0,"Unable to get port for macro slot %d", slot ); - slot = old; - macro_bank_[old] = oldptr; - } - } - - current_macro_ = slot; - macro_port_ = macro_bank_[slot]; - } + if(macro_bank_[slot] == NULL ) { + macro_bank_[slot] = vpn( VEVO_ANONYMOUS_PORT ); + if(!macro_bank_[slot]) { + veejay_msg(0,"Unable to get port for macro slot %d", slot ); + slot = old; + macro_bank_[old] = oldptr; + } + } + + current_macro_ = slot; + macro_port_ = macro_bank_[slot]; + } } -static void display_replay_macro_(void) +static void display_replay_macro_(void) { - int i,k; - char **items; + int i,k; + char **items; - if(!macro_port_ ) - return; + if(!macro_port_ ) + return; - items = vevo_list_properties( macro_port_ ); - if(items) - { - int strokes = 0; - for(k = 0; items[k] != NULL ; k ++ ) - { - void *mb = NULL; - if( vevo_property_get( macro_port_, items[k],0,&mb ) == VEVO_NO_ERROR ) - { - macro_block_t *m = (macro_block_t*) mb; - for( i = 0; i < MAX_MACROS; i ++ ) - { - if(m->msg[i]) { - veejay_msg(VEEJAY_MSG_DEBUG,"\tVIMS [%s] at macro %s",m->msg[i],items[k]); - strokes ++; - } - } - } - free(items[k]); - } - veejay_msg(VEEJAY_MSG_INFO, "Replay %d VIMS messages in macro bank %d!", strokes,current_macro_ ); - free(items); - } + items = vevo_list_properties( macro_port_ ); + if(items) + { + int strokes = 0; + for(k = 0; items[k] != NULL ; k ++ ) + { + void *mb = NULL; + if( vevo_property_get( macro_port_, items[k],0,&mb ) == VEVO_NO_ERROR ) + { + macro_block_t *m = (macro_block_t*) mb; + for( i = 0; i < MAX_MACROS; i ++ ) + { + if(m->msg[i]) { + veejay_msg(VEEJAY_MSG_DEBUG,"\tVIMS [%s] at macro %s",m->msg[i],items[k]); + strokes ++; + } + } + } + free(items[k]); + } + veejay_msg(VEEJAY_MSG_INFO, "Replay %d VIMS messages in macro bank %d!", strokes,current_macro_ ); + free(items); + } } -static void reset_macro_(void) +static void reset_macro_(void) { - int i,k; - char **items; + int i,k; + char **items; - if(!macro_port_ ) - return; + if(!macro_port_ ) + return; - items = vevo_list_properties( macro_port_ ); - if(items) - { - int strokes = 0; - for(k = 0; items[k] != NULL ; k ++ ) - { - void *mb = NULL; - if( vevo_property_get( macro_port_, items[k],0,&mb ) == VEVO_NO_ERROR ) - { - macro_block_t *m = (macro_block_t*) mb; - for( i = 0; i < MAX_MACROS; i ++ ) - if(m->msg[i]) { free(m->msg[i]); strokes ++; } - free(m); - } - free(items[k]); - } - veejay_msg(VEEJAY_MSG_INFO, "VIMS Macro recorder cleared %d VIMS messages from bank %d", - strokes, current_macro_ ); - free(items); - } - vpf(macro_port_); - macro_bank_[ current_macro_ ] = NULL; - macro_port_ = NULL; + items = vevo_list_properties( macro_port_ ); + if(items) + { + int strokes = 0; + for(k = 0; items[k] != NULL ; k ++ ) + { + void *mb = NULL; + if( vevo_property_get( macro_port_, items[k],0,&mb ) == VEVO_NO_ERROR ) + { + macro_block_t *m = (macro_block_t*) mb; + for( i = 0; i < MAX_MACROS; i ++ ) + if(m->msg[i]) { free(m->msg[i]); strokes ++; } + free(m); + } + free(items[k]); + } + veejay_msg(VEEJAY_MSG_INFO, "VIMS Macro recorder cleared %d VIMS messages from bank %d", + strokes, current_macro_ ); + free(items); + } + vpf(macro_port_); + macro_bank_[ current_macro_ ] = NULL; + macro_port_ = NULL; } -static char *retrieve_macro_(veejay_t *v, int idx, char *key ) +static char *retrieve_macro_(veejay_t *v, int idx, char *key ) { - void *mb = NULL; - int error = vevo_property_get( macro_port_, key, 0, &mb ); - if( error == VEVO_NO_ERROR ) - { - macro_block_t *m = (macro_block_t*) mb; - if( m->msg[idx ]) - { - return m->msg[idx]; - } - } - return NULL; + void *mb = NULL; + int error = vevo_property_get( macro_port_, key, 0, &mb ); + if( error == VEVO_NO_ERROR ) + { + macro_block_t *m = (macro_block_t*) mb; + if( m->msg[idx ]) + { + return m->msg[idx]; + } + } + return NULL; } -static void store_macro_(veejay_t *v, char *str, long frame ) +static void store_macro_(veejay_t *v, char *str, long frame ) { - void *mb = NULL; - char key[16]; - int k; - int s = 0; - if( SAMPLE_PLAYING(v)) - s = sample_get_framedups( v->uc->sample_id ); - else if ( PLAIN_PLAYING(v)) - s = v->settings->simple_frame_dup; + void *mb = NULL; + char key[16]; + int k; + int s = 0; + if( SAMPLE_PLAYING(v)) + s = sample_get_framedups( v->uc->sample_id ); + else if ( PLAIN_PLAYING(v)) + s = v->settings->simple_frame_dup; - snprintf(key,16,"%08ld%02d", frame,s ); + snprintf(key,16,"%08ld%02d", frame,s ); - int error = vevo_property_get( macro_port_, key, 0, &mb ); - if( error != VEVO_NO_ERROR ) - { // first element - macro_block_t *m = vj_calloc( sizeof(macro_block_t)); - m->msg[0] = vj_strdup(str); - vevo_property_set( macro_port_, key, VEVO_ATOM_TYPE_VOIDPTR,1,&m ); - } - else - { - // following elements - macro_block_t *c = (macro_block_t*) mb; - for( k = 1; k < MAX_MACROS; k ++ ) - { - if(c->msg[k] == NULL ) - { - c->msg[k] = vj_strdup(str); - return; - } - } - veejay_msg(VEEJAY_MSG_ERROR, "VIMS Macro recorder reached buffer limit at frame %ld",frame ); - } + int error = vevo_property_get( macro_port_, key, 0, &mb ); + if( error != VEVO_NO_ERROR ) + { // first element + macro_block_t *m = vj_calloc( sizeof(macro_block_t)); + m->msg[0] = vj_strdup(str); + vevo_property_set( macro_port_, key, VEVO_ATOM_TYPE_VOIDPTR,1,&m ); + } + else + { + // following elements + macro_block_t *c = (macro_block_t*) mb; + for( k = 1; k < MAX_MACROS; k ++ ) + { + if(c->msg[k] == NULL ) + { + c->msg[k] = vj_strdup(str); + return; + } + } + veejay_msg(VEEJAY_MSG_ERROR, "VIMS Macro recorder reached buffer limit at frame %ld",frame ); + } } static hash_val_t int_bundle_hash(const void *key) { - return (hash_val_t) key; + return (hash_val_t) key; } static int int_bundle_compare(const void *key1,const void *key2) { #ifdef ARCH_X86_64 - return ((uint64_t) key1 < (uint64_t) key2 ? -1 : - ((uint64_t) key1 < (uint64_t) key2 ? 1: 0 )); + return ((uint64_t) key1 < (uint64_t) key2 ? -1 : + ((uint64_t) key1 < (uint64_t) key2 ? 1: 0 )); #else - return ((uint32_t)key1 < (uint32_t) key2 ? -1 : - ((uint32_t) key1 > (uint32_t) key2 ? +1 : 0)); + return ((uint32_t)key1 < (uint32_t) key2 ? -1 : + ((uint32_t) key1 > (uint32_t) key2 ? +1 : 0)); #endif } typedef struct { - int event_id; - int accelerator; - int modifier; - char *bundle; + int event_id; + int accelerator; + int modifier; + char *bundle; } vj_msg_bundle; @@ -643,8 +645,8 @@ typedef struct { #ifdef HAVE_SDL vj_keyboard_event *new_keyboard_event( int symbol, int modifier, const char *value, int event_id ); vj_keyboard_event *get_keyboard_event( int id ); -int keyboard_event_exists(int id); -int del_keyboard_event(int id ); +int keyboard_event_exists(int id); +int del_keyboard_event(int id ); char *find_keyboard_default(int id); #endif void vj_event_print_plain_info(void *ptr, int x); @@ -660,7 +662,7 @@ int vj_event_bundle_del( int event_id ); vj_msg_bundle *vj_event_bundle_new(char *bundle_msg, int event_id); void vj_event_trigger_function(void *ptr, vj_event f, int max_args, const char format[], ...); void vj_event_parse_bundle(veejay_t *v, char *msg ); -int vj_has_video(veejay_t *v, editlist *el); +int vj_has_video(veejay_t *v, editlist *el); void vj_event_fire_net_event(veejay_t *v, int net_id, char *str_arg, int *args, int arglen, int type); void vj_event_commit_bundle( veejay_t *v, int key_num, int key_mod); #ifdef HAVE_SDL @@ -672,1101 +674,1101 @@ void vj_event_unregister_keyb_event(int key_id, int key_mod); #ifdef HAVE_XML2 void vj_event_format_xml_event( xmlNodePtr node, int event_id ); -//void vj_event_format_xml_stream( xmlNodePtr node, int stream_id ); +//void vj_event_format_xml_stream( xmlNodePtr node, int stream_id ); #endif -int vj_has_video(veejay_t *v,editlist *el) +int vj_has_video(veejay_t *v,editlist *el) { - if( el->is_empty ) - return 0; - if( !el->has_video) - return 0; - if( el->video_frames > 0 ) - return 1; - return 0; + if( el->is_empty ) + return 0; + if( !el->has_video) + return 0; + if( el->video_frames > 0 ) + return 1; + return 0; } int vj_event_bundle_update( vj_msg_bundle *bundle, int bundle_id ) { - if(bundle) { - hnode_t *n = hnode_create(bundle); - if(!n) return 0; + if(bundle) { + hnode_t *n = hnode_create(bundle); + if(!n) return 0; #ifdef ARCH_X86_64 - uint64_t tid = (uint64_t) bundle_id; + uint64_t tid = (uint64_t) bundle_id; #else - uint32_t tid = (uint32_t) bundle_id; + uint32_t tid = (uint32_t) bundle_id; #endif - hnode_put( n, (void*) tid); - hnode_destroy(n); - return 1; - } - return 0; + hnode_put( n, (void*) tid); + hnode_destroy(n); + return 1; + } + return 0; } -static void constrain_sample( veejay_t *v,int n ) +static void constrain_sample( veejay_t *v,int n ) { - vj_font_set_dict(v->font, sample_get_dict(n) ); - // v->current_edit_list->video_fps, - vj_font_prepare( v->font, sample_get_startFrame(n), - sample_get_endFrame(n) ); + vj_font_set_dict(v->font, sample_get_dict(n) ); + // v->current_edit_list->video_fps, + vj_font_prepare( v->font, sample_get_startFrame(n), + sample_get_endFrame(n) ); } -static void constrain_stream( veejay_t *v, int n, long hi ) +static void constrain_stream( veejay_t *v, int n, long hi ) { - vj_font_set_dict(v->font, vj_tag_get_dict(n) ); - // v->current_edit_list->video_fps, - vj_font_prepare( v->font, 0, vj_tag_get_n_frames(n) ); + vj_font_set_dict(v->font, vj_tag_get_dict(n) ); + // v->current_edit_list->video_fps, + vj_font_prepare( v->font, 0, vj_tag_get_n_frames(n) ); } vj_msg_bundle *vj_event_bundle_get(int event_id) { - vj_msg_bundle *m; + vj_msg_bundle *m; #ifdef ARCH_X86_64 - uint64_t tid = (uint64_t) event_id; + uint64_t tid = (uint64_t) event_id; #else - uint32_t tid = (uint32_t) event_id; + uint32_t tid = (uint32_t) event_id; #endif - hnode_t *n = hash_lookup(BundleHash, (void*) tid); - if(n) - { - m = (vj_msg_bundle*) hnode_get(n); - if(m) - { - return m; - } - } - return NULL; + hnode_t *n = hash_lookup(BundleHash, (void*) tid); + if(n) + { + m = (vj_msg_bundle*) hnode_get(n); + if(m) + { + return m; + } + } + return NULL; } #ifdef HAVE_SDL -int del_keyboard_event(int id ) +int del_keyboard_event(int id ) { - hnode_t *node; - vj_keyboard_event *ev = get_keyboard_event( id ); + hnode_t *node; + vj_keyboard_event *ev = get_keyboard_event( id ); - keyboard_event_map_[ id ] = NULL; + keyboard_event_map_[ id ] = NULL; #ifdef ARCH_X86_64 - uint64_t tid = (uint64_t) id; + uint64_t tid = (uint64_t) id; #else - uint32_t tid = (uint32_t) id; + uint32_t tid = (uint32_t) id; #endif - if(ev == NULL) - return 0; - node = hash_lookup( keyboard_events, (void*) tid ); - if(!node) - return 0; - if(ev->arguments) - free(ev->arguments); - if(ev->vims ) - free(ev->vims ); - hash_delete( keyboard_events, node ); + if(ev == NULL) + return 0; + node = hash_lookup( keyboard_events, (void*) tid ); + if(!node) + return 0; + if(ev->arguments) + free(ev->arguments); + if(ev->vims ) + free(ev->vims ); + hash_delete( keyboard_events, node ); - return 1; + return 1; } -vj_keyboard_event *get_keyboard_event(int id ) +vj_keyboard_event *get_keyboard_event(int id ) { #ifdef ARCH_X86_64 - uint64_t tid = (uint64_t) id; + uint64_t tid = (uint64_t) id; #else - uint32_t tid = (uint32_t) id; + uint32_t tid = (uint32_t) id; #endif - hnode_t *node = hash_lookup( keyboard_events, (void*) tid ); - if(node) - return ((vj_keyboard_event*) hnode_get( node )); - return NULL; + hnode_t *node = hash_lookup( keyboard_events, (void*) tid ); + if(node) + return ((vj_keyboard_event*) hnode_get( node )); + return NULL; } -int keyboard_event_exists(int id) +int keyboard_event_exists(int id) { #ifdef ARCH_X86_64 - uint64_t tid = (uint64_t) id; + uint64_t tid = (uint64_t) id; #else - uint32_t tid = (uint32_t) id; + uint32_t tid = (uint32_t) id; #endif - hnode_t *node = hash_lookup( keyboard_events, (void*) tid ); - if(node) - if( hnode_get(node) != NULL ) - return 1; - return 0; + hnode_t *node = hash_lookup( keyboard_events, (void*) tid ); + if(node) + if( hnode_get(node) != NULL ) + return 1; + return 0; } static void destroy_keyboard_event( vj_keyboard_event *ev ) { - if( ev ) { - if( ev->vims ) - free( ev->vims ); + if( ev ) { + if( ev->vims ) + free( ev->vims ); - if( ev->arguments ) - free( ev->arguments ); + if( ev->arguments ) + free( ev->arguments ); - free(ev); - } + free(ev); + } } vj_keyboard_event *new_keyboard_event( - int symbol, int modifier, const char *value, int event_id ) + int symbol, int modifier, const char *value, int event_id ) { -// int vims_id = event_id; -/* if(vims_id == 0) - { - if(!vj_event_bundle_exists( event_id )) - { - veejay_msg(VEEJAY_MSG_ERROR, - "VIMS %d does not exist", event_id); - return NULL; - } - }*/ - +// int vims_id = event_id; +/* if(vims_id == 0) + { + if(!vj_event_bundle_exists( event_id )) + { + veejay_msg(VEEJAY_MSG_ERROR, + "VIMS %d does not exist", event_id); + return NULL; + } + }*/ + - if( event_id <= 0 ) - { - veejay_msg(VEEJAY_MSG_ERROR, - "VIMS event %d does not exist", event_id ); - return NULL; - } + if( event_id <= 0 ) + { + veejay_msg(VEEJAY_MSG_ERROR, + "VIMS event %d does not exist", event_id ); + return NULL; + } - vj_keyboard_event *ev = (vj_keyboard_event*)vj_calloc(sizeof(vj_keyboard_event)); - if(!ev) - return NULL; - ev->vims = (vj_events*) vj_calloc(sizeof(vj_events)); - if(!ev->vims) - return NULL; + vj_keyboard_event *ev = (vj_keyboard_event*)vj_calloc(sizeof(vj_keyboard_event)); + if(!ev) + return NULL; + ev->vims = (vj_events*) vj_calloc(sizeof(vj_events)); + if(!ev->vims) + return NULL; - ev->event_id = event_id; + ev->event_id = event_id; - keyboard_event_map_ [ (modifier * SDLK_LAST) + symbol ] = ev; + keyboard_event_map_ [ (modifier * SDLK_LAST) + symbol ] = ev; - if(value) - { - ev->arg_len = strlen(value); - ev->arguments = vj_strndup( value, ev->arg_len ); - } - else - { - if(event_id < VIMS_BUNDLE_START || event_id > VIMS_BUNDLE_END) - { - ev->arguments = find_keyboard_default( event_id ); - if(ev->arguments) - ev->arg_len = strlen(ev->arguments); - else - { - ev->arguments = NULL; - ev->arg_len = 0; - } - } - } + if(value) + { + ev->arg_len = strlen(value); + ev->arguments = vj_strndup( value, ev->arg_len ); + } + else + { + if(event_id < VIMS_BUNDLE_START || event_id > VIMS_BUNDLE_END) + { + ev->arguments = find_keyboard_default( event_id ); + if(ev->arguments) + ev->arg_len = strlen(ev->arguments); + else + { + ev->arguments = NULL; + ev->arg_len = 0; + } + } + } - if( vj_event_exists( event_id ) ) - { - ev->vims->act = (vj_event) vj_event_vevo_get_event_function( event_id ); - ev->vims->list_id = event_id; - } - else if ( vj_event_bundle_exists( event_id ) ) - { - ev->vims->act = vj_event_do_bundled_msg; - ev->vims->list_id = event_id; - } - ev->key_symbol = symbol; - ev->key_mod = modifier; + if( vj_event_exists( event_id ) ) + { + ev->vims->act = (vj_event) vj_event_vevo_get_event_function( event_id ); + ev->vims->list_id = event_id; + } + else if ( vj_event_bundle_exists( event_id ) ) + { + ev->vims->act = vj_event_do_bundled_msg; + ev->vims->list_id = event_id; + } + ev->key_symbol = symbol; + ev->key_mod = modifier; - return ev; + return ev; } #endif int vj_event_bundle_exists(int event_id) { #ifdef ARCH_X86_64 - uint64_t tid = (uint64_t) event_id; + uint64_t tid = (uint64_t) event_id; #else - uint32_t tid = (uint32_t) event_id; + uint32_t tid = (uint32_t) event_id; #endif - hnode_t *n = hash_lookup( BundleHash,(void*) tid ); - if(!n) - return 0; - return ( vj_event_bundle_get(event_id) == NULL ? 0 : 1); + hnode_t *n = hash_lookup( BundleHash,(void*) tid ); + if(!n) + return 0; + return ( vj_event_bundle_get(event_id) == NULL ? 0 : 1); } int vj_event_suggest_bundle_id(void) { - int i; - for(i=VIMS_BUNDLE_START ; i < VIMS_BUNDLE_END; i++) - { - if ( vj_event_bundle_exists(i ) == 0 ) return i; - } + int i; + for(i=VIMS_BUNDLE_START ; i < VIMS_BUNDLE_END; i++) + { + if ( vj_event_bundle_exists(i ) == 0 ) return i; + } - return -1; + return -1; } int vj_event_bundle_store( vj_msg_bundle *m ) { - hnode_t *n; - if(!m) return 0; - n = hnode_create(m); - if(!n) return 0; + hnode_t *n; + if(!m) return 0; + n = hnode_create(m); + if(!n) return 0; #ifdef ARCH_X86_64 - uint64_t tid = (uint64_t) m->event_id; + uint64_t tid = (uint64_t) m->event_id; #else - uint32_t tid = (uint32_t) m->event_id; + uint32_t tid = (uint32_t) m->event_id; #endif - if(!vj_event_bundle_exists(m->event_id)) - { - hash_insert( BundleHash, n, (void*) tid); - } - else - { - hnode_put( n, (void*) tid); - hnode_destroy( n ); - } + if(!vj_event_bundle_exists(m->event_id)) + { + hash_insert( BundleHash, n, (void*) tid); + } + else + { + hnode_put( n, (void*) tid); + hnode_destroy( n ); + } - // add bundle to VIMS list - veejay_msg(VEEJAY_MSG_DEBUG, - "Added Bundle VIMS %d to net_list", m->event_id ); + // add bundle to VIMS list + veejay_msg(VEEJAY_MSG_DEBUG, + "Added Bundle VIMS %d to net_list", m->event_id ); - net_list[ m->event_id ].list_id = m->event_id; - net_list[ m->event_id ].act = vj_event_none; - return 1; + net_list[ m->event_id ].list_id = m->event_id; + net_list[ m->event_id ].act = vj_event_none; + return 1; } int vj_event_bundle_del( int event_id ) { - hnode_t *n; - vj_msg_bundle *m = vj_event_bundle_get( event_id ); - if(!m) return -1; + hnode_t *n; + vj_msg_bundle *m = vj_event_bundle_get( event_id ); + if(!m) return -1; #ifdef ARCH_X86_64 - uint64_t tid = (uint64_t) event_id; + uint64_t tid = (uint64_t) event_id; #else - uint32_t tid = (uint32_t) event_id; + uint32_t tid = (uint32_t) event_id; #endif - n = hash_lookup( BundleHash, (void*) tid ); - if(!n) - return -1; + n = hash_lookup( BundleHash, (void*) tid ); + if(!n) + return -1; - net_list[ m->event_id ].list_id = 0; - net_list[ m->event_id ].act = vj_event_none; + net_list[ m->event_id ].list_id = 0; + net_list[ m->event_id ].act = vj_event_none; #ifdef HAVE_SDL - vj_event_unregister_keyb_event( m->accelerator, m->modifier ); -#endif - if( m->bundle ) - free(m->bundle); - if(m) - free(m); - m = NULL; + vj_event_unregister_keyb_event( m->accelerator, m->modifier ); +#endif + if( m->bundle ) + free(m->bundle); + if(m) + free(m); + m = NULL; - hash_delete( BundleHash, n ); - return 0; + hash_delete( BundleHash, n ); + return 0; } vj_msg_bundle *vj_event_bundle_new(char *bundle_msg, int event_id) { - vj_msg_bundle *m; - int len = 0; - if(!bundle_msg || strlen(bundle_msg) < 1) - { - veejay_msg(VEEJAY_MSG_ERROR, "Doesn't make sense to store empty bundles in memory"); - return NULL; - } - len = strlen(bundle_msg); - m = (vj_msg_bundle*) vj_calloc(sizeof(vj_msg_bundle)); - if(!m) - { - veejay_msg(VEEJAY_MSG_ERROR, "Error allocating memory for bundled message"); - return NULL; - } - m->bundle = (char*) vj_calloc(sizeof(char) * len+1); - m->accelerator = 0; - m->modifier = 0; - if(!m->bundle) - { - veejay_msg(VEEJAY_MSG_ERROR, "Error allocating memory for bundled message context"); - return NULL; - } - veejay_strncpy(m->bundle, bundle_msg, len); - - m->event_id = event_id; + vj_msg_bundle *m; + int len = 0; + if(!bundle_msg || strlen(bundle_msg) < 1) + { + veejay_msg(VEEJAY_MSG_ERROR, "Doesn't make sense to store empty bundles in memory"); + return NULL; + } + len = strlen(bundle_msg); + m = (vj_msg_bundle*) vj_calloc(sizeof(vj_msg_bundle)); + if(!m) + { + veejay_msg(VEEJAY_MSG_ERROR, "Error allocating memory for bundled message"); + return NULL; + } + m->bundle = (char*) vj_calloc(sizeof(char) * len+1); + m->accelerator = 0; + m->modifier = 0; + if(!m->bundle) + { + veejay_msg(VEEJAY_MSG_ERROR, "Error allocating memory for bundled message context"); + return NULL; + } + veejay_strncpy(m->bundle, bundle_msg, len); + + m->event_id = event_id; - veejay_msg(VEEJAY_MSG_DEBUG, - "New VIMS Bundle %d [%s] created", - event_id, m->bundle ); + veejay_msg(VEEJAY_MSG_DEBUG, + "New VIMS Bundle %d [%s] created", + event_id, m->bundle ); - return m; + return m; } void vj_event_trigger_function(void *ptr, vj_event f, int max_args, const char *format, ...) { - va_list ap; - va_start(ap,format); - f(ptr, format, ap); - va_end(ap); + va_list ap; + va_start(ap,format); + f(ptr, format, ap); + va_end(ap); } /* parse a keyframe packet */ -static void vj_event_parse_kf( veejay_t *v, char *msg, int len ) +static void vj_event_parse_kf( veejay_t *v, char *msg, int len ) { - if(SAMPLE_PLAYING(v)) - { - if(sample_chain_set_kfs( v->uc->sample_id, len, msg )==-1) - veejay_msg(VEEJAY_MSG_ERROR,"(VIMS) Invalid key frame blob [%s]",msg); - } - else if (STREAM_PLAYING(v)) - { - if(vj_tag_chain_set_kfs(v->uc->sample_id,len,(unsigned char*)msg ) == -1) - veejay_msg(VEEJAY_MSG_ERROR, "(VIMS) Invalid key frame blob [%s]",msg); - } - else - { - veejay_msg(VEEJAY_MSG_ERROR, "(VIMS) Cannot store key frame in this playback mode"); - } + if(SAMPLE_PLAYING(v)) + { + if(sample_chain_set_kfs( v->uc->sample_id, len, msg )==-1) + veejay_msg(VEEJAY_MSG_ERROR,"(VIMS) Invalid key frame blob [%s]",msg); + } + else if (STREAM_PLAYING(v)) + { + if(vj_tag_chain_set_kfs(v->uc->sample_id,len,(unsigned char*)msg ) == -1) + veejay_msg(VEEJAY_MSG_ERROR, "(VIMS) Invalid key frame blob [%s]",msg); + } + else + { + veejay_msg(VEEJAY_MSG_ERROR, "(VIMS) Cannot store key frame in this playback mode"); + } } /* parse a message received from network */ void vj_event_parse_bundle(veejay_t *v, char *msg ) { - char atomic_msg[256]; - int num_msg = 0; - int offset = 3; - int i = 0; - - if ( msg[offset] == ':' ) - { - int j = 0; - offset += 1; /* skip ':' */ - if( sscanf(msg+offset, "%03d", &num_msg )<= 0 ) - { - veejay_msg(VEEJAY_MSG_ERROR,"(VIMS) Invalid number of messages. Skipping message [%s] ",msg); - } - if ( num_msg <= 0 ) - { - veejay_msg(VEEJAY_MSG_ERROR,"(VIMS) Invalid number of message given to execute. Skipping message [%s]",msg); - return; - } + char atomic_msg[256]; + int num_msg = 0; + int offset = 3; + int i = 0; + + if ( msg[offset] == ':' ) + { + int j = 0; + offset += 1; /* skip ':' */ + if( sscanf(msg+offset, "%03d", &num_msg )<= 0 ) + { + veejay_msg(VEEJAY_MSG_ERROR,"(VIMS) Invalid number of messages. Skipping message [%s] ",msg); + } + if ( num_msg <= 0 ) + { + veejay_msg(VEEJAY_MSG_ERROR,"(VIMS) Invalid number of message given to execute. Skipping message [%s]",msg); + return; + } - offset += 3; + offset += 3; - if ( msg[offset] != '{' ) - { - veejay_msg(VEEJAY_MSG_ERROR, "(VIMS) 'al' expected. Skipping message [%s]",msg); - return; - } + if ( msg[offset] != '{' ) + { + veejay_msg(VEEJAY_MSG_ERROR, "(VIMS) 'al' expected. Skipping message [%s]",msg); + return; + } - offset += 1; /* skip # */ + offset += 1; /* skip # */ - for( i = 1; i <= num_msg ; i ++ ) - { - int found_end_of_msg = 0; - int total_msg_len = strlen(msg); + for( i = 1; i <= num_msg ; i ++ ) + { + int found_end_of_msg = 0; + int total_msg_len = strlen(msg); - veejay_memset( atomic_msg, 0 , sizeof(atomic_msg) ); /* clear */ + veejay_memset( atomic_msg, 0 , sizeof(atomic_msg) ); /* clear */ - while( (offset+j) < total_msg_len) - { - if(msg[offset+j] == '}') - { - return; /* dont care about semicolon here */ - } - else - if(msg[offset+j] == ';') - { - found_end_of_msg = offset+j+1; - veejay_strncpy(atomic_msg, msg+offset, (found_end_of_msg-offset)); - atomic_msg[ (found_end_of_msg-offset) ] ='\0'; - offset += j + 1; - j = 0; - vj_event_parse_msg( v, atomic_msg, strlen(atomic_msg) ); - } - j++; - } - } - } + while( (offset+j) < total_msg_len) + { + if(msg[offset+j] == '}') + { + return; /* dont care about semicolon here */ + } + else + if(msg[offset+j] == ';') + { + found_end_of_msg = offset+j+1; + veejay_strncpy(atomic_msg, msg+offset, (found_end_of_msg-offset)); + atomic_msg[ (found_end_of_msg-offset) ] ='\0'; + offset += j + 1; + j = 0; + vj_event_parse_msg( v, atomic_msg, strlen(atomic_msg) ); + } + j++; + } + } + } } void vj_event_dump() { - vj_event_vevo_dump(); - - vj_osc_dump(); + vj_event_vevo_dump(); + + vj_osc_dump(); } typedef struct { - void *value; + void *value; } vims_arg_t; -static void dump_arguments_(int net_id,int arglen, int np, int prefixed, char *fmt) +static void dump_arguments_(int net_id,int arglen, int np, int prefixed, char *fmt) { - int i; - char *name = vj_event_vevo_get_event_name( net_id ); - veejay_msg(VEEJAY_MSG_ERROR, "VIMS '%03d' : '%s'", net_id, name ); - if(np < arglen) { - veejay_msg(VEEJAY_MSG_ERROR, "\tOnly %d arguments of %d seen",arglen,np); - } else { - veejay_msg(VEEJAY_MSG_ERROR, "\tToo many parameters! %d of %d",np,arglen); - } - veejay_msg(VEEJAY_MSG_ERROR, "\tFormat is '%s'", fmt ); + int i; + char *name = vj_event_vevo_get_event_name( net_id ); + veejay_msg(VEEJAY_MSG_ERROR, "VIMS '%03d' : '%s'", net_id, name ); + if(np < arglen) { + veejay_msg(VEEJAY_MSG_ERROR, "\tOnly %d arguments of %d seen",arglen,np); + } else { + veejay_msg(VEEJAY_MSG_ERROR, "\tToo many parameters! %d of %d",np,arglen); + } + veejay_msg(VEEJAY_MSG_ERROR, "\tFormat is '%s'", fmt ); - for( i = prefixed; i < np; i ++ ) - { - char *help = vj_event_vevo_help_vims( net_id, i ); - veejay_msg(VEEJAY_MSG_ERROR,"\t\tArgument %d : %s", - i,help ); - if(help) free(help); - } + for( i = prefixed; i < np; i ++ ) + { + char *help = vj_event_vevo_help_vims( net_id, i ); + veejay_msg(VEEJAY_MSG_ERROR,"\t\tArgument %d : %s", + i,help ); + if(help) free(help); + } } -static int vvm_[600]; +static int vvm_[600]; -static void init_vims_for_macro() +static void init_vims_for_macro() { - veejay_memset( vvm_,1, sizeof(vvm_)); - vvm_[VIMS_MACRO] = 0; - vvm_[VIMS_TRACK_LIST] = 0; - vvm_[VIMS_RGB24_IMAGE] = 0; - vvm_[VIMS_SET_SAMPLE_START] =0; - vvm_[VIMS_SET_SAMPLE_END] = 0; - vvm_[VIMS_SAMPLE_NEW] = 0; - vvm_[VIMS_SAMPLE_DEL] = 0; - vvm_[VIMS_STREAM_DELETE] = 0; - vvm_[VIMS_SAMPLE_LOAD_SAMPLELIST]=0; - vvm_[VIMS_SAMPLE_SAVE_SAMPLELIST]=0; - vvm_[VIMS_SAMPLE_DEL_ALL] = 0; - vvm_[VIMS_SAMPLE_COPY] = 0; - vvm_[VIMS_SAMPLE_UPDATE] = 0; - vvm_[VIMS_SAMPLE_KF_GET]=0; - vvm_[VIMS_SAMPLE_KF_RESET]=0; - vvm_[VIMS_SAMPLE_KF_STATUS]=0; - vvm_[VIMS_STREAM_NEW_V4L] = 0; - vvm_[VIMS_STREAM_NEW_DV1394] = 0; - vvm_[VIMS_STREAM_NEW_COLOR] = 0; - vvm_[VIMS_STREAM_NEW_Y4M] = 0; - vvm_[VIMS_STREAM_NEW_UNICAST]=0; - vvm_[VIMS_STREAM_NEW_MCAST]=0; - vvm_[VIMS_STREAM_NEW_PICTURE]=0; - vvm_[VIMS_STREAM_SET_DESCRIPTION]=0; - vvm_[VIMS_SAMPLE_SET_DESCRIPTION]=0; - vvm_[VIMS_STREAM_SET_LENGTH]=0; - vvm_[VIMS_SEQUENCE_STATUS]=0; - vvm_[VIMS_SEQUENCE_ADD]=0; - vvm_[VIMS_SEQUENCE_DEL]=0; - vvm_[VIMS_CHAIN_LIST]=0; - vvm_[VIMS_OUTPUT_Y4M_START]=0; - vvm_[VIMS_OUTPUT_Y4M_STOP]=0; - vvm_[VIMS_GET_FRAME]=0; - vvm_[VIMS_VLOOPBACK_START]=0; - vvm_[VIMS_VLOOPBACK_STOP]=0; - vvm_[VIMS_VIDEO_MCAST_START]=0; - vvm_[VIMS_VIDEO_MCAST_STOP]=0; - vvm_[VIMS_SYNC_CORRECTION]=0; - vvm_[VIMS_NO_CACHING]=0; - vvm_[VIMS_SCREENSHOT]=0; - vvm_[VIMS_RGB_PARAMETER_TYPE]=0; - vvm_[VIMS_RESIZE_SDL_SCREEN] =0; - vvm_[VIMS_DEBUG_LEVEL]=0; - vvm_[VIMS_SAMPLE_MODE]=0; - vvm_[VIMS_BEZERK] = 0; - vvm_[VIMS_AUDIO_ENABLE]=0; - vvm_[VIMS_AUDIO_DISABLE]=0; - vvm_[VIMS_RECORD_DATAFORMAT]=0; - vvm_[VIMS_INIT_GUI_SCREEN]=0; - vvm_[VIMS_SUSPEND]=0; - vvm_[VIMS_VIEWPORT]=0; - vvm_[VIMS_PREVIEW_BW]=0; - vvm_[VIMS_FRONTBACK]=0; - vvm_[VIMS_RECVIEWPORT]=0; - vvm_[VIMS_PROJECTION] = 0; + veejay_memset( vvm_,1, sizeof(vvm_)); + vvm_[VIMS_MACRO] = 0; + vvm_[VIMS_TRACK_LIST] = 0; + vvm_[VIMS_RGB24_IMAGE] = 0; + vvm_[VIMS_SET_SAMPLE_START] =0; + vvm_[VIMS_SET_SAMPLE_END] = 0; + vvm_[VIMS_SAMPLE_NEW] = 0; + vvm_[VIMS_SAMPLE_DEL] = 0; + vvm_[VIMS_STREAM_DELETE] = 0; + vvm_[VIMS_SAMPLE_LOAD_SAMPLELIST]=0; + vvm_[VIMS_SAMPLE_SAVE_SAMPLELIST]=0; + vvm_[VIMS_SAMPLE_DEL_ALL] = 0; + vvm_[VIMS_SAMPLE_COPY] = 0; + vvm_[VIMS_SAMPLE_UPDATE] = 0; + vvm_[VIMS_SAMPLE_KF_GET]=0; + vvm_[VIMS_SAMPLE_KF_RESET]=0; + vvm_[VIMS_SAMPLE_KF_STATUS]=0; + vvm_[VIMS_STREAM_NEW_V4L] = 0; + vvm_[VIMS_STREAM_NEW_DV1394] = 0; + vvm_[VIMS_STREAM_NEW_COLOR] = 0; + vvm_[VIMS_STREAM_NEW_Y4M] = 0; + vvm_[VIMS_STREAM_NEW_UNICAST]=0; + vvm_[VIMS_STREAM_NEW_MCAST]=0; + vvm_[VIMS_STREAM_NEW_PICTURE]=0; + vvm_[VIMS_STREAM_SET_DESCRIPTION]=0; + vvm_[VIMS_SAMPLE_SET_DESCRIPTION]=0; + vvm_[VIMS_STREAM_SET_LENGTH]=0; + vvm_[VIMS_SEQUENCE_STATUS]=0; + vvm_[VIMS_SEQUENCE_ADD]=0; + vvm_[VIMS_SEQUENCE_DEL]=0; + vvm_[VIMS_CHAIN_LIST]=0; + vvm_[VIMS_OUTPUT_Y4M_START]=0; + vvm_[VIMS_OUTPUT_Y4M_STOP]=0; + vvm_[VIMS_GET_FRAME]=0; + vvm_[VIMS_VLOOPBACK_START]=0; + vvm_[VIMS_VLOOPBACK_STOP]=0; + vvm_[VIMS_VIDEO_MCAST_START]=0; + vvm_[VIMS_VIDEO_MCAST_STOP]=0; + vvm_[VIMS_SYNC_CORRECTION]=0; + vvm_[VIMS_NO_CACHING]=0; + vvm_[VIMS_SCREENSHOT]=0; + vvm_[VIMS_RGB_PARAMETER_TYPE]=0; + vvm_[VIMS_RESIZE_SDL_SCREEN] =0; + vvm_[VIMS_DEBUG_LEVEL]=0; + vvm_[VIMS_SAMPLE_MODE]=0; + vvm_[VIMS_BEZERK] = 0; + vvm_[VIMS_AUDIO_ENABLE]=0; + vvm_[VIMS_AUDIO_DISABLE]=0; + vvm_[VIMS_RECORD_DATAFORMAT]=0; + vvm_[VIMS_INIT_GUI_SCREEN]=0; + vvm_[VIMS_SUSPEND]=0; + vvm_[VIMS_VIEWPORT]=0; + vvm_[VIMS_PREVIEW_BW]=0; + vvm_[VIMS_FRONTBACK]=0; + vvm_[VIMS_RECVIEWPORT]=0; + vvm_[VIMS_PROJECTION] = 0; } -static int valid_for_macro(int net_id) +static int valid_for_macro(int net_id) { - if(net_id > 400 || net_id >= 388 || (net_id >= 80 && net_id <= 86) || (net_id >= 50 && net_id <= 59)) - return 0; + if(net_id > 400 || net_id >= 388 || (net_id >= 80 && net_id <= 86) || (net_id >= 50 && net_id <= 59)) + return 0; - return vvm_[net_id]; + return vvm_[net_id]; } -static void dump_argument_( int net_id , int i ) +static void dump_argument_( int net_id , int i ) { - char *help = vj_event_vevo_help_vims( net_id, i ); - veejay_msg(VEEJAY_MSG_ERROR,"\t\tArgument %d : %s", - i,help ); - if(help) free(help); + char *help = vj_event_vevo_help_vims( net_id, i ); + veejay_msg(VEEJAY_MSG_ERROR,"\t\tArgument %d : %s", + i,help ); + if(help) free(help); } -static int vj_event_verify_args( int *fx, int net_id , int arglen, int np, int prefixed, char *fmt ) +static int vj_event_verify_args( int *fx, int net_id , int arglen, int np, int prefixed, char *fmt ) { - if(net_id != VIMS_CHAIN_ENTRY_SET_PRESET ) - { - if( arglen != np ) - { - dump_arguments_(net_id,arglen, np, prefixed, fmt); - return 0; - } - } - else - { - if( arglen < 3 ) - { - dump_arguments_(net_id, arglen,np,prefixed, fmt ); - return 0; - } - int fx_id = fx[2]; - if( fx_id <= 0 ) - { - veejay_msg(VEEJAY_MSG_ERROR, "Invalid Effect ID" ); - return 0; - } - } - return 1; + if(net_id != VIMS_CHAIN_ENTRY_SET_PRESET ) + { + if( arglen != np ) + { + dump_arguments_(net_id,arglen, np, prefixed, fmt); + return 0; + } + } + else + { + if( arglen < 3 ) + { + dump_arguments_(net_id, arglen,np,prefixed, fmt ); + return 0; + } + int fx_id = fx[2]; + if( fx_id <= 0 ) + { + veejay_msg(VEEJAY_MSG_ERROR, "Invalid Effect ID" ); + return 0; + } + } + return 1; } -void vj_event_fire_net_event(veejay_t *v, int net_id, char *str_arg, int *args, int arglen, int prefixed) +void vj_event_fire_net_event(veejay_t *v, int net_id, char *str_arg, int *args, int arglen, int prefixed) { - int np = vj_event_vevo_get_num_args(net_id); - char *fmt = vj_event_vevo_get_event_format( net_id ); - int flags = vj_event_vevo_get_flags( net_id ); - int fmt_offset = 1; - vims_arg_t vims_arguments[16]; + int np = vj_event_vevo_get_num_args(net_id); + char *fmt = vj_event_vevo_get_event_format( net_id ); + int flags = vj_event_vevo_get_flags( net_id ); + int fmt_offset = 1; + vims_arg_t vims_arguments[16]; - if(!vj_event_verify_args(args , net_id, arglen, np, prefixed, fmt )) - { - if(fmt) free(fmt); - return; - } + if(!vj_event_verify_args(args , net_id, arglen, np, prefixed, fmt )) + { + if(fmt) free(fmt); + return; + } - if( np == 0 ) - { - vj_event_vevo_inline_fire_default( (void*) v, net_id, fmt ); - if(fmt) free(fmt); - return; - } - - int i=0; - while( i < arglen ) - { - if( fmt[fmt_offset] == 'd' ) - { - vims_arguments[i].value = (void*) &(args[i]); - } - else if( fmt[fmt_offset] == 's' ) - { - if(str_arg == NULL ) - { - veejay_msg(VEEJAY_MSG_ERROR, "Argument %d must be a string! (VIMS %03d)", i,net_id ); - if(fmt) free(fmt); - return; - } - vims_arguments[i].value = (void*) vj_strdup( str_arg ); - if(flags & VIMS_REQUIRE_ALL_PARAMS ) - { - if( strlen((char*)vims_arguments[i].value) <= 0 ) - { - veejay_msg(VEEJAY_MSG_ERROR, "Argument %d is not a string!",i ); - if(fmt)free(fmt); - return; - } - } - } - fmt_offset += 3; - i++; - } - _last_known_num_args = arglen; + if( np == 0 ) + { + vj_event_vevo_inline_fire_default( (void*) v, net_id, fmt ); + if(fmt) free(fmt); + return; + } + + int i=0; + while( i < arglen ) + { + if( fmt[fmt_offset] == 'd' ) + { + vims_arguments[i].value = (void*) &(args[i]); + } + else if( fmt[fmt_offset] == 's' ) + { + if(str_arg == NULL ) + { + veejay_msg(VEEJAY_MSG_ERROR, "Argument %d must be a string! (VIMS %03d)", i,net_id ); + if(fmt) free(fmt); + return; + } + vims_arguments[i].value = (void*) vj_strdup( str_arg ); + if(flags & VIMS_REQUIRE_ALL_PARAMS ) + { + if( strlen((char*)vims_arguments[i].value) <= 0 ) + { + veejay_msg(VEEJAY_MSG_ERROR, "Argument %d is not a string!",i ); + if(fmt)free(fmt); + return; + } + } + } + fmt_offset += 3; + i++; + } + _last_known_num_args = arglen; - while( i < np ) - { - int dv = vj_event_vevo_get_default_value( net_id, i); - if( fmt[fmt_offset] == 'd' ) - { - vims_arguments[i].value = (void*) &(dv); - } - i++; - } + while( i < np ) + { + int dv = vj_event_vevo_get_default_value( net_id, i); + if( fmt[fmt_offset] == 'd' ) + { + vims_arguments[i].value = (void*) &(dv); + } + i++; + } - while( i < 16 ) { - vims_arguments[i].value = 0; - i++; - } + while( i < 16 ) { + vims_arguments[i].value = 0; + i++; + } - vj_event_vevo_inline_fire( (void*) v, net_id, - fmt, - vims_arguments[0].value, - vims_arguments[1].value, - vims_arguments[2].value, - vims_arguments[3].value, - vims_arguments[4].value, - vims_arguments[5].value, - vims_arguments[6].value, - vims_arguments[7].value, - vims_arguments[8].value, - vims_arguments[9].value, - vims_arguments[10].value, - vims_arguments[11].value, - vims_arguments[12].value, - vims_arguments[13].value, - vims_arguments[14].value, - vims_arguments[15].value); - fmt_offset = 1; - for ( i = 0; i < np ; i ++ ) - { - if( vims_arguments[i].value && fmt[fmt_offset] == 's' ) - free( vims_arguments[i].value ); - fmt_offset += 3; - } - if(fmt) - free(fmt); + vj_event_vevo_inline_fire( (void*) v, net_id, + fmt, + vims_arguments[0].value, + vims_arguments[1].value, + vims_arguments[2].value, + vims_arguments[3].value, + vims_arguments[4].value, + vims_arguments[5].value, + vims_arguments[6].value, + vims_arguments[7].value, + vims_arguments[8].value, + vims_arguments[9].value, + vims_arguments[10].value, + vims_arguments[11].value, + vims_arguments[12].value, + vims_arguments[13].value, + vims_arguments[14].value, + vims_arguments[15].value); + fmt_offset = 1; + for ( i = 0; i < np ; i ++ ) + { + if( vims_arguments[i].value && fmt[fmt_offset] == 's' ) + free( vims_arguments[i].value ); + fmt_offset += 3; + } + if(fmt) + free(fmt); } -static int inline_str_to_int(const char *msg, int *val) +static int inline_str_to_int(const char *msg, int *val) { - int str_len = 0; - if( sscanf( msg , "%d%n", val,&str_len ) <= 0 ) - return 0; - return str_len; + int str_len = 0; + if( sscanf( msg , "%d%n", val,&str_len ) <= 0 ) + return 0; + return str_len; } -static char *inline_str_to_str(int flags, char *msg) +static char *inline_str_to_str(int flags, char *msg) { - char *res = NULL; - int len = strlen(msg); - if( len <= 0 ) - return NULL; + char *res = NULL; + int len = strlen(msg); + if( len <= 0 ) + return NULL; - if( (flags & VIMS_LONG_PARAMS) ) /* copy rest of message */ - { - res = (char*) vj_calloc(sizeof(char) * (len+1) ); - veejay_strncpy( res, msg, len ); - } - else - { - char str[256]; - if(sscanf( msg, "%256s", str ) <= 0 ) - return NULL; - res = vj_strndup( str, 255 ); - } - return res; + if( (flags & VIMS_LONG_PARAMS) ) /* copy rest of message */ + { + res = (char*) vj_calloc(sizeof(char) * (len+1) ); + veejay_strncpy( res, msg, len ); + } + else + { + char str[256]; + if(sscanf( msg, "%256s", str ) <= 0 ) + return NULL; + res = vj_strndup( str, 255 ); + } + return res; } -int vj_event_parse_msg( void *ptr, char *msg, int msg_len ) +int vj_event_parse_msg( void *ptr, char *msg, int msg_len ) { - veejay_t *v = (veejay_t*)ptr; - int net_id = 0; - int np = 0; - - if( msg == NULL ) - { - veejay_msg(VEEJAY_MSG_ERROR, "Dropped empty VIMS message."); - return 0; - } + veejay_t *v = (veejay_t*)ptr; + int net_id = 0; + int np = 0; + + if( msg == NULL ) + { + veejay_msg(VEEJAY_MSG_ERROR, "Dropped empty VIMS message."); + return 0; + } - if( msg_len < MSG_MIN_LEN ) - { - veejay_msg(VEEJAY_MSG_ERROR, "VIMS Message too small (%s), dropped!",msg); - return 0; + if( msg_len < MSG_MIN_LEN ) + { + veejay_msg(VEEJAY_MSG_ERROR, "VIMS Message too small (%s), dropped!",msg); + return 0; - } - - if( strncasecmp( msg, "BUN", 3 ) == 0 ) - { - veejay_chomp_str( msg, &msg_len ); - vj_event_parse_bundle( v, msg ); - return 1; - } + } + + if( strncasecmp( msg, "BUN", 3 ) == 0 ) + { + veejay_chomp_str( msg, &msg_len ); + vj_event_parse_bundle( v, msg ); + return 1; + } - if( strncasecmp( msg, "KEY", 3 ) == 0 ) - { - vj_event_parse_kf( v, msg, msg_len ); - return 1; - } + if( strncasecmp( msg, "KEY", 3 ) == 0 ) + { + vj_event_parse_kf( v, msg, msg_len ); + return 1; + } - veejay_chomp_str( msg, &msg_len ); - msg_len --; + veejay_chomp_str( msg, &msg_len ); + msg_len --; - /* try to scan VIMS id */ - if ( sscanf( msg, "%03d", &net_id ) != 1 ) - { - veejay_msg(VEEJAY_MSG_ERROR, "Error parsing VIMS selector"); - return 0; - } - - if( net_id <= 0 || net_id >= VIMS_MAX ) - { - veejay_msg(VEEJAY_MSG_ERROR, "VIMS Selector %d invalid", net_id ); - return 0; - } + /* try to scan VIMS id */ + if ( sscanf( msg, "%03d", &net_id ) != 1 ) + { + veejay_msg(VEEJAY_MSG_ERROR, "Error parsing VIMS selector"); + return 0; + } + + if( net_id <= 0 || net_id >= VIMS_MAX ) + { + veejay_msg(VEEJAY_MSG_ERROR, "VIMS Selector %d invalid", net_id ); + return 0; + } - if ( net_id >= VIMS_BUNDLE_START && net_id < VIMS_BUNDLE_END ) - { - vj_msg_bundle *bun = vj_event_bundle_get(net_id ); - if(!bun) - { - veejay_msg(VEEJAY_MSG_ERROR, "(VIMS) internal error: Bundle %d not registered"); - return 0; - } - vj_event_parse_bundle( v, bun->bundle ); - return 1; - } + if ( net_id >= VIMS_BUNDLE_START && net_id < VIMS_BUNDLE_END ) + { + vj_msg_bundle *bun = vj_event_bundle_get(net_id ); + if(!bun) + { + veejay_msg(VEEJAY_MSG_ERROR, "(VIMS) internal error: Bundle %d not registered"); + return 0; + } + vj_event_parse_bundle( v, bun->bundle ); + return 1; + } /* - if( net_id >= 400 && net_id < 499 ) - { - vj_server_client_promote( v->vjs[VEEJAY_PORT_CMD] , v->uc->current_link ); - v->rmodes[ v->uc->current_link ] = -1000; - } + if( net_id >= 400 && net_id < 499 ) + { + vj_server_client_promote( v->vjs[VEEJAY_PORT_CMD] , v->uc->current_link ); + v->rmodes[ v->uc->current_link ] = -1000; + } */ - int i_args[16]; + int i_args[16]; - np = vj_event_vevo_get_num_args( net_id ); - - if ( msg_len <= MSG_MIN_LEN ) - { - int i = 0; - while( i < np ) - { - i_args[i] = vj_event_vevo_get_default_value( net_id, i ); - i++; - } - vj_event_fire_net_event( v, net_id, NULL, i_args, np, 0 ); - if( macro_status_ == 1 && macro_port_ != NULL) - { - if( valid_for_macro(net_id)) - store_macro_( v,msg, v->settings->current_frame_num ); - } - - } - else - { - char *arguments = NULL; - char *fmt = vj_event_vevo_get_event_format( net_id ); - int flags = vj_event_vevo_get_flags( net_id ); - int i = 0; - char *str = NULL; - int fmt_offset = 1; - char *arg_str = NULL; - int n = 4; - if( msg[msg_len-4] == ';' ) - n = 5; + np = vj_event_vevo_get_num_args( net_id ); + + if ( msg_len <= MSG_MIN_LEN ) + { + int i = 0; + while( i < np ) + { + i_args[i] = vj_event_vevo_get_default_value( net_id, i ); + i++; + } + vj_event_fire_net_event( v, net_id, NULL, i_args, np, 0 ); + if( macro_status_ == 1 && macro_port_ != NULL) + { + if( valid_for_macro(net_id)) + store_macro_( v,msg, v->settings->current_frame_num ); + } + + } + else + { + char *arguments = NULL; + char *fmt = vj_event_vevo_get_event_format( net_id ); + int flags = vj_event_vevo_get_flags( net_id ); + int i = 0; + char *str = NULL; + int fmt_offset = 1; + char *arg_str = NULL; + int n = 4; + if( msg[msg_len-4] == ';' ) + n = 5; - arg_str = arguments = vj_strndup( msg + 4 , msg_len - n ); + arg_str = arguments = vj_strndup( msg + 4 , msg_len - n ); - if( arguments == NULL ) - { - dump_arguments_( net_id, 0, np, 0, fmt ); - if(fmt) free(fmt ); - return 0; - } - if( np <= 0 ) - { - veejay_msg(VEEJAY_MSG_ERROR, "VIMS %d accepts no arguments", net_id ); - if(fmt) free(fmt); - return 0; - } - - while( i < np ) - { - if( fmt[fmt_offset] == 'd' ) - i_args[i] = vj_event_vevo_get_default_value(net_id, i); - i++; - } - - for( i = 0; i < np; i ++ ) - { - int failed_arg = 1; - - if( fmt[fmt_offset] == 'd' ) - { - int il = inline_str_to_int( arguments, &i_args[i] ); - if( il > 0 ) - { - failed_arg = 0; - arguments += il; - } - } - if( fmt[fmt_offset] == 's' && str == NULL) - { - str = inline_str_to_str( flags,arguments ); - if(str != NULL ) - { - failed_arg = 0; - arguments += strlen(str); - } - } - - if( failed_arg ) - { - char *name = vj_event_vevo_get_event_name( net_id ); - veejay_msg(VEEJAY_MSG_ERROR, "Invalid argument %d for VIMS '%03d' : '%s' ", - i, net_id, name ); - if(name) free(name); - dump_argument_( net_id, i ); - if(fmt) free(fmt); - return 0; - } + if( arguments == NULL ) + { + dump_arguments_( net_id, 0, np, 0, fmt ); + if(fmt) free(fmt ); + return 0; + } + if( np <= 0 ) + { + veejay_msg(VEEJAY_MSG_ERROR, "VIMS %d accepts no arguments", net_id ); + if(fmt) free(fmt); + return 0; + } + + while( i < np ) + { + if( fmt[fmt_offset] == 'd' ) + i_args[i] = vj_event_vevo_get_default_value(net_id, i); + i++; + } + + for( i = 0; i < np; i ++ ) + { + int failed_arg = 1; + + if( fmt[fmt_offset] == 'd' ) + { + int il = inline_str_to_int( arguments, &i_args[i] ); + if( il > 0 ) + { + failed_arg = 0; + arguments += il; + } + } + if( fmt[fmt_offset] == 's' && str == NULL) + { + str = inline_str_to_str( flags,arguments ); + if(str != NULL ) + { + failed_arg = 0; + arguments += strlen(str); + } + } + + if( failed_arg ) + { + char *name = vj_event_vevo_get_event_name( net_id ); + veejay_msg(VEEJAY_MSG_ERROR, "Invalid argument %d for VIMS '%03d' : '%s' ", + i, net_id, name ); + if(name) free(name); + dump_argument_( net_id, i ); + if(fmt) free(fmt); + return 0; + } - if( *arguments == ';' || *arguments == 0 ) - break; - fmt_offset += 3; + if( *arguments == ';' || *arguments == 0 ) + break; + fmt_offset += 3; - if( *arguments == 0x20 ) - arguments += 1; - } + if( *arguments == 0x20 ) + arguments += 1; + } - i ++; + i ++; - if( flags & VIMS_ALLOW_ANY ) - i = np; + if( flags & VIMS_ALLOW_ANY ) + i = np; - if( macro_status_ == 1 && macro_port_ != NULL) - { - if( valid_for_macro(net_id)) - store_macro_( v,msg, v->settings->current_frame_num ); - } + if( macro_status_ == 1 && macro_port_ != NULL) + { + if( valid_for_macro(net_id)) + store_macro_( v,msg, v->settings->current_frame_num ); + } - vj_event_fire_net_event( v, net_id, str, i_args, i, 0 ); + vj_event_fire_net_event( v, net_id, str, i_args, i, 0 ); - if(fmt) free(fmt); - if(arg_str) free(arg_str); - if(str) free(str); + if(fmt) free(fmt); + if(arg_str) free(arg_str); + if(str) free(str); - return 1; - - } - return 0; + return 1; + + } + return 0; } void vj_event_update_remote(void *ptr) { - veejay_t *v = (veejay_t*)ptr; - int i; + veejay_t *v = (veejay_t*)ptr; + int i; - int p1 = vj_server_poll( v->vjs[VEEJAY_PORT_CMD] ); - int p2 = vj_server_poll( v->vjs[VEEJAY_PORT_STA] ); - int p3 = vj_server_poll( v->vjs[VEEJAY_PORT_DAT] ); + int p1 = vj_server_poll( v->vjs[VEEJAY_PORT_CMD] ); + int p2 = vj_server_poll( v->vjs[VEEJAY_PORT_STA] ); + int p3 = vj_server_poll( v->vjs[VEEJAY_PORT_DAT] ); - int has_n=0; + int has_n=0; - if( p1 ) - has_n += vj_server_new_connection(v->vjs[VEEJAY_PORT_CMD]); - - if( p2 ) - has_n += vj_server_new_connection( v->vjs[VEEJAY_PORT_STA] ); - - if( p3 ) - has_n += vj_server_new_connection( v->vjs[VEEJAY_PORT_DAT] ); + if( p1 ) + has_n += vj_server_new_connection(v->vjs[VEEJAY_PORT_CMD]); + + if( p2 ) + has_n += vj_server_new_connection( v->vjs[VEEJAY_PORT_STA] ); + + if( p3 ) + has_n += vj_server_new_connection( v->vjs[VEEJAY_PORT_DAT] ); - if( v->settings->use_vims_mcast ) - { - int res = vj_server_poll( v->vjs[VEEJAY_PORT_MAT] ); - if( res > 0 ) { - res = vj_server_update(v->vjs[VEEJAY_PORT_MAT],0 ); - if(res > 0) - { - v->uc->current_link = 0; - char *buf = NULL; - int len =0; - while( ( buf = vj_server_retrieve_msg( v->vjs[VEEJAY_PORT_MAT], 0, buf,&len )) != NULL ) - { - vj_event_parse_msg( v, buf,len ); - } - } - } - } + if( v->settings->use_vims_mcast ) + { + int res = vj_server_poll( v->vjs[VEEJAY_PORT_MAT] ); + if( res > 0 ) { + res = vj_server_update(v->vjs[VEEJAY_PORT_MAT],0 ); + if(res > 0) + { + v->uc->current_link = 0; + char *buf = NULL; + int len =0; + while( ( buf = vj_server_retrieve_msg( v->vjs[VEEJAY_PORT_MAT], 0, buf,&len )) != NULL ) + { + vj_event_parse_msg( v, buf,len ); + } + } + } + } - v->settings->is_dat = 0; - for( i = 0; i < VJ_MAX_CONNECTIONS; i ++ ) - { - if( vj_server_link_can_read( v->vjs[VEEJAY_PORT_CMD], i ) ) - { - vj_server_init_msg_pool( v->vjs[VEEJAY_PORT_CMD], i ); // ensure pool is ready + v->settings->is_dat = 0; + for( i = 0; i < VJ_MAX_CONNECTIONS; i ++ ) + { + if( vj_server_link_can_read( v->vjs[VEEJAY_PORT_CMD], i ) ) + { + vj_server_init_msg_pool( v->vjs[VEEJAY_PORT_CMD], i ); // ensure pool is ready - int res = vj_server_update( v->vjs[VEEJAY_PORT_CMD], i ); - if(res>0) - { - v->uc->current_link = i; - int n = 0; - int len = 0; - char *buf = NULL; - while( (buf= vj_server_retrieve_msg(v->vjs[VEEJAY_PORT_CMD],i,buf, &len))!= NULL ) - { - vj_event_parse_msg( v, buf,len ); - n++; - } - }else if( res <= 0 ) - { - _vj_server_del_client( v->vjs[VEEJAY_PORT_CMD], i ); - _vj_server_del_client( v->vjs[VEEJAY_PORT_STA], i ); - } - } - } + int res = vj_server_update( v->vjs[VEEJAY_PORT_CMD], i ); + if(res>0) + { + v->uc->current_link = i; + int n = 0; + int len = 0; + char *buf = NULL; + while( (buf= vj_server_retrieve_msg(v->vjs[VEEJAY_PORT_CMD],i,buf, &len))!= NULL ) + { + vj_event_parse_msg( v, buf,len ); + n++; + } + }else if( res <= 0 ) + { + _vj_server_del_client( v->vjs[VEEJAY_PORT_CMD], i ); + _vj_server_del_client( v->vjs[VEEJAY_PORT_STA], i ); + } + } + } - v->settings->is_dat = 1; - for( i = 0; i < VJ_MAX_CONNECTIONS; i ++ ) - { - if( vj_server_link_can_read( v->vjs[VEEJAY_PORT_DAT], i ) ) - { - vj_server_init_msg_pool( v->vjs[VEEJAY_PORT_DAT], i ); // ensure pool is ready - - int res = vj_server_update( v->vjs[VEEJAY_PORT_DAT], i ); - if(res>0) - { - v->uc->current_link = i; - int n = 0; - int len = 0; - char *buf = NULL; - while( (buf= vj_server_retrieve_msg(v->vjs[VEEJAY_PORT_DAT],i,buf, &len))!= NULL ) - { - vj_event_parse_msg( v, buf,len ); - n++; - } - } else if( res <= 0 ) - { - _vj_server_del_client( v->vjs[VEEJAY_PORT_DAT], i ); - } - } - } + v->settings->is_dat = 1; + for( i = 0; i < VJ_MAX_CONNECTIONS; i ++ ) + { + if( vj_server_link_can_read( v->vjs[VEEJAY_PORT_DAT], i ) ) + { + vj_server_init_msg_pool( v->vjs[VEEJAY_PORT_DAT], i ); // ensure pool is ready + + int res = vj_server_update( v->vjs[VEEJAY_PORT_DAT], i ); + if(res>0) + { + v->uc->current_link = i; + int n = 0; + int len = 0; + char *buf = NULL; + while( (buf= vj_server_retrieve_msg(v->vjs[VEEJAY_PORT_DAT],i,buf, &len))!= NULL ) + { + vj_event_parse_msg( v, buf,len ); + n++; + } + } else if( res <= 0 ) + { + _vj_server_del_client( v->vjs[VEEJAY_PORT_DAT], i ); + } + } + } - v->settings->is_dat = 0; + v->settings->is_dat = 0; - if(macro_status_ == 2 && macro_port_ != NULL) - { - int n_macro = 0; - int s = 0; - char *macro_msg = NULL; - char key[32]; + if(macro_status_ == 2 && macro_port_ != NULL) + { + int n_macro = 0; + int s = 0; + char *macro_msg = NULL; + char key[32]; - if( SAMPLE_PLAYING(v)) - s = sample_get_framedups( v->uc->sample_id ); - else if ( PLAIN_PLAYING(v)) - s = v->settings->simple_frame_dup; + if( SAMPLE_PLAYING(v)) + s = sample_get_framedups( v->uc->sample_id ); + else if ( PLAIN_PLAYING(v)) + s = v->settings->simple_frame_dup; - snprintf(key,sizeof(key),"%08d%02d", v->settings->current_frame_num,s ); + snprintf(key,sizeof(key),"%08d%02d", v->settings->current_frame_num,s ); - for( n_macro = 0; n_macro < MAX_MACROS ; n_macro ++ ) - { - macro_msg = retrieve_macro_( v, n_macro,key ); - if(macro_msg) - vj_event_parse_msg(v,macro_msg, strlen(macro_msg)); - } - } + for( n_macro = 0; n_macro < MAX_MACROS ; n_macro ++ ) + { + macro_msg = retrieve_macro_( v, n_macro,key ); + if(macro_msg) + vj_event_parse_msg(v,macro_msg, strlen(macro_msg)); + } + } } -void vj_event_commit_bundle( veejay_t *v, int key_num, int key_mod) +void vj_event_commit_bundle( veejay_t *v, int key_num, int key_mod) { - char bundle[4096]; - vj_event_create_effect_bundle(v, bundle, key_num, key_mod ); + char bundle[4096]; + vj_event_create_effect_bundle(v, bundle, key_num, key_mod ); } #ifdef HAVE_SDL int vj_event_single_fire(void *ptr , SDL_Event event, int pressed) { - SDL_KeyboardEvent *key = &event.key; - SDLMod mod = key->keysym.mod; - veejay_t *v = (veejay_t*) ptr; - int vims_mod = 0; + SDL_KeyboardEvent *key = &event.key; + SDLMod mod = key->keysym.mod; + veejay_t *v = (veejay_t*) ptr; + int vims_mod = 0; - if( (mod & KMOD_LSHIFT) || (mod & KMOD_RSHIFT )) - vims_mod = VIMS_MOD_SHIFT; - if( (mod & KMOD_LALT) || (mod & KMOD_ALT) ) - vims_mod = VIMS_MOD_ALT; - if( (mod & KMOD_CTRL) || (mod & KMOD_CTRL) ) - vims_mod = VIMS_MOD_CTRL; - if( (mod & KMOD_CAPS) ) { - vims_mod = VIMS_MOD_CAPSLOCK; - } + if( (mod & KMOD_LSHIFT) || (mod & KMOD_RSHIFT )) + vims_mod = VIMS_MOD_SHIFT; + if( (mod & KMOD_LALT) || (mod & KMOD_ALT) ) + vims_mod = VIMS_MOD_ALT; + if( (mod & KMOD_CTRL) || (mod & KMOD_CTRL) ) + vims_mod = VIMS_MOD_CTRL; + if( (mod & KMOD_CAPS) ) { + vims_mod = VIMS_MOD_CAPSLOCK; + } - int vims_key = key->keysym.sym; - int index = vims_mod * SDLK_LAST + vims_key; + int vims_key = key->keysym.sym; + int index = vims_mod * SDLK_LAST + vims_key; - vj_keyboard_event *ev = get_keyboard_event( index ); - if(!ev ) - { - // veejay_msg(VEEJAY_MSG_ERROR,"Keyboard event %d unknown", index ); - if( event.button.button == SDL_BUTTON_WHEELUP && v->use_osd != 3 ) { - char msg[100]; - sprintf(msg,"%03d:;", VIMS_VIDEO_SKIP_SECOND ); - vj_event_parse_msg( (veejay_t*) ptr, msg, strlen(msg) ); - return 1; - } else if (event.button.button == SDL_BUTTON_WHEELDOWN && v->use_osd != 3) { - char msg[100]; - sprintf(msg,"%03d:;", VIMS_VIDEO_PREV_SECOND ); - vj_event_parse_msg( (veejay_t*) ptr, msg, strlen(msg) ); - return 1; - } - return 0; - } + vj_keyboard_event *ev = get_keyboard_event( index ); + if(!ev ) + { + // veejay_msg(VEEJAY_MSG_ERROR,"Keyboard event %d unknown", index ); + if( event.button.button == SDL_BUTTON_WHEELUP && v->use_osd != 3 ) { + char msg[100]; + sprintf(msg,"%03d:;", VIMS_VIDEO_SKIP_SECOND ); + vj_event_parse_msg( (veejay_t*) ptr, msg, strlen(msg) ); + return 1; + } else if (event.button.button == SDL_BUTTON_WHEELDOWN && v->use_osd != 3) { + char msg[100]; + sprintf(msg,"%03d:;", VIMS_VIDEO_PREV_SECOND ); + vj_event_parse_msg( (veejay_t*) ptr, msg, strlen(msg) ); + return 1; + } + return 0; + } - int event_id = ev->vims->list_id; - if( event_id >= VIMS_BUNDLE_START && event_id < VIMS_BUNDLE_END ) - { - vj_msg_bundle *bun = vj_event_bundle_get(event_id ); - if(!bun) - { - veejay_msg(VEEJAY_MSG_DEBUG, "Requested BUNDLE %d does not exist", event_id); - return 0; - } - vj_event_parse_bundle( (veejay_t*) ptr, bun->bundle ); - } - else - { - char msg[100]; - if( ev->arg_len > 0 ) - { - sprintf(msg,"%03d:%s;", event_id, ev->arguments ); - } - else - sprintf(msg,"%03d:;", event_id ); - vj_event_parse_msg( (veejay_t*) ptr, msg, strlen(msg) ); - } - return 1; + int event_id = ev->vims->list_id; + if( event_id >= VIMS_BUNDLE_START && event_id < VIMS_BUNDLE_END ) + { + vj_msg_bundle *bun = vj_event_bundle_get(event_id ); + if(!bun) + { + veejay_msg(VEEJAY_MSG_DEBUG, "Requested BUNDLE %d does not exist", event_id); + return 0; + } + vj_event_parse_bundle( (veejay_t*) ptr, bun->bundle ); + } + else + { + char msg[100]; + if( ev->arg_len > 0 ) + { + sprintf(msg,"%03d:%s;", event_id, ev->arguments ); + } + else + sprintf(msg,"%03d:;", event_id ); + vj_event_parse_msg( (veejay_t*) ptr, msg, strlen(msg) ); + } + return 1; } #endif void vj_event_none(void *ptr, const char format[], va_list ap) { - veejay_msg(VEEJAY_MSG_DEBUG, "No action implemented for requested event"); + veejay_msg(VEEJAY_MSG_DEBUG, "No action implemented for requested event"); } #ifdef HAVE_XML2 -static void get_cstr( xmlDocPtr doc, xmlNodePtr cur, const xmlChar *what, char *dst, size_t dst_len ) +static void get_cstr( xmlDocPtr doc, xmlNodePtr cur, const xmlChar *what, char *dst, size_t dst_len ) { - char *t = NULL; - if(! xmlStrcmp( cur->name, what )) - { - t = get_xml_str( doc, cur ); - veejay_strncpy( dst, t, dst_len ); - free(t); - } + char *t = NULL; + if(! xmlStrcmp( cur->name, what )) + { + t = get_xml_str( doc, cur ); + veejay_strncpy( dst, t, dst_len ); + free(t); + } } -static void get_fstr( xmlDocPtr doc, xmlNodePtr cur, const xmlChar *what, float *dst ) +static void get_fstr( xmlDocPtr doc, xmlNodePtr cur, const xmlChar *what, float *dst ) { - if(!xmlStrcmp( cur->name, what )) - { - *dst = get_xml_float( doc, cur ); - } + if(!xmlStrcmp( cur->name, what )) + { + *dst = get_xml_float( doc, cur ); + } } -static void get_istr( xmlDocPtr doc, xmlNodePtr cur, const xmlChar *what, int *dst ) +static void get_istr( xmlDocPtr doc, xmlNodePtr cur, const xmlChar *what, int *dst ) { - if(! xmlStrcmp( cur->name, what )) - { - *dst = get_xml_int( doc, cur ); - } + if(! xmlStrcmp( cur->name, what )) + { + *dst = get_xml_int( doc, cur ); + } } -#define XML_CONFIG_STREAM "stream" -#define XML_CONFIG_STREAM_SOURCE "source" -#define XML_CONFIG_STREAM_FILENAME "filename" -#define XML_CONFIG_STREAM_TYPE "type" -#define XML_CONFIG_STREAM_COLOR "rgb" -#define XML_CONFIG_STREAM_OPTION "option" -#define XML_CONFIG_STREAM_CHAIN "fxchain" +#define XML_CONFIG_STREAM "stream" +#define XML_CONFIG_STREAM_SOURCE "source" +#define XML_CONFIG_STREAM_FILENAME "filename" +#define XML_CONFIG_STREAM_TYPE "type" +#define XML_CONFIG_STREAM_COLOR "rgb" +#define XML_CONFIG_STREAM_OPTION "option" +#define XML_CONFIG_STREAM_CHAIN "fxchain" #define XML_CONFIG_KEY_SYM "key_symbol" #define XML_CONFIG_KEY_MOD "key_modifier" @@ -1774,7 +1776,7 @@ static void get_istr( xmlDocPtr doc, xmlNodePtr cur, const xmlChar *what, int *d #define XML_CONFIG_KEY_EXTRA "extra" #define XML_CONFIG_EVENT "event" #define XML_CONFIG_FILE "config" -#define XML_CONFIG_SETTINGS "run_settings" +#define XML_CONFIG_SETTINGS "run_settings" #define XML_CONFIG_SETTING_PORTNUM "port_num" #define XML_CONFIG_SETTING_HOSTNAME "hostname" #define XML_CONFIG_SETTING_PRIOUTPUT "primary_output" @@ -1782,325 +1784,325 @@ static void get_istr( xmlDocPtr doc, xmlNodePtr cur, const xmlChar *what, int *d #define XML_CONFIG_SETTING_SDLSIZEX "SDLwidth" #define XML_CONFIG_SETTING_SDLSIZEY "SDLheight" #define XML_CONFIG_SETTING_AUDIO "audio" -#define XML_CONFIG_SETTING_SYNC "sync" +#define XML_CONFIG_SETTING_SYNC "sync" #define XML_CONFIG_SETTING_TIMER "timer" -#define XML_CONFIG_SETTING_FPS "output_fps" -#define XML_CONFIG_SETTING_GEOX "Xgeom_x" -#define XML_CONFIG_SETTING_GEOY "Xgeom_y" +#define XML_CONFIG_SETTING_FPS "output_fps" +#define XML_CONFIG_SETTING_GEOX "Xgeom_x" +#define XML_CONFIG_SETTING_GEOY "Xgeom_y" #define XML_CONFIG_SETTING_BEZERK "bezerk" #define XML_CONFIG_SETTING_COLOR "nocolor" #define XML_CONFIG_SETTING_YCBCR "chrominance_level" #define XML_CONFIG_SETTING_WIDTH "output_width" #define XML_CONFIG_SETTING_HEIGHT "output_height" -#define XML_CONFIG_SETTING_DFPS "dummy_fps" -#define XML_CONFIG_SETTING_DUMMY "dummy" -#define XML_CONFIG_SETTING_NORM "video_norm" +#define XML_CONFIG_SETTING_DFPS "dummy_fps" +#define XML_CONFIG_SETTING_DUMMY "dummy" +#define XML_CONFIG_SETTING_NORM "video_norm" #define XML_CONFIG_SETTING_MCASTOSC "mcast_osc" #define XML_CONFIG_SETTING_MCASTVIMS "mcast_vims" -#define XML_CONFIG_SETTING_SCALE "output_scaler" -#define XML_CONFIG_SETTING_PMODE "play_mode" -#define XML_CONFIG_SETTING_PID "play_id" +#define XML_CONFIG_SETTING_SCALE "output_scaler" +#define XML_CONFIG_SETTING_PMODE "play_mode" +#define XML_CONFIG_SETTING_PID "play_id" #define XML_CONFIG_SETTING_SAMPLELIST "sample_list" #define XML_CONFIG_SETTING_FILEASSAMPLE "file_as_sample" #define XML_CONFIG_SETTING_EDITLIST "edit_list" -#define XML_CONFIG_BACKFX "backfx" -#define XML_CONFIG_COMPOSITEMODE "composite_mode" -#define XML_CONFIG_SCALERFLAGS "scaler_flags" -#define XML_CONFIG_SETTING_OSD "use_osd" +#define XML_CONFIG_BACKFX "backfx" +#define XML_CONFIG_COMPOSITEMODE "composite_mode" +#define XML_CONFIG_SCALERFLAGS "scaler_flags" +#define XML_CONFIG_SETTING_OSD "use_osd" -static void vj_event_format_xml_settings( veejay_t *v, xmlNodePtr node ) +static void vj_event_format_xml_settings( veejay_t *v, xmlNodePtr node ) { - put_xml_int( node, XML_CONFIG_SETTING_PRIOUTPUT, v->video_out ); - put_xml_int( node, XML_CONFIG_SETTING_SDLSIZEX, v->bes_width ); - put_xml_int( node, XML_CONFIG_SETTING_SDLSIZEY, v->bes_height ); - put_xml_int( node, XML_CONFIG_SETTING_GEOX, v->uc->geox ); - put_xml_int( node, XML_CONFIG_SETTING_GEOY, v->uc->geoy ); - put_xml_int( node, XML_CONFIG_SETTING_WIDTH, v->video_output_width ); - put_xml_int( node, XML_CONFIG_SETTING_HEIGHT, v->video_output_height ); - put_xml_int( node, XML_CONFIG_SETTING_AUDIO, v->audio ); - put_xml_int( node, XML_CONFIG_SETTING_SYNC, v->sync_correction ); - put_xml_int( node, XML_CONFIG_SETTING_TIMER, v->uc->use_timer ); - put_xml_int( node, XML_CONFIG_SETTING_BEZERK, v->no_bezerk ); - put_xml_int( node, XML_CONFIG_SETTING_COLOR, veejay_is_colored() ); - put_xml_int( node, XML_CONFIG_SETTING_YCBCR, v->pixel_format ); - put_xml_float( node, XML_CONFIG_SETTING_DFPS, v->dummy->fps ); - put_xml_int( node, XML_CONFIG_SETTING_NORM, v->dummy->norm ); - put_xml_int( node, XML_CONFIG_SETTING_DUMMY, v->dummy->active ); - put_xml_int( node, XML_CONFIG_SETTING_MCASTOSC, v->settings->use_mcast ); - put_xml_int( node, XML_CONFIG_SETTING_MCASTVIMS, v->settings->use_vims_mcast ); - put_xml_int( node, XML_CONFIG_SETTING_SCALE, v->settings->zoom ); - put_xml_float( node, XML_CONFIG_SETTING_FPS, v->settings->output_fps ); - put_xml_int( node, XML_CONFIG_SETTING_PMODE, v->uc->playback_mode ); - put_xml_int( node, XML_CONFIG_SETTING_PID, v->uc->sample_id ); - put_xml_int( node, XML_CONFIG_BACKFX, v->settings->fxdepth ); - put_xml_int( node, XML_CONFIG_COMPOSITEMODE, v->settings->composite ); - put_xml_int( node, XML_CONFIG_SCALERFLAGS, v->settings->sws_templ.flags ); - put_xml_int( node, XML_CONFIG_SETTING_FILEASSAMPLE, v->uc->file_as_sample ); - put_xml_int( node, XML_CONFIG_SETTING_OSD, v->use_osd ); + put_xml_int( node, XML_CONFIG_SETTING_PRIOUTPUT, v->video_out ); + put_xml_int( node, XML_CONFIG_SETTING_SDLSIZEX, v->bes_width ); + put_xml_int( node, XML_CONFIG_SETTING_SDLSIZEY, v->bes_height ); + put_xml_int( node, XML_CONFIG_SETTING_GEOX, v->uc->geox ); + put_xml_int( node, XML_CONFIG_SETTING_GEOY, v->uc->geoy ); + put_xml_int( node, XML_CONFIG_SETTING_WIDTH, v->video_output_width ); + put_xml_int( node, XML_CONFIG_SETTING_HEIGHT, v->video_output_height ); + put_xml_int( node, XML_CONFIG_SETTING_AUDIO, v->audio ); + put_xml_int( node, XML_CONFIG_SETTING_SYNC, v->sync_correction ); + put_xml_int( node, XML_CONFIG_SETTING_TIMER, v->uc->use_timer ); + put_xml_int( node, XML_CONFIG_SETTING_BEZERK, v->no_bezerk ); + put_xml_int( node, XML_CONFIG_SETTING_COLOR, veejay_is_colored() ); + put_xml_int( node, XML_CONFIG_SETTING_YCBCR, v->pixel_format ); + put_xml_float( node, XML_CONFIG_SETTING_DFPS, v->dummy->fps ); + put_xml_int( node, XML_CONFIG_SETTING_NORM, v->dummy->norm ); + put_xml_int( node, XML_CONFIG_SETTING_DUMMY, v->dummy->active ); + put_xml_int( node, XML_CONFIG_SETTING_MCASTOSC, v->settings->use_mcast ); + put_xml_int( node, XML_CONFIG_SETTING_MCASTVIMS, v->settings->use_vims_mcast ); + put_xml_int( node, XML_CONFIG_SETTING_SCALE, v->settings->zoom ); + put_xml_float( node, XML_CONFIG_SETTING_FPS, v->settings->output_fps ); + put_xml_int( node, XML_CONFIG_SETTING_PMODE, v->uc->playback_mode ); + put_xml_int( node, XML_CONFIG_SETTING_PID, v->uc->sample_id ); + put_xml_int( node, XML_CONFIG_BACKFX, v->settings->fxdepth ); + put_xml_int( node, XML_CONFIG_COMPOSITEMODE, v->settings->composite ); + put_xml_int( node, XML_CONFIG_SCALERFLAGS, v->settings->sws_templ.flags ); + put_xml_int( node, XML_CONFIG_SETTING_FILEASSAMPLE, v->uc->file_as_sample ); + put_xml_int( node, XML_CONFIG_SETTING_OSD, v->use_osd ); } -static void vj_event_xml_parse_config( veejay_t *v, xmlDocPtr doc, xmlNodePtr cur ) +static void vj_event_xml_parse_config( veejay_t *v, xmlDocPtr doc, xmlNodePtr cur ) { - if( veejay_get_state(v) != LAVPLAY_STATE_STOP) - return; + if( veejay_get_state(v) != LAVPLAY_STATE_STOP) + return; - int c = 0; - char sample_list[1024]; - // FIXME editlist loading ; veejay restart + int c = 0; + char sample_list[1024]; + // FIXME editlist loading ; veejay restart - while( cur != NULL ) - { - get_cstr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_SAMPLELIST, sample_list,sizeof(sample_list) ); - get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_PORTNUM, &(v->uc->port) ); - get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_PRIOUTPUT, &(v->video_out) ); - get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_SDLSIZEX, &(v->bes_width) ); - get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_SDLSIZEY, &(v->bes_height) ); - get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_AUDIO, &(v->audio) ); - get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_SYNC, &(v->sync_correction) ); - get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_TIMER, &(v->uc->use_timer) ); - get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_GEOX, &(v->uc->geox) ); - get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_GEOY, &(v->uc->geoy) ); - get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_BEZERK, &(v->no_bezerk) ); - get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_COLOR, &c ); - get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_YCBCR, &(v->pixel_format) ); - get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_WIDTH, &(v->video_output_width) ); - get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_HEIGHT,&(v->video_output_height) ); - get_fstr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_DFPS, &(v->dummy->fps ) ); -// get_cstr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_NORM, &(v->dummy->norm) ); - get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_DUMMY, &(v->dummy->active) ); - get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_MCASTOSC, &(v->settings->use_mcast) ); - get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_MCASTVIMS, &(v->settings->use_vims_mcast) ); - get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_SCALE, &(v->settings->zoom) ); - get_fstr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_FPS, &(v->settings->output_fps ) ); - get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_PMODE, &(v->uc->playback_mode) ); - get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_PID, &(v->uc->sample_id ) ); - get_istr( doc, cur, (const xmlChar*) XML_CONFIG_BACKFX, &(v->settings->fxdepth) ); - get_istr( doc, cur, (const xmlChar*) XML_CONFIG_COMPOSITEMODE, &(v->settings->composite) ); - get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SCALERFLAGS, &(v->settings->sws_templ.flags)); - get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_FILEASSAMPLE, &(v->uc->file_as_sample)); - get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_OSD, &(v->use_osd)); + while( cur != NULL ) + { + get_cstr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_SAMPLELIST, sample_list,sizeof(sample_list) ); + get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_PORTNUM, &(v->uc->port) ); + get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_PRIOUTPUT, &(v->video_out) ); + get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_SDLSIZEX, &(v->bes_width) ); + get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_SDLSIZEY, &(v->bes_height) ); + get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_AUDIO, &(v->audio) ); + get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_SYNC, &(v->sync_correction) ); + get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_TIMER, &(v->uc->use_timer) ); + get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_GEOX, &(v->uc->geox) ); + get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_GEOY, &(v->uc->geoy) ); + get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_BEZERK, &(v->no_bezerk) ); + get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_COLOR, &c ); + get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_YCBCR, &(v->pixel_format) ); + get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_WIDTH, &(v->video_output_width) ); + get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_HEIGHT,&(v->video_output_height) ); + get_fstr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_DFPS, &(v->dummy->fps ) ); +// get_cstr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_NORM, &(v->dummy->norm) ); + get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_DUMMY, &(v->dummy->active) ); + get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_MCASTOSC, &(v->settings->use_mcast) ); + get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_MCASTVIMS, &(v->settings->use_vims_mcast) ); + get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_SCALE, &(v->settings->zoom) ); + get_fstr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_FPS, &(v->settings->output_fps ) ); + get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_PMODE, &(v->uc->playback_mode) ); + get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_PID, &(v->uc->sample_id ) ); + get_istr( doc, cur, (const xmlChar*) XML_CONFIG_BACKFX, &(v->settings->fxdepth) ); + get_istr( doc, cur, (const xmlChar*) XML_CONFIG_COMPOSITEMODE, &(v->settings->composite) ); + get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SCALERFLAGS, &(v->settings->sws_templ.flags)); + get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_FILEASSAMPLE, &(v->uc->file_as_sample)); + get_istr( doc, cur, (const xmlChar*) XML_CONFIG_SETTING_OSD, &(v->use_osd)); - cur = cur->next; - } + cur = cur->next; + } - veejay_set_colors( c ); - v->settings->action_scheduler.sl = vj_strdup( sample_list ); - veejay_msg(VEEJAY_MSG_DEBUG, "Scheduled '%s' for restart", sample_list ); - - v->settings->action_scheduler.state = 1; + veejay_set_colors( c ); + v->settings->action_scheduler.sl = vj_strdup( sample_list ); + veejay_msg(VEEJAY_MSG_DEBUG, "Scheduled '%s' for restart", sample_list ); + + v->settings->action_scheduler.state = 1; } void vj_event_xml_new_keyb_event( void *ptr, xmlDocPtr doc, xmlNodePtr cur ) { - int key = 0; - int key_mod = 0; - int event_id = 0; - - char msg[4096]; - veejay_memset(msg,0,sizeof(msg)); + int key = 0; + int key_mod = 0; + int event_id = 0; + + char msg[4096]; + veejay_memset(msg,0,sizeof(msg)); - while( cur != NULL ) - { - get_istr( doc, cur, (const xmlChar*) XML_CONFIG_KEY_VIMS, &event_id ); - get_cstr( doc, cur, (const xmlChar*) XML_CONFIG_KEY_EXTRA, msg,sizeof(msg) ); - get_istr( doc, cur, (const xmlChar*) XML_CONFIG_KEY_SYM, &key ); - get_istr( doc, cur, (const xmlChar*) XML_CONFIG_KEY_MOD, &key_mod ); - cur = cur->next; - } + while( cur != NULL ) + { + get_istr( doc, cur, (const xmlChar*) XML_CONFIG_KEY_VIMS, &event_id ); + get_cstr( doc, cur, (const xmlChar*) XML_CONFIG_KEY_EXTRA, msg,sizeof(msg) ); + get_istr( doc, cur, (const xmlChar*) XML_CONFIG_KEY_SYM, &key ); + get_istr( doc, cur, (const xmlChar*) XML_CONFIG_KEY_MOD, &key_mod ); + cur = cur->next; + } - if( event_id <= 0 ) - { - veejay_msg(VEEJAY_MSG_ERROR, "Invalid key '%s' in configuration file", XML_CONFIG_KEY_VIMS); - return; - } + if( event_id <= 0 ) + { + veejay_msg(VEEJAY_MSG_ERROR, "Invalid key '%s' in configuration file", XML_CONFIG_KEY_VIMS); + return; + } - if( event_id >= VIMS_BUNDLE_START && event_id < VIMS_BUNDLE_END ) - { - int b_key = 0, b_mod = 0; - if( vj_event_bundle_exists(event_id)) - { - vj_msg_bundle *mm = vj_event_bundle_get( event_id ); - if( mm ) - { - b_key = mm->accelerator; - b_mod = mm->modifier; - } - if(!override_keyboard) - { - veejay_msg(VEEJAY_MSG_WARNING, - "Bundle %d already exists in VIMS system! (Bundle in configfile was ignored)",event_id); - return; - } - else - { - if(vj_event_bundle_del(event_id) != 0) - { - veejay_msg(0, "Unable to delete bundle %d", event_id); - return; - } - } - } + if( event_id >= VIMS_BUNDLE_START && event_id < VIMS_BUNDLE_END ) + { + int b_key = 0, b_mod = 0; + if( vj_event_bundle_exists(event_id)) + { + vj_msg_bundle *mm = vj_event_bundle_get( event_id ); + if( mm ) + { + b_key = mm->accelerator; + b_mod = mm->modifier; + } + if(!override_keyboard) + { + veejay_msg(VEEJAY_MSG_WARNING, + "Bundle %d already exists in VIMS system! (Bundle in configfile was ignored)",event_id); + return; + } + else + { + if(vj_event_bundle_del(event_id) != 0) + { + veejay_msg(0, "Unable to delete bundle %d", event_id); + return; + } + } + } - vj_msg_bundle *m = vj_event_bundle_new( msg, event_id); - if(!m) - { - veejay_msg(VEEJAY_MSG_ERROR, "Failed to create new Bundle %d - [%s]", event_id, msg ); - return; - } - - m->accelerator = b_key; - m->modifier = b_mod; + vj_msg_bundle *m = vj_event_bundle_new( msg, event_id); + if(!m) + { + veejay_msg(VEEJAY_MSG_ERROR, "Failed to create new Bundle %d - [%s]", event_id, msg ); + return; + } + + m->accelerator = b_key; + m->modifier = b_mod; - if(vj_event_bundle_store(m)) - veejay_msg(VEEJAY_MSG_DEBUG, "Added bundle %d , trigger with key %d (mod %d)", event_id, b_key, b_mod); - } + if(vj_event_bundle_store(m)) + veejay_msg(VEEJAY_MSG_DEBUG, "Added bundle %d , trigger with key %d (mod %d)", event_id, b_key, b_mod); + } #ifdef HAVE_SDL - if( key > 0 && key_mod >= 0) - { - if( override_keyboard ) - vj_event_unregister_keyb_event( key, key_mod ); - if( !vj_event_register_keyb_event( event_id, key, key_mod, NULL )) - veejay_msg(VEEJAY_MSG_ERROR, "Attaching key %d + %d to Bundle %d ", key,key_mod,event_id); - } + if( key > 0 && key_mod >= 0) + { + if( override_keyboard ) + vj_event_unregister_keyb_event( key, key_mod ); + if( !vj_event_register_keyb_event( event_id, key, key_mod, NULL )) + veejay_msg(VEEJAY_MSG_ERROR, "Attaching key %d + %d to Bundle %d ", key,key_mod,event_id); + } #endif } int veejay_load_action_file( void *ptr, char *file_name ) { - xmlDocPtr doc; - xmlNodePtr cur; + xmlDocPtr doc; + xmlNodePtr cur; - veejay_t *v = (veejay_t*) ptr; - if(!file_name) - return 0; + veejay_t *v = (veejay_t*) ptr; + if(!file_name) + return 0; - doc = xmlParseFile( file_name ); + doc = xmlParseFile( file_name ); - if(doc==NULL) { - veejay_msg(0, "Cannot read file '%s'",file_name); - return 0; - } - - cur = xmlDocGetRootElement( doc ); - if( cur == NULL) - { - veejay_msg(0, "Cannot get document root from '%s'",file_name); - xmlFreeDoc(doc); - return 0; - } + if(doc==NULL) { + veejay_msg(0, "Cannot read file '%s'",file_name); + return 0; + } + + cur = xmlDocGetRootElement( doc ); + if( cur == NULL) + { + veejay_msg(0, "Cannot get document root from '%s'",file_name); + xmlFreeDoc(doc); + return 0; + } - if( xmlStrcmp( cur->name, (const xmlChar *) XML_CONFIG_FILE)) - { - veejay_msg(0, "This is not a veejay configuration file."); - xmlFreeDoc(doc); - return 0; - } + if( xmlStrcmp( cur->name, (const xmlChar *) XML_CONFIG_FILE)) + { + veejay_msg(0, "This is not a veejay configuration file."); + xmlFreeDoc(doc); + return 0; + } - cur = cur->xmlChildrenNode; - override_keyboard = 1; - while( cur != NULL ) - { - if( !xmlStrcmp( cur->name, (const xmlChar*) XML_CONFIG_SETTINGS ) ) - { - vj_event_xml_parse_config( v, doc, cur->xmlChildrenNode ); - } - if( !xmlStrcmp( cur->name, (const xmlChar *) XML_CONFIG_EVENT )) - { - vj_event_xml_new_keyb_event( (void*)v, doc, cur->xmlChildrenNode ); - } - cur = cur->next; - } - override_keyboard = 0; - xmlFreeDoc(doc); - return 1; + cur = cur->xmlChildrenNode; + override_keyboard = 1; + while( cur != NULL ) + { + if( !xmlStrcmp( cur->name, (const xmlChar*) XML_CONFIG_SETTINGS ) ) + { + vj_event_xml_parse_config( v, doc, cur->xmlChildrenNode ); + } + if( !xmlStrcmp( cur->name, (const xmlChar *) XML_CONFIG_EVENT )) + { + vj_event_xml_new_keyb_event( (void*)v, doc, cur->xmlChildrenNode ); + } + cur = cur->next; + } + override_keyboard = 0; + xmlFreeDoc(doc); + return 1; } -void vj_event_format_xml_event( xmlNodePtr node, int event_id ) +void vj_event_format_xml_event( xmlNodePtr node, int event_id ) { - int key_id=0; - int key_mod=-1; + int key_id=0; + int key_mod=-1; - if( event_id >= VIMS_BUNDLE_START && event_id < VIMS_BUNDLE_END) - { - /* its a Bundle !*/ - vj_msg_bundle *m = vj_event_bundle_get( event_id ); - if(!m) - { - veejay_msg(VEEJAY_MSG_ERROR, "bundle %d does not exist", event_id); - return; - } - - put_xml_str( node, XML_CONFIG_KEY_EXTRA, m->bundle ); - } - /* Put all known VIMS so we can detect differences in runtime + if( event_id >= VIMS_BUNDLE_START && event_id < VIMS_BUNDLE_END) + { + /* its a Bundle !*/ + vj_msg_bundle *m = vj_event_bundle_get( event_id ); + if(!m) + { + veejay_msg(VEEJAY_MSG_ERROR, "bundle %d does not exist", event_id); + return; + } + + put_xml_str( node, XML_CONFIG_KEY_EXTRA, m->bundle ); + } + /* Put all known VIMS so we can detect differences in runtime some Events will not exist if SDL, Jack, DV, Video4Linux would be missing */ - put_xml_int( node, XML_CONFIG_KEY_VIMS, event_id ); - + put_xml_int( node, XML_CONFIG_KEY_VIMS, event_id ); + #ifdef HAVE_SDL - if(key_id > 0 && key_mod >= 0 ) - { - put_xml_int( node, XML_CONFIG_KEY_SYM, key_id ); - put_xml_int( node, XML_CONFIG_KEY_MOD, key_mod ); - } + if(key_id > 0 && key_mod >= 0 ) + { + put_xml_int( node, XML_CONFIG_KEY_SYM, key_id ); + put_xml_int( node, XML_CONFIG_KEY_MOD, key_mod ); + } #endif } void vj_event_write_actionfile(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - char file_name[512]; - int args[2] = {0,0}; - int i; - //veejay_t *v = (veejay_t*) ptr; - xmlDocPtr doc; - xmlNodePtr rootnode,childnode; - P_A(args,file_name,format,ap); - doc = xmlNewDoc( (const xmlChar*) "1.0" ); - rootnode = xmlNewDocNode( doc, NULL, (const xmlChar*) XML_CONFIG_FILE,NULL); - xmlDocSetRootElement( doc, rootnode ); + veejay_t *v = (veejay_t*) ptr; + char file_name[512]; + int args[2] = {0,0}; + int i; + //veejay_t *v = (veejay_t*) ptr; + xmlDocPtr doc; + xmlNodePtr rootnode,childnode; + P_A(args,file_name,format,ap); + doc = xmlNewDoc( (const xmlChar*) "1.0" ); + rootnode = xmlNewDocNode( doc, NULL, (const xmlChar*) XML_CONFIG_FILE,NULL); + xmlDocSetRootElement( doc, rootnode ); - childnode = xmlNewChild( rootnode, NULL, (const xmlChar*) XML_CONFIG_SETTINGS, NULL ); - vj_event_format_xml_settings( v, childnode ); + childnode = xmlNewChild( rootnode, NULL, (const xmlChar*) XML_CONFIG_SETTINGS, NULL ); + vj_event_format_xml_settings( v, childnode ); - for( i = 0; i < VIMS_MAX; i ++ ) - { - if( net_list[i].list_id > 0 ) - { - childnode = xmlNewChild( rootnode,NULL,(const xmlChar*) XML_CONFIG_EVENT ,NULL); - vj_event_format_xml_event( childnode, i ); - } - } - xmlSaveFormatFile( file_name, doc, 1); + for( i = 0; i < VIMS_MAX; i ++ ) + { + if( net_list[i].list_id > 0 ) + { + childnode = xmlNewChild( rootnode,NULL,(const xmlChar*) XML_CONFIG_EVENT ,NULL); + vj_event_format_xml_event( childnode, i ); + } + } + xmlSaveFormatFile( file_name, doc, 1); - veejay_msg(VEEJAY_MSG_INFO, "Saved Action file as '%s'" , file_name ); - xmlFreeDoc(doc); + veejay_msg(VEEJAY_MSG_INFO, "Saved Action file as '%s'" , file_name ); + xmlFreeDoc(doc); } #endif // XML2 -void vj_event_read_file( void *ptr, const char format[], va_list ap ) +void vj_event_read_file( void *ptr, const char format[], va_list ap ) { - char file_name[512]; - int args[1]; + char file_name[512]; + int args[1]; - P_A(args,file_name,format,ap); + P_A(args,file_name,format,ap); #ifdef HAVE_XML2 - if(veejay_load_action_file( ptr, file_name )) - veejay_msg(VEEJAY_MSG_INFO, "Loaded Action file '%s'", file_name ); - else - veejay_msg(VEEJAY_MSG_ERROR,"Unable to load Action file '%s'", file_name ); + if(veejay_load_action_file( ptr, file_name )) + veejay_msg(VEEJAY_MSG_INFO, "Loaded Action file '%s'", file_name ); + else + veejay_msg(VEEJAY_MSG_ERROR,"Unable to load Action file '%s'", file_name ); #endif } #ifdef HAVE_SDL -vims_key_list *vj_event_get_keys( int event_id ) +vims_key_list *vj_event_get_keys( int event_id ) { - vims_key_list *list = vj_calloc( sizeof(vims_key_list)); - vims_key_list *tree = list; - vims_key_list *next = NULL; - if ( event_id >= VIMS_BUNDLE_START && event_id < VIMS_BUNDLE_END ) + vims_key_list *list = vj_calloc( sizeof(vims_key_list)); + vims_key_list *tree = list; + vims_key_list *next = NULL; + if ( event_id >= VIMS_BUNDLE_START && event_id < VIMS_BUNDLE_END ) { if( vj_event_bundle_exists( event_id )) { @@ -2111,8 +2113,8 @@ vims_key_list *vj_event_get_keys( int event_id ) list->key_mod = bun->modifier; } } - return list; - } + return list; + } if(!hash_isempty( keyboard_events )) { @@ -2125,3130 +2127,3130 @@ vims_key_list *vj_event_get_keys( int event_id ) ev = hnode_get( node ); if(ev && ev->event_id == event_id) { - next = vj_calloc( sizeof(vims_key_list)); - - tree->key_symbol = ev->key_symbol; - tree->key_mod = ev->key_mod; - tree->args = ev->arguments; - tree->arg_len = ev->arg_len; - tree->next = next; - - tree = next; + next = vj_calloc( sizeof(vims_key_list)); + + tree->key_symbol = ev->key_symbol; + tree->key_mod = ev->key_mod; + tree->args = ev->arguments; + tree->arg_len = ev->arg_len; + tree->next = next; + + tree = next; } } } - return list; + return list; } -void vj_event_unregister_keyb_event( int sdl_key, int modifier ) +void vj_event_unregister_keyb_event( int sdl_key, int modifier ) { - int index = (modifier * SDLK_LAST) + sdl_key; - vj_keyboard_event *ev = get_keyboard_event( index ); - if(ev) - { - vj_msg_bundle *m = vj_event_bundle_get( ev->event_id ); - if(m) - { - m->accelerator = 0; - m->modifier = 0; + int index = (modifier * SDLK_LAST) + sdl_key; + vj_keyboard_event *ev = get_keyboard_event( index ); + if(ev) + { + vj_msg_bundle *m = vj_event_bundle_get( ev->event_id ); + if(m) + { + m->accelerator = 0; + m->modifier = 0; - vj_event_bundle_update( m, ev->event_id ); - veejay_msg(VEEJAY_MSG_DEBUG, "Bundle %d dropped key binding", - ev->event_id); - } - if( ev->vims ) - free(ev->vims); - if( ev->arguments) - free(ev->arguments ); - veejay_memset(ev, 0, sizeof( vj_keyboard_event )); + vj_event_bundle_update( m, ev->event_id ); + veejay_msg(VEEJAY_MSG_DEBUG, "Bundle %d dropped key binding", + ev->event_id); + } + if( ev->vims ) + free(ev->vims); + if( ev->arguments) + free(ev->arguments ); + veejay_memset(ev, 0, sizeof( vj_keyboard_event )); - del_keyboard_event( index ); - } - else - { - veejay_msg(0,"No event was attached to key %d : %d", modifier, sdl_key); - } + del_keyboard_event( index ); + } + else + { + veejay_msg(0,"No event was attached to key %d : %d", modifier, sdl_key); + } } -int vj_event_register_keyb_event(int event_id, int symbol, int modifier, const char *value) +int vj_event_register_keyb_event(int event_id, int symbol, int modifier, const char *value) { - int offset = SDLK_LAST * modifier; - int index = offset + symbol; - if( keyboard_event_exists( index )) - { - vj_keyboard_event *ff = get_keyboard_event(index); - if(ff) - { - if(ff->arguments) free(ff->arguments); - if( value ) ff->arguments = vj_strdup(value); - if( value ) ff->arg_len = strlen(value); else ff->arg_len = 0; - ff->event_id = event_id; - veejay_msg( VEEJAY_MSG_DEBUG,"Updated keybinding %d + %d to VIMS %03d:%s;",modifier,symbol, ff->event_id, value); - return 1; - } - return 0; - } + int offset = SDLK_LAST * modifier; + int index = offset + symbol; + if( keyboard_event_exists( index )) + { + vj_keyboard_event *ff = get_keyboard_event(index); + if(ff) + { + if(ff->arguments) free(ff->arguments); + if( value ) ff->arguments = vj_strdup(value); + if( value ) ff->arg_len = strlen(value); else ff->arg_len = 0; + ff->event_id = event_id; + veejay_msg( VEEJAY_MSG_DEBUG,"Updated keybinding %d + %d to VIMS %03d:%s;",modifier,symbol, ff->event_id, value); + return 1; + } + return 0; + } - if( vj_event_bundle_exists(event_id)) - { - vj_keyboard_event *ev = get_keyboard_event( index ); - if( ev ) - { - ev->key_symbol = symbol; - ev->key_mod = modifier; - veejay_msg(VEEJAY_MSG_INFO, - "Updated Bundle ID %d with keybinding %d+%d",ev->event_id, modifier, symbol ); - return 1; - } - } + if( vj_event_bundle_exists(event_id)) + { + vj_keyboard_event *ev = get_keyboard_event( index ); + if( ev ) + { + ev->key_symbol = symbol; + ev->key_mod = modifier; + veejay_msg(VEEJAY_MSG_INFO, + "Updated Bundle ID %d with keybinding %d+%d",ev->event_id, modifier, symbol ); + return 1; + } + } - vj_keyboard_event *ev = NULL; + vj_keyboard_event *ev = NULL; - if( event_id >= VIMS_BUNDLE_START && event_id < VIMS_BUNDLE_END ) - { - char val[10]; - vj_msg_bundle *m = vj_event_bundle_get( event_id ); - sprintf(val, "%d", event_id ); - if( m ) - { - m->accelerator = symbol; - m->modifier = modifier; - - vj_event_bundle_update( m, event_id ); - - ev = new_keyboard_event( symbol, modifier, val, event_id ); - veejay_msg(VEEJAY_MSG_DEBUG, "Bundle %d triggered by key %d (mod %d)", event_id,symbol, modifier); - } - } - else - { - ev = new_keyboard_event( symbol, modifier, value, event_id ); - } + if( event_id >= VIMS_BUNDLE_START && event_id < VIMS_BUNDLE_END ) + { + char val[10]; + vj_msg_bundle *m = vj_event_bundle_get( event_id ); + sprintf(val, "%d", event_id ); + if( m ) + { + m->accelerator = symbol; + m->modifier = modifier; + + vj_event_bundle_update( m, event_id ); + + ev = new_keyboard_event( symbol, modifier, val, event_id ); + veejay_msg(VEEJAY_MSG_DEBUG, "Bundle %d triggered by key %d (mod %d)", event_id,symbol, modifier); + } + } + else + { + ev = new_keyboard_event( symbol, modifier, value, event_id ); + } - if(!ev) - return 0; - - hnode_t *node = hnode_create( ev ); - if(!node) - { - return 0; - } + if(!ev) + return 0; + + hnode_t *node = hnode_create( ev ); + if(!node) + { + return 0; + } #ifdef ARCH_X86_64 - uint64_t tid = (uint64_t) index; + uint64_t tid = (uint64_t) index; #else - uint32_t tid = (uint32_t) index; + uint32_t tid = (uint32_t) index; #endif - hnode_t *old = hash_lookup( keyboard_events, (void*) tid ); - if(old) { - hash_delete( keyboard_events, old ); - } + hnode_t *old = hash_lookup( keyboard_events, (void*) tid ); + if(old) { + hash_delete( keyboard_events, old ); + } - hash_insert( keyboard_events, node, (void*) tid ); - - return 1; + hash_insert( keyboard_events, node, (void*) tid ); + + return 1; } #endif -static void vj_event_init_network_events() +static void vj_event_init_network_events() { - int i; - int net_id = 0; - for( i = 0; i <= 600; i ++ ) - { - net_list[ net_id ].act = - (vj_event) vj_event_vevo_get_event_function( i ); + int i; + int net_id = 0; + for( i = 0; i <= 600; i ++ ) + { + net_list[ net_id ].act = + (vj_event) vj_event_vevo_get_event_function( i ); - if( net_list[ net_id ].act ) - { - net_list[net_id].list_id = i; - net_id ++; - } - } - veejay_msg(VEEJAY_MSG_DEBUG, "Registered %d VIMS events", net_id ); + if( net_list[ net_id ].act ) + { + net_list[net_id].list_id = i; + net_id ++; + } + } + veejay_msg(VEEJAY_MSG_DEBUG, "Registered %d VIMS events", net_id ); } #ifdef HAVE_SDL char *find_keyboard_default(int id) { - char *result = NULL; - int i; - for( i = 1; vj_event_default_sdl_keys[i].event_id != 0; i ++ ) - { - if( vj_event_default_sdl_keys[i].event_id == id ) - { - if( vj_event_default_sdl_keys[i].value != NULL ) - result = vj_strdup( vj_event_default_sdl_keys[i].value ); - break; - } - } - return result; + char *result = NULL; + int i; + for( i = 1; vj_event_default_sdl_keys[i].event_id != 0; i ++ ) + { + if( vj_event_default_sdl_keys[i].event_id == id ) + { + if( vj_event_default_sdl_keys[i].value != NULL ) + result = vj_strdup( vj_event_default_sdl_keys[i].value ); + break; + } + } + return result; } -static void vj_event_load_keyboard_configuration(veejay_t *info) +static void vj_event_load_keyboard_configuration(veejay_t *info) { - char path[1024]; - snprintf(path,sizeof(path), "%s/keyboard.cfg", info->homedir); - FILE *f = fopen( path,"r" ); - if(!f) { - veejay_msg(VEEJAY_MSG_WARNING,"No user defined keyboard configuration in %s", path ); - return; - } + char path[1024]; + snprintf(path,sizeof(path), "%s/keyboard.cfg", info->homedir); + FILE *f = fopen( path,"r" ); + if(!f) { + veejay_msg(VEEJAY_MSG_WARNING,"No user defined keyboard configuration in %s", path ); + return; + } - char msg[100]; - int event_id = 0; - int key = 0; - int mod = 0; - int keyb_events = 0; - while( (fscanf( f, "%d,%d,%d,\"%[^\"]\"", &event_id,&key,&mod,msg ) ) == 4 ) { - if( vj_event_register_keyb_event( - event_id, - key, - mod, - msg ) ) { - keyb_events++; - } else { - veejay_msg(VEEJAY_MSG_ERROR,"VIMS event %03d does not exist", event_id ); - } - } + char msg[100]; + int event_id = 0; + int key = 0; + int mod = 0; + int keyb_events = 0; + while( (fscanf( f, "%d,%d,%d,\"%[^\"]\"", &event_id,&key,&mod,msg ) ) == 4 ) { + if( vj_event_register_keyb_event( + event_id, + key, + mod, + msg ) ) { + keyb_events++; + } else { + veejay_msg(VEEJAY_MSG_ERROR,"VIMS event %03d does not exist", event_id ); + } + } - if( keyb_events > 0 ) - veejay_msg(VEEJAY_MSG_INFO,"Loaded %d keyboard events from %s", keyb_events, path ); + if( keyb_events > 0 ) + veejay_msg(VEEJAY_MSG_INFO,"Loaded %d keyboard events from %s", keyb_events, path ); - fclose(f); + fclose(f); } -static void vj_event_init_keyboard_defaults() +static void vj_event_init_keyboard_defaults() { - int i; - int keyb_events = 0; - for( i = 1; vj_event_default_sdl_keys[i].event_id != 0; i ++ ) - { - if( vj_event_register_keyb_event( - vj_event_default_sdl_keys[i].event_id, - vj_event_default_sdl_keys[i].key_sym, - vj_event_default_sdl_keys[i].key_mod, - vj_event_default_sdl_keys[i].value )) - { - keyb_events++; - } - else - { + int i; + int keyb_events = 0; + for( i = 1; vj_event_default_sdl_keys[i].event_id != 0; i ++ ) + { + if( vj_event_register_keyb_event( + vj_event_default_sdl_keys[i].event_id, + vj_event_default_sdl_keys[i].key_sym, + vj_event_default_sdl_keys[i].key_mod, + vj_event_default_sdl_keys[i].value )) + { + keyb_events++; + } + else + { - veejay_msg(VEEJAY_MSG_ERROR, - "VIMS event %03d does not exist ", vj_event_default_sdl_keys[i].event_id ); - } - } + veejay_msg(VEEJAY_MSG_ERROR, + "VIMS event %03d does not exist ", vj_event_default_sdl_keys[i].event_id ); + } + } } #endif void vj_event_init(void *ptr) { - int i; -#ifdef HAVE_SDL - veejay_memset( keyboard_event_map_, 0, sizeof(keyboard_event_map_)); + int i; +#ifdef HAVE_SDL + veejay_memset( keyboard_event_map_, 0, sizeof(keyboard_event_map_)); #endif - vj_init_vevo_events(); + vj_init_vevo_events(); #ifdef HAVE_SDL - if( !(keyboard_events = hash_create( HASHCOUNT_T_MAX, int_bundle_compare, int_bundle_hash))) - { - veejay_msg(VEEJAY_MSG_ERROR, "Cannot initialize hash for keyboard events"); - return; - } + if( !(keyboard_events = hash_create( HASHCOUNT_T_MAX, int_bundle_compare, int_bundle_hash))) + { + veejay_msg(VEEJAY_MSG_ERROR, "Cannot initialize hash for keyboard events"); + return; + } #endif - for(i=0; i < VIMS_MAX; i++) - { - net_list[i].act = vj_event_none; - net_list[i].list_id = 0; - } + for(i=0; i < VIMS_MAX; i++) + { + net_list[i].act = vj_event_none; + net_list[i].list_id = 0; + } - if( !(BundleHash = hash_create(HASHCOUNT_T_MAX, int_bundle_compare, int_bundle_hash))) - { - veejay_msg(VEEJAY_MSG_ERROR, "Cannot initialize hashtable for message bundles"); - return; - } + if( !(BundleHash = hash_create(HASHCOUNT_T_MAX, int_bundle_compare, int_bundle_hash))) + { + veejay_msg(VEEJAY_MSG_ERROR, "Cannot initialize hashtable for message bundles"); + return; + } - vj_event_init_network_events(); + vj_event_init_network_events(); #ifdef HAVE_SDL - vj_event_init_keyboard_defaults(); - if(ptr) vj_event_load_keyboard_configuration( (veejay_t*) ptr ); + vj_event_init_keyboard_defaults(); + if(ptr) vj_event_load_keyboard_configuration( (veejay_t*) ptr ); #endif - init_vims_for_macro(); + init_vims_for_macro(); } #ifdef HAVE_SDL -static void vj_event_destroy_hash( hash_t *h) +static void vj_event_destroy_hash( hash_t *h) { - if(!hash_isempty(h)) { - hscan_t s = (hscan_t) {0}; - hash_scan_begin( &s, h ); - hnode_t *node = NULL; - while((node = hash_scan_next(&s)) != NULL ) { - void *ptr = hnode_get(node); - if(ptr) destroy_keyboard_event(ptr); - } - hash_free_nodes( h ); - } - hash_destroy( h ); + if(!hash_isempty(h)) { + hscan_t s = (hscan_t) {0}; + hash_scan_begin( &s, h ); + hnode_t *node = NULL; + while((node = hash_scan_next(&s)) != NULL ) { + void *ptr = hnode_get(node); + if(ptr) destroy_keyboard_event(ptr); + } + hash_free_nodes( h ); + } + hash_destroy( h ); } #endif static void vj_event_destroy_bundles( hash_t *h ) { - if(!hash_isempty(h)) { - hscan_t s = (hscan_t) {0}; - hash_scan_begin( &s, h ); - hnode_t *node = NULL; - while((node = hash_scan_next(&s)) != NULL ) { - vj_msg_bundle *m = hnode_get(node); - if(m) { - if( m->bundle ) - free(m->bundle); - free(m); - } - } - hash_free_nodes( h ); - } - hash_destroy( h ); + if(!hash_isempty(h)) { + hscan_t s = (hscan_t) {0}; + hash_scan_begin( &s, h ); + hnode_t *node = NULL; + while((node = hash_scan_next(&s)) != NULL ) { + vj_msg_bundle *m = hnode_get(node); + if(m) { + if( m->bundle ) + free(m->bundle); + free(m); + } + } + hash_free_nodes( h ); + } + hash_destroy( h ); } -void vj_event_destroy() +void vj_event_destroy() { #ifdef HAVE_SDL - if(keyboard_events) vj_event_destroy_hash( keyboard_events ); + if(keyboard_events) vj_event_destroy_hash( keyboard_events ); #endif - if(BundleHash) vj_event_destroy_bundles( BundleHash ); + if(BundleHash) vj_event_destroy_bundles( BundleHash ); - if(sample_image_buffer) - free(sample_image_buffer); + if(sample_image_buffer) + free(sample_image_buffer); - vj_picture_free(); + vj_picture_free(); - vj_event_vevo_free(); + vj_event_vevo_free(); - int i; - for( i = 0; i < MAX_MACRO_BANKS; i ++ ) - { - macro_port_ = macro_bank_[i]; - if(macro_port_) - reset_macro_(); - } + int i; + for( i = 0; i < MAX_MACRO_BANKS; i ++ ) + { + macro_port_ = macro_bank_[i]; + if(macro_port_) + reset_macro_(); + } } void vj_event_linkclose(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*)ptr; - veejay_msg(VEEJAY_MSG_INFO, "Remote requested session-end, quitting Client"); - int i = v->uc->current_link; - if( v->vjs[0] ) + veejay_t *v = (veejay_t*)ptr; + veejay_msg(VEEJAY_MSG_INFO, "Remote requested session-end, quitting Client"); + int i = v->uc->current_link; + if( v->vjs[0] ) _vj_server_del_client( v->vjs[0], i ); - if( v->vjs[1] ) + if( v->vjs[1] ) _vj_server_del_client( v->vjs[1], i ); - if( v->vjs[2] ) + if( v->vjs[2] ) _vj_server_del_client( v->vjs[3], i ); } void vj_event_quit(void *ptr, const char format[], va_list ap) { - int i; - veejay_t *v = (veejay_t*)ptr; - veejay_msg(VEEJAY_MSG_INFO, "Remote requested session-end, quitting Veejay"); + int i; + veejay_t *v = (veejay_t*)ptr; + veejay_msg(VEEJAY_MSG_INFO, "Remote requested session-end, quitting Veejay"); //@ hang up clients - for( i = 0; i < VJ_MAX_CONNECTIONS; i ++ ) - { - if( vj_server_link_used( v->vjs[VEEJAY_PORT_CMD], i ) ) - { - _vj_server_del_client(v->vjs[VEEJAY_PORT_CMD],i); - _vj_server_del_client(v->vjs[VEEJAY_PORT_STA],i); - _vj_server_del_client(v->vjs[VEEJAY_PORT_DAT],i); - } - } + for( i = 0; i < VJ_MAX_CONNECTIONS; i ++ ) + { + if( vj_server_link_used( v->vjs[VEEJAY_PORT_CMD], i ) ) + { + _vj_server_del_client(v->vjs[VEEJAY_PORT_CMD],i); + _vj_server_del_client(v->vjs[VEEJAY_PORT_STA],i); + _vj_server_del_client(v->vjs[VEEJAY_PORT_DAT],i); + } + } - veejay_quit(v); + veejay_quit(v); } -void vj_event_sample_mode(void *ptr, const char format[], va_list ap) +void vj_event_sample_mode(void *ptr, const char format[], va_list ap) { } -void vj_event_set_framerate( void *ptr, const char format[] , va_list ap ) +void vj_event_set_framerate( void *ptr, const char format[] , va_list ap ) { - veejay_t *v = (veejay_t*) ptr; + veejay_t *v = (veejay_t*) ptr; int args[2]; char *s = NULL; P_A(args,s,format,ap); - float new_fps = (float) args[0] * 0.01; + float new_fps = (float) args[0] * 0.01; - if(new_fps == 0.0 ) - new_fps = v->current_edit_list->video_fps; - else if (new_fps <= 0.25 ) { - new_fps = 0.25f; - veejay_msg(VEEJAY_MSG_WARNING, "Limited new framerate to %2.2f ", new_fps ); - } + if(new_fps == 0.0 ) + new_fps = v->current_edit_list->video_fps; + else if (new_fps <= 0.25 ) { + new_fps = 0.25f; + veejay_msg(VEEJAY_MSG_WARNING, "Limited new framerate to %2.2f ", new_fps ); + } - if( v->audio == AUDIO_PLAY ) { - veejay_msg(VEEJAY_MSG_WARNING,"Sorry, can only change framerate when started without audio playback"); - }else { - veejay_set_framerate( v, new_fps ); - veejay_msg(VEEJAY_MSG_INFO, "Playback engine is now playing at %2.2f FPS", new_fps ); - } + if( v->audio == AUDIO_PLAY ) { + veejay_msg(VEEJAY_MSG_WARNING,"Sorry, can only change framerate when started without audio playback"); + }else { + veejay_set_framerate( v, new_fps ); + veejay_msg(VEEJAY_MSG_INFO, "Playback engine is now playing at %2.2f FPS", new_fps ); + } } -void vj_event_sync_correction( void *ptr,const char format[], va_list ap ) +void vj_event_sync_correction( void *ptr,const char format[], va_list ap ) { - veejay_t *v = (veejay_t*) ptr; - int args[2]; - char *s = NULL; + veejay_t *v = (veejay_t*) ptr; + int args[2]; + char *s = NULL; - P_A(args,s,format,ap); + P_A(args,s,format,ap); - if(args[0] == 0 ) - { - v->sync_correction = 0; - veejay_msg(VEEJAY_MSG_INFO, "Sync correction disabled"); - } - else if( args[0] == 1 ) - { - v->sync_correction = 1; - veejay_msg(VEEJAY_MSG_INFO, "Sync correction enabled"); - } + if(args[0] == 0 ) + { + v->sync_correction = 0; + veejay_msg(VEEJAY_MSG_INFO, "Sync correction disabled"); + } + else if( args[0] == 1 ) + { + v->sync_correction = 1; + veejay_msg(VEEJAY_MSG_INFO, "Sync correction enabled"); + } } void vj_event_bezerk(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - if(v->no_bezerk) v->no_bezerk = 0; else v->no_bezerk = 1; - if(v->no_bezerk==1) - veejay_msg(VEEJAY_MSG_INFO,"Bezerk On :No sample-restart when changing input channels"); - else - veejay_msg(VEEJAY_MSG_INFO,"Bezerk Off :Sample-restart when changing input channels"); + veejay_t *v = (veejay_t*) ptr; + if(v->no_bezerk) v->no_bezerk = 0; else v->no_bezerk = 1; + if(v->no_bezerk==1) + veejay_msg(VEEJAY_MSG_INFO,"Bezerk On :No sample-restart when changing input channels"); + else + veejay_msg(VEEJAY_MSG_INFO,"Bezerk Off :Sample-restart when changing input channels"); } void vj_event_no_caching(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - if(v->no_caching) - v->no_caching = 0; - else - v->no_caching = 1; + veejay_t *v = (veejay_t*) ptr; + if(v->no_caching) + v->no_caching = 0; + else + v->no_caching = 1; - if(v->no_caching==1) - { - int i = 0; - int k = 0; - int n = sample_highest(); - vj_el_break_cache( v->edit_list ); - for( i = 1; i <= n; i ++ ) { - editlist *e = sample_get_editlist(i); - if(e) { - vj_el_break_cache(e); k++; - } - } - veejay_msg(VEEJAY_MSG_INFO,"Cleared %d samples from cache.", k ); - } - else - { - vj_el_setup_cache( v->current_edit_list ); - veejay_msg(VEEJAY_MSG_INFO,"Sample FX Cache enabled : Recycling identicial samples in FX chain (default)"); - } + if(v->no_caching==1) + { + int i = 0; + int k = 0; + int n = sample_highest(); + vj_el_break_cache( v->edit_list ); + for( i = 1; i <= n; i ++ ) { + editlist *e = sample_get_editlist(i); + if(e) { + vj_el_break_cache(e); k++; + } + } + veejay_msg(VEEJAY_MSG_INFO,"Cleared %d samples from cache.", k ); + } + else + { + vj_el_setup_cache( v->current_edit_list ); + veejay_msg(VEEJAY_MSG_INFO,"Sample FX Cache enabled : Recycling identicial samples in FX chain (default)"); + } - vj_el_set_caching(v->no_caching); + vj_el_set_caching(v->no_caching); } void vj_event_debug_level(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - if(v->verbose) v->verbose = 0; else v->verbose = 1; - veejay_set_debug_level( v->verbose ); - if(v->verbose) - veejay_msg(VEEJAY_MSG_INFO, "Displaying debug information" ); - else - veejay_msg(VEEJAY_MSG_INFO, "Not displaying debug information"); + veejay_t *v = (veejay_t*) ptr; + if(v->verbose) v->verbose = 0; else v->verbose = 1; + veejay_set_debug_level( v->verbose ); + if(v->verbose) + veejay_msg(VEEJAY_MSG_INFO, "Displaying debug information" ); + else + veejay_msg(VEEJAY_MSG_INFO, "Not displaying debug information"); } void vj_event_suspend(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - if( veejay_get_state(v) == LAVPLAY_STATE_PAUSED ) - { - veejay_change_state(v, LAVPLAY_STATE_PLAYING ); - veejay_msg(VEEJAY_MSG_WARNING, "Resuming playback."); - } - else { - veejay_change_state(v, LAVPLAY_STATE_PAUSED); - veejay_msg(VEEJAY_MSG_WARNING, "Suspending playback."); - } + veejay_t *v = (veejay_t*) ptr; + if( veejay_get_state(v) == LAVPLAY_STATE_PAUSED ) + { + veejay_change_state(v, LAVPLAY_STATE_PLAYING ); + veejay_msg(VEEJAY_MSG_WARNING, "Resuming playback."); + } + else { + veejay_change_state(v, LAVPLAY_STATE_PAUSED); + veejay_msg(VEEJAY_MSG_WARNING, "Suspending playback."); + } } -void vj_event_play_norestart( void *ptr, const char format[], va_list ap ) +void vj_event_play_norestart( void *ptr, const char format[], va_list ap ) { - int args[2]; - veejay_t *v = (veejay_t*) ptr; - char *s = NULL; - P_A(args,s,format,ap); + int args[2]; + veejay_t *v = (veejay_t*) ptr; + char *s = NULL; + P_A(args,s,format,ap); - //@ change mode so veejay does not restart samples at all + //@ change mode so veejay does not restart samples at all - if( args[0] == 0 ) { - //@ off - v->settings->sample_restart = 0; - } else if ( args[0] == 1 ) { - //@ on - v->settings->sample_restart = 1; - } + if( args[0] == 0 ) { + //@ off + v->settings->sample_restart = 0; + } else if ( args[0] == 1 ) { + //@ on + v->settings->sample_restart = 1; + } - veejay_msg(VEEJAY_MSG_INFO, "Sample continuous mode is %s.", - (v->settings->sample_restart == 0 ? "enabled" : "disabled")); + veejay_msg(VEEJAY_MSG_INFO, "Sample continuous mode is %s.", + (v->settings->sample_restart == 0 ? "enabled" : "disabled")); } -void vj_event_sub_render( void *ptr, const char format[], va_list ap ) +void vj_event_sub_render( void *ptr, const char format[], va_list ap ) { - int args[2]; - veejay_t *v = (veejay_t*) ptr; - char *s = NULL; - P_A(args,s,format,ap); + int args[2]; + veejay_t *v = (veejay_t*) ptr; + char *s = NULL; + P_A(args,s,format,ap); - if( SAMPLE_PLAYING(v)) { - SAMPLE_DEFAULTS(args[0]); - int cur = sample_get_subrender(args[0]); - if( cur == 0 ) { - cur = 1; - } - else { - cur = 0; - } + if( SAMPLE_PLAYING(v)) { + SAMPLE_DEFAULTS(args[0]); + int cur = sample_get_subrender(args[0]); + if( cur == 0 ) { + cur = 1; + } + else { + cur = 0; + } - sample_set_subrender(args[0], cur); + sample_set_subrender(args[0], cur); - veejay_msg(VEEJAY_MSG_INFO, "%s rendering of mixing sources", - ( sample_get_subrender(args[0]) == 1 ? "Enabled" : "Disabled" )); - } - if( STREAM_PLAYING(v)) { - STREAM_DEFAULTS(args[0]); - int cur = vj_tag_get_subrender(args[0]); - if( cur == 0 ) { - cur = 1; - } - else { - cur = 0; - } + veejay_msg(VEEJAY_MSG_INFO, "%s rendering of mixing sources", + ( sample_get_subrender(args[0]) == 1 ? "Enabled" : "Disabled" )); + } + if( STREAM_PLAYING(v)) { + STREAM_DEFAULTS(args[0]); + int cur = vj_tag_get_subrender(args[0]); + if( cur == 0 ) { + cur = 1; + } + else { + cur = 0; + } - vj_tag_set_subrender(args[0], cur); - veejay_msg(VEEJAY_MSG_INFO, "%s rendering of mixing sources", - ( vj_tag_get_subrender(args[0]) == 1 ? "Enabled" : "Disabled" )); - } -} + vj_tag_set_subrender(args[0], cur); + veejay_msg(VEEJAY_MSG_INFO, "%s rendering of mixing sources", + ( vj_tag_get_subrender(args[0]) == 1 ? "Enabled" : "Disabled" )); + } +} void vj_event_set_play_mode_go(void *ptr, const char format[], va_list ap) { - int args[2]; - veejay_t *v = (veejay_t*) ptr; - char *s = NULL; + int args[2]; + veejay_t *v = (veejay_t*) ptr; + char *s = NULL; - P_A(args,s,format,ap); - if(vj_event_valid_mode(args[0])) - { - if(args[0] == VJ_PLAYBACK_MODE_PLAIN) - { - if( vj_has_video(v,v->edit_list) ) - veejay_change_playback_mode(v, args[0], 0); - else - veejay_msg(VEEJAY_MSG_ERROR, - "There are no video files in the editlist"); - return; - } - - if(args[0] == VJ_PLAYBACK_MODE_SAMPLE) - { - SAMPLE_DEFAULTS(args[1]); - if(sample_exists(args[1])) - { - veejay_change_playback_mode(v,args[0] ,args[1]); - } - else - { - p_no_sample(args[1]); - } - return; - } - if(args[0] == VJ_PLAYBACK_MODE_TAG) - { - STREAM_DEFAULTS(args[1]); - if(vj_tag_exists(args[1])) - { - veejay_change_playback_mode(v,args[0],args[1]); - } - else - { - p_no_tag(args[1]); - } - return; - } - } - else - { - p_invalid_mode(); - } + P_A(args,s,format,ap); + if(vj_event_valid_mode(args[0])) + { + if(args[0] == VJ_PLAYBACK_MODE_PLAIN) + { + if( vj_has_video(v,v->edit_list) ) + veejay_change_playback_mode(v, args[0], 0); + else + veejay_msg(VEEJAY_MSG_ERROR, + "There are no video files in the editlist"); + return; + } + + if(args[0] == VJ_PLAYBACK_MODE_SAMPLE) + { + SAMPLE_DEFAULTS(args[1]); + if(sample_exists(args[1])) + { + veejay_change_playback_mode(v,args[0] ,args[1]); + } + else + { + p_no_sample(args[1]); + } + return; + } + if(args[0] == VJ_PLAYBACK_MODE_TAG) + { + STREAM_DEFAULTS(args[1]); + if(vj_tag_exists(args[1])) + { + veejay_change_playback_mode(v,args[0],args[1]); + } + else + { + p_no_tag(args[1]); + } + return; + } + } + else + { + p_invalid_mode(); + } } -void vj_event_set_rgb_parameter_type(void *ptr, const char format[], va_list ap) -{ - - int args[3]; - char *s = NULL; - P_A(args,s,format,ap); - if(args[0] >= 0 && args[0] <= 3 ) - { - rgb_parameter_conversion_type_ = args[0]; - if(args[0] == 0) - veejay_msg(VEEJAY_MSG_INFO,"GIMP's RGB -> YUV"); - if(args[1] == 1) - veejay_msg(VEEJAY_MSG_INFO,"CCIR601 RGB -> YUV"); - if(args[2] == 2) - veejay_msg(VEEJAY_MSG_INFO,"Broken RGB -> YUV"); - } - else - { - veejay_msg(VEEJAY_MSG_INFO, "Use: 0=GIMP , 1=CCIR601, 2=Broken"); - } +void vj_event_set_rgb_parameter_type(void *ptr, const char format[], va_list ap) +{ + + int args[3]; + char *s = NULL; + P_A(args,s,format,ap); + if(args[0] >= 0 && args[0] <= 3 ) + { + rgb_parameter_conversion_type_ = args[0]; + if(args[0] == 0) + veejay_msg(VEEJAY_MSG_INFO,"GIMP's RGB -> YUV"); + if(args[1] == 1) + veejay_msg(VEEJAY_MSG_INFO,"CCIR601 RGB -> YUV"); + if(args[2] == 2) + veejay_msg(VEEJAY_MSG_INFO,"Broken RGB -> YUV"); + } + else + { + veejay_msg(VEEJAY_MSG_INFO, "Use: 0=GIMP , 1=CCIR601, 2=Broken"); + } } void vj_event_effect_set_bg(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - v->uc->take_bg = 1; - veejay_msg(VEEJAY_MSG_INFO, "Next frame will be taken for static background"); + veejay_t *v = (veejay_t*) ptr; + v->uc->take_bg = 1; + veejay_msg(VEEJAY_MSG_INFO, "Next frame will be taken for static background"); } -void vj_event_send_keylist( void *ptr, const char format[], va_list ap ) +void vj_event_send_keylist( void *ptr, const char format[], va_list ap ) { - veejay_t *v = (veejay_t*) ptr; - unsigned int len=0; - char message[256]; - char *blob = NULL; - char line[512]; - char header[7]; - int skip = 0; + veejay_t *v = (veejay_t*) ptr; + unsigned int len=0; + char message[256]; + char *blob = NULL; + char line[512]; + char header[7]; + int skip = 0; #ifdef HAVE_SDL - blob = vj_calloc( 1024 * 64 ); + blob = vj_calloc( 1024 * 64 ); - if(!hash_isempty( keyboard_events )) - { - hscan_t scan; - hash_scan_begin( &scan, keyboard_events ); - hnode_t *node; - while( ( node = hash_scan_next(&scan)) != NULL ) - { - vj_keyboard_event *ev = NULL; - ev = hnode_get( node ); - if(ev) - { - if( ev->event_id >= VIMS_BUNDLE_START && ev->event_id < VIMS_BUNDLE_END ) - { - skip = 1; - if( vj_event_bundle_exists(ev->event_id)) - { - vj_msg_bundle *mm = vj_event_bundle_get( ev->event_id); - if( mm->bundle ) { skip = 0; snprintf(message, 256, "%s", mm->bundle ); } - } - } - else - { - if(ev->arguments) - snprintf(message,256, "%03d:%s;", ev->event_id,ev->arguments); - else - snprintf(message,256, "%03d:;", ev->event_id ); - } + if(!hash_isempty( keyboard_events )) + { + hscan_t scan; + hash_scan_begin( &scan, keyboard_events ); + hnode_t *node; + while( ( node = hash_scan_next(&scan)) != NULL ) + { + vj_keyboard_event *ev = NULL; + ev = hnode_get( node ); + if(ev) + { + if( ev->event_id >= VIMS_BUNDLE_START && ev->event_id < VIMS_BUNDLE_END ) + { + skip = 1; + if( vj_event_bundle_exists(ev->event_id)) + { + vj_msg_bundle *mm = vj_event_bundle_get( ev->event_id); + if( mm->bundle ) { skip = 0; snprintf(message, 256, "%s", mm->bundle ); } + } + } + else + { + if(ev->arguments) + snprintf(message,256, "%03d:%s;", ev->event_id,ev->arguments); + else + snprintf(message,256, "%03d:;", ev->event_id ); + } - if(!skip) - { - snprintf( line, 512, "%04d%03d%03d%03zu%s", - ev->event_id, ev->key_mod, ev->key_symbol, strlen(message), message ); - int line_len = strlen(line); - len += line_len; - veejay_strncat( blob, line, line_len); - } - skip = 0; - } - } - } + if(!skip) + { + snprintf( line, 512, "%04d%03d%03d%03zu%s", + ev->event_id, ev->key_mod, ev->key_symbol, strlen(message), message ); + int line_len = strlen(line); + len += line_len; + veejay_strncat( blob, line, line_len); + } + skip = 0; + } + } + } #endif - sprintf( header, "%06d", len ); + sprintf( header, "%06d", len ); - SEND_MSG( v, header ); - if( blob != NULL ) - SEND_MSG( v, blob ); + SEND_MSG( v, header ); + if( blob != NULL ) + SEND_MSG( v, blob ); - free( blob ); + free( blob ); } -void vj_event_send_bundles(void *ptr, const char format[], va_list ap) +void vj_event_send_bundles(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - vj_msg_bundle *m; - int i; - char tmp[4096]; - char *buf = vj_calloc( 65535 ); + veejay_t *v = (veejay_t*) ptr; + vj_msg_bundle *m; + int i; + char tmp[4096]; + char *buf = vj_calloc( 65535 ); - for( i = 0; i <= 600 ; i ++ ) - { - if( i >= VIMS_BUNDLE_START && i < VIMS_BUNDLE_END ) - { - if(!vj_event_bundle_exists(i)) - continue; + for( i = 0; i <= 600 ; i ++ ) + { + if( i >= VIMS_BUNDLE_START && i < VIMS_BUNDLE_END ) + { + if(!vj_event_bundle_exists(i)) + continue; - m = vj_event_bundle_get(i); + m = vj_event_bundle_get(i); - int bun_len = strlen(m->bundle); - if( bun_len <= 0 ) - continue; + int bun_len = strlen(m->bundle); + if( bun_len <= 0 ) + continue; - snprintf(tmp,sizeof(tmp)-1,"%04d%03d%03d%04d%s%03d%03d", - i, m->accelerator, m->modifier, bun_len, m->bundle, 0,0 ); + snprintf(tmp,sizeof(tmp)-1,"%04d%03d%03d%04d%s%03d%03d", + i, m->accelerator, m->modifier, bun_len, m->bundle, 0,0 ); - veejay_strncat( buf, tmp, strlen(tmp) ); - } - else - { - if( !vj_event_exists(i) || (i >= 400 && i < VIMS_BUNDLE_START) ) - continue; - - char *name = vj_event_vevo_get_event_name(i); - char *form = vj_event_vevo_get_event_format(i); - int name_len = strlen(name); - int form_len = (form ? strlen(form) : 0); + veejay_strncat( buf, tmp, strlen(tmp) ); + } + else + { + if( !vj_event_exists(i) || (i >= 400 && i < VIMS_BUNDLE_START) ) + continue; + + char *name = vj_event_vevo_get_event_name(i); + char *form = vj_event_vevo_get_event_format(i); + int name_len = strlen(name); + int form_len = (form ? strlen(form) : 0); #ifdef HAVE_SDL - vims_key_list *tree = vj_event_get_keys( i ); - while( tree != NULL ) - { - snprintf(tmp, sizeof(tmp)-1, "%04d%03d%03d%04d%s%03d%03d", - i, tree->key_symbol, tree->key_mod, name_len, name, form_len, tree->arg_len ); + vims_key_list *tree = vj_event_get_keys( i ); + while( tree != NULL ) + { + snprintf(tmp, sizeof(tmp)-1, "%04d%03d%03d%04d%s%03d%03d", + i, tree->key_symbol, tree->key_mod, name_len, name, form_len, tree->arg_len ); - veejay_strncat( buf,tmp,strlen(tmp)); + veejay_strncat( buf,tmp,strlen(tmp)); - if(form) - veejay_strncat( buf, form, form_len); - if(tree->arg_len) - veejay_strncat( buf, tree->args, tree->arg_len ); - - void *tree_ptr = tree; + if(form) + veejay_strncat( buf, form, form_len); + if(tree->arg_len) + veejay_strncat( buf, tree->args, tree->arg_len ); + + void *tree_ptr = tree; - tree = tree->next; + tree = tree->next; - free(tree_ptr); - } + free(tree_ptr); + } #endif - if(name) - free(name); + if(name) + free(name); - if(form) - free(form); - } - } + if(form) + free(form); + } + } - int pack_len = strlen( buf ); - char header[7]; - - snprintf(header, sizeof(header),"%06d", pack_len ); - - SEND_MSG(v, header); - SEND_MSG(v,buf); + int pack_len = strlen( buf ); + char header[7]; + + snprintf(header, sizeof(header),"%06d", pack_len ); + + SEND_MSG(v, header); + SEND_MSG(v,buf); - free(buf); + free(buf); } -void vj_event_send_vimslist(void *ptr, const char format[], va_list ap) +void vj_event_send_vimslist(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - char *buf = vj_event_vevo_list_serialize(); - SEND_MSG(v,buf); - if(buf) free(buf); + veejay_t *v = (veejay_t*) ptr; + char *buf = vj_event_vevo_list_serialize(); + SEND_MSG(v,buf); + if(buf) free(buf); } -void vj_event_send_devicelist( void *ptr, const char format[], va_list ap) +void vj_event_send_devicelist( void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; + veejay_t *v = (veejay_t*) ptr; - char *buf = vj_tag_scan_devices(); - SEND_MSG( v, buf ); - free(buf); + char *buf = vj_tag_scan_devices(); + SEND_MSG( v, buf ); + free(buf); } void vj_event_sample_select(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - int args[1]; - char *s = NULL; - P_A( args, s , format, ap); + veejay_t *v = (veejay_t*) ptr; + int args[1]; + char *s = NULL; + P_A( args, s , format, ap); - SAMPLE_DEFAULTS(args[0]); - if(sample_exists(args[0])) - { - veejay_change_playback_mode(v, VJ_PLAYBACK_MODE_SAMPLE,args[0] ); - } - else - { - p_no_sample(args[0]); - } + SAMPLE_DEFAULTS(args[0]); + if(sample_exists(args[0])) + { + veejay_change_playback_mode(v, VJ_PLAYBACK_MODE_SAMPLE,args[0] ); + } + else + { + p_no_sample(args[0]); + } } void vj_event_tag_select(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - int args[1]; - char *s = NULL; - P_A( args, s , format, ap); - STREAM_DEFAULTS(args[0]); - if(vj_tag_exists(args[0])) - { - veejay_change_playback_mode(v, VJ_PLAYBACK_MODE_TAG,args[0]); - } - else - { - p_no_tag(args[0]); - } + veejay_t *v = (veejay_t*) ptr; + int args[1]; + char *s = NULL; + P_A( args, s , format, ap); + STREAM_DEFAULTS(args[0]); + if(vj_tag_exists(args[0])) + { + veejay_change_playback_mode(v, VJ_PLAYBACK_MODE_TAG,args[0]); + } + else + { + p_no_tag(args[0]); + } } void vj_event_switch_sample_tag(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*)ptr; + veejay_t *v = (veejay_t*)ptr; - int last_tag = vj_tag_highest_valid_id(); - int last_sample=sample_highest_valid_id(); + int last_tag = vj_tag_highest_valid_id(); + int last_sample=sample_highest_valid_id(); - if(last_tag < 1 ) - last_tag = 1; - if(last_sample < 1 ) - last_sample = 1; + if(last_tag < 1 ) + last_tag = 1; + if(last_sample < 1 ) + last_sample = 1; - if(!STREAM_PLAYING(v) && !SAMPLE_PLAYING(v)) - { - if(sample_exists(v->last_sample_id)) - { - veejay_change_playback_mode(v, VJ_PLAYBACK_MODE_SAMPLE, v->last_sample_id); - return; - } - if(vj_tag_exists(v->last_tag_id)) - { - veejay_change_playback_mode(v, VJ_PLAYBACK_MODE_TAG, v->last_tag_id); - return; - } - if(sample_size() <= 0) - { - if(vj_tag_exists( last_tag )) - { - veejay_change_playback_mode( v, VJ_PLAYBACK_MODE_TAG, last_tag); - return; - } - } - } + if(!STREAM_PLAYING(v) && !SAMPLE_PLAYING(v)) + { + if(sample_exists(v->last_sample_id)) + { + veejay_change_playback_mode(v, VJ_PLAYBACK_MODE_SAMPLE, v->last_sample_id); + return; + } + if(vj_tag_exists(v->last_tag_id)) + { + veejay_change_playback_mode(v, VJ_PLAYBACK_MODE_TAG, v->last_tag_id); + return; + } + if(sample_size() <= 0) + { + if(vj_tag_exists( last_tag )) + { + veejay_change_playback_mode( v, VJ_PLAYBACK_MODE_TAG, last_tag); + return; + } + } + } - if(SAMPLE_PLAYING(v)) - { - if(vj_tag_exists(v->last_tag_id)) - { - veejay_change_playback_mode(v, VJ_PLAYBACK_MODE_TAG, v->last_tag_id); - } - else if ( vj_tag_exists(last_tag)) - veejay_change_playback_mode(v, VJ_PLAYBACK_MODE_TAG, last_tag); - } - else if(STREAM_PLAYING(v)) - { - if(sample_exists(v->last_sample_id) ) - { - veejay_change_playback_mode(v, VJ_PLAYBACK_MODE_SAMPLE, v->last_sample_id); - } - else if( sample_exists( last_sample )) - { - veejay_change_playback_mode(v, VJ_PLAYBACK_MODE_SAMPLE,last_sample); - } - } + if(SAMPLE_PLAYING(v)) + { + if(vj_tag_exists(v->last_tag_id)) + { + veejay_change_playback_mode(v, VJ_PLAYBACK_MODE_TAG, v->last_tag_id); + } + else if ( vj_tag_exists(last_tag)) + veejay_change_playback_mode(v, VJ_PLAYBACK_MODE_TAG, last_tag); + } + else if(STREAM_PLAYING(v)) + { + if(sample_exists(v->last_sample_id) ) + { + veejay_change_playback_mode(v, VJ_PLAYBACK_MODE_SAMPLE, v->last_sample_id); + } + else if( sample_exists( last_sample )) + { + veejay_change_playback_mode(v, VJ_PLAYBACK_MODE_SAMPLE,last_sample); + } + } } -void vj_event_set_volume(void *ptr, const char format[], va_list ap) +void vj_event_set_volume(void *ptr, const char format[], va_list ap) { - int args[1]; - char *s = NULL; - P_A(args,s,format,ap) - if(args[0] >= 0 && args[0] <= 100) - { + int args[1]; + char *s = NULL; + P_A(args,s,format,ap) + if(args[0] >= 0 && args[0] <= 100) + { #ifdef HAVE_JACK - if(vj_jack_set_volume(args[0])) - { - veejay_msg(VEEJAY_MSG_INFO, "Volume set to %d", args[0]); - } -#else - veejay_msg(VEEJAY_MSG_ERROR, "Audio support not compiled in"); + if(vj_jack_set_volume(args[0])) + { + veejay_msg(VEEJAY_MSG_INFO, "Volume set to %d", args[0]); + } +#else + veejay_msg(VEEJAY_MSG_ERROR, "Audio support not compiled in"); #endif - } - else - { - veejay_msg(VEEJAY_MSG_ERROR, "Use a value between 0-100 for audio volume"); - } + } + else + { + veejay_msg(VEEJAY_MSG_ERROR, "Use a value between 0-100 for audio volume"); + } } void vj_event_set_play_mode(void *ptr, const char format[], va_list ap) { - int args[1]; - char *s = NULL; - veejay_t *v = (veejay_t*) ptr; - P_A(args,s,format,ap); + int args[1]; + char *s = NULL; + veejay_t *v = (veejay_t*) ptr; + P_A(args,s,format,ap); - if(vj_event_valid_mode(args[0])) - { - int mode = args[0]; - /* check if current playing ID is valid for this mode */ - if(mode == VJ_PLAYBACK_MODE_SAMPLE) - { - int last_id = sample_highest_valid_id(); - if(last_id == 0) - { - veejay_msg(VEEJAY_MSG_ERROR, "There are no samples. Cannot switch to sample mode"); - return; - } - if(!sample_exists(v->last_sample_id)) - { - v->uc->sample_id = last_id; - } - if(sample_exists(v->uc->sample_id)) - { - veejay_change_playback_mode( v, VJ_PLAYBACK_MODE_SAMPLE, v->uc->sample_id ); - } - } - if(mode == VJ_PLAYBACK_MODE_TAG) - { - int last_id = vj_tag_highest_valid_id(); - if(last_id == 0) - { - veejay_msg(VEEJAY_MSG_ERROR, "There are no streams. Cannot switch to stream mode"); - return; - } - - if(!vj_tag_exists(v->last_tag_id)) /* jump to last used Tag if ok */ - { - v->uc->sample_id = last_id; - } - if(vj_tag_exists(v->uc->sample_id)) - { - veejay_change_playback_mode(v, VJ_PLAYBACK_MODE_TAG, v->uc->sample_id); - } - } - if(mode == VJ_PLAYBACK_MODE_PLAIN) - { - if(vj_has_video(v,v->edit_list) ) - veejay_change_playback_mode( v, VJ_PLAYBACK_MODE_PLAIN, 0); - else - veejay_msg(VEEJAY_MSG_ERROR, - "There are no video files in the editlist"); - } - } - else - { - p_invalid_mode(); - } - + if(vj_event_valid_mode(args[0])) + { + int mode = args[0]; + /* check if current playing ID is valid for this mode */ + if(mode == VJ_PLAYBACK_MODE_SAMPLE) + { + int last_id = sample_highest_valid_id(); + if(last_id == 0) + { + veejay_msg(VEEJAY_MSG_ERROR, "There are no samples. Cannot switch to sample mode"); + return; + } + if(!sample_exists(v->last_sample_id)) + { + v->uc->sample_id = last_id; + } + if(sample_exists(v->uc->sample_id)) + { + veejay_change_playback_mode( v, VJ_PLAYBACK_MODE_SAMPLE, v->uc->sample_id ); + } + } + if(mode == VJ_PLAYBACK_MODE_TAG) + { + int last_id = vj_tag_highest_valid_id(); + if(last_id == 0) + { + veejay_msg(VEEJAY_MSG_ERROR, "There are no streams. Cannot switch to stream mode"); + return; + } + + if(!vj_tag_exists(v->last_tag_id)) /* jump to last used Tag if ok */ + { + v->uc->sample_id = last_id; + } + if(vj_tag_exists(v->uc->sample_id)) + { + veejay_change_playback_mode(v, VJ_PLAYBACK_MODE_TAG, v->uc->sample_id); + } + } + if(mode == VJ_PLAYBACK_MODE_PLAIN) + { + if(vj_has_video(v,v->edit_list) ) + veejay_change_playback_mode( v, VJ_PLAYBACK_MODE_PLAIN, 0); + else + veejay_msg(VEEJAY_MSG_ERROR, + "There are no video files in the editlist"); + } + } + else + { + p_invalid_mode(); + } + } void vj_event_sample_new(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - if(PLAIN_PLAYING(v) || SAMPLE_PLAYING(v)) - { - int args[2]; - char *s = NULL; - P_A(args,s,format,ap); + veejay_t *v = (veejay_t*) ptr; + if(PLAIN_PLAYING(v) || SAMPLE_PLAYING(v)) + { + int args[2]; + char *s = NULL; + P_A(args,s,format,ap); - editlist *E = v->edit_list; - if( SAMPLE_PLAYING(v)) - E = v->current_edit_list; + editlist *E = v->edit_list; + if( SAMPLE_PLAYING(v)) + E = v->current_edit_list; - if(args[0] < 0) - { - args[0] = v->uc->sample_start; - } - if(args[1] == 0) - { - args[1] = E->total_frames; - } + if(args[0] < 0) + { + args[0] = v->uc->sample_start; + } + if(args[1] == 0) + { + args[1] = E->total_frames; + } - int num_frames = E->total_frames; - + int num_frames = E->total_frames; + - if(args[0] >= 0 && args[1] > 0 && args[0] <= args[1] && args[0] <= num_frames && - args[1] <= num_frames ) - { - editlist *el = veejay_edit_copy_to_new( v, E, args[0],args[1] ); - if(!el) - { - veejay_msg(VEEJAY_MSG_ERROR, "Cannot copy EDL"); - return; - } - int start = 0; - int end = el->total_frames; + if(args[0] >= 0 && args[1] > 0 && args[0] <= args[1] && args[0] <= num_frames && + args[1] <= num_frames ) + { + editlist *el = veejay_edit_copy_to_new( v, E, args[0],args[1] ); + if(!el) + { + veejay_msg(VEEJAY_MSG_ERROR, "Cannot copy EDL"); + return; + } + int start = 0; + int end = el->total_frames; - sample_info *skel = sample_skeleton_new(start, end ); - if(skel) - { - skel->edit_list = el; - if(!skel->edit_list) - veejay_msg(VEEJAY_MSG_ERROR, "Failed to copy EDL !!"); - } + sample_info *skel = sample_skeleton_new(start, end ); + if(skel) + { + skel->edit_list = el; + if(!skel->edit_list) + veejay_msg(VEEJAY_MSG_ERROR, "Failed to copy EDL !!"); + } - if(sample_store(skel)==0) - { - veejay_msg(VEEJAY_MSG_INFO, "Created new sample [%d]", skel->sample_id); - } - - } - else - { - veejay_msg(VEEJAY_MSG_ERROR, "Invalid frame range given : %d - %d , range is %d - %d", - args[0],args[1], 1,num_frames); - } - } - else - { - p_invalid_mode(); - } + if(sample_store(skel)==0) + { + veejay_msg(VEEJAY_MSG_INFO, "Created new sample [%d]", skel->sample_id); + } + + } + else + { + veejay_msg(VEEJAY_MSG_ERROR, "Invalid frame range given : %d - %d , range is %d - %d", + args[0],args[1], 1,num_frames); + } + } + else + { + p_invalid_mode(); + } } -void vj_event_fullscreen(void *ptr, const char format[], va_list ap ) +void vj_event_fullscreen(void *ptr, const char format[], va_list ap ) { - veejay_t *v = (veejay_t*) ptr; - int args[2]; - char *s = NULL; - P_A(args,s,format,ap); - // parsed display num!! -> index of SDL array + veejay_t *v = (veejay_t*) ptr; + int args[2]; + char *s = NULL; + P_A(args,s,format,ap); + // parsed display num!! -> index of SDL array - //int id = args[0]; - int id = 0; + //int id = args[0]; + int id = 0; - switch(v->video_out) - { - /* - case 4: + switch(v->video_out) + { + /* + case 4: #ifdef HAVE_GL - { - int go_fs = x_display_get_fs( v->gl ) == 1 ? 0:1; - x_display_set_fullscreen( v->gl, go_fs ); - v->settings->full_screen = go_fs; - } + { + int go_fs = x_display_get_fs( v->gl ) == 1 ? 0:1; + x_display_set_fullscreen( v->gl, go_fs ); + v->settings->full_screen = go_fs; + } #endif - break; - */ - case 0: - case 2: + break; + */ + case 0: + case 2: #ifdef HAVE_SDL - { - int go_fs = v->sdl[id]->fs == 1 ? 0:1 ; - char *caption = veejay_title(v); + { + int go_fs = v->sdl[id]->fs == 1 ? 0:1 ; + char *caption = veejay_title(v); - vj_sdl *tmpsdl = vj_sdl_allocate( v->video_output_width,v->video_output_height,v->pixel_format,v->use_keyb,v->use_mouse,v->show_cursor); - - if(vj_sdl_init( - v->settings->ncpu, - tmpsdl, - v->bes_width, - v->bes_height, - caption, - 1, - go_fs, - v->current_edit_list->video_fps - ) ) { - if( v->sdl[id] ) { - vj_sdl_free(v->sdl[id]); - } - v->sdl[id] = tmpsdl; - if( go_fs) - vj_sdl_grab( v->sdl[id], 0 ); - v->settings->full_screen = go_fs; - } - else { - vj_sdl_free(tmpsdl); - } - free(caption); - } + vj_sdl *tmpsdl = vj_sdl_allocate( v->video_output_width,v->video_output_height,v->pixel_format,v->use_keyb,v->use_mouse,v->show_cursor); + + if(vj_sdl_init( + v->settings->ncpu, + tmpsdl, + v->bes_width, + v->bes_height, + caption, + 1, + go_fs, + v->current_edit_list->video_fps + ) ) { + if( v->sdl[id] ) { + vj_sdl_free(v->sdl[id]); + } + v->sdl[id] = tmpsdl; + if( go_fs) + vj_sdl_grab( v->sdl[id], 0 ); + v->settings->full_screen = go_fs; + } + else { + vj_sdl_free(tmpsdl); + } + free(caption); + } #endif - break; - default: - break; - } - veejay_msg(VEEJAY_MSG_INFO,"Video screen is %s", - (v->settings->full_screen ? "full screen" : "windowed")); + break; + default: + break; + } + veejay_msg(VEEJAY_MSG_INFO,"Video screen is %s", + (v->settings->full_screen ? "full screen" : "windowed")); } void vj_event_set_screen_size(void *ptr, const char format[], va_list ap) { - int args[5]; - veejay_t *v = (veejay_t*) ptr; - char *s = NULL; + int args[5]; + veejay_t *v = (veejay_t*) ptr; + char *s = NULL; - P_A(args,s,format,ap); + P_A(args,s,format,ap); - int id = 0; - int w = args[0]; - int h = args[1]; + int id = 0; + int w = args[0]; + int h = args[1]; int x = args[2]; int y = args[3]; - if( w < 0 || w > 4096 || h < 0 || h > 4096 || x < 0 || y < 0 ) - { - veejay_msg(VEEJAY_MSG_ERROR, "Invalid arguments '%d %d %d %d'", w,h,x,y ); - return; - } + if( w < 0 || w > 4096 || h < 0 || h > 4096 || x < 0 || y < 0 ) + { + veejay_msg(VEEJAY_MSG_ERROR, "Invalid arguments '%d %d %d %d'", w,h,x,y ); + return; + } - if( w == 0 && h == 0 ) - { - switch( v->video_out ) - { - case 0: - case 2: + if( w == 0 && h == 0 ) + { + switch( v->video_out ) + { + case 0: + case 2: #ifdef HAVE_SDL - if( v->sdl[id] ) - { - vj_sdl_free( v->sdl[id] ); - v->sdl[id] = NULL; - v->video_out = 5; - vj_sdl_quit(); - veejay_msg(VEEJAY_MSG_INFO, "Closed SDL window"); - return; - } + if( v->sdl[id] ) + { + vj_sdl_free( v->sdl[id] ); + v->sdl[id] = NULL; + v->video_out = 5; + vj_sdl_quit(); + veejay_msg(VEEJAY_MSG_INFO, "Closed SDL window"); + return; + } #endif - break; - default: - break; - } - } - else - { - char *title = veejay_title(v); - - switch( v->video_out ) - { - case 5: + break; + default: + break; + } + } + else + { + char *title = veejay_title(v); + + switch( v->video_out ) + { + case 5: #ifdef HAVE_SDL - if(!v->sdl[id] ) - { - v->sdl[id] = vj_sdl_allocate( - v->video_output_width, - v->video_output_height, - v->pixel_format, - v->use_keyb, - v->use_mouse, - v->show_cursor ); - veejay_msg(VEEJAY_MSG_INFO, "Allocated SDL window"); - - if(vj_sdl_init( v->settings->ncpu, - v->sdl[id], - v->bes_width, - v->bes_height, - title, - 1, - v->settings->full_screen, - v->current_edit_list->video_fps ) - ) { - veejay_msg(VEEJAY_MSG_INFO, "Opened SDL Video Window of size %d x %d", w, h ); - v->video_out = 0; - } - } + if(!v->sdl[id] ) + { + v->sdl[id] = vj_sdl_allocate( + v->video_output_width, + v->video_output_height, + v->pixel_format, + v->use_keyb, + v->use_mouse, + v->show_cursor ); + veejay_msg(VEEJAY_MSG_INFO, "Allocated SDL window"); + + if(vj_sdl_init( v->settings->ncpu, + v->sdl[id], + v->bes_width, + v->bes_height, + title, + 1, + v->settings->full_screen, + v->current_edit_list->video_fps ) + ) { + veejay_msg(VEEJAY_MSG_INFO, "Opened SDL Video Window of size %d x %d", w, h ); + v->video_out = 0; + } + } #endif - case 0: -#ifdef HAVE_SDL - if( x > 0 && y > 0 ) - vj_sdl_set_geometry(v->sdl[id],x,y); - - if( w > 0 && h > 0 ) - vj_sdl_resize( v->sdl[id], w, h, v->settings->full_screen ); -#endif - break; - /* - case 4: + case 0: +#ifdef HAVE_SDL + if( x > 0 && y > 0 ) + vj_sdl_set_geometry(v->sdl[id],x,y); + + if( w > 0 && h > 0 ) + vj_sdl_resize( v->sdl[id], w, h, v->settings->full_screen ); +#endif + break; + /* + case 4: #ifdef HAVE_GL - if( w > 0 && h > 0 ) - x_display_resize(w,h,w,h); + if( w > 0 && h > 0 ) + x_display_resize(w,h,w,h); #endif - break; - */ - default: - break; - } - free(title); - } + break; + */ + default: + break; + } + free(title); + } } -void vj_event_promote_me( void *ptr, const char format[], va_list ap ) +void vj_event_promote_me( void *ptr, const char format[], va_list ap ) { - veejay_t *v = (veejay_t*) ptr; - vj_server_client_promote( v->vjs[VEEJAY_PORT_CMD], v->uc->current_link ); - v->rmodes[ v->uc->current_link ] = -1000; - veejay_msg(VEEJAY_MSG_DEBUG, "Promoted link %d", v->uc->current_link ); + veejay_t *v = (veejay_t*) ptr; + vj_server_client_promote( v->vjs[VEEJAY_PORT_CMD], v->uc->current_link ); + v->rmodes[ v->uc->current_link ] = -1000; + veejay_msg(VEEJAY_MSG_DEBUG, "Promoted link %d", v->uc->current_link ); } void vj_event_play_stop(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - if(!STREAM_PLAYING(v)) - { - int speed = v->settings->current_playback_speed; - if(speed != 0) - { - v->settings->previous_playback_speed = speed; - veejay_set_speed(v, 0 ); - veejay_msg(VEEJAY_MSG_INFO,"Video is paused"); - } - else - { - veejay_set_speed(v, v->settings->previous_playback_speed ); - veejay_msg(VEEJAY_MSG_INFO,"Video is playing (resumed at speed %d)", v->settings->previous_playback_speed); - } - } - else - { - p_invalid_mode(); - } + veejay_t *v = (veejay_t*) ptr; + if(!STREAM_PLAYING(v)) + { + int speed = v->settings->current_playback_speed; + if(speed != 0) + { + v->settings->previous_playback_speed = speed; + veejay_set_speed(v, 0 ); + veejay_msg(VEEJAY_MSG_INFO,"Video is paused"); + } + else + { + veejay_set_speed(v, v->settings->previous_playback_speed ); + veejay_msg(VEEJAY_MSG_INFO,"Video is playing (resumed at speed %d)", v->settings->previous_playback_speed); + } + } + else + { + p_invalid_mode(); + } } -void vj_event_feedback( void *ptr, const char format[], va_list ap ) +void vj_event_feedback( void *ptr, const char format[], va_list ap ) { - veejay_t *v = (veejay_t*) ptr; - int args[1]; - char *s = NULL; - P_A(args,s,format,ap); - if( args[0] == 0 ) { - v->settings->feedback = 0; - } else if ( args[0] == 1 ) { - v->settings->feedback = 1; - v->settings->feedback_stage = 1; - } - veejay_msg(VEEJAY_MSG_INFO ,"Feedback on main source is %s", - ( v->settings->feedback ? "enabled." : "disabled.") ); + veejay_t *v = (veejay_t*) ptr; + int args[1]; + char *s = NULL; + P_A(args,s,format,ap); + if( args[0] == 0 ) { + v->settings->feedback = 0; + } else if ( args[0] == 1 ) { + v->settings->feedback = 1; + v->settings->feedback_stage = 1; + } + veejay_msg(VEEJAY_MSG_INFO ,"Feedback on main source is %s", + ( v->settings->feedback ? "enabled." : "disabled.") ); } -void vj_event_render_depth( void *ptr, const char format[] , va_list ap ) +void vj_event_render_depth( void *ptr, const char format[] , va_list ap ) { - int args[1]; - veejay_t *v = (veejay_t*)ptr; - char *s = NULL; - P_A(args,s,format,ap); - int status = 0; - int toggle = 0; - if( args[0] == 2 ) - toggle = 1; + int args[1]; + veejay_t *v = (veejay_t*)ptr; + char *s = NULL; + P_A(args,s,format,ap); + int status = 0; + int toggle = 0; + if( args[0] == 2 ) + toggle = 1; - if( args[0] ) { - status = 1; - } + if( args[0] ) { + status = 1; + } - if( toggle ) { - if( v->settings->fxdepth == 1 ) - v->settings->fxdepth = 0; - else - v->settings->fxdepth = 1; - } else { - v->settings->fxdepth = status; - } - if( v->settings->fxdepth == 1 ) { - veejay_msg(VEEJAY_MSG_INFO, "Rendering FX chain on mixing inputs"); - } else { - veejay_msg(VEEJAY_MSG_INFO, "Not rendering FX chain on mixing inputs"); - } + if( toggle ) { + if( v->settings->fxdepth == 1 ) + v->settings->fxdepth = 0; + else + v->settings->fxdepth = 1; + } else { + v->settings->fxdepth = status; + } + if( v->settings->fxdepth == 1 ) { + veejay_msg(VEEJAY_MSG_INFO, "Rendering FX chain on mixing inputs"); + } else { + veejay_msg(VEEJAY_MSG_INFO, "Not rendering FX chain on mixing inputs"); + } } -void vj_event_viewport_composition( void *ptr, const char format[], va_list ap ) +void vj_event_viewport_composition( void *ptr, const char format[], va_list ap ) { } void vj_event_play_reverse(void *ptr,const char format[],va_list ap) { - veejay_t *v = (veejay_t*)ptr; - if(!STREAM_PLAYING(v)) - { - int speed = v->settings->current_playback_speed; - if( speed == 0 ) { - speed = -1; - } - else if(speed > 0) { - speed = -(speed); - } - veejay_set_speed(v,speed ); + veejay_t *v = (veejay_t*)ptr; + if(!STREAM_PLAYING(v)) + { + int speed = v->settings->current_playback_speed; + if( speed == 0 ) { + speed = -1; + } + else if(speed > 0) { + speed = -(speed); + } + veejay_set_speed(v,speed ); - veejay_msg(VEEJAY_MSG_INFO, "Video is playing in reverse at speed %d.", speed); - } - else - { - p_invalid_mode(); - } + veejay_msg(VEEJAY_MSG_INFO, "Video is playing in reverse at speed %d.", speed); + } + else + { + p_invalid_mode(); + } } void vj_event_play_forward(void *ptr, const char format[],va_list ap) { - veejay_t *v = (veejay_t*)ptr; - if(!STREAM_PLAYING(v)) - { - int speed = v->settings->current_playback_speed; - if(speed == 0) speed = 1; - else if(speed < 0 ) speed = -1 * speed; + veejay_t *v = (veejay_t*)ptr; + if(!STREAM_PLAYING(v)) + { + int speed = v->settings->current_playback_speed; + if(speed == 0) speed = 1; + else if(speed < 0 ) speed = -1 * speed; - veejay_set_speed(v,speed ); + veejay_set_speed(v,speed ); - veejay_msg(VEEJAY_MSG_INFO, "Video is playing forward at speed %d" ,speed); - } - else - { - p_invalid_mode(); - } + veejay_msg(VEEJAY_MSG_INFO, "Video is playing forward at speed %d" ,speed); + } + else + { + p_invalid_mode(); + } } void vj_event_play_speed(void *ptr, const char format[], va_list ap) { - int args[2]; - veejay_t *v = (veejay_t*) ptr; - if(!STREAM_PLAYING(v)) - { - char *s = NULL; - int speed = 0; - P_A(args,s,format,ap); - veejay_set_speed(v, args[0] ); - speed = v->settings->current_playback_speed; - veejay_msg(VEEJAY_MSG_INFO, "Video is playing at speed %d now (%s)", - speed, speed == 0 ? "paused" : speed < 0 ? "reverse" : "forward" ); - } - else - { - p_invalid_mode(); - } + int args[2]; + veejay_t *v = (veejay_t*) ptr; + if(!STREAM_PLAYING(v)) + { + char *s = NULL; + int speed = 0; + P_A(args,s,format,ap); + veejay_set_speed(v, args[0] ); + speed = v->settings->current_playback_speed; + veejay_msg(VEEJAY_MSG_INFO, "Video is playing at speed %d now (%s)", + speed, speed == 0 ? "paused" : speed < 0 ? "reverse" : "forward" ); + } + else + { + p_invalid_mode(); + } } -void vj_event_hold_frame( void *ptr, const char format[], va_list ap ) +void vj_event_hold_frame( void *ptr, const char format[], va_list ap ) { - int args[3]; - veejay_t *v = (veejay_t*) ptr; + int args[3]; + veejay_t *v = (veejay_t*) ptr; - if(SAMPLE_PLAYING(v)||PLAIN_PLAYING(v)) { - char *s = NULL; - P_A( args,s,format, ap); - if(args[1] <= 0 ) - args[1] = 1; - if(args[2] <= 0 ) - args[2] = 1; - if(args[2] >= 300) - args[2] = 1; - veejay_hold_frame(v,args[1],args[2]); - } else { - p_invalid_mode(); - } + if(SAMPLE_PLAYING(v)||PLAIN_PLAYING(v)) { + char *s = NULL; + P_A( args,s,format, ap); + if(args[1] <= 0 ) + args[1] = 1; + if(args[2] <= 0 ) + args[2] = 1; + if(args[2] >= 300) + args[2] = 1; + veejay_hold_frame(v,args[1],args[2]); + } else { + p_invalid_mode(); + } } void vj_event_play_speed_kb(void *ptr, const char format[], va_list ap) { - int args[2]; - veejay_t *v = (veejay_t*) ptr; - if(!STREAM_PLAYING(v)) - { - char *s = NULL; - P_A(args,s,format,ap); - - int speed = abs(args[0]); - if( v->settings->current_playback_speed < 0 ) - veejay_set_speed( v, -1 * speed ); - else - veejay_set_speed(v, speed ); - speed = v->settings->current_playback_speed; - veejay_msg(VEEJAY_MSG_INFO, "Video is playing at speed %d now (%s)", - speed, speed == 0 ? "paused" : speed < 0 ? "reverse" : "forward" ); - } - else - { - p_invalid_mode(); - } + int args[2]; + veejay_t *v = (veejay_t*) ptr; + if(!STREAM_PLAYING(v)) + { + char *s = NULL; + P_A(args,s,format,ap); + + int speed = abs(args[0]); + if( v->settings->current_playback_speed < 0 ) + veejay_set_speed( v, -1 * speed ); + else + veejay_set_speed(v, speed ); + speed = v->settings->current_playback_speed; + veejay_msg(VEEJAY_MSG_INFO, "Video is playing at speed %d now (%s)", + speed, speed == 0 ? "paused" : speed < 0 ? "reverse" : "forward" ); + } + else + { + p_invalid_mode(); + } } void vj_event_play_slow(void *ptr, const char format[],va_list ap) { - int args[1]; - veejay_t *v = (veejay_t*)ptr; - char *s = NULL; - P_A(args,s,format,ap); - - if(PLAIN_PLAYING(v) || SAMPLE_PLAYING(v)) - { - if(args[0] <= 0 ) - args[0] = 1; + int args[1]; + veejay_t *v = (veejay_t*)ptr; + char *s = NULL; + P_A(args,s,format,ap); + + if(PLAIN_PLAYING(v) || SAMPLE_PLAYING(v)) + { + if(args[0] <= 0 ) + args[0] = 1; - if(veejay_set_framedup(v, args[0])) - { - if( SAMPLE_PLAYING(v)) - sample_reset_loopcount( v->uc->sample_id ); - veejay_msg(VEEJAY_MSG_INFO,"A/V frames will be repeated %d times ",args[0]); - } - else - { - veejay_msg(VEEJAY_MSG_ERROR, "Unable to set frame repeat of %d", args[0]); - } - } - else - { - p_invalid_mode(); - } - + if(veejay_set_framedup(v, args[0])) + { + if( SAMPLE_PLAYING(v)) + sample_reset_loopcount( v->uc->sample_id ); + veejay_msg(VEEJAY_MSG_INFO,"A/V frames will be repeated %d times ",args[0]); + } + else + { + veejay_msg(VEEJAY_MSG_ERROR, "Unable to set frame repeat of %d", args[0]); + } + } + else + { + p_invalid_mode(); + } + } void vj_event_set_frame(void *ptr, const char format[], va_list ap) { - int args[1]; - veejay_t *v = (veejay_t*) ptr; - if(!STREAM_PLAYING(v)) - { - char *str = NULL; - P_A(args,str,format,ap); - if(args[0] == -1 ) - args[0] = v->current_edit_list->total_frames; - veejay_set_frame(v, args[0]); - } - else - { - p_invalid_mode(); - } + int args[1]; + veejay_t *v = (veejay_t*) ptr; + if(!STREAM_PLAYING(v)) + { + char *str = NULL; + P_A(args,str,format,ap); + if(args[0] == -1 ) + args[0] = v->current_edit_list->total_frames; + veejay_set_frame(v, args[0]); + } + else + { + p_invalid_mode(); + } } -void vj_event_projection_dec( void *ptr, const char format[], va_list ap ) +void vj_event_projection_dec( void *ptr, const char format[], va_list ap ) { - veejay_t *v = (veejay_t*) ptr; - int args[2]; - char *s = NULL; - P_A(args,s,format,ap); - - float inc_x = (float) args[0]; - float inc_y = (float) args[1]; + veejay_t *v = (veejay_t*) ptr; + int args[2]; + char *s = NULL; + P_A(args,s,format,ap); + + float inc_x = (float) args[0]; + float inc_y = (float) args[1]; - if(!v->composite) - { - veejay_msg(0,"No viewport active"); - return; - } - viewport_finetune_coord( composite_get_vp(v->composite),vj_perform_get_width(v), vj_perform_get_height(v), - inc_x, - inc_y); - + if(!v->composite) + { + veejay_msg(0,"No viewport active"); + return; + } + viewport_finetune_coord( composite_get_vp(v->composite),vj_perform_get_width(v), vj_perform_get_height(v), + inc_x, + inc_y); + } -void vj_event_projection_inc( void *ptr, const char format[], va_list ap ) +void vj_event_projection_inc( void *ptr, const char format[], va_list ap ) { - veejay_t *v = (veejay_t*) ptr; - int args[2]; - char *s = NULL; - P_A(args,s,format,ap); - - if(!v->composite) - { - veejay_msg(0,"No viewport active"); - return; - } - viewport_finetune_coord( composite_get_vp(v->composite),vj_perform_get_width(v), vj_perform_get_height(v), - args[0], - args[1]); + veejay_t *v = (veejay_t*) ptr; + int args[2]; + char *s = NULL; + P_A(args,s,format,ap); + + if(!v->composite) + { + veejay_msg(0,"No viewport active"); + return; + } + viewport_finetune_coord( composite_get_vp(v->composite),vj_perform_get_width(v), vj_perform_get_height(v), + args[0], + args[1]); } void vj_event_inc_frame(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - int args[1]; - char *str = NULL; - P_A( args,str,format, ap ); - if(!STREAM_PLAYING(v)) - { - video_playback_setup *s = v->settings; - veejay_set_frame(v, (s->current_frame_num + args[0])); - veejay_msg(VEEJAY_MSG_INFO, "Skip to frame %d", s->current_frame_num); - } - else - { - p_invalid_mode(); - } + veejay_t *v = (veejay_t*) ptr; + int args[1]; + char *str = NULL; + P_A( args,str,format, ap ); + if(!STREAM_PLAYING(v)) + { + video_playback_setup *s = v->settings; + veejay_set_frame(v, (s->current_frame_num + args[0])); + veejay_msg(VEEJAY_MSG_INFO, "Skip to frame %d", s->current_frame_num); + } + else + { + p_invalid_mode(); + } } void vj_event_dec_frame(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t *) ptr; - int args[1]; - char *str = NULL; - P_A( args,str,format, ap ); - if(!STREAM_PLAYING(v)) - { - video_playback_setup *s = v->settings; - veejay_set_frame(v, (s->current_frame_num - args[0])); - veejay_msg(VEEJAY_MSG_INFO, "Skip to frame %d", s->current_frame_num); - } - else - { - p_invalid_mode(); - } + veejay_t *v = (veejay_t *) ptr; + int args[1]; + char *str = NULL; + P_A( args,str,format, ap ); + if(!STREAM_PLAYING(v)) + { + video_playback_setup *s = v->settings; + veejay_set_frame(v, (s->current_frame_num - args[0])); + veejay_msg(VEEJAY_MSG_INFO, "Skip to frame %d", s->current_frame_num); + } + else + { + p_invalid_mode(); + } } void vj_event_prev_second(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t *)ptr; - int args[1]; - char *str = NULL; - P_A( args,str,format, ap ); - if(!STREAM_PLAYING(v)) - { - video_playback_setup *s = v->settings; - veejay_set_frame(v, (s->current_frame_num - (int) - (args[0] * v->current_edit_list->video_fps))); - veejay_msg(VEEJAY_MSG_INFO, "Skip to frame %d", s->current_frame_num ); - } - else - { - p_invalid_mode(); - } + veejay_t *v = (veejay_t *)ptr; + int args[1]; + char *str = NULL; + P_A( args,str,format, ap ); + if(!STREAM_PLAYING(v)) + { + video_playback_setup *s = v->settings; + veejay_set_frame(v, (s->current_frame_num - (int) + (args[0] * v->current_edit_list->video_fps))); + veejay_msg(VEEJAY_MSG_INFO, "Skip to frame %d", s->current_frame_num ); + } + else + { + p_invalid_mode(); + } } void vj_event_next_second(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t *)ptr; - int args[1]; - char *str = NULL; - P_A( args,str,format, ap ); - if(!STREAM_PLAYING(v)) - { - video_playback_setup *s = v->settings; - veejay_set_frame(v, (s->current_frame_num + (int) - ( args[0] * v->current_edit_list->video_fps))); - veejay_msg(VEEJAY_MSG_INFO, "Skip to frame %d", s->current_frame_num ); - } - else - { - p_invalid_mode(); - } + veejay_t *v = (veejay_t *)ptr; + int args[1]; + char *str = NULL; + P_A( args,str,format, ap ); + if(!STREAM_PLAYING(v)) + { + video_playback_setup *s = v->settings; + veejay_set_frame(v, (s->current_frame_num + (int) + ( args[0] * v->current_edit_list->video_fps))); + veejay_msg(VEEJAY_MSG_INFO, "Skip to frame %d", s->current_frame_num ); + } + else + { + p_invalid_mode(); + } } void vj_event_sample_start(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t *)ptr; - video_playback_setup *s = v->settings; - if(SAMPLE_PLAYING(v) || PLAIN_PLAYING(v)) - { - v->uc->sample_start = s->current_frame_num; - veejay_msg(VEEJAY_MSG_INFO, "Change sample starting position to %ld", v->uc->sample_start); - } - else - { - p_invalid_mode(); - } + veejay_t *v = (veejay_t *)ptr; + video_playback_setup *s = v->settings; + if(SAMPLE_PLAYING(v) || PLAIN_PLAYING(v)) + { + v->uc->sample_start = s->current_frame_num; + veejay_msg(VEEJAY_MSG_INFO, "Change sample starting position to %ld", v->uc->sample_start); + } + else + { + p_invalid_mode(); + } } void vj_event_sample_end(void *ptr, const char format[] , va_list ap) { - veejay_t *v = (veejay_t *)ptr; - video_playback_setup *s = v->settings; + veejay_t *v = (veejay_t *)ptr; + video_playback_setup *s = v->settings; - if(PLAIN_PLAYING(v) || SAMPLE_PLAYING(v)) - { - v->uc->sample_end = s->current_frame_num; - - if( v->uc->sample_end < v->uc->sample_start) { - int se = v->uc->sample_end; - v->uc->sample_end = v->uc->sample_start; - v->uc->sample_start = se; - veejay_msg(VEEJAY_MSG_WARNING, "Swapped starting and ending positions: %ld - %ld, please set a new starting position.", v->uc->sample_start,v->uc->sample_end ); - } - - if( v->uc->sample_end > v->uc->sample_start) { + if(PLAIN_PLAYING(v) || SAMPLE_PLAYING(v)) + { + v->uc->sample_end = s->current_frame_num; + + if( v->uc->sample_end < v->uc->sample_start) { + int se = v->uc->sample_end; + v->uc->sample_end = v->uc->sample_start; + v->uc->sample_start = se; + veejay_msg(VEEJAY_MSG_WARNING, "Swapped starting and ending positions: %ld - %ld, please set a new starting position.", v->uc->sample_start,v->uc->sample_end ); + } + + if( v->uc->sample_end > v->uc->sample_start) { - long vstart = v->uc->sample_start; - long vend = v->uc->sample_end; + long vstart = v->uc->sample_start; + long vend = v->uc->sample_end; - if(v->settings->current_playback_speed < 0) { - long tmp = vend; - vend = vstart; - vstart = tmp; - } + if(v->settings->current_playback_speed < 0) { + long tmp = vend; + vend = vstart; + vstart = tmp; + } - if(vstart < 0 ) { - vstart=0; - } - if(vend > v->current_edit_list->total_frames) { - vend = v->current_edit_list->total_frames; - } + if(vstart < 0 ) { + vstart=0; + } + if(vend > v->current_edit_list->total_frames) { + vend = v->current_edit_list->total_frames; + } - editlist *E = v->edit_list; - if( SAMPLE_PLAYING(v)) - E = v->current_edit_list; - editlist *el = veejay_edit_copy_to_new( v, E, vstart, vend ); - if(!el) - { - veejay_msg(VEEJAY_MSG_ERROR, "Unable to clone current editlist!"); - return; - } + editlist *E = v->edit_list; + if( SAMPLE_PLAYING(v)) + E = v->current_edit_list; + editlist *el = veejay_edit_copy_to_new( v, E, vstart, vend ); + if(!el) + { + veejay_msg(VEEJAY_MSG_ERROR, "Unable to clone current editlist!"); + return; + } - long start = 0; - long end = el->total_frames; - - sample_info *skel = sample_skeleton_new(start,end); - if(!skel) - { - veejay_msg(VEEJAY_MSG_ERROR, "Unable to create new sample!"); - return; - } + long start = 0; + long end = el->total_frames; + + sample_info *skel = sample_skeleton_new(start,end); + if(!skel) + { + veejay_msg(VEEJAY_MSG_ERROR, "Unable to create new sample!"); + return; + } - v->uc->sample_start = v->uc->sample_end; // set new starting position (repeat ']') + v->uc->sample_start = v->uc->sample_end; // set new starting position (repeat ']') - skel->edit_list = el; + skel->edit_list = el; - if(sample_store(skel)==0) { - veejay_msg(VEEJAY_MSG_INFO,"Created new Sample %d\t [%ld] | %ld-%ld | [%ld]", - skel->sample_id, - 0, - start, - end, - el->total_frames); - } - else - { - veejay_msg(VEEJAY_MSG_ERROR,"Unable to create new sample"); - } - } - } - else - { - p_invalid_mode(); - } + if(sample_store(skel)==0) { + veejay_msg(VEEJAY_MSG_INFO,"Created new Sample %d\t [%ld] | %ld-%ld | [%ld]", + skel->sample_id, + 0, + start, + end, + el->total_frames); + } + else + { + veejay_msg(VEEJAY_MSG_ERROR,"Unable to create new sample"); + } + } + } + else + { + p_invalid_mode(); + } } void vj_event_goto_end(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - if(STREAM_PLAYING(v)) - { - p_invalid_mode(); - return; - } - if(SAMPLE_PLAYING(v)) - { - veejay_set_frame(v, sample_get_endFrame(v->uc->sample_id)); - veejay_msg(VEEJAY_MSG_INFO, "Goto sample's endings position"); - } - if(PLAIN_PLAYING(v)) - { - veejay_set_frame(v,v->current_edit_list->total_frames); - veejay_msg(VEEJAY_MSG_INFO, "Goto frame %ld of edit decision list", - v->edit_list->total_frames); - } + veejay_t *v = (veejay_t*) ptr; + if(STREAM_PLAYING(v)) + { + p_invalid_mode(); + return; + } + if(SAMPLE_PLAYING(v)) + { + veejay_set_frame(v, sample_get_endFrame(v->uc->sample_id)); + veejay_msg(VEEJAY_MSG_INFO, "Goto sample's endings position"); + } + if(PLAIN_PLAYING(v)) + { + veejay_set_frame(v,v->current_edit_list->total_frames); + veejay_msg(VEEJAY_MSG_INFO, "Goto frame %ld of edit decision list", + v->edit_list->total_frames); + } } void vj_event_goto_start(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - if(STREAM_PLAYING(v)) - { - p_invalid_mode(); - return; - } - if( SAMPLE_PLAYING(v)) - { - veejay_set_frame(v, sample_get_startFrame(v->uc->sample_id)); - veejay_msg(VEEJAY_MSG_INFO, "Goto sample's starting position"); - } - if ( PLAIN_PLAYING(v)) - { - veejay_set_frame(v,0); - veejay_msg(VEEJAY_MSG_INFO, "Goto first frame of edit decision list"); - } + veejay_t *v = (veejay_t*) ptr; + if(STREAM_PLAYING(v)) + { + p_invalid_mode(); + return; + } + if( SAMPLE_PLAYING(v)) + { + veejay_set_frame(v, sample_get_startFrame(v->uc->sample_id)); + veejay_msg(VEEJAY_MSG_INFO, "Goto sample's starting position"); + } + if ( PLAIN_PLAYING(v)) + { + veejay_set_frame(v,0); + veejay_msg(VEEJAY_MSG_INFO, "Goto first frame of edit decision list"); + } } -void vj_event_sample_rand_start( void *ptr, const char format[], va_list ap) +void vj_event_sample_rand_start( void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - video_playback_setup *settings = v->settings; - int args[2]; - char *s = NULL; - P_A(args,s,format,ap); + veejay_t *v = (veejay_t*) ptr; + video_playback_setup *settings = v->settings; + int args[2]; + char *s = NULL; + P_A(args,s,format,ap); - if(args[0] == RANDTIMER_FRAME) - settings->randplayer.timer = RANDTIMER_FRAME; - else - settings->randplayer.timer = RANDTIMER_LENGTH; + if(args[0] == RANDTIMER_FRAME) + settings->randplayer.timer = RANDTIMER_FRAME; + else + settings->randplayer.timer = RANDTIMER_LENGTH; - settings->randplayer.mode = RANDMODE_SAMPLE; + settings->randplayer.mode = RANDMODE_SAMPLE; - vj_perform_randomize(v); - veejay_msg(VEEJAY_MSG_INFO, "Started sample randomizer, %s", - (settings->randplayer.timer == RANDTIMER_FRAME ? "freestyling" : "playing full length of gambled samples")); + vj_perform_randomize(v); + veejay_msg(VEEJAY_MSG_INFO, "Started sample randomizer, %s", + (settings->randplayer.timer == RANDTIMER_FRAME ? "freestyling" : "playing full length of gambled samples")); } -void vj_event_sample_rand_stop( void *ptr, const char format[], va_list ap) +void vj_event_sample_rand_stop( void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - video_playback_setup *settings = v->settings; + veejay_t *v = (veejay_t*) ptr; + video_playback_setup *settings = v->settings; - if(settings->randplayer.mode != RANDMODE_INACTIVE) - veejay_msg(VEEJAY_MSG_INFO, "Stopped sample randomizer"); - else - veejay_msg(VEEJAY_MSG_ERROR, "Sample randomizer not started"); - settings->randplayer.mode = RANDMODE_INACTIVE; + if(settings->randplayer.mode != RANDMODE_INACTIVE) + veejay_msg(VEEJAY_MSG_INFO, "Stopped sample randomizer"); + else + veejay_msg(VEEJAY_MSG_ERROR, "Sample randomizer not started"); + settings->randplayer.mode = RANDMODE_INACTIVE; } void vj_event_sample_set_rand_loop(void *ptr, const char format[], va_list ap) { - int args[2]; - veejay_t *v = (veejay_t*) ptr; - char *s = NULL; - P_A(args,s,format,ap); + int args[2]; + veejay_t *v = (veejay_t*) ptr; + char *s = NULL; + P_A(args,s,format,ap); - SAMPLE_DEFAULTS(args[0]); + SAMPLE_DEFAULTS(args[0]); - if( args[1] == -1 ) - { - if( sample_exists(args[0]) ) - { - int cur_loop = sample_get_looptype(args[0]); - if( cur_loop == 4 ) { - sample_set_looptype(args[0],3 ); - } - else { - sample_set_looptype(args[0],4 ); - } - cur_loop = sample_get_looptype(args[0]); + if( args[1] == -1 ) + { + if( sample_exists(args[0]) ) + { + int cur_loop = sample_get_looptype(args[0]); + if( cur_loop == 4 ) { + sample_set_looptype(args[0],3 ); + } + else { + sample_set_looptype(args[0],4 ); + } + cur_loop = sample_get_looptype(args[0]); - veejay_msg(VEEJAY_MSG_INFO,"Sample %d loop type is now %s", args[0], (cur_loop == 3 ? "Random" : "Play once and keep playing last frame" ) ); - } - else - { - p_no_sample(args[0]); - } + veejay_msg(VEEJAY_MSG_INFO,"Sample %d loop type is now %s", args[0], (cur_loop == 3 ? "Random" : "Play once and keep playing last frame" ) ); + } + else + { + p_no_sample(args[0]); + } - } + } } void vj_event_sample_set_loop_type(void *ptr, const char format[], va_list ap) { - int args[2]; - veejay_t *v = (veejay_t*) ptr; - char *s = NULL; - P_A(args,s,format,ap); + int args[2]; + veejay_t *v = (veejay_t*) ptr; + char *s = NULL; + P_A(args,s,format,ap); - SAMPLE_DEFAULTS(args[0]); + SAMPLE_DEFAULTS(args[0]); - if(args[1] == -1) - { - if(sample_exists(args[0])) - { - if(sample_get_looptype(args[0])==2) - { - int lp; - sample_set_looptype(args[0],1); - lp = sample_get_looptype(args[0]); - veejay_msg(VEEJAY_MSG_INFO, "Sample %d loop type is now %s",args[0], - ( lp==1 ? "Normal Looping" : (lp==2 ? "Pingpong Looping" : "No Looping" ) ) ); - return; - } - else - { - int lp; - sample_set_looptype(args[0],2); - lp = sample_get_looptype(args[0]); - veejay_msg(VEEJAY_MSG_INFO, "Sample %d loop type is now %s",args[0], - ( lp==1 ? "Normal Looping" : lp==2 ? "Pingpong Looping" : "No Looping" ) ); - return; - } - } - else - { - p_no_sample(args[0]); - return; - } - } + if(args[1] == -1) + { + if(sample_exists(args[0])) + { + if(sample_get_looptype(args[0])==2) + { + int lp; + sample_set_looptype(args[0],1); + lp = sample_get_looptype(args[0]); + veejay_msg(VEEJAY_MSG_INFO, "Sample %d loop type is now %s",args[0], + ( lp==1 ? "Normal Looping" : (lp==2 ? "Pingpong Looping" : "No Looping" ) ) ); + return; + } + else + { + int lp; + sample_set_looptype(args[0],2); + lp = sample_get_looptype(args[0]); + veejay_msg(VEEJAY_MSG_INFO, "Sample %d loop type is now %s",args[0], + ( lp==1 ? "Normal Looping" : lp==2 ? "Pingpong Looping" : "No Looping" ) ); + return; + } + } + else + { + p_no_sample(args[0]); + return; + } + } - if(args[1] >= 0 && args[1] <= 4) - { - if(sample_exists(args[0])) - { - int lp; - sample_set_looptype( args[0] , args[1]); - lp = sample_get_looptype(args[0]); - switch(lp) - { - case 0: veejay_msg(VEEJAY_MSG_INFO, "Play once");break; - case 1: veejay_msg(VEEJAY_MSG_INFO, "Normal looping");break; - case 2: veejay_msg(VEEJAY_MSG_INFO, "Pingpong looping");break; - case 3: veejay_msg(VEEJAY_MSG_INFO, "Random frame");break; - case 4: veejay_msg(VEEJAY_MSG_INFO, "Play once (no pause)");break; - } - } - } - else - { - veejay_msg(VEEJAY_MSG_ERROR, "Sample %d does not exist or invalid looptype %d",args[1],args[0]); - } + if(args[1] >= 0 && args[1] <= 4) + { + if(sample_exists(args[0])) + { + int lp; + sample_set_looptype( args[0] , args[1]); + lp = sample_get_looptype(args[0]); + switch(lp) + { + case 0: veejay_msg(VEEJAY_MSG_INFO, "Play once");break; + case 1: veejay_msg(VEEJAY_MSG_INFO, "Normal looping");break; + case 2: veejay_msg(VEEJAY_MSG_INFO, "Pingpong looping");break; + case 3: veejay_msg(VEEJAY_MSG_INFO, "Random frame");break; + case 4: veejay_msg(VEEJAY_MSG_INFO, "Play once (no pause)");break; + } + } + } + else + { + veejay_msg(VEEJAY_MSG_ERROR, "Sample %d does not exist or invalid looptype %d",args[1],args[0]); + } } -void vj_event_sample_set_position( void *ptr, const char format[], va_list ap ) +void vj_event_sample_set_position( void *ptr, const char format[], va_list ap ) { - int args[3]; - veejay_t *v = (veejay_t*) ptr; - char *s = NULL; - P_A(args, s, format, ap); + int args[3]; + veejay_t *v = (veejay_t*) ptr; + char *s = NULL; + P_A(args, s, format, ap); - SAMPLE_DEFAULTS(args[0]); + SAMPLE_DEFAULTS(args[0]); - int entry = args[1]; - if( entry == -1 ) - entry = sample_get_selected_entry(args[0]); + int entry = args[1]; + if( entry == -1 ) + entry = sample_get_selected_entry(args[0]); - sample_get_chain_source(args[0], entry); - int cha = sample_get_chain_channel( args[0], entry ); + sample_get_chain_source(args[0], entry); + int cha = sample_get_chain_channel( args[0], entry ); - int pos = sample_get_offset( cha,entry ); - - pos += args[2]; + int pos = sample_get_offset( cha,entry ); + + pos += args[2]; - sample_set_offset( cha,entry, pos ); + sample_set_offset( cha,entry, pos ); - veejay_msg(VEEJAY_MSG_INFO, "Changed frame position to %d for sample %d on FX entry %d (only)", pos,cha,entry ); + veejay_msg(VEEJAY_MSG_INFO, "Changed frame position to %d for sample %d on FX entry %d (only)", pos,cha,entry ); } -void vj_event_sample_skip_frame(void *ptr, const char format[], va_list ap) +void vj_event_sample_skip_frame(void *ptr, const char format[], va_list ap) { - int args[2]; - veejay_t *v = (veejay_t*) ptr; - char *s = NULL; - P_A(args, s, format, ap); + int args[2]; + veejay_t *v = (veejay_t*) ptr; + char *s = NULL; + P_A(args, s, format, ap); - SAMPLE_DEFAULTS(args[0]); - - int job = sample_highest(); - int i = 1; - int k = 0; - for( i = 1; i <= job; i ++ ) { - sample_info *si = sample_get( i ); - if(!si) - continue; - - //@ find the mixing ID in all effect chains , frame offset is FX chain attribute - for( k = 0; k < SAMPLE_MAX_EFFECTS; k ++ ) { - if( si->effect_chain[k]->effect_id > 0 && // active - si->effect_chain[k]->source_type == 0 && // sample (=0) - si->effect_chain[k]->channel == args[0] ) { // ID - //@ vars needed for range check - int start = sample_get_startFrame( - si->effect_chain[k]->channel ); - int end = sample_get_endFrame( - si->effect_chain[k]->channel ); - int len = end - start; + SAMPLE_DEFAULTS(args[0]); + + int job = sample_highest(); + int i = 1; + int k = 0; + for( i = 1; i <= job; i ++ ) { + sample_info *si = sample_get( i ); + if(!si) + continue; + + //@ find the mixing ID in all effect chains , frame offset is FX chain attribute + for( k = 0; k < SAMPLE_MAX_EFFECTS; k ++ ) { + if( si->effect_chain[k]->effect_id > 0 && // active + si->effect_chain[k]->source_type == 0 && // sample (=0) + si->effect_chain[k]->channel == args[0] ) { // ID + //@ vars needed for range check + int start = sample_get_startFrame( + si->effect_chain[k]->channel ); + int end = sample_get_endFrame( + si->effect_chain[k]->channel ); + int len = end - start; - //@ skip frame = increment current with offset in args[1] - si->effect_chain[k]->frame_offset += args[1]; - - //@ check range - if( si->effect_chain[k]->frame_offset > len ) - si->effect_chain[k]->frame_offset = len; - if( si->effect_chain[k]->frame_offset < 0 ) - si->effect_chain[k]->frame_offset = 0; - - veejay_msg(VEEJAY_MSG_DEBUG, - "Set offset of mixing sample #%d (%d-%d) on chain entry %d of sample %d to %d", - si->effect_chain[k]->channel,start,end, k,i, si->effect_chain[k]->frame_offset ); - } - } - } + //@ skip frame = increment current with offset in args[1] + si->effect_chain[k]->frame_offset += args[1]; + + //@ check range + if( si->effect_chain[k]->frame_offset > len ) + si->effect_chain[k]->frame_offset = len; + if( si->effect_chain[k]->frame_offset < 0 ) + si->effect_chain[k]->frame_offset = 0; + + veejay_msg(VEEJAY_MSG_DEBUG, + "Set offset of mixing sample #%d (%d-%d) on chain entry %d of sample %d to %d", + si->effect_chain[k]->channel,start,end, k,i, si->effect_chain[k]->frame_offset ); + } + } + } } void vj_event_sample_set_speed(void *ptr, const char format[], va_list ap) { - int args[2]; - veejay_t *v = (veejay_t*) ptr; - char *s = NULL; - P_A(args, s, format, ap); + int args[2]; + veejay_t *v = (veejay_t*) ptr; + char *s = NULL; + P_A(args, s, format, ap); - SAMPLE_DEFAULTS(args[0]); + SAMPLE_DEFAULTS(args[0]); - if( sample_set_speed(args[0], args[1]) != -1) - { - veejay_msg(VEEJAY_MSG_INFO, "Changed speed of sample %d to %d",args[0],args[1]); - } - else - { - veejay_msg(VEEJAY_MSG_ERROR, "Speed %d it too high to set on sample %d !", - args[1],args[0]); - } + if( sample_set_speed(args[0], args[1]) != -1) + { + veejay_msg(VEEJAY_MSG_INFO, "Changed speed of sample %d to %d",args[0],args[1]); + } + else + { + veejay_msg(VEEJAY_MSG_ERROR, "Speed %d it too high to set on sample %d !", + args[1],args[0]); + } } void vj_event_sample_set_marker_start(void *ptr, const char format[], va_list ap) { - int args[2]; - veejay_t *v = (veejay_t*)ptr; - - char *str = NULL; - P_A(args,str,format,ap); - - SAMPLE_DEFAULTS(args[0]); + int args[2]; + veejay_t *v = (veejay_t*)ptr; + + char *str = NULL; + P_A(args,str,format,ap); + + SAMPLE_DEFAULTS(args[0]); - if( sample_exists(args[0]) ) - { - int start = 0; int end = 0; - if ( sample_get_el_position( args[0], &start, &end ) ) - { - if( sample_set_marker_start( args[0], args[1] ) ) - { - veejay_msg(VEEJAY_MSG_INFO, "Sample %d marker starting position set at %d", args[0],args[1]); - } - else - { - veejay_msg(VEEJAY_MSG_ERROR, "Cannot set marker position %d for sample %d (limits are %d - %d)",args[1],args[0],start,end); - } - } - } - else - { - p_no_sample( args[0] ); - } + if( sample_exists(args[0]) ) + { + int start = 0; int end = 0; + if ( sample_get_el_position( args[0], &start, &end ) ) + { + if( sample_set_marker_start( args[0], args[1] ) ) + { + veejay_msg(VEEJAY_MSG_INFO, "Sample %d marker starting position set at %d", args[0],args[1]); + } + else + { + veejay_msg(VEEJAY_MSG_ERROR, "Cannot set marker position %d for sample %d (limits are %d - %d)",args[1],args[0],start,end); + } + } + } + else + { + p_no_sample( args[0] ); + } } void vj_event_sample_set_marker_end(void *ptr, const char format[], va_list ap) { - int args[2]; - veejay_t *v = (veejay_t*) ptr; - - char *str = NULL; - P_A(args,str,format,ap); - - SAMPLE_DEFAULTS(args[0]); + int args[2]; + veejay_t *v = (veejay_t*) ptr; + + char *str = NULL; + P_A(args,str,format,ap); + + SAMPLE_DEFAULTS(args[0]); - if( sample_exists(args[0]) ) - { - int start = 0; int end = 0; - if ( sample_get_el_position( args[0], &start, &end ) ) - { - args[1] = end - args[1]; // add sample's ending position - if( sample_set_marker_end( args[0], args[1] ) ) - { - veejay_msg(VEEJAY_MSG_INFO, "Sample %d marker ending position set at position %d", args[0],args[1]); - } - else - { - veejay_msg(VEEJAY_MSG_INFO, "Marker position out side of sample boundaries"); - } - } - } - else - { - p_no_sample(args[0]); - } + if( sample_exists(args[0]) ) + { + int start = 0; int end = 0; + if ( sample_get_el_position( args[0], &start, &end ) ) + { + args[1] = end - args[1]; // add sample's ending position + if( sample_set_marker_end( args[0], args[1] ) ) + { + veejay_msg(VEEJAY_MSG_INFO, "Sample %d marker ending position set at position %d", args[0],args[1]); + } + else + { + veejay_msg(VEEJAY_MSG_INFO, "Marker position out side of sample boundaries"); + } + } + } + else + { + p_no_sample(args[0]); + } } void vj_event_sample_set_marker(void *ptr, const char format[], va_list ap) { - int args[3]; - veejay_t *v = (veejay_t*) ptr; - char *s = NULL; - P_A(args,s,format,ap); - - SAMPLE_DEFAULTS(args[0]); + int args[3]; + veejay_t *v = (veejay_t*) ptr; + char *s = NULL; + P_A(args,s,format,ap); + + SAMPLE_DEFAULTS(args[0]); - if( sample_exists(args[0]) ) - { - int start = 0; - int end = 0; - if( sample_get_el_position( args[0], &start, &end ) ) - { - if( sample_set_marker( args[0], args[1],args[2] ) ) - { - veejay_msg(VEEJAY_MSG_INFO, "Sample %d marker starting position at %d, ending position at %d", args[0],args[1],args[2]); - } - else - { - veejay_msg(VEEJAY_MSG_ERROR, "Cannot set marker %d-%d for sample %d",args[1],args[2],args[0]); - } - } - } - else - { - p_no_sample( args[0] ); - } + if( sample_exists(args[0]) ) + { + int start = 0; + int end = 0; + if( sample_get_el_position( args[0], &start, &end ) ) + { + if( sample_set_marker( args[0], args[1],args[2] ) ) + { + veejay_msg(VEEJAY_MSG_INFO, "Sample %d marker starting position at %d, ending position at %d", args[0],args[1],args[2]); + } + else + { + veejay_msg(VEEJAY_MSG_ERROR, "Cannot set marker %d-%d for sample %d",args[1],args[2],args[0]); + } + } + } + else + { + p_no_sample( args[0] ); + } } void vj_event_sample_set_marker_clear(void *ptr, const char format[],va_list ap) { - int args[1]; - veejay_t *v = (veejay_t*) ptr; - char *s = NULL; - P_A(args,s,format,ap); + int args[1]; + veejay_t *v = (veejay_t*) ptr; + char *s = NULL; + P_A(args,s,format,ap); - SAMPLE_DEFAULTS(args[0]); + SAMPLE_DEFAULTS(args[0]); - if( sample_exists(args[0]) ) - { - if( sample_marker_clear( args[0] ) ) - { - veejay_msg(VEEJAY_MSG_INFO, "Sample %d marker cleared", args[0]); - } - } - else - { - p_no_sample(args[0]); - } + if( sample_exists(args[0]) ) + { + if( sample_marker_clear( args[0] ) ) + { + veejay_msg(VEEJAY_MSG_INFO, "Sample %d marker cleared", args[0]); + } + } + else + { + p_no_sample(args[0]); + } } void vj_event_sample_set_dup(void *ptr, const char format[], va_list ap) { - int args[2]; - veejay_t *v = (veejay_t*) ptr; - char *s = NULL; - P_A(args,s,format,ap); + int args[2]; + veejay_t *v = (veejay_t*) ptr; + char *s = NULL; + P_A(args,s,format,ap); - SAMPLE_DEFAULTS(args[0]); + SAMPLE_DEFAULTS(args[0]); - if( sample_exists(args[0])) - { - if( args[1] <= 0 ) - args[1] = 1; - if( sample_set_framedup( args[0], args[1] ) != -1) - { - veejay_msg(VEEJAY_MSG_INFO, "Sample %d frame repeat set to %d", args[0],args[1]); - if( args[0] == v->uc->sample_id) - { - if(veejay_set_framedup(v, args[1])) - { - veejay_msg(VEEJAY_MSG_INFO, - "Video frame will be duplicated %d to output",args[1]); - } - } - } - else - { - veejay_msg(VEEJAY_MSG_ERROR,"Cannot set frame repeat to %d for sample %d",args[0],args[1]); - } - sample_reset_loopcount( args[0] ); - } - else - { - p_no_sample(args[0]); - } + if( sample_exists(args[0])) + { + if( args[1] <= 0 ) + args[1] = 1; + if( sample_set_framedup( args[0], args[1] ) != -1) + { + veejay_msg(VEEJAY_MSG_INFO, "Sample %d frame repeat set to %d", args[0],args[1]); + if( args[0] == v->uc->sample_id) + { + if(veejay_set_framedup(v, args[1])) + { + veejay_msg(VEEJAY_MSG_INFO, + "Video frame will be duplicated %d to output",args[1]); + } + } + } + else + { + veejay_msg(VEEJAY_MSG_ERROR,"Cannot set frame repeat to %d for sample %d",args[0],args[1]); + } + sample_reset_loopcount( args[0] ); + } + else + { + p_no_sample(args[0]); + } } -void vj_event_tag_set_descr( void *ptr, const char format[], va_list ap) +void vj_event_tag_set_descr( void *ptr, const char format[], va_list ap) { - char str[TAG_MAX_DESCR_LEN]; - int args[2]; - veejay_t *v = (veejay_t*) ptr; - P_A(args,str,format,ap); + char str[TAG_MAX_DESCR_LEN]; + int args[2]; + veejay_t *v = (veejay_t*) ptr; + P_A(args,str,format,ap); - if(!STREAM_PLAYING(v)) - { - p_invalid_mode(); - return; - } + if(!STREAM_PLAYING(v)) + { + p_invalid_mode(); + return; + } - STREAM_DEFAULTS(args[0]); + STREAM_DEFAULTS(args[0]); - if( vj_tag_set_description(args[0],str) == 1) - veejay_msg(VEEJAY_MSG_INFO, "Changed stream title to '%s'", str ); - else - veejay_msg(VEEJAY_MSG_ERROR, "Cannot change title of stream %d to '%s'", args[0], str ); + if( vj_tag_set_description(args[0],str) == 1) + veejay_msg(VEEJAY_MSG_INFO, "Changed stream title to '%s'", str ); + else + veejay_msg(VEEJAY_MSG_ERROR, "Cannot change title of stream %d to '%s'", args[0], str ); } void vj_event_sample_set_descr(void *ptr, const char format[], va_list ap) { - char str[SAMPLE_MAX_DESCR_LEN]; - int args[5]; - veejay_t *v = (veejay_t*) ptr; - P_A(args,str,format,ap); + char str[SAMPLE_MAX_DESCR_LEN]; + int args[5]; + veejay_t *v = (veejay_t*) ptr; + P_A(args,str,format,ap); - SAMPLE_DEFAULTS(args[0]); + SAMPLE_DEFAULTS(args[0]); - if(sample_set_description(args[0],str) == 0) - veejay_msg(VEEJAY_MSG_INFO, "Changed sample title to %s",str); - else - veejay_msg(VEEJAY_MSG_ERROR, "Cannot change title of sample %d to '%s'", args[0],str ); + if(sample_set_description(args[0],str) == 0) + veejay_msg(VEEJAY_MSG_INFO, "Changed sample title to %s",str); + else + veejay_msg(VEEJAY_MSG_ERROR, "Cannot change title of sample %d to '%s'", args[0],str ); } #ifdef HAVE_XML2 void vj_event_sample_save_list(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*)ptr; - char str[1024]; - int *args = NULL; - P_A(args,str,format,ap); - if(sample_writeToFile( str, v->composite,v->seq,v->font, v->uc->sample_id, v->uc->playback_mode) ) - { - veejay_msg(VEEJAY_MSG_INFO, "Saved %d samples to file '%s'", sample_size(), str); - } - else - { - veejay_msg(VEEJAY_MSG_ERROR, "Error saving samples to file %s", str); - } + veejay_t *v = (veejay_t*)ptr; + char str[1024]; + int *args = NULL; + P_A(args,str,format,ap); + if(sample_writeToFile( str, v->composite,v->seq,v->font, v->uc->sample_id, v->uc->playback_mode) ) + { + veejay_msg(VEEJAY_MSG_INFO, "Saved %d samples to file '%s'", sample_size(), str); + } + else + { + veejay_msg(VEEJAY_MSG_ERROR, "Error saving samples to file %s", str); + } } void vj_event_sample_load_list(void *ptr, const char format[], va_list ap) { - char str[1024]; - int *args = NULL; - veejay_t *v = (veejay_t*) ptr; - P_A( args, str, format, ap); + char str[1024]; + int *args = NULL; + veejay_t *v = (veejay_t*) ptr; + P_A( args, str, format, ap); - int id = 0; - int mode = 0; - - if( sample_readFromFile( str, v->composite,v->seq, v->font, v->edit_list,&id, &mode ) ) - { - veejay_msg(VEEJAY_MSG_INFO, "Loaded sample list from file '%s'", str); - } - else - { - veejay_msg(VEEJAY_MSG_ERROR, "Unable to load samples from file '%s", str); - } + int id = 0; + int mode = 0; + + if( sample_readFromFile( str, v->composite,v->seq, v->font, v->edit_list,&id, &mode ) ) + { + veejay_msg(VEEJAY_MSG_INFO, "Loaded sample list from file '%s'", str); + } + else + { + veejay_msg(VEEJAY_MSG_ERROR, "Unable to load samples from file '%s", str); + } } #endif void vj_event_sample_rec_start( void *ptr, const char format[], va_list ap) { - char tmp[255]; - veejay_t *v = (veejay_t *)ptr; - int args[2]; - int result = 0; - char *str = NULL; - char prefix[150]; - P_A(args,str,format,ap); + char tmp[255]; + veejay_t *v = (veejay_t *)ptr; + int args[2]; + int result = 0; + char *str = NULL; + char prefix[150]; + P_A(args,str,format,ap); - if( !SAMPLE_PLAYING(v)) - { - if(!STREAM_PLAYING(v) && !v->seq->active) { - p_invalid_mode(); - return; - } - } - else if( !STREAM_PLAYING(v)) - { - if(!SAMPLE_PLAYING(v) && !v->seq->active) { - p_invalid_mode(); - return; - } - } - - int format_ = _recorder_format; - if(format_==-1) - { - veejay_msg(VEEJAY_MSG_ERROR,"Select a video codec first"); - return; - } + if( !SAMPLE_PLAYING(v)) + { + if(!STREAM_PLAYING(v) && !v->seq->active) { + p_invalid_mode(); + return; + } + } + else if( !STREAM_PLAYING(v)) + { + if(!SAMPLE_PLAYING(v) && !v->seq->active) { + p_invalid_mode(); + return; + } + } + + int format_ = _recorder_format; + if(format_==-1) + { + veejay_msg(VEEJAY_MSG_ERROR,"Select a video codec first"); + return; + } - if( !v->seq->active ) - { - sample_get_description(v->uc->sample_id, prefix ); - } - else - { - if( v->seq->rec_id ) - { - veejay_msg(0, "Already recording the sequence!"); - return; - } - else - { - sprintf( prefix, "sequence_"); - } - } + if( !v->seq->active ) + { + sample_get_description(v->uc->sample_id, prefix ); + } + else + { + if( v->seq->rec_id ) + { + veejay_msg(0, "Already recording the sequence!"); + return; + } + else + { + sprintf( prefix, "sequence_"); + } + } - if(!veejay_create_temp_file(prefix, tmp)) - { - veejay_msg(VEEJAY_MSG_ERROR, "Unable to create temporary file, Record aborted." ); - return; - } + if(!veejay_create_temp_file(prefix, tmp)) + { + veejay_msg(VEEJAY_MSG_ERROR, "Unable to create temporary file, Record aborted." ); + return; + } - if( args[0] == 0 ) - { - if(!v->seq->active ) - { - args[0] = sample_get_longest(v->uc->sample_id); - } - else - { - int i; - for( i = 0; i < MAX_SEQUENCES; i ++ ) - { - if( v->seq->samples[i].type == 0) - args[0] += sample_get_longest( v->seq->samples[i].sample_id ); - else - args[0] += vj_tag_get_n_frames( v->seq->samples[i].sample_id ); - } - } - veejay_msg(VEEJAY_MSG_DEBUG, "\tRecording %d frames (sequencer is %s)", args[0], - (v->seq->active ? "active" : "inactive")); - } + if( args[0] == 0 ) + { + if(!v->seq->active ) + { + args[0] = sample_get_longest(v->uc->sample_id); + } + else + { + int i; + for( i = 0; i < MAX_SEQUENCES; i ++ ) + { + if( v->seq->samples[i].type == 0) + args[0] += sample_get_longest( v->seq->samples[i].sample_id ); + else + args[0] += vj_tag_get_n_frames( v->seq->samples[i].sample_id ); + } + } + veejay_msg(VEEJAY_MSG_DEBUG, "\tRecording %d frames (sequencer is %s)", args[0], + (v->seq->active ? "active" : "inactive")); + } - - if(args[0] <= 1 ) - { - veejay_msg(VEEJAY_MSG_ERROR, "Cowardly refusing to record less then 2 frames"); - return; - } + + if(args[0] <= 1 ) + { + veejay_msg(VEEJAY_MSG_ERROR, "Cowardly refusing to record less then 2 frames"); + return; + } - //FIXME refactor in libvevosample - if( sample_init_encoder( v->uc->sample_id, tmp, format_, v->effect_frame1, v->current_edit_list, args[0]) == 1) - { - video_playback_setup *s = v->settings; - s->sample_record_switch = args[1]; - result = 1; - if(v->use_osd) - { - veejay_msg(VEEJAY_MSG_INFO,"Turned off OSD, recording now"); - v->use_osd = 0; - } - veejay_msg(VEEJAY_MSG_INFO, "Sample recording started , record %d frames from sample %d and %s", - args[0],s->sample_record_id, (args[1] == 1 ? "play new sample" : "dont play new sample" )); - } - else - { - if( STREAM_PLAYING(v) && !vj_tag_exists(v->uc->sample_id) ) - veejay_msg(VEEJAY_MSG_ERROR,"issue #60: You need a sample which identifier matches that of the current playing stream... "); + //FIXME refactor in libvevosample + if( sample_init_encoder( v->uc->sample_id, tmp, format_, v->effect_frame1, v->current_edit_list, args[0]) == 1) + { + video_playback_setup *s = v->settings; + s->sample_record_switch = args[1]; + result = 1; + if(v->use_osd) + { + veejay_msg(VEEJAY_MSG_INFO,"Turned off OSD, recording now"); + v->use_osd = 0; + } + veejay_msg(VEEJAY_MSG_INFO, "Sample recording started , record %d frames from sample %d and %s", + args[0],s->sample_record_id, (args[1] == 1 ? "play new sample" : "dont play new sample" )); + } + else + { + if( STREAM_PLAYING(v) && !vj_tag_exists(v->uc->sample_id) ) + veejay_msg(VEEJAY_MSG_ERROR,"issue #60: You need a sample which identifier matches that of the current playing stream... "); - veejay_msg(VEEJAY_MSG_ERROR,"Unable to start sample recorder"); - sample_stop_encoder( v->uc->sample_id ); - result = 0; - v->settings->sample_record = 0; - return; - } + veejay_msg(VEEJAY_MSG_ERROR,"Unable to start sample recorder"); + sample_stop_encoder( v->uc->sample_id ); + result = 0; + v->settings->sample_record = 0; + return; + } - if(result == 1) - { - v->settings->sample_record = 1; - v->settings->sample_record_switch = args[1]; - } + if(result == 1) + { + v->settings->sample_record = 1; + v->settings->sample_record_switch = args[1]; + } - if( v->seq->active ) - { - int i; - int start_at = 0; - int type_at = 0; - for( i = 0; i < MAX_SEQUENCES; i ++ ) - { - if( sample_exists( v->seq->samples[i].sample_id ) || vj_tag_exists( v->seq->samples[i].sample_id) ) - { - start_at = v->seq->samples[i].sample_id; - type_at = v->seq->samples[i].type; - break; - } - } - - v->seq->rec_id = v->uc->sample_id; + if( v->seq->active ) + { + int i; + int start_at = 0; + int type_at = 0; + for( i = 0; i < MAX_SEQUENCES; i ++ ) + { + if( sample_exists( v->seq->samples[i].sample_id ) || vj_tag_exists( v->seq->samples[i].sample_id) ) + { + start_at = v->seq->samples[i].sample_id; + type_at = v->seq->samples[i].type; + break; + } + } + + v->seq->rec_id = v->uc->sample_id; - if( type_at == 0 ) { - if( start_at == v->uc->sample_id ) - veejay_set_frame(v,sample_get_startFrame(v->uc->sample_id)); - else - veejay_change_playback_mode(v, VJ_PLAYBACK_MODE_SAMPLE, start_at ); - } - else { - veejay_change_playback_mode(v, VJ_PLAYBACK_MODE_TAG, start_at ); - } - } - else - { - veejay_set_frame(v, sample_get_startFrame(v->uc->sample_id)); - v->seq->rec_id = 0; - } + if( type_at == 0 ) { + if( start_at == v->uc->sample_id ) + veejay_set_frame(v,sample_get_startFrame(v->uc->sample_id)); + else + veejay_change_playback_mode(v, VJ_PLAYBACK_MODE_SAMPLE, start_at ); + } + else { + veejay_change_playback_mode(v, VJ_PLAYBACK_MODE_TAG, start_at ); + } + } + else + { + veejay_set_frame(v, sample_get_startFrame(v->uc->sample_id)); + v->seq->rec_id = 0; + } } void vj_event_sample_rec_stop(void *ptr, const char format[], va_list ap) { - char avi_file[1024]; - veejay_t *v = (veejay_t*)ptr; - - if( SAMPLE_PLAYING(v)) - { - video_playback_setup *s = v->settings; - int stop_sample = v->uc->sample_id; + char avi_file[1024]; + veejay_t *v = (veejay_t*)ptr; + + if( SAMPLE_PLAYING(v)) + { + video_playback_setup *s = v->settings; + int stop_sample = v->uc->sample_id; - if(v->seq->active && v->seq->rec_id ) - stop_sample = v->seq->rec_id; + if(v->seq->active && v->seq->rec_id ) + stop_sample = v->seq->rec_id; - if( sample_stop_encoder( stop_sample ) == 1 ) - { - v->settings->sample_record = 0; - if( sample_get_encoded_file( stop_sample, avi_file) <= 0 ) - { - veejay_msg(VEEJAY_MSG_ERROR, "Unable to append file '%s' to sample %d", avi_file, stop_sample); - } - else - { - // add to new sample - int ns = veejay_edit_addmovie_sample(v,avi_file,0 ); - if(ns > 0) - veejay_msg(VEEJAY_MSG_INFO, "Loaded file '%s' to new sample %d",avi_file, ns); - if(ns <= 0 ) - veejay_msg(VEEJAY_MSG_ERROR, "Unable to append file %s to EditList!",avi_file); - - - sample_reset_encoder( stop_sample ); - s->sample_record = 0; - s->sample_record_id = 0; - v->seq->rec_id = 0; - if(s->sample_record_switch) - { - s->sample_record_switch = 0; - if( ns > 0 ) - veejay_change_playback_mode( v,VJ_PLAYBACK_MODE_SAMPLE, ns ); - } - } - } - else - { - veejay_msg(VEEJAY_MSG_ERROR, "Sample recorder was never started for sample %d",stop_sample); - } - } - else - { - p_invalid_mode(); - } + if( sample_stop_encoder( stop_sample ) == 1 ) + { + v->settings->sample_record = 0; + if( sample_get_encoded_file( stop_sample, avi_file) <= 0 ) + { + veejay_msg(VEEJAY_MSG_ERROR, "Unable to append file '%s' to sample %d", avi_file, stop_sample); + } + else + { + // add to new sample + int ns = veejay_edit_addmovie_sample(v,avi_file,0 ); + if(ns > 0) + veejay_msg(VEEJAY_MSG_INFO, "Loaded file '%s' to new sample %d",avi_file, ns); + if(ns <= 0 ) + veejay_msg(VEEJAY_MSG_ERROR, "Unable to append file %s to EditList!",avi_file); + + + sample_reset_encoder( stop_sample ); + s->sample_record = 0; + s->sample_record_id = 0; + v->seq->rec_id = 0; + if(s->sample_record_switch) + { + s->sample_record_switch = 0; + if( ns > 0 ) + veejay_change_playback_mode( v,VJ_PLAYBACK_MODE_SAMPLE, ns ); + } + } + } + else + { + veejay_msg(VEEJAY_MSG_ERROR, "Sample recorder was never started for sample %d",stop_sample); + } + } + else + { + p_invalid_mode(); + } } void vj_event_sample_set_num_loops(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t *)ptr; - int args[2]; - char *s = NULL; - P_A(args,s,format,ap); + veejay_t *v = (veejay_t *)ptr; + int args[2]; + char *s = NULL; + P_A(args,s,format,ap); - SAMPLE_DEFAULTS(args[0]); + SAMPLE_DEFAULTS(args[0]); - if(sample_exists(args[0])) - { + if(sample_exists(args[0])) + { - if( sample_set_loops(args[0], args[1])) - { veejay_msg(VEEJAY_MSG_INFO, "Setted %d no. of loops for sample %d", - sample_get_loops(args[0]),args[0]); - } - else - { - veejay_msg(VEEJAY_MSG_ERROR,"Cannot set %d loops for sample %d",args[1],args[0]); - } + if( sample_set_loops(args[0], args[1])) + { veejay_msg(VEEJAY_MSG_INFO, "Setted %d no. of loops for sample %d", + sample_get_loops(args[0]),args[0]); + } + else + { + veejay_msg(VEEJAY_MSG_ERROR,"Cannot set %d loops for sample %d",args[1],args[0]); + } - } - else - { - p_no_sample(args[0]); - } + } + else + { + p_no_sample(args[0]); + } } void vj_event_sample_rel_start(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t *)ptr; - int args[4]; - char *str = NULL; - int s_start; - int s_end; + veejay_t *v = (veejay_t *)ptr; + int args[4]; + char *str = NULL; + int s_start; + int s_end; - P_A(args,str,format,ap); - SAMPLE_DEFAULTS(args[0]); + P_A(args,str,format,ap); + SAMPLE_DEFAULTS(args[0]); - if(!sample_exists(args[0])) - { - p_no_sample(args[0]); - return; - } + if(!sample_exists(args[0])) + { + p_no_sample(args[0]); + return; + } - s_start = sample_get_startFrame(args[0]) + args[1]; - s_end = sample_get_endFrame(args[0]) + args[2]; + s_start = sample_get_startFrame(args[0]) + args[1]; + s_end = sample_get_endFrame(args[0]) + args[2]; - if (sample_set_startframe(args[0],s_start) && - sample_set_endframe(args[0],s_end)) - { - constrain_sample( v, args[0] ); - veejay_msg(VEEJAY_MSG_INFO, "Sample update start %d end %d", - s_start,s_end); - } + if (sample_set_startframe(args[0],s_start) && + sample_set_endframe(args[0],s_end)) + { + constrain_sample( v, args[0] ); + veejay_msg(VEEJAY_MSG_INFO, "Sample update start %d end %d", + s_start,s_end); + } } void vj_event_sample_set_start(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t *)ptr; - int args[2]; - char *str = NULL; - P_A(args,str,format,ap); + veejay_t *v = (veejay_t *)ptr; + int args[2]; + char *str = NULL; + P_A(args,str,format,ap); - SAMPLE_DEFAULTS(args[0]); + SAMPLE_DEFAULTS(args[0]); - if(!sample_exists(args[0])) - { - p_no_sample(args[0]); - return; - } + if(!sample_exists(args[0])) + { + p_no_sample(args[0]); + return; + } - if( args[1] < sample_get_endFrame(args[0])) { - if( sample_set_startframe(args[0],args[1] ) ) { - veejay_msg(VEEJAY_MSG_INFO, "Sample starting frame updated to frame %d", - sample_get_startFrame(args[0])); - } - else - { - veejay_msg(VEEJAY_MSG_ERROR, "Unable to update sample %d 's starting position to %d",args[0],args[1]); - } - } - else - { - veejay_msg(VEEJAY_MSG_ERROR, "Sample %d 's starting position %d must be greater than ending position %d.", - args[0],args[1], sample_get_endFrame(args[0])); - } + if( args[1] < sample_get_endFrame(args[0])) { + if( sample_set_startframe(args[0],args[1] ) ) { + veejay_msg(VEEJAY_MSG_INFO, "Sample starting frame updated to frame %d", + sample_get_startFrame(args[0])); + } + else + { + veejay_msg(VEEJAY_MSG_ERROR, "Unable to update sample %d 's starting position to %d",args[0],args[1]); + } + } + else + { + veejay_msg(VEEJAY_MSG_ERROR, "Sample %d 's starting position %d must be greater than ending position %d.", + args[0],args[1], sample_get_endFrame(args[0])); + } } void vj_event_sample_set_end(void *ptr, const char format[] , va_list ap) { - veejay_t *v = (veejay_t *)ptr; - int args[2]; - char *str = NULL; - P_A(args,str,format,ap); - - SAMPLE_DEFAULTS(args[0]); + veejay_t *v = (veejay_t *)ptr; + int args[2]; + char *str = NULL; + P_A(args,str,format,ap); + + SAMPLE_DEFAULTS(args[0]); - if(!sample_exists(args[0])) - { - p_no_sample(args[0]); - return; - } + if(!sample_exists(args[0])) + { + p_no_sample(args[0]); + return; + } - if(args[1] == -1) - args[1] = sample_video_length( args[0] ); - - if(args[1] <= 0 ) - { - veejay_msg(0, "Impossible to set ending position %d for sample %d", args[1],args[0] ); - return; - } - if( args[1] >= sample_get_startFrame(args[0])) - { - if(sample_set_endframe(args[0],args[1])) - { - constrain_sample( v, args[0] ); - veejay_msg(VEEJAY_MSG_INFO,"Sample ending frame updated to frame %d", - sample_get_endFrame(args[0])); - } - else - { - veejay_msg(0, "Impossible to set ending position %d for sample %d", args[1],args[0] ); - } - } - else - { - veejay_msg(0, "Ending position must be greater then start position"); - } + if(args[1] == -1) + args[1] = sample_video_length( args[0] ); + + if(args[1] <= 0 ) + { + veejay_msg(0, "Impossible to set ending position %d for sample %d", args[1],args[0] ); + return; + } + if( args[1] >= sample_get_startFrame(args[0])) + { + if(sample_set_endframe(args[0],args[1])) + { + constrain_sample( v, args[0] ); + veejay_msg(VEEJAY_MSG_INFO,"Sample ending frame updated to frame %d", + sample_get_endFrame(args[0])); + } + else + { + veejay_msg(0, "Impossible to set ending position %d for sample %d", args[1],args[0] ); + } + } + else + { + veejay_msg(0, "Ending position must be greater then start position"); + } } void vj_event_sample_del(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - int args[1]; - char *s = NULL; - P_A(args,s,format,ap); - int deleted_sample = 0; + veejay_t *v = (veejay_t*) ptr; + int args[1]; + char *s = NULL; + P_A(args,s,format,ap); + int deleted_sample = 0; - if(SAMPLE_PLAYING(v) && v->uc->sample_id == args[0]) - { - veejay_msg(VEEJAY_MSG_INFO,"Cannot delete sample while playing"); - return; - } + if(SAMPLE_PLAYING(v) && v->uc->sample_id == args[0]) + { + veejay_msg(VEEJAY_MSG_INFO,"Cannot delete sample while playing"); + return; + } - if(sample_del(args[0])) - { - veejay_msg(VEEJAY_MSG_INFO, "Deleted sample %d", args[0]); - deleted_sample = args[0]; - int i; - for( i = 0; i < MAX_SEQUENCES ; i ++ ) - if( v->seq->samples[i].sample_id == deleted_sample && v->seq->samples[i].type == 0 ) - v->seq->samples[i].sample_id = 0; + if(sample_del(args[0])) + { + veejay_msg(VEEJAY_MSG_INFO, "Deleted sample %d", args[0]); + deleted_sample = args[0]; + int i; + for( i = 0; i < MAX_SEQUENCES ; i ++ ) + if( v->seq->samples[i].sample_id == deleted_sample && v->seq->samples[i].type == 0 ) + v->seq->samples[i].sample_id = 0; - sample_verify_delete( args[0] , 0 ); - } - else - { - veejay_msg(VEEJAY_MSG_ERROR, "Unable to delete sample %d",args[0]); - } + sample_verify_delete( args[0] , 0 ); + } + else + { + veejay_msg(VEEJAY_MSG_ERROR, "Unable to delete sample %d",args[0]); + } } void vj_event_sample_copy(void *ptr, const char format[] , va_list ap) { - int args[1]; - char *s = NULL; - int new_sample =0; - P_A(args,s,format,ap); + int args[1]; + char *s = NULL; + int new_sample =0; + P_A(args,s,format,ap); - if( sample_exists(args[0] )) - { - new_sample = sample_copy(args[0]); - if(!new_sample) - veejay_msg(VEEJAY_MSG_ERROR, "Failed to copy sample %d.",args[0]); - } + if( sample_exists(args[0] )) + { + new_sample = sample_copy(args[0]); + if(!new_sample) + veejay_msg(VEEJAY_MSG_ERROR, "Failed to copy sample %d.",args[0]); + } } void vj_event_sample_clear_all(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - if( SAMPLE_PLAYING(v)) { - if( !vj_has_video(v,v->edit_list) ) { - veejay_msg(VEEJAY_MSG_WARNING,"There are no video frames in plain mode."); - if( vj_tag_highest_valid_id() > 0 ) { - veejay_msg(VEEJAY_MSG_WARNING,"Switching to stream 1 to clear all samples"); - veejay_change_playback_mode( v, VJ_PLAYBACK_MODE_TAG, 1 ); - } else { - veejay_msg(VEEJAY_MSG_ERROR, "Nothing to fallback to, cannot delete all samples."); - return; - } - } else { - veejay_change_playback_mode( v, VJ_PLAYBACK_MODE_PLAIN, 0 ); - } - } + veejay_t *v = (veejay_t*) ptr; + if( SAMPLE_PLAYING(v)) { + if( !vj_has_video(v,v->edit_list) ) { + veejay_msg(VEEJAY_MSG_WARNING,"There are no video frames in plain mode."); + if( vj_tag_highest_valid_id() > 0 ) { + veejay_msg(VEEJAY_MSG_WARNING,"Switching to stream 1 to clear all samples"); + veejay_change_playback_mode( v, VJ_PLAYBACK_MODE_TAG, 1 ); + } else { + veejay_msg(VEEJAY_MSG_ERROR, "Nothing to fallback to, cannot delete all samples."); + return; + } + } else { + veejay_change_playback_mode( v, VJ_PLAYBACK_MODE_PLAIN, 0 ); + } + } - sample_del_all(v->edit_list); - vj_font_set_dict( v->font, NULL ); + sample_del_all(v->edit_list); + vj_font_set_dict( v->font, NULL ); - veejay_memset(v->seq->samples, 0, sizeof(int) * MAX_SEQUENCES ); - v->seq->active = 0; - v->seq->size = 0; + veejay_memset(v->seq->samples, 0, sizeof(int) * MAX_SEQUENCES ); + v->seq->active = 0; + v->seq->size = 0; - veejay_msg(VEEJAY_MSG_INFO, "Deleted all samples."); + veejay_msg(VEEJAY_MSG_INFO, "Deleted all samples."); } void vj_event_chain_enable(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*)ptr; - if(SAMPLE_PLAYING(v)) - { - sample_set_effect_status(v->uc->sample_id, 1); - } - else - { - if(STREAM_PLAYING(v)) - { - vj_tag_set_effect_status(v->uc->sample_id, 1); - } - else - p_invalid_mode(); - } - veejay_msg(VEEJAY_MSG_INFO, "Enabled effect chain"); + veejay_t *v = (veejay_t*)ptr; + if(SAMPLE_PLAYING(v)) + { + sample_set_effect_status(v->uc->sample_id, 1); + } + else + { + if(STREAM_PLAYING(v)) + { + vj_tag_set_effect_status(v->uc->sample_id, 1); + } + else + p_invalid_mode(); + } + veejay_msg(VEEJAY_MSG_INFO, "Enabled effect chain"); } -void vj_event_stream_set_length( void *ptr, const char format[], va_list ap) +void vj_event_stream_set_length( void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*)ptr; - int args[2]; - char *s = NULL; - P_A(args,s,format,ap); + veejay_t *v = (veejay_t*)ptr; + int args[2]; + char *s = NULL; + P_A(args,s,format,ap); - if(STREAM_PLAYING(v)) - { - if(args[0] > 0 && args[0] < 2160000 ) //fictious length is maximum 1 day - { - vj_tag_set_n_frames(v->uc->sample_id, args[0]); - v->settings->max_frame_num = args[0]; - constrain_stream( v, v->uc->sample_id, (long) args[0]); - } - else - veejay_msg(VEEJAY_MSG_ERROR, "Ficticious length must be 0 - 2160000"); - } - else - p_invalid_mode(); + if(STREAM_PLAYING(v)) + { + if(args[0] > 0 && args[0] < 2160000 ) //fictious length is maximum 1 day + { + vj_tag_set_n_frames(v->uc->sample_id, args[0]); + v->settings->max_frame_num = args[0]; + constrain_stream( v, v->uc->sample_id, (long) args[0]); + } + else + veejay_msg(VEEJAY_MSG_ERROR, "Ficticious length must be 0 - 2160000"); + } + else + p_invalid_mode(); } void vj_event_chain_disable(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*)ptr; - if(SAMPLE_PLAYING(v) ) - { - sample_set_effect_status(v->uc->sample_id, 0); - veejay_msg(VEEJAY_MSG_INFO, "Effect chain on sample %d is disabled",v->uc->sample_id); - } - else - { - if(STREAM_PLAYING(v) ) - { - vj_tag_set_effect_status(v->uc->sample_id, 0); - veejay_msg(VEEJAY_MSG_INFO, "Effect chain on stream %d is enabled",v->uc->sample_id); - } - else - p_invalid_mode(); - } + veejay_t *v = (veejay_t*)ptr; + if(SAMPLE_PLAYING(v) ) + { + sample_set_effect_status(v->uc->sample_id, 0); + veejay_msg(VEEJAY_MSG_INFO, "Effect chain on sample %d is disabled",v->uc->sample_id); + } + else + { + if(STREAM_PLAYING(v) ) + { + vj_tag_set_effect_status(v->uc->sample_id, 0); + veejay_msg(VEEJAY_MSG_INFO, "Effect chain on stream %d is enabled",v->uc->sample_id); + } + else + p_invalid_mode(); + } } void vj_event_sample_chain_enable(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*)ptr; - int args[4]; - char *s = NULL; - P_A(args,s,format,ap); + veejay_t *v = (veejay_t*)ptr; + int args[4]; + char *s = NULL; + P_A(args,s,format,ap); - SAMPLE_DEFAULTS(args[0]); + SAMPLE_DEFAULTS(args[0]); - if(sample_exists(args[0])) - { - sample_set_effect_status(args[0], 1); - veejay_msg(VEEJAY_MSG_INFO, "Effect chain on Sample %d is enabled",args[0]); - } + if(sample_exists(args[0])) + { + sample_set_effect_status(args[0], 1); + veejay_msg(VEEJAY_MSG_INFO, "Effect chain on Sample %d is enabled",args[0]); + } } -void vj_event_all_samples_chain_toggle(void *ptr, const char format[], va_list ap) +void vj_event_all_samples_chain_toggle(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - int args[1]; - char *s = NULL; - P_A(args,s,format,ap); - if(SAMPLE_PLAYING(v)) - { - int i; - int n = sample_highest_valid_id(); - for(i=1; i <= n; i++) - sample_set_effect_status( i, args[0] ); - veejay_msg(VEEJAY_MSG_INFO, "Effect Chain on all samples %s", (args[0]==0 ? "Disabled" : "Enabled")); - } - else - { - if(STREAM_PLAYING(v)) - { - int i; - int n = vj_tag_highest_valid_id(); - for(i=1; i <= n; i++) - vj_tag_set_effect_status(i,args[0]); - veejay_msg(VEEJAY_MSG_INFO, "Effect Chain on all streams %s", (args[0]==0 ? "Disabled" : "Enabled")); - } - else - p_invalid_mode(); - } + veejay_t *v = (veejay_t*) ptr; + int args[1]; + char *s = NULL; + P_A(args,s,format,ap); + if(SAMPLE_PLAYING(v)) + { + int i; + int n = sample_highest_valid_id(); + for(i=1; i <= n; i++) + sample_set_effect_status( i, args[0] ); + veejay_msg(VEEJAY_MSG_INFO, "Effect Chain on all samples %s", (args[0]==0 ? "Disabled" : "Enabled")); + } + else + { + if(STREAM_PLAYING(v)) + { + int i; + int n = vj_tag_highest_valid_id(); + for(i=1; i <= n; i++) + vj_tag_set_effect_status(i,args[0]); + veejay_msg(VEEJAY_MSG_INFO, "Effect Chain on all streams %s", (args[0]==0 ? "Disabled" : "Enabled")); + } + else + p_invalid_mode(); + } } void vj_event_tag_chain_enable(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*)ptr; - int args[4]; - char *s = NULL; - P_A(args,s,format,ap); + veejay_t *v = (veejay_t*)ptr; + int args[4]; + char *s = NULL; + P_A(args,s,format,ap); - if(!STREAM_PLAYING(v)) - { - p_invalid_mode(); - return; - } + if(!STREAM_PLAYING(v)) + { + p_invalid_mode(); + return; + } - STREAM_DEFAULTS(args[0]); + STREAM_DEFAULTS(args[0]); - if(vj_tag_exists(args[0])) - { - vj_tag_set_effect_status(args[0], 1); - veejay_msg(VEEJAY_MSG_INFO, "Effect chain on stream %d is enabled",args[0]); - } - else - p_no_tag(args[0]); + if(vj_tag_exists(args[0])) + { + vj_tag_set_effect_status(args[0], 1); + veejay_msg(VEEJAY_MSG_INFO, "Effect chain on stream %d is enabled",args[0]); + } + else + p_no_tag(args[0]); } void vj_event_tag_chain_disable(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*)ptr; - int args[2]; - char *s = NULL; - P_A(args,s,format,ap); + veejay_t *v = (veejay_t*)ptr; + int args[2]; + char *s = NULL; + P_A(args,s,format,ap); - STREAM_DEFAULTS(args[0]); + STREAM_DEFAULTS(args[0]); - if(vj_tag_exists(args[0])) - { - vj_tag_set_effect_status(args[0], 0); - veejay_msg(VEEJAY_MSG_INFO, "Effect chain on stream %d is disabled",args[0]); - } - else - { - p_no_tag(args[0]); - } + if(vj_tag_exists(args[0])) + { + vj_tag_set_effect_status(args[0], 0); + veejay_msg(VEEJAY_MSG_INFO, "Effect chain on stream %d is disabled",args[0]); + } + else + { + p_no_tag(args[0]); + } } void vj_event_sample_chain_disable(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*)ptr; - int args[2]; - char *s = NULL; - P_A(args,s,format,ap); + veejay_t *v = (veejay_t*)ptr; + int args[2]; + char *s = NULL; + P_A(args,s,format,ap); - if(args[0] == 0) - { - args[0] = v->uc->sample_id; - } - - if(SAMPLE_PLAYING(v) && sample_exists(args[0])) - { - sample_set_effect_status(args[0], 0); - veejay_msg(VEEJAY_MSG_INFO, "Effect chain on stream %d is disabled",args[0]); - } - if(STREAM_PLAYING(v) && vj_tag_exists(args[0])) - { - vj_tag_set_effect_status(args[0], 0); - veejay_msg(VEEJAY_MSG_INFO, "Effect chain on stream %d is disabled",args[0]); - } + if(args[0] == 0) + { + args[0] = v->uc->sample_id; + } + + if(SAMPLE_PLAYING(v) && sample_exists(args[0])) + { + sample_set_effect_status(args[0], 0); + veejay_msg(VEEJAY_MSG_INFO, "Effect chain on stream %d is disabled",args[0]); + } + if(STREAM_PLAYING(v) && vj_tag_exists(args[0])) + { + vj_tag_set_effect_status(args[0], 0); + veejay_msg(VEEJAY_MSG_INFO, "Effect chain on stream %d is disabled",args[0]); + } } void vj_event_chain_toggle(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*)ptr; - if(SAMPLE_PLAYING(v)) - { - int flag = sample_get_effect_status(v->uc->sample_id); - if(flag == 0) - { - sample_set_effect_status(v->uc->sample_id,1); - } - else - { - sample_set_effect_status(v->uc->sample_id,0); - } - veejay_msg(VEEJAY_MSG_INFO, "Effect chain is %s.", (sample_get_effect_status(v->uc->sample_id) ? "enabled" : "disabled")); - } - if(STREAM_PLAYING(v)) - { - int flag = vj_tag_get_effect_status(v->uc->sample_id); - if(flag == 0) - { - vj_tag_set_effect_status(v->uc->sample_id,1); - } - else - { - vj_tag_set_effect_status(v->uc->sample_id,0); - } - veejay_msg(VEEJAY_MSG_INFO, "Effect chain is %s.", (vj_tag_get_effect_status(v->uc->sample_id) ? "enabled" : "disabled")); - } -} + veejay_t *v = (veejay_t*)ptr; + if(SAMPLE_PLAYING(v)) + { + int flag = sample_get_effect_status(v->uc->sample_id); + if(flag == 0) + { + sample_set_effect_status(v->uc->sample_id,1); + } + else + { + sample_set_effect_status(v->uc->sample_id,0); + } + veejay_msg(VEEJAY_MSG_INFO, "Effect chain is %s.", (sample_get_effect_status(v->uc->sample_id) ? "enabled" : "disabled")); + } + if(STREAM_PLAYING(v)) + { + int flag = vj_tag_get_effect_status(v->uc->sample_id); + if(flag == 0) + { + vj_tag_set_effect_status(v->uc->sample_id,1); + } + else + { + vj_tag_set_effect_status(v->uc->sample_id,0); + } + veejay_msg(VEEJAY_MSG_INFO, "Effect chain is %s.", (vj_tag_get_effect_status(v->uc->sample_id) ? "enabled" : "disabled")); + } +} void vj_event_chain_entry_video_toggle(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*)ptr; - if(SAMPLE_PLAYING(v)) - { - int c = sample_get_selected_entry(v->uc->sample_id); - int flag = sample_get_chain_status(v->uc->sample_id,c); - if(flag == 0) - { - sample_set_chain_status(v->uc->sample_id, c,1); - } - else - { - sample_set_chain_status(v->uc->sample_id, c,0); - } - veejay_msg(VEEJAY_MSG_INFO, "Video on chain entry %d is %s", c, - (flag==0 ? "Disabled" : "Enabled")); - } - if(STREAM_PLAYING(v)) - { - int c = vj_tag_get_selected_entry(v->uc->sample_id); - int flag = vj_tag_get_chain_status( v->uc->sample_id,c); - if(flag == 0) - { - vj_tag_set_chain_status(v->uc->sample_id, c,1); - } - else - { - vj_tag_set_chain_status(v->uc->sample_id, c,0); - } - veejay_msg(VEEJAY_MSG_INFO, "Video on chain entry %d is %s", c, - (flag==0 ? "Disabled" : "Enabled")); + veejay_t *v = (veejay_t*)ptr; + if(SAMPLE_PLAYING(v)) + { + int c = sample_get_selected_entry(v->uc->sample_id); + int flag = sample_get_chain_status(v->uc->sample_id,c); + if(flag == 0) + { + sample_set_chain_status(v->uc->sample_id, c,1); + } + else + { + sample_set_chain_status(v->uc->sample_id, c,0); + } + veejay_msg(VEEJAY_MSG_INFO, "Video on chain entry %d is %s", c, + (flag==0 ? "Disabled" : "Enabled")); + } + if(STREAM_PLAYING(v)) + { + int c = vj_tag_get_selected_entry(v->uc->sample_id); + int flag = vj_tag_get_chain_status( v->uc->sample_id,c); + if(flag == 0) + { + vj_tag_set_chain_status(v->uc->sample_id, c,1); + } + else + { + vj_tag_set_chain_status(v->uc->sample_id, c,0); + } + veejay_msg(VEEJAY_MSG_INFO, "Video on chain entry %d is %s", c, + (flag==0 ? "Disabled" : "Enabled")); - } + } } void vj_event_chain_entry_enable_video(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*)ptr; - int args[2]; - char *s = NULL; - P_A(args,s,format,ap); + veejay_t *v = (veejay_t*)ptr; + int args[2]; + char *s = NULL; + P_A(args,s,format,ap); - if(SAMPLE_PLAYING(v)) - { - SAMPLE_DEFAULTS(args[0]); - if(sample_exists(args[0])) - { - if(args[1] == -1) args[1] = sample_get_selected_entry(args[0]); + if(SAMPLE_PLAYING(v)) + { + SAMPLE_DEFAULTS(args[0]); + if(sample_exists(args[0])) + { + if(args[1] == -1) args[1] = sample_get_selected_entry(args[0]); - if(sample_set_chain_status(args[0],args[1],1) != -1) - { - veejay_msg(VEEJAY_MSG_INFO, "Sample %d: Video on chain entry %d is %s",args[0],args[1], - ( sample_get_chain_status(args[0],args[1]) == 1 ? "Enabled" : "Disabled")); - } - } - else - p_no_sample(args[0]); - } - if(STREAM_PLAYING(v)) - { - STREAM_DEFAULTS(args[0]); + if(sample_set_chain_status(args[0],args[1],1) != -1) + { + veejay_msg(VEEJAY_MSG_INFO, "Sample %d: Video on chain entry %d is %s",args[0],args[1], + ( sample_get_chain_status(args[0],args[1]) == 1 ? "Enabled" : "Disabled")); + } + } + else + p_no_sample(args[0]); + } + if(STREAM_PLAYING(v)) + { + STREAM_DEFAULTS(args[0]); - if(vj_tag_exists(args[0])) - { - if(args[1] == -1) args[1] = vj_tag_get_selected_entry(args[0]); + if(vj_tag_exists(args[0])) + { + if(args[1] == -1) args[1] = vj_tag_get_selected_entry(args[0]); - if(vj_tag_set_chain_status(args[0],args[1],1)!=-1) - { - veejay_msg(VEEJAY_MSG_INFO, "Stream %d: Video on chain entry %d is %s",args[0],args[1], - vj_tag_get_chain_status(args[0],args[1]) == 1 ? "Enabled" : "Disabled" ); - } - } - else - p_no_tag(args[0]); - } + if(vj_tag_set_chain_status(args[0],args[1],1)!=-1) + { + veejay_msg(VEEJAY_MSG_INFO, "Stream %d: Video on chain entry %d is %s",args[0],args[1], + vj_tag_get_chain_status(args[0],args[1]) == 1 ? "Enabled" : "Disabled" ); + } + } + else + p_no_tag(args[0]); + } } void vj_event_chain_entry_disable_video(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*)ptr; - int args[2]; - char *str = NULL; - P_A(args,str,format,ap); + veejay_t *v = (veejay_t*)ptr; + int args[2]; + char *str = NULL; + P_A(args,str,format,ap); - if(SAMPLE_PLAYING(v)) - { - SAMPLE_DEFAULTS(args[0]); + if(SAMPLE_PLAYING(v)) + { + SAMPLE_DEFAULTS(args[0]); - if(sample_exists(args[0])) - { + if(sample_exists(args[0])) + { - if(args[1] == -1) args[1] = sample_get_selected_entry(args[0]); + if(args[1] == -1) args[1] = sample_get_selected_entry(args[0]); - if(v_chi(args[1])) - { - veejay_msg(VEEJAY_MSG_ERROR, "Chain index out of boundaries: %d", args[1]); - return; - } + if(v_chi(args[1])) + { + veejay_msg(VEEJAY_MSG_ERROR, "Chain index out of boundaries: %d", args[1]); + return; + } - if(sample_set_chain_status(args[0],args[1],0)!=-1) - { - veejay_msg(VEEJAY_MSG_INFO, "Sample %d: Video on chain entry %d is %s",args[0],args[1], - ( sample_get_chain_status(args[0],args[1])==1 ? "Enabled" : "Disabled")); - } - } - else - p_no_sample(args[0]); - } - if(STREAM_PLAYING(v)) - { - STREAM_DEFAULTS(args[0]); + if(sample_set_chain_status(args[0],args[1],0)!=-1) + { + veejay_msg(VEEJAY_MSG_INFO, "Sample %d: Video on chain entry %d is %s",args[0],args[1], + ( sample_get_chain_status(args[0],args[1])==1 ? "Enabled" : "Disabled")); + } + } + else + p_no_sample(args[0]); + } + if(STREAM_PLAYING(v)) + { + STREAM_DEFAULTS(args[0]); - if(vj_tag_exists(args[0])) - { + if(vj_tag_exists(args[0])) + { - if(args[1] == -1) args[1] = vj_tag_get_selected_entry(args[0]); - - if(v_chi(args[1])) - { - veejay_msg(VEEJAY_MSG_ERROR, "Chain index out of boundaries: %d", args[1]); - return; - } + if(args[1] == -1) args[1] = vj_tag_get_selected_entry(args[0]); + + if(v_chi(args[1])) + { + veejay_msg(VEEJAY_MSG_ERROR, "Chain index out of boundaries: %d", args[1]); + return; + } - if(vj_tag_set_chain_status(args[0],args[1],0)!=-1) - { - veejay_msg(VEEJAY_MSG_INFO, "Stream %d: Video on chain entry %d is %s",args[0],args[1], - vj_tag_get_chain_status(args[0],args[1]) == 1 ? "Enabled" : "Disabled" ); - } - } - else - p_no_tag(args[0]); - } + if(vj_tag_set_chain_status(args[0],args[1],0)!=-1) + { + veejay_msg(VEEJAY_MSG_INFO, "Stream %d: Video on chain entry %d is %s",args[0],args[1], + vj_tag_get_chain_status(args[0],args[1]) == 1 ? "Enabled" : "Disabled" ); + } + } + else + p_no_tag(args[0]); + } } -void vj_event_chain_fade_follow(void *ptr, const char format[], va_list ap ) +void vj_event_chain_fade_follow(void *ptr, const char format[], va_list ap ) { - int args[2]; - char *str = NULL; - P_A(args,str,format,ap); + int args[2]; + char *str = NULL; + P_A(args,str,format,ap); - if( args[0] == 0 || args[0] == 1 ) { - vj_perform_follow_fade( args[0] ); - } + if( args[0] == 0 || args[0] == 1 ) { + vj_perform_follow_fade( args[0] ); + } } -void vj_event_manual_chain_fade(void *ptr, const char format[], va_list ap) +void vj_event_manual_chain_fade(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - int args[3]; - char *str = NULL; - P_A(args,str,format,ap); + veejay_t *v = (veejay_t*) ptr; + int args[3]; + char *str = NULL; + P_A(args,str,format,ap); - if(args[0] == 0 && (SAMPLE_PLAYING(v) || STREAM_PLAYING(v)) ) - { - args[0] = v->uc->sample_id; - } + if(args[0] == 0 && (SAMPLE_PLAYING(v) || STREAM_PLAYING(v)) ) + { + args[0] = v->uc->sample_id; + } - if( args[1] < 0 || args[1] > 255) - { - veejay_msg(VEEJAY_MSG_DEBUG,"Invalid opacity range %d use [0-255] ", args[1]); - //clamp values - if(args[1] < 0) - args[1] = 0; - if(args[1] > 255) - args[1] = 255; - } + if( args[1] < 0 || args[1] > 255) + { + veejay_msg(VEEJAY_MSG_DEBUG,"Invalid opacity range %d use [0-255] ", args[1]); + //clamp values + if(args[1] < 0) + args[1] = 0; + if(args[1] > 255) + args[1] = 255; + } - args[1] = args[1]; + args[1] = args[1]; - if( SAMPLE_PLAYING(v) && sample_exists(args[0])) - { - if( sample_set_manual_fader( args[0], args[1] ) ) - { - veejay_msg(VEEJAY_MSG_DEBUG, "Set chain fader opacity %f",sample_get_fader_val( args[0])); - } - } - if (STREAM_PLAYING(v) && vj_tag_exists(args[0])) - { - if( vj_tag_set_manual_fader( args[0], args[1] ) ) - { - veejay_msg(VEEJAY_MSG_DEBUG, "Set chain fader opacity %f",vj_tag_get_fader_val(args[0])); - } - } + if( SAMPLE_PLAYING(v) && sample_exists(args[0])) + { + if( sample_set_manual_fader( args[0], args[1] ) ) + { + veejay_msg(VEEJAY_MSG_DEBUG, "Set chain fader opacity %f",sample_get_fader_val( args[0])); + } + } + if (STREAM_PLAYING(v) && vj_tag_exists(args[0])) + { + if( vj_tag_set_manual_fader( args[0], args[1] ) ) + { + veejay_msg(VEEJAY_MSG_DEBUG, "Set chain fader opacity %f",vj_tag_get_fader_val(args[0])); + } + } } -void vj_event_chain_fade_alpha(void *ptr, const char format[], va_list ap) +void vj_event_chain_fade_alpha(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*)ptr; - int args[2]; - char *str = NULL; P_A(args,str,format,ap); + veejay_t *v = (veejay_t*)ptr; + int args[2]; + char *str = NULL; P_A(args,str,format,ap); - if(args[0] == 0 && (SAMPLE_PLAYING(v) || STREAM_PLAYING(v)) ) - { - args[0] = v->uc->sample_id; - } + if(args[0] == 0 && (SAMPLE_PLAYING(v) || STREAM_PLAYING(v)) ) + { + args[0] = v->uc->sample_id; + } - if( SAMPLE_PLAYING(v) && sample_exists(args[0])) - { - sample_set_fade_alpha( args[0], args[1] ); - } - if (STREAM_PLAYING(v) && vj_tag_exists(args[0])) - { - vj_tag_set_fade_alpha( args[0], args[1] ); - } + if( SAMPLE_PLAYING(v) && sample_exists(args[0])) + { + sample_set_fade_alpha( args[0], args[1] ); + } + if (STREAM_PLAYING(v) && vj_tag_exists(args[0])) + { + vj_tag_set_fade_alpha( args[0], args[1] ); + } } -void vj_event_chain_fade_method(void *ptr, const char format[], va_list ap) +void vj_event_chain_fade_method(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*)ptr; - int args[2]; - char *str = NULL; P_A(args,str,format,ap); + veejay_t *v = (veejay_t*)ptr; + int args[2]; + char *str = NULL; P_A(args,str,format,ap); - if(args[0] == 0 && (SAMPLE_PLAYING(v) || STREAM_PLAYING(v)) ) - { - args[0] = v->uc->sample_id; - } + if(args[0] == 0 && (SAMPLE_PLAYING(v) || STREAM_PLAYING(v)) ) + { + args[0] = v->uc->sample_id; + } - if( SAMPLE_PLAYING(v) && sample_exists(args[0])) - { - sample_set_fade_method( args[0], args[1] ); - } - if (STREAM_PLAYING(v) && vj_tag_exists(args[0])) - { - vj_tag_set_fade_method( args[0], args[1] ); - } + if( SAMPLE_PLAYING(v) && sample_exists(args[0])) + { + sample_set_fade_method( args[0], args[1] ); + } + if (STREAM_PLAYING(v) && vj_tag_exists(args[0])) + { + vj_tag_set_fade_method( args[0], args[1] ); + } } -void vj_event_chain_fade_entry(void *ptr, const char format[], va_list ap) +void vj_event_chain_fade_entry(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*)ptr; - int args[2]; - char *str = NULL; P_A(args,str,format,ap); + veejay_t *v = (veejay_t*)ptr; + int args[2]; + char *str = NULL; P_A(args,str,format,ap); - if(args[0] == 0 && (SAMPLE_PLAYING(v) || STREAM_PLAYING(v)) ) - { - args[0] = v->uc->sample_id; - } + if(args[0] == 0 && (SAMPLE_PLAYING(v) || STREAM_PLAYING(v)) ) + { + args[0] = v->uc->sample_id; + } - if( SAMPLE_PLAYING(v) && sample_exists(args[0])) - { - sample_set_fade_entry( args[0], args[1] ); - } - if (STREAM_PLAYING(v) && vj_tag_exists(args[0])) - { - vj_tag_set_fade_entry( args[0], args[1] ); - } + if( SAMPLE_PLAYING(v) && sample_exists(args[0])) + { + sample_set_fade_entry( args[0], args[1] ); + } + if (STREAM_PLAYING(v) && vj_tag_exists(args[0])) + { + vj_tag_set_fade_entry( args[0], args[1] ); + } } void vj_event_chain_fade_in(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*)ptr; - int args[2]; - char *str = NULL; P_A(args,str,format,ap); + veejay_t *v = (veejay_t*)ptr; + int args[2]; + char *str = NULL; P_A(args,str,format,ap); - if(args[0] == 0 && (SAMPLE_PLAYING(v) || STREAM_PLAYING(v)) ) - { - args[0] = v->uc->sample_id; - } + if(args[0] == 0 && (SAMPLE_PLAYING(v) || STREAM_PLAYING(v)) ) + { + args[0] = v->uc->sample_id; + } - if( args[1] == 0 ) - args[1] = 1; //@forward + if( args[1] == 0 ) + args[1] = 1; //@forward - if( SAMPLE_PLAYING(v) && sample_exists(args[0])) - { - if( sample_set_fader_active( args[0], args[1],1 ) ) - { - veejay_msg(VEEJAY_MSG_INFO, "Chain Fade In from sample to full effect chain in %d frames. Per frame %2.4f", - args[1], sample_get_fader_inc(args[0])); - } - } - if (STREAM_PLAYING(v) && vj_tag_exists(args[0])) - { - if( vj_tag_set_fader_active( args[0], args[1],1 ) ) - { - veejay_msg(VEEJAY_MSG_INFO,"Chain Fade In from stream to full effect chain in %d frames. Per frame %2.4f", - args[1], sample_get_fader_inc(args[0])); - } - } + if( SAMPLE_PLAYING(v) && sample_exists(args[0])) + { + if( sample_set_fader_active( args[0], args[1],1 ) ) + { + veejay_msg(VEEJAY_MSG_INFO, "Chain Fade In from sample to full effect chain in %d frames. Per frame %2.4f", + args[1], sample_get_fader_inc(args[0])); + } + } + if (STREAM_PLAYING(v) && vj_tag_exists(args[0])) + { + if( vj_tag_set_fader_active( args[0], args[1],1 ) ) + { + veejay_msg(VEEJAY_MSG_INFO,"Chain Fade In from stream to full effect chain in %d frames. Per frame %2.4f", + args[1], sample_get_fader_inc(args[0])); + } + } } void vj_event_chain_fade_out(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*)ptr; - int args[2]; - char *str = NULL; - P_A(args,str,format,ap); + veejay_t *v = (veejay_t*)ptr; + int args[2]; + char *str = NULL; + P_A(args,str,format,ap); - if(args[0] == 0 && (SAMPLE_PLAYING(v) || STREAM_PLAYING(v)) ) - { - args[0] = v->uc->sample_id; - } + if(args[0] == 0 && (SAMPLE_PLAYING(v) || STREAM_PLAYING(v)) ) + { + args[0] = v->uc->sample_id; + } - if( args[1] == 0 ) //@backward - args[1] = -1; + if( args[1] == 0 ) //@backward + args[1] = -1; - if( SAMPLE_PLAYING(v) && sample_exists(args[0])) - { - if( sample_set_fader_active( args[0], args[1],-1 ) ) - { - veejay_msg(VEEJAY_MSG_INFO, "Chain Fade Out from sample to full effect chain in %d frames. Per frame %2.2f", - args[1], sample_get_fader_inc(args[0])); - } - } - if (STREAM_PLAYING(v) && vj_tag_exists(args[0])) - { - if( vj_tag_set_fader_active( args[0], args[1],-1 ) ) - { - veejay_msg(VEEJAY_MSG_INFO,"Chain Fade Out from stream to full effect chain in %d frames. Per frame %2.2f", - args[1], sample_get_fader_inc(args[0])); - } - } + if( SAMPLE_PLAYING(v) && sample_exists(args[0])) + { + if( sample_set_fader_active( args[0], args[1],-1 ) ) + { + veejay_msg(VEEJAY_MSG_INFO, "Chain Fade Out from sample to full effect chain in %d frames. Per frame %2.2f", + args[1], sample_get_fader_inc(args[0])); + } + } + if (STREAM_PLAYING(v) && vj_tag_exists(args[0])) + { + if( vj_tag_set_fader_active( args[0], args[1],-1 ) ) + { + veejay_msg(VEEJAY_MSG_INFO,"Chain Fade Out from stream to full effect chain in %d frames. Per frame %2.2f", + args[1], sample_get_fader_inc(args[0])); + } + } } void vj_event_chain_clear(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*)ptr; - int args[1]; - char *str = NULL; - P_A(args,str,format,ap); + veejay_t *v = (veejay_t*)ptr; + int args[1]; + char *str = NULL; + P_A(args,str,format,ap); - if(args[0] == 0 && (SAMPLE_PLAYING(v) || STREAM_PLAYING(v)) ) - { - args[0] = v->uc->sample_id; - } + if(args[0] == 0 && (SAMPLE_PLAYING(v) || STREAM_PLAYING(v)) ) + { + args[0] = v->uc->sample_id; + } - if( SAMPLE_PLAYING(v) && sample_exists(args[0])) - { - int i; - for(i=0; i < SAMPLE_MAX_EFFECTS;i++) - { - int effect = sample_get_effect_any(args[0],i); - if(vj_effect_is_valid(effect)) - { - sample_chain_remove(args[0],i); - veejay_msg(VEEJAY_MSG_INFO,"Sample %d: Deleted effect %s from entry %d", - args[0],vj_effect_get_description(effect), i); - } - } - v->uc->chain_changed = 1; - } - if (STREAM_PLAYING(v) && vj_tag_exists(args[0])) - { - int i; - for(i=0; i < SAMPLE_MAX_EFFECTS;i++) - { - int effect = vj_tag_get_effect_any(args[0],i); - if(vj_effect_is_valid(effect)) - { - vj_tag_chain_remove(args[0],i); - veejay_msg(VEEJAY_MSG_INFO,"Stream %d: Deleted effect %s from entry %d", - args[0],vj_effect_get_description(effect), i); - } - } - v->uc->chain_changed = 1; - } + if( SAMPLE_PLAYING(v) && sample_exists(args[0])) + { + int i; + for(i=0; i < SAMPLE_MAX_EFFECTS;i++) + { + int effect = sample_get_effect_any(args[0],i); + if(vj_effect_is_valid(effect)) + { + sample_chain_remove(args[0],i); + veejay_msg(VEEJAY_MSG_INFO,"Sample %d: Deleted effect %s from entry %d", + args[0],vj_effect_get_description(effect), i); + } + } + v->uc->chain_changed = 1; + } + if (STREAM_PLAYING(v) && vj_tag_exists(args[0])) + { + int i; + for(i=0; i < SAMPLE_MAX_EFFECTS;i++) + { + int effect = vj_tag_get_effect_any(args[0],i); + if(vj_effect_is_valid(effect)) + { + vj_tag_chain_remove(args[0],i); + veejay_msg(VEEJAY_MSG_INFO,"Stream %d: Deleted effect %s from entry %d", + args[0],vj_effect_get_description(effect), i); + } + } + v->uc->chain_changed = 1; + } } void vj_event_chain_entry_del(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*)ptr; - int args[2]; - char *str = NULL; - P_A(args,str,format,ap); + veejay_t *v = (veejay_t*)ptr; + int args[2]; + char *str = NULL; + P_A(args,str,format,ap); - if(SAMPLE_PLAYING(v)) - { - SAMPLE_DEFAULTS(args[0]); + if(SAMPLE_PLAYING(v)) + { + SAMPLE_DEFAULTS(args[0]); - if(sample_exists(args[0])) - { - if(args[1] == -1) args[1] = sample_get_selected_entry(args[0]); - if(v_chi(args[1])) - { - veejay_msg(VEEJAY_MSG_ERROR, "Chain index out of boundaries: %d", args[1]); - return; - } + if(sample_exists(args[0])) + { + if(args[1] == -1) args[1] = sample_get_selected_entry(args[0]); + if(v_chi(args[1])) + { + veejay_msg(VEEJAY_MSG_ERROR, "Chain index out of boundaries: %d", args[1]); + return; + } - int effect = sample_get_effect_any(args[0],args[1]); - if( vj_effect_is_valid(effect)) - { - sample_chain_remove(args[0],args[1]); - v->uc->chain_changed = 1; - veejay_msg(VEEJAY_MSG_INFO,"Sample %d: Deleted effect %s from entry %d", - args[0],vj_effect_get_description(effect), args[1]); - } - } - } + int effect = sample_get_effect_any(args[0],args[1]); + if( vj_effect_is_valid(effect)) + { + sample_chain_remove(args[0],args[1]); + v->uc->chain_changed = 1; + veejay_msg(VEEJAY_MSG_INFO,"Sample %d: Deleted effect %s from entry %d", + args[0],vj_effect_get_description(effect), args[1]); + } + } + } - if (STREAM_PLAYING(v)) - { - STREAM_DEFAULTS(args[0]); + if (STREAM_PLAYING(v)) + { + STREAM_DEFAULTS(args[0]); - if(vj_tag_exists(args[0])) - { - if(args[1] == -1) args[1] = vj_tag_get_selected_entry(args[0]); - if(v_chi(args[1])) - { - veejay_msg(VEEJAY_MSG_ERROR, "Chain index out of boundaries: %d", args[1]); - return; - } + if(vj_tag_exists(args[0])) + { + if(args[1] == -1) args[1] = vj_tag_get_selected_entry(args[0]); + if(v_chi(args[1])) + { + veejay_msg(VEEJAY_MSG_ERROR, "Chain index out of boundaries: %d", args[1]); + return; + } - int effect = vj_tag_get_effect_any(args[0],args[1]); - if(vj_effect_is_valid(effect)) - { - vj_tag_chain_remove(args[0],args[1]); - v->uc->chain_changed = 1; - veejay_msg(VEEJAY_MSG_INFO,"Stream %d: Deleted effect %s from entry %d", - args[0],vj_effect_get_description(effect), args[1]); - } - } - } + int effect = vj_tag_get_effect_any(args[0],args[1]); + if(vj_effect_is_valid(effect)) + { + vj_tag_chain_remove(args[0],args[1]); + v->uc->chain_changed = 1; + veejay_msg(VEEJAY_MSG_INFO,"Stream %d: Deleted effect %s from entry %d", + args[0],vj_effect_get_description(effect), args[1]); + } + } + } } void vj_event_chain_entry_set_defaults(void *ptr, const char format[], va_list ap) @@ -5258,1630 +5260,1630 @@ void vj_event_chain_entry_set_defaults(void *ptr, const char format[], va_list a void vj_event_chain_entry_set(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*)ptr; - int args[MAX_ARGUMENTS]; - char *str = NULL; + veejay_t *v = (veejay_t*)ptr; + int args[MAX_ARGUMENTS]; + char *str = NULL; - veejay_memset( args,0,sizeof(args)); + veejay_memset( args,0,sizeof(args)); - P_A(args,str,format,ap); + P_A(args,str,format,ap); - if(SAMPLE_PLAYING(v)) - { - SAMPLE_DEFAULTS(args[0]); + if(SAMPLE_PLAYING(v)) + { + SAMPLE_DEFAULTS(args[0]); - if(sample_exists(args[0])) - { - if(args[1] == -1) args[1] = sample_get_selected_entry(args[0]); - - if(v_chi(args[1])) - { - veejay_msg(VEEJAY_MSG_ERROR, "Chain index out of boundaries: %d", args[1]); - return; - } + if(sample_exists(args[0])) + { + if(args[1] == -1) args[1] = sample_get_selected_entry(args[0]); + + if(v_chi(args[1])) + { + veejay_msg(VEEJAY_MSG_ERROR, "Chain index out of boundaries: %d", args[1]); + return; + } - //int real_id = vj_effect_real_to_sequence(args[2]); - if(sample_chain_add(args[0],args[1],args[2])) - { - v->uc->chain_changed = 1; + //int real_id = vj_effect_real_to_sequence(args[2]); + if(sample_chain_add(args[0],args[1],args[2])) + { + v->uc->chain_changed = 1; - sample_set_chain_status( args[0],args[1], args[3] ); - } - else - { - veejay_msg(VEEJAY_MSG_ERROR, "Cannot set effect %d on sample %d chain %d",args[2],args[0],args[1]); - } - } - } - if( STREAM_PLAYING(v)) - { - STREAM_DEFAULTS(args[0]); - if(vj_tag_exists(args[0])) - { - if(args[1] == -1) args[1] = vj_tag_get_selected_entry(args[0]); + sample_set_chain_status( args[0],args[1], args[3] ); + } + else + { + veejay_msg(VEEJAY_MSG_ERROR, "Cannot set effect %d on sample %d chain %d",args[2],args[0],args[1]); + } + } + } + if( STREAM_PLAYING(v)) + { + STREAM_DEFAULTS(args[0]); + if(vj_tag_exists(args[0])) + { + if(args[1] == -1) args[1] = vj_tag_get_selected_entry(args[0]); - if(v_chi(args[1])) - { - veejay_msg(VEEJAY_MSG_ERROR, "Chain index out of boundaries: %d", args[1]); - return; - } + if(v_chi(args[1])) + { + veejay_msg(VEEJAY_MSG_ERROR, "Chain index out of boundaries: %d", args[1]); + return; + } - if(vj_tag_set_effect(args[0],args[1], args[2])) - { - v->uc->chain_changed = 1; - - vj_tag_set_chain_status( args[0], args[1], args[3] ); - } - else - { - veejay_msg(VEEJAY_MSG_ERROR, "Cannot set effect %d on stream %d chain %d",args[2],args[0],args[1]); - } + if(vj_tag_set_effect(args[0],args[1], args[2])) + { + v->uc->chain_changed = 1; + + vj_tag_set_chain_status( args[0], args[1], args[3] ); + } + else + { + veejay_msg(VEEJAY_MSG_ERROR, "Cannot set effect %d on stream %d chain %d",args[2],args[0],args[1]); + } - } - } + } + } } void vj_event_chain_entry_select(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - int args[1]; - char *str = NULL; P_A(args,str,format,ap); + veejay_t *v = (veejay_t*) ptr; + int args[1]; + char *str = NULL; P_A(args,str,format,ap); - if( SAMPLE_PLAYING(v) ) - { - if(args[0] >= 0 && args[0] < SAMPLE_MAX_EFFECTS) - { - if( sample_set_selected_entry( v->uc->sample_id, args[0])) - { - veejay_msg(VEEJAY_MSG_INFO,"Selected entry %d [%s]", - sample_get_selected_entry(v->uc->sample_id), - vj_effect_get_description( - sample_get_effect_any(v->uc->sample_id,sample_get_selected_entry(v->uc->sample_id)))); - } - } - } - if ( STREAM_PLAYING(v)) - { - if(args[0] >= 0 && args[0] < SAMPLE_MAX_EFFECTS) - { - if( vj_tag_set_selected_entry(v->uc->sample_id,args[0])) - { - veejay_msg(VEEJAY_MSG_INFO, "Selected entry %d [%s]", - vj_tag_get_selected_entry(v->uc->sample_id), - vj_effect_get_description( - vj_tag_get_effect_any(v->uc->sample_id,vj_tag_get_selected_entry(v->uc->sample_id)))); - } - } - } + if( SAMPLE_PLAYING(v) ) + { + if(args[0] >= 0 && args[0] < SAMPLE_MAX_EFFECTS) + { + if( sample_set_selected_entry( v->uc->sample_id, args[0])) + { + veejay_msg(VEEJAY_MSG_INFO,"Selected entry %d [%s]", + sample_get_selected_entry(v->uc->sample_id), + vj_effect_get_description( + sample_get_effect_any(v->uc->sample_id,sample_get_selected_entry(v->uc->sample_id)))); + } + } + } + if ( STREAM_PLAYING(v)) + { + if(args[0] >= 0 && args[0] < SAMPLE_MAX_EFFECTS) + { + if( vj_tag_set_selected_entry(v->uc->sample_id,args[0])) + { + veejay_msg(VEEJAY_MSG_INFO, "Selected entry %d [%s]", + vj_tag_get_selected_entry(v->uc->sample_id), + vj_effect_get_description( + vj_tag_get_effect_any(v->uc->sample_id,vj_tag_get_selected_entry(v->uc->sample_id)))); + } + } + } } void vj_event_entry_up(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - int args[1]; - char *s = NULL; - P_A(args,s,format,ap); - if(SAMPLE_PLAYING(v) || STREAM_PLAYING(v)) - { - int effect_id=-1; - int c=-1; - int flag=-1; + veejay_t *v = (veejay_t*) ptr; + int args[1]; + char *s = NULL; + P_A(args,s,format,ap); + if(SAMPLE_PLAYING(v) || STREAM_PLAYING(v)) + { + int effect_id=-1; + int c=-1; + int flag=-1; - if(SAMPLE_PLAYING(v)) - { - c = sample_get_selected_entry(v->uc->sample_id) + args[0]; - if(c >= SAMPLE_MAX_EFFECTS) c = 0; - sample_set_selected_entry( v->uc->sample_id, c); - effect_id = sample_get_effect_any(v->uc->sample_id, c ); - flag = sample_get_chain_status(v->uc->sample_id,c); - } - if(STREAM_PLAYING(v)) - { - c = vj_tag_get_selected_entry(v->uc->sample_id)+args[0]; - if( c>= SAMPLE_MAX_EFFECTS) c = 0; - vj_tag_set_selected_entry(v->uc->sample_id,c); - effect_id = vj_tag_get_effect_any(v->uc->sample_id,c); - flag = vj_tag_get_chain_status(v->uc->sample_id,c); - } + if(SAMPLE_PLAYING(v)) + { + c = sample_get_selected_entry(v->uc->sample_id) + args[0]; + if(c >= SAMPLE_MAX_EFFECTS) c = 0; + sample_set_selected_entry( v->uc->sample_id, c); + effect_id = sample_get_effect_any(v->uc->sample_id, c ); + flag = sample_get_chain_status(v->uc->sample_id,c); + } + if(STREAM_PLAYING(v)) + { + c = vj_tag_get_selected_entry(v->uc->sample_id)+args[0]; + if( c>= SAMPLE_MAX_EFFECTS) c = 0; + vj_tag_set_selected_entry(v->uc->sample_id,c); + effect_id = vj_tag_get_effect_any(v->uc->sample_id,c); + flag = vj_tag_get_chain_status(v->uc->sample_id,c); + } - veejay_msg(VEEJAY_MSG_INFO, "Entry %d has effect %s %s", - c, vj_effect_get_description(effect_id), (flag==0 ? "Disabled" : "Enabled")); + veejay_msg(VEEJAY_MSG_INFO, "Entry %d has effect %s %s", + c, vj_effect_get_description(effect_id), (flag==0 ? "Disabled" : "Enabled")); - } + } } void vj_event_entry_down(void *ptr, const char format[] ,va_list ap) { - veejay_t *v = (veejay_t*) ptr; - int args[1]; - char *s = NULL; - P_A(args,s,format,ap); - if(SAMPLE_PLAYING(v) || STREAM_PLAYING(v)) - { - int effect_id=-1; - int c = -1; - int flag=-1; - - if(SAMPLE_PLAYING(v)) - { - c = sample_get_selected_entry( v->uc->sample_id ) - args[0]; - if(c < 0) c = SAMPLE_MAX_EFFECTS-1; - sample_set_selected_entry( v->uc->sample_id, c); - effect_id = sample_get_effect_any(v->uc->sample_id, c ); - flag = sample_get_chain_status(v->uc->sample_id,c); - } - if(STREAM_PLAYING(v)) - { - c = vj_tag_get_selected_entry(v->uc->sample_id) - args[0]; - if(c<0) c= SAMPLE_MAX_EFFECTS-1; - vj_tag_set_selected_entry(v->uc->sample_id,c); - effect_id = vj_tag_get_effect_any(v->uc->sample_id,c); - flag = vj_tag_get_chain_status(v->uc->sample_id,c); - } - veejay_msg(VEEJAY_MSG_INFO , "Entry %d has effect %s %s", - c, vj_effect_get_description(effect_id), (flag==0 ? "Disabled" : "Enabled")); - } + veejay_t *v = (veejay_t*) ptr; + int args[1]; + char *s = NULL; + P_A(args,s,format,ap); + if(SAMPLE_PLAYING(v) || STREAM_PLAYING(v)) + { + int effect_id=-1; + int c = -1; + int flag=-1; + + if(SAMPLE_PLAYING(v)) + { + c = sample_get_selected_entry( v->uc->sample_id ) - args[0]; + if(c < 0) c = SAMPLE_MAX_EFFECTS-1; + sample_set_selected_entry( v->uc->sample_id, c); + effect_id = sample_get_effect_any(v->uc->sample_id, c ); + flag = sample_get_chain_status(v->uc->sample_id,c); + } + if(STREAM_PLAYING(v)) + { + c = vj_tag_get_selected_entry(v->uc->sample_id) - args[0]; + if(c<0) c= SAMPLE_MAX_EFFECTS-1; + vj_tag_set_selected_entry(v->uc->sample_id,c); + effect_id = vj_tag_get_effect_any(v->uc->sample_id,c); + flag = vj_tag_get_chain_status(v->uc->sample_id,c); + } + veejay_msg(VEEJAY_MSG_INFO , "Entry %d has effect %s %s", + c, vj_effect_get_description(effect_id), (flag==0 ? "Disabled" : "Enabled")); + } } void vj_event_chain_entry_set_narg_val(void *ptr,const char format[], va_list ap) { - int args[MAX_ARGUMENTS]; - char str[4096]; - int value = 0; - veejay_t *v = (veejay_t*)ptr; + int args[MAX_ARGUMENTS]; + char str[4096]; + int value = 0; + veejay_t *v = (veejay_t*)ptr; - veejay_memset(args,0,sizeof(int) * MAX_ARGUMENTS); + veejay_memset(args,0,sizeof(int) * MAX_ARGUMENTS); - P_A(args,str,format,ap); + P_A(args,str,format,ap); - if( sscanf( str, "%d" , &value ) != 1 ) - { - veejay_msg(VEEJAY_MSG_ERROR, "Invalid value." ); - return; - } + if( sscanf( str, "%d" , &value ) != 1 ) + { + veejay_msg(VEEJAY_MSG_ERROR, "Invalid value." ); + return; + } - if(SAMPLE_PLAYING(v)) - { - SAMPLE_DEFAULTS(args[0]); + if(SAMPLE_PLAYING(v)) + { + SAMPLE_DEFAULTS(args[0]); - if(sample_exists(args[0])) - { - if(args[1] == -1) args[1] = sample_get_selected_entry(args[0]); + if(sample_exists(args[0])) + { + if(args[1] == -1) args[1] = sample_get_selected_entry(args[0]); - if(v_chi(args[1])) - { - veejay_msg(VEEJAY_MSG_ERROR, "Chain index out of boundaries: %d", args[1]); - return; - } - - int effect = sample_get_effect_any(args[0], args[1]); - int num_p = vj_effect_get_num_params(effect); - if( args[2] > num_p ) { - args[2] = num_p; - } + if(v_chi(args[1])) + { + veejay_msg(VEEJAY_MSG_ERROR, "Chain index out of boundaries: %d", args[1]); + return; + } + + int effect = sample_get_effect_any(args[0], args[1]); + int num_p = vj_effect_get_num_params(effect); + if( args[2] > num_p ) { + args[2] = num_p; + } - float min = (float) vj_effect_get_min_limit(effect, args[2]); - float max = (float) vj_effect_get_max_limit(effect, args[2]); + float min = (float) vj_effect_get_min_limit(effect, args[2]); + float max = (float) vj_effect_get_max_limit(effect, args[2]); - float val = min + (max * ((float) value / 100.0f)); + float val = min + (max * ((float) value / 100.0f)); - if(sample_set_effect_arg(args[0],args[1],args[2],(int) val )==-1) - { - veejay_msg(VEEJAY_MSG_ERROR, "Error setting argument %d value %d for %s",args[2],(int)val,vj_effect_get_description(effect)); - } - v->uc->chain_changed = 1; - } - } - else if( STREAM_PLAYING(v)) - { - STREAM_DEFAULTS(args[0]); + if(sample_set_effect_arg(args[0],args[1],args[2],(int) val )==-1) + { + veejay_msg(VEEJAY_MSG_ERROR, "Error setting argument %d value %d for %s",args[2],(int)val,vj_effect_get_description(effect)); + } + v->uc->chain_changed = 1; + } + } + else if( STREAM_PLAYING(v)) + { + STREAM_DEFAULTS(args[0]); - if(vj_tag_exists(args[0])) - { - if(args[1] == -1) args[1] = vj_tag_get_selected_entry(args[0]); - if(v_chi(args[1])) - { - veejay_msg(VEEJAY_MSG_ERROR, "Chain index out of boundaries: %d", args[1]); - return; - } + if(vj_tag_exists(args[0])) + { + if(args[1] == -1) args[1] = vj_tag_get_selected_entry(args[0]); + if(v_chi(args[1])) + { + veejay_msg(VEEJAY_MSG_ERROR, "Chain index out of boundaries: %d", args[1]); + return; + } - int effect = vj_tag_get_effect_any(args[0], args[1]); - int num_p = vj_effect_get_num_params(effect); - if( args[2] > num_p ) { - args[2] = num_p; - } + int effect = vj_tag_get_effect_any(args[0], args[1]); + int num_p = vj_effect_get_num_params(effect); + if( args[2] > num_p ) { + args[2] = num_p; + } - float min = (float) vj_effect_get_min_limit(effect, args[2]); - float max = (float) vj_effect_get_max_limit(effect, args[2]); + float min = (float) vj_effect_get_min_limit(effect, args[2]); + float max = (float) vj_effect_get_max_limit(effect, args[2]); - float val = min + (max * ((float)value/100.0f)); + float val = min + (max * ((float)value/100.0f)); - if(vj_tag_set_effect_arg(args[0],args[1],args[2],(int) val)==-1) - { - veejay_msg(VEEJAY_MSG_ERROR, "Error setting argument %d value %d for %s",args[2],(int)val,vj_effect_get_description(effect)); - } - v->uc->chain_changed = 1; - } - } + if(vj_tag_set_effect_arg(args[0],args[1],args[2],(int) val)==-1) + { + veejay_msg(VEEJAY_MSG_ERROR, "Error setting argument %d value %d for %s",args[2],(int)val,vj_effect_get_description(effect)); + } + v->uc->chain_changed = 1; + } + } } void vj_event_chain_entry_preset(void *ptr,const char format[], va_list ap) { - long int tmp = 0; - int base = 10; - int index = 4; // sample, chain, fx_id, status - int args[MAX_ARGUMENTS]; - char str[1024]; - char *end = str; - veejay_t *v = (veejay_t*)ptr; - veejay_memset(args,0,sizeof(int) * MAX_ARGUMENTS); + long int tmp = 0; + int base = 10; + int index = 4; // sample, chain, fx_id, status + int args[MAX_ARGUMENTS]; + char str[1024]; + char *end = str; + veejay_t *v = (veejay_t*)ptr; + veejay_memset(args,0,sizeof(int) * MAX_ARGUMENTS); - P_A(args,str,format,ap); + P_A(args,str,format,ap); - while( (tmp = strtol( end, &end, base ))) { - args[index] = (int) tmp; - index ++; - } + while( (tmp = strtol( end, &end, base ))) { + args[index] = (int) tmp; + index ++; + } - if(SAMPLE_PLAYING(v)) - { - int num_p = 0; + if(SAMPLE_PLAYING(v)) + { + int num_p = 0; - SAMPLE_DEFAULTS(args[0]); + SAMPLE_DEFAULTS(args[0]); - if(sample_exists(args[0])) - { - if(args[1] == -1) args[1] = sample_get_selected_entry(args[0]); - if(v_chi(args[1])) - { - veejay_msg(VEEJAY_MSG_ERROR, "Chain index out of bounds: %d", args[1]); - return; - } + if(sample_exists(args[0])) + { + if(args[1] == -1) args[1] = sample_get_selected_entry(args[0]); + if(v_chi(args[1])) + { + veejay_msg(VEEJAY_MSG_ERROR, "Chain index out of bounds: %d", args[1]); + return; + } - int real_id = args[2]; - int i; - num_p = vj_effect_get_num_params(real_id); - - if(sample_chain_add( args[0],args[1],args[2])) - { - int args_offset = 4; - - sample_set_chain_status( args[0],args[1], args[3] ); + int real_id = args[2]; + int i; + num_p = vj_effect_get_num_params(real_id); + + if(sample_chain_add( args[0],args[1],args[2])) + { + int args_offset = 4; + + sample_set_chain_status( args[0],args[1], args[3] ); - for(i=0; i < num_p; i++) - { - if(vj_effect_valid_value(real_id,i,args[(i+args_offset)]) ) - { - if(sample_set_effect_arg(args[0],args[1],i,args[(i+args_offset)] )==-1) - { - veejay_msg(VEEJAY_MSG_ERROR, "Error setting argument %d value %d for %s", - i, - args[(i+args_offset)], - vj_effect_get_description(real_id)); - } - } - } - } - } - } - if( STREAM_PLAYING(v)) - { - STREAM_DEFAULTS(args[0]); + for(i=0; i < num_p; i++) + { + if(vj_effect_valid_value(real_id,i,args[(i+args_offset)]) ) + { + if(sample_set_effect_arg(args[0],args[1],i,args[(i+args_offset)] )==-1) + { + veejay_msg(VEEJAY_MSG_ERROR, "Error setting argument %d value %d for %s", + i, + args[(i+args_offset)], + vj_effect_get_description(real_id)); + } + } + } + } + } + } + if( STREAM_PLAYING(v)) + { + STREAM_DEFAULTS(args[0]); - if(vj_tag_exists(args[0])) - { - if(args[1] == -1) args[1] = vj_tag_get_selected_entry(args[0]); - if(v_chi(args[1])) - { - veejay_msg(VEEJAY_MSG_ERROR, "Chain index out of bounds %d", args[1]); - return; - } + if(vj_tag_exists(args[0])) + { + if(args[1] == -1) args[1] = vj_tag_get_selected_entry(args[0]); + if(v_chi(args[1])) + { + veejay_msg(VEEJAY_MSG_ERROR, "Chain index out of bounds %d", args[1]); + return; + } - int real_id = args[2]; - int num_p = vj_effect_get_num_params(real_id); - int i; - - if(vj_tag_set_effect(args[0],args[1], args[2]) ) - { - int args_offset = 4; - - vj_tag_set_chain_status( args[0], args[1], args[3] ); + int real_id = args[2]; + int num_p = vj_effect_get_num_params(real_id); + int i; + + if(vj_tag_set_effect(args[0],args[1], args[2]) ) + { + int args_offset = 4; + + vj_tag_set_chain_status( args[0], args[1], args[3] ); - for(i=0; i < num_p; i++) - { - if(vj_effect_valid_value(real_id, i, args[i+args_offset]) ) - { - if(vj_tag_set_effect_arg(args[0],args[1],i,args[i+args_offset])) - { - veejay_msg(VEEJAY_MSG_DEBUG, "Changed parameter %d to %d (%s)", - i, - args[i+args_offset], - vj_effect_get_description(real_id)); - } - } - else - { - veejay_msg(VEEJAY_MSG_ERROR, "Parameter %d value %d is invalid for effect %d (%d-%d)", - i,args[(i+args_offset)], real_id, - vj_effect_get_min_limit(real_id,i), - vj_effect_get_max_limit(real_id,i)); - } - } - v->uc->chain_changed = 1; - } - } - } + for(i=0; i < num_p; i++) + { + if(vj_effect_valid_value(real_id, i, args[i+args_offset]) ) + { + if(vj_tag_set_effect_arg(args[0],args[1],i,args[i+args_offset])) + { + veejay_msg(VEEJAY_MSG_DEBUG, "Changed parameter %d to %d (%s)", + i, + args[i+args_offset], + vj_effect_get_description(real_id)); + } + } + else + { + veejay_msg(VEEJAY_MSG_ERROR, "Parameter %d value %d is invalid for effect %d (%d-%d)", + i,args[(i+args_offset)], real_id, + vj_effect_get_min_limit(real_id,i), + vj_effect_get_max_limit(real_id,i)); + } + } + v->uc->chain_changed = 1; + } + } + } } void vj_event_chain_entry_src_toggle(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*)ptr; - if(SAMPLE_PLAYING(v)) - { - int entry = sample_get_selected_entry(v->uc->sample_id); - int src = sample_get_chain_source(v->uc->sample_id, entry); - int cha = sample_get_chain_channel( v->uc->sample_id, entry ); - if(src == 0 ) // source is sample, toggle to stream - { - if(!vj_tag_exists(cha)) - { - cha = vj_tag_highest_valid_id(); - if(cha <= 0) - { - veejay_msg(VEEJAY_MSG_ERROR, "No streams to mix with"); - return; - } - } - veejay_msg(VEEJAY_MSG_DEBUG, "Switched from source Sample to Stream"); - //src = vj_tag_get_type(cha); - src = 1; - } - else - { - if(!sample_exists(cha)) - { - cha = sample_highest_valid_id(); - if(cha<=0) - { - veejay_msg(VEEJAY_MSG_ERROR, "No samples to mix with"); - return; - } - } - veejay_msg(VEEJAY_MSG_DEBUG, "Switched from source Stream to Sample"); - src = 0; - } - sample_set_chain_source(v->uc->sample_id,entry,src); - sample_set_chain_channel(v->uc->sample_id,entry,cha); - veejay_msg(VEEJAY_MSG_INFO, "Chain entry %d uses %s %d", entry,(src==VJ_TAG_TYPE_NONE ? "Sample":"Stream"), cha); - if(v->no_bezerk) - { - veejay_set_frame(v, sample_get_startFrame(v->uc->sample_id)); - } - } + veejay_t *v = (veejay_t*)ptr; + if(SAMPLE_PLAYING(v)) + { + int entry = sample_get_selected_entry(v->uc->sample_id); + int src = sample_get_chain_source(v->uc->sample_id, entry); + int cha = sample_get_chain_channel( v->uc->sample_id, entry ); + if(src == 0 ) // source is sample, toggle to stream + { + if(!vj_tag_exists(cha)) + { + cha = vj_tag_highest_valid_id(); + if(cha <= 0) + { + veejay_msg(VEEJAY_MSG_ERROR, "No streams to mix with"); + return; + } + } + veejay_msg(VEEJAY_MSG_DEBUG, "Switched from source Sample to Stream"); + //src = vj_tag_get_type(cha); + src = 1; + } + else + { + if(!sample_exists(cha)) + { + cha = sample_highest_valid_id(); + if(cha<=0) + { + veejay_msg(VEEJAY_MSG_ERROR, "No samples to mix with"); + return; + } + } + veejay_msg(VEEJAY_MSG_DEBUG, "Switched from source Stream to Sample"); + src = 0; + } + sample_set_chain_source(v->uc->sample_id,entry,src); + sample_set_chain_channel(v->uc->sample_id,entry,cha); + veejay_msg(VEEJAY_MSG_INFO, "Chain entry %d uses %s %d", entry,(src==VJ_TAG_TYPE_NONE ? "Sample":"Stream"), cha); + if(v->no_bezerk) + { + veejay_set_frame(v, sample_get_startFrame(v->uc->sample_id)); + } + } - if(STREAM_PLAYING(v)) - { - int entry = vj_tag_get_selected_entry(v->uc->sample_id); - int src = vj_tag_get_chain_source(v->uc->sample_id, entry); - int cha = vj_tag_get_chain_channel( v->uc->sample_id, entry ); - char description[100]; + if(STREAM_PLAYING(v)) + { + int entry = vj_tag_get_selected_entry(v->uc->sample_id); + int src = vj_tag_get_chain_source(v->uc->sample_id, entry); + int cha = vj_tag_get_chain_channel( v->uc->sample_id, entry ); + char description[100]; - if(src == VJ_TAG_TYPE_NONE ) // mix sample, change to stream - { - if(!vj_tag_exists(cha)) - { - cha = vj_tag_highest_valid_id(); - if(cha <= 0) - { - veejay_msg(VEEJAY_MSG_ERROR, "No streams to mix with"); - return; - } - } - src = 1; - } - else - { - if(!sample_exists(cha)) - { - cha = sample_highest_valid_id(); - if(cha<=0) - { - veejay_msg(VEEJAY_MSG_ERROR, "No samples to mix with"); - return; - } - } - src = 0; - } - vj_tag_set_chain_source(v->uc->sample_id,entry,src); - vj_tag_set_chain_channel(v->uc->sample_id,entry,cha); + if(src == VJ_TAG_TYPE_NONE ) // mix sample, change to stream + { + if(!vj_tag_exists(cha)) + { + cha = vj_tag_highest_valid_id(); + if(cha <= 0) + { + veejay_msg(VEEJAY_MSG_ERROR, "No streams to mix with"); + return; + } + } + src = 1; + } + else + { + if(!sample_exists(cha)) + { + cha = sample_highest_valid_id(); + if(cha<=0) + { + veejay_msg(VEEJAY_MSG_ERROR, "No samples to mix with"); + return; + } + } + src = 0; + } + vj_tag_set_chain_source(v->uc->sample_id,entry,src); + vj_tag_set_chain_channel(v->uc->sample_id,entry,cha); - vj_tag_get_descriptive(cha, description); - veejay_msg(VEEJAY_MSG_INFO, "Chain entry %d uses %s %d (%s)", entry,( src == 0 ? "Sample" : "Stream" ), cha,description); - } + vj_tag_get_descriptive(cha, description); + veejay_msg(VEEJAY_MSG_INFO, "Chain entry %d uses %s %d (%s)", entry,( src == 0 ? "Sample" : "Stream" ), cha,description); + } } void vj_event_chain_entry_source(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - int args[3]; - char *str = NULL; - P_A(args,str,format,ap); + veejay_t *v = (veejay_t*) ptr; + int args[3]; + char *str = NULL; + P_A(args,str,format,ap); - if(SAMPLE_PLAYING(v)) - { - SAMPLE_DEFAULTS(args[0]); + if(SAMPLE_PLAYING(v)) + { + SAMPLE_DEFAULTS(args[0]); - if(sample_exists(args[0])) - { - if(args[1] == -1) args[1] = sample_get_selected_entry(args[0]); - if(v_chi(args[1])) - { - veejay_msg(VEEJAY_MSG_ERROR, "Chain index out of boundaries: %d", args[1]); - return; - } + if(sample_exists(args[0])) + { + if(args[1] == -1) args[1] = sample_get_selected_entry(args[0]); + if(v_chi(args[1])) + { + veejay_msg(VEEJAY_MSG_ERROR, "Chain index out of boundaries: %d", args[1]); + return; + } - int src = args[2]; - int c = sample_get_chain_channel(args[0],args[1]); - if(src == VJ_TAG_TYPE_NONE) - { - if(!sample_exists(c)) - { - c = sample_highest_valid_id(); - if(c<=0) - { - veejay_msg(VEEJAY_MSG_ERROR, "You should create a sample first\n"); - return; - } - } - } - else - { - if(!vj_tag_exists(c) ) - { - c = vj_tag_highest_valid_id(); - if(c<=0) - { - veejay_msg(VEEJAY_MSG_ERROR, "You should create a stream first (there are none)"); - return; - } - src = vj_tag_get_type(c); - } - } + int src = args[2]; + int c = sample_get_chain_channel(args[0],args[1]); + if(src == VJ_TAG_TYPE_NONE) + { + if(!sample_exists(c)) + { + c = sample_highest_valid_id(); + if(c<=0) + { + veejay_msg(VEEJAY_MSG_ERROR, "You should create a sample first\n"); + return; + } + } + } + else + { + if(!vj_tag_exists(c) ) + { + c = vj_tag_highest_valid_id(); + if(c<=0) + { + veejay_msg(VEEJAY_MSG_ERROR, "You should create a stream first (there are none)"); + return; + } + src = vj_tag_get_type(c); + } + } - if(c > 0) - { - sample_set_chain_channel(args[0],args[1], c); - sample_set_chain_source (args[0],args[1],src); - int sample_offset = sample_get_offset(args[0],args[1]); - int sample_speed = 0; - if( src == VJ_TAG_TYPE_NONE ) - sample_speed = sample_get_speed(c); - veejay_msg(VEEJAY_MSG_INFO, "Mixing with source (%s %d) at speed %d position %d", - src == VJ_TAG_TYPE_NONE ? "sample" : "stream",c,sample_speed,sample_offset); - if(v->no_bezerk) - { - veejay_set_frame(v, - sample_get_startFrame(args[0])); - } - } - - } - } - if(STREAM_PLAYING(v)) - { - STREAM_DEFAULTS(args[0]); + if(c > 0) + { + sample_set_chain_channel(args[0],args[1], c); + sample_set_chain_source (args[0],args[1],src); + int sample_offset = sample_get_offset(args[0],args[1]); + int sample_speed = 0; + if( src == VJ_TAG_TYPE_NONE ) + sample_speed = sample_get_speed(c); + veejay_msg(VEEJAY_MSG_INFO, "Mixing with source (%s %d) at speed %d position %d", + src == VJ_TAG_TYPE_NONE ? "sample" : "stream",c,sample_speed,sample_offset); + if(v->no_bezerk) + { + veejay_set_frame(v, + sample_get_startFrame(args[0])); + } + } + + } + } + if(STREAM_PLAYING(v)) + { + STREAM_DEFAULTS(args[0]); - if(vj_tag_exists(args[0])) - { - if(args[1] == -1) args[1] = vj_tag_get_selected_entry(args[0]); - if(v_chi(args[1])) - { - veejay_msg(VEEJAY_MSG_ERROR, "Chain index out of boundaries: %d", args[1]); - return; - } + if(vj_tag_exists(args[0])) + { + if(args[1] == -1) args[1] = vj_tag_get_selected_entry(args[0]); + if(v_chi(args[1])) + { + veejay_msg(VEEJAY_MSG_ERROR, "Chain index out of boundaries: %d", args[1]); + return; + } - int src = args[2]; - int c = vj_tag_get_chain_channel(args[0],args[1]); + int src = args[2]; + int c = vj_tag_get_chain_channel(args[0],args[1]); - if(src == VJ_TAG_TYPE_NONE) - { - if(!sample_exists(c)) - { - c = sample_highest_valid_id(); - if(c<=0) - { - veejay_msg(VEEJAY_MSG_ERROR, "You should create a sample first\n"); - return; - } - } - } - else - { - if(!vj_tag_exists(c) ) - { - c = vj_tag_highest_valid_id(); - if(c<=0) - { - veejay_msg(VEEJAY_MSG_ERROR, "You should create a stream first (there are none)"); - return; - } - src = vj_tag_get_type(c); - } - } + if(src == VJ_TAG_TYPE_NONE) + { + if(!sample_exists(c)) + { + c = sample_highest_valid_id(); + if(c<=0) + { + veejay_msg(VEEJAY_MSG_ERROR, "You should create a sample first\n"); + return; + } + } + } + else + { + if(!vj_tag_exists(c) ) + { + c = vj_tag_highest_valid_id(); + if(c<=0) + { + veejay_msg(VEEJAY_MSG_ERROR, "You should create a stream first (there are none)"); + return; + } + src = vj_tag_get_type(c); + } + } - if(c > 0) - { - vj_tag_set_chain_channel(args[0],args[1], c); - vj_tag_set_chain_source (args[0],args[1],src); - int sample_offset = vj_tag_get_offset(args[0],args[1]); - int sample_speed = 0; - if( src == VJ_TAG_TYPE_NONE ) - sample_speed = sample_get_speed(c); + if(c > 0) + { + vj_tag_set_chain_channel(args[0],args[1], c); + vj_tag_set_chain_source (args[0],args[1],src); + int sample_offset = vj_tag_get_offset(args[0],args[1]); + int sample_speed = 0; + if( src == VJ_TAG_TYPE_NONE ) + sample_speed = sample_get_speed(c); - veejay_msg(VEEJAY_MSG_INFO, "Mixing with source (%s %d) at speed %d position %d", - src==VJ_TAG_TYPE_NONE ? "sample" : "stream",c,sample_speed, sample_offset); - } - } - } + veejay_msg(VEEJAY_MSG_INFO, "Mixing with source (%s %d) at speed %d position %d", + src==VJ_TAG_TYPE_NONE ? "sample" : "stream",c,sample_speed, sample_offset); + } + } + } } #define clamp_channel( a, b, c ) ( ( a < b ? c : (a >= c ? b : a ))) void vj_event_chain_entry_channel_dec(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*)ptr; - int args[1]; - char *str = NULL; P_A(args,str,format,ap); + veejay_t *v = (veejay_t*)ptr; + int args[1]; + char *str = NULL; P_A(args,str,format,ap); - if(SAMPLE_PLAYING(v)) - { - int entry = sample_get_selected_entry(v->uc->sample_id); - int cha = sample_get_chain_channel(v->uc->sample_id,entry); - int src = sample_get_chain_source(v->uc->sample_id,entry); - int old = cha; - if(src==VJ_TAG_TYPE_NONE) - { //decrease sample id - cha = cha - args[0]; - if( sample_size() <= 0 ) - { - veejay_msg(0, "No samples to mix with"); - return; - } - clamp_channel( - cha, - 1, - sample_highest_valid_id() ); + if(SAMPLE_PLAYING(v)) + { + int entry = sample_get_selected_entry(v->uc->sample_id); + int cha = sample_get_chain_channel(v->uc->sample_id,entry); + int src = sample_get_chain_source(v->uc->sample_id,entry); + int old = cha; + if(src==VJ_TAG_TYPE_NONE) + { //decrease sample id + cha = cha - args[0]; + if( sample_size() <= 0 ) + { + veejay_msg(0, "No samples to mix with"); + return; + } + clamp_channel( + cha, + 1, + sample_highest_valid_id() ); - if( !sample_exists( cha ) ) - cha = old; - } - else - { - cha = cha - args[0]; - if( vj_tag_size() <= 0 ) - { - veejay_msg(0, "No streams to mix with"); - return; - } - clamp_channel( - cha, - 1, - vj_tag_highest_valid_id() ); + if( !sample_exists( cha ) ) + cha = old; + } + else + { + cha = cha - args[0]; + if( vj_tag_size() <= 0 ) + { + veejay_msg(0, "No streams to mix with"); + return; + } + clamp_channel( + cha, + 1, + vj_tag_highest_valid_id() ); - if( !vj_tag_exists( cha )) - cha = old; - } - sample_set_chain_channel( v->uc->sample_id, entry, cha ); - veejay_msg(VEEJAY_MSG_INFO, "Chain entry %d uses %s %d",entry, - (src==VJ_TAG_TYPE_NONE ? "Sample" : "Stream"),cha); - - if(v->no_bezerk) - veejay_set_frame(v , sample_get_startFrame(v->uc->sample_id)); - } - if(STREAM_PLAYING(v)) - { - int entry = vj_tag_get_selected_entry(v->uc->sample_id); - int cha = vj_tag_get_chain_channel(v->uc->sample_id,entry); - int src = vj_tag_get_chain_source(v->uc->sample_id,entry); - int old = cha; - char description[100]; + if( !vj_tag_exists( cha )) + cha = old; + } + sample_set_chain_channel( v->uc->sample_id, entry, cha ); + veejay_msg(VEEJAY_MSG_INFO, "Chain entry %d uses %s %d",entry, + (src==VJ_TAG_TYPE_NONE ? "Sample" : "Stream"),cha); + + if(v->no_bezerk) + veejay_set_frame(v , sample_get_startFrame(v->uc->sample_id)); + } + if(STREAM_PLAYING(v)) + { + int entry = vj_tag_get_selected_entry(v->uc->sample_id); + int cha = vj_tag_get_chain_channel(v->uc->sample_id,entry); + int src = vj_tag_get_chain_source(v->uc->sample_id,entry); + int old = cha; + char description[100]; - if(src==VJ_TAG_TYPE_NONE) - { //decrease sample id - cha = cha - args[0]; - if( sample_size() <= 0 ) - { - veejay_msg(0, "No samples to mix with"); - return; - } - clamp_channel( - cha, - 1, - sample_highest_valid_id() ); - if( !sample_exists(cha ) ) - cha = old; - } - else - { - cha = cha - args[0]; - if( vj_tag_size() <= 0 ) - { - veejay_msg(0, "No streams to mix with"); - return; - } - clamp_channel( - cha, - 1, - vj_tag_highest_valid_id() ); - if(! vj_tag_exists( cha )) - cha = old; - } + if(src==VJ_TAG_TYPE_NONE) + { //decrease sample id + cha = cha - args[0]; + if( sample_size() <= 0 ) + { + veejay_msg(0, "No samples to mix with"); + return; + } + clamp_channel( + cha, + 1, + sample_highest_valid_id() ); + if( !sample_exists(cha ) ) + cha = old; + } + else + { + cha = cha - args[0]; + if( vj_tag_size() <= 0 ) + { + veejay_msg(0, "No streams to mix with"); + return; + } + clamp_channel( + cha, + 1, + vj_tag_highest_valid_id() ); + if(! vj_tag_exists( cha )) + cha = old; + } - vj_tag_set_chain_channel( v->uc->sample_id, entry, cha ); - vj_tag_get_descriptive( cha, description); + vj_tag_set_chain_channel( v->uc->sample_id, entry, cha ); + vj_tag_get_descriptive( cha, description); - veejay_msg(VEEJAY_MSG_INFO, "Chain entry %d uses Stream %d (%s)",entry,cha,description); - } + veejay_msg(VEEJAY_MSG_INFO, "Chain entry %d uses Stream %d (%s)",entry,cha,description); + } } void vj_event_chain_entry_channel_inc(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*)ptr; - int args[1]; - char *str = NULL; P_A(args,str,format,ap); + veejay_t *v = (veejay_t*)ptr; + int args[1]; + char *str = NULL; P_A(args,str,format,ap); - if(SAMPLE_PLAYING(v)) - { - int entry = sample_get_selected_entry(v->uc->sample_id); - int cha = sample_get_chain_channel(v->uc->sample_id,entry); - int src = sample_get_chain_source(v->uc->sample_id,entry); - int old = cha; - if(src==VJ_TAG_TYPE_NONE) - { //decrease sample id - cha = cha + args[0]; - if( sample_size() <= 0 ) - { - veejay_msg(0, "No samples to mix with"); - return; - } - clamp_channel( - cha, - 1, - sample_highest_valid_id() ); - if( !sample_exists( cha ) ) - cha = old; - } - else - { - cha = cha + args[0]; - if( vj_tag_size() <= 0 ) - { - veejay_msg(0, "No streams to mix with"); - return; - } - clamp_channel( - cha, - 1, - vj_tag_highest_valid_id() ); - if( !vj_tag_exists(cha) ) - cha = old; - } - - sample_set_chain_channel( v->uc->sample_id, entry, cha ); - veejay_msg(VEEJAY_MSG_INFO, "Chain entry %d uses %s %d",entry, - (src==VJ_TAG_TYPE_NONE ? "Sample" : "Stream"),cha); -// if(v->no_bezerk) veejay_set_sample(v, v->uc->sample_id); - if(v->no_bezerk) veejay_set_frame(v,sample_get_startFrame(v->uc->sample_id)); - - } - if(STREAM_PLAYING(v)) - { - int entry = vj_tag_get_selected_entry(v->uc->sample_id); - int cha = vj_tag_get_chain_channel(v->uc->sample_id,entry); - int src = vj_tag_get_chain_source(v->uc->sample_id,entry); - int old = cha; - char description[100]; + if(SAMPLE_PLAYING(v)) + { + int entry = sample_get_selected_entry(v->uc->sample_id); + int cha = sample_get_chain_channel(v->uc->sample_id,entry); + int src = sample_get_chain_source(v->uc->sample_id,entry); + int old = cha; + if(src==VJ_TAG_TYPE_NONE) + { //decrease sample id + cha = cha + args[0]; + if( sample_size() <= 0 ) + { + veejay_msg(0, "No samples to mix with"); + return; + } + clamp_channel( + cha, + 1, + sample_highest_valid_id() ); + if( !sample_exists( cha ) ) + cha = old; + } + else + { + cha = cha + args[0]; + if( vj_tag_size() <= 0 ) + { + veejay_msg(0, "No streams to mix with"); + return; + } + clamp_channel( + cha, + 1, + vj_tag_highest_valid_id() ); + if( !vj_tag_exists(cha) ) + cha = old; + } + + sample_set_chain_channel( v->uc->sample_id, entry, cha ); + veejay_msg(VEEJAY_MSG_INFO, "Chain entry %d uses %s %d",entry, + (src==VJ_TAG_TYPE_NONE ? "Sample" : "Stream"),cha); +// if(v->no_bezerk) veejay_set_sample(v, v->uc->sample_id); + if(v->no_bezerk) veejay_set_frame(v,sample_get_startFrame(v->uc->sample_id)); + + } + if(STREAM_PLAYING(v)) + { + int entry = vj_tag_get_selected_entry(v->uc->sample_id); + int cha = vj_tag_get_chain_channel(v->uc->sample_id,entry); + int src = vj_tag_get_chain_source(v->uc->sample_id,entry); + int old = cha; + char description[100]; - if(src==0) - { //decrease sample id - cha = cha + args[0]; - if( sample_size() <= 0 ) - { - veejay_msg(0, "No samples to mix with"); - return; - } - clamp_channel( - cha, - 1, - sample_highest_valid_id() ); - if( !sample_exists( cha ) ) - cha = old; - } - else - { - cha = cha + args[0]; - if( vj_tag_size() <= 0 ) - { - veejay_msg(0, "No streams to mix with"); - return; - } - clamp_channel( - cha, - 1, - vj_tag_highest_valid_id() ); - if( !vj_tag_exists( cha )) - cha = old; - } + if(src==0) + { //decrease sample id + cha = cha + args[0]; + if( sample_size() <= 0 ) + { + veejay_msg(0, "No samples to mix with"); + return; + } + clamp_channel( + cha, + 1, + sample_highest_valid_id() ); + if( !sample_exists( cha ) ) + cha = old; + } + else + { + cha = cha + args[0]; + if( vj_tag_size() <= 0 ) + { + veejay_msg(0, "No streams to mix with"); + return; + } + clamp_channel( + cha, + 1, + vj_tag_highest_valid_id() ); + if( !vj_tag_exists( cha )) + cha = old; + } - vj_tag_set_chain_channel( v->uc->sample_id, entry, cha ); - vj_tag_get_descriptive( cha, description); -// if(v->no_bezerk) veejay_set_sample(v, v->uc->sample_id); + vj_tag_set_chain_channel( v->uc->sample_id, entry, cha ); + vj_tag_get_descriptive( cha, description); +// if(v->no_bezerk) veejay_set_sample(v, v->uc->sample_id); - veejay_msg(VEEJAY_MSG_INFO, "Chain entry %d uses Stream %d (%s)",entry, - vj_tag_get_chain_channel(v->uc->sample_id,entry),description); - } + veejay_msg(VEEJAY_MSG_INFO, "Chain entry %d uses Stream %d (%s)",entry, + vj_tag_get_chain_channel(v->uc->sample_id,entry),description); + } } void vj_event_chain_entry_channel(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*)ptr; - int args[3]; - char *str = NULL; P_A(args,str,format,ap); - if(SAMPLE_PLAYING(v)) - { - SAMPLE_DEFAULTS(args[0]); + veejay_t *v = (veejay_t*)ptr; + int args[3]; + char *str = NULL; P_A(args,str,format,ap); + if(SAMPLE_PLAYING(v)) + { + SAMPLE_DEFAULTS(args[0]); - if(sample_exists(args[0])) - { - if(args[1] == -1) args[1] = sample_get_selected_entry(args[0]); - if(v_chi(args[1])) - { - veejay_msg(VEEJAY_MSG_ERROR, "Chain index out of bounds: %d", args[1]); - return; - } + if(sample_exists(args[0])) + { + if(args[1] == -1) args[1] = sample_get_selected_entry(args[0]); + if(v_chi(args[1])) + { + veejay_msg(VEEJAY_MSG_ERROR, "Chain index out of bounds: %d", args[1]); + return; + } - int src = sample_get_chain_source( args[0],args[1]); - int err = 1; - if(src == VJ_TAG_TYPE_NONE && sample_exists(args[2])) - { - err = 0; - } - if(src != VJ_TAG_TYPE_NONE && vj_tag_exists(args[2])) - { - err = 0; - } - if(err == 0 && sample_set_chain_channel(args[0],args[1], args[2])>= 0) - { - veejay_msg(VEEJAY_MSG_INFO, "Selected input channel (%s %d)", - (src == VJ_TAG_TYPE_NONE ? "sample" : "stream"),args[2]); - } - else - { - veejay_msg(VEEJAY_MSG_ERROR, "Invalid channel (%s %d) given", - (src ==VJ_TAG_TYPE_NONE ? "sample" : "stream") , args[2]); - } - } - } - if(STREAM_PLAYING(v)) - { - STREAM_DEFAULTS(args[0]); + int src = sample_get_chain_source( args[0],args[1]); + int err = 1; + if(src == VJ_TAG_TYPE_NONE && sample_exists(args[2])) + { + err = 0; + } + if(src != VJ_TAG_TYPE_NONE && vj_tag_exists(args[2])) + { + err = 0; + } + if(err == 0 && sample_set_chain_channel(args[0],args[1], args[2])>= 0) + { + veejay_msg(VEEJAY_MSG_INFO, "Selected input channel (%s %d)", + (src == VJ_TAG_TYPE_NONE ? "sample" : "stream"),args[2]); + } + else + { + veejay_msg(VEEJAY_MSG_ERROR, "Invalid channel (%s %d) given", + (src ==VJ_TAG_TYPE_NONE ? "sample" : "stream") , args[2]); + } + } + } + if(STREAM_PLAYING(v)) + { + STREAM_DEFAULTS(args[0]); - if(vj_tag_exists(args[0])) - { - if(args[1] == -1) args[1] = vj_tag_get_selected_entry(args[0]); - if(v_chi(args[1])) - { - veejay_msg(VEEJAY_MSG_ERROR, "Chain index out of boundaries: %d", args[1]); - return; - } + if(vj_tag_exists(args[0])) + { + if(args[1] == -1) args[1] = vj_tag_get_selected_entry(args[0]); + if(v_chi(args[1])) + { + veejay_msg(VEEJAY_MSG_ERROR, "Chain index out of boundaries: %d", args[1]); + return; + } - int src = vj_tag_get_chain_source(args[0],args[1]); - int err = 1; - if( src == VJ_TAG_TYPE_NONE && sample_exists( args[2])) - err = 0; - if( src != VJ_TAG_TYPE_NONE && vj_tag_exists( args[2] )) - err = 0; + int src = vj_tag_get_chain_source(args[0],args[1]); + int err = 1; + if( src == VJ_TAG_TYPE_NONE && sample_exists( args[2])) + err = 0; + if( src != VJ_TAG_TYPE_NONE && vj_tag_exists( args[2] )) + err = 0; - if( err == 0 && vj_tag_set_chain_channel(args[0],args[1],args[2])>=0) - { - veejay_msg(VEEJAY_MSG_INFO, "Selected input channel (%s %d)", - (src==VJ_TAG_TYPE_NONE ? "sample" : "stream"), args[2]); - } - else - { - veejay_msg(VEEJAY_MSG_ERROR, "Invalid channel (%s %d) given", - (src ==VJ_TAG_TYPE_NONE ? "sample" : "stream") , args[2]); - } - } - } + if( err == 0 && vj_tag_set_chain_channel(args[0],args[1],args[2])>=0) + { + veejay_msg(VEEJAY_MSG_INFO, "Selected input channel (%s %d)", + (src==VJ_TAG_TYPE_NONE ? "sample" : "stream"), args[2]); + } + else + { + veejay_msg(VEEJAY_MSG_ERROR, "Invalid channel (%s %d) given", + (src ==VJ_TAG_TYPE_NONE ? "sample" : "stream") , args[2]); + } + } + } } void vj_event_chain_entry_srccha(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*)ptr; - int args[4]; - char *str = NULL; P_A(args,str,format,ap); + veejay_t *v = (veejay_t*)ptr; + int args[4]; + char *str = NULL; P_A(args,str,format,ap); - if(SAMPLE_PLAYING(v)) - { - SAMPLE_DEFAULTS(args[0]); + if(SAMPLE_PLAYING(v)) + { + SAMPLE_DEFAULTS(args[0]); - if(sample_exists(args[0])) - { - if(args[1] == -1) args[1] = sample_get_selected_entry(args[0]); - if(v_chi(args[1])) - { - veejay_msg(VEEJAY_MSG_ERROR, "Chain index out of boundaries: %d", args[1]); - return; - } + if(sample_exists(args[0])) + { + if(args[1] == -1) args[1] = sample_get_selected_entry(args[0]); + if(v_chi(args[1])) + { + veejay_msg(VEEJAY_MSG_ERROR, "Chain index out of boundaries: %d", args[1]); + return; + } - int source = args[2]; - int channel_id = args[3]; - int err = 1; - if( source == VJ_TAG_TYPE_NONE && sample_exists(channel_id)) - err = 0; - if( source != VJ_TAG_TYPE_NONE && vj_tag_exists(channel_id)) - err = 0; + int source = args[2]; + int channel_id = args[3]; + int err = 1; + if( source == VJ_TAG_TYPE_NONE && sample_exists(channel_id)) + err = 0; + if( source != VJ_TAG_TYPE_NONE && vj_tag_exists(channel_id)) + err = 0; - - if( err == 0 && - sample_set_chain_source(args[0],args[1],source)!=-1 && - sample_set_chain_channel(args[0],args[1],channel_id) != -1) - { - veejay_msg(VEEJAY_MSG_INFO, "Selected input channel (%s %d) to mix in", - (source == VJ_TAG_TYPE_NONE ? "sample" : "stream") , channel_id); - if( source != VJ_TAG_TYPE_NONE ) { - int slot = sample_has_cali_fx( args[0]);//@sample - if( slot >= 0 ) { - sample_cali_prepare( args[0],slot,channel_id); - veejay_msg(VEEJAY_MSG_DEBUG, "Using calibration data of stream %d",channel_id); - } - } - } - else - { - veejay_msg(VEEJAY_MSG_ERROR, "Invalid channel (%s %d) given", - (source ==VJ_TAG_TYPE_NONE ? "sample" : "stream") , args[2]); - } - } - } - if(STREAM_PLAYING(v)) - { - STREAM_DEFAULTS(args[0]); + + if( err == 0 && + sample_set_chain_source(args[0],args[1],source)!=-1 && + sample_set_chain_channel(args[0],args[1],channel_id) != -1) + { + veejay_msg(VEEJAY_MSG_INFO, "Selected input channel (%s %d) to mix in", + (source == VJ_TAG_TYPE_NONE ? "sample" : "stream") , channel_id); + if( source != VJ_TAG_TYPE_NONE ) { + int slot = sample_has_cali_fx( args[0]);//@sample + if( slot >= 0 ) { + sample_cali_prepare( args[0],slot,channel_id); + veejay_msg(VEEJAY_MSG_DEBUG, "Using calibration data of stream %d",channel_id); + } + } + } + else + { + veejay_msg(VEEJAY_MSG_ERROR, "Invalid channel (%s %d) given", + (source ==VJ_TAG_TYPE_NONE ? "sample" : "stream") , args[2]); + } + } + } + if(STREAM_PLAYING(v)) + { + STREAM_DEFAULTS(args[0]); - if(vj_tag_exists(args[0])) - { - if(args[1] == -1) args[1] = vj_tag_get_selected_entry(args[0]); - - if(v_chi(args[1])) - { - veejay_msg(VEEJAY_MSG_ERROR, "Chain index out of boundaries: %d", args[1]); - return; - } + if(vj_tag_exists(args[0])) + { + if(args[1] == -1) args[1] = vj_tag_get_selected_entry(args[0]); + + if(v_chi(args[1])) + { + veejay_msg(VEEJAY_MSG_ERROR, "Chain index out of boundaries: %d", args[1]); + return; + } - int source = args[2]; - int channel_id = args[3]; - int err = 1; - if( source == VJ_TAG_TYPE_NONE && sample_exists(channel_id)) - err = 0; - if( source != VJ_TAG_TYPE_NONE && vj_tag_exists(channel_id)) - err = 0; + int source = args[2]; + int channel_id = args[3]; + int err = 1; + if( source == VJ_TAG_TYPE_NONE && sample_exists(channel_id)) + err = 0; + if( source != VJ_TAG_TYPE_NONE && vj_tag_exists(channel_id)) + err = 0; - //@ if there is CALI in FX chain, - //@ call cali_prepare and pass channel id + //@ if there is CALI in FX chain, + //@ call cali_prepare and pass channel id - - if( err == 0 && - vj_tag_set_chain_source(args[0],args[1],source)!=-1 && - vj_tag_set_chain_channel(args[0],args[1],channel_id) != -1) - { - veejay_msg(VEEJAY_MSG_INFO, "Selected input channel (%s %d) to mix in", - (source == VJ_TAG_TYPE_NONE ? "sample" : "stream") , channel_id); - - if( source != VJ_TAG_TYPE_NONE ) { - int slot = vj_tag_has_cali_fx( args[0]); - if( slot >= 0 ) { - vj_tag_cali_prepare( args[0],slot, channel_id); - } - - } - } - else - { - veejay_msg(VEEJAY_MSG_ERROR, "Invalid channel (%s %d) given", - (source ==VJ_TAG_TYPE_NONE ? "sample" : "stream") , args[2]); - } - } - } + + if( err == 0 && + vj_tag_set_chain_source(args[0],args[1],source)!=-1 && + vj_tag_set_chain_channel(args[0],args[1],channel_id) != -1) + { + veejay_msg(VEEJAY_MSG_INFO, "Selected input channel (%s %d) to mix in", + (source == VJ_TAG_TYPE_NONE ? "sample" : "stream") , channel_id); + + if( source != VJ_TAG_TYPE_NONE ) { + int slot = vj_tag_has_cali_fx( args[0]); + if( slot >= 0 ) { + vj_tag_cali_prepare( args[0],slot, channel_id); + } + + } + } + else + { + veejay_msg(VEEJAY_MSG_ERROR, "Invalid channel (%s %d) given", + (source ==VJ_TAG_TYPE_NONE ? "sample" : "stream") , args[2]); + } + } + } } void vj_event_chain_arg_inc(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*)ptr; - int args[2]; - char *str = NULL; P_A(args,str,format,ap); + veejay_t *v = (veejay_t*)ptr; + int args[2]; + char *str = NULL; P_A(args,str,format,ap); - if(SAMPLE_PLAYING(v)) - { - int c = sample_get_selected_entry(v->uc->sample_id); - int effect = sample_get_effect_any(v->uc->sample_id, c); - int val = sample_get_effect_arg(v->uc->sample_id,c,args[0]); - if ( vj_effect_is_valid( effect ) ) - { - const char *effect_descr = vj_effect_get_description(effect); - const char *effect_param_descr = vj_effect_get_param_description(effect,args[0]); - int tval = val + args[1]; - if( tval > vj_effect_get_max_limit( effect,args[0] ) ) - tval = vj_effect_get_min_limit( effect,args[0]); - else - if( tval < vj_effect_get_min_limit( effect,args[0] ) ) - tval = vj_effect_get_max_limit( effect,args[0] ); - if(sample_set_effect_arg( v->uc->sample_id, c,args[0],tval)!=-1 ) - { - veejay_msg(VEEJAY_MSG_INFO,"Set \"%s\" parameter %d \"%s\" value %d",effect_descr, args[0], effect_param_descr, tval); - } - } - } + if(SAMPLE_PLAYING(v)) + { + int c = sample_get_selected_entry(v->uc->sample_id); + int effect = sample_get_effect_any(v->uc->sample_id, c); + int val = sample_get_effect_arg(v->uc->sample_id,c,args[0]); + if ( vj_effect_is_valid( effect ) ) + { + const char *effect_descr = vj_effect_get_description(effect); + const char *effect_param_descr = vj_effect_get_param_description(effect,args[0]); + int tval = val + args[1]; + if( tval > vj_effect_get_max_limit( effect,args[0] ) ) + tval = vj_effect_get_min_limit( effect,args[0]); + else + if( tval < vj_effect_get_min_limit( effect,args[0] ) ) + tval = vj_effect_get_max_limit( effect,args[0] ); + if(sample_set_effect_arg( v->uc->sample_id, c,args[0],tval)!=-1 ) + { + veejay_msg(VEEJAY_MSG_INFO,"Set \"%s\" parameter %d \"%s\" value %d",effect_descr, args[0], effect_param_descr, tval); + } + } + } - if(STREAM_PLAYING(v)) - { - int c = vj_tag_get_selected_entry(v->uc->sample_id); - int effect = vj_tag_get_effect_any(v->uc->sample_id, c); - int val = vj_tag_get_effect_arg(v->uc->sample_id, c, args[0]); + if(STREAM_PLAYING(v)) + { + int c = vj_tag_get_selected_entry(v->uc->sample_id); + int effect = vj_tag_get_effect_any(v->uc->sample_id, c); + int val = vj_tag_get_effect_arg(v->uc->sample_id, c, args[0]); - const char *effect_descr = vj_effect_get_description(effect); - const char *effect_param_descr = vj_effect_get_param_description(effect,args[0]); - int tval = val + args[1]; + const char *effect_descr = vj_effect_get_description(effect); + const char *effect_param_descr = vj_effect_get_param_description(effect,args[0]); + int tval = val + args[1]; - if( tval > vj_effect_get_max_limit( effect,args[0] )) - tval = vj_effect_get_min_limit( effect,args[0] ); - else - if( tval < vj_effect_get_min_limit( effect,args[0] )) - tval = vj_effect_get_max_limit( effect,args[0] ); + if( tval > vj_effect_get_max_limit( effect,args[0] )) + tval = vj_effect_get_min_limit( effect,args[0] ); + else + if( tval < vj_effect_get_min_limit( effect,args[0] )) + tval = vj_effect_get_max_limit( effect,args[0] ); - if(vj_tag_set_effect_arg(v->uc->sample_id, c, args[0], tval) ) - { - veejay_msg(VEEJAY_MSG_INFO,"Set \"%s\" parameter %d \"%s\" value %d",effect_descr, args[0], effect_param_descr, tval ); - } - } + if(vj_tag_set_effect_arg(v->uc->sample_id, c, args[0], tval) ) + { + veejay_msg(VEEJAY_MSG_INFO,"Set \"%s\" parameter %d \"%s\" value %d",effect_descr, args[0], effect_param_descr, tval ); + } + } } void vj_event_chain_entry_set_arg_val(void *ptr, const char format[], va_list ap) { - int args[4]; - veejay_t *v = (veejay_t*)ptr; - char *str = NULL; P_A(args,str,format,ap); - - if(SAMPLE_PLAYING(v)) - { - SAMPLE_DEFAULTS(args[0]); + int args[4]; + veejay_t *v = (veejay_t*)ptr; + char *str = NULL; P_A(args,str,format,ap); + + if(SAMPLE_PLAYING(v)) + { + SAMPLE_DEFAULTS(args[0]); - if(sample_exists(args[0])) - { - if(args[1] == -1) args[1] = sample_get_selected_entry(args[0]); - if(v_chi(args[1])) - { - veejay_msg(VEEJAY_MSG_ERROR, "Chain index out of boundaries: %d", args[1]); - return; - } + if(sample_exists(args[0])) + { + if(args[1] == -1) args[1] = sample_get_selected_entry(args[0]); + if(v_chi(args[1])) + { + veejay_msg(VEEJAY_MSG_ERROR, "Chain index out of boundaries: %d", args[1]); + return; + } - int effect = sample_get_effect_any( args[0], args[1] ); - const char *effect_descr = vj_effect_get_description(effect); - const char *effect_param_descr = vj_effect_get_param_description(effect,args[2]); - if( vj_effect_valid_value(effect,args[2],args[3]) ) - { - if(sample_set_effect_arg( args[0], args[1], args[2], args[3])) { - veejay_msg(VEEJAY_MSG_INFO, "Set \"%s\" parameter %d \"%s\" to %d on Entry %d of Sample %d", - effect_descr, args[2], effect_param_descr, args[3],args[1],args[0]); - } - } - else - { - veejay_msg(VEEJAY_MSG_ERROR, " \"%s\" parameter %d \"%s\" with value %d invalid for Chain Entry %d of Sample %d", - effect_descr, args[2], effect_param_descr, args[3], args[1], args[0] ); - } - } else { veejay_msg(VEEJAY_MSG_ERROR, "Sample %d does not exist", args[0]); } - } - if(STREAM_PLAYING(v)) - { - STREAM_DEFAULTS(args[0]); + int effect = sample_get_effect_any( args[0], args[1] ); + const char *effect_descr = vj_effect_get_description(effect); + const char *effect_param_descr = vj_effect_get_param_description(effect,args[2]); + if( vj_effect_valid_value(effect,args[2],args[3]) ) + { + if(sample_set_effect_arg( args[0], args[1], args[2], args[3])) { + veejay_msg(VEEJAY_MSG_INFO, "Set \"%s\" parameter %d \"%s\" to %d on Entry %d of Sample %d", + effect_descr, args[2], effect_param_descr, args[3],args[1],args[0]); + } + } + else + { + veejay_msg(VEEJAY_MSG_ERROR, " \"%s\" parameter %d \"%s\" with value %d invalid for Chain Entry %d of Sample %d", + effect_descr, args[2], effect_param_descr, args[3], args[1], args[0] ); + } + } else { veejay_msg(VEEJAY_MSG_ERROR, "Sample %d does not exist", args[0]); } + } + if(STREAM_PLAYING(v)) + { + STREAM_DEFAULTS(args[0]); - if(vj_tag_exists(args[0])) - { - if(args[1] == -1) args[1] = vj_tag_get_selected_entry(args[0]); - if(v_chi(args[1])) - { - veejay_msg(VEEJAY_MSG_ERROR, "Chain index out of boundaries: %d", args[1]); - return; - } + if(vj_tag_exists(args[0])) + { + if(args[1] == -1) args[1] = vj_tag_get_selected_entry(args[0]); + if(v_chi(args[1])) + { + veejay_msg(VEEJAY_MSG_ERROR, "Chain index out of boundaries: %d", args[1]); + return; + } - int effect = vj_tag_get_effect_any(args[0],args[1] ); - const char *effect_descr = vj_effect_get_description(effect); - const char *effect_param_descr = vj_effect_get_param_description(effect,args[2]); - if ( vj_effect_valid_value( effect,args[2],args[3] ) ) - { - if(vj_tag_set_effect_arg(args[0],args[1],args[2],args[3])) { - veejay_msg(VEEJAY_MSG_INFO,"Set \"%s\" parameter %d \"%s\" to %d on Entry %d of Stream %d", - effect_descr, args[2], effect_param_descr, args[3],args[2],args[1]); - } - } - else { - veejay_msg(VEEJAY_MSG_ERROR, "\"%s\" parameter %d \"%s\" with value %d for Chain Entry %d invalid for Stream %d", - effect_descr, args[2], effect_param_descr, args[3], args[1],args[0]); - } - } - else { - veejay_msg(VEEJAY_MSG_ERROR,"Stream %d does not exist", args[0]); - } - } + int effect = vj_tag_get_effect_any(args[0],args[1] ); + const char *effect_descr = vj_effect_get_description(effect); + const char *effect_param_descr = vj_effect_get_param_description(effect,args[2]); + if ( vj_effect_valid_value( effect,args[2],args[3] ) ) + { + if(vj_tag_set_effect_arg(args[0],args[1],args[2],args[3])) { + veejay_msg(VEEJAY_MSG_INFO,"Set \"%s\" parameter %d \"%s\" to %d on Entry %d of Stream %d", + effect_descr, args[2], effect_param_descr, args[3],args[2],args[1]); + } + } + else { + veejay_msg(VEEJAY_MSG_ERROR, "\"%s\" parameter %d \"%s\" with value %d for Chain Entry %d invalid for Stream %d", + effect_descr, args[2], effect_param_descr, args[3], args[1],args[0]); + } + } + else { + veejay_msg(VEEJAY_MSG_ERROR,"Stream %d does not exist", args[0]); + } + } } void vj_event_el_cut(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t *)ptr; - int args[2]; - char *str = NULL; - P_A(args,str,format,ap); + veejay_t *v = (veejay_t *)ptr; + int args[2]; + char *str = NULL; + P_A(args,str,format,ap); - if( SAMPLE_PLAYING(v)) - { - if( !sample_usable_edl( v->uc->sample_id )) - { - veejay_msg(VEEJAY_MSG_ERROR, "This sample type has no EDL (all frames are identical)"); - return; - } + if( SAMPLE_PLAYING(v)) + { + if( !sample_usable_edl( v->uc->sample_id )) + { + veejay_msg(VEEJAY_MSG_ERROR, "This sample type has no EDL (all frames are identical)"); + return; + } - editlist *el = sample_get_editlist( v->uc->sample_id ); - if(!el) - { - veejay_msg(VEEJAY_MSG_ERROR, "Sample has no EDL (is this possible?)"); - return; - } - if( args[0] < 0 || args[0] > el->total_frames || args[1] < 0 || args[1] > el->total_frames) - { - veejay_msg(VEEJAY_MSG_ERROR, "Frame number out of bounds"); - return; - } + editlist *el = sample_get_editlist( v->uc->sample_id ); + if(!el) + { + veejay_msg(VEEJAY_MSG_ERROR, "Sample has no EDL (is this possible?)"); + return; + } + if( args[0] < 0 || args[0] > el->total_frames || args[1] < 0 || args[1] > el->total_frames) + { + veejay_msg(VEEJAY_MSG_ERROR, "Frame number out of bounds"); + return; + } - if(veejay_edit_cut( v,el, args[0], args[1] )) - { - veejay_msg(VEEJAY_MSG_INFO, "Cut frames %d-%d from sample %d into buffer",args[0],args[1], - v->uc->sample_id); - } + if(veejay_edit_cut( v,el, args[0], args[1] )) + { + veejay_msg(VEEJAY_MSG_INFO, "Cut frames %d-%d from sample %d into buffer",args[0],args[1], + v->uc->sample_id); + } - sample_set_startframe( v->uc->sample_id, 0 ); - sample_set_endframe( v->uc->sample_id, sample_video_length(v->uc->sample_id) ); + sample_set_startframe( v->uc->sample_id, 0 ); + sample_set_endframe( v->uc->sample_id, sample_video_length(v->uc->sample_id) ); - constrain_sample( v, v->uc->sample_id ); - } + constrain_sample( v, v->uc->sample_id ); + } - if ( STREAM_PLAYING(v) || PLAIN_PLAYING(v)) - { - veejay_msg(VEEJAY_MSG_ERROR, "Cannot cut frames in this playback mode"); - return; - } + if ( STREAM_PLAYING(v) || PLAIN_PLAYING(v)) + { + veejay_msg(VEEJAY_MSG_ERROR, "Cannot cut frames in this playback mode"); + return; + } } void vj_event_el_copy(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - int args[2]; - char *str = NULL; P_A(args,str,format,ap); + veejay_t *v = (veejay_t*) ptr; + int args[2]; + char *str = NULL; P_A(args,str,format,ap); - if ( SAMPLE_PLAYING(v)) - { + if ( SAMPLE_PLAYING(v)) + { if( !sample_usable_edl( v->uc->sample_id )) { veejay_msg(VEEJAY_MSG_ERROR, "This sample type has no EDL (all frames are identical)"); return; } - editlist *el = sample_get_editlist( v->uc->sample_id ); - if(!el) - { - veejay_msg(VEEJAY_MSG_ERROR, "Sample has no EDL (is this possible?)"); - return; - } - if( args[0] < 0 || args[0] > el->total_frames || args[1] < 0 || args[1] > el->total_frames) - { - veejay_msg(VEEJAY_MSG_ERROR, "Frame number out of bounds"); - return; - } - - if(veejay_edit_copy( v,el, args[0], args[1] )) - { - veejay_msg(VEEJAY_MSG_INFO, "Copy frames %d-%d from sample %d into buffer",args[0],args[1], - v->uc->sample_id); - } + editlist *el = sample_get_editlist( v->uc->sample_id ); + if(!el) + { + veejay_msg(VEEJAY_MSG_ERROR, "Sample has no EDL (is this possible?)"); + return; + } + if( args[0] < 0 || args[0] > el->total_frames || args[1] < 0 || args[1] > el->total_frames) + { + veejay_msg(VEEJAY_MSG_ERROR, "Frame number out of bounds"); + return; + } + + if(veejay_edit_copy( v,el, args[0], args[1] )) + { + veejay_msg(VEEJAY_MSG_INFO, "Copy frames %d-%d from sample %d into buffer",args[0],args[1], + v->uc->sample_id); + } - sample_set_startframe( v->uc->sample_id, 0 ); - sample_set_endframe( v->uc->sample_id,sample_video_length(v->uc->sample_id)); + sample_set_startframe( v->uc->sample_id, 0 ); + sample_set_endframe( v->uc->sample_id,sample_video_length(v->uc->sample_id)); - constrain_sample( v, v->uc->sample_id ); - } - if ( STREAM_PLAYING(v) || PLAIN_PLAYING(v)) - { - veejay_msg(VEEJAY_MSG_ERROR, "Cannot copy frames in this playback mode"); - return; - } + constrain_sample( v, v->uc->sample_id ); + } + if ( STREAM_PLAYING(v) || PLAIN_PLAYING(v)) + { + veejay_msg(VEEJAY_MSG_ERROR, "Cannot copy frames in this playback mode"); + return; + } } void vj_event_el_del(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - int args[2]; - char *str = NULL; P_A(args,str,format,ap); + veejay_t *v = (veejay_t*) ptr; + int args[2]; + char *str = NULL; P_A(args,str,format,ap); - if ( SAMPLE_PLAYING(v)) - { + if ( SAMPLE_PLAYING(v)) + { if( !sample_usable_edl( v->uc->sample_id )) { veejay_msg(VEEJAY_MSG_ERROR, "This sample type has no EDL (all frames are identical)"); return; } - editlist *el = sample_get_editlist( v->uc->sample_id ); + editlist *el = sample_get_editlist( v->uc->sample_id ); - if(!el) - { - veejay_msg(VEEJAY_MSG_ERROR, "Sample has no EDL (is this possible?)"); - return; - } - if( args[0] < 0 || args[0] > el->total_frames || args[1] < 0 || args[1] > el->total_frames) - { - veejay_msg(VEEJAY_MSG_ERROR, "Frame number out of bounds"); - return; - } + if(!el) + { + veejay_msg(VEEJAY_MSG_ERROR, "Sample has no EDL (is this possible?)"); + return; + } + if( args[0] < 0 || args[0] > el->total_frames || args[1] < 0 || args[1] > el->total_frames) + { + veejay_msg(VEEJAY_MSG_ERROR, "Frame number out of bounds"); + return; + } - if(veejay_edit_delete( v,el, args[0], args[1] )) - { - veejay_msg(VEEJAY_MSG_INFO, "Deleted frames %d-%d from EDL of sample %d", - v->uc->sample_id,args[0],args[1]); - } - sample_set_startframe( v->uc->sample_id, 0 ); - sample_set_endframe( v->uc->sample_id, sample_video_length(v->uc->sample_id)); + if(veejay_edit_delete( v,el, args[0], args[1] )) + { + veejay_msg(VEEJAY_MSG_INFO, "Deleted frames %d-%d from EDL of sample %d", + v->uc->sample_id,args[0],args[1]); + } + sample_set_startframe( v->uc->sample_id, 0 ); + sample_set_endframe( v->uc->sample_id, sample_video_length(v->uc->sample_id)); - constrain_sample( v, v->uc->sample_id ); + constrain_sample( v, v->uc->sample_id ); - } + } - if ( STREAM_PLAYING(v) || PLAIN_PLAYING(v)) - { - veejay_msg(VEEJAY_MSG_ERROR, "Cannot delete frames in this playback mode"); - return; - } + if ( STREAM_PLAYING(v) || PLAIN_PLAYING(v)) + { + veejay_msg(VEEJAY_MSG_ERROR, "Cannot delete frames in this playback mode"); + return; + } } void vj_event_el_crop(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - int args[2]; - char *str = NULL; P_A(args,str,format,ap); + veejay_t *v = (veejay_t*) ptr; + int args[2]; + char *str = NULL; P_A(args,str,format,ap); - if ( STREAM_PLAYING(v) || PLAIN_PLAYING(v)) - { - veejay_msg(VEEJAY_MSG_ERROR, "Cannot delete frames in this playback mode"); - return; - } + if ( STREAM_PLAYING(v) || PLAIN_PLAYING(v)) + { + veejay_msg(VEEJAY_MSG_ERROR, "Cannot delete frames in this playback mode"); + return; + } - if(SAMPLE_PLAYING(v)) - { + if(SAMPLE_PLAYING(v)) + { if( !sample_usable_edl( v->uc->sample_id )) { veejay_msg(VEEJAY_MSG_ERROR, "This sample type has no EDL (all frames are identical)"); return; } - editlist *el = sample_get_editlist( v->uc->sample_id); - if(!el) - { - veejay_msg(VEEJAY_MSG_ERROR, "Sample has no EDL"); - return; - } + editlist *el = sample_get_editlist( v->uc->sample_id); + if(!el) + { + veejay_msg(VEEJAY_MSG_ERROR, "Sample has no EDL"); + return; + } - if( args[0] < 0 || args[0] > el->total_frames || args[1] < 0 || args[1] > el->total_frames) - { - veejay_msg(VEEJAY_MSG_ERROR, "Frame number out of bounds"); - return; - } + if( args[0] < 0 || args[0] > el->total_frames || args[1] < 0 || args[1] > el->total_frames) + { + veejay_msg(VEEJAY_MSG_ERROR, "Frame number out of bounds"); + return; + } - if( args[1] <= args[0] ) - { - veejay_msg(VEEJAY_MSG_ERROR, "Crop: start - end (start must be smaller then end)"); - return; - } - int s2 =0; - int s1 = veejay_edit_delete(v,el, 0, args[0]); - int res = 0; - if(s1) - { - args[1] -= args[0]; // after deleting the first part, move arg[1] - s2 = veejay_edit_delete(v, el,args[1], el->total_frames); - if(s2) - { - veejay_set_frame(v,0); - veejay_msg(VEEJAY_MSG_INFO, "Delete frames 0- %d , %d - %d from sample %d", 0,args[0],args[1], - el->total_frames, v->uc->sample_id); - res = 1; - sample_set_startframe( v->uc->sample_id, 0 ); - sample_set_endframe( v->uc->sample_id, sample_video_length(v->uc->sample_id) ); - constrain_sample( v, v->uc->sample_id ); - } + if( args[1] <= args[0] ) + { + veejay_msg(VEEJAY_MSG_ERROR, "Crop: start - end (start must be smaller then end)"); + return; + } + int s2 =0; + int s1 = veejay_edit_delete(v,el, 0, args[0]); + int res = 0; + if(s1) + { + args[1] -= args[0]; // after deleting the first part, move arg[1] + s2 = veejay_edit_delete(v, el,args[1], el->total_frames); + if(s2) + { + veejay_set_frame(v,0); + veejay_msg(VEEJAY_MSG_INFO, "Delete frames 0- %d , %d - %d from sample %d", 0,args[0],args[1], + el->total_frames, v->uc->sample_id); + res = 1; + sample_set_startframe( v->uc->sample_id, 0 ); + sample_set_endframe( v->uc->sample_id, sample_video_length(v->uc->sample_id) ); + constrain_sample( v, v->uc->sample_id ); + } - } - if(!res) - veejay_msg(VEEJAY_MSG_ERROR, "Invalid range given to crop ! %d - %d", args[0],args[1] ); - - } + } + if(!res) + veejay_msg(VEEJAY_MSG_ERROR, "Invalid range given to crop ! %d - %d", args[0],args[1] ); + + } } void vj_event_el_paste_at(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - int args[1]; - char *str = NULL; P_A(args,str,format,ap); + veejay_t *v = (veejay_t*) ptr; + int args[1]; + char *str = NULL; P_A(args,str,format,ap); - if ( STREAM_PLAYING(v) || PLAIN_PLAYING(v)) - { - veejay_msg(VEEJAY_MSG_ERROR, "Cannot paste frames in this playback mode"); - return; - } + if ( STREAM_PLAYING(v) || PLAIN_PLAYING(v)) + { + veejay_msg(VEEJAY_MSG_ERROR, "Cannot paste frames in this playback mode"); + return; + } - if( SAMPLE_PLAYING(v)) - { + if( SAMPLE_PLAYING(v)) + { if( !sample_usable_edl( v->uc->sample_id )) { veejay_msg(VEEJAY_MSG_ERROR, "This sample type has no EDL (all frames are identical)"); return; } - editlist *el = sample_get_editlist( v->uc->sample_id ); - if(!el) - { - veejay_msg(VEEJAY_MSG_ERROR, "Sample has no EDL"); - return; - } - if( args[0] >= 0 && args[0] <= el->total_frames) - { - if( veejay_edit_paste( v, el, args[0] ) ) - { - veejay_msg(VEEJAY_MSG_INFO, "Pasted buffer at frame %d",args[0]); - } - sample_set_startframe( v->uc->sample_id, 0 ); - sample_set_endframe( v->uc->sample_id, sample_video_length(v->uc->sample_id)); - constrain_sample( v, v->uc->sample_id ); - } + editlist *el = sample_get_editlist( v->uc->sample_id ); + if(!el) + { + veejay_msg(VEEJAY_MSG_ERROR, "Sample has no EDL"); + return; + } + if( args[0] >= 0 && args[0] <= el->total_frames) + { + if( veejay_edit_paste( v, el, args[0] ) ) + { + veejay_msg(VEEJAY_MSG_INFO, "Pasted buffer at frame %d",args[0]); + } + sample_set_startframe( v->uc->sample_id, 0 ); + sample_set_endframe( v->uc->sample_id, sample_video_length(v->uc->sample_id)); + constrain_sample( v, v->uc->sample_id ); + } - } + } } void vj_event_el_save_editlist(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*)ptr; - char str[1024]; - int args[2] = {0,0}; - P_A(args,str,format,ap); - if( STREAM_PLAYING(v) || PLAIN_PLAYING(v) ) - { - veejay_msg(VEEJAY_MSG_ERROR, "Wrong playback mode for saving EDL of sample"); - return; - } + veejay_t *v = (veejay_t*)ptr; + char str[1024]; + int args[2] = {0,0}; + P_A(args,str,format,ap); + if( STREAM_PLAYING(v) || PLAIN_PLAYING(v) ) + { + veejay_msg(VEEJAY_MSG_ERROR, "Wrong playback mode for saving EDL of sample"); + return; + } - if( veejay_save_all(v, str,args[0],args[1]) ) - { - veejay_msg(VEEJAY_MSG_INFO, "Saved EditList as %s",str); - } - else - { - veejay_msg(VEEJAY_MSG_ERROR,"Unable to save EditList as %s",str); - } + if( veejay_save_all(v, str,args[0],args[1]) ) + { + veejay_msg(VEEJAY_MSG_INFO, "Saved EditList as %s",str); + } + else + { + veejay_msg(VEEJAY_MSG_ERROR,"Unable to save EditList as %s",str); + } } void vj_event_el_load_editlist(void *ptr, const char format[], va_list ap) { - veejay_msg(VEEJAY_MSG_ERROR, "EditList: Load not implemented"); + veejay_msg(VEEJAY_MSG_ERROR, "EditList: Load not implemented"); } void vj_event_el_add_video(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*)ptr; - int start = -1; - char str[1024]; - int *args = NULL; - P_A(args,str,format,ap); + veejay_t *v = (veejay_t*)ptr; + int start = -1; + char str[1024]; + int *args = NULL; + P_A(args,str,format,ap); - if(SAMPLE_PLAYING(v)) - { - if( !sample_usable_edl( v->uc->sample_id )) - { - veejay_msg(VEEJAY_MSG_ERROR, "Cannot append video to a picture sample"); - return; - } - } + if(SAMPLE_PLAYING(v)) + { + if( !sample_usable_edl( v->uc->sample_id )) + { + veejay_msg(VEEJAY_MSG_ERROR, "Cannot append video to a picture sample"); + return; + } + } - if ( veejay_edit_addmovie(v,v->current_edit_list,str,start )) - veejay_msg(VEEJAY_MSG_INFO, "Added video file %s to EditList",str); - else - veejay_msg(VEEJAY_MSG_INFO, "Unable to add file %s to EditList",str); + if ( veejay_edit_addmovie(v,v->current_edit_list,str,start )) + veejay_msg(VEEJAY_MSG_INFO, "Added video file %s to EditList",str); + else + veejay_msg(VEEJAY_MSG_INFO, "Unable to add file %s to EditList",str); } void vj_event_el_add_video_sample(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*)ptr; - char str[1024]; - int args[2]; - P_A(args,str,format,ap); + veejay_t *v = (veejay_t*)ptr; + char str[1024]; + int args[2]; + P_A(args,str,format,ap); - int new_sample_id = args[0]; - if(new_sample_id == 0 ) - { - veejay_msg(VEEJAY_MSG_INFO, "Create new sample from %s", - str ); - } - else - { - veejay_msg(VEEJAY_MSG_INFO, "Append %s to current sample", - str ); - } - new_sample_id = veejay_edit_addmovie_sample(v,str,new_sample_id ); - if(new_sample_id <= 0) - { - veejay_msg(VEEJAY_MSG_ERROR, "Unable to open %s", str ); - new_sample_id = 0; - } + int new_sample_id = args[0]; + if(new_sample_id == 0 ) + { + veejay_msg(VEEJAY_MSG_INFO, "Create new sample from %s", + str ); + } + else + { + veejay_msg(VEEJAY_MSG_INFO, "Append %s to current sample", + str ); + } + new_sample_id = veejay_edit_addmovie_sample(v,str,new_sample_id ); + if(new_sample_id <= 0) + { + veejay_msg(VEEJAY_MSG_ERROR, "Unable to open %s", str ); + new_sample_id = 0; + } } void vj_event_tag_del(void *ptr, const char format[] , va_list ap ) { - veejay_t *v = (veejay_t*) ptr; - int args[1]; - char *str = NULL; P_A(args,str,format,ap); + veejay_t *v = (veejay_t*) ptr; + int args[1]; + char *str = NULL; P_A(args,str,format,ap); - - if(STREAM_PLAYING(v) && v->uc->sample_id == args[0]) - { - veejay_msg(VEEJAY_MSG_INFO,"Cannot delete stream while playing"); - } - else - { - if(vj_tag_exists(args[0])) - { - int i; - for( i = 0; i < MAX_SEQUENCES ; i ++ ) { - if( v->seq->samples[i].sample_id == args[0] && v->seq->samples[i].type != 0 ) { - v->seq->samples[i].sample_id = 0; - v->seq->samples[i].type = 0; - } - } + + if(STREAM_PLAYING(v) && v->uc->sample_id == args[0]) + { + veejay_msg(VEEJAY_MSG_INFO,"Cannot delete stream while playing"); + } + else + { + if(vj_tag_exists(args[0])) + { + int i; + for( i = 0; i < MAX_SEQUENCES ; i ++ ) { + if( v->seq->samples[i].sample_id == args[0] && v->seq->samples[i].type != 0 ) { + v->seq->samples[i].sample_id = 0; + v->seq->samples[i].type = 0; + } + } - if(vj_tag_del(args[0])) - { - veejay_msg(VEEJAY_MSG_INFO, "Deleted stream %d", args[0]); - vj_tag_verify_delete( args[0], 1 ); - } - } - } + if(vj_tag_del(args[0])) + { + veejay_msg(VEEJAY_MSG_INFO, "Deleted stream %d", args[0]); + vj_tag_verify_delete( args[0], 1 ); + } + } + } } void vj_event_tag_toggle(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*)ptr; - int args[1]; - char *str = NULL; P_A(args,str,format,ap); - if(STREAM_PLAYING(v)) - { - int active = vj_tag_get_active(v->uc->sample_id); - vj_tag_set_active( v->uc->sample_id, !active); - veejay_msg(VEEJAY_MSG_INFO, "Stream is %s", (vj_tag_get_active(v->uc->sample_id) ? "active" : "disabled")); - } + veejay_t *v = (veejay_t*)ptr; + int args[1]; + char *str = NULL; P_A(args,str,format,ap); + if(STREAM_PLAYING(v)) + { + int active = vj_tag_get_active(v->uc->sample_id); + vj_tag_set_active( v->uc->sample_id, !active); + veejay_msg(VEEJAY_MSG_INFO, "Stream is %s", (vj_tag_get_active(v->uc->sample_id) ? "active" : "disabled")); + } } -void vj_event_tag_new_generator( void *ptr, const char format[], va_list ap ) +void vj_event_tag_new_generator( void *ptr, const char format[], va_list ap ) { - veejay_t *v = (veejay_t*) ptr; - char str[255]; - int args[2] = { 0,0 }; - P_A(args,str,format,ap); + veejay_t *v = (veejay_t*) ptr; + char str[255]; + int args[2] = { 0,0 }; + P_A(args,str,format,ap); - int id = veejay_create_tag(v, VJ_TAG_TYPE_GENERATOR, str, v->nstreams,0,args[0]); + int id = veejay_create_tag(v, VJ_TAG_TYPE_GENERATOR, str, v->nstreams,0,args[0]); - if( id <= 0 ) { - veejay_msg(0,"Error launching plugin '%s'.", str ); - } + if( id <= 0 ) { + veejay_msg(0,"Error launching plugin '%s'.", str ); + } } #ifdef USE_GDK_PIXBUF void vj_event_tag_new_picture(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - char str[255]; - int *args = NULL; - P_A(args,str,format,ap); + veejay_t *v = (veejay_t*) ptr; + char str[255]; + int *args = NULL; + P_A(args,str,format,ap); - int id = veejay_create_tag(v, VJ_TAG_TYPE_PICTURE, str, v->nstreams,0,0); + int id = veejay_create_tag(v, VJ_TAG_TYPE_PICTURE, str, v->nstreams,0,0); - if(id <= 0 ) - veejay_msg(VEEJAY_MSG_ERROR, "Unable to create new Picture stream"); + if(id <= 0 ) + veejay_msg(VEEJAY_MSG_ERROR, "Unable to create new Picture stream"); } #endif #ifdef SUPPORT_READ_DV2 -void vj_event_tag_new_dv1394(void *ptr, const char format[], va_list ap) +void vj_event_tag_new_dv1394(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*)ptr; - int args[2]; - char *str = NULL; - P_A(args,str,format,ap); + veejay_t *v = (veejay_t*)ptr; + int args[2]; + char *str = NULL; + P_A(args,str,format,ap); - if(args[0] == -1) args[0] = 63; - veejay_msg(VEEJAY_MSG_DEBUG, "Try channel %d", args[0]); - int id = veejay_create_tag(v, VJ_TAG_TYPE_DV1394, "/dev/dv1394", v->nstreams,0, args[0]); - if( id <= 0) - veejay_msg(VEEJAY_MSG_ERROR, "Unable to create new DV1394 stream"); + if(args[0] == -1) args[0] = 63; + veejay_msg(VEEJAY_MSG_DEBUG, "Try channel %d", args[0]); + int id = veejay_create_tag(v, VJ_TAG_TYPE_DV1394, "/dev/dv1394", v->nstreams,0, args[0]); + if( id <= 0) + veejay_msg(VEEJAY_MSG_ERROR, "Unable to create new DV1394 stream"); } #endif -void vj_event_v4l_blackframe( void *ptr, const char format[] , va_list ap) +void vj_event_v4l_blackframe( void *ptr, const char format[] , va_list ap) { - veejay_t *v = (veejay_t*) ptr; + veejay_t *v = (veejay_t*) ptr; - char *str = NULL; - int args[4]; - - P_A(args,str,format,ap); - - int id = args[0]; - if( id == 0 ) { - if( STREAM_PLAYING(v) ) - id = v->uc->sample_id; - } + char *str = NULL; + int args[4]; + + P_A(args,str,format,ap); + + int id = args[0]; + if( id == 0 ) { + if( STREAM_PLAYING(v) ) + id = v->uc->sample_id; + } - if( id == 0 ) { - return; - } + if( id == 0 ) { + return; + } - if( args[1] == 0 ) { - vj_tag_drop_blackframe(id); - } else { - vj_tag_grab_blackframe(id, args[1], args[2],args[3]); - } + if( args[1] == 0 ) { + vj_tag_drop_blackframe(id); + } else { + vj_tag_grab_blackframe(id, args[1], args[2],args[3]); + } } -void vj_event_cali_write_file( void *ptr, const char format[], va_list ap) +void vj_event_cali_write_file( void *ptr, const char format[], va_list ap) { - char str[1024]; - int args[2]; - veejay_t *v = (veejay_t*) ptr; + char str[1024]; + int args[2]; + veejay_t *v = (veejay_t*) ptr; - P_A(args,str,format,ap); + P_A(args,str,format,ap); - int id = args[0]; - if( id == 0 ) { - if(STREAM_PLAYING(v)) - id = v->uc->sample_id; - } - if( vj_tag_exists( id ) ){ - if(vj_tag_cali_write_file( id, str, v->current_edit_list )) { - veejay_msg(VEEJAY_MSG_INFO, "Saved calibration file to %s", str ); - } - } - else { - p_no_tag(id); - } + int id = args[0]; + if( id == 0 ) { + if(STREAM_PLAYING(v)) + id = v->uc->sample_id; + } + if( vj_tag_exists( id ) ){ + if(vj_tag_cali_write_file( id, str, v->current_edit_list )) { + veejay_msg(VEEJAY_MSG_INFO, "Saved calibration file to %s", str ); + } + } + else { + p_no_tag(id); + } } -void vj_event_stream_new_clone( void *ptr, const char format[], va_list ap ) +void vj_event_stream_new_clone( void *ptr, const char format[], va_list ap ) { - char *str = NULL; - int args[2]; - veejay_t *v = (veejay_t*) ptr; + char *str = NULL; + int args[2]; + veejay_t *v = (veejay_t*) ptr; - P_A(args,str,format,ap); + P_A(args,str,format,ap); - int id = veejay_create_tag( v, VJ_TAG_TYPE_CLONE, NULL, v->nstreams, args[0],args[0] ); + int id = veejay_create_tag( v, VJ_TAG_TYPE_CLONE, NULL, v->nstreams, args[0],args[0] ); - if( id <= 0 ) - veejay_msg(VEEJAY_MSG_ERROR, "Unable to create a clone of stream %d", args[0]); - else - veejay_msg(VEEJAY_MSG_ERROR, "Created a clone of stream %d", args[0]); + if( id <= 0 ) + veejay_msg(VEEJAY_MSG_ERROR, "Unable to create a clone of stream %d", args[0]); + else + veejay_msg(VEEJAY_MSG_ERROR, "Created a clone of stream %d", args[0]); } -void vj_event_stream_new_cali( void *ptr, const char format[], va_list ap) +void vj_event_stream_new_cali( void *ptr, const char format[], va_list ap) { - char str[1024]; - int args[2]; - veejay_t *v = (veejay_t*) ptr; + char str[1024]; + int args[2]; + veejay_t *v = (veejay_t*) ptr; - P_A(args,str,format,ap); + P_A(args,str,format,ap); - int id = veejay_create_tag( - v, VJ_TAG_TYPE_CALI, - str, - v->nstreams, - 0,0); - if(id > 0 ) - v->nstreams++; + int id = veejay_create_tag( + v, VJ_TAG_TYPE_CALI, + str, + v->nstreams, + 0,0); + if(id > 0 ) + v->nstreams++; - if( id <= 0 ) - veejay_msg(VEEJAY_MSG_ERROR, "Unable to create load calibration file '%s'",str); - else - veejay_msg(VEEJAY_MSG_INFO, "Loaded calibration file to Stream %d",id ); + if( id <= 0 ) + veejay_msg(VEEJAY_MSG_ERROR, "Unable to create load calibration file '%s'",str); + else + veejay_msg(VEEJAY_MSG_INFO, "Loaded calibration file to Stream %d",id ); } void vj_event_tag_new_v4l(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - char *str = NULL; - int args[2]; - char filename[255]; - P_A(args,str,format,ap); + veejay_t *v = (veejay_t*) ptr; + char *str = NULL; + int args[2]; + char filename[255]; + P_A(args,str,format,ap); - sprintf(filename, "video%d", args[0]); + sprintf(filename, "video%d", args[0]); - int id = vj_tag_new(VJ_TAG_TYPE_V4L, - filename, - v->nstreams, - v->edit_list, - v->pixel_format, - args[1], - args[0], - v->settings->composite ); + int id = vj_tag_new(VJ_TAG_TYPE_V4L, + filename, + v->nstreams, + v->edit_list, + v->pixel_format, + args[1], + args[0], + v->settings->composite ); - if(id > 0 ) - v->nstreams++; + if(id > 0 ) + v->nstreams++; - if( id <= 0 ) - veejay_msg(VEEJAY_MSG_ERROR, "Unable to create new Video4Linux stream "); + if( id <= 0 ) + veejay_msg(VEEJAY_MSG_ERROR, "Unable to create new Video4Linux stream "); } void vj_event_tag_new_net(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*)ptr; + veejay_t *v = (veejay_t*)ptr; - char str[255]; - int args[2]; + char str[255]; + int args[2]; - P_A(args,str,format,ap); + P_A(args,str,format,ap); - if( strncasecmp( str, "localhost",9 ) == 0 || strncasecmp( str, "127.0.0.1",9 ) == 0 ) - { - if( args[0] == v->uc->port ) - { - veejay_msg(0, "Try another port number, I am listening on this one."); - return; - } - } - - int id = veejay_create_tag(v, VJ_TAG_TYPE_NET, str, v->nstreams, args[0],0); + if( strncasecmp( str, "localhost",9 ) == 0 || strncasecmp( str, "127.0.0.1",9 ) == 0 ) + { + if( args[0] == v->uc->port ) + { + veejay_msg(0, "Try another port number, I am listening on this one."); + return; + } + } + + int id = veejay_create_tag(v, VJ_TAG_TYPE_NET, str, v->nstreams, args[0],0); - if(id <= 0) - veejay_msg(VEEJAY_MSG_ERROR, "Failed to create unicast stream"); + if(id <= 0) + veejay_msg(VEEJAY_MSG_ERROR, "Failed to create unicast stream"); } void vj_event_tag_new_mcast(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*)ptr; + veejay_t *v = (veejay_t*)ptr; - char str[255]; - int args[3]; + char str[255]; + int args[3]; - P_A(args,str,format,ap); + P_A(args,str,format,ap); - int id = veejay_create_tag(v, VJ_TAG_TYPE_MCAST, str, v->nstreams, args[0],0); + int id = veejay_create_tag(v, VJ_TAG_TYPE_MCAST, str, v->nstreams, args[0],0); - if( id <= 0) - veejay_msg(VEEJAY_MSG_ERROR, "Unable to create new multicast stream"); + if( id <= 0) + veejay_msg(VEEJAY_MSG_ERROR, "Unable to create new multicast stream"); } @@ -6889,839 +6891,839 @@ void vj_event_tag_new_mcast(void *ptr, const char format[], va_list ap) void vj_event_tag_new_color(void *ptr, const char format[], va_list ap) { - veejay_t *v= (veejay_t*) ptr; - char *str=NULL; - int args[4]; - P_A(args,str,format,ap); + veejay_t *v= (veejay_t*) ptr; + char *str=NULL; + int args[4]; + P_A(args,str,format,ap); - int i; - for(i = 0 ; i < 3; i ++ ) - CLAMPVAL( args[i] ); + int i; + for(i = 0 ; i < 3; i ++ ) + CLAMPVAL( args[i] ); - - int id = vj_tag_new( VJ_TAG_TYPE_COLOR, NULL, -1, v->edit_list,v->pixel_format, -1,0 , v->settings->composite); - if(id > 0) - { - vj_tag_set_stream_color( id, args[0],args[1],args[2] ); - } + + int id = vj_tag_new( VJ_TAG_TYPE_COLOR, NULL, -1, v->edit_list,v->pixel_format, -1,0 , v->settings->composite); + if(id > 0) + { + vj_tag_set_stream_color( id, args[0],args[1],args[2] ); + } - if( id <= 0 ) - veejay_msg(VEEJAY_MSG_ERROR, "Unable to create new solid color stream"); + if( id <= 0 ) + veejay_msg(VEEJAY_MSG_ERROR, "Unable to create new solid color stream"); } void vj_event_tag_new_y4m(void *ptr, const char format[], va_list ap) { - veejay_t *v= (veejay_t*) ptr; - char str[255]; - int *args = NULL; - P_A(args,str,format,ap); - int id = veejay_create_tag(v, VJ_TAG_TYPE_YUV4MPEG, str, v->nstreams,0,0); + veejay_t *v= (veejay_t*) ptr; + char str[255]; + int *args = NULL; + P_A(args,str,format,ap); + int id = veejay_create_tag(v, VJ_TAG_TYPE_YUV4MPEG, str, v->nstreams,0,0); - if( id <= 0 ) - veejay_msg(VEEJAY_MSG_INFO, "Unable to create new Yuv4mpeg stream"); + if( id <= 0 ) + veejay_msg(VEEJAY_MSG_INFO, "Unable to create new Yuv4mpeg stream"); } void vj_event_v4l_set_brightness(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - int args[2]; - char *str = NULL; - P_A(args,str,format,ap); - - STREAM_DEFAULTS(args[0]); - - if(vj_tag_exists(args[0]) && STREAM_PLAYING(v)) - { - if(vj_tag_set_brightness(args[0],args[1])) - { - veejay_msg(VEEJAY_MSG_DEBUG,"Set brightness to %d",args[1]); - } - } - + veejay_t *v = (veejay_t*) ptr; + int args[2]; + char *str = NULL; + P_A(args,str,format,ap); + + STREAM_DEFAULTS(args[0]); + + if(vj_tag_exists(args[0]) && STREAM_PLAYING(v)) + { + if(vj_tag_set_brightness(args[0],args[1])) + { + veejay_msg(VEEJAY_MSG_DEBUG,"Set brightness to %d",args[1]); + } + } + } -void vj_event_vp_proj_toggle(void *ptr, const char format[],va_list ap ) +void vj_event_vp_proj_toggle(void *ptr, const char format[],va_list ap ) { - veejay_t *v = (veejay_t*) ptr; + veejay_t *v = (veejay_t*) ptr; - if(!v->composite ) { - veejay_msg(0, "No viewport active."); - return; - } + if(!v->composite ) { + veejay_msg(0, "No viewport active."); + return; + } - int mode = !composite_get_status(v->composite); - composite_set_status( v->composite, mode ); + int mode = !composite_get_status(v->composite); + composite_set_status( v->composite, mode ); - veejay_msg(VEEJAY_MSG_INFO, "Projection transform is now %s on startup.",(mode==0? "inactive" : "active")); + veejay_msg(VEEJAY_MSG_INFO, "Projection transform is now %s on startup.",(mode==0? "inactive" : "active")); } -void vj_event_vp_stack( void *ptr, const char format[], va_list ap ) +void vj_event_vp_stack( void *ptr, const char format[], va_list ap ) { - veejay_t *v = (veejay_t*) ptr; - int args[2]; - char *str = NULL; - P_A(args,str,format,ap); + veejay_t *v = (veejay_t*) ptr; + int args[2]; + char *str = NULL; + P_A(args,str,format,ap); - if(!v->composite ) { - veejay_msg(0, "No viewport active."); - return; - } + if(!v->composite ) { + veejay_msg(0, "No viewport active."); + return; + } - if( args[0] == 1 ) - { - } + if( args[0] == 1 ) + { + } - if ( args[1] == 1 ) { - int mode = v->settings->composite; - if( mode == 0 ) { - v->settings->composite = 1; - } else if ( mode == 1 ) { - v->settings->composite = 0; - } else if ( mode == 2 ) { - v->settings->composite = 1; - } - } + if ( args[1] == 1 ) { + int mode = v->settings->composite; + if( mode == 0 ) { + v->settings->composite = 1; + } else if ( mode == 1 ) { + v->settings->composite = 0; + } else if ( mode == 2 ) { + v->settings->composite = 1; + } + } } -void vj_event_vp_set_points( void *ptr, const char format[], va_list ap ) +void vj_event_vp_set_points( void *ptr, const char format[], va_list ap ) { - int args[4] = { 0,0,0,0 }; - veejay_t *v = (veejay_t*)ptr; - char *str = NULL; - P_A(args,str,format,ap); + int args[4] = { 0,0,0,0 }; + veejay_t *v = (veejay_t*)ptr; + char *str = NULL; + P_A(args,str,format,ap); - if(!v->composite ) { - veejay_msg(0, "No viewport active."); - return; - } + if(!v->composite ) { + veejay_msg(0, "No viewport active."); + return; + } - if( args[0] <= 0 || args[0] > 4 ) { - veejay_msg(0, "Invalid point number. Use 1 - 4"); - return; - } - if( args[1] < 0 ) { - veejay_msg(0, "Scale must be a positive number."); - return; - } - float point_x = ( (float) args[2] / (float) args[1] ); - float point_y = ( (float) args[3] / (float) args[1] ); + if( args[0] <= 0 || args[0] > 4 ) { + veejay_msg(0, "Invalid point number. Use 1 - 4"); + return; + } + if( args[1] < 0 ) { + veejay_msg(0, "Scale must be a positive number."); + return; + } + float point_x = ( (float) args[2] / (float) args[1] ); + float point_y = ( (float) args[3] / (float) args[1] ); - v->settings->cx = point_x; - v->settings->cy = point_y; - v->settings->cn = args[0]; - v->settings->ca = 1; + v->settings->cx = point_x; + v->settings->cy = point_y; + v->settings->cn = args[0]; + v->settings->ca = 1; } -void vj_event_v4l_get_info(void *ptr, const char format[] , va_list ap) +void vj_event_v4l_get_info(void *ptr, const char format[] , va_list ap) { - veejay_t *v = (veejay_t*) ptr; - int args[2]; - char *str = NULL; - P_A(args,str,format,ap); + veejay_t *v = (veejay_t*) ptr; + int args[2]; + char *str = NULL; + P_A(args,str,format,ap); - STREAM_DEFAULTS(args[0]); + STREAM_DEFAULTS(args[0]); - char send_msg[128]; - char message[128]; + char send_msg[128]; + char message[128]; - sprintf( send_msg, "000" ); + sprintf( send_msg, "000" ); - if(vj_tag_exists(args[0])) - { - int values[21]; - veejay_memset(values,0,sizeof(values)); - if(vj_tag_get_v4l_properties( args[0], values )) - { - snprintf(message,sizeof(message), "%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d", - values[0],values[1],values[2],values[3],values[4],values[5],values[6],values[7],values[8],values[9], - values[10],values[11],values[12],values[13],values[14],values[15],values[16],values[17],values[18],values[19],values[20] ); - FORMAT_MSG(send_msg, message); - } - } + if(vj_tag_exists(args[0])) + { + int values[21]; + veejay_memset(values,0,sizeof(values)); + if(vj_tag_get_v4l_properties( args[0], values )) + { + snprintf(message,sizeof(message), "%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d", + values[0],values[1],values[2],values[3],values[4],values[5],values[6],values[7],values[8],values[9], + values[10],values[11],values[12],values[13],values[14],values[15],values[16],values[17],values[18],values[19],values[20] ); + FORMAT_MSG(send_msg, message); + } + } - SEND_MSG( v,send_msg ); + SEND_MSG( v,send_msg ); } void vj_event_v4l_set_contrast(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - int args[2]; - char *str = NULL; - P_A(args,str,format,ap); + veejay_t *v = (veejay_t*) ptr; + int args[2]; + char *str = NULL; + P_A(args,str,format,ap); - STREAM_DEFAULTS(args[0]); + STREAM_DEFAULTS(args[0]); - if(vj_tag_exists(args[0]) && STREAM_PLAYING(v)) - { - if(vj_tag_set_contrast(args[0],args[1])) - { - veejay_msg(VEEJAY_MSG_DEBUG,"Set contrast to %d",args[1]); - } - } + if(vj_tag_exists(args[0]) && STREAM_PLAYING(v)) + { + if(vj_tag_set_contrast(args[0],args[1])) + { + veejay_msg(VEEJAY_MSG_DEBUG,"Set contrast to %d",args[1]); + } + } } void vj_event_v4l_set_white(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - int args[2]; - char *str = NULL; - P_A(args,str,format,ap); + veejay_t *v = (veejay_t*) ptr; + int args[2]; + char *str = NULL; + P_A(args,str,format,ap); - STREAM_DEFAULTS(args[0]); + STREAM_DEFAULTS(args[0]); - if(vj_tag_exists(args[0]) && STREAM_PLAYING(v)) - { - if(vj_tag_set_white(args[0],args[1])) - { - veejay_msg(VEEJAY_MSG_DEBUG,"Set whiteness to %d",args[1]); - } - } + if(vj_tag_exists(args[0]) && STREAM_PLAYING(v)) + { + if(vj_tag_set_white(args[0],args[1])) + { + veejay_msg(VEEJAY_MSG_DEBUG,"Set whiteness to %d",args[1]); + } + } } void vj_event_v4l_set_saturation(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - int args[2]; - char *str = NULL; - P_A(args,str,format,ap); + veejay_t *v = (veejay_t*) ptr; + int args[2]; + char *str = NULL; + P_A(args,str,format,ap); - STREAM_DEFAULTS(args[0]); + STREAM_DEFAULTS(args[0]); - if(vj_tag_exists(args[0]) && STREAM_PLAYING(v)) - { + if(vj_tag_exists(args[0]) && STREAM_PLAYING(v)) + { #ifdef HAVE_V4L2 - uint32_t v4l_ctrl_id = v4l2_get_property_id( "saturation" ); - if(v4l_ctrl_id == 0 ) { - veejay_msg(0,"Invalid v4l2 property name '%s'",str ); - return; - } - if(!vj_tag_v4l_set_control( args[0], v4l_ctrl_id, args[1] ) ) { - veejay_msg(VEEJAY_MSG_DEBUG,"Not a valid video4linux device: %d", args[0] ); - } + uint32_t v4l_ctrl_id = v4l2_get_property_id( "saturation" ); + if(v4l_ctrl_id == 0 ) { + veejay_msg(0,"Invalid v4l2 property name '%s'",str ); + return; + } + if(!vj_tag_v4l_set_control( args[0], v4l_ctrl_id, args[1] ) ) { + veejay_msg(VEEJAY_MSG_DEBUG,"Not a valid video4linux device: %d", args[0] ); + } #endif - } + } } void vj_event_v4l_set_color(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - int args[2]; - char *str = NULL; - P_A(args,str,format,ap); + veejay_t *v = (veejay_t*) ptr; + int args[2]; + char *str = NULL; + P_A(args,str,format,ap); - STREAM_DEFAULTS(args[0]); + STREAM_DEFAULTS(args[0]); - if(vj_tag_exists(args[0]) && STREAM_PLAYING(v)) - { - if(vj_tag_set_color(args[0],args[1])) - { - veejay_msg(VEEJAY_MSG_DEBUG,"Set color to %d",args[1]); - } - } + if(vj_tag_exists(args[0]) && STREAM_PLAYING(v)) + { + if(vj_tag_set_color(args[0],args[1])) + { + veejay_msg(VEEJAY_MSG_DEBUG,"Set color to %d",args[1]); + } + } } void vj_event_v4l_set_property( void *ptr, const char format[], va_list ap ) { - veejay_t *v = (veejay_t*) ptr; - int args[2]; - char str[255]; + veejay_t *v = (veejay_t*) ptr; + int args[2]; + char str[255]; #ifdef HAVE_V4L2 - P_A(args,str,format,ap); + P_A(args,str,format,ap); - STREAM_DEFAULTS(args[0]); + STREAM_DEFAULTS(args[0]); - uint32_t v4l_ctrl_id = v4l2_get_property_id( str ); - if(v4l_ctrl_id == 0 ) { - veejay_msg(VEEJAY_MSG_DEBUG,"Invalid v4l2 property name '%s'",str ); - return; - } - if(!vj_tag_v4l_set_control( args[0], v4l_ctrl_id, args[1] ) ) { - veejay_msg(VEEJAY_MSG_DEBUG,"Not a valid video4linux device: %d", args[0] ); - } - else { - veejay_msg(VEEJAY_MSG_DEBUG,"Set %s to %d", str, args[1] ); - } + uint32_t v4l_ctrl_id = v4l2_get_property_id( str ); + if(v4l_ctrl_id == 0 ) { + veejay_msg(VEEJAY_MSG_DEBUG,"Invalid v4l2 property name '%s'",str ); + return; + } + if(!vj_tag_v4l_set_control( args[0], v4l_ctrl_id, args[1] ) ) { + veejay_msg(VEEJAY_MSG_DEBUG,"Not a valid video4linux device: %d", args[0] ); + } + else { + veejay_msg(VEEJAY_MSG_DEBUG,"Set %s to %d", str, args[1] ); + } #endif } void vj_event_v4l_set_hue(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - int args[2]; - char *str = NULL; - P_A(args,str,format,ap); + veejay_t *v = (veejay_t*) ptr; + int args[2]; + char *str = NULL; + P_A(args,str,format,ap); - STREAM_DEFAULTS(args[0]); + STREAM_DEFAULTS(args[0]); - if(vj_tag_exists(args[0]) && STREAM_PLAYING(v)) - { - if(vj_tag_set_hue(args[0],args[1])) - { - veejay_msg(VEEJAY_MSG_DEBUG,"Set hue to %d",args[1]); - } - } + if(vj_tag_exists(args[0]) && STREAM_PLAYING(v)) + { + if(vj_tag_set_hue(args[0],args[1])) + { + veejay_msg(VEEJAY_MSG_DEBUG,"Set hue to %d",args[1]); + } + } } -void vj_event_viewport_frontback(void *ptr, const char format[], va_list ap) +void vj_event_viewport_frontback(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - if(!v->composite) { - veejay_msg(VEEJAY_MSG_ERROR, "No viewport active."); - return; - } + veejay_t *v = (veejay_t*) ptr; + if(!v->composite) { + veejay_msg(VEEJAY_MSG_ERROR, "No viewport active."); + return; + } - if( v->settings->composite == 2 && composite_get_ui( v->composite ) ) { - if(v->use_osd==3) - v->use_osd = 0; - composite_set_ui(v->composite, 0 ); - v->settings->composite = 0; - } - else { - composite_set_ui( v->composite, 2 ); - v->settings->composite = 2; - v->use_osd=3; - veejay_msg(VEEJAY_MSG_INFO, "You can now calibrate your projection/camera, press CTRL-s again to save and exit."); - } + if( v->settings->composite == 2 && composite_get_ui( v->composite ) ) { + if(v->use_osd==3) + v->use_osd = 0; + composite_set_ui(v->composite, 0 ); + v->settings->composite = 0; + } + else { + composite_set_ui( v->composite, 2 ); + v->settings->composite = 2; + v->use_osd=3; + veejay_msg(VEEJAY_MSG_INFO, "You can now calibrate your projection/camera, press CTRL-s again to save and exit."); + } } -void vj_event_toggle_osl( void *ptr, const char format[], va_list ap ) +void vj_event_toggle_osl( void *ptr, const char format[], va_list ap ) { #ifdef HAVE_SDL_TTF - veejay_t *v = (veejay_t*) ptr; - if( v->settings->composite ) { - veejay_msg(VEEJAY_MSG_ERROR, "Sorry, on-screen-logging is not supported yet in projection mapping. Start veejay with -D"); - } else { - veejay_toggle_osl(); - veejay_msg(VEEJAY_MSG_INFO, "On screen logging is now %s", - (veejay_log_to_ringbuffer() ? "enabled": "disabled" )); - } + veejay_t *v = (veejay_t*) ptr; + if( v->settings->composite ) { + veejay_msg(VEEJAY_MSG_ERROR, "Sorry, on-screen-logging is not supported yet in projection mapping. Start veejay with -D"); + } else { + veejay_toggle_osl(); + veejay_msg(VEEJAY_MSG_INFO, "On screen logging is now %s", + (veejay_log_to_ringbuffer() ? "enabled": "disabled" )); + } #else - veejay_msg(VEEJAY_MSG_WARNING, "Sorry, on-screen-logging requires veejay to be build with SDL_ttf"); + veejay_msg(VEEJAY_MSG_WARNING, "Sorry, on-screen-logging requires veejay to be build with SDL_ttf"); #endif } -void vj_event_toggle_osd( void *ptr, const char format[], va_list ap ) +void vj_event_toggle_osd( void *ptr, const char format[], va_list ap ) { - veejay_t *v = (veejay_t*) ptr; - if(v->use_osd == 0 ) - { - v->use_osd = 1; - veejay_msg(VEEJAY_MSG_INFO, "OSD on"); - } - else - { - veejay_msg(VEEJAY_MSG_INFO, "OSD off"); - v->use_osd = 0; - } + veejay_t *v = (veejay_t*) ptr; + if(v->use_osd == 0 ) + { + v->use_osd = 1; + veejay_msg(VEEJAY_MSG_INFO, "OSD on"); + } + else + { + veejay_msg(VEEJAY_MSG_INFO, "OSD off"); + v->use_osd = 0; + } } -void vj_event_toggle_copyright( void *ptr, const char format[], va_list ap ) +void vj_event_toggle_copyright( void *ptr, const char format[], va_list ap ) { - static int old_osd = -1; - veejay_t *v = (veejay_t*) ptr; - if( old_osd == -1 ) - old_osd = v->use_osd; - if(v->use_osd == 0 || v->use_osd == 1) - v->use_osd = 2; - else - v->use_osd = (old_osd==-1?0: old_osd); + static int old_osd = -1; + veejay_t *v = (veejay_t*) ptr; + if( old_osd == -1 ) + old_osd = v->use_osd; + if(v->use_osd == 0 || v->use_osd == 1) + v->use_osd = 2; + else + v->use_osd = (old_osd==-1?0: old_osd); - if(v->use_osd == 2 ) { - if( veejay_log_to_ringbuffer()) - veejay_toggle_osl(); - } + if(v->use_osd == 2 ) { + if( veejay_log_to_ringbuffer()) + veejay_toggle_osl(); + } } -void vj_event_toggle_osd_extra( void *ptr, const char format[], va_list ap ) +void vj_event_toggle_osd_extra( void *ptr, const char format[], va_list ap ) { - veejay_t *v = (veejay_t*) ptr; - if(v->use_osd == 3 ) - v->use_osd = 0; - else - { - v->use_osd = 3; - veejay_msg(VEEJAY_MSG_INFO, "Not displaying viewport help"); - } + veejay_t *v = (veejay_t*) ptr; + if(v->use_osd == 3 ) + v->use_osd = 0; + else + { + v->use_osd = 3; + veejay_msg(VEEJAY_MSG_INFO, "Not displaying viewport help"); + } } static struct { - const char *name; - int id; + const char *name; + int id; } recorder_formats[] = { - { "mlzo", ENCODER_LZO }, - { "y4m422", ENCODER_YUV4MPEG }, - { "y4m420", ENCODER_YUV4MPEG420 }, - { "yv16", ENCODER_YUV422 }, - { "y422", ENCODER_YUV422 }, - { "i420", ENCODER_YUV420 }, - { "y420", ENCODER_YUV420 }, - { "huffyuv", ENCODER_HUFFYUV }, + { "mlzo", ENCODER_LZO }, + { "y4m422", ENCODER_YUV4MPEG }, + { "y4m420", ENCODER_YUV4MPEG420 }, + { "yv16", ENCODER_YUV422 }, + { "y422", ENCODER_YUV422 }, + { "i420", ENCODER_YUV420 }, + { "y420", ENCODER_YUV420 }, + { "huffyuv", ENCODER_HUFFYUV }, #ifdef SUPPORT_READ_DV2 - { "dvvideo", ENCODER_DVVIDEO }, + { "dvvideo", ENCODER_DVVIDEO }, #endif - { "dvsd", ENCODER_DVVIDEO }, - { "mjpeg", ENCODER_MJPEG }, - { "mjpeg-b", ENCODER_MJPEGB }, - { "mjpegb", ENCODER_MJPEGB }, - { "ljpeg", ENCODER_LJPEG }, + { "dvsd", ENCODER_DVVIDEO }, + { "mjpeg", ENCODER_MJPEG }, + { "mjpeg-b", ENCODER_MJPEGB }, + { "mjpegb", ENCODER_MJPEGB }, + { "ljpeg", ENCODER_LJPEG }, #ifdef HAVE_LIBQUICKTIME - { "quicktime-mjpeg", ENCODER_QUICKTIME_MJPEG }, + { "quicktime-mjpeg", ENCODER_QUICKTIME_MJPEG }, #ifdef SUPPORT_READ_DV2 - { "quicktime-dv", ENCODER_QUICKTIME_DV }, + { "quicktime-dv", ENCODER_QUICKTIME_DV }, #endif #endif - { "vj20", ENCODER_YUV420F }, - { "vj22", ENCODER_YUV422F }, - { NULL , -1 } + { "vj20", ENCODER_YUV420F }, + { "vj22", ENCODER_YUV422F }, + { NULL , -1 } }; void vj_event_tag_set_format(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - int args[2]; - char str[255]; - P_A(args,str,format,ap); + veejay_t *v = (veejay_t*) ptr; + int args[2]; + char str[255]; + P_A(args,str,format,ap); - if(v->settings->tag_record || v->settings->offline_record || (v->seq->active && v->seq->rec_id) ) - { - veejay_msg(VEEJAY_MSG_ERROR, "Cannot change data format while recording to disk"); - return; - } + if(v->settings->tag_record || v->settings->offline_record || (v->seq->active && v->seq->rec_id) ) + { + veejay_msg(VEEJAY_MSG_ERROR, "Cannot change data format while recording to disk"); + return; + } - int i; - if( strncasecmp(str, "list", 4 ) == 0 || strncasecmp( str, "help",4) == 0 ) { - for(i = 0; recorder_formats[i].name != NULL ; i ++ ) { - veejay_msg(VEEJAY_MSG_INFO,"%s", recorder_formats[i].name ); - } - return; - } + int i; + if( strncasecmp(str, "list", 4 ) == 0 || strncasecmp( str, "help",4) == 0 ) { + for(i = 0; recorder_formats[i].name != NULL ; i ++ ) { + veejay_msg(VEEJAY_MSG_INFO,"%s", recorder_formats[i].name ); + } + return; + } - int old_format = _recorder_format; + int old_format = _recorder_format; - veejay_msg(VEEJAY_MSG_DEBUG,"Current recording format is %s", - vj_avcodec_get_encoder_name( old_format )); - - for( i = 0; recorder_formats[i].name != NULL ; i ++ ) { - if(strncasecmp( str, recorder_formats[i].name, strlen(recorder_formats[i].name) ) == 0 ) { - _recorder_format = recorder_formats[i].id; - } - } + veejay_msg(VEEJAY_MSG_DEBUG,"Current recording format is %s", + vj_avcodec_get_encoder_name( old_format )); + + for( i = 0; recorder_formats[i].name != NULL ; i ++ ) { + if(strncasecmp( str, recorder_formats[i].name, strlen(recorder_formats[i].name) ) == 0 ) { + _recorder_format = recorder_formats[i].id; + } + } - if( strncasecmp(str, "yuv", 3 ) == 0 || strncasecmp(str, "intern", 6 ) == 0) { - switch(v->pixel_format) { - case FMT_422F: _recorder_format = ENCODER_YUV422F; break; - case FMT_422 : _recorder_format = ENCODER_YUV422; break; - } - } + if( strncasecmp(str, "yuv", 3 ) == 0 || strncasecmp(str, "intern", 6 ) == 0) { + switch(v->pixel_format) { + case FMT_422F: _recorder_format = ENCODER_YUV422F; break; + case FMT_422 : _recorder_format = ENCODER_YUV422; break; + } + } - if(strncasecmp(str,"dvvideo",7)==0||strncasecmp(str,"dvsd",4)==0) - { - if(vj_el_is_dv(v->current_edit_list)) - { - _recorder_format = ENCODER_DVVIDEO; - } - else - { - veejay_msg(VEEJAY_MSG_ERROR, "Cannot set DVVideo format (invalid DV resolution)"); - _recorder_format = old_format; - } + if(strncasecmp(str,"dvvideo",7)==0||strncasecmp(str,"dvsd",4)==0) + { + if(vj_el_is_dv(v->current_edit_list)) + { + _recorder_format = ENCODER_DVVIDEO; + } + else + { + veejay_msg(VEEJAY_MSG_ERROR, "Cannot set DVVideo format (invalid DV resolution)"); + _recorder_format = old_format; + } - veejay_msg(VEEJAY_MSG_INFO, "Selected recording format %s" , vj_avcodec_get_encoder_name(old_format)); - return; - } + veejay_msg(VEEJAY_MSG_INFO, "Selected recording format %s" , vj_avcodec_get_encoder_name(old_format)); + return; + } #ifdef HAVE_LIBQUICKTIME - if(strncasecmp(str,"quicktime-dv", 12 ) == 0 ) - { - if( vj_el_is_dv( v->current_edit_list )) - { - _recorder_format = ENCODER_QUICKTIME_DV; - } - else - { - veejay_msg(VEEJAY_MSG_ERROR, "Cannot set Quicktime-DV format (invalid DV resolution)"); - _recorder_format = old_format; - } - } + if(strncasecmp(str,"quicktime-dv", 12 ) == 0 ) + { + if( vj_el_is_dv( v->current_edit_list )) + { + _recorder_format = ENCODER_QUICKTIME_DV; + } + else + { + veejay_msg(VEEJAY_MSG_ERROR, "Cannot set Quicktime-DV format (invalid DV resolution)"); + _recorder_format = old_format; + } + } #endif - veejay_msg(VEEJAY_MSG_INFO, "Selected recording format %s" , vj_avcodec_get_encoder_name(old_format)); + veejay_msg(VEEJAY_MSG_INFO, "Selected recording format %s" , vj_avcodec_get_encoder_name(old_format)); } static void _vj_event_tag_record( veejay_t *v , int *args, char *str ) { - if(!STREAM_PLAYING(v)) - { - p_invalid_mode(); - return; - } + if(!STREAM_PLAYING(v)) + { + p_invalid_mode(); + return; + } - char tmp[255]; - char prefix[255]; - if(args[0] <= 0) - { - veejay_msg(VEEJAY_MSG_ERROR,"Number of frames to record must be > 0"); - return; - } + char tmp[255]; + char prefix[255]; + if(args[0] <= 0) + { + veejay_msg(VEEJAY_MSG_ERROR,"Number of frames to record must be > 0"); + return; + } - if(args[1] < 0 || args[1] > 1) - { - veejay_msg(VEEJAY_MSG_ERROR,"Auto play is either on or off"); - return; - } + if(args[1] < 0 || args[1] > 1) + { + veejay_msg(VEEJAY_MSG_ERROR,"Auto play is either on or off"); + return; + } - char sourcename[255]; - vj_tag_get_description( v->uc->sample_id, sourcename ); - sprintf(prefix,"%s-%02d-", sourcename, v->uc->sample_id); - if(! veejay_create_temp_file(prefix, tmp )) - { - veejay_msg(VEEJAY_MSG_ERROR, "Cannot create temporary file %s", tmp); - return; - } + char sourcename[255]; + vj_tag_get_description( v->uc->sample_id, sourcename ); + sprintf(prefix,"%s-%02d-", sourcename, v->uc->sample_id); + if(! veejay_create_temp_file(prefix, tmp )) + { + veejay_msg(VEEJAY_MSG_ERROR, "Cannot create temporary file %s", tmp); + return; + } - int format = _recorder_format; - if(_recorder_format == -1) - { - veejay_msg(VEEJAY_MSG_ERROR, "Set a destination format first"); - return; - } + int format = _recorder_format; + if(_recorder_format == -1) + { + veejay_msg(VEEJAY_MSG_ERROR, "Set a destination format first"); + return; + } - if(args[0] <= 1 ) - { - veejay_msg(VEEJAY_MSG_ERROR, "Cowardly refusing to record less then 2 frames"); - return; - } + if(args[0] <= 1 ) + { + veejay_msg(VEEJAY_MSG_ERROR, "Cowardly refusing to record less then 2 frames"); + return; + } - if( vj_tag_init_encoder( v->uc->sample_id, tmp, format, args[0]) <= 0 ) - { - veejay_msg(VEEJAY_MSG_INFO, "Error trying to start recording from stream %d", v->uc->sample_id); - if(!v->settings->offline_record || v->settings->offline_tag_id != v->uc->sample_id) { - vj_tag_stop_encoder(v->uc->sample_id); - } - v->settings->tag_record = 0; - return; - } + if( vj_tag_init_encoder( v->uc->sample_id, tmp, format, args[0]) <= 0 ) + { + veejay_msg(VEEJAY_MSG_INFO, "Error trying to start recording from stream %d", v->uc->sample_id); + if(!v->settings->offline_record || v->settings->offline_tag_id != v->uc->sample_id) { + vj_tag_stop_encoder(v->uc->sample_id); + } + v->settings->tag_record = 0; + return; + } - if(v->use_osd) - { - veejay_msg(VEEJAY_MSG_INFO,"Turned off OSD, recording now"); - v->use_osd = 0; - } - - if(args[1]==0) - v->settings->tag_record_switch = 0; - else - v->settings->tag_record_switch = 1; + if(v->use_osd) + { + veejay_msg(VEEJAY_MSG_INFO,"Turned off OSD, recording now"); + v->use_osd = 0; + } + + if(args[1]==0) + v->settings->tag_record_switch = 0; + else + v->settings->tag_record_switch = 1; - v->settings->tag_record = 1; + v->settings->tag_record = 1; } void vj_event_tag_rec_start(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - int args[2]; - char *str = NULL; - P_A(args,str,format,ap); + veejay_t *v = (veejay_t*) ptr; + int args[2]; + char *str = NULL; + P_A(args,str,format,ap); - _vj_event_tag_record( v, args, str ); + _vj_event_tag_record( v, args, str ); } void vj_event_tag_rec_stop(void *ptr, const char format[], va_list ap) { - char avi_file[1024]; - veejay_t *v = (veejay_t *)ptr; - video_playback_setup *s = v->settings; + char avi_file[1024]; + veejay_t *v = (veejay_t *)ptr; + video_playback_setup *s = v->settings; - if( STREAM_PLAYING(v) && v->settings->tag_record) - { - int play_now = s->tag_record_switch; - if(!vj_tag_stop_encoder( v->uc->sample_id)) - { - veejay_msg(VEEJAY_MSG_ERROR, "Wasnt recording anyway"); - return; - } - - vj_tag_get_encoded_file(v->uc->sample_id, avi_file); + if( STREAM_PLAYING(v) && v->settings->tag_record) + { + int play_now = s->tag_record_switch; + if(!vj_tag_stop_encoder( v->uc->sample_id)) + { + veejay_msg(VEEJAY_MSG_ERROR, "Wasnt recording anyway"); + return; + } + + vj_tag_get_encoded_file(v->uc->sample_id, avi_file); - // create new sample - int ns = veejay_edit_addmovie_sample( v,avi_file, 0 ); - if(ns > 0) - { - int len = vj_tag_get_encoded_frames(v->uc->sample_id) - 1; - veejay_msg(VEEJAY_MSG_INFO,"Added file %s (%d frames) to EditList as sample %d", - avi_file, len ,ns); - } - else - { - veejay_msg(VEEJAY_MSG_ERROR, "Cannot add videofile %s to EditList!",avi_file); - } + // create new sample + int ns = veejay_edit_addmovie_sample( v,avi_file, 0 ); + if(ns > 0) + { + int len = vj_tag_get_encoded_frames(v->uc->sample_id) - 1; + veejay_msg(VEEJAY_MSG_INFO,"Added file %s (%d frames) to EditList as sample %d", + avi_file, len ,ns); + } + else + { + veejay_msg(VEEJAY_MSG_ERROR, "Cannot add videofile %s to EditList!",avi_file); + } - veejay_msg(VEEJAY_MSG_ERROR, "Stopped recording from stream %d", v->uc->sample_id); - vj_tag_reset_encoder( v->uc->sample_id); - s->tag_record = 0; - s->tag_record_switch = 0; + veejay_msg(VEEJAY_MSG_ERROR, "Stopped recording from stream %d", v->uc->sample_id); + vj_tag_reset_encoder( v->uc->sample_id); + s->tag_record = 0; + s->tag_record_switch = 0; - if(play_now) - { - int last_id = sample_highest_valid_id(); - veejay_msg(VEEJAY_MSG_INFO, "Playing sample %d now", last_id ); - veejay_change_playback_mode( v, VJ_PLAYBACK_MODE_SAMPLE, last_id ); - } - } + if(play_now) + { + int last_id = sample_highest_valid_id(); + veejay_msg(VEEJAY_MSG_INFO, "Playing sample %d now", last_id ); + veejay_change_playback_mode( v, VJ_PLAYBACK_MODE_SAMPLE, last_id ); + } + } } void vj_event_tag_rec_offline_start(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - int args[3]; - char *str = NULL; P_A(args,str,format,ap); + veejay_t *v = (veejay_t*) ptr; + int args[3]; + char *str = NULL; P_A(args,str,format,ap); - if( v->settings->offline_record ) - { - veejay_msg(VEEJAY_MSG_ERROR, "Already recording from stream %d", v->settings->offline_tag_id); - return; - } - - if( v->settings->tag_record && STREAM_PLAYING(v) && v->uc->sample_id == v->settings->offline_tag_id) + if( v->settings->offline_record ) { - veejay_msg(VEEJAY_MSG_ERROR ,"Please stop the stream recorder on stream %d first", v->uc->sample_id); - return; - } - - if( vj_tag_exists(args[0])) - { - char tmp[255]; - - int rec_format = _recorder_format; - char prefix[40]; + veejay_msg(VEEJAY_MSG_ERROR, "Already recording from stream %d", v->settings->offline_tag_id); + return; + } + + if( v->settings->tag_record && STREAM_PLAYING(v) && v->uc->sample_id == v->settings->offline_tag_id) + { + veejay_msg(VEEJAY_MSG_ERROR ,"Please stop the stream recorder on stream %d first", v->uc->sample_id); + return; + } + + if( vj_tag_exists(args[0])) + { + char tmp[255]; + + int rec_format = _recorder_format; + char prefix[40]; - if(rec_format==-1) - { - veejay_msg(VEEJAY_MSG_ERROR, "Error, no video format selected"); - return; - } + if(rec_format==-1) + { + veejay_msg(VEEJAY_MSG_ERROR, "Error, no video format selected"); + return; + } - snprintf(prefix,sizeof(prefix),"stream-%02d", args[0]); + snprintf(prefix,sizeof(prefix),"stream-%02d", args[0]); - if(!veejay_create_temp_file(prefix, tmp )) - { - veejay_msg(VEEJAY_MSG_ERROR, "(Offline) Error creating temporary file %s. Unable to start offline recorder", tmp); - return; - } + if(!veejay_create_temp_file(prefix, tmp )) + { + veejay_msg(VEEJAY_MSG_ERROR, "(Offline) Error creating temporary file %s. Unable to start offline recorder", tmp); + return; + } - if( vj_tag_init_encoder( args[0], tmp, rec_format, args[1]) ) - { - video_playback_setup *s = v->settings; - veejay_msg(VEEJAY_MSG_INFO, "(Offline) recording from stream %d", args[0]); - s->offline_record = 1; - s->offline_tag_id = args[0]; - s->offline_created_sample = args[2]; - } - else - { - veejay_msg(VEEJAY_MSG_ERROR, "(Offline) error starting recording stream %d",args[0]); - } - } - else - { - veejay_msg(VEEJAY_MSG_ERROR, "Stream %d does not exist",args[0]); - } + if( vj_tag_init_encoder( args[0], tmp, rec_format, args[1]) ) + { + video_playback_setup *s = v->settings; + veejay_msg(VEEJAY_MSG_INFO, "(Offline) recording from stream %d", args[0]); + s->offline_record = 1; + s->offline_tag_id = args[0]; + s->offline_created_sample = args[2]; + } + else + { + veejay_msg(VEEJAY_MSG_ERROR, "(Offline) error starting recording stream %d",args[0]); + } + } + else + { + veejay_msg(VEEJAY_MSG_ERROR, "Stream %d does not exist",args[0]); + } } void vj_event_tag_rec_offline_stop(void *ptr, const char format[], va_list ap) { - char avi_file[1024]; - veejay_t *v = (veejay_t*)ptr; - video_playback_setup *s = v->settings; - if(s->offline_record) - { - if( vj_tag_stop_encoder( s->offline_tag_id ) == 1 ) - { - vj_tag_get_encoded_file(s->offline_tag_id, avi_file); - - // create new sample - int ns = veejay_edit_addmovie_sample(v,avi_file,0); - if(ns) - { - if( vj_tag_get_encoded_frames(s->offline_tag_id) > 0) - veejay_msg(VEEJAY_MSG_INFO, "Created new sample %d from file %s", - ns,avi_file); - } - else - { - veejay_msg(VEEJAY_MSG_ERROR, "Cannot add videofile %s to EditList!",avi_file); - } + char avi_file[1024]; + veejay_t *v = (veejay_t*)ptr; + video_playback_setup *s = v->settings; + if(s->offline_record) + { + if( vj_tag_stop_encoder( s->offline_tag_id ) == 1 ) + { + vj_tag_get_encoded_file(s->offline_tag_id, avi_file); + + // create new sample + int ns = veejay_edit_addmovie_sample(v,avi_file,0); + if(ns) + { + if( vj_tag_get_encoded_frames(s->offline_tag_id) > 0) + veejay_msg(VEEJAY_MSG_INFO, "Created new sample %d from file %s", + ns,avi_file); + } + else + { + veejay_msg(VEEJAY_MSG_ERROR, "Cannot add videofile %s to EditList!",avi_file); + } - vj_tag_reset_encoder(s->offline_tag_id); + vj_tag_reset_encoder(s->offline_tag_id); - if(s->offline_created_sample) - { - int last_id = sample_highest_valid_id(); - veejay_msg(VEEJAY_MSG_INFO, "Playing new sample %d now ",last_id ); - veejay_change_playback_mode(v, VJ_PLAYBACK_MODE_SAMPLE,last_id ); - } - } - s->offline_record = 0; - s->offline_tag_id = 0; - s->offline_created_sample = 0; - } - else { - veejay_msg(0, "(Offline) recorder not active" ); - } + if(s->offline_created_sample) + { + int last_id = sample_highest_valid_id(); + veejay_msg(VEEJAY_MSG_INFO, "Playing new sample %d now ",last_id ); + veejay_change_playback_mode(v, VJ_PLAYBACK_MODE_SAMPLE,last_id ); + } + } + s->offline_record = 0; + s->offline_tag_id = 0; + s->offline_created_sample = 0; + } + else { + veejay_msg(0, "(Offline) recorder not active" ); + } } void vj_event_output_y4m_start(void *ptr, const char format[], va_list ap) { - veejay_msg(0, "Y4M out stream: obsolete - use recorder."); + veejay_msg(0, "Y4M out stream: obsolete - use recorder."); } void vj_event_output_y4m_stop(void *ptr, const char format[], va_list ap) { - veejay_msg(0, "Y4M out stream: obsolete - use recorder."); + veejay_msg(0, "Y4M out stream: obsolete - use recorder."); } void vj_event_enable_audio(void *ptr, const char format[], va_list ap) { #ifdef HAVE_JACK - veejay_t *v = (veejay_t*)ptr; - if (!v->audio_running ) - { - veejay_msg(0,"Veejay was started without audio."); - return; - } + veejay_t *v = (veejay_t*)ptr; + if (!v->audio_running ) + { + veejay_msg(0,"Veejay was started without audio."); + return; + } - v->settings->audio_mute = 0; -#endif + v->settings->audio_mute = 0; +#endif } void vj_event_disable_audio(void *ptr, const char format[], va_list ap) { #ifdef HAVE_JACK - veejay_t *v = (veejay_t *)ptr; - if (!v->audio_running ) - { - veejay_msg(0,"Veejay was started without audio."); - return; - } - v->settings->audio_mute = 1; + veejay_t *v = (veejay_t *)ptr; + if (!v->audio_running ) + { + veejay_msg(0,"Veejay was started without audio."); + return; + } + v->settings->audio_mute = 1; #endif } #define VJ_IMAGE_EFFECT_MIN 100 void vj_event_effect_inc(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - int real_id; - int args[1]; - char *s = NULL; - P_A(args,s,format,ap); - if(!SAMPLE_PLAYING(v) && !STREAM_PLAYING(v)) - { - p_invalid_mode(); - return; - } + veejay_t *v = (veejay_t*) ptr; + int real_id; + int args[1]; + char *s = NULL; + P_A(args,s,format,ap); + if(!SAMPLE_PLAYING(v) && !STREAM_PLAYING(v)) + { + p_invalid_mode(); + return; + } - v->uc->key_effect += args[0]; + v->uc->key_effect += args[0]; - int limit = vj_effect_max_effects(); + int limit = vj_effect_max_effects(); - if(v->uc->key_effect >= limit ) - v->uc->key_effect = VJ_IMAGE_EFFECT_MIN; + if(v->uc->key_effect >= limit ) + v->uc->key_effect = VJ_IMAGE_EFFECT_MIN; - while( !vj_effect_is_valid( v->uc->key_effect ) ) - { - v->uc->key_effect += args[0]; - if(v->uc->key_effect > limit ) - v->uc->key_effect = VJ_IMAGE_EFFECT_MIN; - } + while( !vj_effect_is_valid( v->uc->key_effect ) ) + { + v->uc->key_effect += args[0]; + if(v->uc->key_effect > limit ) + v->uc->key_effect = VJ_IMAGE_EFFECT_MIN; + } - real_id = vj_effect_get_real_id(v->uc->key_effect); + real_id = vj_effect_get_real_id(v->uc->key_effect); - veejay_msg(VEEJAY_MSG_INFO, "Selected %s Effect %s (%d)", - (vj_effect_get_extra_frame(real_id)==1 ? "Video" : "Image"), - vj_effect_get_description(real_id), - real_id); + veejay_msg(VEEJAY_MSG_INFO, "Selected %s Effect %s (%d)", + (vj_effect_get_extra_frame(real_id)==1 ? "Video" : "Image"), + vj_effect_get_description(real_id), + real_id); } void vj_event_effect_dec(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - int real_id; - int args[1]; - char *s = NULL; - P_A(args,s,format,ap); - if(!SAMPLE_PLAYING(v) && !STREAM_PLAYING(v)) - { - p_invalid_mode(); - return; - } + veejay_t *v = (veejay_t*) ptr; + int real_id; + int args[1]; + char *s = NULL; + P_A(args,s,format,ap); + if(!SAMPLE_PLAYING(v) && !STREAM_PLAYING(v)) + { + p_invalid_mode(); + return; + } - v->uc->key_effect -= args[0]; - if(v->uc->key_effect <= 0) v->uc->key_effect = vj_effect_max_effects()-1; - + v->uc->key_effect -= args[0]; + if(v->uc->key_effect <= 0) v->uc->key_effect = vj_effect_max_effects()-1; + - int limit = vj_effect_max_effects(); + int limit = vj_effect_max_effects(); - if(v->uc->key_effect >= limit ) - v->uc->key_effect = VJ_IMAGE_EFFECT_MIN; - if(v->uc->key_effect < VJ_IMAGE_EFFECT_MIN ) - v->uc->key_effect = limit -1; + if(v->uc->key_effect >= limit ) + v->uc->key_effect = VJ_IMAGE_EFFECT_MIN; + if(v->uc->key_effect < VJ_IMAGE_EFFECT_MIN ) + v->uc->key_effect = limit -1; - while( !vj_effect_is_valid( v->uc->key_effect ) ) - { - v->uc->key_effect -= args[0]; - if(v->uc->key_effect < VJ_IMAGE_EFFECT_MIN ) - v->uc->key_effect = limit-1; - } + while( !vj_effect_is_valid( v->uc->key_effect ) ) + { + v->uc->key_effect -= args[0]; + if(v->uc->key_effect < VJ_IMAGE_EFFECT_MIN ) + v->uc->key_effect = limit-1; + } - real_id = vj_effect_get_real_id(v->uc->key_effect); - veejay_msg(VEEJAY_MSG_INFO, "Selected %s Effect %s (%d)", - (vj_effect_get_extra_frame(real_id) == 1 ? "Video" : "Image"), - vj_effect_get_description(real_id), - real_id); + real_id = vj_effect_get_real_id(v->uc->key_effect); + veejay_msg(VEEJAY_MSG_INFO, "Selected %s Effect %s (%d)", + (vj_effect_get_extra_frame(real_id) == 1 ? "Video" : "Image"), + vj_effect_get_description(real_id), + real_id); } void vj_event_effect_add(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - if(SAMPLE_PLAYING(v)) - { - int c = sample_get_selected_entry(v->uc->sample_id); - if ( sample_chain_add( v->uc->sample_id, c, - vj_effect_get_real_id(v->uc->key_effect))) - { - int real_id = vj_effect_get_real_id(v->uc->key_effect); - veejay_msg(VEEJAY_MSG_INFO,"Added Effect %s on chain entry %d", - vj_effect_get_description(real_id), - c - ); - if(v->no_bezerk && vj_effect_get_extra_frame(real_id) ) - { - //veejay_set_sample(v,v->uc->sample_id); - // - int nf = sample_get_startFrame( v->uc->sample_id ); - veejay_set_frame(v,nf ); - } - v->uc->chain_changed = 1; - } - } - if(STREAM_PLAYING(v)) - { - int c = vj_tag_get_selected_entry(v->uc->sample_id); - if ( vj_tag_set_effect( v->uc->sample_id, c, vj_effect_get_real_id( v->uc->key_effect) )) - { - int real_id = vj_effect_get_real_id(v->uc->key_effect); - veejay_msg(VEEJAY_MSG_INFO,"Added Effect %s on chain entry %d", - vj_effect_get_description(real_id), - c - ); -// if(v->no_bezerk && vj_effect_get_extra_frame(real_id)) veejay_set_sample(v,v->uc->sample_id); - v->uc->chain_changed = 1; - } - } + veejay_t *v = (veejay_t*) ptr; + if(SAMPLE_PLAYING(v)) + { + int c = sample_get_selected_entry(v->uc->sample_id); + if ( sample_chain_add( v->uc->sample_id, c, + vj_effect_get_real_id(v->uc->key_effect))) + { + int real_id = vj_effect_get_real_id(v->uc->key_effect); + veejay_msg(VEEJAY_MSG_INFO,"Added Effect %s on chain entry %d", + vj_effect_get_description(real_id), + c + ); + if(v->no_bezerk && vj_effect_get_extra_frame(real_id) ) + { + //veejay_set_sample(v,v->uc->sample_id); + // + int nf = sample_get_startFrame( v->uc->sample_id ); + veejay_set_frame(v,nf ); + } + v->uc->chain_changed = 1; + } + } + if(STREAM_PLAYING(v)) + { + int c = vj_tag_get_selected_entry(v->uc->sample_id); + if ( vj_tag_set_effect( v->uc->sample_id, c, vj_effect_get_real_id( v->uc->key_effect) )) + { + int real_id = vj_effect_get_real_id(v->uc->key_effect); + veejay_msg(VEEJAY_MSG_INFO,"Added Effect %s on chain entry %d", + vj_effect_get_description(real_id), + c + ); +// if(v->no_bezerk && vj_effect_get_extra_frame(real_id)) veejay_set_sample(v,v->uc->sample_id); + v->uc->chain_changed = 1; + } + } } @@ -7740,1566 +7742,1566 @@ void vj_event_misc_stop_rec(void *ptr, const char format[], va_list ap) void vj_event_select_id(void *ptr, const char format[], va_list ap) { - veejay_t *v= (veejay_t*)ptr; - int args[2]; - char *str = NULL; - P_A(args,str, format, ap); - if(!STREAM_PLAYING(v)) - { - int sample_id = (v->uc->sample_key*12)-12 + args[0]; - if(sample_exists(sample_id)) - { - veejay_change_playback_mode( v, VJ_PLAYBACK_MODE_SAMPLE, sample_id); - vj_event_print_sample_info(v,sample_id); - } - else - { - veejay_msg(VEEJAY_MSG_ERROR,"Selected sample %d does not exist",sample_id); - } - } - else - { - int sample_id = (v->uc->sample_key*12)-12 + args[0]; - if(vj_tag_exists(sample_id )) - { - veejay_change_playback_mode(v, VJ_PLAYBACK_MODE_TAG ,sample_id); + veejay_t *v= (veejay_t*)ptr; + int args[2]; + char *str = NULL; + P_A(args,str, format, ap); + if(!STREAM_PLAYING(v)) + { + int sample_id = (v->uc->sample_key*12)-12 + args[0]; + if(sample_exists(sample_id)) + { + veejay_change_playback_mode( v, VJ_PLAYBACK_MODE_SAMPLE, sample_id); + vj_event_print_sample_info(v,sample_id); + } + else + { + veejay_msg(VEEJAY_MSG_ERROR,"Selected sample %d does not exist",sample_id); + } + } + else + { + int sample_id = (v->uc->sample_key*12)-12 + args[0]; + if(vj_tag_exists(sample_id )) + { + veejay_change_playback_mode(v, VJ_PLAYBACK_MODE_TAG ,sample_id); - } - else - { - veejay_msg(VEEJAY_MSG_INFO,"Selected stream %d does not exist",sample_id); - } - } + } + else + { + veejay_msg(VEEJAY_MSG_INFO,"Selected stream %d does not exist",sample_id); + } + } } -void vj_event_select_macro( void *ptr, const char format[], va_list ap ) +void vj_event_select_macro( void *ptr, const char format[], va_list ap ) { - int args[2]; - char *str = NULL; - P_A( args, str, format, ap ); - macro_select( args[0] ); - veejay_msg(VEEJAY_MSG_INFO, "Changed VIMS macro slot to %d", current_macro_ ); + int args[2]; + char *str = NULL; + P_A( args, str, format, ap ); + macro_select( args[0] ); + veejay_msg(VEEJAY_MSG_INFO, "Changed VIMS macro slot to %d", current_macro_ ); } void vj_event_select_bank(void *ptr, const char format[], va_list ap) { - veejay_t *v =(veejay_t*) ptr; - int args[1]; + veejay_t *v =(veejay_t*) ptr; + int args[1]; - char *str = NULL; P_A(args,str,format,ap); - if(args[0] >= 1 && args[0] <= 9) - { - veejay_msg(VEEJAY_MSG_INFO,"Selected bank %d (active sample range is now %d-%d)",args[0], - (12 * args[0]) - 12 , (12 * args[0])); - v->uc->sample_key = args[0]; - } + char *str = NULL; P_A(args,str,format,ap); + if(args[0] >= 1 && args[0] <= 9) + { + veejay_msg(VEEJAY_MSG_INFO,"Selected bank %d (active sample range is now %d-%d)",args[0], + (12 * args[0]) - 12 , (12 * args[0])); + v->uc->sample_key = args[0]; + } } void vj_event_print_tag_info(veejay_t *v, int id) { - int i, y, j, value; - char description[100]; - char source[150]; - char title[150]; - vj_tag_get_descriptive(id,description); - vj_tag_get_description(id, title); - vj_tag_get_source_name(id, source); + int i, y, j, value; + char description[100]; + char source[150]; + char title[150]; + vj_tag_get_descriptive(id,description); + vj_tag_get_description(id, title); + vj_tag_get_source_name(id, source); - if(v->settings->tag_record) - veejay_msg(VEEJAY_MSG_INFO, "Stream '%s' [%d]/[%d] [%s] %s recorded: %06ld frames ", - title,id,vj_tag_size(),description, - (vj_tag_get_active(id) ? "is active" : "is not active"), - vj_tag_get_encoded_frames(id)); - else - veejay_msg(VEEJAY_MSG_INFO, - "Stream [%d]/[%d] [%s] %s ", - id, vj_tag_size(), description, - (vj_tag_get_active(id) == 1 ? "is active" : "is not active")); + if(v->settings->tag_record) + veejay_msg(VEEJAY_MSG_INFO, "Stream '%s' [%d]/[%d] [%s] %s recorded: %06ld frames ", + title,id,vj_tag_size(),description, + (vj_tag_get_active(id) ? "is active" : "is not active"), + vj_tag_get_encoded_frames(id)); + else + veejay_msg(VEEJAY_MSG_INFO, + "Stream [%d]/[%d] [%s] %s ", + id, vj_tag_size(), description, + (vj_tag_get_active(id) == 1 ? "is active" : "is not active")); - for (i = 0; i < SAMPLE_MAX_EFFECTS; i++) - { - y = vj_tag_get_effect_any(id, i); - if (y != -1) - { - veejay_msg(VEEJAY_MSG_INFO, "%02d [%d] [%s] %s (%s)", - i, - y, - vj_tag_get_chain_status(id,i) ? "on" : "off", vj_effect_get_description(y), - (vj_effect_get_subformat(y) == 1 ? "2x2" : "1x1") - ); + for (i = 0; i < SAMPLE_MAX_EFFECTS; i++) + { + y = vj_tag_get_effect_any(id, i); + if (y != -1) + { + veejay_msg(VEEJAY_MSG_INFO, "%02d [%d] [%s] %s (%s)", + i, + y, + vj_tag_get_chain_status(id,i) ? "on" : "off", vj_effect_get_description(y), + (vj_effect_get_subformat(y) == 1 ? "2x2" : "1x1") + ); - char tmp[256] = {0}; - for (j = 0; j < vj_effect_get_num_params(y); j++) - { - char small[32]; - value = vj_tag_get_effect_arg(id, i, j); - snprintf( small,sizeof(small), "P%d = %d ",j,value ); - strcat( tmp, small ); - } + char tmp[256] = {0}; + for (j = 0; j < vj_effect_get_num_params(y); j++) + { + char small[32]; + value = vj_tag_get_effect_arg(id, i, j); + snprintf( small,sizeof(small), "P%d = %d ",j,value ); + strcat( tmp, small ); + } - if (vj_effect_get_extra_frame(y) == 1) - { - int source_type = vj_tag_get_chain_source(id, i); - veejay_msg(VEEJAY_MSG_INFO, "Mixing with %s %d",(source_type == VJ_TAG_TYPE_NONE ? "Sample" : "Stream"),vj_tag_get_chain_channel(id,i)); - } - } - } + if (vj_effect_get_extra_frame(y) == 1) + { + int source_type = vj_tag_get_chain_source(id, i); + veejay_msg(VEEJAY_MSG_INFO, "Mixing with %s %d",(source_type == VJ_TAG_TYPE_NONE ? "Sample" : "Stream"),vj_tag_get_chain_channel(id,i)); + } + } + } } void vj_event_create_effect_bundle(veejay_t * v, char *buf, int key_id, int key_mod ) { - char prefix[20]; - int i ,y,j; - int num_cmd = 0; - int id = v->uc->sample_id; - int event_id = 0; - int bunlen=0; + char prefix[20]; + int i ,y,j; + int num_cmd = 0; + int id = v->uc->sample_id; + int event_id = 0; + int bunlen=0; - if(!SAMPLE_PLAYING(v) && !STREAM_PLAYING(v)) - { - veejay_msg(VEEJAY_MSG_ERROR, "Cannot take snapshot of Effect Chain"); - return; - } + if(!SAMPLE_PLAYING(v) && !STREAM_PLAYING(v)) + { + veejay_msg(VEEJAY_MSG_ERROR, "Cannot take snapshot of Effect Chain"); + return; + } - char *blob = get_print_buf( 50 * SAMPLE_MAX_EFFECTS ); - if(!blob) { - return; - } + char *blob = get_print_buf( 50 * SAMPLE_MAX_EFFECTS ); + if(!blob) { + return; + } - for (i = 0; i < SAMPLE_MAX_EFFECTS; i++) - { - y = (SAMPLE_PLAYING(v) ? sample_get_effect_any(id, i) : vj_tag_get_effect_any(id,i) ); - if (y != -1) - { - num_cmd++; - } - } - if(num_cmd < 0) - { - veejay_msg(VEEJAY_MSG_ERROR, "Effect Chain is empty." ); - free(blob); - return; - } + for (i = 0; i < SAMPLE_MAX_EFFECTS; i++) + { + y = (SAMPLE_PLAYING(v) ? sample_get_effect_any(id, i) : vj_tag_get_effect_any(id,i) ); + if (y != -1) + { + num_cmd++; + } + } + if(num_cmd < 0) + { + veejay_msg(VEEJAY_MSG_ERROR, "Effect Chain is empty." ); + free(blob); + return; + } - for (i=0; i < SAMPLE_MAX_EFFECTS; i++) - { - y = (SAMPLE_PLAYING(v) ? sample_get_effect_any(id, i) : vj_tag_get_effect_any(id,i) ); - if( y != -1) - { - //int entry = i; - int effect_id = y; - if(effect_id != -1) - { - char bundle[512]; - int np = vj_effect_get_num_params(y); - sprintf(bundle, "%03d:0 %d %d 1", VIMS_CHAIN_ENTRY_SET_PRESET,i, effect_id ); - for (j = 0; j < np; j++) - { - char svalue[32]; - int value = (SAMPLE_PLAYING(v) ? sample_get_effect_arg(id, i, j) : vj_tag_get_effect_arg(id,i,j)); - if(value != -1) - { - if(j == (np-1)) - sprintf(svalue, " %d;", value); - else - sprintf(svalue, " %d", value); - veejay_strncat( bundle, svalue, strlen(svalue)); - } - } - int blen = strlen(bundle); - veejay_strncpy( blob+bunlen, bundle,blen); - bunlen += blen; - } - } - } - sprintf(prefix, "BUN:%03d{", num_cmd); - sprintf(buf, "%s%s}",prefix,blob); - event_id = vj_event_suggest_bundle_id(); + for (i=0; i < SAMPLE_MAX_EFFECTS; i++) + { + y = (SAMPLE_PLAYING(v) ? sample_get_effect_any(id, i) : vj_tag_get_effect_any(id,i) ); + if( y != -1) + { + //int entry = i; + int effect_id = y; + if(effect_id != -1) + { + char bundle[512]; + int np = vj_effect_get_num_params(y); + sprintf(bundle, "%03d:0 %d %d 1", VIMS_CHAIN_ENTRY_SET_PRESET,i, effect_id ); + for (j = 0; j < np; j++) + { + char svalue[32]; + int value = (SAMPLE_PLAYING(v) ? sample_get_effect_arg(id, i, j) : vj_tag_get_effect_arg(id,i,j)); + if(value != -1) + { + if(j == (np-1)) + sprintf(svalue, " %d;", value); + else + sprintf(svalue, " %d", value); + veejay_strncat( bundle, svalue, strlen(svalue)); + } + } + int blen = strlen(bundle); + veejay_strncpy( blob+bunlen, bundle,blen); + bunlen += blen; + } + } + } + sprintf(prefix, "BUN:%03d{", num_cmd); + sprintf(buf, "%s%s}",prefix,blob); + event_id = vj_event_suggest_bundle_id(); - if(event_id <= 0 ) - { - veejay_msg(VEEJAY_MSG_ERROR, "Cannot add more bundles"); - } - else { - vj_msg_bundle *m = vj_event_bundle_new( buf, event_id); - if(!m) - { - veejay_msg(VEEJAY_MSG_ERROR, "Unable to create new Bundle"); - } - else { - if(!vj_event_bundle_store(m)) - veejay_msg(VEEJAY_MSG_ERROR, "Error storing Bundle %d", event_id); - } - } + if(event_id <= 0 ) + { + veejay_msg(VEEJAY_MSG_ERROR, "Cannot add more bundles"); + } + else { + vj_msg_bundle *m = vj_event_bundle_new( buf, event_id); + if(!m) + { + veejay_msg(VEEJAY_MSG_ERROR, "Unable to create new Bundle"); + } + else { + if(!vj_event_bundle_store(m)) + veejay_msg(VEEJAY_MSG_ERROR, "Error storing Bundle %d", event_id); + } + } - free(blob); + free(blob); } void vj_event_print_sample_info(veejay_t *v, int id) { - video_playback_setup *s = v->settings; - int y, i, j; - long value; - char timecode[15]; - char curtime[15]; - char sampletitle[200]; - MPEG_timecode_t tc; - y4m_ratio_t ratio = mpeg_conform_framerate( (double)v->current_edit_list->video_fps ); - long start = sample_get_startFrame( id ); - long end = sample_get_endFrame( id ); - long speed = sample_get_speed(id); - long len = end - start; + video_playback_setup *s = v->settings; + int y, i, j; + long value; + char timecode[15]; + char curtime[15]; + char sampletitle[200]; + MPEG_timecode_t tc; + y4m_ratio_t ratio = mpeg_conform_framerate( (double)v->current_edit_list->video_fps ); + long start = sample_get_startFrame( id ); + long end = sample_get_endFrame( id ); + long speed = sample_get_speed(id); + long len = end - start; - veejay_memset( &tc,0,sizeof(MPEG_timecode_t)); - mpeg_timecode(&tc, len, mpeg_framerate_code( ratio ),v->current_edit_list->video_fps); - sprintf(timecode, "%2d:%2.2d:%2.2d:%2.2d", tc.h, tc.m, tc.s, tc.f); + veejay_memset( &tc,0,sizeof(MPEG_timecode_t)); + mpeg_timecode(&tc, len, mpeg_framerate_code( ratio ),v->current_edit_list->video_fps); + sprintf(timecode, "%2d:%2.2d:%2.2d:%2.2d", tc.h, tc.m, tc.s, tc.f); - mpeg_timecode(&tc, s->current_frame_num, mpeg_framerate_code(ratio),v->current_edit_list->video_fps); - sprintf(curtime, "%2d:%2.2d:%2.2d:%2.2d", tc.h, tc.m, tc.s, tc.f); - sample_get_description( id, sampletitle ); + mpeg_timecode(&tc, s->current_frame_num, mpeg_framerate_code(ratio),v->current_edit_list->video_fps); + sprintf(curtime, "%2d:%2.2d:%2.2d:%2.2d", tc.h, tc.m, tc.s, tc.f); + sample_get_description( id, sampletitle ); - veejay_msg(VEEJAY_MSG_INFO, - "Sample %s [%4d]/[%4d]\t[duration: %s | %8ld] @%8ld %s", - sampletitle,id,sample_size(),timecode,len, (long)v->settings->current_frame_num, - curtime); - - if(sample_encoder_active(v->uc->sample_id)) - { - veejay_msg(VEEJAY_MSG_INFO, "REC %09d\t[timecode: %s | %8ld ]", - sample_get_frames_left(v->uc->sample_id), - curtime,(long)v->settings->current_frame_num); + veejay_msg(VEEJAY_MSG_INFO, + "Sample %s [%4d]/[%4d]\t[duration: %s | %8ld] @%8ld %s", + sampletitle,id,sample_size(),timecode,len, (long)v->settings->current_frame_num, + curtime); + + if(sample_encoder_active(v->uc->sample_id)) + { + veejay_msg(VEEJAY_MSG_INFO, "REC %09d\t[timecode: %s | %8ld ]", + sample_get_frames_left(v->uc->sample_id), + curtime,(long)v->settings->current_frame_num); - } - - veejay_msg(VEEJAY_MSG_INFO, - "[%09ld] - [%09ld] @ %4.2f [speed %d] [%s looping]", - start,end, (float)speed * v->current_edit_list->video_fps,speed, - (sample_get_looptype(id) == - 2 ? "pingpong" : (sample_get_looptype(id)==1 ? "normal" : (sample_get_looptype(id)==3 ? "random" : "none")) ) + } + + veejay_msg(VEEJAY_MSG_INFO, + "[%09ld] - [%09ld] @ %4.2f [speed %d] [%s looping]", + start,end, (float)speed * v->current_edit_list->video_fps,speed, + (sample_get_looptype(id) == + 2 ? "pingpong" : (sample_get_looptype(id)==1 ? "normal" : (sample_get_looptype(id)==3 ? "random" : "none")) ) - ); + ); for (i = 0; i < SAMPLE_MAX_EFFECTS; i++) - { - y = sample_get_effect_any(id, i); - if (y != -1) - { - - char tmp[256] = { 0 }; - for (j = 0; j < vj_effect_get_num_params(y); j++) - { - char small[32]; - value = sample_get_effect_arg(id, i, j); - - snprintf(small, sizeof(small), "P%d = %ld ",j, value ); - strcat( tmp, small ); - } + { + y = sample_get_effect_any(id, i); + if (y != -1) + { + + char tmp[256] = { 0 }; + for (j = 0; j < vj_effect_get_num_params(y); j++) + { + char small[32]; + value = sample_get_effect_arg(id, i, j); + + snprintf(small, sizeof(small), "P%d = %ld ",j, value ); + strcat( tmp, small ); + } - veejay_msg(VEEJAY_MSG_INFO, "%02d | %03d | %s |%s %s {%s}", - i, - y, - sample_get_chain_status(id,i) ? "on " : "off", vj_effect_get_description(y), - (vj_effect_get_subformat(y) == 1 ? "2x2" : "1x1"), - tmp - ); + veejay_msg(VEEJAY_MSG_INFO, "%02d | %03d | %s |%s %s {%s}", + i, + y, + sample_get_chain_status(id,i) ? "on " : "off", vj_effect_get_description(y), + (vj_effect_get_subformat(y) == 1 ? "2x2" : "1x1"), + tmp + ); - if (vj_effect_get_extra_frame(y) == 1) - { - int source = sample_get_chain_source(id, i); - int sample_offset = sample_get_offset(id,i); - int c = sample_get_chain_channel(id,i); - int sample_speed = 0; - if( source == VJ_TAG_TYPE_NONE ) - sample_speed = sample_get_speed(c); - - veejay_msg(VEEJAY_MSG_INFO, "Mixing with %s %d at speed %d, position %d",(source == VJ_TAG_TYPE_NONE ? "sample" : "stream"), - c, - sample_speed, - sample_offset ); - } - } - } + if (vj_effect_get_extra_frame(y) == 1) + { + int source = sample_get_chain_source(id, i); + int sample_offset = sample_get_offset(id,i); + int c = sample_get_chain_channel(id,i); + int sample_speed = 0; + if( source == VJ_TAG_TYPE_NONE ) + sample_speed = sample_get_speed(c); + + veejay_msg(VEEJAY_MSG_INFO, "Mixing with %s %d at speed %d, position %d",(source == VJ_TAG_TYPE_NONE ? "sample" : "stream"), + c, + sample_speed, + sample_offset ); + } + } + } - if( sample_get_editlist(id) == v->current_edit_list ) { - veejay_msg(VEEJAY_MSG_DEBUG, "Sample is using EDL from plain video"); - } else { - veejay_msg(VEEJAY_MSG_DEBUG, "Sample is using its own EDL"); - } + if( sample_get_editlist(id) == v->current_edit_list ) { + veejay_msg(VEEJAY_MSG_DEBUG, "Sample is using EDL from plain video"); + } else { + veejay_msg(VEEJAY_MSG_DEBUG, "Sample is using its own EDL"); + } } void vj_event_print_plain_info(void *ptr, int x) { - veejay_t *v = (veejay_t*) ptr; - if( PLAIN_PLAYING(v)) vj_el_print( v->edit_list ); + veejay_t *v = (veejay_t*) ptr; + if( PLAIN_PLAYING(v)) vj_el_print( v->edit_list ); } void vj_event_print_info(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*)ptr; - int args[1]; - char *str = NULL; P_A(args,str,format,ap); - if(args[0]==0) - { - args[0] = v->uc->sample_id; - } + veejay_t *v = (veejay_t*)ptr; + int args[1]; + char *str = NULL; P_A(args,str,format,ap); + if(args[0]==0) + { + args[0] = v->uc->sample_id; + } - veejay_msg(VEEJAY_MSG_INFO, "%d / %d Mb used in cache", - get_total_mem(), - vj_el_cache_size() ); + veejay_msg(VEEJAY_MSG_INFO, "%d / %d Mb used in cache", + get_total_mem(), + vj_el_cache_size() ); - vj_event_print_plain_info(v,args[0]); + vj_event_print_plain_info(v,args[0]); - if( SAMPLE_PLAYING(v) && sample_exists(args[0]) ) - { - vj_event_print_sample_info( v, args[0] ); - } - if( STREAM_PLAYING(v) && vj_tag_exists(args[0]) ) - { - vj_event_print_tag_info(v, args[0]) ; - } + if( SAMPLE_PLAYING(v) && sample_exists(args[0]) ) + { + vj_event_print_sample_info( v, args[0] ); + } + if( STREAM_PLAYING(v) && vj_tag_exists(args[0]) ) + { + vj_event_print_tag_info(v, args[0]) ; + } } -void vj_event_send_track_list ( void *ptr, const char format[], va_list ap ) +void vj_event_send_track_list ( void *ptr, const char format[], va_list ap ) { - veejay_t *v = (veejay_t*)ptr; - char *s_print_buf = get_print_buf(0); - sprintf(s_print_buf, "%05d",0); - int n = vj_tag_highest(); - if (n >= 1 ) - { - char *print_buf = get_print_buf(SEND_BUF); - int i; - for(i=0; i <= n; i++) - { - if(vj_tag_exists(i) && !vj_tag_is_deleted(i)) - { - vj_tag *tag = vj_tag_get(i); - if(tag->source_type == VJ_TAG_TYPE_NET ) - { - char cmd[275]; - char space[275]; - snprintf(space,sizeof(space)-1,"%s %d", tag->descr, tag->id ); - snprintf(cmd,sizeof(cmd)-1,"%03zu%s",strlen(space),space); - APPEND_MSG(print_buf,cmd); - } - } - } - sprintf(s_print_buf, "%05zu%s",strlen(print_buf),print_buf); - free(print_buf); - } + veejay_t *v = (veejay_t*)ptr; + char *s_print_buf = get_print_buf(0); + sprintf(s_print_buf, "%05d",0); + int n = vj_tag_highest(); + if (n >= 1 ) + { + char *print_buf = get_print_buf(SEND_BUF); + int i; + for(i=0; i <= n; i++) + { + if(vj_tag_exists(i) && !vj_tag_is_deleted(i)) + { + vj_tag *tag = vj_tag_get(i); + if(tag->source_type == VJ_TAG_TYPE_NET ) + { + char cmd[275]; + char space[275]; + snprintf(space,sizeof(space)-1,"%s %d", tag->descr, tag->id ); + snprintf(cmd,sizeof(cmd)-1,"%03zu%s",strlen(space),space); + APPEND_MSG(print_buf,cmd); + } + } + } + sprintf(s_print_buf, "%05zu%s",strlen(print_buf),print_buf); + free(print_buf); + } - SEND_MSG(v,s_print_buf); - free(s_print_buf); + SEND_MSG(v,s_print_buf); + free(s_print_buf); } -void vj_event_send_tag_list ( void *ptr, const char format[], va_list ap ) +void vj_event_send_tag_list ( void *ptr, const char format[], va_list ap ) { - int args[1]; - - veejay_t *v = (veejay_t*)ptr; - char *str = NULL; - P_A(args,str,format,ap); - int i,n; - char *s_print_buf = get_print_buf(0); - sprintf(s_print_buf, "%05d",0); - int start_from_tag = 1; - if(args[0]>0) - start_from_tag = args[0]; + int args[1]; + + veejay_t *v = (veejay_t*)ptr; + char *str = NULL; + P_A(args,str,format,ap); + int i,n; + char *s_print_buf = get_print_buf(0); + sprintf(s_print_buf, "%05d",0); + int start_from_tag = 1; + if(args[0]>0) + start_from_tag = args[0]; - n = vj_tag_highest(); - if (n >= 1 ) - { - char line[300]; - char *print_buf = get_print_buf(SEND_BUF); + n = vj_tag_highest(); + if (n >= 1 ) + { + char line[300]; + char *print_buf = get_print_buf(SEND_BUF); - for(i=start_from_tag; i <= n; i++) - { - if(vj_tag_exists(i) &&!vj_tag_is_deleted(i)) - { - vj_tag *tag = vj_tag_get(i); - char source_name[255]; - char cmd[300]; - vj_tag_get_source_name( i, source_name ); - snprintf(line,sizeof(line),"%05d%02d%03d%03d%03d%03d%03zu%s", - i, - vj_tag_get_type(i), - tag->color_r, - tag->color_g, - tag->color_b, - tag->opacity, - strlen(source_name), - source_name - ); - snprintf(cmd,sizeof(cmd), "%03zu%s",strlen(line),line); - APPEND_MSG(print_buf,cmd); - } - } - sprintf(s_print_buf, "%05zu%s",strlen(print_buf),print_buf); - free(print_buf); - } + for(i=start_from_tag; i <= n; i++) + { + if(vj_tag_exists(i) &&!vj_tag_is_deleted(i)) + { + vj_tag *tag = vj_tag_get(i); + char source_name[255]; + char cmd[300]; + vj_tag_get_source_name( i, source_name ); + snprintf(line,sizeof(line),"%05d%02d%03d%03d%03d%03d%03zu%s", + i, + vj_tag_get_type(i), + tag->color_r, + tag->color_g, + tag->color_b, + tag->opacity, + strlen(source_name), + source_name + ); + snprintf(cmd,sizeof(cmd), "%03zu%s",strlen(line),line); + APPEND_MSG(print_buf,cmd); + } + } + sprintf(s_print_buf, "%05zu%s",strlen(print_buf),print_buf); + free(print_buf); + } - SEND_MSG(v,s_print_buf); - free(s_print_buf); + SEND_MSG(v,s_print_buf); + free(s_print_buf); } -static char *_vj_event_gatter_sample_info( veejay_t *v, int id ) +static char *_vj_event_gatter_sample_info( veejay_t *v, int id ) { - char description[SAMPLE_MAX_DESCR_LEN]; - int end_frame = sample_get_endFrame( id ); - int start_frame = sample_get_startFrame( id ); - char timecode[20]; - MPEG_timecode_t tc; - y4m_ratio_t ratio = mpeg_conform_framerate( (double) v->current_edit_list->video_fps ); - mpeg_timecode( &tc, (end_frame - start_frame + 1),mpeg_framerate_code(ratio),v->current_edit_list->video_fps ); + char description[SAMPLE_MAX_DESCR_LEN]; + int end_frame = sample_get_endFrame( id ); + int start_frame = sample_get_startFrame( id ); + char timecode[20]; + MPEG_timecode_t tc; + y4m_ratio_t ratio = mpeg_conform_framerate( (double) v->current_edit_list->video_fps ); + mpeg_timecode( &tc, (end_frame - start_frame + 1),mpeg_framerate_code(ratio),v->current_edit_list->video_fps ); - sprintf( timecode, "%2d:%2.2d:%2.2d:%2.2d", tc.h,tc.m,tc.s,tc.f ); - sample_get_description( id, description ); + sprintf( timecode, "%2d:%2.2d:%2.2d:%2.2d", tc.h,tc.m,tc.s,tc.f ); + sample_get_description( id, description ); - int dlen = strlen(description); - int tlen = strlen(timecode); - char *s_print_buf = get_print_buf(512); - snprintf( s_print_buf, 512, - "%08d%03d%s%03d%s%02d%04d", - ( 3 + dlen + 3+ tlen + 2 + 4), - dlen, - description, - tlen, - timecode, - 0, - id - ); - return s_print_buf; + int dlen = strlen(description); + int tlen = strlen(timecode); + char *s_print_buf = get_print_buf(512); + snprintf( s_print_buf, 512, + "%08d%03d%s%03d%s%02d%04d", + ( 3 + dlen + 3+ tlen + 2 + 4), + dlen, + description, + tlen, + timecode, + 0, + id + ); + return s_print_buf; } -static char * _vj_event_gatter_stream_info( veejay_t *v, int id ) +static char * _vj_event_gatter_stream_info( veejay_t *v, int id ) { - char description[SAMPLE_MAX_DESCR_LEN]; - char source[255]; - int stream_type = vj_tag_get_type( id ); - vj_tag_get_source_name( id, source ); - vj_tag_get_description( id, description ); - - int dlen = strlen( description ); - int tlen = strlen( source ); - char *s_print_buf = get_print_buf( 512 ); - snprintf( s_print_buf,512, - "%08d%03d%s%03d%s%02d%02d", - ( 3 + dlen + 3 + tlen + 2 + 2), - dlen, - description, - tlen, - source, - stream_type, - id - ); - return s_print_buf; + char description[SAMPLE_MAX_DESCR_LEN]; + char source[255]; + int stream_type = vj_tag_get_type( id ); + vj_tag_get_source_name( id, source ); + vj_tag_get_description( id, description ); + + int dlen = strlen( description ); + int tlen = strlen( source ); + char *s_print_buf = get_print_buf( 512 ); + snprintf( s_print_buf,512, + "%08d%03d%s%03d%s%02d%02d", + ( 3 + dlen + 3 + tlen + 2 + 2), + dlen, + description, + tlen, + source, + stream_type, + id + ); + return s_print_buf; } -void vj_event_send_sample_info ( void *ptr, const char format[], va_list ap ) +void vj_event_send_sample_info ( void *ptr, const char format[], va_list ap ) { - veejay_t *v = (veejay_t*)ptr; - int args[2]; - int failed = 1; - char *str = NULL; - P_A(args,str,format,ap); + veejay_t *v = (veejay_t*)ptr; + int args[2]; + int failed = 1; + char *str = NULL; + P_A(args,str,format,ap); - char *s_print_buf = NULL; + char *s_print_buf = NULL; - switch( args[1] ) - { - case 0: - SAMPLE_DEFAULTS(args[0]); + switch( args[1] ) + { + case 0: + SAMPLE_DEFAULTS(args[0]); - if(sample_exists(args[0])) - { - s_print_buf = _vj_event_gatter_sample_info(v,args[0]); - failed = 0; - } - break; - case 1: - STREAM_DEFAULTS(args[0]); + if(sample_exists(args[0])) + { + s_print_buf = _vj_event_gatter_sample_info(v,args[0]); + failed = 0; + } + break; + case 1: + STREAM_DEFAULTS(args[0]); - if(vj_tag_exists(args[0])) - { - s_print_buf = _vj_event_gatter_stream_info(v,args[0]); - failed = 0; - } - break; - default: - break; - } - - if(failed) { - s_print_buf = get_print_buf( 8 ); - snprintf( s_print_buf,8, "%08d", 0 ); - } - SEND_MSG(v , s_print_buf ); - free(s_print_buf); + if(vj_tag_exists(args[0])) + { + s_print_buf = _vj_event_gatter_stream_info(v,args[0]); + failed = 0; + } + break; + default: + break; + } + + if(failed) { + s_print_buf = get_print_buf( 9 ); + snprintf( s_print_buf,9, "%08d", 0 ); + } + SEND_MSG(v , s_print_buf ); + free(s_print_buf); } -void vj_event_get_image_part ( void *ptr, const char format[], va_list ap ) +void vj_event_get_image_part ( void *ptr, const char format[], va_list ap ) { - veejay_t *v = (veejay_t*)ptr; - int args[5]; - char *str = NULL; - P_A(args,str,format,ap); + veejay_t *v = (veejay_t*)ptr; + int args[5]; + char *str = NULL; + P_A(args,str,format,ap); - int w=0,h=0,x=0,y=0; - int y_only = 0; - x = args[0]; - y = args[1]; - w = args[2]; - h = args[3]; - y_only = args[4]; + int w=0,h=0,x=0,y=0; + int y_only = 0; + x = args[0]; + y = args[1]; + w = args[2]; + h = args[3]; + y_only = args[4]; - if( y_only < 0 || y_only > 1 ) { - veejay_msg(0,"Please specify 0 for full chroma, 1 for luminance only (greyscale)"); - SEND_MSG(v, "00000000" ); - return; - } + if( y_only < 0 || y_only > 1 ) { + veejay_msg(0,"Please specify 0 for full chroma, 1 for luminance only (greyscale)"); + SEND_MSG(v, "00000000" ); + return; + } - if( x < 0 || x > v->video_output_width || y < 0 || y > v->video_output_height || - w < 0 || w > (v->video_output_width - x) || - h < 0 || h > (v->video_output_height -y) ) - { - veejay_msg(0, "Invalid image region, use [start x, start y, box width, box height]"); - SEND_MSG(v, "00000000" ); - return; - } + if( x < 0 || x > v->video_output_width || y < 0 || y > v->video_output_height || + w < 0 || w > (v->video_output_width - x) || + h < 0 || h > (v->video_output_height -y) ) + { + veejay_msg(0, "Invalid image region, use [start x, start y, box width, box height]"); + SEND_MSG(v, "00000000" ); + return; + } - VJFrame frame; - veejay_memcpy(&frame, v->effect_frame1, sizeof(VJFrame)); - vj_perform_get_primary_frame( v, frame.data ); + VJFrame frame; + veejay_memcpy(&frame, v->effect_frame1, sizeof(VJFrame)); + vj_perform_get_primary_frame( v, frame.data ); - int ux = x; - int uy = y; + int ux = x; + int uy = y; - int uw = w >> v->effect_frame1->shift_h; - int uh = h >> v->effect_frame1->shift_v; + int uw = w >> v->effect_frame1->shift_h; + int uh = h >> v->effect_frame1->shift_v; - ux = ux >> v->effect_frame1->shift_h; - uy = uy >> v->effect_frame1->shift_v; + ux = ux >> v->effect_frame1->shift_h; + uy = uy >> v->effect_frame1->shift_v; - int result = composite_get_original_frame( v->composite, frame.data, - frame.data, - v->settings->composite, - y, - h ); + int result = composite_get_original_frame( v->composite, frame.data, + frame.data, + v->settings->composite, + y, + h ); - if( result == -1 ) { - composite_get_top( v->composite,frame.data, frame.data, v->settings->composite ); - } + if( result == -1 ) { + composite_get_top( v->composite,frame.data, frame.data, v->settings->composite ); + } - int len = (w * h); - if( y_only == 0 ) { - len += (uw * uh); - len += (uw * uh); - } + int len = (w * h); + if( y_only == 0 ) { + len += (uw * uh); + len += (uw * uh); + } - uint8_t *tmp = (uint8_t*) vj_malloc (sizeof(uint8_t) * len); - - if(!tmp) { - veejay_msg(0, "Memory allocation error"); - SEND_MSG(v, "00000000" ); - return; - } + uint8_t *tmp = (uint8_t*) vj_malloc (sizeof(uint8_t) * len); + + if(!tmp) { + veejay_msg(0, "Memory allocation error"); + SEND_MSG(v, "00000000" ); + return; + } - uint8_t *start_addr = tmp; - unsigned int i,j; + uint8_t *start_addr = tmp; + unsigned int i,j; - int nobackplane = 0; - if( result == -1 ) - nobackplane = 1; + int nobackplane = 0; + if( result == -1 ) + nobackplane = 1; - int bh = ( h - y ); //@ composite copies from row start to row end in new buffer - if( nobackplane ) - bh = h + y; //@ but if composite has no mirror plane, fetch the pixels directly from final frame + int bh = ( h - y ); //@ composite copies from row start to row end in new buffer + if( nobackplane ) + bh = h + y; //@ but if composite has no mirror plane, fetch the pixels directly from final frame - int bw = w + x; //@ width is unchanged (composite copies image rows) + int bw = w + x; //@ width is unchanged (composite copies image rows) - for( i = (nobackplane ? y : 0); i < bh; i ++ ) { - for( j = x; j < bw; j ++ ) { - *(tmp++) = frame.data[0][i * frame.width + j]; - } - } + for( i = (nobackplane ? y : 0); i < bh; i ++ ) { + for( j = x; j < bw; j ++ ) { + *(tmp++) = frame.data[0][i * frame.width + j]; + } + } - if( y_only == 0 ) { - int ubh = (uh - uy); - if( nobackplane ) - ubh = uh + uy; + if( y_only == 0 ) { + int ubh = (uh - uy); + if( nobackplane ) + ubh = uh + uy; - int ubw = uw + ux; + int ubw = uw + ux; - for( i = (nobackplane ? uy : 0); i < ubh; i ++ ) { - for( j = ux; j < ubw; j ++ ) { - *(tmp++) = frame.data[1][i * frame.uv_width + j]; - } - } + for( i = (nobackplane ? uy : 0); i < ubh; i ++ ) { + for( j = ux; j < ubw; j ++ ) { + *(tmp++) = frame.data[1][i * frame.uv_width + j]; + } + } - for( i = (nobackplane ? uy : 0); i < ubh; i ++ ) { - for( j = ux; j < ubw; j ++ ) { - *(tmp++) = frame.data[2][i * frame.uv_height + j]; - } - } - } + for( i = (nobackplane ? uy : 0); i < ubh; i ++ ) { + for( j = ux; j < ubw; j ++ ) { + *(tmp++) = frame.data[2][i * frame.uv_height + j]; + } + } + } - char header[8]; - sprintf( header, "%08d",len ); - SEND_DATA(v, header, 8 ); - SEND_DATA(v, start_addr, len ); - free(start_addr); + char header[9]; + snprintf( header, sizeof(header), "%08d",len ); + SEND_DATA(v, header, 8 ); + SEND_DATA(v, start_addr, len ); + free(start_addr); } -void vj_event_get_scaled_image ( void *ptr, const char format[], va_list ap ) +void vj_event_get_scaled_image ( void *ptr, const char format[], va_list ap ) { - veejay_t *v = (veejay_t*)ptr; - int args[2]; - char *str = NULL; - P_A(args,str,format,ap); + veejay_t *v = (veejay_t*)ptr; + int args[2]; + char *str = NULL; + P_A(args,str,format,ap); - int w=0,h=0; - int max_w = vj_perform_preview_max_width(); - int max_h = vj_perform_preview_max_height(); - - w = args[0]; - h = args[1]; + int w=0,h=0; + int max_w = vj_perform_preview_max_width(); + int max_h = vj_perform_preview_max_height(); + + w = args[0]; + h = args[1]; - if( w <= 0 || h <= 0 || w >= max_w || h >= max_h ) - { - veejay_msg(0, "Invalid image dimension %dx%d requested (max is %dx%d)",w,h,max_w,max_h ); - SEND_MSG(v, "0000000" ); - return; - } + if( w <= 0 || h <= 0 || w >= max_w || h >= max_h ) + { + veejay_msg(0, "Invalid image dimension %dx%d requested (max is %dx%d)",w,h,max_w,max_h ); + SEND_MSG(v, "0000000" ); + return; + } - int dstlen = 0; - VJFrame frame; - veejay_memcpy(&frame, v->effect_frame1, sizeof(VJFrame)); - vj_perform_get_primary_frame( v, frame.data ); - if( use_bw_preview_ ) { - vj_fastbw_picture_save_to_mem( - &frame, - w, - h, - frame.format ); + int dstlen = 0; + VJFrame frame; + veejay_memcpy(&frame, v->effect_frame1, sizeof(VJFrame)); + vj_perform_get_primary_frame( v, frame.data ); + if( use_bw_preview_ ) { + vj_fastbw_picture_save_to_mem( + &frame, + w, + h, + frame.format ); - dstlen = w * h; - } - else { - vj_fast_picture_save_to_mem( - &frame, - w, - h, - frame.format ); - dstlen = (w * h) + ((w*h)/4) + ((w*h)/4); - } + dstlen = w * h; + } + else { + vj_fast_picture_save_to_mem( + &frame, + w, + h, + frame.format ); + dstlen = (w * h) + ((w*h)/4) + ((w*h)/4); + } - char header[8]; - snprintf( header,sizeof(header), "%06d%1d", dstlen, use_bw_preview_ ); - SEND_DATA(v, header, 7 ); - SEND_DATA(v, vj_perform_get_preview_buffer(), dstlen ); + char header[8]; + snprintf( header,sizeof(header), "%06d%1d", dstlen, use_bw_preview_ ); + SEND_DATA(v, header, 7 ); + SEND_DATA(v, vj_perform_get_preview_buffer(), dstlen ); } -void vj_event_get_cali_image ( void *ptr, const char format[], va_list ap ) +void vj_event_get_cali_image ( void *ptr, const char format[], va_list ap ) { - veejay_t *v = (veejay_t*)ptr; - int args[2]; - char *str = NULL; - P_A(args,str,format,ap); + veejay_t *v = (veejay_t*)ptr; + int args[2]; + char *str = NULL; + P_A(args,str,format,ap); - int id = args[0]; - int type = args[1]; - - if( !vj_tag_exists(id) || vj_tag_get_type(id) != VJ_TAG_TYPE_V4L || type < 0 || type > 2) - { - SEND_MSG(v, "000000000" ); - return; - } + int id = args[0]; + int type = args[1]; + + if( !vj_tag_exists(id) || vj_tag_get_type(id) != VJ_TAG_TYPE_V4L || type < 0 || type > 2) + { + SEND_MSG(v, "000000000" ); + return; + } - int total_len = 0; - int uv_len = 0; - int len = 0; + int total_len = 0; + int uv_len = 0; + int len = 0; - uint8_t *buf = vj_tag_get_cali_buffer( id , type, &total_len, &len, &uv_len ); + uint8_t *buf = vj_tag_get_cali_buffer( id , type, &total_len, &len, &uv_len ); - if( buf == NULL ) { - SEND_MSG(v, "00000000" ); - } - else { - char header[64]; - snprintf( header,sizeof(header), "%03d%08d%06d%06d%06d%06d",8+6+6+6+6,len, len, 0, v->video_output_width, v->video_output_height ); - SEND_MSG( v, header ); - int res = vj_server_send(v->vjs[VEEJAY_PORT_CMD], v->uc->current_link, buf,len); - if(!res) { - veejay_msg(0,"Failed to get calibration image"); - } - } + if( buf == NULL ) { + SEND_MSG(v, "00000000" ); + } + else { + char header[64]; + snprintf( header,sizeof(header), "%03d%08d%06d%06d%06d%06d",8+6+6+6+6,len, len, 0, v->video_output_width, v->video_output_height ); + SEND_MSG( v, header ); + int res = vj_server_send(v->vjs[VEEJAY_PORT_CMD], v->uc->current_link, buf,len); + if(!res) { + veejay_msg(0,"Failed to get calibration image"); + } + } } -void vj_event_toggle_bw( void *ptr, const char format[], va_list ap ) +void vj_event_toggle_bw( void *ptr, const char format[], va_list ap ) { - if( use_bw_preview_ ) - use_bw_preview_ = 0; - else - use_bw_preview_ = 1; + if( use_bw_preview_ ) + use_bw_preview_ = 0; + else + use_bw_preview_ = 1; } -void vj_event_send_working_dir(void *ptr, const char format[], va_list ap) +void vj_event_send_working_dir(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*)ptr; - int args[2]; - char str[2048]; - P_A(args,str,format,ap); + veejay_t *v = (veejay_t*)ptr; + int args[2]; + char str[2048]; + P_A(args,str,format,ap); - - filelist_t *list = (filelist_t*)find_media_files(v); - char *s_print_buf = NULL; - - if(!list) { - - s_print_buf = get_print_buf( 9 ); - sprintf(s_print_buf,"%08d",0); + + filelist_t *list = (filelist_t*)find_media_files(v); + char *s_print_buf = NULL; + + if(!list) { + + s_print_buf = get_print_buf( 9 ); + sprintf(s_print_buf,"%08d",0); - }else { + }else { - int len = 0; - int i; - //@ length of file names - for( i = 0; i < list->num_files; i ++ ) { - len += ( list->files[i] == NULL ? 0 : strlen( list->files[i] ) + 4 ); - } + int len = 0; + int i; + //@ length of file names + for( i = 0; i < list->num_files; i ++ ) { + len += ( list->files[i] == NULL ? 0 : strlen( list->files[i] ) + 4 ); + } - s_print_buf = get_print_buf( len + 9 ); - sprintf( s_print_buf, "%08d", len ); + s_print_buf = get_print_buf( len + 9 ); + sprintf( s_print_buf, "%08d", len ); - for( i = 0; i num_files; i ++ ) { - char tmp[PATH_MAX]; + for( i = 0; i num_files; i ++ ) { + char tmp[PATH_MAX]; - if(list->files[i]==NULL) - continue; + if(list->files[i]==NULL) + continue; - snprintf(tmp,sizeof(tmp), "%04zu%s",strlen( list->files[i] ), list->files[i] ); + snprintf(tmp,sizeof(tmp), "%04zu%s",strlen( list->files[i] ), list->files[i] ); - strcat( s_print_buf,tmp); - } + strcat( s_print_buf,tmp); + } - free_media_files(v,list); - } + free_media_files(v,list); + } - SEND_MSG(v, s_print_buf ); - free( s_print_buf ); + SEND_MSG(v, s_print_buf ); + free( s_print_buf ); } -void vj_event_send_sample_list ( void *ptr, const char format[], va_list ap ) +void vj_event_send_sample_list ( void *ptr, const char format[], va_list ap ) { - veejay_t *v = (veejay_t*)ptr; - int args[2]; - int start_from_sample = 1; - char cmd[512]; - char line[512]; - char *str = NULL; - int i,n; - P_A(args,str,format,ap); - if(args[0] > 0 ) - start_from_sample = args[0]; - char *s_print_buf = get_print_buf(0); + veejay_t *v = (veejay_t*)ptr; + int args[2]; + int start_from_sample = 1; + char cmd[512]; + char line[512]; + char *str = NULL; + int i,n; + P_A(args,str,format,ap); + if(args[0] > 0 ) + start_from_sample = args[0]; + char *s_print_buf = get_print_buf(0); - sprintf(s_print_buf, "00000000"); + sprintf(s_print_buf, "00000000"); - n = sample_highest(); - if( n > 1 ) - { - char *print_buf = get_print_buf(SEND_BUF); - for(i=start_from_sample; i <= n; i++) - { - if(sample_exists(i)) - { - char description[SAMPLE_MAX_DESCR_LEN]; - int end_frame = sample_get_endFrame(i); - int start_frame = sample_get_startFrame(i); - /* format of sample: - 00000 : id - 000000000 : start + n = sample_highest(); + if( n > 1 ) + { + char *print_buf = get_print_buf(SEND_BUF); + for(i=start_from_sample; i <= n; i++) + { + if(sample_exists(i)) + { + char description[SAMPLE_MAX_DESCR_LEN]; + int end_frame = sample_get_endFrame(i); + int start_frame = sample_get_startFrame(i); + /* format of sample: + 00000 : id + 000000000 : start 000000000 : end xxx: str : description - */ - sample_get_description( i, description ); - - snprintf(cmd,sizeof(cmd),"%05d%09d%09d%03zu%s", - i, - start_frame, - end_frame, - strlen(description), - description - ); - FORMAT_MSG(line,cmd); - APPEND_MSG(print_buf,line); - } + */ + sample_get_description( i, description ); + + snprintf(cmd,sizeof(cmd),"%05d%09d%09d%03zu%s", + i, + start_frame, + end_frame, + strlen(description), + description + ); + FORMAT_MSG(line,cmd); + APPEND_MSG(print_buf,line); + } - } - sprintf(s_print_buf, "%08zu%s", strlen(print_buf),print_buf); - free(print_buf); - } - SEND_MSG(v, s_print_buf); - free(s_print_buf); + } + sprintf(s_print_buf, "%08zu%s", strlen(print_buf),print_buf); + free(print_buf); + } + SEND_MSG(v, s_print_buf); + free(s_print_buf); } -void vj_event_send_sample_stack ( void *ptr, const char format[], va_list ap ) +void vj_event_send_sample_stack ( void *ptr, const char format[], va_list ap ) { - char line[32]; - int args[4]; - char *str = NULL; + char line[32]; + int args[4]; + char *str = NULL; - char buffer[1024]; - char message[1024]; - veejay_t *v = (veejay_t*)ptr; - P_A(args,str,format,ap); + char buffer[1024]; + char message[1024]; + veejay_t *v = (veejay_t*)ptr; + P_A(args,str,format,ap); - buffer[0] = '\0'; - message[0] = '\0'; + buffer[0] = '\0'; + message[0] = '\0'; - int channel, source,fx_id,i, offset,sample_len; + int channel, source,fx_id,i, offset,sample_len; - if( SAMPLE_PLAYING(v) ) { - if(args[0] == 0) - args[0] = v->uc->sample_id; + if( SAMPLE_PLAYING(v) ) { + if(args[0] == 0) + args[0] = v->uc->sample_id; - for( i = 0; i < SAMPLE_MAX_EFFECTS ;i ++ ) { - fx_id = sample_get_effect_any( args[0], i ); - if( fx_id <= 0 ) - continue; - channel = sample_get_chain_channel( args[0], i ); - source = sample_get_chain_source( args[0], i ); - offset = sample_get_offset( args[0], i ); - if( source == 0 ) - sample_len= sample_video_length( channel ); - else - sample_len = vj_tag_get_n_frames( channel ); - snprintf( line, sizeof(line), "%02d%04d%02d%08d%08d", i, channel, source, offset, sample_len ); - strncat( buffer, line, strlen(line)); - } - } else if(STREAM_PLAYING(v)) - { - if(args[0] == 0) - args[0] = v->uc->sample_id; - - for(i = 0; i < SAMPLE_MAX_EFFECTS ; i ++ ) { - fx_id = vj_tag_get_effect_any( args[0], i ); - if( fx_id <= 0 ) - continue; - channel = vj_tag_get_chain_channel( args[0], i ); - source = vj_tag_get_chain_source( args[0], i ); - offset = vj_tag_get_offset( args[0], i ); - if( source == 0 ) - sample_len= sample_video_length( channel ); - else - sample_len = vj_tag_get_n_frames( channel ); + for( i = 0; i < SAMPLE_MAX_EFFECTS ;i ++ ) { + fx_id = sample_get_effect_any( args[0], i ); + if( fx_id <= 0 ) + continue; + channel = sample_get_chain_channel( args[0], i ); + source = sample_get_chain_source( args[0], i ); + offset = sample_get_offset( args[0], i ); + if( source == 0 ) + sample_len= sample_video_length( channel ); + else + sample_len = vj_tag_get_n_frames( channel ); + snprintf( line, sizeof(line), "%02d%04d%02d%08d%08d", i, channel, source, offset, sample_len ); + strncat( buffer, line, strlen(line)); + } + } else if(STREAM_PLAYING(v)) + { + if(args[0] == 0) + args[0] = v->uc->sample_id; + + for(i = 0; i < SAMPLE_MAX_EFFECTS ; i ++ ) { + fx_id = vj_tag_get_effect_any( args[0], i ); + if( fx_id <= 0 ) + continue; + channel = vj_tag_get_chain_channel( args[0], i ); + source = vj_tag_get_chain_source( args[0], i ); + offset = vj_tag_get_offset( args[0], i ); + if( source == 0 ) + sample_len= sample_video_length( channel ); + else + sample_len = vj_tag_get_n_frames( channel ); - snprintf( line, sizeof(line), "%02d%04d%02d%08d%08d",i,channel,source, offset, sample_len ); - strncat( buffer, line, strlen(line)); - } - } + snprintf( line, sizeof(line), "%02d%04d%02d%08d%08d",i,channel,source, offset, sample_len ); + strncat( buffer, line, strlen(line)); + } + } - FORMAT_MSG( message, buffer ); - SEND_MSG( v, message ); + FORMAT_MSG( message, buffer ); + SEND_MSG( v, message ); } -void vj_event_send_stream_args ( void *ptr, const char format[], va_list ap ) +void vj_event_send_stream_args ( void *ptr, const char format[], va_list ap ) { - char fline[100]; - char line[1000]; - int args[4]; - char *str = NULL; - veejay_t *v = (veejay_t*)ptr; - P_A(args,str,format,ap); + char fline[100]; + char line[1000]; + int args[4]; + char *str = NULL; + veejay_t *v = (veejay_t*)ptr; + P_A(args,str,format,ap); - const char *dummy = "000"; + const char *dummy = "000"; - if(STREAM_PLAYING(v)) - { - STREAM_DEFAULTS(args[0]); + if(STREAM_PLAYING(v)) + { + STREAM_DEFAULTS(args[0]); - if( vj_tag_get_type(args[0]) == VJ_TAG_TYPE_GENERATOR ) { - int tagargs[MAX_ARGUMENTS]; - int n_args = 0; - int id = 0; - veejay_memset( tagargs, 0, sizeof(tagargs)); - vj_tag_generator_get_args( args[0], tagargs, &n_args, &id ); + if( vj_tag_get_type(args[0]) == VJ_TAG_TYPE_GENERATOR ) { + int tagargs[MAX_ARGUMENTS]; + int n_args = 0; + int id = 0; + veejay_memset( tagargs, 0, sizeof(tagargs)); + vj_tag_generator_get_args( args[0], tagargs, &n_args, &id ); - char *line_ptr = &line[0]; + char *line_ptr = &line[0]; - line_ptr = vj_sprintf( line_ptr, id ); *line_ptr ++ = ' '; + line_ptr = vj_sprintf( line_ptr, id ); *line_ptr ++ = ' '; - int n = n_args; - int i; - for( i = 0; i < n; i ++ ) { - line_ptr = vj_sprintf( line_ptr, tagargs[i] ); *line_ptr ++ = ' '; - } + int n = n_args; + int i; + for( i = 0; i < n; i ++ ) { + line_ptr = vj_sprintf( line_ptr, tagargs[i] ); *line_ptr ++ = ' '; + } - line_ptr = vj_sprintf( line_ptr, tagargs[n] ); + line_ptr = vj_sprintf( line_ptr, tagargs[n] ); - FORMAT_MSG(fline,line); - SEND_MSG(v, fline); - return; - } - } + FORMAT_MSG(fline,line); + SEND_MSG(v, fline); + return; + } + } - SEND_MSG(v, dummy); + SEND_MSG(v, dummy); } -void vj_event_send_generator_list( void *ptr, const char format[], va_list ap ) +void vj_event_send_generator_list( void *ptr, const char format[], va_list ap ) { - int total = 0; - int *generators = plug_find_all_generator_plugins( &total ); - int i; - char *s_print_buf = get_print_buf(6 + (total * 128)); - veejay_t *v = (veejay_t*) ptr; + int total = 0; + int *generators = plug_find_all_generator_plugins( &total ); + int i; + char *s_print_buf = get_print_buf(6 + (total * 128)); + veejay_t *v = (veejay_t*) ptr; - if( s_print_buf == NULL ) { - SEND_MSG(v, "00000" ); - } - else { - - char *print_buf = get_print_buf( total * 128 ); - char line[128]; + if( s_print_buf == NULL ) { + SEND_MSG(v, "00000" ); + } + else { + + char *print_buf = get_print_buf( total * 128 ); + char line[128]; - for( i = 0; i < total; i ++ ) { - char *name = plug_get_so_name_by_idx( generators[i] ); - int name_len = strlen(name); + for( i = 0; i < total; i ++ ) { + char *name = plug_get_so_name_by_idx( generators[i] ); + int name_len = strlen(name); - snprintf( line, sizeof(line), "%03d%.124s", name_len, name ); - APPEND_MSG( print_buf, line ); - } + snprintf( line, sizeof(line), "%03d%.124s", name_len, name ); + APPEND_MSG( print_buf, line ); + } - sprintf( s_print_buf, "%05zu%s", strlen( print_buf ), print_buf ); - free(print_buf); - free(generators); + sprintf( s_print_buf, "%05zu%s", strlen( print_buf ), print_buf ); + free(print_buf); + free(generators); - SEND_MSG(v, s_print_buf); - free(s_print_buf); - } + SEND_MSG(v, s_print_buf); + free(s_print_buf); + } } -void vj_event_send_chain_entry ( void *ptr, const char format[], va_list ap ) +void vj_event_send_chain_entry ( void *ptr, const char format[], va_list ap ) { - char fline[1024]; - char line[1024]; - int args[4]; - char *str = NULL; - int error = 1; - veejay_t *v = (veejay_t*)ptr; - P_A(args,str,format,ap); - sprintf(line, "%03d", 0); + char fline[1024]; + char line[1024]; + int args[4]; + char *str = NULL; + int error = 1; + veejay_t *v = (veejay_t*)ptr; + P_A(args,str,format,ap); + sprintf(line, "%03d", 0); - char param[1024]; + char param[1024]; - if( SAMPLE_PLAYING(v) ) - { - SAMPLE_DEFAULTS(args[0]); + if( SAMPLE_PLAYING(v) ) + { + SAMPLE_DEFAULTS(args[0]); - if(args[1]==-1) - args[1] = sample_get_selected_entry(args[0]); + if(args[1]==-1) + args[1] = sample_get_selected_entry(args[0]); - int effect_id = sample_get_effect_any(args[0], args[1]); - - if(effect_id > 0) - { - int is_video = vj_effect_get_extra_frame(effect_id); - int params[SAMPLE_MAX_PARAMETERS]; - int p; - int video_on = sample_get_chain_status(args[0],args[1]); - //int audio_on = sample_get_chain_audio(args[0],args[1]); - int num_params = vj_effect_get_num_params(effect_id); - int kf_type = 0; - int kf_status = sample_get_kf_status( args[0],args[1],&kf_type ); + int effect_id = sample_get_effect_any(args[0], args[1]); + + if(effect_id > 0) + { + int is_video = vj_effect_get_extra_frame(effect_id); + int params[SAMPLE_MAX_PARAMETERS]; + int p; + int video_on = sample_get_chain_status(args[0],args[1]); + //int audio_on = sample_get_chain_audio(args[0],args[1]); + int num_params = vj_effect_get_num_params(effect_id); + int kf_type = 0; + int kf_status = sample_get_kf_status( args[0],args[1],&kf_type ); - for(p = 0 ; p < num_params; p++) - params[p] = sample_get_effect_arg(args[0],args[1],p); - for(p = num_params; p < SAMPLE_MAX_PARAMETERS; p++) - params[p] = 0; + for(p = 0 ; p < num_params; p++) + params[p] = sample_get_effect_arg(args[0],args[1],p); + for(p = num_params; p < SAMPLE_MAX_PARAMETERS; p++) + params[p] = 0; - snprintf( param, sizeof(param), "%d %d %d %d 0 0 %d %d %d %d 0 ", effect_id, is_video, num_params, - kf_type,kf_status, - sample_get_chain_source(args[0],args[1]), - sample_get_chain_channel(args[0],args[1]), - video_on); + snprintf( param, sizeof(param), "%d %d %d %d 0 0 %d %d %d %d 0 ", effect_id, is_video, num_params, + kf_type,kf_status, + sample_get_chain_source(args[0],args[1]), + sample_get_chain_channel(args[0],args[1]), + video_on); - strncat( line, param, strlen(param)); - for(p = 0; p < num_params - 1; p ++ ) { - snprintf(param,sizeof(param), "%d ", params[p] ); - strncat( line, param,strlen(param)); - } - snprintf(param, sizeof(param),"%d",params[p]); - strncat( line,param,strlen(param)); + strncat( line, param, strlen(param)); + for(p = 0; p < num_params - 1; p ++ ) { + snprintf(param,sizeof(param), "%d ", params[p] ); + strncat( line, param,strlen(param)); + } + snprintf(param, sizeof(param),"%d",params[p]); + strncat( line,param,strlen(param)); - error = 0; - } - } - - if(STREAM_PLAYING(v)) - { - STREAM_DEFAULTS(args[0]); - if(args[1] == -1) - args[1] = vj_tag_get_selected_entry(args[0]); + error = 0; + } + } + + if(STREAM_PLAYING(v)) + { + STREAM_DEFAULTS(args[0]); + if(args[1] == -1) + args[1] = vj_tag_get_selected_entry(args[0]); - int effect_id = vj_tag_get_effect_any(args[0], args[1]); + int effect_id = vj_tag_get_effect_any(args[0], args[1]); - if(effect_id > 0) - { - int is_video = vj_effect_get_extra_frame(effect_id); - int params[SAMPLE_MAX_PARAMETERS]; - int p; - int num_params = vj_effect_get_num_params(effect_id); + if(effect_id > 0) + { + int is_video = vj_effect_get_extra_frame(effect_id); + int params[SAMPLE_MAX_PARAMETERS]; + int p; + int num_params = vj_effect_get_num_params(effect_id); - int video_on = vj_tag_get_chain_status(args[0], args[1]); - int kf_type = 0; - int kf_status = vj_tag_get_kf_status( args[0],args[1], &kf_type ); + int video_on = vj_tag_get_chain_status(args[0], args[1]); + int kf_type = 0; + int kf_status = vj_tag_get_kf_status( args[0],args[1], &kf_type ); - for(p = 0 ; p < num_params; p++) - params[p] = vj_tag_get_effect_arg(args[0],args[1],p); - for(p = num_params; p < SAMPLE_MAX_PARAMETERS;p++) - params[p] = 0; + for(p = 0 ; p < num_params; p++) + params[p] = vj_tag_get_effect_arg(args[0],args[1],p); + for(p = num_params; p < SAMPLE_MAX_PARAMETERS;p++) + params[p] = 0; - snprintf( param, sizeof(param), "%d %d %d %d 0 0 %d %d %d %d 0 ", effect_id, is_video, num_params, - kf_type, - kf_status, - vj_tag_get_chain_source(args[0],args[1]), - vj_tag_get_chain_channel(args[0],args[1]), - video_on); + snprintf( param, sizeof(param), "%d %d %d %d 0 0 %d %d %d %d 0 ", effect_id, is_video, num_params, + kf_type, + kf_status, + vj_tag_get_chain_source(args[0],args[1]), + vj_tag_get_chain_channel(args[0],args[1]), + video_on); - strncat( line, param, strlen(param)); - for(p = 0; p < num_params - 1; p ++ ) { - snprintf(param,sizeof(param), "%d ", params[p] ); - strncat( line, param,strlen(param)); - } - snprintf(param, sizeof(param),"%d",params[p]); - strncat( line,param,strlen(param)); + strncat( line, param, strlen(param)); + for(p = 0; p < num_params - 1; p ++ ) { + snprintf(param,sizeof(param), "%d ", params[p] ); + strncat( line, param,strlen(param)); + } + snprintf(param, sizeof(param),"%d",params[p]); + strncat( line,param,strlen(param)); - error = 0; - } - } + error = 0; + } + } - if(!error) - { - FORMAT_MSG(fline,line); - SEND_MSG(v, fline); - } - else - SEND_MSG(v,line); + if(!error) + { + FORMAT_MSG(fline,line); + SEND_MSG(v, fline); + } + else + SEND_MSG(v,line); } -void vj_event_send_chain_entry_parameters ( void *ptr, const char format[], va_list ap ) +void vj_event_send_chain_entry_parameters ( void *ptr, const char format[], va_list ap ) { - char fline[1024]; - char line[1024]; - int args[4]; - char *str = NULL; - int error = 1; - veejay_t *v = (veejay_t*)ptr; + char fline[1024]; + char line[1024]; + int args[4]; + char *str = NULL; + int error = 1; + veejay_t *v = (veejay_t*)ptr; - P_A(args,str,format,ap); - sprintf(line, "%03d", 0); + P_A(args,str,format,ap); + sprintf(line, "%03d", 0); - char param[1024]; + char param[1024]; - if( SAMPLE_PLAYING(v) ) - { - SAMPLE_DEFAULTS(args[0]); + if( SAMPLE_PLAYING(v) ) + { + SAMPLE_DEFAULTS(args[0]); - if(args[1]==-1) - args[1] = sample_get_selected_entry(args[0]); + if(args[1]==-1) + args[1] = sample_get_selected_entry(args[0]); - int effect_id = sample_get_effect_any(args[0], args[1]); - - if(effect_id > 0) - { - int is_video = vj_effect_get_extra_frame(effect_id); - int params[SAMPLE_MAX_PARAMETERS]; - int p; - int video_on = sample_get_chain_status(args[0],args[1]); - int num_params = vj_effect_get_num_params(effect_id); - int kf_type = 0; - int kf_status = sample_get_kf_status( args[0],args[1],&kf_type ); + int effect_id = sample_get_effect_any(args[0], args[1]); + + if(effect_id > 0) + { + int is_video = vj_effect_get_extra_frame(effect_id); + int params[SAMPLE_MAX_PARAMETERS]; + int p; + int video_on = sample_get_chain_status(args[0],args[1]); + int num_params = vj_effect_get_num_params(effect_id); + int kf_type = 0; + int kf_status = sample_get_kf_status( args[0],args[1],&kf_type ); - for(p = 0 ; p < num_params; p++) - params[p] = sample_get_effect_arg(args[0],args[1],p); - for(p = num_params; p < SAMPLE_MAX_PARAMETERS; p++) - params[p] = 0; + for(p = 0 ; p < num_params; p++) + params[p] = sample_get_effect_arg(args[0],args[1],p); + for(p = num_params; p < SAMPLE_MAX_PARAMETERS; p++) + params[p] = 0; - snprintf( param, sizeof(param), "%d %d %d %d 0 0 %d %d %d %d 0 ", effect_id, is_video, num_params, - kf_type,kf_status, - sample_get_chain_source(args[0],args[1]), - sample_get_chain_channel(args[0],args[1]), - video_on); + snprintf( param, sizeof(param), "%d %d %d %d 0 0 %d %d %d %d 0 ", effect_id, is_video, num_params, + kf_type,kf_status, + sample_get_chain_source(args[0],args[1]), + sample_get_chain_channel(args[0],args[1]), + video_on); - strncat( line, param, strlen(param)); - for(p = 0; p < num_params - 1; p ++ ) { - snprintf(param,sizeof(param), "%d %d %d %d ", params[p], - vj_effect_get_min_limit( effect_id, p ), - vj_effect_get_max_limit( effect_id, p ), - vj_effect_get_default( effect_id,p ) - ); - strncat( line, param,strlen(param)); - } - snprintf(param, sizeof(param),"%d %d %d %d",params[p], - vj_effect_get_min_limit( effect_id, p ), - vj_effect_get_max_limit( effect_id, p ), - vj_effect_get_default( effect_id,p ) - ); + strncat( line, param, strlen(param)); + for(p = 0; p < num_params - 1; p ++ ) { + snprintf(param,sizeof(param), "%d %d %d %d ", params[p], + vj_effect_get_min_limit( effect_id, p ), + vj_effect_get_max_limit( effect_id, p ), + vj_effect_get_default( effect_id,p ) + ); + strncat( line, param,strlen(param)); + } + snprintf(param, sizeof(param),"%d %d %d %d",params[p], + vj_effect_get_min_limit( effect_id, p ), + vj_effect_get_max_limit( effect_id, p ), + vj_effect_get_default( effect_id,p ) + ); - strncat( line,param,strlen(param)); + strncat( line,param,strlen(param)); - error = 0; - } - } - - if(STREAM_PLAYING(v)) - { - STREAM_DEFAULTS(args[0]); + error = 0; + } + } + + if(STREAM_PLAYING(v)) + { + STREAM_DEFAULTS(args[0]); - if(args[1] == -1) - args[1] = vj_tag_get_selected_entry(args[0]); + if(args[1] == -1) + args[1] = vj_tag_get_selected_entry(args[0]); - int effect_id = vj_tag_get_effect_any(args[0], args[1]); + int effect_id = vj_tag_get_effect_any(args[0], args[1]); - if(effect_id > 0) - { - int is_video = vj_effect_get_extra_frame(effect_id); - int params[SAMPLE_MAX_PARAMETERS]; - int p; - int num_params = vj_effect_get_num_params(effect_id); + if(effect_id > 0) + { + int is_video = vj_effect_get_extra_frame(effect_id); + int params[SAMPLE_MAX_PARAMETERS]; + int p; + int num_params = vj_effect_get_num_params(effect_id); - int video_on = vj_tag_get_chain_status(args[0], args[1]); - int kf_type = 0; - int kf_status = vj_tag_get_kf_status( args[0],args[1], &kf_type ); + int video_on = vj_tag_get_chain_status(args[0], args[1]); + int kf_type = 0; + int kf_status = vj_tag_get_kf_status( args[0],args[1], &kf_type ); - for(p = 0 ; p < num_params; p++) - params[p] = vj_tag_get_effect_arg(args[0],args[1],p); - for(p = num_params; p < SAMPLE_MAX_PARAMETERS;p++) - params[p] = 0; + for(p = 0 ; p < num_params; p++) + params[p] = vj_tag_get_effect_arg(args[0],args[1],p); + for(p = num_params; p < SAMPLE_MAX_PARAMETERS;p++) + params[p] = 0; - snprintf( param, sizeof(param), "%d %d %d %d 0 0 %d %d %d %d 0 ", effect_id, is_video, num_params, - kf_type, - kf_status, - vj_tag_get_chain_source(args[0],args[1]), - vj_tag_get_chain_channel(args[0],args[1]), - video_on); + snprintf( param, sizeof(param), "%d %d %d %d 0 0 %d %d %d %d 0 ", effect_id, is_video, num_params, + kf_type, + kf_status, + vj_tag_get_chain_source(args[0],args[1]), + vj_tag_get_chain_channel(args[0],args[1]), + video_on); - strncat( line, param, strlen(param)); - for(p = 0; p < num_params - 1; p ++ ) { - snprintf(param,sizeof(param), "%d %d %d %d ", params[p], - vj_effect_get_min_limit( effect_id, p ), - vj_effect_get_max_limit( effect_id, p ), - vj_effect_get_default( effect_id,p ) - ); + strncat( line, param, strlen(param)); + for(p = 0; p < num_params - 1; p ++ ) { + snprintf(param,sizeof(param), "%d %d %d %d ", params[p], + vj_effect_get_min_limit( effect_id, p ), + vj_effect_get_max_limit( effect_id, p ), + vj_effect_get_default( effect_id,p ) + ); - strncat( line, param,strlen(param)); - } - snprintf(param, sizeof(param),"%d %d %d %d",params[p], - vj_effect_get_min_limit( effect_id, p ), - vj_effect_get_max_limit( effect_id, p ), - vj_effect_get_default( effect_id,p ) - ); + strncat( line, param,strlen(param)); + } + snprintf(param, sizeof(param),"%d %d %d %d",params[p], + vj_effect_get_min_limit( effect_id, p ), + vj_effect_get_max_limit( effect_id, p ), + vj_effect_get_default( effect_id,p ) + ); - strncat( line,param,strlen(param)); + strncat( line,param,strlen(param)); - error = 0; - } - } + error = 0; + } + } - if(!error) - { - snprintf(fline,sizeof(fline),"%04zu%s",strlen(line),line); - SEND_MSG(v, fline); - } - else { - SEND_MSG(v,line); - } + if(!error) + { + snprintf(fline,sizeof(fline),"%04zu%s",strlen(line),line); + SEND_MSG(v, fline); + } + else { + SEND_MSG(v,line); + } } -void vj_event_send_chain_list ( void *ptr, const char format[], va_list ap ) +void vj_event_send_chain_list ( void *ptr, const char format[], va_list ap ) { - int i; - char line[VIMS_CHAIN_LIST_ENTRY_LENGTH+1]; // null terminated buffer - int args[1]; - char *str = NULL; - veejay_t *v = (veejay_t*)ptr; - P_A(args,str,format,ap); + int i; + char line[VIMS_CHAIN_LIST_ENTRY_LENGTH+1]; // null terminated buffer + int args[1]; + char *str = NULL; + veejay_t *v = (veejay_t*)ptr; + P_A(args,str,format,ap); - char *s_print_buf = get_print_buf(0); - sprintf( s_print_buf, "%03d",0 ); + char *s_print_buf = get_print_buf(0); + sprintf( s_print_buf, "%03d",0 ); - if(SAMPLE_PLAYING(v)) - { - SAMPLE_DEFAULTS(args[0]); - char *print_buf = get_print_buf( 1 + (VIMS_CHAIN_LIST_ENTRY_LENGTH * SAMPLE_MAX_EFFECTS )); - for(i=0; i < SAMPLE_MAX_EFFECTS; i++) - { - int effect_id = sample_get_effect_any(args[0], i); - if(effect_id > 0) - { - int is_video = vj_effect_get_extra_frame(effect_id); - int using_effect = sample_get_chain_status(args[0], i); - int using_audio = 0; - int chain_source = sample_get_chain_source(args[0], i); - int chain_channel = sample_get_chain_channel(args[0], i); - int kf_type = 0; - int kf_status = sample_get_kf_status( args[0], i, &kf_type ); - //int using_audio = sample_get_chain_audio(args[0],i); + if(SAMPLE_PLAYING(v)) + { + SAMPLE_DEFAULTS(args[0]); + char *print_buf = get_print_buf( 1 + (VIMS_CHAIN_LIST_ENTRY_LENGTH * SAMPLE_MAX_EFFECTS )); + for(i=0; i < SAMPLE_MAX_EFFECTS; i++) + { + int effect_id = sample_get_effect_any(args[0], i); + if(effect_id > 0) + { + int is_video = vj_effect_get_extra_frame(effect_id); + int using_effect = sample_get_chain_status(args[0], i); + int using_audio = 0; + int chain_source = sample_get_chain_source(args[0], i); + int chain_channel = sample_get_chain_channel(args[0], i); + int kf_type = 0; + int kf_status = sample_get_kf_status( args[0], i, &kf_type ); + //int using_audio = sample_get_chain_audio(args[0],i); - sprintf(line, VIMS_CHAIN_LIST_ENTRY_FORMAT, - i, - effect_id, - is_video, - (using_effect <= 0 ? 0 : 1 ), - (using_audio <= 0 ? 0 : 1 ), - chain_source, - chain_channel, - kf_status - ); - - APPEND_MSG(print_buf,line); - } - } - sprintf(s_print_buf, "%03zu%s",strlen(print_buf), print_buf); - free(print_buf); + sprintf(line, VIMS_CHAIN_LIST_ENTRY_FORMAT, + i, + effect_id, + is_video, + (using_effect <= 0 ? 0 : 1 ), + (using_audio <= 0 ? 0 : 1 ), + chain_source, + chain_channel, + kf_status + ); + + APPEND_MSG(print_buf,line); + } + } + sprintf(s_print_buf, "%03zu%s",strlen(print_buf), print_buf); + free(print_buf); - } - else if(STREAM_PLAYING(v)) - { - STREAM_DEFAULTS(args[0]); - char *print_buf = get_print_buf(1 + (VIMS_CHAIN_LIST_ENTRY_LENGTH * SAMPLE_MAX_EFFECTS)); + } + else if(STREAM_PLAYING(v)) + { + STREAM_DEFAULTS(args[0]); + char *print_buf = get_print_buf(1 + (VIMS_CHAIN_LIST_ENTRY_LENGTH * SAMPLE_MAX_EFFECTS)); - for(i=0; i < SAMPLE_MAX_EFFECTS; i++) - { - int effect_id = vj_tag_get_effect_any(args[0], i); - if(effect_id > 0) - { - int is_video = vj_effect_get_extra_frame(effect_id); - int using_effect = vj_tag_get_chain_status(args[0],i); - int chain_source = vj_tag_get_chain_source(args[0], i); - int chain_channel = vj_tag_get_chain_channel(args[0], i); - int kf_type = 0; - int kf_status = vj_tag_get_kf_status( args[0], i, &kf_type ); // exist for streaù ? or 0 ? + for(i=0; i < SAMPLE_MAX_EFFECTS; i++) + { + int effect_id = vj_tag_get_effect_any(args[0], i); + if(effect_id > 0) + { + int is_video = vj_effect_get_extra_frame(effect_id); + int using_effect = vj_tag_get_chain_status(args[0],i); + int chain_source = vj_tag_get_chain_source(args[0], i); + int chain_channel = vj_tag_get_chain_channel(args[0], i); + int kf_type = 0; + int kf_status = vj_tag_get_kf_status( args[0], i, &kf_type ); // exist for streaù ? or 0 ? - sprintf(line, VIMS_CHAIN_LIST_ENTRY_FORMAT, - i, - effect_id, - is_video, - (using_effect <= 0 ? 0 : 1 ), - 0, - chain_source, - chain_channel, - kf_status - ); - APPEND_MSG(print_buf, line); - } - } - sprintf(s_print_buf, "%03zu%s",strlen( print_buf ), print_buf); - free(print_buf); - } else { - sprintf(s_print_buf, "000"); - } - SEND_MSG(v, s_print_buf); - free(s_print_buf); + sprintf(line, VIMS_CHAIN_LIST_ENTRY_FORMAT, + i, + effect_id, + is_video, + (using_effect <= 0 ? 0 : 1 ), + 0, + chain_source, + chain_channel, + kf_status + ); + APPEND_MSG(print_buf, line); + } + } + sprintf(s_print_buf, "%03zu%s",strlen( print_buf ), print_buf); + free(print_buf); + } else { + sprintf(s_print_buf, "000"); + } + SEND_MSG(v, s_print_buf); + free(s_print_buf); } -void vj_event_send_shm_info( void *ptr, const char format[], va_list ap) +void vj_event_send_shm_info( void *ptr, const char format[], va_list ap) { - int args[1] = { -1 }; - char *str = NULL; - veejay_t *v = (veejay_t*)ptr; - P_A(args,str,format,ap); + int args[1] = { -1 }; + char *str = NULL; + veejay_t *v = (veejay_t*)ptr; + P_A(args,str,format,ap); - net_set_screen_id( args[0] ); + net_set_screen_id( args[0] ); - char *msg = get_print_buf(128); - snprintf( msg, 128, - "%d %d %d %d", - v->video_output_width, - v->video_output_height, - v->pixel_format, - vj_shm_get_my_id( v->shm ) ); - - int msg_len = strlen(msg); - char *tmp = get_print_buf(1 + msg_len + 3); + char *msg = get_print_buf(128); + snprintf( msg, 128, + "%d %d %d %d", + v->video_output_width, + v->video_output_height, + v->pixel_format, + vj_shm_get_my_id( v->shm ) ); + + int msg_len = strlen(msg); + char *tmp = get_print_buf(1 + msg_len + 3); - sprintf( tmp, "%03d%s",msg_len, msg ); - - SEND_MSG(v,tmp); - free(msg); - free(tmp); - - if( args[0] >= 0 ) { - veejay_msg(VEEJAY_MSG_INFO, "Binding this instance to screen %d of remote", - args[0]); - } + sprintf( tmp, "%03d%s",msg_len, msg ); + + SEND_MSG(v,tmp); + free(msg); + free(tmp); + + if( args[0] >= 0 ) { + veejay_msg(VEEJAY_MSG_INFO, "Binding this instance to screen %d of remote", + args[0]); + } } -void vj_event_send_video_information ( void *ptr, const char format[], va_list ap ) +void vj_event_send_video_information ( void *ptr, const char format[], va_list ap ) { - /* send video properties */ - char info_msg[150]; - veejay_t *v = (veejay_t*)ptr; + /* send video properties */ + char info_msg[150]; + veejay_t *v = (veejay_t*)ptr; - editlist *el = v->current_edit_list; + editlist *el = v->current_edit_list; /* - editlist *el = ( SAMPLE_PLAYING(v) ? sample_get_editlist( v->uc->sample_id ) : - v->current_edit_list ); + editlist *el = ( SAMPLE_PLAYING(v) ? sample_get_editlist( v->uc->sample_id ) : + v->current_edit_list ); */ - long n_frames = el->total_frames; - if( SAMPLE_PLAYING(v)) - n_frames = sample_max_video_length( v->uc->sample_id ); - char *s_print_buf = get_print_buf(200); - snprintf(info_msg,sizeof(info_msg)-1, "%04d %04d %01d %c %02.3f %1d %04d %06ld %02d %03ld %08ld %1d %d", - el->video_width, - el->video_height, - el->video_inter, - el->video_norm, - el->video_fps, - el->has_audio, - el->audio_bits, - el->audio_rate, - el->audio_chans, - el->num_video_files, - n_frames, - v->audio, - v->settings->use_vims_mcast - ); - sprintf(s_print_buf, "%03zu%s",strlen(info_msg), info_msg); - SEND_MSG(v,s_print_buf); - free(s_print_buf); + long n_frames = el->total_frames; + if( SAMPLE_PLAYING(v)) + n_frames = sample_max_video_length( v->uc->sample_id ); + char *s_print_buf = get_print_buf(200); + snprintf(info_msg,sizeof(info_msg)-1, "%04d %04d %01d %c %02.3f %1d %04d %06ld %02d %03ld %08ld %1d %d", + el->video_width, + el->video_height, + el->video_inter, + el->video_norm, + el->video_fps, + el->has_audio, + el->audio_bits, + el->audio_rate, + el->audio_chans, + el->num_video_files, + n_frames, + v->audio, + v->settings->use_vims_mcast + ); + sprintf(s_print_buf, "%03zu%s",strlen(info_msg), info_msg); + SEND_MSG(v,s_print_buf); + free(s_print_buf); } -void vj_event_send_editlist ( void *ptr, const char format[], va_list ap ) +void vj_event_send_editlist ( void *ptr, const char format[], va_list ap ) { - veejay_t *v = (veejay_t*) ptr; - int b = 0; - editlist *el = v->current_edit_list; + veejay_t *v = (veejay_t*) ptr; + int b = 0; + editlist *el = v->current_edit_list; /* ( SAMPLE_PLAYING(v) ? sample_get_editlist( v->uc->sample_id ) : - v->current_edit_list );*/ + v->current_edit_list );*/ - if( el->num_video_files <= 0 ) - { - SEND_MSG( v, "000000"); - return; - } + if( el->num_video_files <= 0 ) + { + SEND_MSG( v, "000000"); + return; + } - char *msg = (char*) vj_el_write_line_ascii( el, &b ); - + char *msg = (char*) vj_el_write_line_ascii( el, &b ); + - char *s_print_buf = get_print_buf( b + 8 ); - snprintf( s_print_buf, (b+8),"%06d%s", b, msg ); - if(msg)free(msg); - SEND_MSG( v, s_print_buf ); - free(s_print_buf); + char *s_print_buf = get_print_buf( b + 8 ); + snprintf( s_print_buf, (b+8),"%06d%s", b, msg ); + if(msg)free(msg); + SEND_MSG( v, s_print_buf ); + free(s_print_buf); } -void vj_event_send_frame ( void *ptr, const char format[], va_list ap ) +void vj_event_send_frame ( void *ptr, const char format[], va_list ap ) { - veejay_t *v = (veejay_t*) ptr; - int args[1] = { -1 }; - char *str = NULL; + veejay_t *v = (veejay_t*) ptr; + int args[1] = { -1 }; + char *str = NULL; - if( v->splitter ) { - P_A(args,str,format,ap); - } + if( v->splitter ) { + P_A(args,str,format,ap); + } - int i = 0; - - for( i = 0; i < VJ_MAX_CONNECTIONS; i ++ ) { - if( v->rlinks[i] == -1 ) { - v->rlinks[i] = v->uc->current_link; - if( v->splitter ) { - v->splitted_screens[ i ] = args[0]; - } - break; - } - } + int i = 0; + + for( i = 0; i < VJ_MAX_CONNECTIONS; i ++ ) { + if( v->rlinks[i] == -1 ) { + v->rlinks[i] = v->uc->current_link; + if( v->splitter ) { + v->splitted_screens[ i ] = args[0]; + } + break; + } + } - if (!v->settings->is_dat ) - { - veejay_msg(0, "Wrong control port for retrieving frames!"); - SEND_MSG(v, "00000000000000000000"); //@ send empty header only (20 bytes) - return; - } + if (!v->settings->is_dat ) + { + veejay_msg(0, "Wrong control port for retrieving frames!"); + SEND_MSG(v, "00000000000000000000"); //@ send empty header only (20 bytes) + return; + } - v->settings->unicast_frame_sender = 1; + v->settings->unicast_frame_sender = 1; } -void vj_event_mcast_start ( void *ptr, const char format[], va_list ap ) +void vj_event_mcast_start ( void *ptr, const char format[], va_list ap ) { - veejay_t *v = (veejay_t*) ptr; - int args[2]; - char s[255]; - P_A( args, s , format, ap); + veejay_t *v = (veejay_t*) ptr; + int args[2]; + char s[255]; + P_A( args, s , format, ap); - if(!v->settings->use_vims_mcast) - veejay_msg(VEEJAY_MSG_ERROR, "start veejay in multicast mode (see -T commandline option)"); - else - { - v->settings->mcast_frame_sender = 1; - v->settings->mcast_mode = args[0]; - vj_server_set_mcast_mode( v->vjs[2],args[0] ); - veejay_msg(VEEJAY_MSG_INFO, "Veejay started mcast frame sender"); - } + if(!v->settings->use_vims_mcast) + veejay_msg(VEEJAY_MSG_ERROR, "start veejay in multicast mode (see -T commandline option)"); + else + { + v->settings->mcast_frame_sender = 1; + v->settings->mcast_mode = args[0]; + vj_server_set_mcast_mode( v->vjs[2],args[0] ); + veejay_msg(VEEJAY_MSG_INFO, "Veejay started mcast frame sender"); + } } -void vj_event_mcast_stop ( void *ptr, const char format[], va_list ap ) +void vj_event_mcast_stop ( void *ptr, const char format[], va_list ap ) { - veejay_t *v = (veejay_t*) ptr; - if(!v->settings->use_vims_mcast) - veejay_msg(VEEJAY_MSG_ERROR, "start veejay in multicast mode (see -V commandline option)"); - else - { - v->settings->mcast_frame_sender = 0; - veejay_msg(VEEJAY_MSG_INFO, "Veejay stopped mcast frame sender"); - } + veejay_t *v = (veejay_t*) ptr; + if(!v->settings->use_vims_mcast) + veejay_msg(VEEJAY_MSG_ERROR, "start veejay in multicast mode (see -V commandline option)"); + else + { + v->settings->mcast_frame_sender = 0; + veejay_msg(VEEJAY_MSG_INFO, "Veejay stopped mcast frame sender"); + } } -void vj_event_send_effect_list ( void *ptr, const char format[], va_list ap ) +void vj_event_send_effect_list ( void *ptr, const char format[], va_list ap ) { - veejay_t *v = (veejay_t*)ptr; - int i; - char *priv_msg = NULL; - int len = 0; + veejay_t *v = (veejay_t*)ptr; + int i; + char *priv_msg = NULL; + int len = 0; - int n_fx = vj_effect_max_effects(); + int n_fx = vj_effect_max_effects(); - for( i = 0; i < n_fx; i ++ ) - len += vj_effect_get_summary_len( i ); + for( i = 0; i < n_fx; i ++ ) + len += vj_effect_get_summary_len( i ); - priv_msg = (char*) malloc(sizeof(char) * (6 + len + 4096)); - sprintf(priv_msg, "%06d", len ); - char line[4096]; - char fline[4096]; - for(i=0; i < n_fx; i++) - { - if(vj_effect_get_summary(i,line)) - { - snprintf(fline,sizeof(fline), "%03zu%s", strlen(line), line ); - veejay_strncat( priv_msg, fline, strlen(fline) ); - } - } - SEND_MSG(v,priv_msg); - free(priv_msg); + priv_msg = (char*) malloc(sizeof(char) * (6 + len + 4096)); + sprintf(priv_msg, "%06d", len ); + char line[4096]; + char fline[4096]; + for(i=0; i < n_fx; i++) + { + if(vj_effect_get_summary(i,line)) + { + snprintf(fline,sizeof(fline), "%03zu%s", strlen(line), line ); + veejay_strncat( priv_msg, fline, strlen(fline) ); + } + } + SEND_MSG(v,priv_msg); + free(priv_msg); } int vj_event_load_bundles(char *bundle_file) { - FILE *fd; - char *event_name, *event_msg; - char buf[65535]; - int event_id=0; - if(!bundle_file) return -1; - fd = fopen(bundle_file, "r"); - veejay_memset(buf,0,65535); - if(!fd) return -1; - while(fgets(buf,4096,fd)) - { - buf[strlen(buf)-1] = 0; - event_name = strtok(buf, "|"); - event_msg = strtok(NULL, "|"); - if(event_msg!=NULL && event_name!=NULL) { - //veejay_msg(VEEJAY_MSG_INFO, "Event: %s , Msg [%s]",event_name,event_msg); - event_id = atoi( event_name ); - if(event_id && event_msg) - { - vj_msg_bundle *m = vj_event_bundle_new( event_msg, event_id ); - if(m != NULL) - { - if( vj_event_bundle_store(m) ) - { - veejay_msg(VEEJAY_MSG_INFO, "(VIMS) Registered a bundle as event %03d",event_id); - } - } - } - } - } - fclose(fd); - return 1; + FILE *fd; + char *event_name, *event_msg; + char buf[65535]; + int event_id=0; + if(!bundle_file) return -1; + fd = fopen(bundle_file, "r"); + veejay_memset(buf,0,65535); + if(!fd) return -1; + while(fgets(buf,4096,fd)) + { + buf[strlen(buf)-1] = 0; + event_name = strtok(buf, "|"); + event_msg = strtok(NULL, "|"); + if(event_msg!=NULL && event_name!=NULL) { + //veejay_msg(VEEJAY_MSG_INFO, "Event: %s , Msg [%s]",event_name,event_msg); + event_id = atoi( event_name ); + if(event_id && event_msg) + { + vj_msg_bundle *m = vj_event_bundle_new( event_msg, event_id ); + if(m != NULL) + { + if( vj_event_bundle_store(m) ) + { + veejay_msg(VEEJAY_MSG_INFO, "(VIMS) Registered a bundle as event %03d",event_id); + } + } + } + } + } + fclose(fd); + return 1; } void vj_event_do_bundled_msg(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - int args[1]; - char s[1024]; - vj_msg_bundle *m; - P_A( args, s , format, ap); - //veejay_msg(VEEJAY_MSG_INFO, "Parsing message bundle as event"); - m = vj_event_bundle_get(args[0]); - if(m) - { - vj_event_parse_bundle( v, m->bundle ); - } - else - { - veejay_msg(VEEJAY_MSG_ERROR, "Requested event %d does not exist. ",args[0]); - } + veejay_t *v = (veejay_t*) ptr; + int args[1]; + char s[1024]; + vj_msg_bundle *m; + P_A( args, s , format, ap); + //veejay_msg(VEEJAY_MSG_INFO, "Parsing message bundle as event"); + m = vj_event_bundle_get(args[0]); + if(m) + { + vj_event_parse_bundle( v, m->bundle ); + } + else + { + veejay_msg(VEEJAY_MSG_ERROR, "Requested event %d does not exist. ",args[0]); + } } #ifdef HAVE_SDL void vj_event_attach_detach_key(void *ptr, const char format[], va_list ap) { - int args[4] = { 0,0,0,0 }; - char value[100]; - int mode = 0; - + int args[4] = { 0,0,0,0 }; + char value[100]; + int mode = 0; + - P_A( args, value, format ,ap ); + P_A( args, value, format ,ap ); - if( args[1] <= 0 || args[1] >= SDLK_LAST) - { - veejay_msg(VEEJAY_MSG_ERROR, "Invalid key identifier %d (range is 1 - %d)", args[1], SDLK_LAST); - return; - } - if( args[2] < 0 || args[2] > VIMS_MOD_SHIFT ) - { - veejay_msg(VEEJAY_MSG_ERROR, "Invalid key modifier (3=shift,2=ctrl,1=alt, 0=none)"); - return; - } + if( args[1] <= 0 || args[1] >= SDLK_LAST) + { + veejay_msg(VEEJAY_MSG_ERROR, "Invalid key identifier %d (range is 1 - %d)", args[1], SDLK_LAST); + return; + } + if( args[2] < 0 || args[2] > VIMS_MOD_SHIFT ) + { + veejay_msg(VEEJAY_MSG_ERROR, "Invalid key modifier (3=shift,2=ctrl,1=alt, 0=none)"); + return; + } - char *clone = NULL; - mode = args[0]; + char *clone = NULL; + mode = args[0]; - switch(mode) - { - case 1: - vj_event_unregister_keyb_event( args[1],args[2] ); - break; - default: + switch(mode) + { + case 1: + vj_event_unregister_keyb_event( args[1],args[2] ); + break; + default: - if( strncmp(value, "dummy",5 ) != 0 ) - clone = value; - vj_event_register_keyb_event( args[0], args[1], args[2], clone ); - break; - } -} + if( strncmp(value, "dummy",5 ) != 0 ) + clone = value; + vj_event_register_keyb_event( args[0], args[1], args[2], clone ); + break; + } +} #endif void vj_event_bundled_msg_del(void *ptr, const char format[], va_list ap) { - - int args[1]; - char *s = NULL; - P_A(args,s,format,ap); - if ( vj_event_bundle_del( args[0] ) == 0) - { - veejay_msg(VEEJAY_MSG_INFO,"Bundle %d deleted from event system",args[0]); - } - else - { - veejay_msg(VEEJAY_MSG_ERROR, "Bundle is %d is not known",args[0]); - } + + int args[1]; + char *s = NULL; + P_A(args,s,format,ap); + if ( vj_event_bundle_del( args[0] ) == 0) + { + veejay_msg(VEEJAY_MSG_INFO,"Bundle %d deleted from event system",args[0]); + } + else + { + veejay_msg(VEEJAY_MSG_ERROR, "Bundle is %d is not known",args[0]); + } } @@ -9307,186 +9309,186 @@ void vj_event_bundled_msg_del(void *ptr, const char format[], va_list ap) void vj_event_bundled_msg_add(void *ptr, const char format[], va_list ap) { - - int args[2] = {0,0}; - char s[1024]; - P_A(args,s,format,ap); + + int args[2] = {0,0}; + char s[1024]; + P_A(args,s,format,ap); - if(args[0] == 0) - { - args[0] = vj_event_suggest_bundle_id(); - veejay_msg(VEEJAY_MSG_DEBUG, "(VIMS) suggested new Event id %d", args[0]); - } - else - { - veejay_msg(VEEJAY_MSG_DEBUG, "(VIMS) requested to add/replace %d", args[0]); - } + if(args[0] == 0) + { + args[0] = vj_event_suggest_bundle_id(); + veejay_msg(VEEJAY_MSG_DEBUG, "(VIMS) suggested new Event id %d", args[0]); + } + else + { + veejay_msg(VEEJAY_MSG_DEBUG, "(VIMS) requested to add/replace %d", args[0]); + } - if(args[0] < VIMS_BUNDLE_START|| args[0] > VIMS_BUNDLE_END ) - { - // invalid bundle - veejay_msg(VEEJAY_MSG_ERROR, "Customized events range from %d-%d", VIMS_BUNDLE_START, VIMS_BUNDLE_END); - return; - } - // allocate new - veejay_strrep( s, '_', ' '); - vj_msg_bundle *m = vj_event_bundle_new(s, args[0]); - if(!m) - { - veejay_msg(VEEJAY_MSG_ERROR, "Error adding bundle ?!"); - return; - } + if(args[0] < VIMS_BUNDLE_START|| args[0] > VIMS_BUNDLE_END ) + { + // invalid bundle + veejay_msg(VEEJAY_MSG_ERROR, "Customized events range from %d-%d", VIMS_BUNDLE_START, VIMS_BUNDLE_END); + return; + } + // allocate new + veejay_strrep( s, '_', ' '); + vj_msg_bundle *m = vj_event_bundle_new(s, args[0]); + if(!m) + { + veejay_msg(VEEJAY_MSG_ERROR, "Error adding bundle ?!"); + return; + } - // bye existing bundle - if( vj_event_bundle_exists(args[0])) - { - veejay_msg(VEEJAY_MSG_DEBUG,"(VIMS) Bundle exists - replacing contents "); - vj_msg_bundle *mm = vj_event_bundle_get( args[0] ); - if(mm) - { - m->modifier = mm->modifier; - m->accelerator = mm->accelerator; - } + // bye existing bundle + if( vj_event_bundle_exists(args[0])) + { + veejay_msg(VEEJAY_MSG_DEBUG,"(VIMS) Bundle exists - replacing contents "); + vj_msg_bundle *mm = vj_event_bundle_get( args[0] ); + if(mm) + { + m->modifier = mm->modifier; + m->accelerator = mm->accelerator; + } - vj_event_bundle_del( args[0] ); - } + vj_event_bundle_del( args[0] ); + } - if( vj_event_bundle_store(m)) - { - veejay_msg(VEEJAY_MSG_INFO, "(VIMS) Registered Bundle %d in VIMS",args[0]); - } - else - { - veejay_msg(VEEJAY_MSG_ERROR, "(VIMS) Error in Bundle %d '%s'",args[0],s ); - } + if( vj_event_bundle_store(m)) + { + veejay_msg(VEEJAY_MSG_INFO, "(VIMS) Registered Bundle %d in VIMS",args[0]); + } + else + { + veejay_msg(VEEJAY_MSG_ERROR, "(VIMS) Error in Bundle %d '%s'",args[0],s ); + } } -void vj_event_set_stream_arg( void *ptr, const char format[], va_list ap) +void vj_event_set_stream_arg( void *ptr, const char format[], va_list ap) { - long int tmp = 0; - int base = 10; - int index = 1; - int args[MAX_ARGUMENTS]; - char str[1024]; - char *end = str; - veejay_t *v = (veejay_t*)ptr; - veejay_memset(args,0,sizeof(args)); + long int tmp = 0; + int base = 10; + int index = 1; + int args[MAX_ARGUMENTS]; + char str[1024]; + char *end = str; + veejay_t *v = (veejay_t*)ptr; + veejay_memset(args,0,sizeof(args)); - P_A(args,str,format,ap); + P_A(args,str,format,ap); - while( (tmp = strtol( end, &end, base ))) { - args[index] = (int) tmp; - index ++; - } + while( (tmp = strtol( end, &end, base ))) { + args[index] = (int) tmp; + index ++; + } - int *n_args = &args[1]; + int *n_args = &args[1]; - STREAM_DEFAULTS(args[0]); + STREAM_DEFAULTS(args[0]); - if(STREAM_PLAYING(v)) - { - if( vj_tag_get_type(args[0]) == VJ_TAG_TYPE_GENERATOR ) { - vj_tag_generator_set_arg( args[0], n_args ); - } - } + if(STREAM_PLAYING(v)) + { + if( vj_tag_get_type(args[0]) == VJ_TAG_TYPE_GENERATOR ) { + vj_tag_generator_set_arg( args[0], n_args ); + } + } } -void vj_event_set_stream_color(void *ptr, const char format[], va_list ap) +void vj_event_set_stream_color(void *ptr, const char format[], va_list ap) { - int args[4]; - char *s = NULL; - P_A(args,s,format,ap); - veejay_t *v = (veejay_t*) ptr; - - STREAM_DEFAULTS(args[0]); - // allow changing of color while playing plain/sample - if(vj_tag_exists(args[0]) && vj_tag_get_type(args[0]) == VJ_TAG_TYPE_COLOR ) - { - CLAMPVAL( args[1] ); - CLAMPVAL( args[2] ); - CLAMPVAL( args[3] ); - vj_tag_set_stream_color(args[0],args[1],args[2],args[3]); - } - else - { - veejay_msg(VEEJAY_MSG_ERROR, "Solid stream %d does not exist", - args[0]); - } + int args[4]; + char *s = NULL; + P_A(args,s,format,ap); + veejay_t *v = (veejay_t*) ptr; + + STREAM_DEFAULTS(args[0]); + // allow changing of color while playing plain/sample + if(vj_tag_exists(args[0]) && vj_tag_get_type(args[0]) == VJ_TAG_TYPE_COLOR ) + { + CLAMPVAL( args[1] ); + CLAMPVAL( args[2] ); + CLAMPVAL( args[3] ); + vj_tag_set_stream_color(args[0],args[1],args[2],args[3]); + } + else + { + veejay_msg(VEEJAY_MSG_ERROR, "Solid stream %d does not exist", + args[0]); + } } #ifdef USE_GDK_PIXBUF void vj_event_screenshot(void *ptr, const char format[], va_list ap) { - int args[4]; - char filename[1024]; - P_A(args, filename, format, ap ); - veejay_t *v = (veejay_t*) ptr; + int args[4]; + char filename[1024]; + P_A(args, filename, format, ap ); + veejay_t *v = (veejay_t*) ptr; - char type[5] = { 0 }; + char type[5] = { 0 }; - veejay_get_file_ext( filename, type, sizeof(type)); + veejay_get_file_ext( filename, type, sizeof(type)); - if(args[0] == 0 ) - args[0] = v->video_output_width; - if(args[1] == 0 ) - args[1] = v->video_output_height; - - v->settings->export_image = - vj_picture_prepare_save( filename , type, args[0], args[1] ); - if(v->settings->export_image) - v->uc->hackme = 1; + if(args[0] == 0 ) + args[0] = v->video_output_width; + if(args[1] == 0 ) + args[1] = v->video_output_height; + + v->settings->export_image = + vj_picture_prepare_save( filename , type, args[0], args[1] ); + if(v->settings->export_image) + v->uc->hackme = 1; } #else #ifdef HAVE_JPEG void vj_event_screenshot(void *ptr, const char format[], va_list ap) { - int args[4]; - char filename[1024]; - P_A(args, filename, format, ap ); - veejay_t *v = (veejay_t*) ptr; + int args[4]; + char filename[1024]; + P_A(args, filename, format, ap ); + veejay_t *v = (veejay_t*) ptr; - v->uc->hackme = 1; - v->uc->filename = vj_strdup( filename ); + v->uc->hackme = 1; + v->uc->filename = vj_strdup( filename ); } #endif #endif -void vj_event_quick_bundle( void *ptr, const char format[], va_list ap) +void vj_event_quick_bundle( void *ptr, const char format[], va_list ap) { - vj_event_commit_bundle( (veejay_t*) ptr,0,0); + vj_event_commit_bundle( (veejay_t*) ptr,0,0); } -void vj_event_vloopback_start(void *ptr, const char format[], va_list ap) +void vj_event_vloopback_start(void *ptr, const char format[], va_list ap) { - int args[5]; - char *s = NULL; - char device_name[100]; + int args[5]; + char *s = NULL; + char device_name[100]; - memset( &args, -1, sizeof(args)); + memset( &args, -1, sizeof(args)); - P_A(args,s,format,ap); - - veejay_t *v = (veejay_t*)ptr; + P_A(args,s,format,ap); + + veejay_t *v = (veejay_t*)ptr; - sprintf(device_name, "/dev/video%d", args[0] ); + sprintf(device_name, "/dev/video%d", args[0] ); - veejay_msg(VEEJAY_MSG_INFO, "Open vloopback %s", device_name ); + veejay_msg(VEEJAY_MSG_INFO, "Open vloopback %s", device_name ); - v->vloopback = vj_vloopback_open( device_name, v->effect_frame1, args[1], args[2],vj_vloopback_get_pixfmt( args[3] ) ); - if(v->vloopback == NULL) - { - veejay_msg(VEEJAY_MSG_ERROR, - "Cannot open vloopback %s", device_name ); - return; - } + v->vloopback = vj_vloopback_open( device_name, v->effect_frame1, args[1], args[2],vj_vloopback_get_pixfmt( args[3] ) ); + if(v->vloopback == NULL) + { + veejay_msg(VEEJAY_MSG_ERROR, + "Cannot open vloopback %s", device_name ); + return; + } } -void vj_event_vloopback_stop( void *ptr, const char format[], va_list ap ) +void vj_event_vloopback_stop( void *ptr, const char format[], va_list ap ) { - veejay_t *v = (veejay_t*) ptr; - vj_vloopback_close( v->vloopback ); - v->vloopback = NULL; + veejay_t *v = (veejay_t*) ptr; + vj_vloopback_close( v->vloopback ); + v->vloopback = NULL; } /* * Function that returns the options for a special sample (markers, looptype, speed ...) or @@ -9496,1127 +9498,1127 @@ void vj_event_vloopback_stop( void *ptr, const char format[], va_list ap ) * second parameter is the playmode of this sample to decide if its a video sample or any kind of stream * (for this see comment on void vj_event_send_sample_info(..) */ -void vj_event_send_sample_options ( void *ptr, const char format[], va_list ap ) +void vj_event_send_sample_options ( void *ptr, const char format[], va_list ap ) { - veejay_t *v = (veejay_t*)ptr; - int args[2]; - int id=0; - char *str = NULL; - int failed = 1; + veejay_t *v = (veejay_t*)ptr; + int args[2]; + int id=0; + char *str = NULL; + int failed = 1; - P_A(args,str,format,ap); - - char options[100]; - char prefix[4]; + P_A(args,str,format,ap); + + char options[256]; + char prefix[4]; - char *s_print_buf = get_print_buf(128); - int values[21]; + char *s_print_buf = get_print_buf(128); + int values[21]; - switch(args[1]) - { - case VJ_PLAYBACK_MODE_SAMPLE: + switch(args[1]) + { + case VJ_PLAYBACK_MODE_SAMPLE: - SAMPLE_DEFAULTS(args[0]); - - id = args[0]; + SAMPLE_DEFAULTS(args[0]); + + id = args[0]; - if(sample_exists(id)) - { - /* For gathering sample-infos use the sample_info_t-structure that is defined in /libsample/sampleadm.h */ - sample_info *si = sample_get(id); - if (si) - { - int start = si->first_frame; - int end = si->last_frame; - int speed = si->speed; - int loop = si->looptype; - int marker_start = si->marker_start; - int marker_end = si->marker_end; - int effects_on = si->effect_toggle; - - snprintf( options,sizeof(options),"%06d%06d%03d%02d%06d%06d%01d",start,end,speed,loop,marker_start,marker_end,effects_on); - failed = 0; - snprintf(prefix,sizeof(prefix), "%02d", 0 ); - } - } - break; - case VJ_PLAYBACK_MODE_TAG: + if(sample_exists(id)) + { + /* For gathering sample-infos use the sample_info_t-structure that is defined in /libsample/sampleadm.h */ + sample_info *si = sample_get(id); + if (si) + { + int start = si->first_frame; + int end = si->last_frame; + int speed = si->speed; + int loop = si->looptype; + int marker_start = si->marker_start; + int marker_end = si->marker_end; + int effects_on = si->effect_toggle; + + snprintf( options,sizeof(options),"%06d%06d%03d%02d%06d%06d%01d",start,end,speed,loop,marker_start,marker_end,effects_on); + failed = 0; + snprintf(prefix,sizeof(prefix), "%02d", 0 ); + } + } + break; + case VJ_PLAYBACK_MODE_TAG: - STREAM_DEFAULTS(args[0]); - - id = args[0]; - - if(vj_tag_exists(id)) - { - /* For gathering further informations of the stream first decide which type of stream it is - the types are definded in libstream/vj-tag.h and uses then the structure that is definded in - libstream/vj-tag.h as well as some functions that are defined there */ - vj_tag *si = vj_tag_get(id); - int stream_type = si->source_type; - snprintf(prefix,sizeof(prefix), "%02d", stream_type ); - if (stream_type == VJ_TAG_TYPE_COLOR) - { - int col[3] = {0,0,0}; - col[0] = si->color_r; - col[1] = si->color_g; - col[2] = si->color_b; - - snprintf( options,sizeof(options),"%03d%03d%03d",col[0],col[1],col[2]); - failed = 0; - } - /* this part of returning v4l-properties is here implemented again ('cause there is - * actually a VIMS-command to get these values) to get all necessary stream-infos at - * once so only ONE VIMS-command is needed */ - else if (stream_type == VJ_TAG_TYPE_V4L) - { - vj_tag_get_v4l_properties(id,values); - - snprintf( options,sizeof(options), - "%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d", - values[0], - values[1], - values[2], - values[3], - values[4], - values[5], - values[6], - values[7], - values[8], - values[9], - values[10], - values[11], - values[12], - values[13], - values[14], - values[15], - values[16], - values[17], - values[18], - values[19], - values[20] - ); - failed = 0; - } - else - { - int effects_on = si->effect_toggle; - snprintf( options,sizeof(options), "%01d",effects_on); - failed = 0; - } - } - break; - default: - break; - } + STREAM_DEFAULTS(args[0]); + + id = args[0]; + + if(vj_tag_exists(id)) + { + /* For gathering further informations of the stream first decide which type of stream it is + the types are definded in libstream/vj-tag.h and uses then the structure that is definded in + libstream/vj-tag.h as well as some functions that are defined there */ + vj_tag *si = vj_tag_get(id); + int stream_type = si->source_type; + snprintf(prefix,sizeof(prefix), "%02d", stream_type ); + if (stream_type == VJ_TAG_TYPE_COLOR) + { + int col[3] = {0,0,0}; + col[0] = si->color_r; + col[1] = si->color_g; + col[2] = si->color_b; + + snprintf( options,sizeof(options),"%03d%03d%03d",col[0],col[1],col[2]); + failed = 0; + } + /* this part of returning v4l-properties is here implemented again ('cause there is + * actually a VIMS-command to get these values) to get all necessary stream-infos at + * once so only ONE VIMS-command is needed */ + else if (stream_type == VJ_TAG_TYPE_V4L) + { + vj_tag_get_v4l_properties(id,values); + + snprintf( options,sizeof(options), + "%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d%05d", + values[0], + values[1], + values[2], + values[3], + values[4], + values[5], + values[6], + values[7], + values[8], + values[9], + values[10], + values[11], + values[12], + values[13], + values[14], + values[15], + values[16], + values[17], + values[18], + values[19], + values[20] + ); + failed = 0; + } + else + { + int effects_on = si->effect_toggle; + snprintf( options,sizeof(options), "%01d",effects_on); + failed = 0; + } + } + break; + default: + break; + } - if(failed) - sprintf( s_print_buf, "%05d", 0 ); - else - sprintf( s_print_buf, "%05zu%s%s",strlen(prefix) + strlen(options), prefix,options ); + if(failed) + sprintf( s_print_buf, "%05d", 0 ); + else + sprintf( s_print_buf, "%05zu%s%s",strlen(prefix) + strlen(options), prefix,options ); - SEND_MSG(v , s_print_buf ); - free(s_print_buf); + SEND_MSG(v , s_print_buf ); + free(s_print_buf); } -void vj_event_set_shm_status( void *ptr, const char format[], va_list ap ) +void vj_event_set_shm_status( void *ptr, const char format[], va_list ap ) { - veejay_t *v = (veejay_t*) ptr; - int args[2]; - char *str = NULL; - P_A(args,str,format,ap); - - if(!v->shm) { - //@ try it anyway - v->shm = vj_shm_new_master( v->homedir, v->effect_frame1 ); - if(!v->shm) { - return; - } - } + veejay_t *v = (veejay_t*) ptr; + int args[2]; + char *str = NULL; + P_A(args,str,format,ap); + + if(!v->shm) { + //@ try it anyway + v->shm = vj_shm_new_master( v->homedir, v->effect_frame1 ); + if(!v->shm) { + return; + } + } - if( args[0] == 0 ) { - vj_shm_set_status( v->shm, 0 ); - } else { - vj_shm_set_status( v->shm, 1 ); - } + if( args[0] == 0 ) { + vj_shm_set_status( v->shm, 0 ); + } else { + vj_shm_set_status( v->shm, 1 ); + } } -void vj_event_get_shm( void *ptr, const char format[], va_list ap ) +void vj_event_get_shm( void *ptr, const char format[], va_list ap ) { - veejay_t *v = (veejay_t*)ptr; - char tmp[32]; - if(!v->shm) { - snprintf(tmp,sizeof(tmp)-1,"%016d",0); - SEND_MSG(v, tmp ); - return; - } + veejay_t *v = (veejay_t*)ptr; + char tmp[32]; + if(!v->shm) { + snprintf(tmp,sizeof(tmp)-1,"%016d",0); + SEND_MSG(v, tmp ); + return; + } - snprintf(tmp, sizeof(tmp)-1, "%016d", vj_shm_get_my_id( v->shm ) ); + snprintf(tmp, sizeof(tmp)-1, "%016d", vj_shm_get_my_id( v->shm ) ); - SEND_MSG(v, tmp ); + SEND_MSG(v, tmp ); } -void vj_event_offline_samples(void *ptr, const char format[], va_list ap) +void vj_event_offline_samples(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*)ptr; - int i; - for( i = 0; i < VJ_MAX_CONNECTIONS; i ++ ) { - if( v->rmodes[i] == -1000 ) - continue; - v->rmodes[i] = VJ_PLAYBACK_MODE_SAMPLE; - } - veejay_msg(VEEJAY_MSG_INFO, "Okay, I will force play-mode depending VIMS events to sample mode for link %d", v->uc->current_link); + veejay_t *v = (veejay_t*)ptr; + int i; + for( i = 0; i < VJ_MAX_CONNECTIONS; i ++ ) { + if( v->rmodes[i] == -1000 ) + continue; + v->rmodes[i] = VJ_PLAYBACK_MODE_SAMPLE; + } + veejay_msg(VEEJAY_MSG_INFO, "Okay, I will force play-mode depending VIMS events to sample mode for link %d", v->uc->current_link); } -void vj_event_offline_tags( void *ptr, const char format[], va_list ap ) +void vj_event_offline_tags( void *ptr, const char format[], va_list ap ) { - veejay_t *v = (veejay_t *)ptr; - int i; - for( i = 0; i < VJ_MAX_CONNECTIONS; i ++ ) { - if( v->rmodes[i] == -1000 ) - continue; - v->rmodes[ i ] = VJ_PLAYBACK_MODE_TAG; - } - veejay_msg(VEEJAY_MSG_INFO, "Okay, I will force play-mode depending VIMS events to stream mode for link %d", v->uc->current_link); + veejay_t *v = (veejay_t *)ptr; + int i; + for( i = 0; i < VJ_MAX_CONNECTIONS; i ++ ) { + if( v->rmodes[i] == -1000 ) + continue; + v->rmodes[ i ] = VJ_PLAYBACK_MODE_TAG; + } + veejay_msg(VEEJAY_MSG_INFO, "Okay, I will force play-mode depending VIMS events to stream mode for link %d", v->uc->current_link); } -void vj_event_playmode_rule( void *ptr, const char format[], va_list ap ) +void vj_event_playmode_rule( void *ptr, const char format[], va_list ap ) { - veejay_t *v = (veejay_t *)ptr; - int i; - for( i = 0; i < VJ_MAX_CONNECTIONS; i ++ ) { - if( v->rmodes[i] == -1000 ) { - continue; - } - v->rmodes[ i ] = -1; - } - veejay_msg(VEEJAY_MSG_INFO, "Okay, play-mode depending VIMS for link %d no longer enforced.", v->uc->current_link); + veejay_t *v = (veejay_t *)ptr; + int i; + for( i = 0; i < VJ_MAX_CONNECTIONS; i ++ ) { + if( v->rmodes[i] == -1000 ) { + continue; + } + v->rmodes[ i ] = -1; + } + veejay_msg(VEEJAY_MSG_INFO, "Okay, play-mode depending VIMS for link %d no longer enforced.", v->uc->current_link); } -void vj_event_connect_shm( void *ptr, const char format[], va_list ap ) +void vj_event_connect_shm( void *ptr, const char format[], va_list ap ) { - veejay_t *v = (veejay_t*) ptr; - int args[2]; - char *str = NULL; - P_A(args,str,format,ap); - - if( args[0] == v->uc->port ) { - veejay_msg(0, "Cannot pull info from myself inside VIMS event!"); - return; - } + veejay_t *v = (veejay_t*) ptr; + int args[2]; + char *str = NULL; + P_A(args,str,format,ap); + + if( args[0] == v->uc->port ) { + veejay_msg(0, "Cannot pull info from myself inside VIMS event!"); + return; + } - int32_t key = vj_share_pull_master( v->shm,"127.0.0.1", args[0] ); - int id = veejay_create_tag( v, VJ_TAG_TYPE_GENERATOR, "lvd_shmin.so", v->nstreams, 0, key); - - if( id <= 0 ) { - veejay_msg(0, "Unable to connect to shared resource id %d", key ); - } + int32_t key = vj_share_pull_master( v->shm,"127.0.0.1", args[0] ); + int id = veejay_create_tag( v, VJ_TAG_TYPE_GENERATOR, "lvd_shmin.so", v->nstreams, 0, key); + + if( id <= 0 ) { + veejay_msg(0, "Unable to connect to shared resource id %d", key ); + } } -void vj_event_connect_split_shm( void *ptr, const char format[], va_list ap ) +void vj_event_connect_split_shm( void *ptr, const char format[], va_list ap ) { - veejay_t *v = (veejay_t*) ptr; - int args[2]; - char *str = NULL; - P_A(args,str,format,ap); - - int32_t key = args[0]; - int safe_key = vj_shm_get_id(); + veejay_t *v = (veejay_t*) ptr; + int args[2]; + char *str = NULL; + P_A(args,str,format,ap); + + int32_t key = args[0]; + int safe_key = vj_shm_get_id(); - vj_shm_set_id( key ); + vj_shm_set_id( key ); - veejay_msg(VEEJAY_MSG_INFO,"Shared memory resource %x (%d)", key,key); + veejay_msg(VEEJAY_MSG_INFO,"Shared memory resource %x (%d)", key,key); - int id = veejay_create_tag( v, VJ_TAG_TYPE_GENERATOR, "lvd_shmin.so", v->nstreams, 0, key); - - vj_shm_set_id( safe_key ); - - if( id <= 0 ) { - veejay_msg(0, "Unable to connect to shared resource id %d", key ); - } + int id = veejay_create_tag( v, VJ_TAG_TYPE_GENERATOR, "lvd_shmin.so", v->nstreams, 0, key); + + vj_shm_set_id( safe_key ); + + if( id <= 0 ) { + veejay_msg(0, "Unable to connect to shared resource id %d", key ); + } - veejay_change_playback_mode(v, VJ_PLAYBACK_MODE_TAG ,id); + veejay_change_playback_mode(v, VJ_PLAYBACK_MODE_TAG ,id); } #ifdef HAVE_FREETYPE -void vj_event_get_srt_list( void *ptr, const char format[], va_list ap ) +void vj_event_get_srt_list( void *ptr, const char format[], va_list ap ) { - veejay_t *v = (veejay_t*)ptr; - char *str = NULL; - int len = 0; + veejay_t *v = (veejay_t*)ptr; + char *str = NULL; + int len = 0; - if(!v->font) - { - SEND_MSG(v, "000000" ); - return; - } + if(!v->font) + { + SEND_MSG(v, "000000" ); + return; + } - void *font = vj_font_get_dict( v->font ); - if(!font) { - SEND_MSG(v, "000000" ); - return; - } + void *font = vj_font_get_dict( v->font ); + if(!font) { + SEND_MSG(v, "000000" ); + return; + } - char **list = vj_font_get_sequences( v->font ); - int i; + char **list = vj_font_get_sequences( v->font ); + int i; - if(!list) - { - SEND_MSG(v, "000000" ); - return; - } - - for(i = 0; list[i] != NULL ; i ++ ) - { - int k = strlen(list[i]); - if(k>0) - len += (k+1); - } - if(len <= 0) - { - SEND_MSG(v, "000000" ); - return; - } + if(!list) + { + SEND_MSG(v, "000000" ); + return; + } + + for(i = 0; list[i] != NULL ; i ++ ) + { + int k = strlen(list[i]); + if(k>0) + len += (k+1); + } + if(len <= 0) + { + SEND_MSG(v, "000000" ); + return; + } - for ( i = 0; list[i] != NULL; i ++ ) { } + for ( i = 0; list[i] != NULL; i ++ ) { } - str = vj_calloc( len + (i*2) + 6 ); - char *p = str; - sprintf(p, "%06d", len ); - p += 6; - for(i = 0; list[i] != NULL ; i ++ ) - { - sprintf(p, "%s ", list[i]); - p += strlen(list[i]) + 1; - free(list[i]); - } - free(list); - - SEND_MSG(v , str ); - free(str); + str = vj_calloc( len + (i*2) + 6 ); + char *p = str; + sprintf(p, "%06d", len ); + p += 6; + for(i = 0; list[i] != NULL ; i ++ ) + { + sprintf(p, "%s ", list[i]); + p += strlen(list[i]) + 1; + free(list[i]); + } + free(list); + + SEND_MSG(v , str ); + free(str); } -void vj_event_get_font_list( void *ptr, const char format[], va_list ap ) +void vj_event_get_font_list( void *ptr, const char format[], va_list ap ) { - veejay_t *v = (veejay_t*)ptr; - char *str = NULL; - int len = 0; + veejay_t *v = (veejay_t*)ptr; + char *str = NULL; + int len = 0; - if(!v->font) - { - SEND_MSG(v, "000000" ); - return; - } + if(!v->font) + { + SEND_MSG(v, "000000" ); + return; + } - char **list = vj_font_get_all_fonts( v->font ); - int i; + char **list = vj_font_get_all_fonts( v->font ); + int i; - if(!list) - { - SEND_MSG(v, "000000" ); - return; - } - - for(i = 0; list[i] != NULL ; i ++ ) - { - int k = strlen(list[i]); - if(k>0) - len += (k+3); - } - if(len <= 0) - { - SEND_MSG(v, "000000" ); - return; - } + if(!list) + { + SEND_MSG(v, "000000" ); + return; + } + + for(i = 0; list[i] != NULL ; i ++ ) + { + int k = strlen(list[i]); + if(k>0) + len += (k+3); + } + if(len <= 0) + { + SEND_MSG(v, "000000" ); + return; + } - str = vj_calloc( len + 20 ); - char *p = str; - sprintf(p, "%06d", len ); - p += 6; - for(i = 0; list[i] != NULL ; i ++ ) - { - int k = strlen(list[i]); - sprintf(p, "%03d%s", k,list[i]); - p += (k + 3); - free(list[i]); - } - free(list); - - SEND_MSG(v , str ); - free(str); + str = vj_calloc( len + 20 ); + char *p = str; + sprintf(p, "%06d", len ); + p += 6; + for(i = 0; list[i] != NULL ; i ++ ) + { + int k = strlen(list[i]); + sprintf(p, "%03d%s", k,list[i]); + p += (k + 3); + free(list[i]); + } + free(list); + + SEND_MSG(v , str ); + free(str); } -void vj_event_get_srt_info( void *ptr, const char format[], va_list ap ) +void vj_event_get_srt_info( void *ptr, const char format[], va_list ap ) { - veejay_t *v = (veejay_t*)ptr; - int args[2] = {0,0}; - char *str = NULL; - P_A(args,str,format,ap); + veejay_t *v = (veejay_t*)ptr; + int args[2] = {0,0}; + char *str = NULL; + P_A(args,str,format,ap); - if(!v->font) - { - SEND_MSG(v, "000000"); - return; - } + if(!v->font) + { + SEND_MSG(v, "000000"); + return; + } - char *sequence = vj_font_get_sequence( v->font,args[0] ); + char *sequence = vj_font_get_sequence( v->font,args[0] ); - if(!sequence) - { - SEND_MSG(v, "000000"); - return; + if(!sequence) + { + SEND_MSG(v, "000000"); + return; - } - - int len = strlen( sequence ); - str = vj_calloc( len+20 ); - sprintf(str,"%06d%s",len,sequence); - free(sequence); - - SEND_MSG(v , str ); + } + + int len = strlen( sequence ); + str = vj_calloc( len+20 ); + sprintf(str,"%06d%s",len,sequence); + free(sequence); + + SEND_MSG(v , str ); } -void vj_event_save_srt( void *ptr, const char format[], va_list ap ) +void vj_event_save_srt( void *ptr, const char format[], va_list ap ) { - char file_name[512]; - int args[1]; - veejay_t *v = (veejay_t*)ptr; + char file_name[512]; + int args[1]; + veejay_t *v = (veejay_t*)ptr; - P_A(args,file_name,format,ap); + P_A(args,file_name,format,ap); - if(!v->font) - { - veejay_msg(0, "No font renderer active"); - return; - } + if(!v->font) + { + veejay_msg(0, "No font renderer active"); + return; + } - if( vj_font_save_srt( v->font, file_name ) ) - veejay_msg(VEEJAY_MSG_INFO, "Saved SRT file '%s'", file_name ); - else - veejay_msg(VEEJAY_MSG_ERROR, "Unable to save SRT file '%s'", file_name ); + if( vj_font_save_srt( v->font, file_name ) ) + veejay_msg(VEEJAY_MSG_INFO, "Saved SRT file '%s'", file_name ); + else + veejay_msg(VEEJAY_MSG_ERROR, "Unable to save SRT file '%s'", file_name ); } -void vj_event_load_srt( void *ptr, const char format[], va_list ap ) +void vj_event_load_srt( void *ptr, const char format[], va_list ap ) { - char file_name[512]; - int args[1]; - veejay_t *v = (veejay_t*)ptr; + char file_name[512]; + int args[1]; + veejay_t *v = (veejay_t*)ptr; - P_A(args,file_name,format,ap); + P_A(args,file_name,format,ap); - if(!v->font) - { - veejay_msg(0, "No font renderer active"); - return; - } + if(!v->font) + { + veejay_msg(0, "No font renderer active"); + return; + } - if( vj_font_load_srt( v->font, file_name ) ) - veejay_msg(VEEJAY_MSG_INFO, "Loaded SRT file '%s'", file_name ); - else - veejay_msg(VEEJAY_MSG_ERROR, "Unable to open SRT file '%s'", file_name ); + if( vj_font_load_srt( v->font, file_name ) ) + veejay_msg(VEEJAY_MSG_INFO, "Loaded SRT file '%s'", file_name ); + else + veejay_msg(VEEJAY_MSG_ERROR, "Unable to open SRT file '%s'", file_name ); } -void vj_event_select_subtitle( void *ptr, const char format[], va_list ap ) +void vj_event_select_subtitle( void *ptr, const char format[], va_list ap ) { - int args[6]; - veejay_t *v = (veejay_t*)ptr; + int args[6]; + veejay_t *v = (veejay_t*)ptr; - if(!v->font) - { - veejay_msg(VEEJAY_MSG_ERROR, "No font renderer active"); - return; - } - - P_A(args,NULL,format,ap); + if(!v->font) + { + veejay_msg(VEEJAY_MSG_ERROR, "No font renderer active"); + return; + } + + P_A(args,NULL,format,ap); - vj_font_set_current( v->font, args[0] ); + vj_font_set_current( v->font, args[0] ); } -void vj_event_get_keyframes( void *ptr, const char format[], va_list ap ) +void vj_event_get_keyframes( void *ptr, const char format[], va_list ap ) { - int args[3]; - veejay_t *v = (veejay_t*)ptr; + int args[3]; + veejay_t *v = (veejay_t*)ptr; - P_A(args,NULL,format,ap); + P_A(args,NULL,format,ap); - if(SAMPLE_PLAYING(v)) - { - int data_len = 0; - unsigned char *data = sample_chain_get_kfs( v->uc->sample_id, args[0],args[1], &data_len ); - if( data_len > 0 && data ) - { - char header[32]; - sprintf(header, "%08d",data_len ); - SEND_DATA( v, header,8); - SEND_DATA( v, data, data_len ); - free(data); - return; - } - } - else if (STREAM_PLAYING(v)) - { - int data_len = 0; - unsigned char *data = vj_tag_chain_get_kfs( v->uc->sample_id, args[0],args[1], &data_len ); - if( data_len > 0 && data ) - { - char header[32]; - sprintf(header, "%08d",data_len ); - SEND_DATA( v, header,8); - SEND_DATA( v, data, data_len ); - free(data); - return; - } + if(SAMPLE_PLAYING(v)) + { + int data_len = 0; + unsigned char *data = sample_chain_get_kfs( v->uc->sample_id, args[0],args[1], &data_len ); + if( data_len > 0 && data ) + { + char header[32]; + sprintf(header, "%08d",data_len ); + SEND_DATA( v, header,8); + SEND_DATA( v, data, data_len ); + free(data); + return; + } + } + else if (STREAM_PLAYING(v)) + { + int data_len = 0; + unsigned char *data = vj_tag_chain_get_kfs( v->uc->sample_id, args[0],args[1], &data_len ); + if( data_len > 0 && data ) + { + char header[32]; + sprintf(header, "%08d",data_len ); + SEND_DATA( v, header,8); + SEND_DATA( v, data, data_len ); + free(data); + return; + } - } - SEND_MSG( v, "00000000" ); + } + SEND_MSG( v, "00000000" ); } -void vj_event_set_kf_status_param( void *ptr, const char format[], va_list ap) +void vj_event_set_kf_status_param( void *ptr, const char format[], va_list ap) { - int args[4]; - veejay_t *v = (veejay_t*)ptr; + int args[4]; + veejay_t *v = (veejay_t*)ptr; - P_A(args,NULL,format,ap); + P_A(args,NULL,format,ap); - if(SAMPLE_PLAYING(v)) - { - SAMPLE_DEFAULTS(args[0]); + if(SAMPLE_PLAYING(v)) + { + SAMPLE_DEFAULTS(args[0]); - keyframe_set_param_status( args[0], args[1], args[2], args[3], 1 ); - } - else if (STREAM_PLAYING(v)) - { - STREAM_DEFAULTS(args[0]); - keyframe_set_param_status( args[0], args[1], args[2], args[3], 0 ); - } + keyframe_set_param_status( args[0], args[1], args[2], args[3], 1 ); + } + else if (STREAM_PLAYING(v)) + { + STREAM_DEFAULTS(args[0]); + keyframe_set_param_status( args[0], args[1], args[2], args[3], 0 ); + } } -void vj_event_set_kf_status( void *ptr, const char format[], va_list ap ) +void vj_event_set_kf_status( void *ptr, const char format[], va_list ap ) { - int args[3]; - veejay_t *v = (veejay_t*)ptr; + int args[3]; + veejay_t *v = (veejay_t*)ptr; - P_A(args,NULL,format,ap); + P_A(args,NULL,format,ap); - if(SAMPLE_PLAYING(v)) - { - sample_chain_set_kf_status( v->uc->sample_id, args[0],args[1] ); - sample_set_kf_type( v->uc->sample_id,args[0],args[2]); - veejay_msg(VEEJAY_MSG_INFO, "Sample %d is using animated parameter values", v->uc->sample_id); - } else if (STREAM_PLAYING(v)) - { - vj_tag_chain_set_kf_status(v->uc->sample_id,args[0],args[1] ); - vj_tag_set_kf_type(v->uc->sample_id,args[0],args[2]); - veejay_msg(VEEJAY_MSG_INFO, "Stream %d is using animated parameter values", v->uc->sample_id); + if(SAMPLE_PLAYING(v)) + { + sample_chain_set_kf_status( v->uc->sample_id, args[0],args[1] ); + sample_set_kf_type( v->uc->sample_id,args[0],args[2]); + veejay_msg(VEEJAY_MSG_INFO, "Sample %d is using animated parameter values", v->uc->sample_id); + } else if (STREAM_PLAYING(v)) + { + vj_tag_chain_set_kf_status(v->uc->sample_id,args[0],args[1] ); + vj_tag_set_kf_type(v->uc->sample_id,args[0],args[2]); + veejay_msg(VEEJAY_MSG_INFO, "Stream %d is using animated parameter values", v->uc->sample_id); - } + } } -void vj_event_reset_kf( void *ptr, const char format[], va_list ap ) +void vj_event_reset_kf( void *ptr, const char format[], va_list ap ) { - int args[3]; - veejay_t *v = (veejay_t*)ptr; + int args[3]; + veejay_t *v = (veejay_t*)ptr; - P_A(args,NULL,format,ap); + P_A(args,NULL,format,ap); - if(SAMPLE_PLAYING(v)) - { - sample_chain_reset_kf( v->uc->sample_id, args[0] ); - } else if (STREAM_PLAYING(v)) - { - vj_tag_chain_reset_kf( v->uc->sample_id, args[0] ); - } + if(SAMPLE_PLAYING(v)) + { + sample_chain_reset_kf( v->uc->sample_id, args[0] ); + } else if (STREAM_PLAYING(v)) + { + vj_tag_chain_reset_kf( v->uc->sample_id, args[0] ); + } } -void vj_event_del_keyframes( void *ptr, const char format[], va_list ap ) +void vj_event_del_keyframes( void *ptr, const char format[], va_list ap ) { - int args[3]; - veejay_t *v = (veejay_t*)ptr; + int args[3]; + veejay_t *v = (veejay_t*)ptr; - P_A(args,NULL,format,ap); + P_A(args,NULL,format,ap); - if(SAMPLE_PLAYING(v)) - { - keyframe_clear_entry( v->uc->sample_id, args[0], args[1], 1 ); - } - else if (STREAM_PLAYING(v)) { - keyframe_clear_entry( v->uc->sample_id, args[0], args[1], 0 ); - } + if(SAMPLE_PLAYING(v)) + { + keyframe_clear_entry( v->uc->sample_id, args[0], args[1], 1 ); + } + else if (STREAM_PLAYING(v)) { + keyframe_clear_entry( v->uc->sample_id, args[0], args[1], 0 ); + } } -static void *select_dict( veejay_t *v , int n ) +static void *select_dict( veejay_t *v , int n ) { - if( SAMPLE_PLAYING(v) ) - return sample_get_dict( n ); - else if(STREAM_PLAYING(v)) - return vj_tag_get_dict( n ); - return NULL; + if( SAMPLE_PLAYING(v) ) + return sample_get_dict( n ); + else if(STREAM_PLAYING(v)) + return vj_tag_get_dict( n ); + return NULL; } -void vj_event_add_subtitle( void *ptr, const char format[], va_list ap ) +void vj_event_add_subtitle( void *ptr, const char format[], va_list ap ) { - char text[2048]; - int args[6]; - int k; - veejay_t *v = (veejay_t*)ptr; + char text[2048]; + int args[6]; + int k; + veejay_t *v = (veejay_t*)ptr; - if(!v->font) - { - veejay_msg(VEEJAY_MSG_ERROR, "No font renderer active"); - return; - } + if(!v->font) + { + veejay_msg(VEEJAY_MSG_ERROR, "No font renderer active"); + return; + } - P_A(args,text,format,ap); + P_A(args,text,format,ap); - void *dict = select_dict( v, v->uc->sample_id ); - if(!dict) - { - return; - } + void *dict = select_dict( v, v->uc->sample_id ); + if(!dict) + { + return; + } - int len = strlen( text ); - if ( len <= 0 ) - { - veejay_msg(VEEJAY_MSG_ERROR, "No text given"); - return; - } - for( k = 0; k < len ; k ++ ) { - if( !isprint( text[k] ) ) - text[k] = 0x20; - } - - if( args[3] < 0 || args[4] < 0 || - args[3] >= v->video_output_width || - args[4] >= v->video_output_height ) - { - veejay_msg(VEEJAY_MSG_ERROR, - "Invalid XY position"); - return; - } + int len = strlen( text ); + if ( len <= 0 ) + { + veejay_msg(VEEJAY_MSG_ERROR, "No text given"); + return; + } + for( k = 0; k < len ; k ++ ) { + if( !isprint( text[k] ) ) + text[k] = 0x20; + } + + if( args[3] < 0 || args[4] < 0 || + args[3] >= v->video_output_width || + args[4] >= v->video_output_height ) + { + veejay_msg(VEEJAY_MSG_ERROR, + "Invalid XY position"); + return; + } - vj_font_set_dict( v->font, dict ); + vj_font_set_dict( v->font, dict ); - int id = vj_font_new_text( v->font, (unsigned char*) text, (long) args[1], (long)args[2], args[0] ); - - vj_font_set_position( v->font, args[3] ,args[4] ); + int id = vj_font_new_text( v->font, (unsigned char*) text, (long) args[1], (long)args[2], args[0] ); + + vj_font_set_position( v->font, args[3] ,args[4] ); - char newslot[16]; - sprintf(newslot, "%05d%05d",5, id ); - SEND_MSG(v,newslot); + char newslot[16]; + sprintf(newslot, "%05d%05d",5, id ); + SEND_MSG(v,newslot); } -void vj_event_upd_subtitle( void *ptr, const char format[], va_list ap ) +void vj_event_upd_subtitle( void *ptr, const char format[], va_list ap ) { - int args[5]; - char text[2048]; + int args[5]; + char text[2048]; - veejay_t *v = (veejay_t*)ptr; - P_A(args,text,format,ap); + veejay_t *v = (veejay_t*)ptr; + P_A(args,text,format,ap); - if(!v->font ) - { - veejay_msg(0, "No font renderer active"); - return; - } + if(!v->font ) + { + veejay_msg(0, "No font renderer active"); + return; + } void *dict = select_dict( v, v->uc->sample_id ); if(dict) { - vj_font_set_dict( v->font, dict ); - vj_font_update_text( v->font, (long) args[1], (long) args[2], args[0], text ); - } + vj_font_set_dict( v->font, dict ); + vj_font_update_text( v->font, (long) args[1], (long) args[2], args[0], text ); + } } -void vj_event_del_subtitle( void *ptr, const char format[], va_list ap ) +void vj_event_del_subtitle( void *ptr, const char format[], va_list ap ) { - int args[5]; - veejay_t *v = (veejay_t*)ptr; - P_A(args,NULL,format,ap); - - if(!v->font) - { - veejay_msg(0, "No font renderer active"); - return; - } + int args[5]; + veejay_t *v = (veejay_t*)ptr; + P_A(args,NULL,format,ap); + + if(!v->font) + { + veejay_msg(0, "No font renderer active"); + return; + } void *dict = select_dict( v, v->uc->sample_id ); if(dict) { - vj_font_set_dict( v->font, dict ); - vj_font_del_text( v->font, args[0] ); - } + vj_font_set_dict( v->font, dict ); + vj_font_del_text( v->font, args[0] ); + } } -void vj_event_font_set_position( void *ptr, const char format[], va_list ap ) +void vj_event_font_set_position( void *ptr, const char format[], va_list ap ) { - int args[5]; - veejay_t *v = (veejay_t*)ptr; - P_A(args,NULL,format,ap); + int args[5]; + veejay_t *v = (veejay_t*)ptr; + P_A(args,NULL,format,ap); - if(!v->font) - { - veejay_msg(0, "No font renderer active"); - return; - } + if(!v->font) + { + veejay_msg(0, "No font renderer active"); + return; + } void *dict = select_dict( v, v->uc->sample_id ); if(dict) { - vj_font_set_dict( v->font, dict ); - vj_font_set_position( v->font, args[0] ,args[1] ); - } + vj_font_set_dict( v->font, dict ); + vj_font_set_position( v->font, args[0] ,args[1] ); + } } -void vj_event_font_set_color( void *ptr, const char format[], va_list ap ) +void vj_event_font_set_color( void *ptr, const char format[], va_list ap ) { - int args[6]; - veejay_t *v = (veejay_t*)ptr; - P_A(args,NULL,format,ap); + int args[6]; + veejay_t *v = (veejay_t*)ptr; + P_A(args,NULL,format,ap); - if(!v->font) - { - veejay_msg(0, "No font renderer active"); - return; - } + if(!v->font) + { + veejay_msg(0, "No font renderer active"); + return; + } - void *dict = select_dict( v, v->uc->sample_id ); + void *dict = select_dict( v, v->uc->sample_id ); if(dict) { vj_font_set_dict( v->font, dict ); - switch( args[4] ) - { - case 0: - vj_font_set_outline_and_border(v->font, args[0],args[1] ); - break; - case 1: - vj_font_set_fgcolor( v->font,args[0],args[1],args[2],args[3] ); - break; - case 2: - vj_font_set_bgcolor( v->font,args[0],args[1],args[2],args[3] ); - break; - case 3: - vj_font_set_lncolor( v->font,args[0],args[1],args[2],args[3] ); - break; - default: - veejay_msg(0, "Invalid mode. Use 0=outline/border 1=FG,2=BG,3=LN" ); - break; - } - } + switch( args[4] ) + { + case 0: + vj_font_set_outline_and_border(v->font, args[0],args[1] ); + break; + case 1: + vj_font_set_fgcolor( v->font,args[0],args[1],args[2],args[3] ); + break; + case 2: + vj_font_set_bgcolor( v->font,args[0],args[1],args[2],args[3] ); + break; + case 3: + vj_font_set_lncolor( v->font,args[0],args[1],args[2],args[3] ); + break; + default: + veejay_msg(0, "Invalid mode. Use 0=outline/border 1=FG,2=BG,3=LN" ); + break; + } + } } -void vj_event_font_set_size_and_font( void *ptr, const char format[], va_list ap ) +void vj_event_font_set_size_and_font( void *ptr, const char format[], va_list ap ) { - int args[5]; - veejay_t *v = (veejay_t*)ptr; - P_A(args,NULL,format,ap); + int args[5]; + veejay_t *v = (veejay_t*)ptr; + P_A(args,NULL,format,ap); - if(!v->font) - { - veejay_msg(0, "No font renderer active"); - return; - } + if(!v->font) + { + veejay_msg(0, "No font renderer active"); + return; + } - void *dict = select_dict( v, v->uc->sample_id ); + void *dict = select_dict( v, v->uc->sample_id ); if(dict) { vj_font_set_dict( v->font, dict ); - vj_font_set_size_and_font(v->font, args[0],args[1]); - } + vj_font_set_size_and_font(v->font, args[0],args[1]); + } } #endif static void vj_event_sample_next1( veejay_t *v ) { - if( v->seq->active ){ - int s = (v->settings->current_playback_speed < 0 ? -1 : 1 ); - int p = v->seq->current + s; - if( p < 0 ) p = 0; - int n = v->seq->samples[ p ].sample_id; - int t = v->seq->samples[ p ].type; + if( v->seq->active ){ + int s = (v->settings->current_playback_speed < 0 ? -1 : 1 ); + int p = v->seq->current + s; + if( p < 0 ) p = 0; + int n = v->seq->samples[ p ].sample_id; + int t = v->seq->samples[ p ].type; - if( t == 0 ) { - if( sample_exists( n ) ) { - veejay_set_sample(v, n ); - } - } else { - if( vj_tag_exists( n ) ) { - veejay_set_stream_f(v, n ); - } - } - } - if( SAMPLE_PLAYING(v)) { - int s = (v->settings->current_playback_speed < 0 ? -1 : 1 ); - int n = v->uc->sample_id + s; - if( sample_exists(n) ) { - veejay_set_sample(v,n ); - } else { - n = v->uc->sample_id; - int stop = sample_highest_valid_id(); - while(!sample_exists(n) ) { - n += s; - if( n > stop || n < 1 ) { - return; - } - } - veejay_set_sample(v, n ); - } - } - else if ( STREAM_PLAYING(v)) { - int n = v->uc->sample_id + 1; - if( vj_tag_exists(n) ) { - veejay_change_playback_mode(v, VJ_PLAYBACK_MODE_TAG, n ); - } - else { - n = 1; - int stop = vj_tag_highest_valid_id(); - while( !vj_tag_exists(n) ) { - n ++; - if( n > stop ) { - return; - } - } - veejay_change_playback_mode( v, VJ_PLAYBACK_MODE_TAG, n ); - } - } + if( t == 0 ) { + if( sample_exists( n ) ) { + veejay_set_sample(v, n ); + } + } else { + if( vj_tag_exists( n ) ) { + veejay_set_stream_f(v, n ); + } + } + } + if( SAMPLE_PLAYING(v)) { + int s = (v->settings->current_playback_speed < 0 ? -1 : 1 ); + int n = v->uc->sample_id + s; + if( sample_exists(n) ) { + veejay_set_sample(v,n ); + } else { + n = v->uc->sample_id; + int stop = sample_highest_valid_id(); + while(!sample_exists(n) ) { + n += s; + if( n > stop || n < 1 ) { + return; + } + } + veejay_set_sample(v, n ); + } + } + else if ( STREAM_PLAYING(v)) { + int n = v->uc->sample_id + 1; + if( vj_tag_exists(n) ) { + veejay_change_playback_mode(v, VJ_PLAYBACK_MODE_TAG, n ); + } + else { + n = 1; + int stop = vj_tag_highest_valid_id(); + while( !vj_tag_exists(n) ) { + n ++; + if( n > stop ) { + return; + } + } + veejay_change_playback_mode( v, VJ_PLAYBACK_MODE_TAG, n ); + } + } } -void vj_event_sample_next( void *ptr, const char format[], va_list ap) +void vj_event_sample_next( void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - vj_event_sample_next1( v ); + veejay_t *v = (veejay_t*) ptr; + vj_event_sample_next1( v ); } -void vj_event_sequencer_add_sample( void *ptr, const char format[], va_list ap ) +void vj_event_sequencer_add_sample( void *ptr, const char format[], va_list ap ) { - int args[5]; - veejay_t *v = (veejay_t*)ptr; - P_A(args,NULL,format,ap); + int args[5]; + veejay_t *v = (veejay_t*)ptr; + P_A(args,NULL,format,ap); - int seq = args[0]; - int id = args[1]; - int type = args[2]; + int seq = args[0]; + int id = args[1]; + int type = args[2]; - if( seq < 0 || seq >= MAX_SEQUENCES ) - { - veejay_msg( VEEJAY_MSG_ERROR,"Slot not within bounds"); - return; - } + if( seq < 0 || seq >= MAX_SEQUENCES ) + { + veejay_msg( VEEJAY_MSG_ERROR,"Slot not within bounds"); + return; + } - if( type == 0 ) { - if( sample_exists(id )) - { - v->seq->samples[seq].sample_id = id; - v->seq->samples[seq].type = type; - if( v->seq->size < MAX_SEQUENCES ) - v->seq->size ++; - veejay_msg(VEEJAY_MSG_INFO, "Added sample %d to slot %d/%d",id, seq,MAX_SEQUENCES ); - } - else - { - veejay_msg(VEEJAY_MSG_ERROR, "Sample %d does not exist. It cannot be added to the sequencer",id); - } - } + if( type == 0 ) { + if( sample_exists(id )) + { + v->seq->samples[seq].sample_id = id; + v->seq->samples[seq].type = type; + if( v->seq->size < MAX_SEQUENCES ) + v->seq->size ++; + veejay_msg(VEEJAY_MSG_INFO, "Added sample %d to slot %d/%d",id, seq,MAX_SEQUENCES ); + } + else + { + veejay_msg(VEEJAY_MSG_ERROR, "Sample %d does not exist. It cannot be added to the sequencer",id); + } + } else { - if( vj_tag_exists(id) ) - { - v->seq->samples[seq].sample_id = id; - v->seq->samples[seq].type = type; - if( v->seq->size < MAX_SEQUENCES ) - v->seq->size ++; - veejay_msg(VEEJAY_MSG_INFO, "Added stream %d to slot %d/%d", id, seq, MAX_SEQUENCES ); - } - else - { - veejay_msg(VEEJAY_MSG_ERROR, "Stream %d does not exist. It cannot be added to the sequencer", id ); - } - } + if( vj_tag_exists(id) ) + { + v->seq->samples[seq].sample_id = id; + v->seq->samples[seq].type = type; + if( v->seq->size < MAX_SEQUENCES ) + v->seq->size ++; + veejay_msg(VEEJAY_MSG_INFO, "Added stream %d to slot %d/%d", id, seq, MAX_SEQUENCES ); + } + else + { + veejay_msg(VEEJAY_MSG_ERROR, "Stream %d does not exist. It cannot be added to the sequencer", id ); + } + } } -void vj_event_sequencer_del_sample( void *ptr, const char format[], va_list ap ) +void vj_event_sequencer_del_sample( void *ptr, const char format[], va_list ap ) { - int args[5]; - veejay_t *v = (veejay_t*)ptr; - P_A(args,NULL,format,ap); + int args[5]; + veejay_t *v = (veejay_t*)ptr; + P_A(args,NULL,format,ap); - int seq_it = args[0]; + int seq_it = args[0]; - if( seq_it == -1 ) { - int i; - for( i = 0; i < MAX_SEQUENCES; i ++ ) - { - v->seq->samples[i].sample_id = 0; - v->seq->samples[i].type = 0; - } - v->seq->active = 0; - v->seq->current = 0; + if( seq_it == -1 ) { + int i; + for( i = 0; i < MAX_SEQUENCES; i ++ ) + { + v->seq->samples[i].sample_id = 0; + v->seq->samples[i].type = 0; + } + v->seq->active = 0; + v->seq->current = 0; - veejay_msg(VEEJAY_MSG_INFO, "Deleted all sequences"); - return; - } + veejay_msg(VEEJAY_MSG_INFO, "Deleted all sequences"); + return; + } - if( seq_it < 0 || seq_it >= MAX_SEQUENCES ) - { - veejay_msg( VEEJAY_MSG_ERROR, "Sequence slot %d is not used, nothing deleted",seq_it ); - return; - } + if( seq_it < 0 || seq_it >= MAX_SEQUENCES ) + { + veejay_msg( VEEJAY_MSG_ERROR, "Sequence slot %d is not used, nothing deleted",seq_it ); + return; + } - if( v->seq->samples[ seq_it ].sample_id ) - { - veejay_msg(VEEJAY_MSG_INFO, "Deleted sequence %d (Sample %d)", seq_it, v->seq->samples[ seq_it ].sample_id ); - v->seq->samples[ seq_it ].sample_id = 0; - v->seq->samples[ seq_it ].type = 0; - } - else - { - veejay_msg(VEEJAY_MSG_ERROR, "Sequence slot %d already empty", seq_it ); - } + if( v->seq->samples[ seq_it ].sample_id ) + { + veejay_msg(VEEJAY_MSG_INFO, "Deleted sequence %d (Sample %d)", seq_it, v->seq->samples[ seq_it ].sample_id ); + v->seq->samples[ seq_it ].sample_id = 0; + v->seq->samples[ seq_it ].type = 0; + } + else + { + veejay_msg(VEEJAY_MSG_ERROR, "Sequence slot %d already empty", seq_it ); + } } -void vj_event_get_sample_sequences( void *ptr, const char format[], va_list ap ) +void vj_event_get_sample_sequences( void *ptr, const char format[], va_list ap ) { - veejay_t *v = (veejay_t*)ptr; - int i; + veejay_t *v = (veejay_t*)ptr; + int i; - if( v->seq->size <= 0 ) - { - SEND_MSG(v,"000000"); - return; - } - - char *s_print_buf = get_print_buf( 32 + (MAX_SEQUENCES*6)); - sprintf(s_print_buf, "%06d%04d%04d%04d", - ( 12 + (6*MAX_SEQUENCES)), - v->seq->current,MAX_SEQUENCES, v->seq->active ); - - for( i =0; i < MAX_SEQUENCES ;i ++ ) - { - char tmp[32]; - sprintf(tmp, "%04d%02d", v->seq->samples[i].sample_id, v->seq->samples[i].type); - veejay_strncat(s_print_buf, tmp, 6 ); - } + if( v->seq->size <= 0 ) + { + SEND_MSG(v,"000000"); + return; + } + + char *s_print_buf = get_print_buf( 32 + (MAX_SEQUENCES*6)); + sprintf(s_print_buf, "%06d%04d%04d%04d", + ( 12 + (6*MAX_SEQUENCES)), + v->seq->current,MAX_SEQUENCES, v->seq->active ); + + for( i =0; i < MAX_SEQUENCES ;i ++ ) + { + char tmp[32]; + sprintf(tmp, "%04d%02d", v->seq->samples[i].sample_id, v->seq->samples[i].type); + veejay_strncat(s_print_buf, tmp, 6 ); + } - SEND_MSG(v, s_print_buf ); - free(s_print_buf); + SEND_MSG(v, s_print_buf ); + free(s_print_buf); } -void vj_event_sample_sequencer_active( void *ptr, const char format[], va_list ap ) +void vj_event_sample_sequencer_active( void *ptr, const char format[], va_list ap ) { - int args[5]; - veejay_t *v = (veejay_t*)ptr; - P_A(args,NULL,format,ap); + int args[5]; + veejay_t *v = (veejay_t*)ptr; + P_A(args,NULL,format,ap); - if( v->seq->size == 0 ) - { - veejay_msg(VEEJAY_MSG_ERROR, "Sequencer list is empty. Please add samples first"); - return; - } + if( v->seq->size == 0 ) + { + veejay_msg(VEEJAY_MSG_ERROR, "Sequencer list is empty. Please add samples first"); + return; + } - if( args[0] == 0 ) - { - v->seq->active = 0; - v->seq->current = 0; - veejay_msg(VEEJAY_MSG_INFO, "Sample sequencer disabled"); - } - else - { - v->seq->active = 1; - veejay_msg(VEEJAY_MSG_INFO, "Sample sequencer enabled"); - } + if( args[0] == 0 ) + { + v->seq->active = 0; + v->seq->current = 0; + veejay_msg(VEEJAY_MSG_INFO, "Sample sequencer disabled"); + } + else + { + v->seq->active = 1; + veejay_msg(VEEJAY_MSG_INFO, "Sample sequencer enabled"); + } } -void vj_event_set_macro_status( void *ptr, const char format[], va_list ap ) +void vj_event_set_macro_status( void *ptr, const char format[], va_list ap ) { - veejay_t *v = (veejay_t*)ptr; - int args[2] = {0,0}; - char *str = NULL; - P_A(args,str,format,ap); + veejay_t *v = (veejay_t*)ptr; + int args[2] = {0,0}; + char *str = NULL; + P_A(args,str,format,ap); - if( args[1] == 0 ) - { - reset_macro_(); - macro_status_ = 0; - args[0] = 0; - macro_line_[0] = -1; - macro_line_[1] = 0; - macro_line_[2] = 0; - veejay_msg(VEEJAY_MSG_INFO, "VIMS Macro reset"); - } - if( args[0] == 0 ) - { - if( macro_port_ ) - { - macro_status_ = 0; - veejay_msg(VEEJAY_MSG_INFO, "VIMS Macro recorder stopped"); - } - } else if (args[0] == 1 ) - { - reset_macro_(); - macro_port_ = vpn(VEVO_ANONYMOUS_PORT); - macro_bank_[ current_macro_ ] = macro_port_; - macro_status_ = 1; - macro_line_[0] = v->settings->current_frame_num; - macro_line_[1] = v->uc->playback_mode; - macro_line_[2] = v->uc->sample_id; + if( args[1] == 0 ) + { + reset_macro_(); + macro_status_ = 0; + args[0] = 0; + macro_line_[0] = -1; + macro_line_[1] = 0; + macro_line_[2] = 0; + veejay_msg(VEEJAY_MSG_INFO, "VIMS Macro reset"); + } + if( args[0] == 0 ) + { + if( macro_port_ ) + { + macro_status_ = 0; + veejay_msg(VEEJAY_MSG_INFO, "VIMS Macro recorder stopped"); + } + } else if (args[0] == 1 ) + { + reset_macro_(); + macro_port_ = vpn(VEVO_ANONYMOUS_PORT); + macro_bank_[ current_macro_ ] = macro_port_; + macro_status_ = 1; + macro_line_[0] = v->settings->current_frame_num; + macro_line_[1] = v->uc->playback_mode; + macro_line_[2] = v->uc->sample_id; - veejay_msg(VEEJAY_MSG_INFO , "VIMS Macro recorder started (replay at %x | frame %ld, id %d | bank %d)", - macro_line_[1], macro_line_[0], macro_line_[2], current_macro_); + veejay_msg(VEEJAY_MSG_INFO , "VIMS Macro recorder started (replay at %x | frame %ld, id %d | bank %d)", + macro_line_[1], macro_line_[0], macro_line_[2], current_macro_); - } - else if (args[0] == 2) - { - if( macro_status_ == 0 && macro_port_ ) - { - macro_status_ = 2; - veejay_msg(VEEJAY_MSG_INFO, "VIMS Macro resuming playback from bank %d", current_macro_); - } - else if( macro_line_[0] >= 0 && macro_port_ != NULL) - { - macro_status_ = 2; - veejay_msg(VEEJAY_MSG_INFO, "VIMS Macro playback (%x| frame %ld, id %d)", - macro_line_[1], macro_line_[0], macro_line_[2]); - veejay_change_playback_mode( v, macro_line_[1],macro_line_[2] ); - veejay_set_frame( v, macro_line_[0] ); - if( veejay_get_debug_level() ) - display_replay_macro_(); - } - else - { - veejay_msg(VEEJAY_MSG_INFO, "VIMS Macro has nothing to playback"); - veejay_msg(VEEJAY_MSG_INFO, "Use CAPS-LOCK modifier to jump to next or previous sample."); - } - } - else if ( args[0] == 3 ) - { - vj_event_sample_next1( v ); - } + } + else if (args[0] == 2) + { + if( macro_status_ == 0 && macro_port_ ) + { + macro_status_ = 2; + veejay_msg(VEEJAY_MSG_INFO, "VIMS Macro resuming playback from bank %d", current_macro_); + } + else if( macro_line_[0] >= 0 && macro_port_ != NULL) + { + macro_status_ = 2; + veejay_msg(VEEJAY_MSG_INFO, "VIMS Macro playback (%x| frame %ld, id %d)", + macro_line_[1], macro_line_[0], macro_line_[2]); + veejay_change_playback_mode( v, macro_line_[1],macro_line_[2] ); + veejay_set_frame( v, macro_line_[0] ); + if( veejay_get_debug_level() ) + display_replay_macro_(); + } + else + { + veejay_msg(VEEJAY_MSG_INFO, "VIMS Macro has nothing to playback"); + veejay_msg(VEEJAY_MSG_INFO, "Use CAPS-LOCK modifier to jump to next or previous sample."); + } + } + else if ( args[0] == 3 ) + { + vj_event_sample_next1( v ); + } } -void vj_event_get_sample_image ( void *ptr, const char format[], va_list ap ) +void vj_event_get_sample_image ( void *ptr, const char format[], va_list ap ) { - veejay_t *v = (veejay_t*)ptr; - int args[4]; - char *str = NULL; - - P_A(args,str,format,ap); + veejay_t *v = (veejay_t*)ptr; + int args[4]; + char *str = NULL; + + P_A(args,str,format,ap); - int max_w = vj_perform_preview_max_width(); - int max_h = vj_perform_preview_max_height(); - - int w = args[2]; - int h = args[3]; + int max_w = vj_perform_preview_max_width(); + int max_h = vj_perform_preview_max_height(); + + int w = args[2]; + int h = args[3]; - int type = args[1]; + int type = args[1]; - if( type == 0 ) { - SAMPLE_DEFAULTS(args[0]); - } - else { - STREAM_DEFAULTS(args[0]); - } + if( type == 0 ) { + SAMPLE_DEFAULTS(args[0]); + } + else { + STREAM_DEFAULTS(args[0]); + } - int id = args[0]; + int id = args[0]; - int startFrame = (type == 0 ? 0 : -1); + int startFrame = (type == 0 ? 0 : -1); - if( w <= 0 || h <= 0 || w >= max_w || h >= max_h ) - { - veejay_msg(0, "Invalid image dimension %dx%d requested (max is %dx%d)",w,h,max_w,max_h ); - SEND_MSG(v, "000000000000" ); - return; - } + if( w <= 0 || h <= 0 || w >= max_w || h >= max_h ) + { + veejay_msg(0, "Invalid image dimension %dx%d requested (max is %dx%d)",w,h,max_w,max_h ); + SEND_MSG(v, "000000000000" ); + return; + } - int dstlen = 0; - - editlist *el = ( type == VJ_PLAYBACK_MODE_SAMPLE ? sample_get_editlist(id) : v->edit_list ); - if( el == NULL && type == VJ_PLAYBACK_MODE_SAMPLE ) { - veejay_msg(0, "No such sample %d", id ); - SEND_MSG(v, "000000000000" ); - return; - } + int dstlen = 0; + + editlist *el = ( type == VJ_PLAYBACK_MODE_SAMPLE ? sample_get_editlist(id) : v->edit_list ); + if( el == NULL && type == VJ_PLAYBACK_MODE_SAMPLE ) { + veejay_msg(0, "No such sample %d", id ); + SEND_MSG(v, "000000000000" ); + return; + } - uint8_t *img[4] = { 0 }; - if( sample_image_buffer == NULL ) { - sample_image_buffer = (uint8_t*) vj_malloc( sizeof(uint8_t) * v->video_output_width * v->video_output_height * 4); - } - if( sample_image_buffer == NULL ) { - veejay_msg(0, "Not enough memory", id ); - SEND_MSG(v, "000000000000" ); - return; - } + uint8_t *img[4] = { 0 }; + if( sample_image_buffer == NULL ) { + sample_image_buffer = (uint8_t*) vj_malloc( sizeof(uint8_t) * v->video_output_width * v->video_output_height * 4); + } + if( sample_image_buffer == NULL ) { + veejay_msg(0, "Not enough memory", id ); + SEND_MSG(v, "000000000000" ); + return; + } - img[0] = sample_image_buffer; - img[1] = img[0] + v->video_output_width * v->video_output_height; - img[2] = img[1] + v->video_output_width * v->video_output_height; + img[0] = sample_image_buffer; + img[1] = img[0] + v->video_output_width * v->video_output_height; + img[2] = img[1] + v->video_output_width * v->video_output_height; - if( startFrame >= 0 ) { - int ret = vj_el_get_video_frame( el, startFrame, img ); - if( ret == 0 ) { - veejay_msg(VEEJAY_MSG_WARNING,"Unable to decode frame 1"); - SEND_MSG(v, "000000000000" ); - return; - } - } - else { - SEND_MSG(v, "000000000000" ); - return; - } + if( startFrame >= 0 ) { + int ret = vj_el_get_video_frame( el, startFrame, img ); + if( ret == 0 ) { + veejay_msg(VEEJAY_MSG_WARNING,"Unable to decode frame 1"); + SEND_MSG(v, "000000000000" ); + return; + } + } + else { + SEND_MSG(v, "000000000000" ); + return; + } - VJFrame *frame = yuv_yuv_template( img[0],img[1],img[2], v->video_output_width, v->video_output_height, - get_ffmpeg_pixfmt( v->pixel_format )); + VJFrame *frame = yuv_yuv_template( img[0],img[1],img[2], v->video_output_width, v->video_output_height, + get_ffmpeg_pixfmt( v->pixel_format )); - if( use_bw_preview_ ) { - vj_fastbw_picture_save_to_mem( - frame, - w, - h, - frame->format ); + if( use_bw_preview_ ) { + vj_fastbw_picture_save_to_mem( + frame, + w, + h, + frame->format ); - dstlen = w * h; - } - else { - vj_fast_picture_save_to_mem( - frame, - w, - h, - frame->format ); - dstlen = (w * h) + ((w*h)/4) + ((w*h)/4); - } + dstlen = w * h; + } + else { + vj_fast_picture_save_to_mem( + frame, + w, + h, + frame->format ); + dstlen = (w * h) + ((w*h)/4) + ((w*h)/4); + } - char header[16]; - snprintf( header,sizeof(header), "%06d%04d%2d", dstlen, args[0],args[1] ); - SEND_DATA(v, header, 12 ); - SEND_DATA(v, vj_perform_get_preview_buffer(), dstlen ); + char header[16]; + snprintf( header,sizeof(header), "%06d%04d%2d", dstlen, args[0],args[1] ); + SEND_DATA(v, header, 12 ); + SEND_DATA(v, vj_perform_get_preview_buffer(), dstlen ); - free(frame); + free(frame); } void vj_event_alpha_composite(void *ptr, const char format[], va_list ap) { - veejay_t *v = (veejay_t*) ptr; - int args[4]; - char *str = NULL; - - P_A(args,str,format,ap); + veejay_t *v = (veejay_t*) ptr; + int args[4]; + char *str = NULL; + + P_A(args,str,format,ap); - if( args[0] == 0 ) { - v->settings->clear_alpha = 0; - v->settings->alpha_value = args[1]; - if(v->settings->alpha_value < 0 ) - v->settings->alpha_value = 0; - else if (v->settings->alpha_value > 255 ) - v->settings->alpha_value = 255; - veejay_msg(VEEJAY_MSG_INFO,"Enabled alpha channel leaking (no clear)"); - } else if (args[0] == 1 ) { - v->settings->clear_alpha = 1; - v->settings->alpha_value = args[1]; - if(v->settings->alpha_value < 0 ) - v->settings->alpha_value = 0; - else if (v->settings->alpha_value > 255 ) - v->settings->alpha_value = 255; - veejay_msg(VEEJAY_MSG_INFO,"New alpha mask every frame (default alpha value is %d)", v->settings->alpha_value); - } + if( args[0] == 0 ) { + v->settings->clear_alpha = 0; + v->settings->alpha_value = args[1]; + if(v->settings->alpha_value < 0 ) + v->settings->alpha_value = 0; + else if (v->settings->alpha_value > 255 ) + v->settings->alpha_value = 255; + veejay_msg(VEEJAY_MSG_INFO,"Enabled alpha channel leaking (no clear)"); + } else if (args[0] == 1 ) { + v->settings->clear_alpha = 1; + v->settings->alpha_value = args[1]; + if(v->settings->alpha_value < 0 ) + v->settings->alpha_value = 0; + else if (v->settings->alpha_value > 255 ) + v->settings->alpha_value = 255; + veejay_msg(VEEJAY_MSG_INFO,"New alpha mask every frame (default alpha value is %d)", v->settings->alpha_value); + } } diff --git a/veejay-current/veejay-server/veejay/vj-osc.c b/veejay-current/veejay-server/veejay/vj-osc.c index 74e59eac..8e828d73 100644 --- a/veejay-current/veejay-server/veejay/vj-osc.c +++ b/veejay-current/veejay-server/veejay/vj-osc.c @@ -286,7 +286,9 @@ static void osc_add_client(void *context, int arglen, const void *vargs, OSCTime int args[16]; int __a = vj_osc_count_int_arguments(arglen,vargs); int __n = vj_osc_parse_char_arguments(arglen,vargs,str); - memset( args,0,16 ); + + memset( args,0,sizeof(args) ); + str[__n] = '\0'; vj_osc_parse_int_arguments( arglen , vargs , args ); @@ -451,8 +453,6 @@ static void osc_iterate_clients() int res = osc_client_status_send( clnt, cmd ); if( res == 0 ) { - ( port ); - osc_clients[i] = NULL; veejay_msg(VEEJAY_MSG_WARNING,"Failed to send %s",cmd); } free(cmd); @@ -468,7 +468,8 @@ static void osc_vims_method(void *context, int arglen, const void *vargs, OSCTi int args[16]; int __a = vj_osc_count_int_arguments(arglen,vargs); int __n = vj_osc_parse_char_arguments(arglen,vargs,str); - memset( args,0,16 ); + + memset( args,0,sizeof(args) ); str[__n] = '\0'; vj_osc_parse_int_arguments( arglen , vargs , args );