aboutsummaryrefslogtreecommitdiff
path: root/Src/Plugins/Input/in_wave/RawReader.cpp
diff options
context:
space:
mode:
authorJean-Francois Mauguit <jfmauguit@mac.com>2024-09-24 09:03:25 -0400
committerGitHub <noreply@github.com>2024-09-24 09:03:25 -0400
commitbab614c421ed7ae329d26bf028c4a3b1d2450f5a (patch)
tree12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/Plugins/Input/in_wave/RawReader.cpp
parent4bde6044fddf053f31795b9eaccdd2a5a527d21f (diff)
parent20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (diff)
downloadwinamp-bab614c421ed7ae329d26bf028c4a3b1d2450f5a.tar.gz
Merge pull request #5 from WinampDesktop/community
Merge to main
Diffstat (limited to 'Src/Plugins/Input/in_wave/RawReader.cpp')
-rw-r--r--Src/Plugins/Input/in_wave/RawReader.cpp86
1 files changed, 86 insertions, 0 deletions
diff --git a/Src/Plugins/Input/in_wave/RawReader.cpp b/Src/Plugins/Input/in_wave/RawReader.cpp
new file mode 100644
index 00000000..c20cb85f
--- /dev/null
+++ b/Src/Plugins/Input/in_wave/RawReader.cpp
@@ -0,0 +1,86 @@
+#include "main.h"
+#include "RawReader.h"
+#include <shlwapi.h>
+ /*
+bool IsMyExtension(const wchar_t *filename)
+{
+ const wchar_t *ext = PathFindExtension(filename);
+ if (ext && *ext)
+ {
+ ext++;
+ return fileTypes.GetAVType(ext) != -1;
+ }
+ return false;
+}*/
+
+int RawMediaReaderService::CreateRawMediaReader(const wchar_t *filename, ifc_raw_media_reader **out_reader)
+{
+ // TODO:if (IsMyExtension(filename))
+ if (!_wcsicmp(L".WAV", PathFindExtensionW(filename)))
+ {
+ RawMediaReader *raw_reader = new RawMediaReader();
+ if (!raw_reader)
+ {
+ return NErr_OutOfMemory;
+ }
+
+ int ret = raw_reader->Initialize(filename);
+ if (ret != NErr_Success)
+ {
+ delete raw_reader;
+ return ret;
+ }
+
+ *out_reader = raw_reader;
+ return NErr_Success;
+ }
+ else
+ {
+ return NErr_False;
+ }
+}
+
+#define CBCLASS RawMediaReaderService
+START_DISPATCH;
+CB( CREATERAWMEDIAREADER, CreateRawMediaReader )
+END_DISPATCH;
+#undef CBCLASS
+
+
+RawMediaReader::~RawMediaReader()
+{
+ if (soundFile)
+ sf_close(soundFile);
+}
+
+int RawMediaReader::Initialize(const wchar_t *filename)
+{
+ info.format = 0;
+ soundFile = sf_wchar_open(filename, SFM_READ, &info);
+ if (!soundFile)
+ return NErr_FileNotFound;
+
+ return NErr_Success;
+}
+
+int RawMediaReader::Read(void *out_buffer, size_t buffer_size, size_t *bytes_read)
+{
+ sf_count_t sf_read = sf_read_raw(soundFile, out_buffer, buffer_size);
+ if (sf_read == 0)
+ return NErr_EndOfFile;
+ *bytes_read = (size_t)sf_read;
+ return NErr_Success;
+}
+
+size_t RawMediaReader::Release()
+{
+ delete this;
+ return 0;
+}
+
+#define CBCLASS RawMediaReader
+START_DISPATCH;
+CB(RELEASE, Release);
+CB(RAW_READ, Read);
+END_DISPATCH;
+#undef CBCLASS \ No newline at end of file