mirror of
https://github.com/game-stop/veejay.git
synced 2025-12-18 22:00:00 +01:00
fix
This commit is contained in:
@@ -75,7 +75,7 @@ void* deal_with_ff( void *handle, char *name )
|
|||||||
if( q == NULL )
|
if( q == NULL )
|
||||||
{
|
{
|
||||||
veejay_msg(VEEJAY_MSG_ERROR,"\tBad FreeFrame plugin '%s': %s", name, dlerror());
|
veejay_msg(VEEJAY_MSG_ERROR,"\tBad FreeFrame plugin '%s': %s", name, dlerror());
|
||||||
vevo_port_free( port );
|
vpf( port );
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -84,7 +84,7 @@ void* deal_with_ff( void *handle, char *name )
|
|||||||
if ((q(FF_GETPLUGINCAPS, (LPVOID)FF_CAP_V_BITS_VIDEO, 0)).ivalue != FF_TRUE)
|
if ((q(FF_GETPLUGINCAPS, (LPVOID)FF_CAP_V_BITS_VIDEO, 0)).ivalue != FF_TRUE)
|
||||||
{
|
{
|
||||||
veejay_msg(VEEJAY_MSG_ERROR, "FreeFrame plugin '%s' cannot handle 32 bit",name);
|
veejay_msg(VEEJAY_MSG_ERROR, "FreeFrame plugin '%s' cannot handle 32 bit",name);
|
||||||
vevo_port_free(port);
|
vpf(port);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -92,7 +92,7 @@ void* deal_with_ff( void *handle, char *name )
|
|||||||
if (pis->APIMajorVersion < 1)
|
if (pis->APIMajorVersion < 1)
|
||||||
{
|
{
|
||||||
veejay_msg(VEEJAY_MSG_ERROR, "Cowardly refusing FreeFrame API version < 1.0 (%s)",name );
|
veejay_msg(VEEJAY_MSG_ERROR, "Cowardly refusing FreeFrame API version < 1.0 (%s)",name );
|
||||||
vevo_port_free(port);
|
vpf(port);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -100,7 +100,7 @@ void* deal_with_ff( void *handle, char *name )
|
|||||||
if ( (q(FF_INITIALISE, NULL, 0 )).ivalue == FF_FAIL )
|
if ( (q(FF_INITIALISE, NULL, 0 )).ivalue == FF_FAIL )
|
||||||
{
|
{
|
||||||
veejay_msg(VEEJAY_MSG_ERROR, "Plugin '%s' unable to initialize", name);
|
veejay_msg(VEEJAY_MSG_ERROR, "Plugin '%s' unable to initialize", name);
|
||||||
vevo_port_free(port);
|
vpf(port);
|
||||||
if(plugin_name) free(plugin_name);
|
if(plugin_name) free(plugin_name);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@@ -109,7 +109,7 @@ void* deal_with_ff( void *handle, char *name )
|
|||||||
if( n_params == FF_FAIL )
|
if( n_params == FF_FAIL )
|
||||||
{
|
{
|
||||||
veejay_msg(VEEJAY_MSG_ERROR, "Cannot get number of parameters for plugin %s",name);
|
veejay_msg(VEEJAY_MSG_ERROR, "Cannot get number of parameters for plugin %s",name);
|
||||||
vevo_port_free(port);
|
vpf(port);
|
||||||
if(plugin_name) free(plugin_name);
|
if(plugin_name) free(plugin_name);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -122,7 +122,7 @@ void* deal_with_fr( void *handle, char *name)
|
|||||||
if( f0r_init == NULL )
|
if( f0r_init == NULL )
|
||||||
{
|
{
|
||||||
veejay_msg(VEEJAY_MSG_ERROR,"\tBorked frei0r plugin '%s': %s", name, dlerror());
|
veejay_msg(VEEJAY_MSG_ERROR,"\tBorked frei0r plugin '%s': %s", name, dlerror());
|
||||||
vevo_port_free( port );
|
vpf( port );
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -130,7 +130,7 @@ void* deal_with_fr( void *handle, char *name)
|
|||||||
if( f0r_deinit == NULL )
|
if( f0r_deinit == NULL )
|
||||||
{
|
{
|
||||||
veejay_msg(VEEJAY_MSG_ERROR,"\tBorked frei0r plugin '%s': %s", name, dlerror());
|
veejay_msg(VEEJAY_MSG_ERROR,"\tBorked frei0r plugin '%s': %s", name, dlerror());
|
||||||
vevo_port_free( port );
|
vpf( port );
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -138,7 +138,7 @@ void* deal_with_fr( void *handle, char *name)
|
|||||||
if( f0r_info == NULL )
|
if( f0r_info == NULL )
|
||||||
{
|
{
|
||||||
veejay_msg(VEEJAY_MSG_ERROR,"\tBorked frei0r plugin '%s': %s", name, dlerror());
|
veejay_msg(VEEJAY_MSG_ERROR,"\tBorked frei0r plugin '%s': %s", name, dlerror());
|
||||||
vevo_port_free( port );
|
vpf( port );
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -146,7 +146,7 @@ void* deal_with_fr( void *handle, char *name)
|
|||||||
if( f0r_param == NULL )
|
if( f0r_param == NULL )
|
||||||
{
|
{
|
||||||
veejay_msg(VEEJAY_MSG_ERROR,"\tBorked frei0r plugin '%s': %s", name, dlerror());
|
veejay_msg(VEEJAY_MSG_ERROR,"\tBorked frei0r plugin '%s': %s", name, dlerror());
|
||||||
vevo_port_free( port );
|
vpf( port );
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
//@ gamble
|
//@ gamble
|
||||||
@@ -178,7 +178,7 @@ void* deal_with_fr( void *handle, char *name)
|
|||||||
if( (*f0r_init)() == 0)
|
if( (*f0r_init)() == 0)
|
||||||
{
|
{
|
||||||
veejay_msg(VEEJAY_MSG_ERROR,"\tBorked frei0r plugin '%s': ", name);
|
veejay_msg(VEEJAY_MSG_ERROR,"\tBorked frei0r plugin '%s': ", name);
|
||||||
vevo_port_free( port );
|
vpf( port );
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -187,7 +187,7 @@ void* deal_with_fr( void *handle, char *name)
|
|||||||
if( finfo.frei0r_version != FREI0R_MAJOR_VERSION )
|
if( finfo.frei0r_version != FREI0R_MAJOR_VERSION )
|
||||||
{
|
{
|
||||||
(*f0r_deinit)();
|
(*f0r_deinit)();
|
||||||
vevo_port_free(port);
|
vpf(port);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
int extra = 0;
|
int extra = 0;
|
||||||
|
|||||||
@@ -52,6 +52,34 @@
|
|||||||
|
|
||||||
#define IS_RGB_PALETTE( p ) ( p < 512 ? 1 : 0 )
|
#define IS_RGB_PALETTE( p ) ( p < 512 ? 1 : 0 )
|
||||||
|
|
||||||
|
static char make_valid_char_( const char c )
|
||||||
|
{
|
||||||
|
const char *invalid = " #*,?[]{}";
|
||||||
|
int k = 0;
|
||||||
|
char o = '_';
|
||||||
|
char r = c;
|
||||||
|
for( k = 0; k < 8 ; k ++ )
|
||||||
|
{
|
||||||
|
if ( c == invalid[k] || isspace((unsigned char)c))
|
||||||
|
return o;
|
||||||
|
char l = tolower(c);
|
||||||
|
if(l)
|
||||||
|
r = l;
|
||||||
|
}
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *veejay_valid_osc_name( const char *in )
|
||||||
|
{
|
||||||
|
int n = strlen( in );
|
||||||
|
int k;
|
||||||
|
char *res = strdup( in );
|
||||||
|
for( k = 0; k < n ; k ++ )
|
||||||
|
{
|
||||||
|
res[k] = make_valid_char_( in[k] );
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
static int pref_palette_ = 0;
|
static int pref_palette_ = 0;
|
||||||
static int pref_palette_ffmpeg_ = 0;
|
static int pref_palette_ffmpeg_ = 0;
|
||||||
@@ -121,9 +149,6 @@ static int configure_channel( void *instance, const char *name, int channel_id,
|
|||||||
void *channel = NULL;
|
void *channel = NULL;
|
||||||
int error = 0;
|
int error = 0;
|
||||||
void *pd[4];
|
void *pd[4];
|
||||||
#ifdef STRICT_CHECKING
|
|
||||||
vjf_dump_frame( frame );
|
|
||||||
#endif
|
|
||||||
|
|
||||||
error = vevo_property_get( instance, name, channel_id, &channel );
|
error = vevo_property_get( instance, name, channel_id, &channel );
|
||||||
#ifdef STRICT_CHECKING
|
#ifdef STRICT_CHECKING
|
||||||
@@ -140,40 +165,15 @@ static int configure_channel( void *instance, const char *name, int channel_id,
|
|||||||
#ifdef STRICT_CHECKING
|
#ifdef STRICT_CHECKING
|
||||||
assert( error == LIVIDO_NO_ERROR );
|
assert( error == LIVIDO_NO_ERROR );
|
||||||
#endif
|
#endif
|
||||||
int flags = 0;
|
|
||||||
error = vevo_property_get( channel, "flags",0,&flags );
|
|
||||||
|
|
||||||
pd[0] = (void*) frame->data[0];
|
|
||||||
pd[1] = (void*) frame->data[1];
|
|
||||||
pd[2] = (void*) frame->data[2];
|
|
||||||
pd[3] = (void*) frame->data[3];
|
|
||||||
|
|
||||||
if( flags & LIVIDO_FILTER_CAN_DO_INPLACE ) {
|
|
||||||
if( name[0] =='o' ){ //@ set output_channels to inplace
|
|
||||||
pd[0] = NULL; pd[1] = NULL; pd[2] = NULL; pd[3] = NULL;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if(name[0] == 'i') {
|
|
||||||
VJFrame *tmp = vjf_clone_frame(frame);
|
|
||||||
pd[0] = (void*) tmp->data[0];
|
|
||||||
pd[1] = (void*) tmp->data[1];
|
|
||||||
pd[2] = (void*) tmp->data[2];
|
|
||||||
pd[3] = (void*) tmp->data[3];
|
|
||||||
vjf_dump_frame(tmp);
|
|
||||||
char *stkey = vevo_create_key( "HOST_inplace", channel_id);
|
|
||||||
error = vevo_property_set( channel, stkey, LIVIDO_ATOM_TYPE_VOIDPTR,1,&tmp );
|
|
||||||
#ifdef STRICT_CHECKING
|
|
||||||
assert( error == LIVIDO_NO_ERROR );
|
|
||||||
#endif
|
|
||||||
free(stkey);
|
|
||||||
//@ FIXME: clean data
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
error = vevo_property_set( channel , "timecode", LIVIDO_ATOM_TYPE_DOUBLE,1, &(frame->timecode));
|
error = vevo_property_set( channel , "timecode", LIVIDO_ATOM_TYPE_DOUBLE,1, &(frame->timecode));
|
||||||
#ifdef STRICT_CHECKING
|
#ifdef STRICT_CHECKING
|
||||||
assert( error == LIVIDO_NO_ERROR );
|
assert( error == LIVIDO_NO_ERROR );
|
||||||
#endif
|
#endif
|
||||||
|
pd[0] = (void*) frame->data[0];
|
||||||
|
pd[1] = (void*) frame->data[1];
|
||||||
|
pd[2] = (void*) frame->data[2];
|
||||||
|
pd[3] = (void*) frame->data[3];
|
||||||
|
|
||||||
error = vevo_property_set( channel, "pixel_data",LIVIDO_ATOM_TYPE_VOIDPTR, 4, &pd);
|
error = vevo_property_set( channel, "pixel_data",LIVIDO_ATOM_TYPE_VOIDPTR, 4, &pd);
|
||||||
#ifdef STRICT_CHECKING
|
#ifdef STRICT_CHECKING
|
||||||
@@ -191,8 +191,6 @@ static int configure_channel( void *instance, const char *name, int channel_id,
|
|||||||
chroma_supersample( hsampling, sampler, pd, frame->width,
|
chroma_supersample( hsampling, sampler, pd, frame->width,
|
||||||
frame->height );
|
frame->height );
|
||||||
}
|
}
|
||||||
|
|
||||||
//@ FIXME: must allocate buffer to copy frame 0 to temporary and use temporary frame as input.
|
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@@ -718,11 +716,14 @@ static int init_channel_port(livido_port_t *ptr, livido_port_t *in_channel, int
|
|||||||
}
|
}
|
||||||
|
|
||||||
error = vevo_property_get( ptr, "flags", 0, &flags );
|
error = vevo_property_get( ptr, "flags", 0, &flags );
|
||||||
|
#ifdef STRICT_CHECKING
|
||||||
|
assert( error == LIVIDO_NO_ERROR );
|
||||||
|
#endif
|
||||||
livido_property_set( in_channel, "width", LIVIDO_ATOM_TYPE_INT,1,&w );
|
livido_property_set( in_channel, "width", LIVIDO_ATOM_TYPE_INT,1,&w );
|
||||||
livido_property_set( in_channel, "height", LIVIDO_ATOM_TYPE_INT,1,&h );
|
livido_property_set( in_channel, "height", LIVIDO_ATOM_TYPE_INT,1,&h );
|
||||||
livido_property_set( in_channel, "flags", LIVIDO_ATOM_TYPE_INT,1,&flags );
|
livido_property_set( in_channel, "flags", LIVIDO_ATOM_TYPE_INT,1,&flags );
|
||||||
|
|
||||||
|
|
||||||
error = vevo_property_get( in_channel, "current_palette",0,NULL );
|
error = vevo_property_get( in_channel, "current_palette",0,NULL );
|
||||||
if( error != LIVIDO_NO_ERROR )
|
if( error != LIVIDO_NO_ERROR )
|
||||||
{
|
{
|
||||||
@@ -1019,18 +1020,34 @@ void *livido_plug_init(void *plugin,int w, int h )
|
|||||||
"out_channel_templates", "out_channels",
|
"out_channel_templates", "out_channels",
|
||||||
w,h, 0 );
|
w,h, 0 );
|
||||||
|
|
||||||
|
if( num_out_channels < 0 )
|
||||||
|
{
|
||||||
|
veejay_msg(0, "Require at least 1 output channel");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
int num_in_params = init_ports_from_template(
|
int num_in_params = init_ports_from_template(
|
||||||
filter_instance, filter_templ,
|
filter_instance, filter_templ,
|
||||||
LIVIDO_PORT_TYPE_PARAMETER,
|
LIVIDO_PORT_TYPE_PARAMETER,
|
||||||
"in_parameter_templates", "in_parameters",
|
"in_parameter_templates", "in_parameters",
|
||||||
w,h, 0 );
|
w,h, 0 );
|
||||||
|
|
||||||
|
if( num_in_params < 0 )
|
||||||
|
{
|
||||||
|
veejay_msg(0, "Require at least 0 input parameter");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
int num_out_params = init_ports_from_template(
|
int num_out_params = init_ports_from_template(
|
||||||
filter_instance, filter_templ,
|
filter_instance, filter_templ,
|
||||||
LIVIDO_PORT_TYPE_PARAMETER,
|
LIVIDO_PORT_TYPE_PARAMETER,
|
||||||
"out_parameter_templates", "out_parameters",
|
"out_parameter_templates", "out_parameters",
|
||||||
w,h,0 );
|
w,h,0 );
|
||||||
|
|
||||||
|
if( num_out_params < 0 )
|
||||||
|
{
|
||||||
|
veejay_msg(0, "Require at least 0 output parameters (%d)",
|
||||||
|
num_out_params);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
#ifdef STRICT_CHECKING
|
#ifdef STRICT_CHECKING
|
||||||
assert( num_in_params >= 0 );
|
assert( num_in_params >= 0 );
|
||||||
assert( num_out_params >= 0 );
|
assert( num_out_params >= 0 );
|
||||||
@@ -1093,33 +1110,6 @@ void livido_push_channel( void *instance,const char *key, int n, VJFrame *frame
|
|||||||
configure_channel( instance, key, n, frame );
|
configure_channel( instance, key, n, frame );
|
||||||
}
|
}
|
||||||
|
|
||||||
static void livido_cleanup_channels( void *instance, char *name ) {
|
|
||||||
int np = vevo_property_num_elements( instance, "in_channels" );
|
|
||||||
if( np <= 0 )
|
|
||||||
return;
|
|
||||||
int n = 0;
|
|
||||||
int error = 0;
|
|
||||||
for( n = 0; n < np ; n ++ )
|
|
||||||
{
|
|
||||||
void *port = NULL;
|
|
||||||
error = vevo_property_get( instance, name,n, &port );
|
|
||||||
if( error != LIVIDO_NO_ERROR ) {
|
|
||||||
veejay_msg(0, "__FATAL__ %s",__FUNCTION__ );
|
|
||||||
}
|
|
||||||
|
|
||||||
VJFrame *tmp = NULL;
|
|
||||||
char *stkey = vevo_create_key( "HOST_inplace", n );
|
|
||||||
error = vevo_property_get( port, stkey, 0, &tmp );
|
|
||||||
free(stkey);
|
|
||||||
if( error == LIVIDO_NO_ERROR ) {
|
|
||||||
veejay_msg(0, "Clean %s:%d",name,n);
|
|
||||||
free(tmp->data[0]);
|
|
||||||
free(tmp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//@FIXME: color space / sampling
|
|
||||||
void livido_plug_process( void *instance, double time_code )
|
void livido_plug_process( void *instance, double time_code )
|
||||||
{
|
{
|
||||||
void *filter_templ = NULL;
|
void *filter_templ = NULL;
|
||||||
@@ -1164,10 +1154,6 @@ void livido_plug_process( void *instance, double time_code )
|
|||||||
|
|
||||||
chroma_subsample( hsampling,sampler,pd,w,h );
|
chroma_subsample( hsampling,sampler,pd,w,h );
|
||||||
}
|
}
|
||||||
|
|
||||||
livido_cleanup_channels( instance, "in_channels" );
|
|
||||||
livido_cleanup_channels( instance, "out_channels" );
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void livido_plug_deinit( void *instance )
|
void livido_plug_deinit( void *instance )
|
||||||
@@ -1472,14 +1458,16 @@ void* deal_with_livido( void *handle, const char *name )
|
|||||||
|
|
||||||
livido_setup_f livido_setup = dlsym( handle, "livido_setup" );
|
livido_setup_f livido_setup = dlsym( handle, "livido_setup" );
|
||||||
|
|
||||||
|
return NULL; //@disable
|
||||||
|
/*
|
||||||
#ifndef STRICT_CHECKING
|
#ifndef STRICT_CHECKING
|
||||||
livido_setup_t setup[] = {
|
livido_setup_t setup[] = {
|
||||||
{ (void(*)()) vj_malloc },
|
{ (void(*)()) malloc },
|
||||||
{ (void(*)()) free },
|
{ (void(*)()) free },
|
||||||
{ (void(*)())memset },
|
{ (void(*)())memset },
|
||||||
{ (void(*)())memcpy },
|
{ (void(*)())memcpy },
|
||||||
{ (void(*)())vevo_port_new },
|
{ (void(*)())vevo_port_new },
|
||||||
{ (void(*)())vevo_port_free },
|
{ (void(*)()) },
|
||||||
{ (void(*)())vevo_property_set },
|
{ (void(*)())vevo_property_set },
|
||||||
{ (void(*)())vevo_property_get },
|
{ (void(*)())vevo_property_get },
|
||||||
{ (void(*)())vevo_property_num_elements },
|
{ (void(*)())vevo_property_num_elements },
|
||||||
@@ -1494,7 +1482,7 @@ void* deal_with_livido( void *handle, const char *name )
|
|||||||
{ (void(*)())memset },
|
{ (void(*)())memset },
|
||||||
{ (void(*)())memcpy },
|
{ (void(*)())memcpy },
|
||||||
{ (void(*)())livido_plugin_port_new },
|
{ (void(*)())livido_plugin_port_new },
|
||||||
{ (void(*)())vevo_port_free },
|
{ (void(*)()) },
|
||||||
{ (void(*)())vevo_property_set },
|
{ (void(*)())vevo_property_set },
|
||||||
{ (void(*)())vevo_property_get },
|
{ (void(*)())vevo_property_get },
|
||||||
{ (void(*)())vevo_property_num_elements },
|
{ (void(*)())vevo_property_num_elements },
|
||||||
@@ -1507,12 +1495,13 @@ void* deal_with_livido( void *handle, const char *name )
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
void *livido_plugin = livido_setup( setup, 100 );
|
void *livido_plugin = livido_setup( setup, 100 );
|
||||||
|
|
||||||
#ifdef STRICT_CHECKING
|
#ifdef STRICT_CHECKING
|
||||||
assert( livido_plugin != NULL );
|
assert( livido_plugin != NULL );
|
||||||
#endif
|
#endif
|
||||||
if(!livido_plugin)
|
if(!livido_plugin)
|
||||||
{
|
{
|
||||||
vevo_port_free( port );
|
( port );
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1533,9 +1522,6 @@ void* deal_with_livido( void *handle, const char *name )
|
|||||||
int is_mix = 0;
|
int is_mix = 0;
|
||||||
int n_inputs = livido_property_num_elements( filter_templ, "in_channel_templates" );
|
int n_inputs = livido_property_num_elements( filter_templ, "in_channel_templates" );
|
||||||
|
|
||||||
|
|
||||||
int n_outputs = livido_property_num_elements( filter_templ, "out_channel_templates");
|
|
||||||
|
|
||||||
//@ Now, prefix the name with LVD
|
//@ Now, prefix the name with LVD
|
||||||
plugin_name = get_str_vevo( filter_templ, "name" );
|
plugin_name = get_str_vevo( filter_templ, "name" );
|
||||||
|
|
||||||
@@ -1551,14 +1537,13 @@ void* deal_with_livido( void *handle, const char *name )
|
|||||||
vevo_property_set( port, "num_out_params", VEVO_ATOM_TYPE_INT,1,&n_oparams );
|
vevo_property_set( port, "num_out_params", VEVO_ATOM_TYPE_INT,1,&n_oparams );
|
||||||
vevo_property_set( port, "name", VEVO_ATOM_TYPE_STRING,1, &clone_name );
|
vevo_property_set( port, "name", VEVO_ATOM_TYPE_STRING,1, &clone_name );
|
||||||
vevo_property_set( port, "num_inputs", VEVO_ATOM_TYPE_INT,1, &n_inputs);
|
vevo_property_set( port, "num_inputs", VEVO_ATOM_TYPE_INT,1, &n_inputs);
|
||||||
vevo_property_set( port, "num_outputs",VEVO_ATOM_TYPE_INT,1, &n_outputs);
|
|
||||||
vevo_property_set( port, "info", LIVIDO_ATOM_TYPE_PORTPTR,1,&filter_templ );
|
vevo_property_set( port, "info", LIVIDO_ATOM_TYPE_PORTPTR,1,&filter_templ );
|
||||||
vevo_property_set( port, "HOST_plugin_type", VEVO_ATOM_TYPE_INT,1,&livido_signature_);
|
vevo_property_set( port, "HOST_plugin_type", VEVO_ATOM_TYPE_INT,1,&livido_signature_);
|
||||||
|
|
||||||
free(clone_name);
|
free(clone_name);
|
||||||
free(plugin_name);
|
free(plugin_name);
|
||||||
|
|
||||||
return port;
|
return port;*/
|
||||||
}
|
}
|
||||||
|
|
||||||
void livido_set_pref_palette( int pref_palette )
|
void livido_set_pref_palette( int pref_palette )
|
||||||
@@ -1574,6 +1559,3 @@ void livido_set_pref_palette( int pref_palette )
|
|||||||
void livido_exit( void )
|
void livido_exit( void )
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -43,6 +43,7 @@
|
|||||||
#include <libplugger/ldefs.h>
|
#include <libplugger/ldefs.h>
|
||||||
#include <libplugger/specs/livido.h>
|
#include <libplugger/specs/livido.h>
|
||||||
#include <libyuv/yuvconv.h>
|
#include <libyuv/yuvconv.h>
|
||||||
|
|
||||||
#include <libavutil/avutil.h>
|
#include <libavutil/avutil.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
@@ -66,10 +67,6 @@ static int n_ff_ = 0;
|
|||||||
static int n_fr_ = 0;
|
static int n_fr_ = 0;
|
||||||
static int n_lvd_ = 0;
|
static int n_lvd_ = 0;
|
||||||
static int base_fmt_ = -1;
|
static int base_fmt_ = -1;
|
||||||
static char make_valid_char_( const char c );
|
|
||||||
static char *veejay_valid_osc_name( const char *in );
|
|
||||||
|
|
||||||
static void plug_print_all();
|
|
||||||
|
|
||||||
static int select_f( const struct dirent *d )
|
static int select_f( const struct dirent *d )
|
||||||
{
|
{
|
||||||
@@ -194,11 +191,10 @@ static void add_to_plugin_list( const char *path )
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// veejay_msg(0, "\tOpened plugin '%s' in '%s'", name,path );
|
||||||
|
|
||||||
if(dlsym( handle, "plugMain" ))
|
if(dlsym( handle, "plugMain" ))
|
||||||
{
|
{
|
||||||
veejay_msg(VEEJAY_MSG_INFO, "%d\tOpened FreeFrame plugin '%s' in '%s'",index_,name,path );
|
|
||||||
|
|
||||||
void *plugin = deal_with_ff( handle, name );
|
void *plugin = deal_with_ff( handle, name );
|
||||||
if( plugin )
|
if( plugin )
|
||||||
{
|
{
|
||||||
@@ -209,10 +205,7 @@ static void add_to_plugin_list( const char *path )
|
|||||||
else
|
else
|
||||||
dlclose( handle );
|
dlclose( handle );
|
||||||
} else if(dlsym( handle, "f0r_construct" )) {
|
} else if(dlsym( handle, "f0r_construct" )) {
|
||||||
|
void *plugin = deal_with_fr( handle, name );
|
||||||
veejay_msg(VEEJAY_MSG_INFO, "%d\tSkip Frei0r plugin '%s' in '%s'",index_,name,path );
|
|
||||||
//@FIXME: Fix frei0r loading
|
|
||||||
void *plugin = NULL; // deal_with_fr( handle, name );
|
|
||||||
if( plugin )
|
if( plugin )
|
||||||
{
|
{
|
||||||
index_map_[ index_ ] = plugin;
|
index_map_[ index_ ] = plugin;
|
||||||
@@ -222,9 +215,6 @@ static void add_to_plugin_list( const char *path )
|
|||||||
else
|
else
|
||||||
dlclose( handle );
|
dlclose( handle );
|
||||||
} else if(dlsym( handle, "livido_setup" )) {
|
} else if(dlsym( handle, "livido_setup" )) {
|
||||||
|
|
||||||
veejay_msg(VEEJAY_MSG_INFO, "%d\tOpened LiViDO plugin '%s' in '%s'",index_,name,path );
|
|
||||||
|
|
||||||
void *plugin = deal_with_livido( handle , name );
|
void *plugin = deal_with_livido( handle , name );
|
||||||
if( plugin )
|
if( plugin )
|
||||||
{
|
{
|
||||||
@@ -597,9 +587,7 @@ char *plug_describe( int fx_id )
|
|||||||
error = vevo_property_get( plug, "num_out_params",0,&po );
|
error = vevo_property_get( plug, "num_out_params",0,&po );
|
||||||
error = vevo_property_get( plug, "num_outputs",0,&co );
|
error = vevo_property_get( plug, "num_outputs",0,&co );
|
||||||
error = vevo_property_get( plug, "instance", 0,&instance );
|
error = vevo_property_get( plug, "instance", 0,&instance );
|
||||||
#ifdef STRICT_CHECKING
|
|
||||||
assert( error == VEVO_NO_ERROR);
|
|
||||||
#endif
|
|
||||||
error = vevo_property_get( instance, "filters",0,&filter );
|
error = vevo_property_get( instance, "filters",0,&filter );
|
||||||
#ifdef STRICT_CHECKING
|
#ifdef STRICT_CHECKING
|
||||||
assert( error == VEVO_NO_ERROR );
|
assert( error == VEVO_NO_ERROR );
|
||||||
@@ -632,8 +620,6 @@ char *plug_describe( int fx_id )
|
|||||||
{
|
{
|
||||||
sprintf(key, "q%02d",i);
|
sprintf(key, "q%02d",i);
|
||||||
out_params[i] = flatten_port( plug , key );
|
out_params[i] = flatten_port( plug , key );
|
||||||
if(out_params[i] == NULL )
|
|
||||||
continue;
|
|
||||||
len += strlen(out_params[i])+1;
|
len += strlen(out_params[i])+1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -653,6 +639,21 @@ char *plug_describe( int fx_id )
|
|||||||
"name=%s:description=%s:author=%s:maintainer=%s:license=%s:version=%s:outs=%d:ins=%d",
|
"name=%s:description=%s:author=%s:maintainer=%s:license=%s:version=%s:outs=%d:ins=%d",
|
||||||
name,description,author,maintainer,license,version,co,ci );
|
name,description,author,maintainer,license,version,co,ci );
|
||||||
|
|
||||||
|
char *p = res + strlen(res);
|
||||||
|
|
||||||
|
for( i = 0; i < pi ; i ++ )
|
||||||
|
{
|
||||||
|
sprintf(p, "p%02d=[%s]:", i, in_params[i] );
|
||||||
|
p += strlen(in_params[i]) + 7;
|
||||||
|
free(in_params[i]);
|
||||||
|
}
|
||||||
|
for( i = 0; i < po ; i ++ )
|
||||||
|
{
|
||||||
|
sprintf(p, "q%02d=[%s]:", i, out_params[i] );
|
||||||
|
p += strlen( out_params[i] ) + 7;
|
||||||
|
free(out_params[i]);
|
||||||
|
}
|
||||||
|
|
||||||
free(in_params);
|
free(in_params);
|
||||||
free(out_params);
|
free(out_params);
|
||||||
free(maintainer);
|
free(maintainer);
|
||||||
@@ -713,7 +714,7 @@ void plug_build_name_space( int fx_id, void *fx_instance, void *data, int entry_
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void plug_print_all()
|
void plug_print_all()
|
||||||
{
|
{
|
||||||
int n;
|
int n;
|
||||||
for(n = 0; n < index_ ; n ++ )
|
for(n = 0; n < index_ ; n ++ )
|
||||||
@@ -722,8 +723,6 @@ static void plug_print_all()
|
|||||||
if(fx_name)
|
if(fx_name)
|
||||||
{
|
{
|
||||||
veejay_msg(VEEJAY_MSG_INFO, "\t'FX %s loaded", fx_name );
|
veejay_msg(VEEJAY_MSG_INFO, "\t'FX %s loaded", fx_name );
|
||||||
char *txt = plug_describe(n);
|
|
||||||
printf("%s\n",txt);
|
|
||||||
free(fx_name);
|
free(fx_name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -846,8 +845,6 @@ void plug_push_frame( void *instance, int out, int seq_num, void *frame_info )
|
|||||||
#ifdef STRICT_CHECKING
|
#ifdef STRICT_CHECKING
|
||||||
assert( error == 0 );
|
assert( error == 0 );
|
||||||
#endif
|
#endif
|
||||||
veejay_msg(0,"%s: %s Channel %d",
|
|
||||||
__FUNCTION__, (out ? "Output" : "Input" ), seq_num);
|
|
||||||
(*gpu)( instance, (out ? "out_channels" : "in_channels" ), seq_num, frame );
|
(*gpu)( instance, (out ? "out_channels" : "in_channels" ), seq_num, frame );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -951,124 +948,3 @@ vj_effect *plug_get_plugin( int fx_id ) {
|
|||||||
}
|
}
|
||||||
return vje;
|
return vje;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static char make_valid_char_( const char c )
|
|
||||||
{
|
|
||||||
const char *invalid = " #*,?[]{}";
|
|
||||||
int k = 0;
|
|
||||||
char o = '_';
|
|
||||||
char r = c;
|
|
||||||
for( k = 0; k < 8 ; k ++ )
|
|
||||||
{
|
|
||||||
if ( c == invalid[k] || isspace((unsigned char)c))
|
|
||||||
return o;
|
|
||||||
char l = tolower(c);
|
|
||||||
if(l)
|
|
||||||
r = l;
|
|
||||||
}
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
static char *veejay_valid_osc_name( const char *in )
|
|
||||||
{
|
|
||||||
int n = strlen( in );
|
|
||||||
int k;
|
|
||||||
char *res = strdup( in );
|
|
||||||
for( k = 0; k < n ; k ++ )
|
|
||||||
{
|
|
||||||
res[k] = make_valid_char_( in[k] );
|
|
||||||
}
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
//@FIXME
|
|
||||||
int plug_fx_activate( void *info, int fx_entry, int fx_id )
|
|
||||||
{
|
|
||||||
/* fx_slot_t *slot = (fx_slot_t*) sample_get_fx_port_ptr( info,fx_entry );
|
|
||||||
#ifdef STRICT_CHECKING
|
|
||||||
assert(slot!=NULL);
|
|
||||||
#endif
|
|
||||||
slot->fx_instance = plug_activate( new_fx );
|
|
||||||
if(!slot->fx_instance)
|
|
||||||
{
|
|
||||||
veejay_msg(0, "Unable to initialize plugin %d", new_fx );
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
slot->fx_id = new_fx;
|
|
||||||
slot->id = fx_entry;
|
|
||||||
char tmp[128];
|
|
||||||
sprintf( tmp, "Sample%dFX%d", srd->primary_key, fx_entry );
|
|
||||||
slot->frame = strdup( tmp );
|
|
||||||
|
|
||||||
plug_get_defaults( slot->fx_instance, slot->in_values );
|
|
||||||
plug_set_defaults( slot->fx_instance, slot->in_values );
|
|
||||||
|
|
||||||
int i;
|
|
||||||
int n_channels = vevo_property_num_elements( slot->fx_instance, "in_channels" );
|
|
||||||
|
|
||||||
if( n_channels <= 0)
|
|
||||||
{
|
|
||||||
veejay_msg(0, "Veejay cannot handle generator plugins yet");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
for(i=0; i < n_channels; i ++ )
|
|
||||||
sample_fx_set_in_channel(info,fx_entry,i, sample_get_key_ptr(info));
|
|
||||||
|
|
||||||
int pk = 0;
|
|
||||||
vevo_property_get( srd->info_port, "primary_key", 0, &pk );
|
|
||||||
plug_build_name_space( new_fx, slot->fx_instance, srd->user_data, fx_entry ,pk,
|
|
||||||
sample_notify_parameter, info );
|
|
||||||
*/
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
static void sample_osc_print( void *osc_port )
|
|
||||||
{
|
|
||||||
char **osc_events = vevo_list_properties ( osc_port );
|
|
||||||
int i;
|
|
||||||
for( i = 0; osc_events[i] != NULL ; i ++ )
|
|
||||||
{
|
|
||||||
void *osc_info = NULL;
|
|
||||||
int error = vevo_property_get( osc_port, osc_events[i], 0, &osc_info );
|
|
||||||
#ifdef STRICT_CHECKING
|
|
||||||
assert( error == VEVO_NO_ERROR );
|
|
||||||
#endif
|
|
||||||
char *format = get_str_vevo( osc_info, "format" );
|
|
||||||
veejay_msg(VEEJAY_MSG_INFO, "OSC PATH %s",osc_events[i] );
|
|
||||||
char *descr = get_str_vevo( osc_info, "description" );
|
|
||||||
if(descr)
|
|
||||||
{
|
|
||||||
veejay_msg(VEEJAY_MSG_INFO,"\t%s", descr);
|
|
||||||
free(descr);
|
|
||||||
}
|
|
||||||
|
|
||||||
veejay_msg(VEEJAY_MSG_INFO, "\tFormat=%s", format );
|
|
||||||
|
|
||||||
|
|
||||||
if(format)
|
|
||||||
{
|
|
||||||
int n_args = strlen(format);
|
|
||||||
char key[10];
|
|
||||||
int j;
|
|
||||||
for( j = 0; j < n_args ; j ++ )
|
|
||||||
{
|
|
||||||
sprintf(key, "help_%d", j );
|
|
||||||
char *help_str = get_str_vevo( osc_info, key );
|
|
||||||
if(help_str)
|
|
||||||
{
|
|
||||||
veejay_msg(VEEJAY_MSG_INFO,"\t\tArgument %d : %s", j, help_str );
|
|
||||||
free(help_str);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
free(format);
|
|
||||||
}
|
|
||||||
veejay_msg(VEEJAY_MSG_INFO,"\t");
|
|
||||||
free( osc_events[i]);
|
|
||||||
}
|
|
||||||
free(osc_events);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
#include <libplugger/ldefs.h>
|
#include <libplugger/ldefs.h>
|
||||||
#include <libplugger/specs/livido.h>
|
#include <libplugger/specs/livido.h>
|
||||||
#include <libyuv/yuvconv.h>
|
#include <libyuv/yuvconv.h>
|
||||||
#include <libavutil/avutil.h>
|
#include <libavcodec/avcodec.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
@@ -250,70 +250,3 @@ void clone_prop_vevo2( void *port, void *to_port, const char *key, const char *
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static char make_valid_char_( const char c )
|
|
||||||
{
|
|
||||||
const char *invalid = " #*,?[]{}";
|
|
||||||
int k = 0;
|
|
||||||
char o = '_';
|
|
||||||
char r = c;
|
|
||||||
for( k = 0; k < 8 ; k ++ )
|
|
||||||
{
|
|
||||||
if ( c == invalid[k] || isspace((unsigned char)c))
|
|
||||||
return o;
|
|
||||||
char l = tolower(c);
|
|
||||||
if(l)
|
|
||||||
r = l;
|
|
||||||
}
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *veejay_valid_osc_name( const char *in )
|
|
||||||
{
|
|
||||||
int n = strlen( in );
|
|
||||||
int k;
|
|
||||||
char *res = strdup( in );
|
|
||||||
for( k = 0; k < n ; k ++ )
|
|
||||||
{
|
|
||||||
res[k] = make_valid_char_( in[k] );
|
|
||||||
}
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
VJFrame *vjf_clone_frame( VJFrame *v ) {
|
|
||||||
//@ FIXME: embed color/sampling conversion
|
|
||||||
VJFrame *f = (VJFrame*) vj_calloc(sizeof(VJFrame));
|
|
||||||
veejay_memcpy( f, v,sizeof(VJFrame));
|
|
||||||
f->data[0] = (uint8_t*) vj_malloc(sizeof(uint8_t)*v->width*v->height*4);
|
|
||||||
f->data[1] = (uint8_t*) f->data[0] + (v->width*v->height);
|
|
||||||
f->data[2] = (uint8_t*) f->data[1] + (v->width*v->height);
|
|
||||||
f->data[3] = (uint8_t*) f->data[2] + (v->width*v->height);
|
|
||||||
veejay_memcpy( f->data[0], v->data[0], v->len );
|
|
||||||
veejay_memcpy( f->data[1], v->data[1], v->uv_len );
|
|
||||||
veejay_memcpy( f->data[2], v->data[2], v->uv_len );
|
|
||||||
|
|
||||||
return f;
|
|
||||||
}
|
|
||||||
|
|
||||||
void vjf_dump_frame( VJFrame *v ) {
|
|
||||||
|
|
||||||
if( v == NULL ) {
|
|
||||||
veejay_msg(0, "VJFrame <invalid>");
|
|
||||||
} else {
|
|
||||||
veejay_msg(VEEJAY_MSG_DEBUG,"Frame %p: ",v);
|
|
||||||
veejay_msg(VEEJAY_MSG_DEBUG,"\tWidth=%d Height=%d FPS=%2.2f TC=%2.2g",
|
|
||||||
v->width,v->height,v->fps,v->timecode );
|
|
||||||
veejay_msg(VEEJAY_MSG_DEBUG,"\tUV =%dx%d V=%d,H=%d",
|
|
||||||
v->uv_width,v->uv_height,v->shift_v,v->shift_h );
|
|
||||||
veejay_msg(VEEJAY_MSG_DEBUG,"\tSSM =%d Alpha=%d Format=%d Len=%d, UV len=%d, stand=%d",
|
|
||||||
v->ssm, v->alpha, v->format, v->len,v->uv_len, v->stand );
|
|
||||||
veejay_msg(VEEJAY_MSG_DEBUG,"\tData planes = %p,%p,%p", v->data[0],v->data[1],v->data[2]);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
char *vevo_create_key(char *prefix, int val )
|
|
||||||
{
|
|
||||||
char tmp[128];
|
|
||||||
snprintf(tmp,sizeof(tmp),"%s_%d",prefix,val);
|
|
||||||
return strdup(tmp);
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -25,7 +25,4 @@ double *get_dbl_arr_vevo( void *port, const char *key );
|
|||||||
void clone_prop_vevo( void *port, void *to_port, const char *key, const char *as_key );
|
void clone_prop_vevo( void *port, void *to_port, const char *key, const char *as_key );
|
||||||
void util_convertrgba32( uint8_t **data, int w, int h,int in_pix_fmt,int shiftv, void *out_buffer );
|
void util_convertrgba32( uint8_t **data, int w, int h,int in_pix_fmt,int shiftv, void *out_buffer );
|
||||||
void util_convertsrc( void *indata, int w, int h, int out_pix_fmt, uint8_t **data);
|
void util_convertsrc( void *indata, int w, int h, int out_pix_fmt, uint8_t **data);
|
||||||
char *veejay_valid_osc_name( const char *in );
|
|
||||||
void vjf_dump_frame( VJFrame *v );
|
|
||||||
VJFrame *vjf_clone_frame( VJFrame *v );
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user