Getting here means we need to do data conversion. If we're seeking forward and are _not_ doing resampling we can run this in a fast path. If we're doing resampling we
Getting here means we need to do data conversion. If we're seeking forward and are _not_ doing resampling we can run this in a fast path. If we're doing resampling we
need to run through each sample because we need to ensure it's internal cache is updated.
need to run through each sample because we need to ensure it's internal cache is updated.
*/
*/
if (pFramesOut == NULL && pDecoder->converter.hasResampler == MA_FALSE) {
if (pFramesOut == NULL && pDecoder->converter.hasResampler == MA_FALSE) {
if (pDecoder->pBackend != NULL) {
result = ma_data_source_read_pcm_frames(pDecoder->pBackend, NULL, frameCount, &totalFramesReadOut, MA_FALSE);
result = ma_data_source_read_pcm_frames(pDecoder->pBackend, NULL, frameCount, &totalFramesReadOut, MA_FALSE);
} else {
/* Legacy. */
totalFramesReadOut = pDecoder->onReadPCMFrames(pDecoder, NULL, frameCount); /* All decoder backends must support passing in NULL for the output buffer. */
}
} else {
} else {
/* Slow path. Need to run everything through the data converter. */
/* Slow path. Need to run everything through the data converter. */