Compare commits
2 commits
46ee7fc8b9
...
1bea1699a1
Author | SHA1 | Date | |
---|---|---|---|
|
1bea1699a1 | ||
|
bd8aa0e91b |
2 changed files with 13 additions and 16 deletions
|
@ -837,10 +837,18 @@ static void convert_be_to_le(uint8_t *buffer, size_t bitsPerSample, size_t bytes
|
||||||
if(hdcd_decoder) { // implied bits per sample is 16, produces 32 bit int scale
|
if(hdcd_decoder) { // implied bits per sample is 16, produces 32 bit int scale
|
||||||
samplesRead = bytesReadFromInput / 2;
|
samplesRead = bytesReadFromInput / 2;
|
||||||
const size_t buffer_adder = (inputBuffer == &tempData[0]) ? buffer_adder_base : 0;
|
const size_t buffer_adder = (inputBuffer == &tempData[0]) ? buffer_adder_base : 0;
|
||||||
if(isUnsigned)
|
if(isUnsigned) {
|
||||||
|
if(!inputChanged) {
|
||||||
|
memcpy(&tempData[buffer_adder], inputBuffer, samplesRead * 2);
|
||||||
|
inputBuffer = &tempData[buffer_adder];
|
||||||
|
inputChanged = YES;
|
||||||
|
}
|
||||||
convert_u16_to_s16((int16_t *)inputBuffer, samplesRead);
|
convert_u16_to_s16((int16_t *)inputBuffer, samplesRead);
|
||||||
convert_s16_to_hdcd_input((int32_t *)(&tempData[buffer_adder]), (int16_t *)inputBuffer, samplesRead);
|
isUnsigned = NO;
|
||||||
hdcd_process_stereo((hdcd_state_stereo_t *)hdcd_decoder, (int32_t *)(&tempData[buffer_adder]), (int)(samplesRead / 2));
|
}
|
||||||
|
const size_t buffer_adder2 = (inputBuffer == &tempData[0]) ? buffer_adder_base : 0;
|
||||||
|
convert_s16_to_hdcd_input((int32_t *)(&tempData[buffer_adder2]), (int16_t *)inputBuffer, samplesRead);
|
||||||
|
hdcd_process_stereo((hdcd_state_stereo_t *)hdcd_decoder, (int32_t *)(&tempData[buffer_adder2]), (int)(samplesRead / 2));
|
||||||
if(((hdcd_state_stereo_t *)hdcd_decoder)->channel[0].sustain &&
|
if(((hdcd_state_stereo_t *)hdcd_decoder)->channel[0].sustain &&
|
||||||
((hdcd_state_stereo_t *)hdcd_decoder)->channel[1].sustain) {
|
((hdcd_state_stereo_t *)hdcd_decoder)->channel[1].sustain) {
|
||||||
hdcdSustained = YES;
|
hdcdSustained = YES;
|
||||||
|
@ -850,7 +858,7 @@ static void convert_be_to_le(uint8_t *buffer, size_t bitsPerSample, size_t bytes
|
||||||
bitsPerSample = 32;
|
bitsPerSample = 32;
|
||||||
bytesReadFromInput = samplesRead * 4;
|
bytesReadFromInput = samplesRead * 4;
|
||||||
isUnsigned = NO;
|
isUnsigned = NO;
|
||||||
inputBuffer = &tempData[buffer_adder];
|
inputBuffer = &tempData[buffer_adder2];
|
||||||
inputChanged = YES;
|
inputChanged = YES;
|
||||||
} else {
|
} else {
|
||||||
// Discard the output of the decoder and process again
|
// Discard the output of the decoder and process again
|
||||||
|
|
|
@ -713,17 +713,6 @@ current_device_listener(AudioObjectID inObjectID, UInt32 inNumberAddresses, cons
|
||||||
}
|
}
|
||||||
|
|
||||||
double secondsRendered = (double)renderedSamples / format->mSampleRate;
|
double secondsRendered = (double)renderedSamples / format->mSampleRate;
|
||||||
float volumeScale = 1.0;
|
|
||||||
double sustained;
|
|
||||||
sustained = _self->secondsHdcdSustained;
|
|
||||||
if(sustained > 0) {
|
|
||||||
if(sustained < secondsRendered) {
|
|
||||||
_self->secondsHdcdSustained = 0.0;
|
|
||||||
} else {
|
|
||||||
_self->secondsHdcdSustained = sustained - secondsRendered;
|
|
||||||
volumeScale = 0.5;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[fadersLock lock];
|
[fadersLock lock];
|
||||||
for(size_t i = 0; i < [faders count];) {
|
for(size_t i = 0; i < [faders count];) {
|
||||||
|
@ -737,7 +726,7 @@ current_device_listener(AudioObjectID inObjectID, UInt32 inNumberAddresses, cons
|
||||||
}
|
}
|
||||||
[fadersLock unlock];
|
[fadersLock unlock];
|
||||||
|
|
||||||
scale_by_volume(outSamples, frameCount * channels, volumeScale * _self->volume);
|
scale_by_volume(outSamples, frameCount * channels, _self->volume);
|
||||||
|
|
||||||
[_self updateLatency:secondsRendered];
|
[_self updateLatency:secondsRendered];
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue