// // Created by Grishka on 12.08.2018. // #ifndef LIBTGVOIP_VIDEORENDERERANDROID_H #define LIBTGVOIP_VIDEORENDERERANDROID_H #include "../../MessageThread.h" #include "../../video/VideoRenderer.h" #include "../../BlockingQueue.h" #include namespace tgvoip { namespace video { class VideoRendererAndroid : public VideoRenderer { public: VideoRendererAndroid(jobject jobj); ~VideoRendererAndroid() override; void Reset(std::uint32_t codec, unsigned int width, unsigned int height, std::vector& csd) override; void DecodeAndDisplay(Buffer frame, std::uint32_t pts) override; void SetStreamEnabled(bool enabled) override; void SetRotation(std::uint16_t rotation) override; void SetStreamPaused(bool paused) override; static jmethodID resetMethod; static jmethodID decodeAndDisplayMethod; static jmethodID setStreamEnabledMethod; static jmethodID setRotationMethod; static std::vector availableDecoders; static int maxResolution; private: struct Request { enum Type { DecodeFrame, ResetDecoder, UpdateStreamState, Shutdown }; Buffer buffer; Type type; }; void RunThread(); Thread* thread = nullptr; bool running = true; BlockingQueue queue; std::vector csd; unsigned int width; unsigned int height; bool streamEnabled = true; bool streamPaused = false; std::uint32_t codec; std::uint16_t rotation = 0; jobject jobj; }; } } #endif //LIBTGVOIP_VIDEORENDERERANDROID_H