123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- #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();
- };
|