⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 param.c

📁 video linux conference
💻 C
📖 第 1 页 / 共 2 页
字号:
/***************************************************************************** * param.c: ***************************************************************************** * Copyright (C) 2004 VideoLAN * $Id: param.c 10101 2005-03-02 16:47:31Z robux4 $ * * Authors: Cyril Deguet <asmax@videolan.org> *          code from projectM http://xmms-projectm.sourceforge.net * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA. *****************************************************************************//* Basic Parameter Functions */#include <stdio.h>#include <string.h>#include <stdlib.h>#include <math.h>#include "fatal.h"#include "common.h"#include "splaytree_types.h"#include "splaytree.h"#include "tree_types.h"#include "param_types.h"#include "param.h"#include "expr_types.h"#include "eval.h"#include "engine_vars.h" void reset_param(param_t * param);int is_valid_param_string(char * string); /* true if string is valid variable or function name *//* A splay tree of builtin parameters */splaytree_t * builtin_param_tree = NULL;int insert_param_alt_name(param_t * param, char * alt_name);int insert_builtin_param(param_t * param);/* Private function prototypes */int compare_param(char * name, char * name2);int load_builtin_param_double(char * name, void * engine_val, void * matrix, short int flags, 								double init_val, double upper_bound, double lower_bound, char * alt_name);int load_builtin_param_int(char * name, void * engine_val, short int flags, 								int init_val, int upper_bound, int lower_bound, char * alt_name);								int load_builtin_param_bool(char * name, void * engine_val, short int flags, 								int init_val, char * alt_name);																								param_t * create_param (char * name, short int type, short int flags, void * engine_val, void * matrix,							value_t default_init_val, value_t upper_bound, value_t lower_bound) {  param_t * param = NULL;  param = (param_t*)malloc(sizeof(param_t));   if (param == NULL) {	printf("create_param: out of memory!!!\n");	return NULL;  }    /* Clear name space, think the strncpy statement makes this redundant */  //memset(param->name, 0, MAX_TOKEN_SIZE);  /* Copy given name into parameter structure */  strncpy(param->name, name, MAX_TOKEN_SIZE-1);     /* Assign other entries in a constructor like fashion */  param->type = type;  param->flags = flags;  param->matrix_flag = 0;  param->matrix = matrix;  param->engine_val = engine_val;  param->default_init_val = default_init_val;  //*param->init_val = default_init_val;  param->upper_bound = upper_bound;  param->lower_bound = lower_bound;    /* Return instantiated parameter */  return param;}/* Creates a user defined parameter */param_t * create_user_param(char * name) {  param_t * param;  value_t iv;  value_t ub;  value_t lb;  double * engine_val;    /* Set initial values to default */  iv.double_val = DEFAULT_DOUBLE_IV;  ub.double_val = DEFAULT_DOUBLE_UB;  lb.double_val = DEFAULT_DOUBLE_LB;  /* Argument checks */  if (name == NULL)    return NULL;  /* Allocate space for the engine variable */  if ((engine_val = (double*)malloc(sizeof(double))) == NULL)    return NULL;  (*engine_val) = iv.double_val; /* set some default init value */    /* Create the new user parameter */  if ((param = create_param(name, P_TYPE_DOUBLE, P_FLAG_USERDEF, engine_val, NULL, iv, ub, lb)) == NULL) {    free(engine_val);    return NULL;  }  if (PARAM_DEBUG) printf("create_param: \"%s\" initialized\n", param->name);  /* Return the instantiated parameter */  return param;}/* Initialize the builtin parameter database.   Should only be necessary once */int init_builtin_param_db() {	  /* Create the builtin parameter splay tree (go Sleator...) */  if ((builtin_param_tree = create_splaytree(compare_string, copy_string, free_string)) == NULL) {	  if (PARAM_DEBUG) printf("init_builtin_param_db: failed to initialize database (FATAL)\n");  	  return OUTOFMEM_ERROR;  }   if (PARAM_DEBUG) {	  printf("init_builtin_param: loading database...");	  fflush(stdout);  }    /* Loads all builtin parameters into the database */  if (load_all_builtin_param() < 0) {	if (PARAM_DEBUG) printf("failed loading builtin parameters (FATAL)\n");    return ERROR;  }    if (PARAM_DEBUG) printf("success!\n");	    /* Finished, no errors */  return SUCCESS;}/* Destroy the builtin parameter database.   Generally, do this on projectm exit */int destroy_builtin_param_db() {    splay_traverse(free_param, builtin_param_tree);  destroy_splaytree(builtin_param_tree);  builtin_param_tree = NULL;  return SUCCESS;	}/* Insert a parameter into the database with an alternate name */int insert_param_alt_name(param_t * param, char * alt_name) {    if (param == NULL)    return ERROR;  if (alt_name == NULL)	  return ERROR;  	  splay_insert_link(alt_name, param->name, builtin_param_tree);  return SUCCESS;}param_t * find_builtin_param(char * name) {  /* Null argument checks */  if (name == NULL)	  return NULL;      return splay_find(name, builtin_param_tree);}/* Find a parameter given its name, will create one if not found */param_t * find_param(char * name, preset_t * preset, int flags) {  param_t * param = NULL;  /* Null argument checks */  if (name == NULL)	  return NULL;  if (preset == NULL)	  return NULL;    /* First look in the builtin database */  param = (param_t *)splay_find(name, builtin_param_tree);  /* If the search failed, check the user database */  if (param == NULL) {    param = (param_t*)splay_find(name, preset->user_param_tree);  }  /* If it doesn't exist in the user (or builtin) database and   	  create_flag is set, then make it and insert into the database   */    if ((param == NULL) && (flags & P_CREATE)) {		/* Check if string is valid */    if (!is_valid_param_string(name)) {      if (PARAM_DEBUG) printf("find_param: invalid parameter name:\"%s\"\n", name);      return NULL;    }    /* Now, create the user defined parameter given the passed name */    if ((param = create_user_param(name)) == NULL) {      if (PARAM_DEBUG) printf("find_param: failed to create a new user parameter!\n");      return NULL;    }    /* Finally, insert the new parameter into this preset's proper splaytree */    if (splay_insert(param, param->name, preset->user_param_tree) < 0) {      if (PARAM_DEBUG) printf("PARAM \"%s\" already exists in user parameter tree!\n", param->name);      free_param(param);      return NULL;    }	       }	      /* Return the found (or created) parameter. Note that if P_CREATE is not set, this could be null */  return param;  }/* Compare string name with parameter name */int compare_param(char * name, char * name2) {  int cmpval;  printf("am i used\n");  /* Uses string comparison function */  cmpval = strncmp(name, name2, MAX_TOKEN_SIZE-1);    return cmpval;}/* Loads all builtin parameters, limits are also defined here */int load_all_builtin_param() {  load_builtin_param_double("fRating", (void*)&fRating, NULL, P_FLAG_NONE, 0.0 , 5.0, 0.0, NULL);  load_builtin_param_double("fWaveScale", (void*)&fWaveScale, NULL, P_FLAG_NONE, 0.0, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, NULL);  load_builtin_param_double("gamma", (void*)&fGammaAdj, NULL, P_FLAG_NONE, 0.0, MAX_DOUBLE_SIZE, 0, "fGammaAdj");  load_builtin_param_double("echo_zoom", (void*)&fVideoEchoZoom, NULL, P_FLAG_NONE, 0.0, MAX_DOUBLE_SIZE, 0, "fVideoEchoZoom");  load_builtin_param_double("echo_alpha", (void*)&fVideoEchoAlpha, NULL, P_FLAG_NONE, 0.0, MAX_DOUBLE_SIZE, 0, "fVideoEchoAlpha");  load_builtin_param_double("wave_a", (void*)&fWaveAlpha, NULL, P_FLAG_NONE, 0.0, 1.0, 0, "fWaveAlpha");  load_builtin_param_double("fWaveSmoothing", (void*)&fWaveSmoothing, NULL, P_FLAG_NONE, 0.0, 1.0, -1.0, NULL);    load_builtin_param_double("fModWaveAlphaStart", (void*)&fModWaveAlphaStart, NULL, P_FLAG_NONE, 0.0, 1.0, -1.0, NULL);  load_builtin_param_double("fModWaveAlphaEnd", (void*)&fModWaveAlphaEnd, NULL, P_FLAG_NONE, 0.0, 1.0, -1.0, NULL);  load_builtin_param_double("fWarpAnimSpeed",  (void*)&fWarpAnimSpeed, NULL, P_FLAG_NONE, 0.0, 1.0, -1.0, NULL);  //  load_builtin_param_double("warp", (void*)&warp, warp_mesh, P_FLAG_NONE, 0.0, MAX_DOUBLE_SIZE, 0, NULL);	  load_builtin_param_double("fShader", (void*)&fShader, NULL, P_FLAG_NONE, 0.0, 1.0, -1.0, NULL);  load_builtin_param_double("decay", (void*)&decay, NULL, P_FLAG_NONE, 0.0, 1.0, 0, "fDecay");  load_builtin_param_int("echo_orient", (void*)&nVideoEchoOrientation, P_FLAG_NONE, 0, 3, 0, "nVideoEchoOrientation");  load_builtin_param_int("wave_mode", (void*)&nWaveMode, P_FLAG_NONE, 0, 7, 0, "nWaveMode");    load_builtin_param_bool("wave_additive", (void*)&bAdditiveWaves, P_FLAG_NONE, FALSE, "bAdditiveWaves");  load_builtin_param_bool("bModWaveAlphaByVolume", (void*)&bModWaveAlphaByVolume, P_FLAG_NONE, FALSE, NULL);  load_builtin_param_bool("wave_brighten", (void*)&bMaximizeWaveColor, P_FLAG_NONE, FALSE, "bMaximizeWaveColor");  load_builtin_param_bool("wrap", (void*)&bTexWrap, P_FLAG_NONE, FALSE, "bTexWrap");  load_builtin_param_bool("darken_center", (void*)&bDarkenCenter, P_FLAG_NONE, FALSE, "bDarkenCenter");  load_builtin_param_bool("bRedBlueStereo", (void*)&bRedBlueStereo, P_FLAG_NONE, FALSE, NULL);  load_builtin_param_bool("brighten", (void*)&bBrighten, P_FLAG_NONE, FALSE, "bBrighten");  load_builtin_param_bool("darken", (void*)&bDarken, P_FLAG_NONE, FALSE, "bDarken");  load_builtin_param_bool("solarize", (void*)&bSolarize, P_FLAG_NONE, FALSE, "bSolarize");  load_builtin_param_bool("invert", (void*)&bInvert, P_FLAG_NONE, FALSE, "bInvert");  load_builtin_param_bool("bMotionVectorsOn", (void*)&bMotionVectorsOn, P_FLAG_NONE, FALSE, NULL);  load_builtin_param_bool("wave_dots", (void*)&bWaveDots, P_FLAG_NONE, FALSE, "bWaveDots");  load_builtin_param_bool("wave_thick", (void*)&bWaveThick, P_FLAG_NONE, FALSE, "bWaveThick");       load_builtin_param_double("zoom", (void*)&zoom, zoom_mesh,  P_FLAG_PER_PIXEL |P_FLAG_DONT_FREE_MATRIX, 0.0, MAX_DOUBLE_SIZE, 0, NULL);  load_builtin_param_double("rot", (void*)&rot, rot_mesh,  P_FLAG_PER_PIXEL |P_FLAG_DONT_FREE_MATRIX, 0.0, MAX_DOUBLE_SIZE, MIN_DOUBLE_SIZE, NULL);  load_builtin_param_double("zoomexp", (void*)&zoomexp, zoomexp_mesh,  P_FLAG_PER_PIXEL |P_FLAG_NONE, 0.0, MAX_DOUBLE_SIZE, 0, "fZoomExponent");   load_builtin_param_double("cx", (void*)&cx, cx_mesh, P_FLAG_PER_PIXEL | P_FLAG_DONT_FREE_MATRIX, 0.0, 1.0, 0, NULL);  load_builtin_param_double("cy", (void*)&cy, cy_mesh, P_FLAG_PER_PIXEL | P_FLAG_DONT_FREE_MATRIX, 0.0, 1.0, 0, NULL);  load_builtin_param_double("dx", (void*)&dx, dx_mesh,  P_FLAG_PER_PIXEL | P_FLAG_DONT_FREE_MATRIX, 0.0, MAX_DOUBLE_SIZE, MIN_DOUBLE_SIZE, NULL);  load_builtin_param_double("dy", (void*)&dy, dy_mesh,  P_FLAG_PER_PIXEL |P_FLAG_DONT_FREE_MATRIX, 0.0, MAX_DOUBLE_SIZE, MIN_DOUBLE_SIZE, NULL);  load_builtin_param_double("sx", (void*)&sx, sx_mesh,  P_FLAG_PER_PIXEL |P_FLAG_DONT_FREE_MATRIX, 0.0, MAX_DOUBLE_SIZE, 0, NULL);  load_builtin_param_double("sy", (void*)&sy, sy_mesh,  P_FLAG_PER_PIXEL |P_FLAG_DONT_FREE_MATRIX, 0.0, MAX_DOUBLE_SIZE, 0, NULL);  load_builtin_param_double("wave_r", (void*)&wave_r, NULL, P_FLAG_NONE, 0.0, 1.0, 0.0, NULL);  load_builtin_param_double("wave_g", (void*)&wave_g, NULL, P_FLAG_NONE, 0.0, 1.0, 0.0, NULL);  load_builtin_param_double("wave_b", (void*)&wave_b, NULL, P_FLAG_NONE, 0.0, 1.0, 0.0, NULL);  load_builtin_param_double("wave_x", (void*)&wave_x, NULL, P_FLAG_NONE, 0.0, 1.0, 0.0, NULL);  load_builtin_param_double("wave_y", (void*)&wave_y, NULL, P_FLAG_NONE, 0.0, 1.0, 0.0, NULL);  load_builtin_param_double("wave_mystery", (void*)&wave_mystery, NULL, P_FLAG_NONE, 0.0, 1.0, -1.0, "fWaveParam");    load_builtin_param_double("ob_size", (void*)&ob_size, NULL, P_FLAG_NONE, 0.0, 0.5, 0, NULL);  load_builtin_param_double("ob_r", (void*)&ob_r, NULL, P_FLAG_NONE, 0.0, 1.0, 0.0, NULL);  load_builtin_param_double("ob_g", (void*)&ob_g, NULL, P_FLAG_NONE, 0.0, 1.0, 0.0, NULL);  load_builtin_param_double("ob_b", (void*)&ob_b, NULL, P_FLAG_NONE, 0.0, 1.0, 0.0, NULL);  load_builtin_param_double("ob_a", (void*)&ob_a, NULL, P_FLAG_NONE, 0.0, 1.0, 0.0, NULL);  load_builtin_param_double("ib_size", (void*)&ib_size,  NULL,P_FLAG_NONE, 0.0, .5, 0.0, NULL);  load_builtin_param_double("ib_r", (void*)&ib_r,  NULL,P_FLAG_NONE, 0.0, 1.0, 0.0, NULL);  load_builtin_param_double("ib_g", (void*)&ib_g,  NULL,P_FLAG_NONE, 0.0, 1.0, 0.0, NULL);  load_builtin_param_double("ib_b", (void*)&ib_b,  NULL,P_FLAG_NONE, 0.0, 1.0, 0.0, NULL);  load_builtin_param_double("ib_a", (void*)&ib_a,  NULL,P_FLAG_NONE, 0.0, 1.0, 0.0, NULL);  load_builtin_param_double("mv_r", (void*)&mv_r,  NULL,P_FLAG_NONE, 0.0, 1.0, 0.0, NULL);  load_builtin_param_double("mv_g", (void*)&mv_g,  NULL,P_FLAG_NONE, 0.0, 1.0, 0.0, NULL);  load_builtin_param_double("mv_b", (void*)&mv_b,  NULL,P_FLAG_NONE, 0.0, 1.0, 0.0, NULL);  load_builtin_param_double("mv_x", (void*)&mv_x,  NULL,P_FLAG_NONE, 0.0, 64.0, 0.0, "nMotionVectorsX");  load_builtin_param_double("mv_y", (void*)&mv_y,  NULL,P_FLAG_NONE, 0.0, 48.0, 0.0, "nMotionVectorsY");  load_builtin_param_double("mv_l", (void*)&mv_l,  NULL,P_FLAG_NONE, 0.0, 5.0, 0.0, NULL);  load_builtin_param_double("mv_dy", (void*)&mv_dy, NULL, P_FLAG_NONE, 0.0, 1.0, -1.0, NULL);  load_builtin_param_double("mv_dx", (void*)&mv_dx,  NULL,P_FLAG_NONE, 0.0, 1.0, -1.0, NULL);  load_builtin_param_double("mv_a", (void*)&mv_a,  NULL,P_FLAG_NONE, 0.0, 1.0, 0.0, NULL);  load_builtin_param_double("time", (void*)&Time,  NULL,P_FLAG_READONLY, 0.0, MAX_DOUBLE_SIZE, 0.0, NULL);          load_builtin_param_double("bass", (void*)&bass,  NULL,P_FLAG_READONLY, 0.0, MAX_DOUBLE_SIZE, 0.0, NULL);  load_builtin_param_double("mid", (void*)&mid,  NULL,P_FLAG_READONLY, 0.0, MAX_DOUBLE_SIZE, 0, NULL);        load_builtin_param_double("bass_att", (void*)&bass_att,  NULL,P_FLAG_READONLY, 0.0, MAX_DOUBLE_SIZE, 0, NULL);  load_builtin_param_double("mid_att", (void*)&mid_att,  NULL,P_FLAG_READONLY, 0.0, MAX_DOUBLE_SIZE, 0, NULL);  load_builtin_param_double("treb_att", (void*)&treb_att,  NULL,P_FLAG_READONLY, 0.0, MAX_DOUBLE_SIZE, 0, NULL);  load_builtin_param_int("frame", (void*)&frame, P_FLAG_READONLY, 0, MAX_INT_SIZE, 0, NULL);  load_builtin_param_double("progress", (void*)&progress,  NULL,P_FLAG_READONLY, 0.0, 1, 0, NULL);  load_builtin_param_int("fps", (void*)&fps, P_FLAG_NONE, 15, MAX_INT_SIZE, 0, NULL);  load_builtin_param_double("x", (void*)&x_per_pixel, x_mesh,  P_FLAG_PER_PIXEL |P_FLAG_ALWAYS_MATRIX | P_FLAG_READONLY | P_FLAG_DONT_FREE_MATRIX, 			    0, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, NULL);  load_builtin_param_double("y", (void*)&y_per_pixel, y_mesh,  P_FLAG_PER_PIXEL |P_FLAG_ALWAYS_MATRIX |P_FLAG_READONLY | P_FLAG_DONT_FREE_MATRIX, 			    0, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, NULL);  load_builtin_param_double("ang", (void*)&ang_per_pixel, theta_mesh,  P_FLAG_PER_PIXEL |P_FLAG_ALWAYS_MATRIX | P_FLAG_READONLY | P_FLAG_DONT_FREE_MATRIX, 			    0, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, NULL);        load_builtin_param_double("rad", (void*)&rad_per_pixel, rad_mesh,  P_FLAG_PER_PIXEL |P_FLAG_ALWAYS_MATRIX | P_FLAG_READONLY | P_FLAG_DONT_FREE_MATRIX, 			    0, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, NULL);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -