示例#1
0
/*
 * _remix_track_add_layer_above (env, track, layer, above)
 *
 * Adds 'layer' above 'above'. If above is RemixNone, adds 'layer' on top
 * of 'track'.
 */
RemixLayer *
_remix_track_add_layer_above (RemixEnv * env, RemixTrack * track,
                              RemixLayer * layer, RemixLayer * above)
{
  layer->track = track;
  if (above == RemixNone)
    above = (RemixLayer *)
      (cd_list_last (env, track->layers, CD_TYPE_POINTER)).s_pointer;
  track->layers = cd_list_add_after (env, track->layers, CD_TYPE_POINTER,
				     CD_POINTER(layer), CD_POINTER(above));
  remix_track_optimise (env, track);
  return layer;
}
示例#2
0
文件: remix_gain.c 项目: kfish/remix
/* module init function */
CDList *
__gain_init (RemixEnv * env)
{
  CDList * plugins = cd_list_new (env);

  gain_plugin.process_scheme =
    cd_set_insert (env, gain_plugin.process_scheme, GAIN_ENVELOPE_KEY,
		   CD_POINTER(&gain_envelope_scheme));

  plugins = cd_list_prepend (env, plugins, CD_POINTER(&gain_plugin));

  return plugins;
}
示例#3
0
static CDList *
remix_plugin_init (RemixEnv * env, const char * path)
{
  void * module;
  CDList * l;
  RemixPluginInitFunc init;

  module = dlopen (path, RTLD_NOW);

  if (!module) {
    remix_dprintf ("[remix_plugin_init] Unable to open %s: %s\n", path,
		   dlerror ());
    remix_set_error (env, REMIX_ERROR_SYSTEM);
    return CD_EMPTY_LIST;
  }

  /* Check that this module has not already been loaded (eg. if it is
   * a symlink etc.) */
  for (l = modules_list; l; l = l->next) {
    if (l->data.s_pointer == module) {
      dlclose (module);
      return CD_EMPTY_LIST;
    }
  }

  modules_list = cd_list_append (env, modules_list, CD_POINTER(module));

  if ((init = dlsym (module, "remix_load")) != NULL) {
    return init (env);
  }

  return CD_EMPTY_LIST;
}
示例#4
0
文件: cd_set.c 项目: kfish/remix
CDScalar
cd_set_find (void * ctx, CDSet * set, int key)
{
  CDSet * s = cd_set_find_item (ctx, set, key);
  if (s == NULL) return CD_POINTER(NULL);
  return s->data;
}
示例#5
0
RemixLayer *
_remix_track_remove_layer (RemixEnv * env, RemixTrack * track,
                           RemixLayer * layer)
{
  track->layers = cd_list_remove (env, track->layers, CD_TYPE_POINTER,
				  CD_POINTER(layer));
  remix_track_optimise (env, track);
  return layer;
}
示例#6
0
/* module init function */
CDList *
__sndfile_init (RemixEnv * env)
{
  CDList * plugins = cd_list_new (env);
  int i, count;
  SF_FORMAT_INFO info;
  RemixNamedParameter * param;

  sndfile_reader_plugin.init_scheme =
    cd_set_insert (env, sndfile_reader_plugin.init_scheme, PATH_KEY,
		   CD_POINTER(&path_scheme));

  plugins = cd_list_prepend (env, plugins,
			     CD_POINTER(&sndfile_reader_plugin));

  format_scheme.constraint.list = cd_list_new (env);

  sf_command (NULL, SFC_GET_FORMAT_MAJOR_COUNT, &count, sizeof (int)) ;

  for (i = 0; i < count ; i++) {
    info.format = i ;
    sf_command (NULL, SFC_GET_FORMAT_MAJOR, &info, sizeof (info)) ;

    param = remix_malloc (sizeof(RemixNamedParameter));
    param->name = strdup (info.name);
    param->parameter = CD_INT(info.format);

    format_scheme.constraint.list =
      cd_list_append (env, format_scheme.constraint.list, CD_POINTER(param));
  }

  sndfile_writer_plugin.init_scheme =
    cd_set_insert (env, sndfile_writer_plugin.init_scheme, PATH_KEY,
		   CD_POINTER(&path_scheme));

  plugins = cd_list_prepend (env, plugins,
			     CD_POINTER(&sndfile_writer_plugin));

  return plugins;
}
示例#7
0
文件: cd_set.c 项目: kfish/remix
CDSet *
cd_set_clone (void * ctx, CDSet * set, CDCloneFunc clone)
{
  CDSet * new_set = cd_set_new (ctx);
  CDSet * s;
  void * new_data;

  for (s = set; s; s = s->next) {
    new_data = clone (ctx, s->data.s_pointer);
    new_set = cd_set_insert (ctx, new_set, s->key, CD_POINTER(new_data));
  }

  return new_set;
}
示例#8
0
文件: cd_list.c 项目: kfish/remix
CDList *
cd_list_clone (void * ctx, CDList * list, CDCloneFunc clone)
{
  CDList * new_list = cd_list_new (ctx);
  CDList * l;
  CDScalar new_data;

  for (l = list; l; l = l->next) {
    new_data = CD_POINTER (clone (ctx, l->data.s_pointer));
    new_list = cd_list_append (ctx, new_list, new_data);
  }

  return new_list;
}
示例#9
0
/*
 * gets layer below 'below'. If below is RemixNone, returns lowest layer
 */
