diff options
Diffstat (limited to 'amber/camera/libhdrplusclient/include/HdrPlusClient.h')
-rw-r--r-- | amber/camera/libhdrplusclient/include/HdrPlusClient.h | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/amber/camera/libhdrplusclient/include/HdrPlusClient.h b/amber/camera/libhdrplusclient/include/HdrPlusClient.h new file mode 100644 index 0000000..31f7124 --- /dev/null +++ b/amber/camera/libhdrplusclient/include/HdrPlusClient.h @@ -0,0 +1,160 @@ +/* + * Copyright 2016 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 HDR_PLUS_CLIENT_H +#define HDR_PLUS_CLIENT_H + +#include "CameraMetadata.h" +#include "hardware/camera3.h" +#include "HdrPlusClientListener.h" +#include "HdrPlusTypes.h" + +using ::android::hardware::camera::common::V1_0::helper::CameraMetadata; +namespace android { + +/** + * HdrPlusClient + * + * HdrPlusClient class can be used to connect to HDR+ service to perform HDR+ processing on + * Easel. + */ +class HdrPlusClient { +public: + // HdrPlusClientListener is the listener to receive callbacks from HDR+ client. The listener + // must be valid during the life cycle of HdrPlusClient + HdrPlusClient(HdrPlusClientListener *) {}; + /* + * The recommended way to create an HdrPlusClient instance is via + * EaselManagerClient::openHdrPlusClientAsync() or EaselManagerClient::openHdrPlusClientAsync(). + * EaselManagerClient will make sure Easel is in a valid state to open an HDR+ client. To close + * an HdrPlusClient, use EaselManagerClient::closeHdrPlusClient. + */ + virtual ~HdrPlusClient() {}; + + /* + * Connect to HDR+ service. + * + * If EaselManagerClient is used to create the HdrPlusClient, it is already connected. + * + * Returns: + * 0: on success. + * -EEXIST: if it's already connected. + * -ENODEV: if connecting failed due to a serious error. + */ + virtual status_t connect() = 0; + + /* + * Set the static metadata of current camera device. + * + * Must be called after connect() and before configuring streams. + * + * staticMetadata is the static metadata of current camera device. + * + * Returns: + * 0: on success. + * -ENODEV: if HDR+ service is not connected. + */ + virtual status_t setStaticMetadata(const camera_metadata_t &staticMetadata) = 0; + + /* + * Configure streams. + * + * Must be called when configuration changes including input (sensor) resolution and format, and + * output resolutions and formats. + * + * inputConfig contains the information about the input frames or sensor configurations. + * outputConfigs is a vector of output stream configurations. + * + * Returns: + * 0: on success. + * -EINVAL: if outputConfigs is empty or the configurations are not supported. + * -ENODEV: if HDR+ service is not connected. + */ + virtual status_t configureStreams(const pbcamera::InputConfiguration &inputConfig, + const std::vector<pbcamera::StreamConfiguration> &outputConfigs) = 0; + + /* + * Enable or disable ZSL HDR+ mode. + * + * When ZSL HDR+ mode is enabled, Easel will capture ZSL RAW buffers. ZSL HDR+ mode should be + * disabled to reduce power consumption when HDR+ processing is not necessary, e.g in video + * mode. + * + * enabled is a flag indicating whether to enable ZSL HDR+ mode. + * + * Returns: + * 0: on success. + * -ENODEV: if HDR+ service is not connected, or streams are not configured. + */ + virtual status_t setZslHdrPlusMode(bool enabled) = 0; + + /* + * Submit a capture request for HDR+ outputs. + * + * For each output buffer in CaptureRequest, it will be returned in a CaptureResult via + * HdrPlusClientListener::onCaptureResult(). HdrPlusClientListener::onCaptureResult() may be + * invoked multiple times to return all output buffers in one CaptureRequest. Each output + * buffer will be returned in CaptureResult only once. + * + * request is a CaptureRequest containing output buffers to be filled by HDR+ service. + * requestMetadata is the metadata for this request. + * + * Returns: + * 0: on success. + * -EINVAL: if the request is invalid such as containing invalid stream IDs. + */ + virtual status_t submitCaptureRequest(pbcamera::CaptureRequest *request, + const CameraMetadata &requestMetadata) = 0; + + /* + * Send an input buffer to HDR+ service. This is used when HDR+ service's input buffers come + * from the client rather than MIPI. + * + * inputBuffer is the input buffer to send to HDR+ service. After this method returns, the + * buffer has been copied (with DMA) to HDR+ service and the caller has the + * ownership of the buffer. + */ + virtual void notifyInputBuffer(const pbcamera::StreamBuffer &inputBuffer, + int64_t timestampNs) = 0; + + /* + * Notify about result metadata of a frame that AP captured. This may be called multiple times + * for a frame to send multiple partial metadata and lastMetadata must be false except for the + * last partial metadata. When there is only one metadata for a frame, lastMetadata must be + * true. + * + * frameNumber is a unique frame number that the metadata belong to. + * resultMetadata is the result metadata of a frame that AP captured. + * lastMetadata is a flag indicating whether this is the last metadata for the frame number. + */ + virtual void notifyFrameMetadata(uint32_t frameNumber, const camera_metadata_t &resultMetadata, + bool lastMetadata=true) = 0; + + /* + * Notify Easel has encountered a fatal error and HDR+ client should stop sending messages + * to Easel. + */ + virtual void nofityEaselFatalError() = 0; + +private: + // Disallow copy and assign. + HdrPlusClient(const HdrPlusClient&) = delete; + void operator=(const HdrPlusClient&) = delete; +}; + +} // namespace android + +#endif // HDR_PLUS_CLIENT_H |