"Fossies" - the Fresh Open Source Software Archive

Member "alsa-lib-1.1.9/include/pcm_extplug.h" (10 May 2019, 6334 Bytes) of package /linux/misc/alsa-lib-1.1.9.tar.bz2:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "pcm_extplug.h" see the Fossies "Dox" file reference documentation and the last Fossies "Diffs" side-by-side code changes report: 1.1.7_vs_1.1.8.

    1 /**
    2  * \file include/pcm_extplug.h
    3  * \brief External Filter-Plugin SDK
    4  * \author Takashi Iwai <tiwai@suse.de>
    5  * \date 2005
    6  *
    7  * External Filter-Plugin SDK
    8  */
    9 
   10 /*
   11  * ALSA external PCM plugin SDK (draft version)
   12  *
   13  * Copyright (c) 2005 Takashi Iwai <tiwai@suse.de>
   14  *
   15  *   This library is free software; you can redistribute it and/or modify
   16  *   it under the terms of the GNU Lesser General Public License as
   17  *   published by the Free Software Foundation; either version 2.1 of
   18  *   the License, or (at your option) any later version.
   19  *
   20  *   This program is distributed in the hope that it will be useful,
   21  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
   22  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   23  *   GNU Lesser General Public License for more details.
   24  *
   25  *   You should have received a copy of the GNU Lesser General Public
   26  *   License along with this library; if not, write to the Free Software
   27  *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
   28  *
   29  */
   30 
   31 #ifndef __ALSA_PCM_EXTPLUG_H
   32 #define __ALSA_PCM_EXTPLUG_H
   33 
   34 /**
   35  * \defgroup PCM_ExtPlug External Filter plugin SDK
   36  * \ingroup Plugin_SDK
   37  * See the \ref pcm page for more details.
   38  * \{
   39  */
   40 
   41 /** hw constraints for extplug */
   42 enum {
   43     SND_PCM_EXTPLUG_HW_FORMAT,  /**< format */
   44     SND_PCM_EXTPLUG_HW_CHANNELS,    /**< channels */
   45     SND_PCM_EXTPLUG_HW_PARAMS   /**< max number of hw constraints */
   46 };
   47     
   48 /** Handle of external filter plugin */
   49 typedef struct snd_pcm_extplug snd_pcm_extplug_t;
   50 /** Callback table of extplug */
   51 typedef struct snd_pcm_extplug_callback snd_pcm_extplug_callback_t;
   52 #ifdef DOC_HIDDEN
   53 /* redefine typedefs for stupid doxygen */
   54 typedef snd_pcm_extplug snd_pcm_extplug_t;
   55 typedef snd_pcm_extplug_callback snd_pcm_extplug_callback_t;
   56 #endif
   57 
   58 /*
   59  * Protocol version
   60  */
   61 #define SND_PCM_EXTPLUG_VERSION_MAJOR   1   /**< Protocol major version */
   62 #define SND_PCM_EXTPLUG_VERSION_MINOR   0   /**< Protocol minor version */
   63 #define SND_PCM_EXTPLUG_VERSION_TINY    2   /**< Protocol tiny version */
   64 /**
   65  * Filter-plugin protocol version
   66  */
   67 #define SND_PCM_EXTPLUG_VERSION     ((SND_PCM_EXTPLUG_VERSION_MAJOR<<16) |\
   68                      (SND_PCM_EXTPLUG_VERSION_MINOR<<8) |\
   69                      (SND_PCM_EXTPLUG_VERSION_TINY))
   70 
   71 /** Handle of extplug */
   72 struct snd_pcm_extplug {
   73     /**
   74      * protocol version; #SND_PCM_EXTPLUG_VERSION must be filled here
   75      * before calling #snd_pcm_extplug_create()
   76      */
   77     unsigned int version;
   78     /**
   79      * name of this plugin; must be filled before calling #snd_pcm_extplug_create()
   80      */
   81     const char *name;
   82     /**
   83      * callbacks of this plugin; must be filled before calling #snd_pcm_extplug_create()
   84      */
   85     const snd_pcm_extplug_callback_t *callback;
   86     /**
   87      * private data, which can be used freely in the driver callbacks
   88      */
   89     void *private_data;
   90     /**
   91      * PCM handle filled by #snd_pcm_extplug_create()
   92      */
   93     snd_pcm_t *pcm;
   94     /**
   95      * stream direction; read-only status
   96      */
   97     snd_pcm_stream_t stream;
   98     /**
   99      * format hw parameter; filled after hw_params is caled
  100      */
  101     snd_pcm_format_t format;
  102     /**
  103      * subformat hw parameter; filled after hw_params is caled
  104      */
  105     snd_pcm_subformat_t subformat;
  106     /**
  107      * channels hw parameter; filled after hw_params is caled
  108      */
  109     unsigned int channels;
  110     /**
  111      * rate hw parameter; filled after hw_params is caled
  112      */
  113     unsigned int rate;
  114     /**
  115      * slave_format hw parameter; filled after hw_params is caled
  116      */
  117     snd_pcm_format_t slave_format;
  118     /**
  119      * slave_subformat hw parameter; filled after hw_params is caled
  120      */
  121     snd_pcm_subformat_t slave_subformat;
  122     /**
  123      * slave_channels hw parameter; filled after hw_params is caled
  124      */
  125     unsigned int slave_channels;
  126 };
  127 
  128 /** Callback table of extplug */
  129 struct snd_pcm_extplug_callback {
  130     /**
  131      * transfer between source and destination; this is a required callback
  132      */
  133     snd_pcm_sframes_t (*transfer)(snd_pcm_extplug_t *ext,
  134                       const snd_pcm_channel_area_t *dst_areas,
  135                       snd_pcm_uframes_t dst_offset,
  136                       const snd_pcm_channel_area_t *src_areas,
  137                       snd_pcm_uframes_t src_offset,
  138                       snd_pcm_uframes_t size);
  139     /**
  140      * close the PCM; optional
  141      */
  142     int (*close)(snd_pcm_extplug_t *ext);
  143     /**
  144      * hw_params; optional
  145      */
  146     int (*hw_params)(snd_pcm_extplug_t *ext, snd_pcm_hw_params_t *params);
  147     /**
  148      * hw_free; optional
  149      */
  150     int (*hw_free)(snd_pcm_extplug_t *ext);
  151     /**
  152      * dump; optional
  153      */
  154     void (*dump)(snd_pcm_extplug_t *ext, snd_output_t *out);
  155     /**
  156      * init; optional initialization called at prepare or reset
  157      */
  158     int (*init)(snd_pcm_extplug_t *ext);
  159     /**
  160      * query the channel maps; optional; since v1.0.2
  161      */
  162     snd_pcm_chmap_query_t **(*query_chmaps)(snd_pcm_extplug_t *ext);
  163     /**
  164      * get the channel map; optional; since v1.0.2
  165      */
  166     snd_pcm_chmap_t *(*get_chmap)(snd_pcm_extplug_t *ext);
  167     /**
  168      * set the channel map; optional; since v1.0.2
  169      */
  170     int (*set_chmap)(snd_pcm_extplug_t *ext, const snd_pcm_chmap_t *map);
  171 };
  172 
  173 
  174 int snd_pcm_extplug_create(snd_pcm_extplug_t *ext, const char *name,
  175                snd_config_t *root, snd_config_t *slave_conf,
  176                snd_pcm_stream_t stream, int mode);
  177 int snd_pcm_extplug_delete(snd_pcm_extplug_t *ext);
  178 
  179 /* clear hw_parameter setting */
  180 void snd_pcm_extplug_params_reset(snd_pcm_extplug_t *ext);
  181 
  182 /* hw_parameter setting */
  183 int snd_pcm_extplug_set_param_list(snd_pcm_extplug_t *extplug, int type, unsigned int num_list, const unsigned int *list);
  184 int snd_pcm_extplug_set_param_minmax(snd_pcm_extplug_t *extplug, int type, unsigned int min, unsigned int max);
  185 int snd_pcm_extplug_set_slave_param_list(snd_pcm_extplug_t *extplug, int type, unsigned int num_list, const unsigned int *list);
  186 int snd_pcm_extplug_set_slave_param_minmax(snd_pcm_extplug_t *extplug, int type, unsigned int min, unsigned int max);
  187 int snd_pcm_extplug_set_param_link(snd_pcm_extplug_t *extplug, int type,
  188                    int keep_link);
  189 
  190 /**
  191  * set the parameter constraint with a single value
  192  */
  193 static __inline__ int snd_pcm_extplug_set_param(snd_pcm_extplug_t *extplug, int type, unsigned int val)
  194 {
  195     return snd_pcm_extplug_set_param_list(extplug, type, 1, &val);
  196 }
  197 
  198 /**
  199  * set the parameter constraint for slave PCM with a single value
  200  */
  201 static __inline__ int snd_pcm_extplug_set_slave_param(snd_pcm_extplug_t *extplug, int type, unsigned int val)
  202 {
  203     return snd_pcm_extplug_set_slave_param_list(extplug, type, 1, &val);
  204 }
  205 
  206 /** \} */
  207 
  208 #endif /* __ALSA_PCM_EXTPLUG_H */