Implement the easy seeks

custom
jacqueline 2 years ago
parent 9ddaca4fcb
commit 205e305350
  1. 7
      src/codecs/mad.cpp
  2. 3
      src/codecs/opus.cpp
  3. 3
      src/codecs/vorbis.cpp

@ -106,12 +106,12 @@ auto MadMp3Decoder::DecodeTo(cpp::span<sample::Sample> output)
is_eof_ = buffer_.Refill(input_.get()); is_eof_ = buffer_.Refill(input_.get());
if (is_eof_) { if (is_eof_) {
buffer_.AddBytes([&](cpp::span<std::byte> buf) -> size_t { buffer_.AddBytes([&](cpp::span<std::byte> buf) -> size_t {
if (buf.size() < 8) { if (buf.size() < MAD_BUFFER_GUARD) {
is_eof_ = false; is_eof_ = false;
return 0; return 0;
} }
ESP_LOGI(kTag, "adding MAD_HEADER_GUARD"); ESP_LOGI(kTag, "adding MAD_BUFFER_GUARD");
std::fill_n(buf.begin(), 8, std::byte(0)); std::fill_n(buf.begin(), MAD_BUFFER_GUARD, std::byte(0));
return 8; return 8;
}); });
} }
@ -132,7 +132,6 @@ auto MadMp3Decoder::DecodeTo(cpp::span<sample::Sample> output)
} }
if (stream_.error == MAD_ERROR_BUFLEN) { if (stream_.error == MAD_ERROR_BUFLEN) {
if (is_eof_) { if (is_eof_) {
ESP_LOGI(kTag, "BUFLEN while eof; this is eos");
is_eos_ = true; is_eos_ = true;
} }
return GetBytesUsed(); return GetBytesUsed();

@ -152,6 +152,9 @@ auto XiphOpusDecoder::DecodeTo(cpp::span<sample::Sample> output)
} }
auto XiphOpusDecoder::SeekTo(size_t target) -> cpp::result<void, Error> { auto XiphOpusDecoder::SeekTo(size_t target) -> cpp::result<void, Error> {
if (op_pcm_seek(opus_, target) != 0) {
return cpp::fail(Error::kInternalError);
}
return {}; return {};
} }

@ -152,6 +152,9 @@ auto TremorVorbisDecoder::DecodeTo(cpp::span<sample::Sample> output)
} }
auto TremorVorbisDecoder::SeekTo(size_t target) -> cpp::result<void, Error> { auto TremorVorbisDecoder::SeekTo(size_t target) -> cpp::result<void, Error> {
if (ov_pcm_seek(&vorbis_, target) != 0) {
return cpp::fail(Error::kInternalError);
}
return {}; return {};
} }

Loading…
Cancel
Save