Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/core/StarIODeviceCallbacks.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/core/StarIODeviceCallbacks.hpp')
-rw-r--r--source/core/StarIODeviceCallbacks.hpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/source/core/StarIODeviceCallbacks.hpp b/source/core/StarIODeviceCallbacks.hpp
new file mode 100644
index 0000000..8e2f9ed
--- /dev/null
+++ b/source/core/StarIODeviceCallbacks.hpp
@@ -0,0 +1,37 @@
+#pragma once
+
+#include "StarIODevice.hpp"
+#include "vorbis/codec.h"
+#include "vorbis/vorbisfile.h"
+
+namespace Star {
+
+// Provides callbacks for interfacing IODevice with ogg vorbis callbacks
+class IODeviceCallbacks {
+public:
+ explicit IODeviceCallbacks(IODevicePtr device);
+
+ // No copying
+ IODeviceCallbacks(IODeviceCallbacks const&) = delete;
+ IODeviceCallbacks& operator=(IODeviceCallbacks const&) = delete;
+
+ // Moving is ok
+ IODeviceCallbacks(IODeviceCallbacks&&) = default;
+ IODeviceCallbacks& operator=(IODeviceCallbacks&&) = default;
+
+ // Get the underlying device
+ IODevicePtr const& device() const;
+
+ // Callback functions for Ogg Vorbis
+ static size_t readFunc(void* ptr, size_t size, size_t nmemb, void* datasource);
+ static int seekFunc(void* datasource, ogg_int64_t offset, int whence);
+ static long int tellFunc(void* datasource);
+
+ // Sets up callbacks for Ogg Vorbis
+ void setupOggCallbacks(ov_callbacks& callbacks);
+
+private:
+ IODevicePtr m_device;
+};
+
+}