VirtualBox

source: vbox/trunk/src/VBox/Main/include/AudioDriver.h@ 78018

Last change on this file since 78018 was 76562, checked in by vboxsync, 6 years ago

Main: Use MAIN_INCLUDED_ and MAIN_INCLUDED_SRC_ as header guard prefixes with scm.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 3.2 KB
Line 
1/* $Id: AudioDriver.h 76562 2019-01-01 03:22:50Z vboxsync $ */
2/** @file
3 * VirtualBox audio base class for Main audio drivers.
4 */
5
6/*
7 * Copyright (C) 2018-2019 Oracle Corporation
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 */
17
18#ifndef MAIN_INCLUDED_AudioDriver_h
19#define MAIN_INCLUDED_AudioDriver_h
20#ifndef RT_WITHOUT_PRAGMA_ONCE
21# pragma once
22#endif
23
24#include <VBox/com/ptr.h>
25#include <VBox/com/string.h>
26#include <VBox/com/AutoLock.h>
27
28using namespace com;
29
30/**
31 * Audio driver configuration for audio drivers implemented
32 * in Main.
33 */
34struct AudioDriverCfg
35{
36 AudioDriverCfg(Utf8Str a_strDev = "", unsigned a_uInst = 0, unsigned a_uLUN = 0, Utf8Str a_strName = "")
37 : strDev(a_strDev)
38 , uInst(a_uInst)
39 , uLUN(a_uLUN)
40 , strName(a_strName) { }
41
42 AudioDriverCfg& operator=(AudioDriverCfg that)
43 {
44 this->strDev = that.strDev;
45 this->uInst = that.uInst;
46 this->uLUN = that.uLUN;
47 this->strName = that.strName;
48
49 return *this;
50 }
51
52 /** The device name. */
53 Utf8Str strDev;
54 /** The device instance. */
55 unsigned uInst;
56 /** The LUN the driver is attached to.
57 * Set the UINT8_MAX if not attached. */
58 unsigned uLUN;
59 /** The driver name. */
60 Utf8Str strName;
61};
62
63class Console;
64
65/**
66 * Base class for all audio drivers implemented in Main.
67 */
68class AudioDriver
69{
70
71public:
72 AudioDriver(Console *pConsole);
73 virtual ~AudioDriver();
74
75 Console *GetParent(void) { return mpConsole; }
76
77 AudioDriverCfg *GetConfig(void) { return &mCfg; }
78 int InitializeConfig(AudioDriverCfg *pCfg);
79
80 /** Checks if audio is configured or not. */
81 bool isConfigured() const { return mCfg.strName.isNotEmpty(); }
82
83 bool IsAttached(void) { return mfAttached; }
84
85 int doAttachDriverViaEmt(PUVM pUVM, util::AutoWriteLock *pAutoLock);
86 int doDetachDriverViaEmt(PUVM pUVM, util::AutoWriteLock *pAutoLock);
87
88protected:
89 static DECLCALLBACK(int) attachDriverOnEmt(AudioDriver *pThis);
90 static DECLCALLBACK(int) detachDriverOnEmt(AudioDriver *pThis);
91
92 int configure(unsigned uLUN, bool fAttach);
93
94 /**
95 * Optional (virtual) function to give the derived audio driver
96 * class the ability to add (or change) the driver configuration
97 * entries when setting up.
98 *
99 * @return VBox status code.
100 * @param pLunCfg CFGM configuration node of the driver.
101 */
102 virtual int configureDriver(PCFGMNODE pLunCfg) { RT_NOREF(pLunCfg); return VINF_SUCCESS; }
103
104protected:
105
106 /** Pointer to parent. */
107 Console *mpConsole;
108 /** The driver's configuration. */
109 AudioDriverCfg mCfg;
110 /** Whether the driver is attached or not. */
111 bool mfAttached;
112};
113
114#endif /* !MAIN_INCLUDED_AudioDriver_h */
115
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette