[MPlayer-G2-dev] cfg.h (config layer 0 discussion)

Arpi arpi at thot.banki.hu
Mon May 19 11:17:17 CEST 2003


Hi,

Here's an updated/modified/extended/stipped :) version of Andriy's cfg.h:


#ifndef __CFG_H
#define __CFG_H 1


/* type (menu field)	->p		->min	->max	->priv */
typedef enum {
// flag (checkbox)	int*		reset	set	-
  CONF_TYPE_FLAG=1,
// integer (slider)	int*		min	max	-
  CONF_TYPE_INT,
// float (slider)	float*		min	max	-
  CONF_TYPE_FLOAT,
// position (slider)	off_t*		min	max	-
  CONF_TYPE_POSITION,
// string (input box)	char**		min	max	- (min/max length)
  CONF_TYPE_STRING,
// select list (combobox)  int*		-	-	config_select_list_t*
  CONF_TYPE_SELECT,
// string list          char***         min     max     - (min/max nr. of strings)
// (comma-seperated list of strings, to be parsed later or to pass ordered list of strings)
  CONF_TYPE_STRING_LIST,
// function		void*		arg1	arg2	(*parser_func)(void*,arg1,arg2)
// (custom parser func for 3rd party plugins or special applications)
  CONF_TYPE_FUNC,
// removed option	-		-	-	-
// (removed option, parser should fail with error, with message from *desc, gui should ignore this)
  CONF_TYPE_OBSOLETE,
// group separator	-		-	-	config_group_info_t*
// (this is NOT a real option, but an option group definition, for gui use)
  CONF_TYPE_GROUP,
//*** this is not a valid type, but the number of types:
  CONF_TYPE_MAX
} config_type_t;

typedef struct {
  int value;
  char* name;
  char* desc;
} config_select_list_t;

typedef struct {
  // TODO!!!!
  int dummy;
} config_group_info_t;

/* flags for options */
// 'min' value is given in config_t
#define CONF_MIN		(1<<0)
// 'max' value is given in config_t
#define CONF_MAX		(1<<1)
// both 'min' and 'max' value is given in config_t
#define CONF_RANGE		(CONF_MIN|CONF_MAX)
// This option cannot be in config file
#define CONF_NOCFG		(1<<2)
// This option cannot be in command line
#define CONF_NOCMD		(1<<3)
// This option cannot (shouldn't) be visible in gui:
#define CONF_NOGUI		(1<<4)
// This option can be used without explicit naming:
#define CONF_UNNAMED		(1<<5)

typedef struct {
  char *name;
  void *p; /* pointer to variable where store result to, type specific */
  config_type_t type;
  unsigned int flags;
  float min, max; /* valid range */
  void *priv; /* additional pointer, type specific */
  char *desc; /* short description for help and gui */
} config_t;

/* note: version has to be first in ModuleInfo struct in loadable module
   to allow us always do validation/version check of module */
typedef struct {
  unsigned short type, version; // for loadable plugins
  char *name;
  char *desc; // short description for commandline help and gui
  char *maintainer;
  char *author;
  char *comment;
  config_t *config;
  void *config_defaults;
  int  *config_size;
//  void *handle;
} module_info_t;

#endif /* __CFG_H */

Any questions/suggestions?
(I've tried to apply the ideas/comments from that thread)

Problem:
we should store some reference inside the module_info_t struct to the
actual module entry point (maybe the addess of the open() func? or the
functions_t struct? do we need to store dlopen() handle there?)

I'm trying to avoid the unification of all layer's API, but maybe we should
decide between the open()-only (vo2, vf) and functions_t (ao2, ad, vd) style,
and convert the looser.


A'rpi / Astral & ESP-team

--
Developer of MPlayer G2, the Movie Framework for all - http://www.MPlayerHQ.hu



More information about the MPlayer-G2-dev mailing list