DrvAudio.h revision 10258d88c40d8254a2a0d89e9b6c1f3b487f5c2d
/* $Id$ */
/** @file
* Intermediate audio driver header.
*/
/*
* Copyright (C) 2006-2014 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
* General Public License (GPL) as published by the Free Software
* Foundation, in version 2 as it comes in the "COPYING" file of the
* VirtualBox OSE distribution. VirtualBox OSE is distributed in the
* hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
* --------------------------------------------------------------------
*
* This code is based on: audio.h
*
* QEMU Audio subsystem header
*
* Copyright (c) 2003-2005 Vassili Karpov (malc)
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifndef DRV_AUDIO_H
#define DRV_AUDIO_H
#include <limits.h>
typedef enum
{
typedef struct audio_option
{
const char *name;
void *valp;
const char *descr;
int *overridenp;
int overriden;
} audio_option;
/**
* Audio driver instance data.
*
* @implements PDMIAUDIOCONNECTOR
*/
typedef struct DRVAUDIO
{
/** Shutdown indicator. */
bool fTerminate;
/** Pointer to the driver instance. */
/** Pointer to audio driver below us. */
/** Max. number of free input streams. */
/** Max. number of free output streams. */
/** Audio configuration settings retrieved
* from the backend. */
/** Makes a PDRVBLOCK out of a PPDMIBLOCK. */
#define PDMIAUDIOCONNECTOR_2_DRVAUDIO(pInterface) \
//const char *drvAudioHlpFormatToString(PDMAUDIOFMT fmt);
/* AUDIO IN function declarations. */
int drvAudioGstInInit(PPDMAUDIOGSTSTRMIN pGstStrmIn, PPDMAUDIOHSTSTRMIN pHstStrmIn, const char *pszName, PPDMAUDIOSTREAMCFG pCfg);
PPDMAUDIOHSTSTRMIN drvAudioFindNextEnabledHstIn(PDRVAUDIO pDrvAudio, PPDMAUDIOHSTSTRMIN pHstStrmIn);
PPDMAUDIOHSTSTRMIN drvAudioFindNextEqHstIn(PDRVAUDIO pDrvAudio, PPDMAUDIOHSTSTRMIN pHstStrmIn, PPDMAUDIOSTREAMCFG pCfg);
/* AUDIO OUT function declarations. */
int drvAudioGstOutInit(PPDMAUDIOGSTSTRMOUT pGstStrmOut, PPDMAUDIOHSTSTRMOUT pHstStrmOut, const char *pszName, PPDMAUDIOSTREAMCFG pCfg);
PPDMAUDIOHSTSTRMOUT drvAudioHstFindAnyEnabledOut(PDRVAUDIO pDrvAudio, PPDMAUDIOHSTSTRMOUT pHstStrmOut);
PPDMAUDIOHSTSTRMOUT drvAudioFindSpecificOut(PDRVAUDIO pDrvAudio, PPDMAUDIOHSTSTRMOUT pHstStrmOut, PPDMAUDIOSTREAMCFG pCfg);
int drvAudioAllocHstOut(PDRVAUDIO pDrvAudio, const char *pszName, PPDMAUDIOSTREAMCFG pCfg, PPDMAUDIOHSTSTRMOUT *ppHstStrmOut);
int drvAudioHlpPcmHwAddOut(PDRVAUDIO pDrvAudio, PPDMAUDIOSTREAMCFG pCfg, PPDMAUDIOHSTSTRMOUT *ppHstStrmOut);
int drvAudioHlpPcmCreateVoicePairOut(PDRVAUDIO pDrvAudio, const char *pszName, PPDMAUDIOSTREAMCFG pCfg, PPDMAUDIOGSTSTRMOUT *ppGstStrmOut);
/* Common functions between DrvAudio and backends (host audio drivers). */
typedef struct fixed_settings
{
int enabled;
int cStreams;
int greedy;
static struct {
struct fixed_settings fixed_out;
struct fixed_settings fixed_in;
union {
int hz;
} period;
int plive;
} conf = {
/* Fixed output settings. */
{ /* DAC fixed settings */
1, /* enabled */
1, /* cStreams */
1, /* greedy */
{
44100, /* freq */
2, /* nchannels */
AUD_FMT_S16, /* fmt */
}
},
/* Fixed input settings. */
{ /* ADC fixed settings */
1, /* enabled */
2, /* cStreams */
1, /* greedy */
{
44100, /* freq */
2, /* nchannels */
AUD_FMT_S16, /* fmt */
}
},
{ 200 }, /* frequency (in Hz) */
0, /* plive */ /** @todo Disable pending live? */
};
#endif /* DRV_AUDIO_H */