Changeset 391 for OCO/trunk/drv16/waverec.cpp
- Timestamp:
- Oct 8, 2008, 11:28:16 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
OCO/trunk/drv16/waverec.cpp
r252 r391 41 41 BOOL WAVEREC::Open(ULONG ulDevice, ULONG ulStreamType, ULONG ulSysFileNum, OSSSTREAMID FAR *pStreamId) 42 42 { 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) 46 46 { 47 47 dprintf(("OSS16_WaveOpen failed!!")); … … 67 67 BOOL WAVEREC::Close(OSSSTREAMID StreamId) 68 68 { 69 if(devCaps[ulDeviceNr].waveInCaps.nrStreams > 1) 69 if(devCaps[ulDeviceNr].waveInCaps.nrStreams > 1) 70 70 { 71 71 return OSS16_WaveClose(StreamId) == OSSERR_SUCCESS; … … 115 115 //while the stream is playing. 116 116 ULONG minimumsize = (ulFirstBufSize/2); 117 if(minimumsize && minimumsize < fragsize) 117 if(minimumsize && minimumsize < fragsize) 118 118 { 119 119 while(minimumsize < fragsize) fragsize = fragsize / 2; 120 121 if(fragsize < ulPCMConsumeRate/256) 120 121 if(fragsize < ulPCMConsumeRate/256) 122 122 {//lower limit; don't accept extremely small buffers 123 123 fragsize = ulPCMConsumeRate/256; 124 124 } 125 } 125 } 126 126 samplesize = (int)pConfigInfo->ulHwSampleSize; 127 127 … … 133 133 134 134 dprintf(("WAVEREC::ConfigDev: Fragment size %d", (USHORT)fragsize)); 135 135 136 136 hwparam.ulSampleRate = pConfigInfo->ulHwSampleRate; 137 137 hwparam.ulBitsPerSample = pConfigInfo->ulHwBitsPerSample; … … 147 147 //Read and convert (if required) wave data from audio device 148 148 //****************************************************************************** 149 BOOL WAVEREC::Transfer(OSSSTREAMID StreamId, PWAVECONFIGINFO pConfigInfo, 150 LINEAR pUserBuffer, ULONG ulBytesToTransfer, 149 BOOL WAVEREC::Transfer(OSSSTREAMID StreamId, PWAVECONFIGINFO pConfigInfo, 150 LINEAR pUserBuffer, ULONG ulBytesToTransfer, 151 151 ULONG FAR *pulBytesTransferred) 152 152 { 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) 156 156 { 157 157 *pulBytesTransferred = 0; … … 159 159 } 160 160 } 161 else 162 { 163 if(pConfigInfo->pfnConvert) 161 else 162 { 163 if(pConfigInfo->pfnConvert) 164 164 { 165 165 ULONG ulCvtBufferSize; … … 169 169 ulCvtBufferSize = min(CONVERSION_BUFFER_SIZE, ulCvtBufferSize); 170 170 171 if(AddBuffer(StreamId, pConfigInfo, pConfigInfo->pConversionBuffer, ulCvtBufferSize, pulBytesTransferred) == FALSE) 171 if(AddBuffer(StreamId, pConfigInfo, pConfigInfo->pConversionBuffer, ulCvtBufferSize, pulBytesTransferred) == FALSE) 172 172 { 173 173 *pulBytesTransferred = 0; … … 198 198 // Perform sample rate conversion if required, else send buffer directly to ALSA 199 199 //****************************************************************************** 200 BOOL WAVEREC::AddBuffer(OSSSTREAMID StreamId, PWAVECONFIGINFO pConfigInfo, LINEAR pUserBuffer, 200 BOOL WAVEREC::AddBuffer(OSSSTREAMID StreamId, PWAVECONFIGINFO pConfigInfo, LINEAR pUserBuffer, 201 201 ULONG ulBytesToTransfer, ULONG FAR *pulBytesTransferred) 202 202 { 203 if(pConfigInfo->fSampleRateConversion) 203 if(pConfigInfo->fSampleRateConversion) 204 204 { 205 205 ULONG ulCvtBufferSize, ulHwSampleCount, ulSampleCount; … … 207 207 208 208 //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, 210 210 pConfigInfo->ulSRateIncrement); 211 211 ulCvtBufferSize = min(CONVERSION_BUFFER_SIZE, ulCvtBufferSize); 212 212 213 213 //round to sample boundary 214 214 ulCvtBufferSize &= ~(pConfigInfo->ulHwSampleSize - 1); 215 215 if(ulCvtBufferSize == 0) { 216 216 *pulBytesTransferred = ulBytesToTransfer; 217 if(pConfigInfo->ulSRatePosition >= pConfigInfo->ulSRateIncrement) { 217 if(pConfigInfo->ulSRatePosition >= pConfigInfo->ulSRateIncrement) { 218 218 pConfigInfo->ulSRatePosition -= pConfigInfo->ulSRateIncrement; 219 219 } … … 223 223 224 224 if(OSS16_WaveAddBuffer(StreamId, pConfigInfo->pSRateConvBuffer, ulCvtBufferSize, pulBytesTransferred) != OSSERR_SUCCESS || 225 *pulBytesTransferred == 0) 225 *pulBytesTransferred == 0) 226 226 { 227 227 *pulBytesTransferred = 0; … … 229 229 } 230 230 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, 234 234 pConfigInfo->ulSRateIncrement); 235 235 *pulBytesTransferred = ulSampleCount*pConfigInfo->ulHwSampleSize; 236 236 237 237 if(ulSampleCount == 0) { 238 238 return FALSE; … … 245 245 246 246 //convert recorded audio data 247 pConfigInfo->pfnSRateConv(pConfigInfo->pSRateConvBuffer, *pulBytesTransferred, pUserBuffer, 247 pConfigInfo->pfnSRateConv(pConfigInfo->pSRateConvBuffer, *pulBytesTransferred, pUserBuffer, 248 248 pConfigInfo->ulSRatePosition, pConfigInfo->ulSRateIncrement); 249 249 … … 253 253 pConfigInfo->ulSRatePosition = (ULONG)lSRatePosition; 254 254 } 255 else 256 if(OSS16_WaveAddBuffer(StreamId, pUserBuffer, ulBytesToTransfer, pulBytesTransferred) != OSSERR_SUCCESS) 255 else 256 if(OSS16_WaveAddBuffer(StreamId, pUserBuffer, ulBytesToTransfer, pulBytesTransferred) != OSSERR_SUCCESS) 257 257 { 258 258 *pulBytesTransferred = 0; … … 293 293 //round to sample boundary 294 294 *pulStreamSpace &= ~(pConfigInfo->ulSampleSize - 1); 295 return TRUE; 296 } 297 //****************************************************************************** 298 //Get Bytes written to cyclic buffer (+ take conversion factor into account) 299 //****************************************************************************** 300 BOOL 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)); 295 314 return TRUE; 296 315 }
Note:
See TracChangeset
for help on using the changeset viewer.