Ignore:
Timestamp:
Oct 8, 2008, 11:28:16 PM (17 years ago)
Author:
rjerant
Message:

Add GetHwPtr() to code base

File:
1 edited

Legend:

Unmodified
Added
Removed
  • OCO/trunk/drv16/waverec.cpp

    r252 r391  
    4141BOOL WAVEREC::Open(ULONG ulDevice, ULONG ulStreamType, ULONG ulSysFileNum, OSSSTREAMID FAR *pStreamId)
    4242{
    43     if(StreamId == 0) 
    44     {
    45         if(OSS16_WaveOpen(ulDevice, ulStreamType, ulSysFileNum, pStreamId) != OSSERR_SUCCESS) 
     43    if(StreamId == 0)
     44    {
     45        if(OSS16_WaveOpen(ulDevice, ulStreamType, ulSysFileNum, pStreamId) != OSSERR_SUCCESS)
    4646        {
    4747            dprintf(("OSS16_WaveOpen failed!!"));
     
    6767BOOL WAVEREC::Close(OSSSTREAMID StreamId)
    6868{
    69     if(devCaps[ulDeviceNr].waveInCaps.nrStreams > 1) 
     69    if(devCaps[ulDeviceNr].waveInCaps.nrStreams > 1)
    7070    {
    7171        return OSS16_WaveClose(StreamId) == OSSERR_SUCCESS;
     
    115115    //while the stream is playing.
    116116    ULONG minimumsize = (ulFirstBufSize/2);
    117     if(minimumsize && minimumsize < fragsize) 
     117    if(minimumsize && minimumsize < fragsize)
    118118    {
    119119        while(minimumsize < fragsize) fragsize = fragsize / 2;
    120            
    121         if(fragsize < ulPCMConsumeRate/256) 
     120
     121        if(fragsize < ulPCMConsumeRate/256)
    122122            {//lower limit; don't accept extremely small buffers
    123123                fragsize = ulPCMConsumeRate/256;
    124124            }
    125     }   
     125    }
    126126    samplesize = (int)pConfigInfo->ulHwSampleSize;
    127127
     
    133133
    134134    dprintf(("WAVEREC::ConfigDev: Fragment size %d", (USHORT)fragsize));
    135  
     135
    136136    hwparam.ulSampleRate    = pConfigInfo->ulHwSampleRate;
    137137    hwparam.ulBitsPerSample = pConfigInfo->ulHwBitsPerSample;
     
    147147//Read and convert (if required) wave data from audio device
    148148//******************************************************************************
    149 BOOL WAVEREC::Transfer(OSSSTREAMID StreamId, PWAVECONFIGINFO pConfigInfo, 
    150                        LINEAR pUserBuffer, ULONG ulBytesToTransfer, 
     149BOOL WAVEREC::Transfer(OSSSTREAMID StreamId, PWAVECONFIGINFO pConfigInfo,
     150                       LINEAR pUserBuffer, ULONG ulBytesToTransfer,
    151151                       ULONG FAR *pulBytesTransferred)
    152152{
    153     if(pConfigInfo->usConversion == CONVERT_NONE) 
    154     {
    155         if(AddBuffer(StreamId, pConfigInfo, pUserBuffer, ulBytesToTransfer, pulBytesTransferred) == FALSE) 
     153    if(pConfigInfo->usConversion == CONVERT_NONE)
     154    {
     155        if(AddBuffer(StreamId, pConfigInfo, pUserBuffer, ulBytesToTransfer, pulBytesTransferred) == FALSE)
    156156        {
    157157            *pulBytesTransferred = 0;
     
    159159        }
    160160    }
    161     else 
    162     {
    163         if(pConfigInfo->pfnConvert) 
     161    else
     162    {
     163        if(pConfigInfo->pfnConvert)
    164164        {
    165165            ULONG ulCvtBufferSize;
     
    169169            ulCvtBufferSize = min(CONVERSION_BUFFER_SIZE, ulCvtBufferSize);
    170170
    171             if(AddBuffer(StreamId, pConfigInfo, pConfigInfo->pConversionBuffer, ulCvtBufferSize, pulBytesTransferred) == FALSE) 
     171            if(AddBuffer(StreamId, pConfigInfo, pConfigInfo->pConversionBuffer, ulCvtBufferSize, pulBytesTransferred) == FALSE)
    172172            {
    173173                *pulBytesTransferred = 0;
     
    198198// Perform sample rate conversion if required, else send buffer directly to ALSA
    199199//******************************************************************************
    200 BOOL WAVEREC::AddBuffer(OSSSTREAMID StreamId, PWAVECONFIGINFO pConfigInfo, LINEAR pUserBuffer, 
     200BOOL WAVEREC::AddBuffer(OSSSTREAMID StreamId, PWAVECONFIGINFO pConfigInfo, LINEAR pUserBuffer,
    201201                        ULONG ulBytesToTransfer, ULONG FAR *pulBytesTransferred)
    202202{
    203     if(pConfigInfo->fSampleRateConversion) 
     203    if(pConfigInfo->fSampleRateConversion)
    204204    {
    205205        ULONG ulCvtBufferSize, ulHwSampleCount, ulSampleCount;
     
    207207
    208208        //bytes to convert is bounded by bytes to transfer & max conversion buffer size
    209         ulCvtBufferSize = SRATE_CONVERT_LENGTH_INVERT(ulBytesToTransfer, pConfigInfo->ulSRatePosition, 
     209        ulCvtBufferSize = SRATE_CONVERT_LENGTH_INVERT(ulBytesToTransfer, pConfigInfo->ulSRatePosition,
    210210                                                      pConfigInfo->ulSRateIncrement);
    211211        ulCvtBufferSize = min(CONVERSION_BUFFER_SIZE, ulCvtBufferSize);
    212        
     212
    213213        //round to sample boundary
    214214        ulCvtBufferSize &= ~(pConfigInfo->ulHwSampleSize - 1);
    215215        if(ulCvtBufferSize == 0) {
    216216            *pulBytesTransferred = ulBytesToTransfer;
    217             if(pConfigInfo->ulSRatePosition >= pConfigInfo->ulSRateIncrement) { 
     217            if(pConfigInfo->ulSRatePosition >= pConfigInfo->ulSRateIncrement) {
    218218                pConfigInfo->ulSRatePosition -= pConfigInfo->ulSRateIncrement;
    219219            }
     
    223223
    224224        if(OSS16_WaveAddBuffer(StreamId, pConfigInfo->pSRateConvBuffer, ulCvtBufferSize, pulBytesTransferred) != OSSERR_SUCCESS ||
    225            *pulBytesTransferred == 0) 
     225           *pulBytesTransferred == 0)
    226226        {
    227227            *pulBytesTransferred = 0;
     
    229229        }
    230230        ulHwSampleCount      = *pulBytesTransferred/pConfigInfo->ulHwSampleSize;
    231        
    232         //convert back from conversion to 'real' 
    233         ulSampleCount        = SRATE_CONVERT_LENGTH(ulHwSampleCount, pConfigInfo->ulSRatePosition, 
     231
     232        //convert back from conversion to 'real'
     233        ulSampleCount        = SRATE_CONVERT_LENGTH(ulHwSampleCount, pConfigInfo->ulSRatePosition,
    234234                                                    pConfigInfo->ulSRateIncrement);
    235235        *pulBytesTransferred = ulSampleCount*pConfigInfo->ulHwSampleSize;
    236        
     236
    237237        if(ulSampleCount == 0) {
    238238            return FALSE;
     
    245245
    246246        //convert recorded audio data
    247         pConfigInfo->pfnSRateConv(pConfigInfo->pSRateConvBuffer, *pulBytesTransferred, pUserBuffer, 
     247        pConfigInfo->pfnSRateConv(pConfigInfo->pSRateConvBuffer, *pulBytesTransferred, pUserBuffer,
    248248                                  pConfigInfo->ulSRatePosition, pConfigInfo->ulSRateIncrement);
    249249
     
    253253        pConfigInfo->ulSRatePosition  = (ULONG)lSRatePosition;
    254254    }
    255     else 
    256     if(OSS16_WaveAddBuffer(StreamId, pUserBuffer, ulBytesToTransfer, pulBytesTransferred) != OSSERR_SUCCESS) 
     255    else
     256    if(OSS16_WaveAddBuffer(StreamId, pUserBuffer, ulBytesToTransfer, pulBytesTransferred) != OSSERR_SUCCESS)
    257257    {
    258258        *pulBytesTransferred = 0;
     
    293293    //round to sample boundary
    294294    *pulStreamSpace &= ~(pConfigInfo->ulSampleSize - 1);
     295    return TRUE;
     296}
     297//******************************************************************************
     298//Get Bytes written to cyclic buffer (+ take conversion factor into account)
     299//******************************************************************************
     300BOOL WAVEREC::GetHwPtr(OSSSTREAMID StreamId, PWAVECONFIGINFO pConfigInfo, ULONG FAR *pulHwPtr)
     301{
     302    ULONG space,cvt;
     303
     304    if(OSS16_WaveGetHwPtr(StreamId, &space) != OSSERR_SUCCESS) {
     305        *pulHwPtr = 0;
     306        #ifdef DEBUG
     307        dprintf(("OSS16_WAVEREC::WaveGetHwPtr: Failed"));
     308        #endif /* DEBUG */
     309        return FALSE;
     310    }
     311    cvt  = ConvertLengthInvert(space, pConfigInfo);
     312    //round to sample boundary
     313    *pulHwPtr = cvt & ( ~(pConfigInfo->ulSampleSize - 1));
    295314    return TRUE;
    296315}
Note: See TracChangeset for help on using the changeset viewer.