summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/imagedev/cassette.cpp
diff options
context:
space:
mode:
author wilbertpol <wilbertpol@users.noreply.github.com>2024-03-21 20:35:11 +0000
committer GitHub <noreply@github.com>2024-03-22 07:35:11 +1100
commitb7b56f24f41d3311574b2a9ed43923d0435c2f9f (patch)
tree8123962e013f6a2df78640c9d4ff51675059e2b7 /src/devices/imagedev/cassette.cpp
parentb4549cfd624841594278ca41515f861c1240111a (diff)
imagedev/cassette.cpp, formats/flacfile.cpp: Added support for saving cassette images in FLAC format. (#12115)
util/flac.cpp: Implemented seek/tell callbacks for FLAC library.
Diffstat (limited to 'src/devices/imagedev/cassette.cpp')
-rw-r--r--src/devices/imagedev/cassette.cpp15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/devices/imagedev/cassette.cpp b/src/devices/imagedev/cassette.cpp
index 002eaaf912c..21cb7e8bd10 100644
--- a/src/devices/imagedev/cassette.cpp
+++ b/src/devices/imagedev/cassette.cpp
@@ -17,6 +17,8 @@
#include "util/ioprocs.h"
#include "util/ioprocsfilter.h"
+#include <regex>
+
#define LOG_WARN (1U << 1) // Warnings
#define LOG_DETAIL (1U << 2) // Details
@@ -258,6 +260,16 @@ std::pair<std::error_condition, std::string> cassette_image_device::call_load()
return std::make_pair(internal_load(false), std::string());
}
+bool cassette_image_device::has_any_extension(std::string_view candidate_extensions) const
+{
+ const char separator = ',';
+ std::istringstream extension_stream(std::string{candidate_extensions});
+ for (std::string extension; std::getline(extension_stream, extension, separator);)
+ if (is_filetype(extension))
+ return true;
+ return false;
+}
+
std::error_condition cassette_image_device::internal_load(bool is_create)
{
cassette_image::error err;
@@ -270,10 +282,9 @@ std::error_condition cassette_image_device::internal_load(bool is_create)
auto io = util::random_read_write_fill(image_core_file(), 0x00);
if (io)
{
- // creating an image
err = cassette_image::create(
std::move(io),
- &cassette_image::wavfile_format,
+ has_any_extension(cassette_image::flacfile_format.extensions) ? &cassette_image::flacfile_format : &cassette_image::wavfile_format,
m_create_opts,
cassette_image::FLAG_READWRITE|cassette_image::FLAG_SAVEONEXIT,
m_cassette);