/* * Copyright (C) 2017 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef HW_EMULATOR_CAMERA_EMULATED_FAKE_CAMERA_ROTATE_DEVICE_H #define HW_EMULATOR_CAMERA_EMULATED_FAKE_CAMERA_ROTATE_DEVICE_H /* * Contains declaration of a class EmulatedFakeRotatingCameraDevice that encapsulates * a fake camera device. */ #include "Converters.h" #include "EmulatedCameraDevice.h" #include #include #include namespace android { class EmulatedFakeCamera; /* Encapsulates a fake camera device. * Fake camera device emulates a camera device by providing frames containing * an image rendered by opengl, that takes rotating input from host */ class EmulatedFakeRotatingCameraDevice : public EmulatedCameraDevice { public: /* Constructs EmulatedFakeRotatingCameraDevice instance. */ explicit EmulatedFakeRotatingCameraDevice(EmulatedFakeCamera* camera_hal); /* Destructs EmulatedFakeRotatingCameraDevice instance. */ ~EmulatedFakeRotatingCameraDevice(); /*************************************************************************** * Emulated camera device abstract interface implementation. * See declarations of these methods in EmulatedCameraDevice class for * information on each of these methods. **************************************************************************/ public: /* Connects to the camera device. * Since there is no real device to connect to, this method does nothing, * but changes the state. */ status_t connectDevice(); /* Disconnects from the camera device. * Since there is no real device to disconnect from, this method does * nothing, but changes the state. */ status_t disconnectDevice(); /* Starts the camera device. */ status_t startDevice(int width, int height, uint32_t pix_fmt); /* Stops the camera device. */ status_t stopDevice(); protected: /* Implementation of the frame production routine. */ bool produceFrame(void* buffer, int64_t* timestamp) override; /**************************************************************************** * Fake camera device private API ***************************************************************************/ private: void fillBuffer(void* buffer); void render(int width, int height); int init_gl_surface(int width, int height); void get_eye_x_y_z(float* x, float* y, float*z); void get_yawing(float* x, float* y, float*z); void read_rotation_vector(double *yaw, double* pitch, double* roll); void read_sensor(); void init_sensor(); void free_gl_surface(void); void update_scene(float width, float height); void create_texture_dotx(int width, int height); bool mOpenglReady = false; EGLDisplay mEglDisplay; EGLSurface mEglSurface; EGLContext mEglContext; GLuint mTexture; uint8_t* mPixelBuf;// = new uint8_t[width * height * kGlBytesPerPixel];; int mSensorPipe = -1; enum SENSOR_VALUE_TYPE { SENSOR_VALUE_ACCEL_X=0, SENSOR_VALUE_ACCEL_Y=1, SENSOR_VALUE_ACCEL_Z=2, SENSOR_VALUE_MAGNETIC_X=3, SENSOR_VALUE_MAGNETIC_Y=4, SENSOR_VALUE_MAGNETIC_Z=5, SENSOR_VALUE_ROTATION_X=6, SENSOR_VALUE_ROTATION_Y=7, SENSOR_VALUE_ROTATION_Z=8, }; float mSensorValues[9] = {0}; }; }; /* namespace android */ #endif /* HW_EMULATOR_CAMERA_EMULATED_FAKE_CAMERA_ROTATE_DEVICE_H */