diff --git a/src/android/mako.cpp b/src/android/mako.cpp index 5a57166..f741e1c 100644 --- a/src/android/mako.cpp +++ b/src/android/mako.cpp @@ -146,8 +146,14 @@ bool MAKO::check_music() void MAKO::get_mark(int* mark, int* loop) { - WARNING("not implemented"); - *mark = *loop = 0; + SDL_LockMutex(fm_mutex); + if (fm) { + fm->get_mark(mark, loop); + } else { + *mark = 0; + *loop = 0; + } + SDL_UnlockMutex(fm_mutex); } void MAKO::play_pcm(int page, bool loop) diff --git a/src/emscripten/mako.cpp b/src/emscripten/mako.cpp index 76b64b8..8b8c9c5 100644 --- a/src/emscripten/mako.cpp +++ b/src/emscripten/mako.cpp @@ -75,8 +75,12 @@ bool MAKO::check_music() void MAKO::get_mark(int* mark, int* loop) { - WARNING("not implemented"); - *mark = *loop = 0; + if (fm) { + fm->get_mark(mark, loop); + } else { + *mark = 0; + *loop = 0; + } } void MAKO::play_pcm(int page, bool loop) diff --git a/src/fm/mako_fmgen.cpp b/src/fm/mako_fmgen.cpp index e79f892..d5dcd24 100644 --- a/src/fm/mako_fmgen.cpp +++ b/src/fm/mako_fmgen.cpp @@ -60,3 +60,8 @@ void MakoFMgen::Mix(int samples) { out_samples -= samples; output += samples * 2; } + +void MakoFMgen::get_mark(int* mark, int* loop) { + *mark = GetMark(); + *loop = Looped() ? 1 : 0; +} diff --git a/src/fm/mako_fmgen.h b/src/fm/mako_fmgen.h index 2b32037..c74c576 100644 --- a/src/fm/mako_fmgen.h +++ b/src/fm/mako_fmgen.h @@ -8,6 +8,7 @@ class MakoFMgen : private MakoFM { public: MakoFMgen(int rate, const uint8_t* data, bool free_data); void Process(int16* stream, int len); + void get_mark(int* mark, int* loop); private: void SetReg(RegType type, uint8_t addr, uint8_t val) override; diff --git a/src/fm/makofm.h b/src/fm/makofm.h index d5f4fc9..327db0b 100644 --- a/src/fm/makofm.h +++ b/src/fm/makofm.h @@ -18,6 +18,7 @@ public: double GetTime() const { return time_ms; } bool Looped() const { return part_looped == (1 << MAKO_MAXCH) - 1; } + uint8_t GetMark() const { return current_mark; } protected: enum RegType { diff --git a/src/linux/mako.cpp b/src/linux/mako.cpp index 4e23c46..06c2e96 100644 --- a/src/linux/mako.cpp +++ b/src/linux/mako.cpp @@ -158,9 +158,14 @@ bool MAKO::check_music() void MAKO::get_mark(int* mark, int* loop) { - // TODO: fix - *mark = 0; - *loop = 0; + SDL_LockMutex(fm_mutex); + if (fm) { + fm->get_mark(mark, loop); + } else { + *mark = 0; + *loop = 0; + } + SDL_UnlockMutex(fm_mutex); } void MAKO::play_pcm(int page, bool loop) diff --git a/src/win/mako.cpp b/src/win/mako.cpp index 7dab20f..8b89fcb 100644 --- a/src/win/mako.cpp +++ b/src/win/mako.cpp @@ -418,9 +418,14 @@ void MAKO::select_sound(BGMDevice dev) void MAKO::get_mark(int* mark, int* loop) { - // TODO: fix - *mark = 0; - *loop = 0; + SDL_LockMutex(fm_mutex); + if (fm) { + fm->get_mark(mark, loop); + } else { + *mark = 0; + *loop = 0; + } + SDL_UnlockMutex(fm_mutex); } void MAKO::play_pcm(int page, bool loop)