From 62f6179abe24339c2e5b7350528afbcad4c52067 Mon Sep 17 00:00:00 2001 From: ailurux Date: Thu, 15 Feb 2024 16:12:07 +1100 Subject: Added offset for track seeking, wav impl. only rn --- src/codecs/include/codec.hpp | 2 +- src/codecs/include/mad.hpp | 2 +- src/codecs/include/miniflac.hpp | 2 +- src/codecs/include/opus.hpp | 2 +- src/codecs/include/vorbis.hpp | 2 +- src/codecs/include/wav.hpp | 2 +- src/codecs/mad.cpp | 2 +- src/codecs/miniflac.cpp | 2 +- src/codecs/opus.cpp | 2 +- src/codecs/vorbis.cpp | 2 +- src/codecs/wav.cpp | 6 ++++-- 11 files changed, 14 insertions(+), 12 deletions(-) (limited to 'src/codecs') 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 input) + virtual auto OpenStream(std::shared_ptr input,uint32_t offset) -> cpp::result = 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 input) + auto OpenStream(std::shared_ptr input,uint32_t offset) -> cpp::result override; auto DecodeTo(cpp::span 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 input) + auto OpenStream(std::shared_ptr input,uint32_t offset) -> cpp::result override; auto DecodeTo(cpp::span 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 input) + auto OpenStream(std::shared_ptr input,uint32_t offset) -> cpp::result override; auto DecodeTo(cpp::span 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 input) + auto OpenStream(std::shared_ptr input,uint32_t offset) -> cpp::result override; auto DecodeTo(cpp::span 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 input) + auto OpenStream(std::shared_ptr input,uint32_t offset) -> cpp::result override; auto DecodeTo(cpp::span 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 input) +auto MadMp3Decoder::OpenStream(std::shared_ptr input,uint32_t offset) -> cpp::result { 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 input) +auto MiniFlacDecoder::OpenStream(std::shared_ptr input,uint32_t offset) -> cpp::result { 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 input) +auto XiphOpusDecoder::OpenStream(std::shared_ptr input,uint32_t offset) -> cpp::result { 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 input) +auto TremorVorbisDecoder::OpenStream(std::shared_ptr input,uint32_t offset) -> cpp::result { 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 input) +auto WavDecoder::OpenStream(std::shared_ptr input,uint32_t offset) -> cpp::result { input_ = input; @@ -199,8 +199,10 @@ auto WavDecoder::OpenStream(std::shared_ptr 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, -- cgit v1.2.3