// Copyright (c) 2012-2017 VideoStitch SAS // Copyright (c) 2018 stitchEm #ifndef ANDROIDAPPLICATION_H_ #define ANDROIDAPPLICATION_H_ #include #include #include "NvAppBase/android/NvAndroidNativeAppGlue.h" #include "NvEGLUtil/NvEGLUtil.h" using namespace VideoStitch; typedef NvEGLWinUtil NvEGLUtil; typedef struct { double x; double y; } vector2d; class NativeApp { public: // Application state enum State { INITIALIZATION, SELECTION, MAIN_LOOP, EXIT }; NativeApp(android_app *app, NvEGLUtil *egl); virtual ~NativeApp(); void renderFrame(void); State getState(void) const; private: // Handle commands void handleCommand(int cmd); // Handle inputs int handleInput(AInputEvent const *event); // Wrapper to handle commands generated by the UI static void HandleCommand(android_app *app, int32_t cmd); // Wrapper to handle input events generated by the UI static int32_t HandleInput(android_app *app, AInputEvent *event); void launchStitcher(void *outBuffer, std::mutex &outMutex, const char *fileName); int stitchRun(VideoStitch::Core::Controller *controller, VideoStitch::Core::StitchOutput *stitchOutput, const int firstFrame, const int lastFrame); // Handler to plain texture fragment program GLint mPlainTextureProgram; // flag to notify screenPress bool mScreenPressed; // Handler to source texture // GLuint mInputImageTexture; // Handler to output texture GLuint mOutputImageTexture; // width of input image int mTextureWidth; // height of input image int mTextureHeight; // Box Filter // gpu_bf::BoxFilterDemo boxfilter; // Holds a point to EGL wrapper NvEGLUtil *mEgl; // Holds a pointer to android native activity instance android_app *mNativeAppInstance; // Holds application state State mCurrentApplicationState; // mStitcherBuffer for holding output from kernel unsigned int *mStitcherBuffer; std::mutex mStitcherMutex; std::thread *mStitcherThread; std::mutex mOrientationMutex; bool mOrientationFlag; double mYaw; double mPitch; double mRoll; float mColorChannels[3]; float mAlphaStep; vector2d mPos; }; #endif /* ANDROIDAPPLICATION_H_ */