- Timestamp:
- Apr 5, 2021 12:23:47 AM (4 years ago)
- svn:sync-xref-src-repo-rev:
- 143608
- Location:
- trunk/src/VBox/Devices/Audio
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Audio/DrvHostAudioDSound.cpp
r88269 r88361 214 214 DSOUNDHOSTCFG Cfg; 215 215 /** List of devices of last enumeration. */ 216 PDMAUDIOHOSTENUM DeviceEnum;216 PDMAUDIOHOSTENUM DeviceEnum; 217 217 /** Whether this backend supports any audio input. */ 218 218 bool fEnabledIn; … … 224 224 LPDIRECTSOUNDCAPTURE8 pDSC; 225 225 #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; 232 227 #endif 233 228 /** Pointer to the input stream. */ … … 2539 2534 return VINF_SUCCESS; 2540 2535 } 2541 2542 #ifdef VBOX_WITH_AUDIO_CALLBACKS2543 /**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_CLIENT2564 if (pThis->m_pNotificationClient)2565 pThis->m_pNotificationClient->RegisterCallback(pThis->pDrvIns, pfnCallback);2566 #endif2567 }2568 else /* Unregister. */2569 {2570 if (pThis->pfnCallback)2571 pThis->pfnCallback = NULL;2572 2573 #ifdef VBOX_WITH_AUDIO_MMNOTIFICATION_CLIENT2574 if (pThis->m_pNotificationClient)2575 pThis->m_pNotificationClient->UnregisterCallback();2576 #endif2577 }2578 2579 int rc2 = RTCritSectLeave(&pThis->CritSect);2580 AssertRC(rc2);2581 }2582 2583 return rc;2584 }2585 #endif2586 2536 2587 2537 … … 2679 2629 pThis->IHostAudio.pfnStreamPlay = drvHostDSoundHA_StreamPlay; 2680 2630 pThis->IHostAudio.pfnStreamCapture = drvHostDSoundHA_StreamCapture; 2681 #ifdef VBOX_WITH_AUDIO_CALLBACKS2682 pThis->IHostAudio.pfnSetCallback = drvHostDSoundHA_SetCallback;2683 pThis->pfnCallback = NULL;2684 #else2685 2631 pThis->IHostAudio.pfnSetCallback = NULL; 2686 #endif2687 2632 pThis->IHostAudio.pfnGetDevices = drvHostDSoundHA_GetDevices; 2688 2633 pThis->IHostAudio.pfnStreamGetPending = drvHostDSoundHA_StreamGetPending; … … 2716 2661 if (fUseNotificationClient) 2717 2662 { 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 2718 2671 try 2719 2672 { 2720 pThis->m_pNotificationClient = new DrvHostAudioDSoundMMNotifClient( );2673 pThis->m_pNotificationClient = new DrvHostAudioDSoundMMNotifClient(pIAudioNotifyFromHost); 2721 2674 2722 2675 hr = pThis->m_pNotificationClient->Initialize(); -
trunk/src/VBox/Devices/Audio/DrvHostAudioDSoundMMNotifClient.cpp
r88235 r88361 30 30 31 31 32 DrvHostAudioDSoundMMNotifClient::DrvHostAudioDSoundMMNotifClient( void)32 DrvHostAudioDSoundMMNotifClient::DrvHostAudioDSoundMMNotifClient(PPDMIAUDIONOTIFYFROMHOST pInterface) 33 33 : m_fRegisteredClient(false) 34 34 , m_cRef(1) 35 , m_pIAudioNotifyFromHost(pInterface) 35 36 { 36 37 } … … 86 87 87 88 /** 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 handling104 * with notifications.105 */106 void DrvHostAudioDSoundMMNotifClient::UnregisterCallback(void)107 {108 this->m_pDrvIns = NULL;109 this->m_pfnCallback = NULL;110 }111 112 /**113 89 * Stub being called when attaching to the default audio endpoint. 114 90 * Does nothing at the moment. … … 133 109 void DrvHostAudioDSoundMMNotifClient::doCallback(void) 134 110 { 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); 142 113 } 143 114 -
trunk/src/VBox/Devices/Audio/DrvHostAudioDSoundMMNotifClient.h
r88235 r88361 43 43 public: 44 44 45 DrvHostAudioDSoundMMNotifClient( );45 DrvHostAudioDSoundMMNotifClient(PPDMIAUDIONOTIFYFROMHOST pInterface); 46 46 virtual ~DrvHostAudioDSoundMMNotifClient(); 47 47 … … 50 50 HRESULT Register(void); 51 51 void Unregister(void); 52 53 int RegisterCallback(PPDMDRVINS pDrvIns, PFNPDMHOSTAUDIOCALLBACK pfnCallback);54 void UnregisterCallback(void);55 52 56 53 /** @name IUnknown interface … … 67 64 long m_cRef; 68 65 69 PPDMDRVINS m_pDrvIns; 70 PFNPDMHOSTAUDIOCALLBACK m_pfnCallback; 66 PPDMIAUDIONOTIFYFROMHOST m_pIAudioNotifyFromHost; 71 67 72 68 HRESULT AttachToDefaultEndpoint();
Note:
See TracChangeset
for help on using the changeset viewer.