mirror of
https://github.com/robbert-vdh/yabridge.git
synced 2026-05-09 20:29:10 +02:00
Relax IBStream reading even further
And reset the seek position after reading. This new approach where we also read from empty IBStreams to provide a perfect proxy would otherwise cause plugins to crash in Bitwig when either loading or saving state.
This commit is contained in:
@@ -57,23 +57,22 @@ YaBStream::YaBStream(Steinberg::IBStream* stream) {
|
|||||||
|
|
||||||
// Copy any existing contents, used for `IComponent::setState` and similar
|
// Copy any existing contents, used for `IComponent::setState` and similar
|
||||||
// methods
|
// methods
|
||||||
|
int64 old_position;
|
||||||
|
stream->tell(&old_position);
|
||||||
if (stream->seek(0, Steinberg::IBStream::IStreamSeekMode::kIBSeekEnd) ==
|
if (stream->seek(0, Steinberg::IBStream::IStreamSeekMode::kIBSeekEnd) ==
|
||||||
Steinberg::kResultOk) {
|
Steinberg::kResultOk) {
|
||||||
// Now that we're at the end of the stream we know how large the buffer
|
int64 size = 0;
|
||||||
// should be
|
stream->tell(&size);
|
||||||
int64 size;
|
if (size > 0) {
|
||||||
assert(stream->tell(&size) == Steinberg::kResultOk);
|
int32 num_bytes_read = 0;
|
||||||
|
buffer.resize(size);
|
||||||
int32 num_bytes_read = 0;
|
stream->seek(0, Steinberg::IBStream::IStreamSeekMode::kIBSeekSet);
|
||||||
buffer.resize(size);
|
stream->read(buffer.data(), size, &num_bytes_read);
|
||||||
assert(
|
assert(num_bytes_read == 0 || num_bytes_read == size);
|
||||||
stream->seek(0, Steinberg::IBStream::IStreamSeekMode::kIBSeekSet) ==
|
}
|
||||||
Steinberg::kResultOk);
|
|
||||||
|
|
||||||
// Reading zero bytes will return `kResultFalse` in some implementations
|
|
||||||
stream->read(buffer.data(), size, &num_bytes_read);
|
|
||||||
assert(num_bytes_read == 0 || num_bytes_read == size);
|
|
||||||
}
|
}
|
||||||
|
stream->seek(old_position,
|
||||||
|
Steinberg::IBStream::IStreamSeekMode::kIBSeekSet);
|
||||||
|
|
||||||
// Starting at VST 3.6.0 streams provided by the host may contain context
|
// Starting at VST 3.6.0 streams provided by the host may contain context
|
||||||
// based meta data
|
// based meta data
|
||||||
|
|||||||
Reference in New Issue
Block a user