+You can create an input stream to read video coming from a video4linux device, from a pipe
+or from a network socket (both unicast and multicast).
+
option to start an optional multicast frame sender.
+First, you need a multicast route in your routing table. See chapter 3.3 for
+a short introduction
+or consult a howto that disuccess setting up multicast for your operating system.
+
+
+
+
+$ veejay -V 224.0.0.50 -p 5000
+
+
+Start another veejay, and use this command:
+
+
+$ sayVIMS "246:5000 224.0.0.50;"
+
+To create a new input stream. Start more veejays and use sayVIMS with the -p option to give
+it a port offset number.
+
+
Currently there are 4 extra utilities yuv2rawdv , rawdv2yuv , sayVIMS and any2yuv included in the veejay package for encoding
a Y'CBCR 4:2:0 stream to raw DV and vice versa.
diff --git a/veejay-current/man/veejay.1 b/veejay-current/man/veejay.1
index e51070ba..c1609520 100644
--- a/veejay-current/man/veejay.1
+++ b/veejay-current/man/veejay.1
@@ -5,16 +5,18 @@ veejay - a visual (video) instrument and video sampler for GNU/Linux
.B veejay [options] Videofile1 [Videofile2 ... VideofileN]
.SH DESCRIPTION
.B veejay
-can be used to manipulate video in a realtime environment i.e. 'VJ'
-for visual performances or for (automated) interactive video installations.
-It provides mechanisms for simple non-desctructive editing, loop-based
-clip editing (video sampling) ,capturing from multiple streams, direct-to-disk
-recording in various formats , mixing from multiple sources to one
-and network streaming (both unicast and multicast in uncompressed video)
-Also, it can communicate with other sound and/or video applications
-using the Open Sound Control (or through an inhouse protocol called 'VIMS')
-Veejay uses Jack for transporting Audio (currently only output) but its support
-is currently limited.
+Veejay is a visual instrument and realtime video sampler. It allos you
+to "play" the video like you would play a Piano and it allows you to
+record the resulting video directly to disk for immediate playback (video sampling).
+
+Thus, Veejay can be operated live by using the keyboard (which is 100% user definable)
+and remotely over network (both unicast and multicast) using an inhouse message
+system that allows mapping of various protocols on top of it, including OSC.
+
+Veejay is beeing developed in the hope it will be usefull for VJ's , media artists
+theathers and other interested users that want to use Free Software for their
+performances and/or video installations.
+
.TP
.SH Supported video codecs
.TP
diff --git a/veejay-current/tools/sayVIMS.c b/veejay-current/tools/sayVIMS.c
index e1c36e9d..673e5a4e 100644
--- a/veejay-current/tools/sayVIMS.c
+++ b/veejay-current/tools/sayVIMS.c
@@ -55,6 +55,10 @@ static void vj_flush(int frames) {
{
frames -- ;
}
+ if(n == -1)
+ {
+ exit(0);
+ }
}
}
}
@@ -213,6 +217,8 @@ int main(int argc, char *argv[])
bzero( buf, 65535 );
client = vj_client_alloc( 0,0,0 );
+ if(host_name == NULL)
+ host_name = strdup( "localhost" );
if(!vj_client_connect( client, host_name,group_name, port_num ))
{
@@ -258,11 +264,14 @@ int main(int argc, char *argv[])
}
else
{
- if(buf[0]!='#') {
- int len = strlen(buf)-1;
- if(len>0){
- buf[len] = '\0';
- vj_client_send(client,V_CMD,buf);}
+ if(buf[0]!='#')
+ {
+ int len = strlen(buf);
+ if(len>0)
+ {
+ buf[len] = '\0';
+ vj_client_send(client,V_CMD,buf);
+ }
}
}
}
diff --git a/veejay-current/veejay/vj-event.c b/veejay-current/veejay/vj-event.c
index 79996982..a9026c9b 100644
--- a/veejay-current/veejay/vj-event.c
+++ b/veejay-current/veejay/vj-event.c
@@ -1115,7 +1115,7 @@ int vj_event_parse_msg(veejay_t *v, char *msg)
char *tmp = NULL;
- int msg_len = strlen(msg)-1;
+ int msg_len = strlen(msg);
int id = 0;
bzero(args,150);
/* message is at least 5 bytes in length */
@@ -1126,6 +1126,18 @@ int vj_event_parse_msg(veejay_t *v, char *msg)
return 0;
}
+ /* Sometimes, messages can have a trailing sequence of characters (like newline or spaces)*/
+ while( msg[msg_len] != ';' )
+ {
+ msg[msg_len] = '\0';
+ msg_len --;
+ if(msg_len < MSG_MIN_LEN)
+ {
+ veejay_msg(VEEJAY_MSG_ERROR, "(VIMS) Syntax error: Message does not end with ';'");
+ return 0;
+ }
+ }
+
tmp = strndup( msg, 3 );
if( strncasecmp( tmp, "bun", 3) == 0 )
{
@@ -1150,6 +1162,8 @@ int vj_event_parse_msg(veejay_t *v, char *msg)
if( msg[3] != 0x3a || msg[msg_len] != ';' )
{
veejay_msg(VEEJAY_MSG_ERROR,"(VIMS) Syntax error, use \":;\" ");
+ veejay_msg(VEEJAY_MSG_ERROR,"(VIMS) [%s] : '%c' , '%c' ", msg,
+ msg[3], msg[msg_len] );
return 0;
}
@@ -1195,7 +1209,6 @@ int vj_event_parse_msg(veejay_t *v, char *msg)
{
const char *fmt = vj_event_list[id].format;
const int np = vj_event_list[id].num_params;
- int offlen = ((msg_len-4) > 0 ? 4 : msg_len );
int fmt_offset = 1; // fmt offset
int i;
int offset = 0; // arguments offset
@@ -2062,8 +2075,7 @@ int vj_event_register_keyb_event(int event_id, int symbol, int modifier, const
void vj_event_init_network_events()
{
int i;
-
- int net_id;
+ int net_id = 0;
for( i = 1; vj_event_list[i].event_id != 0; i ++ )
{
net_id = vj_event_list[i].event_id;
@@ -2341,7 +2353,7 @@ void vj_event_send_bundles(void *ptr, const char format[], va_list ap)
}
else
{
- const char *buf = "0000";
+ char *buf = "0000";
SEND_MSG(v,buf);
}
}
@@ -2401,7 +2413,7 @@ void vj_event_send_vimslist(void *ptr, const char format[], va_list ap)
}
else
{
- const char *buf = "0000";
+ char *buf = "0000";
SEND_MSG(v,buf);
}
}
@@ -6040,7 +6052,7 @@ void vj_event_tag_rec_offline_start(void *ptr, const char format[], va_list ap)
if( vj_tag_exists(args[0]))
{
char tmp[255];
- char time[20];
+
int format = _recorder_format;
char prefix[40];
sprintf(prefix, "stream-%02d", args[0]);
@@ -6710,7 +6722,7 @@ void vj_event_send_tag_list ( void *ptr, const char format[], va_list ap )
if( ((vj_tag_size()-1) <= 0) || (args[0] >= vj_tag_size()-1))
{
/* there are no tags */
- const char *empty = "00000";
+ char *empty = "00000";
veejay_msg(VEEJAY_MSG_ERROR, "No Streams (%d) or asking for non existing (%d)",
vj_tag_size()-1,args[0]);
SEND_MSG(v, empty);
@@ -7061,7 +7073,7 @@ void vj_event_send_clip_history_list ( void *ptr, const char format[], va_list a
for( entry = 0; entry < CLIP_MAX_RENDER; entry ++ )
{
// check if entry is playable
- void *data = clip_get_user_data( id );
+ //void *data = clip_get_user_data( id );
editlist **el = (editlist**) clip_get_user_data( id );
bzero(hisline,25);
if(el && el[entry])