Skip to content

Commit ceae914

Browse files
committed
ConvertedStream consider result of converter
1 parent 420ecb9 commit ceae914

File tree

2 files changed

+15
-4
lines changed

2 files changed

+15
-4
lines changed

src/AudioTools/AudioStreams.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -564,16 +564,17 @@ class ConvertedStream : public AudioStreamX {
564564
virtual int availableForWrite() { return p_stream->availableForWrite(); }
565565

566566
virtual size_t write(const uint8_t *buffer, size_t size) {
567-
p_converter->convert((uint8_t *)buffer, size);
568-
return p_stream->write(buffer, size);
567+
size_t result = p_converter->convert((uint8_t *)buffer, size);
568+
size_t result_written = p_stream->write(buffer, result);
569+
return size * result_written / result;
569570
}
570571

571572
size_t readBytes(uint8_t *data, size_t length) override {
572573
size_t result; p_stream->readBytes(data, length);
573-
p_converter->convert(data, result);
574-
return result;
574+
return p_converter->convert(data, result);
575575
}
576576

577+
577578
/// Returns the available bytes in the buffer: to be avoided
578579
virtual int available() override {
579580
return p_stream->available();

src/AudioTools/Converter.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,10 +352,20 @@ class ConverterToInternalDACFormat : public BaseConverter<T> {
352352
template<typename T>
353353
class ChannelReducer : public BaseConverter<T> {
354354
public:
355+
ChannelReducer() = default;
356+
355357
ChannelReducer(int channelCountOfSource, int channelCountOfTarget=1){
356358
from_channels = channelCountOfSource;
357359
to_channels = channelCountOfTarget;
358360
}
361+
362+
void setSourceChannels(int channelCountOfSource) {
363+
from_channels = channelCountOfSource;
364+
}
365+
366+
void setTargetChannels(int channelCountOfTarget) {
367+
to_channels = channelCountOfTarget;
368+
}
359369

360370
size_t convert(uint8_t*src, size_t size) {
361371
int frame_count = size/(sizeof(T)*from_channels);

0 commit comments

Comments
 (0)