/*
* Copyright ( C ) 2023 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 .
*/
#pragma once
#include <functional>
#include <memory>
#include <tuple>
#include <vector>
#include <stdint.h>
#include <aidl/android/hardware/camera/device/CameraMetadata.h>
#include <aidl/android/hardware/camera/device/CaptureResult.h>
#include <aidl/android/hardware/camera/device/HalStream.h>
#include <aidl/android/hardware/camera/device/RequestTemplate.h>
#include <aidl/android/hardware/camera/device/Stream.h>
#include <aidl/android/hardware/camera/device/StreamBuffer.h>
#include <aidl/android/hardware/graphics/common/BufferUsage.h>
#include <aidl/android/hardware/graphics/common/Dataspace.h>
#include <aidl/android/hardware/graphics/common/PixelFormat.h>
#include <cutils/native_handle.h>
#include <system/camera_metadata.h>
#include <system/graphics.h>
#include "Rect.h"
#include "Span.h"
#include "CachedStreamBuffer.h"
namespace android {
namespace hardware {
namespace camera {
namespace provider {
namespace implementation {
namespace hw {
using aidl::android::hardware::camera::device::CameraMetadata;
using aidl::android::hardware::camera::device::HalStream;
using aidl::android::hardware::camera::device::RequestTemplate;
using aidl::android::hardware::camera::device::Stream;
using aidl::android::hardware::camera::device::StreamBuffer;
using aidl::android::hardware::graphics::common::BufferUsage;
using aidl::android::hardware::graphics::common::Dataspace;
using aidl::android::hardware::graphics::common::PixelFormat;
struct HwCaptureRequest {
CameraMetadata metadataUpdate;
std::vector<CachedStreamBuffer*> buffers;
int32_t frameNumber;
};
// pass `true` to process the buffer, pass `false` to return an error asap to
// release the underlying buffer to the framework.
using DelayedStreamBuffer = std::function<StreamBuffer(bool )>;
struct HwCamera {
static constexpr int32_t kErrorBadFormat = -1 ;
static constexpr int32_t kErrorBadUsage = -2 ;
static constexpr int32_t kErrorBadDataspace = -3 ;
virtual ~HwCamera() {}
virtual std::tuple<PixelFormat, BufferUsage, Dataspace, int32_t>
overrideStreamParams(PixelFormat, BufferUsage, Dataspace) const = 0 ;
virtual bool configure(const CameraMetadata& sessionParams, size_t nStreams,
const Stream* streams, const HalStream* halStreams) = 0 ;
virtual void close() = 0 ;
virtual std::tuple<int64_t, int64_t, CameraMetadata, std::vector<StreamBuffer>,
std::vector<DelayedStreamBuffer>>
processCaptureRequest(CameraMetadata, Span<CachedStreamBuffer*>) = 0 ;
static int64_t getFrameDuration(const camera_metadata_t*, int64_t def,
int64_t min, int64_t max);
static camera_metadata_enum_android_lens_state_t
getAfLensState(camera_metadata_enum_android_control_af_state_t);
static bool compressJpeg(Rect<uint16_t> imageSize,
const android_ycbcr& imageYcbcr,
const CameraMetadata& metadata,
const native_handle_t* jpegBuffer,
size_t jpegBufferSize);
static bool convertRGBAtoRAW16(Rect<uint16_t> imageSize,
const void * rgba,
const native_handle_t* raw16Buffer);
////////////////////////////////////////////////////////////////////////////
virtual Span<const std::pair<int32_t, int32_t>> getTargetFpsRanges() const = 0 ;
virtual std::tuple<int32_t, int32_t, int32_t, int32_t> getAeCompensationRange() const ;
virtual std::pair<float , float > getZoomRatioRange() const ;
virtual std::pair<int , int > getSupportedFlashStrength() const ;
virtual Span<const Rect<uint16_t>> getAvailableThumbnailSizes() const = 0 ;
virtual int32_t getJpegMaxSize() const ;
virtual bool isBackFacing() const = 0 ;
virtual Span<const float > getAvailableApertures() const ;
virtual Span<const float > getAvailableFocalLength() const ;
virtual float getHyperfocalDistance() const ;
virtual float getMinimumFocusDistance() const ;
virtual std::tuple<int32_t, int32_t, int32_t> getMaxNumOutputStreams() const = 0 ;
virtual int32_t getPipelineMaxDepth() const ;
virtual uint32_t getAvailableCapabilitiesBitmap() const ;
virtual Span<const PixelFormat> getSupportedPixelFormats() const = 0 ;
virtual Span<const Rect<uint16_t>> getSupportedResolutions() const = 0 ;
virtual float getMaxDigitalZoom() const ;
virtual int64_t getMinFrameDurationNs() const = 0 ;
virtual int64_t getStallFrameDurationNs() const ;
virtual int32_t getSensorOrientation() const ;
virtual Rect<uint16_t> getSensorSize() const = 0 ;
virtual uint8_t getSensorColorFilterArrangement() const = 0 ;
virtual float getSensorDPI() const ;
virtual std::pair<int32_t, int32_t> getSensorSensitivityRange() const ;
virtual std::pair<int64_t, int64_t> getSensorExposureTimeRange() const = 0 ;
virtual int64_t getSensorMaxFrameDuration() const = 0 ;
////////////////////////////////////////////////////////////////////////////
virtual std::pair<int32_t, int32_t> getDefaultTargetFpsRange(RequestTemplate) const = 0 ;
virtual float getDefaultAperture() const ;
virtual float getDefaultFocalLength() const ;
virtual int32_t getDefaultSensorSensitivity() const ;
virtual int64_t getDefaultSensorExpTime() const = 0 ;
virtual int64_t getDefaultSensorFrameDuration() const = 0 ;
};
using HwCameraFactoryProduct = std::unique_ptr<HwCamera>;
using HwCameraFactory = std::function<HwCameraFactoryProduct()>;
} // namespace hw
} // namespace implementation
} // namespace provider
} // namespace camera
} // namespace hardware
} // namespace android
Messung V0.5 in Prozent C=91 H=95 G=92
¤ Dauer der Verarbeitung: 0.13 Sekunden
(vorverarbeitet am 2026-06-27)
¤
*© Formatika GbR, Deutschland