aboutsummaryrefslogtreecommitdiff
path: root/Src/replicant/file/FilePlayback.h
diff options
context:
space:
mode:
Diffstat (limited to 'Src/replicant/file/FilePlayback.h')
-rw-r--r--Src/replicant/file/FilePlayback.h54
1 files changed, 54 insertions, 0 deletions
diff --git a/Src/replicant/file/FilePlayback.h b/Src/replicant/file/FilePlayback.h
new file mode 100644
index 00000000..b6b17bec
--- /dev/null
+++ b/Src/replicant/file/FilePlayback.h
@@ -0,0 +1,54 @@
+#pragma once
+#include "player/svc_playback.h"
+#include "nx/nxstring.h"
+#include "nx/nxfile.h"
+#include "nswasabi/ServiceName.h"
+#include "nswasabi/PlaybackBase.h"
+#include "ifc_fileplayback.h"
+#include "replaygain/ifc_replaygain_settings.h"
+#include "FileMetadata.h"
+
+// {60DB6A52-1A82-4C0D-A947-203549260758}
+static const GUID file_playback_guid =
+{ 0x60db6a52, 0x1a82, 0x4c0d, { 0xa9, 0x47, 0x20, 0x35, 0x49, 0x26, 0x7, 0x58 } };
+
+class FilePlaybackService : public svc_playback
+{
+public:
+ WASABI_SERVICE_NAME("File Playback");
+ static GUID GetServiceGUID() { return file_playback_guid; }
+ FilePlaybackService();
+ int WASABICALL PlaybackService_CreatePlayback(unsigned int pass, nx_uri_t filename, ifc_player *player, ifc_playback **out_playback_object);
+};
+
+class FilePlayback : public PlaybackBase, public ifc_fileplayback_parent
+{
+public:
+ FilePlayback();
+ ~FilePlayback();
+ ns_error_t Initialize(nx_uri_t filename, ifc_player *player);
+private:
+ ns_error_t WASABICALL FilePlaybackParent_OpenOutput(const ifc_audioout::Parameters *parameters);
+ ns_error_t WASABICALL FilePlaybackParent_Output(const void *audio_data, size_t audio_data_length, size_t *frames_consumed, double begin_position_seconds);
+ ns_error_t WASABICALL FilePlaybackParent_OutputNonInterleaved(const void *audio_data, size_t audio_data_length, size_t *frames_consumed, double begin_position_seconds);
+ ns_error_t WASABICALL FilePlaybackParent_OnMetadata(ifc_metadata *new_metadata);
+
+ ifc_fileplayback *implementation;
+ nx_file_t file;
+ ifc_audioout *out;
+ bool paused;
+ double last_position;
+ ns_error_t exact_length, exact_bitrate;
+ ifc_audioout::Parameters parameters;
+ const uint8_t **output_pointers;
+ ifc_metadata *implementation_metadata;
+ FileMetadataRead *metadata;
+
+ ns_error_t Internal_Interrupt();
+ ns_error_t OutputWait();
+ ns_error_t WaitForClose();
+
+ /* Thread function */
+ static nx_thread_return_t NXTHREADCALL FilePlayerThreadFunction(nx_thread_parameter_t param);
+ nx_thread_return_t NXTHREADCALL DecodeLoop();
+}; \ No newline at end of file