VirtualBox

Changeset 54234 in vbox


Ignore:
Timestamp:
Feb 17, 2015 3:04:53 PM (10 years ago)
Author:
vboxsync
Message:

PDM/Audio: Make HDA emulation work w/ disabled backends.

File:
1 edited

Legend:

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

    r54230 r54234  
    3737#include <iprt/list.h>
    3838
    39 #if 0
    40 /* Warning: Enabling this causes a *lot* of output! */
    4139#ifdef LOG_GROUP
    4240# undef LOG_GROUP
     
    4442#define LOG_GROUP LOG_GROUP_DEV_AUDIO
    4543#include <VBox/log.h>
    46 #endif
    4744
    4845#include "VBoxDD.h"
     
    22642261    {
    22652262        /* if we enter here we can't report "unreported bits" */
    2266         rc = VERR_NO_DATA;
     2263        rc = VINF_EOF;
    22672264    }
    22682265    else
     
    22902287        {
    22912288            hdaBackendTransferUnreported(pThis, pBdle, pStreamDesc, cbBackendCopy, pu32Avail);
    2292             rc = VERR_NO_DATA;
     2289            rc = VINF_EOF;
    22932290        }
    22942291    }
     
    23252322    if (!cb2Copy)
    23262323    {
    2327         rc = VERR_NO_DATA;
     2324        rc = VINF_EOF;
    23282325    }
    23292326    else
     
    23502347                if (pDrv->pConnector->pfnIsActiveOut(pDrv->pConnector, pDrv->Out.pStrmOut))
    23512348                {
    2352                     rc = pDrv->pConnector->pfnWrite(pDrv->pConnector, pDrv->Out.pStrmOut,
    2353                                                     pBdle->au8HdaBuffer, cb2Copy + pBdle->cbUnderFifoW,
    2354                                                     &cbWritten);
    2355                     if (RT_FAILURE(rc))
     2349                    int rc2 = pDrv->pConnector->pfnWrite(pDrv->pConnector, pDrv->Out.pStrmOut,
     2350                                                         pBdle->au8HdaBuffer, cb2Copy + pBdle->cbUnderFifoW,
     2351                                                         &cbWritten);
     2352                    if (RT_FAILURE(rc2))
    23562353                        continue;
    23572354                }
     
    23752372            /* Not enough bytes to be processed and reported, we'll try our luck next time around. */
    23762373            hdaBackendTransferUnreported(pThis, pBdle, pStreamDesc, cb2Copy, NULL);
    2377             rc = VERR_NO_DATA;
     2374            rc = VINF_EOF;
    23782375        }
    23792376    }
     
    25502547
    25512548    PHDADRIVER pDrv;
    2552     uint32_t cbIn, cbOut;
     2549
     2550    LogFlowFuncEnter();
    25532551
    25542552    RTListForEach(&pThis->lstDrv, pDrv, HDADRIVER, Node)
    25552553    {
    2556         if (!pDrv->pConnector->pfnIsOutputOK(pDrv->pConnector, pDrv->Out.pStrmOut))
    2557         {
    2558             pDrv->cSamplesLive = 0;
    2559             continue;
    2560         }
    2561 
     2554        uint32_t cbIn, cbOut;
    25622555        rc = pDrv->pConnector->pfnQueryStatus(pDrv->pConnector,
    25632556                                              &cbIn, &cbOut, &pDrv->cSamplesLive);
    25642557        if (RT_SUCCESS(rc))
    25652558        {
    2566             if (cbIn || cbOut)
    2567                 LogFlowFunc(("\tLUN#%RU8: cbIn=%RU32, cbOut=%RU32\n", pDrv->uLUN, cbIn, cbOut));
     2559            LogFlowFunc(("\tLUN#%RU8: [1] cbIn=%RU32, cbOut=%RU32\n", pDrv->uLUN, cbIn, cbOut));
     2560
     2561            if (pDrv->cSamplesLive)
     2562            {
     2563                uint32_t cSamplesPlayed;
     2564                int rc2 = pDrv->pConnector->pfnPlayOut(pDrv->pConnector, &cSamplesPlayed);
     2565                if (RT_SUCCESS(rc2))
     2566                {
     2567                    LogFlowFunc(("LUN#%RU8: cSamplesLive=%RU32, cSamplesPlayed=%RU32\n",
     2568                                 pDrv->uLUN, pDrv->cSamplesLive, cSamplesPlayed));
     2569                    Assert(pDrv->cSamplesLive >= cSamplesPlayed);
     2570                    pDrv->cSamplesLive -= cSamplesPlayed;
     2571                }
     2572
     2573                rc = pDrv->pConnector->pfnQueryStatus(pDrv->pConnector,
     2574                                                      &cbIn, &cbOut, &pDrv->cSamplesLive);
     2575                if (RT_SUCCESS(rc))
     2576                    LogFlowFunc(("\tLUN#%RU8: [2] cbIn=%RU32, cbOut=%RU32\n", pDrv->uLUN, cbIn, cbOut));
     2577            }
    25682578
    25692579            cbInMax  = RT_MAX(cbInMax, cbIn);
     
    25742584    }
    25752585
     2586    LogFlowFunc(("cbInMax=%RU32, cbOutMin=%RU32\n", cbInMax, cbOutMin));
     2587
     2588    if (cbOutMin == UINT32_MAX)
     2589        cbOutMin = 0;
     2590
    25762591    /*
    25772592     * Playback.
     
    25812596        Assert(cbOutMin != UINT32_MAX);
    25822597        hdaTransfer(pThis, PO_INDEX, cbOutMin); /** @todo Add rc! */
    2583     }
    2584     else
    2585     {
    2586         RTListForEach(&pThis->lstDrv, pDrv, HDADRIVER, Node)
    2587         {
    2588             /*if (pDrv->cSamplesLive)
    2589                 pDrv->pConnector->pfnPlayOut(pDrv->pConnector);*/
    2590         }
    25912598    }
    25922599
     
    25982605
    25992606    TMTimerSet(pThis->pTimer, TMTimerGet(pThis->pTimer) + pThis->uTicks);
     2607
     2608    LogFlowFuncLeave();
    26002609
    26012610    STAM_PROFILE_STOP(&pThis->StatTimer, a);
     
    27052714        hdaStreamCounterUpdate(pThis, pBdle, &StreamDesc, cbWritten);
    27062715
    2707         if (   !hdaDoNextTransferCycle(pThis, pBdle, &StreamDesc)
    2708             || RT_FAILURE(rc))
    2709         {
    2710             if (rc == VERR_NO_DATA) /* No more data to process. */
    2711                 rc = VINF_SUCCESS;
    2712 
     2716        if (!hdaDoNextTransferCycle(pThis, pBdle, &StreamDesc))
     2717            break;
     2718
     2719        if (   RT_FAILURE(rc)
     2720            || rc == VINF_EOF) /* All data processed? */
     2721        {
    27132722            break;
    27142723        }
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