Changeset 53831 in vbox
- Timestamp:
- Jan 15, 2015 4:15:21 PM (10 years ago)
- Location:
- trunk
- Files:
-
- 8 edited
-
include/VBox/vmm/pdmaudioifs.h (modified) (6 diffs)
-
src/VBox/Devices/Audio/DevIchAc97.cpp (modified) (4 diffs)
-
src/VBox/Devices/Audio/DevIchHda.cpp (modified) (10 diffs)
-
src/VBox/Devices/Audio/DevIchHdaCodec.h (modified) (2 diffs)
-
src/VBox/Devices/testcase/tstDeviceStructSize.cpp (modified) (2 diffs)
-
src/VBox/Devices/testcase/tstDeviceStructSizeRC.cpp (modified) (6 diffs)
-
src/VBox/Main/src-client/ConsoleImpl2.cpp (modified) (2 diffs)
-
src/VBox/Main/src-client/DrvAudioVRDE.cpp (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/vmm/pdmaudioifs.h
r53567 r53831 414 414 typedef struct PDMIAUDIOCONNECTOR 415 415 { 416 DECLR3CALLBACKMEMBER(int, pfnQueryData, (PPDMIAUDIOCONNECTOR pInterface, uint32_t *pcbAvailIn, uint32_t *pcbFreeOut, uint32_t *pcSamplesLive)); 417 416 418 /** 417 419 * Reads PCM audio data from the host (input). … … 457 459 458 460 /** 459 * Initializes the NULL audio driver as a fallback .461 * Initializes the NULL audio driver as a fallback in case no host backend is available. 460 462 * 461 463 * @returns VBox status code. … … 559 561 PPDMAUDIOGSTSTRMOUT *ppGstStrmOut)); 560 562 563 DECLR3CALLBACKMEMBER(int, pfnPlayOut, (PPDMIAUDIOCONNECTOR pInterface)); 564 561 565 /** 562 566 * Checks whether a specific guest input stream is active or not. … … 640 644 641 645 /** 642 * End the host audio input streamm.646 * Ends the host audio input streamm. 643 647 * 644 648 * @returns VBox status code. … … 649 653 650 654 /** 651 * End the host output stream.655 * Ends the host output stream. 652 656 * 653 657 * @returns VBox status code. … … 658 662 659 663 /** 660 * Play audio out from stream buffer.664 * Plays an audio stream. 661 665 * 662 666 * @returns VBox status code. -
trunk/src/VBox/Devices/Audio/DevIchAc97.cpp
r53830 r53831 1060 1060 while (cbToWrite) 1061 1061 { 1062 uint32_t cbWritten;1063 1062 uint32_t cbWrittenMin = UINT32_MAX; 1064 1063 … … 1067 1066 1068 1067 #ifdef VBOX_WITH_PDM_AUDIO_DRIVER 1068 uint32_t cbWritten; 1069 1069 1070 /* Just multiplex the output to the connected backends. 1070 1071 * No need to utilize the virtual mixer here (yet). */ … … 1369 1370 pReg->sr |= SR_DCH; /* CELV? */ 1370 1371 pThis->bup_flag = 0; 1372 1373 rc = VINF_SUCCESS; 1371 1374 break; 1372 1375 } … … 1411 1414 default: 1412 1415 AssertMsgFailed(("Index %ld not supported\n", index)); 1416 rc = VERR_NOT_SUPPORTED; 1413 1417 break; 1414 1418 } -
trunk/src/VBox/Devices/Audio/DevIchHda.cpp
r53830 r53831 1572 1572 Assert((!fReset && !fInReset)); 1573 1573 1574 # ifdef VBOX_WITH_PDM_AUDIO_DRIVER 1574 1575 PHDADRIVER pDrv; 1576 # endif 1575 1577 switch (iReg) 1576 1578 { … … 2197 2199 * but "reports bytes" when all conditions are met (FIFOW). 2198 2200 */ 2199 static uint32_t hdaReadAudio(PHDASTATE pThis, PAUDMIXSINK pSink,2200 PHDASTREAMTRANSFERDESC pStreamDesc,2201 uint32_t u32CblLimit, uint32_t *pcbAvail, uint32_t *pcbRead)2201 static int hdaReadAudio(PHDASTATE pThis, PAUDMIXSINK pSink, 2202 PHDASTREAMTRANSFERDESC pStreamDesc, 2203 uint32_t u32CblLimit, uint32_t *pcbAvail, uint32_t *pcbRead) 2202 2204 { 2203 2205 PHDABDLEDESC pBdle = &pThis->StInBdle; /** @todo Add support for mic in. */ … … 2252 2254 } 2253 2255 #else 2254 static uint32_t hdaReadAudio(PHDASTATE pThis, PHDASTREAMTRANSFERDESC pStreamDesc, uint32_t *pu32Avail, bool *fStop, uint32_t u32CblLimit) 2256 static int hdaReadAudio(PHDASTATE pThis, PHDASTREAMTRANSFERDESC pStreamDesc, 2257 uint32_t u32CblLimit, uint32_t *pu32Avail, uint32_t *pcbRead) 2255 2258 { 2256 2259 PHDABDLEDESC pBdle = &pThis->StInBdle; … … 2260 2263 uint32_t cbBackendCopy = 0; 2261 2264 2265 int rc; 2266 2262 2267 Log(("hda:ra: CVI(pos:%d, len:%d)\n", pBdle->u32BdleCviPos, pBdle->u32BdleCviLen)); 2263 2268 2264 2269 cb2Copy = hdaCalculateTransferBufferLength(pBdle, pStreamDesc, *pu32Avail, u32CblLimit); 2265 2270 if (!cb2Copy) 2271 { 2266 2272 /* if we enter here we can't report "unreported bits" */ 2267 *fStop = true; 2273 rc = VERR_NO_DATA; 2274 } 2268 2275 else 2269 2276 { … … 2278 2285 PDMDevHlpPCIPhysWrite(pThis->CTX_SUFF(pDevIns), pBdle->u64BdleCviAddr + pBdle->u32BdleCviPos, pBdle->au8HdaBuffer, 2279 2286 cbBackendCopy); 2280 STAM_COUNTER_ADD(&pThis->StatBytesWritten, cbBackendCopy);2281 2287 2282 2288 /* Don't see any reason why cb2Copy would differ from cbBackendCopy */ … … 2284 2290 2285 2291 if (pBdle->cbUnderFifoW + cbBackendCopy > hdaFifoWToSz(pThis, 0)) 2292 { 2286 2293 hdaBackendReadTransferReported(pBdle, cb2Copy, cbBackendCopy, &cbTransferred, pu32Avail); 2294 rc = VINF_SUCCESS; 2295 } 2287 2296 else 2288 2297 { 2289 2298 hdaBackendTransferUnreported(pThis, pBdle, pStreamDesc, cbBackendCopy, pu32Avail); 2290 *fStop = true;2299 rc = VERR_NO_DATA; 2291 2300 } 2292 2301 } … … 2294 2303 Assert((cbTransferred <= (SDFIFOS(pThis, 0) + 1))); 2295 2304 Log(("hda:ra: CVI(pos:%d, len:%d) cbTransferred: %d\n", pBdle->u32BdleCviPos, pBdle->u32BdleCviLen, cbTransferred)); 2296 return cbTransferred; 2305 2306 if (pcbRead) 2307 *pcbRead = cbTransferred; 2308 2309 return rc; 2297 2310 } 2298 2311 #endif /* VBOX_WITH_PDM_AUDIO_DRIVER */ … … 2326 2339 pBdle->u64BdleCviAddr + pBdle->u32BdleCviPos, 2327 2340 pBdle->au8HdaBuffer + pBdle->cbUnderFifoW, cb2Copy); 2341 #ifdef VBOX_WITH_PDM_AUDIO_DRIVER 2328 2342 STAM_COUNTER_ADD(&pThis->StatBytesRead, cb2Copy); 2343 #endif 2329 2344 2330 2345 /* … … 2611 2626 LogFlowFunc(("pThis=%p, cbAvail=%RU32\n", pThis, cbAvail)); 2612 2627 #else 2613 static DECLCALLBACK(int) hdaTransfer(PHDACODEC pCodec, ENMSOUNDSOURCE enmSrc, int cbAvail)2614 { 2615 AssertPtrReturn Void(pCodec, VERR_INVALID_POINTER);2628 static DECLCALLBACK(int) hdaTransfer(PHDACODEC pCodec, ENMSOUNDSOURCE enmSrc, uint32_t cbAvail) 2629 { 2630 AssertPtrReturn(pCodec, VERR_INVALID_POINTER); 2616 2631 PHDASTATE pThis = pCodec->pHDAState; 2617 AssertPtrReturn Void(pThis, VERR_INVALID_POINTER);2632 AssertPtrReturn(pThis, VERR_INVALID_POINTER); 2618 2633 #endif /* VBOX_WITH_PDM_AUDIO_DRIVER */ 2619 2634 int rc; … … 2682 2697 rc = hdaReadAudio(pThis, pSink, &StreamDesc, u32CblLimit, &cbAvail, &cbWritten); 2683 2698 #else 2684 rc = hdaReadAudio(pThis, &StreamDesc, u32CblLimit, &cbAvail, &cbWritten);2699 rc = hdaReadAudio(pThis, &StreamDesc, u32CblLimit, (uint32_t *)&cbAvail, &cbWritten); 2685 2700 #endif /* VBOX_WITH_PDM_AUDIO_DRIVER */ 2686 2701 break; 2687 2702 case PO_INDEX: 2688 #ifdef VBOX_WITH_PDM_AUDIO_DRIVER2689 2703 rc = hdaWriteAudio(pThis, &StreamDesc, u32CblLimit, &cbAvail, &cbWritten); 2690 #else2691 rc = hdaWriteAudio(pThis, &StreamDesc, u32CblLimit, &cbAvail, &cbWritten);2692 #endif /* VBOX_WITH_PDM_AUDIO_DRIVER */2693 2704 break; 2694 2705 #ifdef VBOX_WITH_PDM_AUDIO_DRIVER -
trunk/src/VBox/Devices/Audio/DevIchHdaCodec.h
r53442 r53831 117 117 DECLR3CALLBACKMEMBER(int, pfnOpenOut, (PHDASTATE pThis, const char *pszName, PPDMAUDIOSTREAMCFG pCfg)); 118 118 DECLR3CALLBACKMEMBER(int, pfnSetVolume, (PHDASTATE pThis, bool fMute, uint8_t uVolLeft, uint8_t uVolRight)); 119 /* Callbacks for host driver backends. */120 DECLR3CALLBACKMEMBER(void, pfnTransfer, (PHDADRIVER pDrv, ENMSOUNDSOURCE enmSource, uint32_t cbAvail));121 119 #else 122 120 QEMUSoundCard card; … … 126 124 SWVoiceOut *SwVoiceOut; 127 125 /* Callbacks for host driver backends. */ 128 DECLR3CALLBACKMEMBER( void, pfnTransfer, (PHDACODEC pCodec, ENMSOUNDSOURCE enmSource, int cbAvail));126 DECLR3CALLBACKMEMBER(int, pfnTransfer, (PHDACODEC pCodec, ENMSOUNDSOURCE enmSource, uint32_t cbAvail)); 129 127 #endif /* VBOX_WITH_PDM_AUDIO_DRIVER */ 130 128 /* Callbacks by codec implementation. */ -
trunk/src/VBox/Devices/testcase/tstDeviceStructSize.cpp
r53442 r53831 106 106 107 107 #ifdef VBOX_WITH_PDM_AUDIO_DRIVER 108 # undef LOG_GROUP109 108 # include <VBox/vmm/pdmaudioifs.h> 110 109 #endif 110 #undef LOG_GROUP 111 #include "../Audio/DevIchAc97.cpp" 112 #undef LOG_GROUP 111 113 #include "../Audio/DevIchHda.cpp" 112 114 … … 130 132 rc++; \ 131 133 } \ 132 /*else */\133 /*printf("%#08x %s\n", RT_OFFSETOF(type, m), #m);*/\134 else \ 135 printf("%#08x (%d) %s\n", RT_OFFSETOF(type, m), RT_OFFSETOF(type, m), #type "." #m); \ 134 136 } while (0) 135 137 -
trunk/src/VBox/Devices/testcase/tstDeviceStructSizeRC.cpp
r53624 r53831 8 8 9 9 /* 10 * Copyright (C) 2006-201 4Oracle Corporation10 * Copyright (C) 2006-2015 Oracle Corporation 11 11 * 12 12 * This file is part of VirtualBox Open Source Edition (OSE), as … … 106 106 #undef LOG_GROUP 107 107 #include "../PC/DevHPET.cpp" 108 #undef LOG_GROUP 109 #include "../Audio/DevIchAc97.cpp" 108 110 #undef LOG_GROUP 109 111 #include "../Audio/DevIchHda.cpp" … … 1834 1836 GEN_CHECK_OFF(HPETTIMER, u8Wrap); 1835 1837 1838 #ifdef VBOX_WITH_PDM_AUDIO_DRIVER 1839 GEN_CHECK_SIZE(AC97DRIVER); 1840 GEN_CHECK_OFF(AC97DRIVER, Node); 1841 GEN_CHECK_OFF(AC97DRIVER, pAC97State); 1842 GEN_CHECK_OFF(AC97DRIVER, Flags); 1843 GEN_CHECK_OFF(AC97DRIVER, uLUN); 1844 GEN_CHECK_OFF(AC97DRIVER, pConnector); 1845 GEN_CHECK_OFF(AC97DRIVER, LineIn); 1846 GEN_CHECK_OFF(AC97DRIVER, MicIn); 1847 GEN_CHECK_OFF(AC97DRIVER, Out); 1848 1849 GEN_CHECK_SIZE(HDADRIVER); 1850 GEN_CHECK_OFF(HDADRIVER, Node); 1851 GEN_CHECK_OFF(HDADRIVER, pHDAState); 1852 GEN_CHECK_OFF(HDADRIVER, Flags); 1853 GEN_CHECK_OFF(HDADRIVER, uLUN); 1854 GEN_CHECK_OFF(HDADRIVER, pConnector); 1855 GEN_CHECK_OFF(HDADRIVER, LineIn); 1856 GEN_CHECK_OFF(HDADRIVER, MicIn); 1857 GEN_CHECK_OFF(HDADRIVER, Out); 1858 #endif 1859 1836 1860 GEN_CHECK_SIZE(HDASTATE); 1837 1861 GEN_CHECK_OFF(HDASTATE, PciDev); … … 1844 1868 GEN_CHECK_OFF(HDASTATE, au32Regs[0]); 1845 1869 GEN_CHECK_OFF(HDASTATE, au32Regs[HDA_NREGS]); 1846 GEN_CHECK_OFF(HDASTATE, StInBdle);1847 GEN_CHECK_OFF(HDASTATE, StOutBdle);1848 GEN_CHECK_OFF(HDASTATE, StMicBdle);1849 1870 GEN_CHECK_OFF(HDASTATE, u64CORBBase); 1850 1871 GEN_CHECK_OFF(HDASTATE, u64RIRBBase); … … 1859 1880 GEN_CHECK_OFF(HDASTATE, fRCEnabled); 1860 1881 #ifdef VBOX_WITH_PDM_AUDIO_DRIVER 1861 GEN_CHECK_OFF(HDASTATE, cLUNs); 1882 GEN_CHECK_OFF(HDASTATE, pTimer); 1883 GEN_CHECK_OFF(HDASTATE, uTicks); 1884 # ifdef VBOX_WITH_STATISTICS 1885 GEN_CHECK_OFF(HDASTATE, StatTimer); 1886 # endif 1862 1887 GEN_CHECK_OFF(HDASTATE, pCodec); 1863 GEN_CHECK_OFF(HDASTATE, paDrv);1888 GEN_CHECK_OFF(HDASTATE, lstDrv); 1864 1889 GEN_CHECK_OFF(HDASTATE, pMixer); 1865 1890 GEN_CHECK_OFF(HDASTATE, pSinkLineIn); … … 1867 1892 #else 1868 1893 GEN_CHECK_OFF(HDASTATE, pCodec); 1894 #endif 1869 1895 GEN_CHECK_OFF(HDASTATE, u64BaseTS); 1870 1896 GEN_CHECK_OFF(HDASTATE, u8Counter); 1871 #endif1872 1897 1873 1898 return (0); -
trunk/src/VBox/Main/src-client/ConsoleImpl2.cpp
r53815 r53831 2688 2688 case AudioDriverType_WinMM: 2689 2689 { 2690 # ifdef VBOX_WITH_PDM_AUDIO_DRIVER2690 # ifdef VBOX_WITH_PDM_AUDIO_DRIVER 2691 2691 #error "Port WinMM audio backend!" /** @todo Still needed? */ 2692 # else2692 # else 2693 2693 InsertConfigString(pCfg, "AudioDriver", "winmm"); 2694 # endif2694 # endif 2695 2695 break; 2696 2696 } … … 2709 2709 case AudioDriverType_SolAudio: 2710 2710 { 2711 #ifdef VBOX_WITH_PDM_AUDIO_DRIVER 2712 #error "Port Solaris audio backend!" /** @todo Port Solaris driver. */ 2713 #else 2711 # ifdef VBOX_WITH_PDM_AUDIO_DRIVER 2712 /** @todo Hack alert: Find a better solution. */ 2713 LogRel(("Audio: WARNING: Solaris Audio is deprecated, please switch to OSS!\n")); 2714 LogRel(("Audio: Automatically setting host audio backend to OSS\n")); 2715 /* Manually set backend to OSS for now. */ 2716 InsertConfigString(pLunL1, "Driver", "OSSAudio"); 2717 # else 2714 2718 InsertConfigString(pCfg, "AudioDriver", "solaudio"); 2715 # endif2719 # endif 2716 2720 break; 2717 2721 } -
trunk/src/VBox/Main/src-client/DrvAudioVRDE.cpp
r53442 r53831 204 204 pHstStrmOut->Props.fSigned); 205 205 206 LogFlowFunc(("hz=%d, chan=%d, cBits=%d, fSigned=%RTbool, format=%ld\n", 206 pVRDEStrmOut->old_ticks = now; 207 208 int cSamplesToSend = live; 209 210 /* if (!cSamplesToSend) 211 { 212 if (pcSamplesPlayed) 213 pcSamplesPlayed = 0; 214 215 return 0; 216 }*/ 217 218 LogFlowFunc(("uFreq=%RU32, cChan=%RU8, cBits=%RU8, fSigned=%RTbool, enmFormat=%ld, cSamplesToSend=%RU32\n", 207 219 pHstStrmOut->Props.uHz, pHstStrmOut->Props.cChannels, 208 220 pHstStrmOut->Props.cBits, pHstStrmOut->Props.fSigned, 209 format)); 210 211 pVRDEStrmOut->old_ticks = now; 212 int cSamplesToSend = RT_MIN(live, cSamplesPlayed); 221 format, cSamplesToSend)); 213 222 214 223 uint32_t cReadTotal = 0; … … 218 227 int rc = audioMixBufAcquire(&pHstStrmOut->MixBuf, cSamplesToSend, 219 228 &pSamples, &cRead); 220 if (RT_SUCCESS(rc)) 229 if ( RT_SUCCESS(rc) 230 && cRead) 221 231 { 222 232 cReadTotal = cRead; … … 228 238 &pSamples, &cRead); 229 239 if (RT_SUCCESS(rc)) 230 {231 cReadTotal += cRead;232 240 pDrv->pConsoleVRDPServer->SendAudioSamples(pSamples, cRead, format); 233 } 241 242 cReadTotal += cRead; 234 243 } 235 244 } 236 245 237 audioMixBufFinish(&pHstStrmOut->MixBuf, cReadTotal); 238 246 audioMixBufFinish(&pHstStrmOut->MixBuf, cSamplesToSend); 247 248 /* 249 * Always report back all samples acquired, regardless of whether the 250 * VRDP server actually did process those. 251 */ 239 252 if (pcSamplesPlayed) 240 253 *pcSamplesPlayed = cReadTotal; 241 254 242 LogFlowFunc(("c SamplesToSend=%RU32, rc=%Rrc\n", cSamplesToSend, rc));255 LogFlowFunc(("cReadTotal=%RU32, rc=%Rrc\n", cReadTotal, rc)); 243 256 return rc; 244 257 } … … 269 282 AssertPtrReturn(pDrv, VERR_INVALID_POINTER); 270 283 284 PVRDESTREAMIN pVRDEStrmOut = (PVRDESTREAMIN)pHstStrmOut; 285 AssertPtrReturn(pVRDEStrmOut, VERR_INVALID_POINTER); 286 271 287 LogFlowFunc(("enmStreamCmd=%ld\n", enmStreamCmd)); 272 288 273 return VINF_SUCCESS; 274 } 275 276 static DECLCALLBACK(int) drvAudioVRDEControlIn(PPDMIHOSTAUDIO pInterface, PPDMAUDIOHSTSTRMIN pHstStrmIn2, /** @todo Fix param types! */ 289 audioMixBufReset(&pHstStrmOut->MixBuf); 290 291 return VINF_SUCCESS; 292 } 293 294 static DECLCALLBACK(int) drvAudioVRDEControlIn(PPDMIHOSTAUDIO pInterface, PPDMAUDIOHSTSTRMIN pHstStrmIn, 277 295 PDMAUDIOSTREAMCMD enmStreamCmd) 278 296 { … … 280 298 AssertPtrReturn(pDrv, VERR_INVALID_POINTER); 281 299 282 PVRDESTREAMIN pVRDEStrmIn = (PVRDESTREAMIN)pHstStrmIn 2;300 PVRDESTREAMIN pVRDEStrmIn = (PVRDESTREAMIN)pHstStrmIn; 283 301 AssertPtrReturn(pVRDEStrmIn, VERR_INVALID_POINTER); 284 302 285 PPDMAUDIOHSTSTRMIN p HstStrmIn = &pVRDEStrmIn->HstStrmIn;303 PPDMAUDIOHSTSTRMIN pThisStrmIn = &pVRDEStrmIn->HstStrmIn; 286 304 287 305 LogFlowFunc(("enmStreamCmd=%ld\n", enmStreamCmd)); 306 307 if (!pDrv->pConsoleVRDPServer) 308 return VINF_SUCCESS; 309 310 audioMixBufReset(&pThisStrmIn->MixBuf); 288 311 289 312 /* Initialize only if not already done. */ 290 313 if (enmStreamCmd == PDMAUDIOSTREAMCMD_ENABLE) 291 314 { 292 int rc2 = pDrv->pConsoleVRDPServer->SendAudioInputBegin(NULL, pVRDEStrmIn, audioMixBufSize(&p HstStrmIn->MixBuf),293 p HstStrmIn->Props.uHz,294 p HstStrmIn->Props.cChannels, pHstStrmIn->Props.cBits);315 int rc2 = pDrv->pConsoleVRDPServer->SendAudioInputBegin(NULL, pVRDEStrmIn, audioMixBufSize(&pThisStrmIn->MixBuf), 316 pThisStrmIn->Props.uHz, 317 pThisStrmIn->Props.cChannels, pThisStrmIn->Props.cBits); 295 318 #ifdef DEBUG 296 319 if (rc2 == VERR_NOT_SUPPORTED) … … 299 322 } 300 323 else if (enmStreamCmd == PDMAUDIOSTREAMCMD_DISABLE) 324 { 301 325 pDrv->pConsoleVRDPServer->SendAudioInputEnd(NULL /* pvUserCtx */); 326 } 302 327 303 328 return VINF_SUCCESS; … … 345 370 { 346 371 LogFlowThisFunc(("fIntercept=%RTbool\n", fIntercept)); 372 347 373 return VINF_SUCCESS; /* Never veto. */ 348 374 } … … 430 456 /* IBase */ 431 457 pDrvIns->IBase.pfnQueryInterface = drvAudioVRDEQueryInterface; 458 /* IHostAudioR3 */ 432 459 pThis->IHostAudioR3.pfnInitIn = drvAudioVRDEInitIn; 433 460 pThis->IHostAudioR3.pfnInitOut = drvAudioVRDEInitOut;
Note:
See TracChangeset
for help on using the changeset viewer.