RemixLayer *
_remix_track_get_layer_below (RemixEnv * env, RemixTrack * track,
                              RemixLayer * below)
{
  CDList * below_item;
  RemixLayer * layer;

  if (track->layers == NULL) return RemixNone;

  if (below == RemixNone) {
    layer = (RemixLayer *) track->layers->data.s_pointer;
  } else {
    below_item = cd_list_find (env, track->layers, CD_TYPE_POINTER,
			       CD_POINTER(below));
    if (below_item == NULL) return RemixNone;
    below_item = below_item->prev;
    if (below_item == NULL) return RemixNone;
    layer = (RemixLayer *) below_item->data.s_pointer;
  }

  return layer;
}
示例#10
0
/*
 * gets layer above 'above'. If above is RemixNone, returns topmost layer
 */
RemixLayer *
_remix_track_get_layer_above (RemixEnv * env, RemixTrack * track,
                              RemixLayer * above)
{
  CDList * above_item;
  RemixLayer * layer;

  if (track->layers == NULL) return RemixNone;

  if (above == RemixNone) {
    layer = (RemixLayer *)
      (cd_list_last (env, track->layers, CD_TYPE_POINTER)).s_pointer;
  } else {
    above_item = cd_list_find (env, track->layers, CD_TYPE_POINTER,
			       CD_POINTER(above));
    if (above_item == NULL) return RemixNone;
    above_item = above_item->next;
    if (above_item == NULL) return RemixNone;
    layer = (RemixLayer *) above_item->data.s_pointer;
  }

  return layer;
}
示例#11
0
int
main (int argc, char ** argv)
{
  CDList * list, * list2;
  void * ctx;
  int a=1, b=2, d=4, f=6, g=7, k=11;
  int v=22, w=23;
  int z=26;

  ctx = NULL;

  printf ("creating new list\n");
  list = cd_list_new (ctx);
  ildump (ctx, list);

  printf ("appending %d\n", f);
  list = cd_list_append (ctx, list, (CDScalar)(void *)(&f));
  ildump (ctx, list);

  printf ("appending %d\n", k);
  list = cd_list_append (ctx, list, CD_POINTER(&k));
  ildump (ctx, list);

  printf ("inserting %d\n", g);
  list = cd_list_insert (ctx, list, CD_TYPE_POINTER, CD_POINTER(&g), int_gt);
  ildump (ctx, list);

  printf ("inserting %d\n", w);
  list = cd_list_insert (ctx, list, CD_TYPE_POINTER, CD_POINTER(&w), int_gt);
  ildump (ctx, list);

  printf ("inserting %d\n", z);
  list = cd_list_insert (ctx, list, CD_TYPE_POINTER, CD_POINTER(&z), int_gt);
  ildump (ctx, list);

  printf ("inserting %d\n", b);
  list = cd_list_insert (ctx, list, CD_TYPE_POINTER, CD_POINTER(&b), int_gt);
  ildump (ctx, list);

  printf ("prepending %d\n", a);
  list = cd_list_prepend (ctx, list, CD_POINTER(&a));
  ildump (ctx, list);

  printf ("removing %d\n", g);
  list = cd_list_remove (ctx, list, CD_TYPE_POINTER, CD_POINTER(&g));
  ildump (ctx, list);

  printf ("adding %d after %d\n", d, b);
  list = cd_list_add_after (ctx, list, CD_TYPE_POINTER, CD_POINTER(&d),
                            CD_POINTER(&b));
  ildump (ctx, list);

  printf ("adding %d before %d\n", v, w);
  list = cd_list_add_before (ctx, list, CD_TYPE_POINTER, CD_POINTER(&v),
                             CD_POINTER(&w));
  ildump (ctx, list);

  printf ("cloning list\n");
  list2 = cd_list_clone (ctx, list, int_clone);
  ildump (ctx, list2);

  printf ("freeing cloned list\n");
  list2 = cd_list_free_all (ctx, list2);
  ildump (ctx, list2);

  exit (0);
}