MCPcopy Create free account
hub / github.com/LabSound/LabSound / Convert

Method Convert

src/backends/RtAudio/RtAudio.cpp:4462–4543  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

4460 }
4461
4462 void Convert(char * outBuffer, const char * inBuffer, unsigned int inSampleCount, unsigned int & outSampleCount)
4463 {
4464 unsigned int inputBufferSize = _bytesPerSample * _channelCount * inSampleCount;
4465 if (_sampleRatio == 1)
4466 {
4467 // no sample rate conversion required
4468 memcpy(outBuffer, inBuffer, inputBufferSize);
4469 outSampleCount = inSampleCount;
4470 return;
4471 }
4472
4473 unsigned int outputBufferSize = (unsigned int) ceilf(inputBufferSize * _sampleRatio) + (_bytesPerSample * _channelCount);
4474
4475 IMFMediaBuffer * rInBuffer;
4476 IMFSample * rInSample;
4477 BYTE * rInByteBuffer = NULL;
4478
4479 // 5. Create Sample object from input data
4480
4481 MFCreateMemoryBuffer(inputBufferSize, &rInBuffer);
4482
4483 rInBuffer->Lock(&rInByteBuffer, NULL, NULL);
4484 memcpy(rInByteBuffer, inBuffer, inputBufferSize);
4485 rInBuffer->Unlock();
4486 rInByteBuffer = NULL;
4487
4488 rInBuffer->SetCurrentLength(inputBufferSize);
4489
4490 MFCreateSample(&rInSample);
4491 rInSample->AddBuffer(rInBuffer);
4492
4493 // 6. Pass input data to Resampler
4494
4495 _transform->ProcessInput(0, rInSample, 0);
4496
4497 SAFE_RELEASE(rInBuffer);
4498 SAFE_RELEASE(rInSample);
4499
4500 // 7. Perform sample rate conversion
4501
4502 IMFMediaBuffer * rOutBuffer = NULL;
4503 BYTE * rOutByteBuffer = NULL;
4504
4505 MFT_OUTPUT_DATA_BUFFER rOutDataBuffer;
4506 DWORD rStatus;
4507 DWORD rBytes = outputBufferSize; // maximum bytes accepted per ProcessOutput
4508
4509 // 7.1 Create Sample object for output data
4510
4511 memset(&rOutDataBuffer, 0, sizeof rOutDataBuffer);
4512 MFCreateSample(&(rOutDataBuffer.pSample));
4513 MFCreateMemoryBuffer(rBytes, &rOutBuffer);
4514 rOutDataBuffer.pSample->AddBuffer(rOutBuffer);
4515 rOutDataBuffer.dwStreamID = 0;
4516 rOutDataBuffer.dwStatus = 0;
4517 rOutDataBuffer.pEvents = NULL;
4518
4519 // 7.2 Get output data from Resampler

Callers 1

wasapiThreadMethod · 0.80

Calls

no outgoing calls

Tested by

no test coverage detected