Fix creating audio track from util::blob

This commit is contained in:
Nikita Lisitsa 2023-10-02 17:25:48 +03:00
parent 424ed06ecb
commit 8be3544295
2 changed files with 13 additions and 0 deletions

View file

@ -2,6 +2,7 @@
#include <psemek/audio/stream.hpp> #include <psemek/audio/stream.hpp>
#include <psemek/util/span.hpp> #include <psemek/util/span.hpp>
#include <psemek/util/blob.hpp>
#include <optional> #include <optional>
#include <vector> #include <vector>
@ -26,6 +27,7 @@ namespace psemek::audio
track_ptr load_wav(std::vector<char> const & data); track_ptr load_wav(std::vector<char> const & data);
track_ptr load_mp3(util::span<char const> data); track_ptr load_mp3(util::span<char const> data);
track_ptr load_mp3(util::blob data);
track_ptr load_mp3(std::vector<char> data); track_ptr load_mp3(std::vector<char> data);
} }

View file

@ -16,6 +16,7 @@ namespace psemek::audio
struct mp3_data_holder struct mp3_data_holder
{ {
std::vector<char> storage; std::vector<char> storage;
util::blob blob_storage;
util::span<char const> data; util::span<char const> data;
mp3_data_holder(std::vector<char> storage) mp3_data_holder(std::vector<char> storage)
@ -23,6 +24,11 @@ namespace psemek::audio
, data(this->storage) , data(this->storage)
{} {}
mp3_data_holder(util::blob data)
: blob_storage(data)
, data(blob_storage.span())
{}
mp3_data_holder(util::span<char const> data) mp3_data_holder(util::span<char const> data)
: data(data) : data(data)
{} {}
@ -135,6 +141,11 @@ namespace psemek::audio
return std::make_shared<mp3_track_impl>(std::make_shared<mp3_data_holder>(data)); return std::make_shared<mp3_track_impl>(std::make_shared<mp3_data_holder>(data));
} }
track_ptr load_mp3(util::blob data)
{
return std::make_shared<mp3_track_impl>(std::make_shared<mp3_data_holder>(std::move(data)));
}
track_ptr load_mp3(std::vector<char> data) track_ptr load_mp3(std::vector<char> data)
{ {
return std::make_shared<mp3_track_impl>(std::make_shared<mp3_data_holder>(std::move(data))); return std::make_shared<mp3_track_impl>(std::make_shared<mp3_data_holder>(std::move(data)));