VirtualBox

Changeset 70535 in vbox for trunk/src


Ignore:
Timestamp:
Jan 11, 2018 1:33:05 PM (7 years ago)
Author:
vboxsync
Message:

Audio/VRDE: Implemented support for dynamically attaching / detaching the VRDE audio driver at runtime.

Location:
trunk/src/VBox/Main
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/include/DrvAudioVRDE.h

    r69500 r70535  
    55
    66/*
    7  * Copyright (C) 2014-2017 Oracle Corporation
     7 * Copyright (C) 2014-2018 Oracle Corporation
    88 *
    99 * This file is part of VirtualBox Open Source Edition (OSE), as
     
    2020
    2121#include <VBox/com/ptr.h>
     22#include <VBox/com/string.h>
     23
    2224#include <VBox/RemoteDesktop/VRDE.h>
     25
    2326#include <VBox/vmm/pdmdrv.h>
    2427#include <VBox/vmm/pdmifs.h>
    2528
     29#include "AudioDriver.h"
     30
     31using namespace com;
     32
    2633class Console;
    2734
    28 class AudioVRDE
     35class AudioVRDE : public AudioDriver
    2936{
    3037
     
    3744
    3845    static const PDMDRVREG DrvReg;
    39 
    40     Console *getParent(void) { return mParent; }
    4146
    4247public:
     
    5560private:
    5661
     62    void configureDriver(PCFGMNODE pLunCfg);
     63
    5764    /** Pointer to the associated VRDE audio driver. */
    5865    struct DRVAUDIOVRDE *mpDrv;
    59     /** Pointer to parent. */
    60     Console * const mParent;
    6166};
    6267
  • trunk/src/VBox/Main/src-client/ConsoleImpl.cpp

    r70496 r70535  
    54055405                            mConsoleVRDPServer->Stop();
    54065406
    5407                             int vrc = mConsoleVRDPServer->Launch();
     5407                            int vrc;
     5408#ifdef VBOX_WITH_AUDIO_VRDE
     5409                            if (!mAudioVRDE->IsAttached())
     5410                            {
     5411                                vrc = VMR3ReqCallWaitU(ptrVM.rawUVM(), VMCPUID_ANY /*idDstCpu*/,
     5412                                                       (PFNRT)AudioVRDE::Attach, 2,
     5413                                                       mAudioVRDE, mAudioVRDE->GetConfig());
     5414                                AssertRC(vrc);
     5415                            }
     5416#endif
     5417                            vrc = mConsoleVRDPServer->Launch();
    54085418                            if (vrc != VINF_SUCCESS)
    54095419                            {
     
    54155425                        }
    54165426                        else
     5427                        {
    54175428                            mConsoleVRDPServer->Stop();
     5429#ifdef VBOX_WITH_AUDIO_VRDE
     5430                            if (mAudioVRDE->IsAttached())
     5431                            {
     5432                                int vrc2 = VMR3ReqCallWaitU(ptrVM.rawUVM(), VMCPUID_ANY /*idDstCpu*/,
     5433                                                            (PFNRT)AudioVRDE::Detach, 1,
     5434                                                            mAudioVRDE);
     5435                                AssertRC(vrc2);
     5436                            }
     5437#endif
     5438                        }
    54185439
    54195440                        alock.acquire();
  • trunk/src/VBox/Main/src-client/ConsoleImpl2.cpp

    r70496 r70535  
    122122#endif /* VBOX_WITH_NETFLT */
    123123
     124#ifdef VBOX_WITH_AUDIO_VRDE
     125# include "DrvAudioVRDE.h"
     126#endif
    124127#include "NetworkServiceRunner.h"
    125128#include "BusAssignmentManager.h"
     
    29642967
    29652968#ifdef VBOX_WITH_AUDIO_VRDE
    2966             /*
    2967              * The VRDE audio backend driver.
    2968              */
    2969             CFGMR3InsertNodeF(pInst, &pLunL0, "LUN#%RU8", uAudioLUN++);
    2970             InsertConfigString(pLunL0, "Driver", "AUDIO");
    2971 
    2972             InsertConfigNode(pLunL0,   "Config", &pCfg);
    2973                 InsertConfigString (pCfg, "DriverName",    "AudioVRDE");
    2974                 InsertConfigInteger(pCfg, "InputEnabled",  fAudioEnabledIn);
    2975                 InsertConfigInteger(pCfg, "OutputEnabled", fAudioEnabledOut);
    2976                 InsertConfigInteger(pCfg, "DebugEnabled",  fDebugEnabled);
    2977                 InsertConfigString (pCfg, "DebugPathOut",  strDebugPathOut);
    2978 
    2979             InsertConfigNode(pLunL0, "AttachedDriver", &pLunL1);
    2980                 InsertConfigString(pLunL1, "Driver", "AudioVRDE");
    2981 
    2982                 InsertConfigNode(pLunL1, "Config", &pCfg);
    2983                     InsertConfigString (pCfg, "StreamName", bstr);
    2984                     InsertConfigInteger(pCfg, "Object", (uintptr_t)mAudioVRDE);
    2985                     InsertConfigInteger(pCfg, "ObjectVRDPServer", (uintptr_t)mConsoleVRDPServer);
     2969            BOOL fVRDEEnabled = FALSE;
     2970
     2971            if (mVRDEServer)
     2972            {
     2973                hrc = mVRDEServer->COMGETTER(Enabled)(&fVRDEEnabled);
     2974                ComAssertComRC(hrc);
     2975            }
     2976
     2977            AudioDriverCfg Cfg(strAudioDevice, 0 /* Instance */, uAudioLUN);
     2978            rc = mAudioVRDE->Configure(&Cfg, fVRDEEnabled /* Attach */);
     2979            if (   RT_SUCCESS(rc)
     2980                && fVRDEEnabled) /* Successfully configured, use next LUN for drivers below. */
     2981            {
     2982                uAudioLUN++;
     2983            }
    29862984#endif /* VBOX_WITH_AUDIO_VRDE */
    29872985
  • trunk/src/VBox/Main/src-client/DrvAudioVRDE.cpp

    r68393 r70535  
    570570
    571571AudioVRDE::AudioVRDE(Console *pConsole)
    572     : mpDrv(NULL),
    573       mParent(pConsole)
     572    : AudioDriver(pConsole)
     573    , mpDrv(NULL)
    574574{
    575575}
     
    585585}
    586586
     587
     588void AudioVRDE::configureDriver(PCFGMNODE pLunCfg)
     589{
     590    CFGMR3InsertInteger(pLunCfg, "Object", (uintptr_t)this);
     591    CFGMR3InsertInteger(pLunCfg, "ObjectVRDPServer", (uintptr_t)mpConsole->i_consoleVRDPServer());
     592}
    587593
    588594int AudioVRDE::onVRDEControl(bool fEnable, uint32_t uFlags)
Note: See TracChangeset for help on using the changeset viewer.

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