VirtualBox

Changeset 88361 in vbox for trunk/src


Ignore:
Timestamp:
Apr 5, 2021 12:23:47 AM (4 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
143608
Message:

DrvHostAudioDSound: Converted to use PDMIAUDIONOTIFYFROMHOST. bugref:9890

Location:
trunk/src/VBox/Devices/Audio
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Audio/DrvHostAudioDSound.cpp

    r88269 r88361  
    214214    DSOUNDHOSTCFG               Cfg;
    215215    /** List of devices of last enumeration. */
    216     PDMAUDIOHOSTENUM          DeviceEnum;
     216    PDMAUDIOHOSTENUM            DeviceEnum;
    217217    /** Whether this backend supports any audio input. */
    218218    bool                        fEnabledIn;
     
    224224    LPDIRECTSOUNDCAPTURE8       pDSC;
    225225#ifdef VBOX_WITH_AUDIO_MMNOTIFICATION_CLIENT
    226     DrvHostAudioDSoundMMNotifClient   *m_pNotificationClient;
    227 #endif
    228 #ifdef VBOX_WITH_AUDIO_CALLBACKS
    229     /** Callback function to the upper driver.
    230      *  Can be NULL if not being used / registered. */
    231     PFNPDMHOSTAUDIOCALLBACK     pfnCallback;
     226    DrvHostAudioDSoundMMNotifClient *m_pNotificationClient;
    232227#endif
    233228    /** Pointer to the input stream. */
     
    25392534    return VINF_SUCCESS;
    25402535}
    2541 
    2542 #ifdef VBOX_WITH_AUDIO_CALLBACKS
    2543 /**
    2544  * @interface_method_impl{PDMIHOSTAUDIO,pfnSetCallback}
    2545  */
    2546 static DECLCALLBACK(int) drvHostDSoundHA_SetCallback(PPDMIHOSTAUDIO pInterface, PFNPDMHOSTAUDIOCALLBACK pfnCallback)
    2547 {
    2548     AssertPtrReturn(pInterface, VERR_INVALID_POINTER);
    2549     /* pfnCallback will be handled below. */
    2550 
    2551     PDRVHOSTDSOUND pThis = PDMIHOSTAUDIO_2_DRVHOSTDSOUND(pInterface);
    2552 
    2553     int rc = RTCritSectEnter(&pThis->CritSect);
    2554     if (RT_SUCCESS(rc))
    2555     {
    2556         LogFunc(("pfnCallback=%p\n", pfnCallback));
    2557 
    2558         if (pfnCallback) /* Register. */
    2559         {
    2560             Assert(pThis->pfnCallback == NULL);
    2561             pThis->pfnCallback = pfnCallback;
    2562 
    2563 #ifdef VBOX_WITH_AUDIO_MMNOTIFICATION_CLIENT
    2564             if (pThis->m_pNotificationClient)
    2565                 pThis->m_pNotificationClient->RegisterCallback(pThis->pDrvIns, pfnCallback);
    2566 #endif
    2567         }
    2568         else /* Unregister. */
    2569         {
    2570             if (pThis->pfnCallback)
    2571                 pThis->pfnCallback = NULL;
    2572 
    2573 #ifdef VBOX_WITH_AUDIO_MMNOTIFICATION_CLIENT
    2574             if (pThis->m_pNotificationClient)
    2575                 pThis->m_pNotificationClient->UnregisterCallback();
    2576 #endif
    2577         }
    2578 
    2579         int rc2 = RTCritSectLeave(&pThis->CritSect);
    2580         AssertRC(rc2);
    2581     }
    2582 
    2583     return rc;
    2584 }
    2585 #endif
    25862536
    25872537
     
    26792629    pThis->IHostAudio.pfnStreamPlay         = drvHostDSoundHA_StreamPlay;
    26802630    pThis->IHostAudio.pfnStreamCapture      = drvHostDSoundHA_StreamCapture;
    2681 #ifdef VBOX_WITH_AUDIO_CALLBACKS
    2682     pThis->IHostAudio.pfnSetCallback        = drvHostDSoundHA_SetCallback;
    2683     pThis->pfnCallback                      = NULL;
    2684 #else
    26852631    pThis->IHostAudio.pfnSetCallback        = NULL;
    2686 #endif
    26872632    pThis->IHostAudio.pfnGetDevices         = drvHostDSoundHA_GetDevices;
    26882633    pThis->IHostAudio.pfnStreamGetPending   = drvHostDSoundHA_StreamGetPending;
     
    27162661    if (fUseNotificationClient)
    27172662    {
     2663        /* Get the notification interface. */
     2664# ifdef VBOX_WITH_AUDIO_CALLBACKS
     2665        PPDMIAUDIONOTIFYFROMHOST pIAudioNotifyFromHost = PDMIBASE_QUERY_INTERFACE(pDrvIns->pUpBase, PDMIAUDIONOTIFYFROMHOST);
     2666        Assert(pIAudioNotifyFromHost);
     2667# else
     2668        PPDMIAUDIONOTIFYFROMHOST pIAudioNotifyFromHost = NULL;
     2669# endif
     2670
    27182671        try
    27192672        {
    2720             pThis->m_pNotificationClient = new DrvHostAudioDSoundMMNotifClient();
     2673            pThis->m_pNotificationClient = new DrvHostAudioDSoundMMNotifClient(pIAudioNotifyFromHost);
    27212674
    27222675            hr = pThis->m_pNotificationClient->Initialize();
  • trunk/src/VBox/Devices/Audio/DrvHostAudioDSoundMMNotifClient.cpp

    r88235 r88361  
    3030
    3131
    32 DrvHostAudioDSoundMMNotifClient::DrvHostAudioDSoundMMNotifClient(void)
     32DrvHostAudioDSoundMMNotifClient::DrvHostAudioDSoundMMNotifClient(PPDMIAUDIONOTIFYFROMHOST pInterface)
    3333    : m_fRegisteredClient(false)
    3434    , m_cRef(1)
     35    , m_pIAudioNotifyFromHost(pInterface)
    3536{
    3637}
     
    8687
    8788/**
    88  * Registration callback implementation for storing our (required) contexts.
    89  *
    90  * @return  IPRT status code.
    91  * @param   pDrvIns             Driver instance to register the notification client to.
    92  * @param   pfnCallback         Audio callback to call by the notification client in case of new events.
    93  */
    94 int DrvHostAudioDSoundMMNotifClient::RegisterCallback(PPDMDRVINS pDrvIns, PFNPDMHOSTAUDIOCALLBACK pfnCallback)
    95 {
    96     this->m_pDrvIns     = pDrvIns;
    97     this->m_pfnCallback = pfnCallback;
    98 
    99     return VINF_SUCCESS;
    100 }
    101 
    102 /**
    103  * Unregistration callback implementation for cleaning up our mess when we're done handling
    104  * with notifications.
    105  */
    106 void DrvHostAudioDSoundMMNotifClient::UnregisterCallback(void)
    107 {
    108     this->m_pDrvIns     = NULL;
    109     this->m_pfnCallback = NULL;
    110 }
    111 
    112 /**
    11389 * Stub being called when attaching to the default audio endpoint.
    11490 * Does nothing at the moment.
     
    133109void DrvHostAudioDSoundMMNotifClient::doCallback(void)
    134110{
    135 #ifdef VBOX_WITH_AUDIO_CALLBACKS
    136     AssertPtr(this->m_pDrvIns);
    137     AssertPtr(this->m_pfnCallback);
    138 
    139     if (this->m_pfnCallback)
    140         /* Ignore rc */ this->m_pfnCallback(this->m_pDrvIns, PDMAUDIOBACKENDCBTYPE_DEVICES_CHANGED, NULL, 0);
    141 #endif
     111    if (m_pIAudioNotifyFromHost)
     112        m_pIAudioNotifyFromHost->pfnNotifyDevicesChanged(m_pIAudioNotifyFromHost);
    142113}
    143114
  • trunk/src/VBox/Devices/Audio/DrvHostAudioDSoundMMNotifClient.h

    r88235 r88361  
    4343public:
    4444
    45     DrvHostAudioDSoundMMNotifClient();
     45    DrvHostAudioDSoundMMNotifClient(PPDMIAUDIONOTIFYFROMHOST pInterface);
    4646    virtual ~DrvHostAudioDSoundMMNotifClient();
    4747
     
    5050    HRESULT Register(void);
    5151    void    Unregister(void);
    52 
    53     int     RegisterCallback(PPDMDRVINS pDrvIns, PFNPDMHOSTAUDIOCALLBACK pfnCallback);
    54     void    UnregisterCallback(void);
    5552
    5653    /** @name IUnknown interface
     
    6764    long                        m_cRef;
    6865
    69     PPDMDRVINS                  m_pDrvIns;
    70     PFNPDMHOSTAUDIOCALLBACK     m_pfnCallback;
     66    PPDMIAUDIONOTIFYFROMHOST    m_pIAudioNotifyFromHost;
    7167
    7268    HRESULT AttachToDefaultEndpoint();
Note: See TracChangeset for help on using the changeset viewer.

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