#pragma once #include "captions-handler.hpp" #include "captions-mssapi-stream.hpp" #include <util/windows/HRError.hpp> #include <util/windows/ComPtr.hpp> #include <util/windows/WinHandle.hpp> #include <util/windows/CoTaskMemPtr.hpp> #include <util/threading.h> #include <util/platform.h> #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable : 4996) #endif #include <sphelper.h> #ifdef _MSC_VER #pragma warning(pop) #endif #include <obs.hpp> #include <thread> class mssapi_captions : public captions_handler { friend class CaptionStream; ComPtr<CaptionStream> audio; ComPtr<ISpObjectToken> token; ComPtr<ISpRecoGrammar> grammar; ComPtr<ISpRecognizer> recognizer; ComPtr<ISpRecoContext> context; HANDLE notify; WinHandle stop; std::thread t; bool started = false; void main_thread(); public: mssapi_captions(captions_cb callback, const std::string &lang); virtual ~mssapi_captions(); virtual void pcm_data(const void *data, size_t frames) override; };