Home | History | Annotate | Download | only in camera
      1 /*
      2  * Copyright (C) 2017 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 #ifndef HW_EMULATOR_CAMERA_EMULATED_FAKE_CAMERA_ROTATE_DEVICE_H
     18 #define HW_EMULATOR_CAMERA_EMULATED_FAKE_CAMERA_ROTATE_DEVICE_H
     19 
     20 /*
     21  * Contains declaration of a class EmulatedFakeRotatingCameraDevice that encapsulates
     22  * a fake camera device.
     23  */
     24 
     25 #include "Converters.h"
     26 #include "EmulatedCameraDevice.h"
     27 
     28 #include <EGL/egl.h>
     29 #include <GLES/gl.h>
     30 #include <GLES/glext.h>
     31 
     32 namespace android {
     33 
     34 class EmulatedFakeCamera;
     35 
     36 /* Encapsulates a fake camera device.
     37  * Fake camera device emulates a camera device by providing frames containing
     38  * an image rendered by opengl, that takes rotating input from host
     39  */
     40 class EmulatedFakeRotatingCameraDevice : public EmulatedCameraDevice {
     41 public:
     42     /* Constructs EmulatedFakeRotatingCameraDevice instance. */
     43     explicit EmulatedFakeRotatingCameraDevice(EmulatedFakeCamera* camera_hal);
     44 
     45     /* Destructs EmulatedFakeRotatingCameraDevice instance. */
     46     ~EmulatedFakeRotatingCameraDevice();
     47 
     48     /***************************************************************************
     49      * Emulated camera device abstract interface implementation.
     50      * See declarations of these methods in EmulatedCameraDevice class for
     51      * information on each of these methods.
     52      **************************************************************************/
     53 
     54 public:
     55     /* Connects to the camera device.
     56      * Since there is no real device to connect to, this method does nothing,
     57      * but changes the state.
     58      */
     59     status_t connectDevice();
     60 
     61     /* Disconnects from the camera device.
     62      * Since there is no real device to disconnect from, this method does
     63      * nothing, but changes the state.
     64      */
     65     status_t disconnectDevice();
     66 
     67     /* Starts the camera device. */
     68     status_t startDevice(int width, int height, uint32_t pix_fmt);
     69 
     70     /* Stops the camera device. */
     71     status_t stopDevice();
     72 
     73 
     74 protected:
     75     /* Implementation of the frame production routine. */
     76     bool produceFrame(void* buffer, int64_t* timestamp) override;
     77 
     78     /****************************************************************************
     79      * Fake camera device private API
     80      ***************************************************************************/
     81 
     82 private:
     83 
     84     void fillBuffer(void* buffer);
     85     void render(int width, int height);
     86     int init_gl_surface(int width, int height);
     87     void get_eye_x_y_z(float* x, float* y, float*z);
     88     void get_yawing(float* x, float* y, float*z);
     89     void read_rotation_vector(double *yaw, double* pitch, double* roll);
     90     void read_sensor();
     91     void init_sensor();
     92     void free_gl_surface(void);
     93     void update_scene(float width, float height);
     94     void create_texture_dotx(int width, int height);
     95 
     96     bool mOpenglReady = false;
     97     EGLDisplay mEglDisplay;
     98     EGLSurface mEglSurface;
     99     EGLContext mEglContext;
    100     GLuint mTexture;
    101     uint8_t* mPixelBuf;// = new uint8_t[width * height * kGlBytesPerPixel];;
    102     int mSensorPipe = -1;
    103     enum SENSOR_VALUE_TYPE {
    104         SENSOR_VALUE_ACCEL_X=0,
    105         SENSOR_VALUE_ACCEL_Y=1,
    106         SENSOR_VALUE_ACCEL_Z=2,
    107         SENSOR_VALUE_MAGNETIC_X=3,
    108         SENSOR_VALUE_MAGNETIC_Y=4,
    109         SENSOR_VALUE_MAGNETIC_Z=5,
    110         SENSOR_VALUE_ROTATION_X=6,
    111         SENSOR_VALUE_ROTATION_Y=7,
    112         SENSOR_VALUE_ROTATION_Z=8,
    113     };
    114 
    115     float mSensorValues[9] = {0};
    116 
    117 };
    118 
    119 }; /* namespace android */
    120 
    121 #endif  /* HW_EMULATOR_CAMERA_EMULATED_FAKE_CAMERA_ROTATE_DEVICE_H */
    122