mirror of
https://github.com/game-stop/veejay.git
synced 2025-12-22 15:50:01 +01:00
fix FX Anim
This commit is contained in:
@@ -2084,7 +2084,7 @@ void on_curve_buttonstore_clicked(GtkWidget *widget, gpointer user_data )
|
|||||||
int end = get_nums( "curve_spinend" );
|
int end = get_nums( "curve_spinend" );
|
||||||
int start = get_nums( "curve_spinstart" );
|
int start = get_nums( "curve_spinstart" );
|
||||||
|
|
||||||
const int length = end - start + 1;
|
const int length = end - start;
|
||||||
|
|
||||||
|
|
||||||
if( (length) <= 0 || id <= 0 )
|
if( (length) <= 0 || id <= 0 )
|
||||||
@@ -2107,53 +2107,41 @@ void on_curve_buttonstore_clicked(GtkWidget *widget, gpointer user_data )
|
|||||||
type = GTK_CURVE_TYPE_FREE;
|
type = GTK_CURVE_TYPE_FREE;
|
||||||
}
|
}
|
||||||
|
|
||||||
float *data = (float*) vj_calloc(sizeof(float) * length );
|
|
||||||
int *values = (int*) vj_calloc(sizeof(int) * length );
|
|
||||||
|
|
||||||
unsigned char *kkf = (unsigned char*) vj_calloc( (length*4) + 64);
|
|
||||||
unsigned char *buf = (unsigned char*) vj_calloc( (length*4) + 64 );
|
|
||||||
int min=0,max=0;
|
int min=0,max=0;
|
||||||
|
float *data = (float*) vj_calloc( sizeof(float) * length );
|
||||||
|
|
||||||
unsigned char *kf = kkf; //@ reserve space for header
|
_effect_get_minmax( id, &min, &max,j );
|
||||||
|
|
||||||
_effect_get_minmax( id, &min,&max,j );
|
get_points_from_curve( curve, length, data );
|
||||||
|
|
||||||
|
char header[34];
|
||||||
|
|
||||||
|
int msg_len = 25 + (4*length); /*K00000000 */
|
||||||
|
|
||||||
|
snprintf(header,sizeof(header), "K%08dkey%02d%02d%08d%08d%02d",msg_len,i,j,start,end,type );
|
||||||
|
|
||||||
|
char *buf = (char*) vj_calloc( sizeof(char) * msg_len + 9 );
|
||||||
|
strncpy( buf, header, sizeof(header));
|
||||||
|
|
||||||
|
char *ptr = buf + sizeof(header);
|
||||||
int k;
|
int k;
|
||||||
|
|
||||||
get_points_from_curve( curve, length, data );
|
|
||||||
for( k = 0 ; k < length ; k++ ) {
|
for( k = 0 ; k < length ; k++ ) {
|
||||||
values[k] = (int) ( (float) min + ( data[k] * ((float) max) ));
|
int pval = (int) ( (float) min + ( data[k] * ((float) max) ));
|
||||||
}
|
ptr[0] = pval & 0xff;
|
||||||
int row_len = 3 + 2 + 2 + 8 + 8 + 2;
|
ptr[1] = (pval >> 8) & 0xff;
|
||||||
sprintf( (char*)kf, "key%02d%02d%08d%08d%02d",i,j,start,end,type );
|
ptr[2] = (pval >> 16) & 0xff;
|
||||||
unsigned char *ptr = kkf + row_len;
|
ptr[3] = (pval >> 24) & 0xff;
|
||||||
int total_len = row_len;
|
|
||||||
|
|
||||||
for( k = 0; k < length; k ++ )
|
ptr += 4;
|
||||||
{
|
veejay_msg( VEEJAY_MSG_DEBUG, "(%d/%d) FX set value %d on frame %d",k,length,pval, start+k );
|
||||||
unsigned char *p = ptr + (k*4);
|
|
||||||
p[0] = values[k] & 0xff;
|
|
||||||
p[1] = (values[k] >> 8) & 0xff;
|
|
||||||
p[2] = (values[k] >> 16) & 0xff;
|
|
||||||
p[3] = (values[k] >> 24) & 0xff;
|
|
||||||
|
|
||||||
total_len += 4;
|
|
||||||
|
|
||||||
veejay_msg( VEEJAY_MSG_DEBUG, "(%d/%d) FX set value %d on frame %d",k,length,values[k], start+k );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
free(values);
|
vj_client_send_buf( info->client, V_CMD, buf, msg_len + 9 );
|
||||||
free(data);
|
|
||||||
|
|
||||||
sprintf( buf, "K%08d", total_len );
|
|
||||||
memcpy( buf + 9 , kkf, total_len );
|
|
||||||
vj_client_send_buf( info->client, V_CMD, buf,total_len );
|
|
||||||
free(kkf);
|
|
||||||
free(buf);
|
|
||||||
|
|
||||||
vj_msg( VEEJAY_MSG_INFO, "Saved new animation for parameter %d on entry %d, start at frame %d and end at frame %d",j,i,start,end );
|
vj_msg( VEEJAY_MSG_INFO, "Saved new animation for parameter %d on entry %d, start at frame %d and end at frame %d",j,i,start,end );
|
||||||
|
|
||||||
|
free(buf);
|
||||||
|
free(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
void on_curve_buttonclear_clicked(GtkWidget *widget, gpointer user_data)
|
void on_curve_buttonclear_clicked(GtkWidget *widget, gpointer user_data)
|
||||||
|
|||||||
@@ -49,19 +49,16 @@ int set_points_in_curve_ext( GtkWidget *curve, unsigned char *blob, int id, int
|
|||||||
int start = 0, end =0,type=0;
|
int start = 0, end =0,type=0;
|
||||||
int entry = 0;
|
int entry = 0;
|
||||||
int n = sscanf( (char*) blob, "key%2d%2d%8d%8d%2d", &entry, ¶meter_id, &start, &end,&type );
|
int n = sscanf( (char*) blob, "key%2d%2d%8d%8d%2d", &entry, ¶meter_id, &start, &end,&type );
|
||||||
int len = end - start + 1;
|
int len = end - start;
|
||||||
int i;
|
int i;
|
||||||
int min = 0, max = 0;
|
int min = 0, max = 0;
|
||||||
#ifdef STRICT_CHECKING
|
#ifdef STRICT_CHECKING
|
||||||
assert( fx_entry == entry );
|
assert( fx_entry == entry );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if( len <= 0 )
|
if(n != 5 || len <= 0 )
|
||||||
return -1;
|
|
||||||
|
|
||||||
if(n != 5 )
|
|
||||||
{
|
{
|
||||||
veejay_msg(0, "Error parsing KF headeR");
|
veejay_msg(0, "Error parsing FX Anim KF header");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -69,18 +66,18 @@ int set_points_in_curve_ext( GtkWidget *curve, unsigned char *blob, int id, int
|
|||||||
|
|
||||||
unsigned int k = 0;
|
unsigned int k = 0;
|
||||||
unsigned char *in = blob + 25;
|
unsigned char *in = blob + 25;
|
||||||
float *vec = (float*) vj_calloc(sizeof(float) * (len+1) );
|
float *vec = (float*) vj_calloc(sizeof(float) * len );
|
||||||
for(i = start ; i <= end; i ++ )
|
for(i = start ; i < end; i ++ )
|
||||||
{
|
{
|
||||||
unsigned char *ptr = in + (i * 4);
|
unsigned char *ptr = in + (k * 4);
|
||||||
int value =
|
int value =
|
||||||
( ptr[0] | (ptr[1] << 8) | (ptr[2] << 16) | (ptr[3] << 24) );
|
( ptr[0] | (ptr[1] << 8) | (ptr[2] << 16) | (ptr[3] << 24) );
|
||||||
|
|
||||||
|
|
||||||
float top = 1.0 / (float) max;
|
float top = 1.0 / (float) max;
|
||||||
float val = (float)value * top;
|
float val = (float) min + ( (float)value * top );
|
||||||
|
|
||||||
veejay_msg(4, "FX position %d, value %d", i, value );
|
veejay_msg(4, "Load FX Anim position %d, value %f", i, val );
|
||||||
|
|
||||||
vec[k] = val;
|
vec[k] = val;
|
||||||
k++;
|
k++;
|
||||||
|
|||||||
@@ -1250,7 +1250,6 @@ int sample_get_all_effect_arg(int s1, int position, int *args, int arg_len, int
|
|||||||
int tmp = 0;
|
int tmp = 0;
|
||||||
if(!get_keyframe_value( sample->effect_chain[position]->kf, n_frame, i, &tmp ) ) {
|
if(!get_keyframe_value( sample->effect_chain[position]->kf, n_frame, i, &tmp ) ) {
|
||||||
args[i] = sample->effect_chain[position]->arg[i];
|
args[i] = sample->effect_chain[position]->arg[i];
|
||||||
veejay_msg(4, "%d - FX [%d] P%d : %d", n_frame,position, i, args[i] );
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
args[i] = tmp;
|
args[i] = tmp;
|
||||||
|
|||||||
@@ -808,6 +808,8 @@ static int _vj_verify_msg(vj_server *vje,int link_id, char *buf, int buf_len )
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
i += 9;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
veejay_msg(0, "parse error.");
|
veejay_msg(0, "parse error.");
|
||||||
return 0;
|
return 0;
|
||||||
@@ -890,6 +892,7 @@ static int _vj_parse_msg(vj_server *vje,int link_id, char *buf, int buf_len )
|
|||||||
v[num_msg]->msg = (char*) vj_malloc( sizeof(char) * slen );
|
v[num_msg]->msg = (char*) vj_malloc( sizeof(char) * slen );
|
||||||
memcpy( v[num_msg]->msg, str_ptr, slen );
|
memcpy( v[num_msg]->msg, str_ptr, slen );
|
||||||
v[num_msg]->len = slen;
|
v[num_msg]->len = slen;
|
||||||
|
|
||||||
num_msg++;
|
num_msg++;
|
||||||
|
|
||||||
i += ( 9 + slen );
|
i += ( 9 + slen );
|
||||||
|
|||||||
@@ -98,7 +98,7 @@ unsigned char *keyframe_pack( void *port, int parameter_id, int entry_id, int *r
|
|||||||
free(k_e);
|
free(k_e);
|
||||||
free(k_t);
|
free(k_t);
|
||||||
|
|
||||||
int len = end - start + 1;
|
int len = end - start;
|
||||||
|
|
||||||
result = vj_calloc( (len*4) + 64 );
|
result = vj_calloc( (len*4) + 64 );
|
||||||
|
|
||||||
@@ -106,7 +106,7 @@ unsigned char *keyframe_pack( void *port, int parameter_id, int entry_id, int *r
|
|||||||
|
|
||||||
unsigned char *out = result + 25;
|
unsigned char *out = result + 25;
|
||||||
|
|
||||||
for( i = start; i <= end; i ++ )
|
for( i = start; i < end; i ++ )
|
||||||
{
|
{
|
||||||
char *key = keyframe_id( parameter_id, i );
|
char *key = keyframe_id( parameter_id, i );
|
||||||
int value = 0;
|
int value = 0;
|
||||||
@@ -147,6 +147,8 @@ unsigned char *keyframe_pack( void *port, int parameter_id, int entry_id, int *r
|
|||||||
veejay_msg(VEEJAY_MSG_DEBUG, "KF %p pack: range=%d-%d, FX entry %d, P%d, type %d",
|
veejay_msg(VEEJAY_MSG_DEBUG, "KF %p pack: range=%d-%d, FX entry %d, P%d, type %d",
|
||||||
port,start,end, entry_id,parameter_id, type );
|
port,start,end, entry_id,parameter_id, type );
|
||||||
|
|
||||||
|
vevo_port_dump( port, 0 );
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -169,15 +171,12 @@ int keyframe_unpack( unsigned char *in, int len, int *entry, int lookup, int is
|
|||||||
in += (25);
|
in += (25);
|
||||||
|
|
||||||
unsigned char *ptr = in;
|
unsigned char *ptr = in;
|
||||||
for(i = start ; i <= end; i ++ )
|
for(i = start ; i < end; i ++ )
|
||||||
{
|
{
|
||||||
int value =
|
int value =
|
||||||
( ptr[0] | (ptr[1] << 8) | (ptr[2] << 16) | (ptr[3] << 24) );
|
( ptr[0] | (ptr[1] << 8) | (ptr[2] << 16) | (ptr[3] << 24) );
|
||||||
char *key = keyframe_id( parameter_id, i );
|
char *key = keyframe_id( parameter_id, i );
|
||||||
vevo_property_set( port, key, VEVO_ATOM_TYPE_INT, 1, &value );
|
vevo_property_set( port, key, VEVO_ATOM_TYPE_INT, 1, &value );
|
||||||
#ifdef STRICT_CHECKING
|
|
||||||
veejay_msg(VEEJAY_MSG_DEBUG, "Parameter %d at pos %d has value %d", parameter_id, i, value );
|
|
||||||
#endif
|
|
||||||
ptr += 4;
|
ptr += 4;
|
||||||
free(key);
|
free(key);
|
||||||
}
|
}
|
||||||
@@ -196,6 +195,8 @@ int keyframe_unpack( unsigned char *in, int len, int *entry, int lookup, int is
|
|||||||
|
|
||||||
*entry = fx_entry;
|
*entry = fx_entry;
|
||||||
|
|
||||||
|
vevo_port_dump(port, 0 );
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -269,7 +270,7 @@ int keyframe_xml_pack( xmlNodePtr node, void *port, int parameter_id )
|
|||||||
snprintf(xmlbuf, 100,"%d", type );
|
snprintf(xmlbuf, 100,"%d", type );
|
||||||
xmlNewChild(node, NULL, (const xmlChar*) k_t, xmlbuf );
|
xmlNewChild(node, NULL, (const xmlChar*) k_t, xmlbuf );
|
||||||
|
|
||||||
for( i = start; i <= end; i ++ )
|
for( i = start; i < end; i ++ )
|
||||||
{
|
{
|
||||||
char *key = keyframe_id( parameter_id, i );
|
char *key = keyframe_id( parameter_id, i );
|
||||||
int value = 0;
|
int value = 0;
|
||||||
@@ -376,8 +377,13 @@ int get_keyframe_value(void *port, int n_frame, int parameter_id, int *result )
|
|||||||
char *key = keyframe_id( parameter_id, n_frame );
|
char *key = keyframe_id( parameter_id, n_frame );
|
||||||
|
|
||||||
int error = vevo_property_get( port, key, 0, result );
|
int error = vevo_property_get( port, key, 0, result );
|
||||||
if( error != VEVO_NO_ERROR )
|
if( error != VEVO_NO_ERROR ) {
|
||||||
|
free(key);
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
free(key);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user