1 /* 2 * Copyright (C) 2023 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 #pragma once 18 19 #include <unordered_map> 20 21 #include <android-base/unique_fd.h> 22 23 #include "abc3d.h" 24 25 #include "AutoNativeHandle.h" 26 #include "AFStateMachine.h" 27 #include "HwCamera.h" 28 29 namespace android { 30 namespace hardware { 31 namespace camera { 32 namespace provider { 33 namespace implementation { 34 namespace hw { 35 36 struct FakeRotatingCamera : public HwCamera { 37 explicit FakeRotatingCamera(bool isBackFacing); 38 ~FakeRotatingCamera() override; 39 40 std::tuple<PixelFormat, BufferUsage, Dataspace, int32_t> 41 overrideStreamParams(PixelFormat, BufferUsage, Dataspace) const override; 42 43 bool configure(const CameraMetadata& sessionParams, size_t nStreams, 44 const Stream* streams, const HalStream* halStreams) override; 45 void close() override; 46 47 std::tuple<int64_t, int64_t, CameraMetadata, std::vector<StreamBuffer>, 48 std::vector<DelayedStreamBuffer>> 49 processCaptureRequest(CameraMetadata, Span<CachedStreamBuffer*>) override; 50 51 // metadata 52 Span<const std::pair<int32_t, int32_t>> getTargetFpsRanges() const override; 53 Span<const Rect<uint16_t>> getAvailableThumbnailSizes() const override; 54 bool isBackFacing() const override; 55 Span<const float> getAvailableFocalLength() const override; 56 std::tuple<int32_t, int32_t, int32_t> getMaxNumOutputStreams() const override; 57 Span<const PixelFormat> getSupportedPixelFormats() const override; 58 Span<const Rect<uint16_t>> getSupportedResolutions() const override; 59 int64_t getMinFrameDurationNs() const override; 60 Rect<uint16_t> getSensorSize() const override; 61 uint8_t getSensorColorFilterArrangement() const override; 62 std::pair<int64_t, int64_t> getSensorExposureTimeRange() const override; 63 int64_t getSensorMaxFrameDuration() const override; 64 std::pair<int32_t, int32_t> getDefaultTargetFpsRange(RequestTemplate) const override; 65 int64_t getDefaultSensorExpTime() const override; 66 int64_t getDefaultSensorFrameDuration() const override; 67 float getDefaultFocalLength() const override; 68 69 private: 70 struct StreamInfo { 71 std::unique_ptr<const native_handle_t, 72 AutoAllocatorNativeHandleDeleter> rgbaBuffer; 73 BufferUsage usage; 74 Rect<uint16_t> size; 75 PixelFormat pixelFormat; 76 uint32_t blobBufferSize; 77 uint32_t stride; 78 }; 79 80 struct SensorValues { 81 float accel[3]; 82 float magnetic[3]; 83 float rotation[3]; 84 }; 85 86 struct RenderParams { 87 struct CameraParams { 88 float pos3[3]; 89 float rotXYZ3[3]; 90 }; 91 CameraParams cameraParams; 92 }; 93 94 abc3d::EglCurrentContext initOpenGL(); 95 void closeImpl(bool everything); 96 97 void captureFrame(const StreamInfo& si, 98 const RenderParams& renderParams, 99 CachedStreamBuffer* csb, 100 std::vector<StreamBuffer>* outputBuffers, 101 std::vector<DelayedStreamBuffer>* delayedOutputBuffers) const; 102 bool captureFrameRGBA(const StreamInfo& si, 103 const RenderParams& renderParams, 104 CachedStreamBuffer* dst) const; 105 bool captureFrameYUV(const StreamInfo& si, 106 const RenderParams& renderParams, 107 CachedStreamBuffer* dst) const; 108 DelayedStreamBuffer captureFrameJpeg(const StreamInfo& si, 109 const RenderParams& renderParams, 110 CachedStreamBuffer* csb) const; 111 std::vector<uint8_t> captureFrameForCompressing(const StreamInfo& si, 112 const RenderParams& renderParams) const; 113 bool renderIntoRGBA(const StreamInfo& si, 114 const RenderParams& renderParams, 115 const native_handle_t* rgbaBuffer) const; 116 bool drawScene(Rect<uint16_t> imageSize, 117 const RenderParams& renderParams, 118 bool isHardwareBuffer) const; 119 bool drawSceneImpl(const float pvMatrix44[]) const; 120 CameraMetadata applyMetadata(const CameraMetadata& metadata); 121 CameraMetadata updateCaptureResultMetadata(); 122 bool readSensors(SensorValues* vals); 123 124 const bool mIsBackFacing; 125 AFStateMachine mAFStateMachine; 126 std::unordered_map<int32_t, StreamInfo> mStreamInfoCache; 127 base::unique_fd mQemuChannel; 128 129 abc3d::EglContext mEglContext; 130 abc3d::AutoTexture mGlTestPatternTexture; 131 GLint mGlProgramAttrPositionLoc; 132 GLint mGlProgramAttrTexCoordLoc; 133 GLint mGlProgramUniformTextureLoc; 134 GLint mGlProgramUniformPvmMatrixLoc; 135 abc3d::AutoProgram mGlProgram; 136 137 CameraMetadata mCaptureResultMetadata; 138 int64_t mFrameDurationNs = 0; 139 }; 140 141 } // namespace hw 142 } // namespace implementation 143 } // namespace provider 144 } // namespace camera 145 } // namespace hardware 146 } // namespace android 147