/usr/include/gpac/modules/audio_out.h is in libgpac-dev 0.5.2-426-gc5ad4e4+dfsg5-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 | /*
* GPAC - Multimedia Framework C SDK
*
* Authors: Jean Le Feuvre
* Copyright (c) Telecom ParisTech 2000-2012
* All rights reserved
*
* This file is part of GPAC / modules interfaces
*
* GPAC is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* GPAC 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; see the file COPYING. If not, write to
* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
*
*/
/*
Note on video driver: this is not a graphics driver, the only thing requested from this driver
is accessing video memory and performing stretch of YUV and RGB on the backbuffer (bitmap node)
the graphics driver is a different entity that performs 2D rasterization
*/
#ifndef _GF_MODULE_AUDIO_OUT_H_
#define _GF_MODULE_AUDIO_OUT_H_
#ifdef __cplusplus
extern "C" {
#endif
/*include event system*/
#include <gpac/module.h>
/*
Audio hardware output module
*/
/*interface name and version for audio output*/
#define GF_AUDIO_OUTPUT_INTERFACE GF_4CC('G','A','O', '1')
/*interface returned on query interface*/
typedef struct _audiooutput
{
/* interface declaration*/
GF_DECL_MODULE_INTERFACE
/*setup system
Win32: os_handle is HWND
if num_buffer is set, the audio driver should work with num_buffers with a total amount of audio data
equal to total_duration ms
if not set the driver is free to decide what to do
*/
GF_Err (*Setup) (struct _audiooutput *aout, void *os_handle, u32 num_buffers, u32 total_duration);
/*shutdown system */
void (*Shutdown) (struct _audiooutput *aout);
/*query output frequency available - if the requested sampleRate is not available, the driver shall return the best
possible sampleRate able to handle NbChannels and NbBitsPerSample - if it doesn't handle the NbChannels
the internal mixer will do it
*/
GF_Err (*QueryOutputSampleRate)(struct _audiooutput *aout, u32 *io_desired_samplerate, u32 *io_NbChannels, u32 *io_nbBitsPerSample);
/*set output config - if audio is not running, driver must start it
*SampleRate, *NbChannels, *nbBitsPerSample:
input: desired value
output: final values
channel_cfg is the channels output cfg, eg set of flags as specified in constants.h
*/
GF_Err (*ConfigureOutput) (struct _audiooutput *aout, u32 *SampleRate, u32 *NbChannels, u32 *nbBitsPerSample, u32 channel_cfg);
/*returns total buffer size used in ms. This is needed to compute the min size of audio decoders output*/
u32 (*GetTotalBufferTime)(struct _audiooutput *aout);
/*returns audio delay in ms, eg time delay until written audio data is outputed by the sound card
This function is only called after ConfigureOuput*/
u32 (*GetAudioDelay)(struct _audiooutput *aout);
/*set output volume(between 0 and 100) */
void (*SetVolume) (struct _audiooutput *aout, u32 Volume);
/*set balance (between 0 and 100, 0=full left, 100=full right)*/
void (*SetPan) (struct _audiooutput *aout, u32 pan);
/*freezes soundcard flow - must not be NULL for self threaded
PlayType: 0: pause, 1: resume, 2: reset HW buffer and play.
*/
void (*Play) (struct _audiooutput *aout, u32 PlayType);
/*specifies whether the driver relies on the app to feed data or runs standalone*/
Bool SelfThreaded;
/*if not using private thread, this should perform sleep & fill of HW buffer
the audio render loop in this case is: while (run) {driver->WriteAudio(); if (reconf) Reconfig();}
the driver must therefore give back the hand to the renderer as often as possible - the usual way is:
gf_sleep until hw data can be written
write HW data
return
*/
void (*WriteAudio)(struct _audiooutput *aout);
/*if using private thread the following MUST be provided*/
void (*SetPriority)(struct _audiooutput *aout, u32 priority);
/*your private data handler - should be allocated when creating the interface object*/
void *opaque;
/*these are assigned by the audio renderer once module is loaded*/
/*fills the buffer with audio data, returns effective bytes written - the rest is filled with 0*/
u32 (*FillBuffer) (void *audio_renderer, char *buffer, u32 buffer_size);
void *audio_renderer;
} GF_AudioOutput;
/*
Audio hardware output module
*/
/*interface name and version for audio output*/
#define GF_AUDIO_FILTER_INTERFACE GF_4CC('G','A','F', '1')
/*interface returned on query interface*/
typedef struct _tag_audio_filter GF_AudioFilter;
struct _tag_audio_filter
{
/* interface declaration*/
GF_DECL_MODULE_INTERFACE
/*sets the current filter. The filterstring is opaque to libgpac and is taken as given
in the GPAC configuration file, where filters are listed as a ';;' separated list in the "Filter" key of
the [Audio] section.
@returns: 1 is this module can handle the filterstring, 0 otherwise.
*/
Bool (*SetFilter)(GF_AudioFilter *af, char *filterstring);
/*configures the filter:
@samplerate: samplerate of data - this cannot be modified by a filter
@bits_per_sample: sample format (8 or 16 bit signed PCM data) of data - this cannot be modified by a filter
@input_channel_number: number of input channels
@input_channel_layout: channel layout of input data - cf <gpac/constants.h>
@output_channel_number: number of ouput channels
@output_channel_layout: channel layout of output data - cf <gpac/constants.h>
&output_block_size_in_samples: size in blocks of the data to be sent to this filter.
If 0, data will not be reframed and blocks of any number of samples will be processed
@delay_ms: delay in ms introduced by this filter
@inplace_processing_capable: if set to 1, this filter is capable of processing data inplace, in which case
the same buffer is passed for in_data and out_data in the process call
*/
GF_Err (*Configure)(GF_AudioFilter *af, u32 samplerate, u32 bits_per_sample, u32 input_channel_number, u32 input_channel_layout, u32 *output_channel_number, u32 *output_channel_layout, u32 *output_block_size_in_samples, u32 *delay_ms, Bool *inplace_processing_capable);
/*process a chunk of audio data.
@in_data: input sample buffer
@in_data_size: input sample buffer size. If block len was set in the configure stage, there will be block len sample
@out_data: output sample buffer - if inplace was set in the configure stage, same as in_data.
NOTE: Outputing more samples that input ones may crash the system, the buffer only contains space for
the same amount of samples (including channels added/removed by the filter)
@out_data_size: data size written to output. Usually 0 or in_data_size.
*/
GF_Err (*Process)(GF_AudioFilter *af, void *in_data, u32 in_data_size, void *out_data, u32 *out_data_size);
/*gets an option from the filter - currently not implemented */
const char *(*GetOption)(GF_AudioFilter *af, char *option);
/*sets an option to the filter - currently not implemented */
Bool (*SetOption)(GF_AudioFilter *af, char *option, char *value);
/*Indicates the filter should be reset (audio stop or seek )*/
void (*Reset)(GF_AudioFilter *af);
/*private user data for the module*/
void *udta;
};
#ifdef __cplusplus
}
#endif
#endif /*_GF_MODULE_AUDIO_OUT_H_*/
|