Home | History | Annotate | Download | only in server
      1 /* Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
      2  * Use of this source code is governed by a BSD-style license that can be
      3  * found in the LICENSE file.
      4  */
      5 
      6 #ifndef CRAS_DSP_INI_H_
      7 #define CRAS_DSP_INI_H_
      8 
      9 #ifdef __cplusplus
     10 extern "C" {
     11 #endif
     12 
     13 #include <iniparser.h>
     14 
     15 #include "array.h"
     16 #include "dumper.h"
     17 #include "cras_expr.h"
     18 
     19 enum port_direction {
     20 	PORT_INPUT,
     21 	PORT_OUTPUT,
     22 };
     23 
     24 enum port_type {
     25 	PORT_CONTROL,
     26 	PORT_AUDIO,
     27 };
     28 
     29 #define INVALID_FLOW_ID -1
     30 
     31 struct port {
     32 	enum port_direction direction;
     33 	enum port_type type;
     34 
     35 	/* This is only used if there is a flow connects to this port,
     36 	   -1 otherwise (i.e. the port has a constant input/output) */
     37 	int flow_id;
     38 
     39 	/* This is only used if type is PORT_CONTROL */
     40 	float init_value;
     41 };
     42 
     43 DECLARE_ARRAY_TYPE(struct port, port_array)
     44 
     45 struct plugin {
     46 	const char *title;
     47 	const char *library;  /* file name like "plugin.so" */
     48 	const char *label;    /* label like "Eq" */
     49 	const char *purpose;  /* like "playback" or "capture" */
     50 	struct cras_expr_expression *disable_expr;  /* the disable expression of
     51 					     this plugin */
     52 	port_array ports;
     53 };
     54 
     55 struct flow {
     56 	enum port_type type;  /* the type of the ports this flow connects to */
     57 	const char *name;
     58 	struct plugin *from;
     59 	struct plugin *to;
     60 	int from_port;
     61 	int to_port;
     62 };
     63 
     64 DECLARE_ARRAY_TYPE(struct plugin, plugin_array)
     65 DECLARE_ARRAY_TYPE(struct flow, flow_array)
     66 
     67 struct ini {
     68 	dictionary *dict;
     69 	plugin_array plugins;
     70 	flow_array flows;
     71 };
     72 
     73 /*
     74  * Creates a dummy ini structure equivalent to:
     75  *
     76  * [src]
     77  * out0={tmp:0}
     78  * out1={tmp:1}
     79  * ...
     80  *
     81  * [sink]
     82  * in0={tmp:0}
     83  * in1={tmp:1}
     84  * ...
     85  *
     86  * The caller of this function is responsible to free the returned
     87  * ini by calling cras_dsp_ini_free().
     88  */
     89 struct ini *create_dummy_ini(const char *purpose, unsigned int num_channels);
     90 
     91 /* Reads the ini file into the ini structure */
     92 struct ini *cras_dsp_ini_create(const char *ini_filename);
     93 /* Frees the dsp structure. */
     94 void cras_dsp_ini_free(struct ini *ini);
     95 /* Dumps the information in the ini structure to syslog. */
     96 void cras_dsp_ini_dump(struct dumper *d, struct ini *ini);
     97 
     98 #ifdef __cplusplus
     99 } /* extern "C" */
    100 #endif
    101 
    102 #endif /* CRAS_DSP_INI_H_ */
    103