summaryrefslogtreecommitdiff
path: root/src/codecs
diff options
context:
space:
mode:
authorailurux <ailuruxx@gmail.com>2024-02-15 16:12:07 +1100
committerailurux <ailuruxx@gmail.com>2024-02-15 16:12:07 +1100
commit62f6179abe24339c2e5b7350528afbcad4c52067 (patch)
treed14f0b35ef601d0877ced507c5560236da666218 /src/codecs
parente466522c25758670da335195d60a5d599ed56177 (diff)
downloadtangara-fw-62f6179abe24339c2e5b7350528afbcad4c52067.tar.gz
Added offset for track seeking, wav impl. only rn
Diffstat (limited to 'src/codecs')
-rw-r--r--src/codecs/include/codec.hpp2
-rw-r--r--src/codecs/include/mad.hpp2
-rw-r--r--src/codecs/include/miniflac.hpp2
-rw-r--r--src/codecs/include/opus.hpp2
-rw-r--r--src/codecs/include/vorbis.hpp2
-rw-r--r--src/codecs/include/wav.hpp2
-rw-r--r--src/codecs/mad.cpp2
-rw-r--r--src/codecs/miniflac.cpp2
-rw-r--r--src/codecs/opus.cpp2
-rw-r--r--src/codecs/vorbis.cpp2
-rw-r--r--src/codecs/wav.cpp6
11 files changed, 14 insertions, 12 deletions
diff --git a/src/codecs/include/codec.hpp b/src/codecs/include/codec.hpp
index 8aa391b6..fb1ec771 100644
--- a/src/codecs/include/codec.hpp
+++ b/src/codecs/include/codec.hpp
@@ -117,7 +117,7 @@ class ICodec {
* Decodes metadata or headers from the given input stream, and returns the
* format for the samples that will be decoded from it.
*/
- virtual auto OpenStream(std::shared_ptr<IStream> input)
+ virtual auto OpenStream(std::shared_ptr<IStream> input,uint32_t offset)
-> cpp::result<OutputFormat, Error> = 0;
struct OutputInfo {
diff --git a/src/codecs/include/mad.hpp b/src/codecs/include/mad.hpp
index 813aa86d..35e3284d 100644
--- a/src/codecs/include/mad.hpp
+++ b/src/codecs/include/mad.hpp
@@ -26,7 +26,7 @@ class MadMp3Decoder : public ICodec {
MadMp3Decoder();
~MadMp3Decoder();
- auto OpenStream(std::shared_ptr<IStream> input)
+ auto OpenStream(std::shared_ptr<IStream> input,uint32_t offset)
-> cpp::result<OutputFormat, Error> override;
auto DecodeTo(cpp::span<sample::Sample> destination)
diff --git a/src/codecs/include/miniflac.hpp b/src/codecs/include/miniflac.hpp
index d57b08a3..d1daca2f 100644
--- a/src/codecs/include/miniflac.hpp
+++ b/src/codecs/include/miniflac.hpp
@@ -28,7 +28,7 @@ class MiniFlacDecoder : public ICodec {
MiniFlacDecoder();
~MiniFlacDecoder();
- auto OpenStream(std::shared_ptr<IStream> input)
+ auto OpenStream(std::shared_ptr<IStream> input,uint32_t offset)
-> cpp::result<OutputFormat, Error> override;
auto DecodeTo(cpp::span<sample::Sample> destination)
diff --git a/src/codecs/include/opus.hpp b/src/codecs/include/opus.hpp
index 45b1b07a..1431fa54 100644
--- a/src/codecs/include/opus.hpp
+++ b/src/codecs/include/opus.hpp
@@ -26,7 +26,7 @@ class XiphOpusDecoder : public ICodec {
XiphOpusDecoder();
~XiphOpusDecoder();
- auto OpenStream(std::shared_ptr<IStream> input)
+ auto OpenStream(std::shared_ptr<IStream> input,uint32_t offset)
-> cpp::result<OutputFormat, Error> override;
auto DecodeTo(cpp::span<sample::Sample> destination)
diff --git a/src/codecs/include/vorbis.hpp b/src/codecs/include/vorbis.hpp
index 2f93c37e..b32ef8d5 100644
--- a/src/codecs/include/vorbis.hpp
+++ b/src/codecs/include/vorbis.hpp
@@ -28,7 +28,7 @@ class TremorVorbisDecoder : public ICodec {
TremorVorbisDecoder();
~TremorVorbisDecoder();
- auto OpenStream(std::shared_ptr<IStream> input)
+ auto OpenStream(std::shared_ptr<IStream> input,uint32_t offset)
-> cpp::result<OutputFormat, Error> override;
auto DecodeTo(cpp::span<sample::Sample> destination)
diff --git a/src/codecs/include/wav.hpp b/src/codecs/include/wav.hpp
index 896976dd..e884a9bb 100644
--- a/src/codecs/include/wav.hpp
+++ b/src/codecs/include/wav.hpp
@@ -31,7 +31,7 @@ class WavDecoder : public ICodec {
WavDecoder();
~WavDecoder();
- auto OpenStream(std::shared_ptr<IStream> input)
+ auto OpenStream(std::shared_ptr<IStream> input,uint32_t offset)
-> cpp::result<OutputFormat, Error> override;
auto DecodeTo(cpp::span<sample::Sample> destination)
diff --git a/src/codecs/mad.cpp b/src/codecs/mad.cpp
index f36636a1..0617295f 100644
--- a/src/codecs/mad.cpp
+++ b/src/codecs/mad.cpp
@@ -58,7 +58,7 @@ auto MadMp3Decoder::GetBytesUsed() -> std::size_t {
}
}
-auto MadMp3Decoder::OpenStream(std::shared_ptr<IStream> input)
+auto MadMp3Decoder::OpenStream(std::shared_ptr<IStream> input,uint32_t offset)
-> cpp::result<OutputFormat, ICodec::Error> {
input_ = input;
diff --git a/src/codecs/miniflac.cpp b/src/codecs/miniflac.cpp
index ace73466..d15410fe 100644
--- a/src/codecs/miniflac.cpp
+++ b/src/codecs/miniflac.cpp
@@ -42,7 +42,7 @@ MiniFlacDecoder::~MiniFlacDecoder() {
}
}
-auto MiniFlacDecoder::OpenStream(std::shared_ptr<IStream> input)
+auto MiniFlacDecoder::OpenStream(std::shared_ptr<IStream> input,uint32_t offset)
-> cpp::result<OutputFormat, Error> {
input_ = input;
diff --git a/src/codecs/opus.cpp b/src/codecs/opus.cpp
index e4917a33..2f700510 100644
--- a/src/codecs/opus.cpp
+++ b/src/codecs/opus.cpp
@@ -78,7 +78,7 @@ XiphOpusDecoder::~XiphOpusDecoder() {
}
}
-auto XiphOpusDecoder::OpenStream(std::shared_ptr<IStream> input)
+auto XiphOpusDecoder::OpenStream(std::shared_ptr<IStream> input,uint32_t offset)
-> cpp::result<OutputFormat, Error> {
input_ = input;
diff --git a/src/codecs/vorbis.cpp b/src/codecs/vorbis.cpp
index 3b3798cb..66237c28 100644
--- a/src/codecs/vorbis.cpp
+++ b/src/codecs/vorbis.cpp
@@ -84,7 +84,7 @@ TremorVorbisDecoder::~TremorVorbisDecoder() {
ov_clear(&vorbis_);
}
-auto TremorVorbisDecoder::OpenStream(std::shared_ptr<IStream> input)
+auto TremorVorbisDecoder::OpenStream(std::shared_ptr<IStream> input,uint32_t offset)
-> cpp::result<OutputFormat, Error> {
int res = ov_open_callbacks(input.get(), &vorbis_, NULL, 0, kCallbacks);
if (res < 0) {
diff --git a/src/codecs/wav.cpp b/src/codecs/wav.cpp
index a67f3ff4..652f4f88 100644
--- a/src/codecs/wav.cpp
+++ b/src/codecs/wav.cpp
@@ -84,7 +84,7 @@ WavDecoder::WavDecoder() : input_(), buffer_() {}
WavDecoder::~WavDecoder() {}
-auto WavDecoder::OpenStream(std::shared_ptr<IStream> input)
+auto WavDecoder::OpenStream(std::shared_ptr<IStream> input,uint32_t offset)
-> cpp::result<OutputFormat, Error> {
input_ = input;
@@ -199,8 +199,10 @@ auto WavDecoder::OpenStream(std::shared_ptr<IStream> input)
return cpp::fail(Error::kUnsupportedFormat);
}
+ auto data_offset = offset * samples_per_second * bits_per_sample;
+
// Seek track to start of data
- input->SeekTo(data_chunk_index + 8, IStream::SeekFrom::kStartOfStream);
+ input->SeekTo(data_chunk_index + 8 + data_offset, IStream::SeekFrom::kStartOfStream);
output_format_ = {.num_channels = (uint8_t)num_channels_,
.sample_rate_hz = samples_per_second,