summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-08-11 12:32:50 +1000
committerjacqueline <me@jacqueline.id.au>2023-08-11 12:32:50 +1000
commit205e3053506191fab69d01e7523e733dccc09d77 (patch)
tree9e3082c017544d83ef36c15807bfa98afdf7a999
parent9ddaca4fcbfac588128a8b655685030d2c9ca4c5 (diff)
downloadtangara-fw-205e3053506191fab69d01e7523e733dccc09d77.tar.gz
Implement the easy seeks
-rw-r--r--src/codecs/mad.cpp7
-rw-r--r--src/codecs/opus.cpp3
-rw-r--r--src/codecs/vorbis.cpp3
3 files changed, 9 insertions, 4 deletions
diff --git a/src/codecs/mad.cpp b/src/codecs/mad.cpp
index f4cfb3b9..9f1655e9 100644
--- a/src/codecs/mad.cpp
+++ b/src/codecs/mad.cpp
@@ -106,12 +106,12 @@ auto MadMp3Decoder::DecodeTo(cpp::span<sample::Sample> output)
is_eof_ = buffer_.Refill(input_.get());
if (is_eof_) {
buffer_.AddBytes([&](cpp::span<std::byte> buf) -> size_t {
- if (buf.size() < 8) {
+ if (buf.size() < MAD_BUFFER_GUARD) {
is_eof_ = false;
return 0;
}
- ESP_LOGI(kTag, "adding MAD_HEADER_GUARD");
- std::fill_n(buf.begin(), 8, std::byte(0));
+ ESP_LOGI(kTag, "adding MAD_BUFFER_GUARD");
+ std::fill_n(buf.begin(), MAD_BUFFER_GUARD, std::byte(0));
return 8;
});
}
@@ -132,7 +132,6 @@ auto MadMp3Decoder::DecodeTo(cpp::span<sample::Sample> output)
}
if (stream_.error == MAD_ERROR_BUFLEN) {
if (is_eof_) {
- ESP_LOGI(kTag, "BUFLEN while eof; this is eos");
is_eos_ = true;
}
return GetBytesUsed();
diff --git a/src/codecs/opus.cpp b/src/codecs/opus.cpp
index e6e3a1af..6e9512b1 100644
--- a/src/codecs/opus.cpp
+++ b/src/codecs/opus.cpp
@@ -152,6 +152,9 @@ auto XiphOpusDecoder::DecodeTo(cpp::span<sample::Sample> output)
}
auto XiphOpusDecoder::SeekTo(size_t target) -> cpp::result<void, Error> {
+ if (op_pcm_seek(opus_, target) != 0) {
+ return cpp::fail(Error::kInternalError);
+ }
return {};
}
diff --git a/src/codecs/vorbis.cpp b/src/codecs/vorbis.cpp
index cf783978..750ac9a8 100644
--- a/src/codecs/vorbis.cpp
+++ b/src/codecs/vorbis.cpp
@@ -152,6 +152,9 @@ auto TremorVorbisDecoder::DecodeTo(cpp::span<sample::Sample> output)
}
auto TremorVorbisDecoder::SeekTo(size_t target) -> cpp::result<void, Error> {
+ if (ov_pcm_seek(&vorbis_, target) != 0) {
+ return cpp::fail(Error::kInternalError);
+ }
return {};
}