view libao2/audio_plugin.h @ 10252:d275152390ee

I've found some time to implement the encoding support for the new DivX API. Now it's possible to play and encode movies with the latest DivX release. One thing that doesn't work is the new Video Buffer Verifier (VBV) multipass encoding. The encoder segfaults. Maybe it just isn't supported with the standard profile of the released binary encoder. Andreas Hess <jaska@gmx.net>
author arpi
date Fri, 06 Jun 2003 19:57:37 +0000
parents 12b1790038b0
children 815f03b7cee5
line wrap: on
line source

#ifndef __audio_plugin_h__
#define __audio_plugin_h__

// Functions supplied by plugins
typedef struct ao_plugin_functions_s
{
	ao_info_t *info;
        int (*control)(int cmd, void *arg);
        int (*init)(); 
        void (*uninit)();
        void (*reset)();
        int (*play)();
} ao_plugin_functions_t;

// Global data for all audio plugins
typedef struct ao_plugin_data_s
{
  void* data;       /* current data block read only ok to change */
  int len;          /* setup and current buffer length */
  int rate;	    /* setup data rate */
  int channels;	    /* setup number of channels */
  int format;	    /* setup format */
  double sz_mult;   /* Buffer size multiplier */
  double sz_fix;    /* Fix (as in static) extra buffer size */
  float delay_mult; /* Delay multiplier */
  float delay_fix;  /* Fix delay */
}ao_plugin_data_t;

extern volatile ao_plugin_data_t ao_plugin_data;

// Plugin confuguration data set by cmd-line parameters
typedef struct ao_plugin_cfg_s
{
  char* plugin_list; 	// List of used plugins read from cfg
  int pl_format_type;	// Output format
  int pl_delay_len;	// Number of samples to delay sound output
  int pl_resample_fout;	// Output frequency from resampling
  int pl_volume_volume; // Initial volume setting
  float pl_extrastereo_mul; // Stereo enhancer multiplier
  int pl_volume_softclip;   // Enable soft clipping
} ao_plugin_cfg_t;

extern ao_plugin_cfg_t ao_plugin_cfg;

// Configuration defaults
#define CFG_DEFAULTS { \
 NULL, \
 AFMT_S16_LE, \
 0, \
 48000, \
 101, \
 2.5, \
 0 \
};

// This block should not be available in the pl_xxxx files
// due to compilation issues
#ifndef PLUGIN
#define NPL 8+1 // Number of PLugins ( +1 list ends with NULL )
// List of plugins 
extern ao_plugin_functions_t audio_plugin_delay;
extern ao_plugin_functions_t audio_plugin_format; 
extern ao_plugin_functions_t audio_plugin_surround;
extern ao_plugin_functions_t audio_plugin_resample;
extern ao_plugin_functions_t audio_plugin_volume;
extern ao_plugin_functions_t audio_plugin_extrastereo;
extern ao_plugin_functions_t audio_plugin_volnorm;
extern ao_plugin_functions_t audio_plugin_eq;

#define AO_PLUGINS { \
   &audio_plugin_delay, \
   &audio_plugin_format, \
   &audio_plugin_surround, \
   &audio_plugin_resample, \
   &audio_plugin_volume, \
   &audio_plugin_extrastereo, \
   &audio_plugin_volnorm, \
   &audio_plugin_eq, \
   NULL \
}
#endif /* PLUGIN */


// Control parameters used by the plugins
#define AOCONTROL_PLUGIN_SET_LEN 1  // All plugins must respond to this parameter
#define AOCONTROL_PLUGIN_ES_SET  4  // set extra stereo coefficient
#define AOCONTROL_PLUGIN_ES_GET  5  // get extra stereo coefficient

#endif