CameraDeviceBase.h revision e2d167eb689d7a536805f950c31f11b9e9c578ae
17fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala/*
27fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala * Copyright (C) 2013 The Android Open Source Project
37fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala *
47fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala * Licensed under the Apache License, Version 2.0 (the "License");
57fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala * you may not use this file except in compliance with the License.
67fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala * You may obtain a copy of the License at
77fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala *
87fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala *      http://www.apache.org/licenses/LICENSE-2.0
97fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala *
107fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala * Unless required by applicable law or agreed to in writing, software
117fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala * distributed under the License is distributed on an "AS IS" BASIS,
127fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala * See the License for the specific language governing permissions and
147fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala * limitations under the License.
157fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala */
167fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
177fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala#ifndef ANDROID_SERVERS_CAMERA_CAMERADEVICEBASE_H
187fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala#define ANDROID_SERVERS_CAMERA_CAMERADEVICEBASE_H
197fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
207fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala#include <utils/RefBase.h>
217fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala#include <utils/String8.h>
227fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala#include <utils/String16.h>
237fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala#include <utils/Vector.h>
247fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala#include <utils/Timers.h>
2590e59c98c343e941b1a75307ffa4b4b5f1eb50d6Jianing Wei#include <utils/List.h>
267fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
27cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei#include <camera/camera2/ICameraDeviceCallbacks.h>
287fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala#include "hardware/camera2.h"
290ea8fa4ccbf9b2b179370b983f3887d3daf2381fZhijun He#include "hardware/camera3.h"
307fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala#include "camera/CameraMetadata.h"
31cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei#include "camera/CaptureResult.h"
327fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
337fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvalanamespace android {
347fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
357fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala/**
367fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala * Base interface for version >= 2 camera device classes, which interface to
377fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala * camera HAL device versions >= 2.
387fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala */
397fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvalaclass CameraDeviceBase : public virtual RefBase {
407fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala  public:
417fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    virtual ~CameraDeviceBase();
427fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
4371381051e2d048b2705c447b3d59db6e972493eeIgor Murashkin    /**
4471381051e2d048b2705c447b3d59db6e972493eeIgor Murashkin     * The device's camera ID
4571381051e2d048b2705c447b3d59db6e972493eeIgor Murashkin     */
4671381051e2d048b2705c447b3d59db6e972493eeIgor Murashkin    virtual int      getId() const = 0;
4771381051e2d048b2705c447b3d59db6e972493eeIgor Murashkin
487fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    virtual status_t initialize(camera_module_t *module) = 0;
497fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    virtual status_t disconnect() = 0;
507fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
51cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei    virtual status_t dump(int fd, const Vector<String16> &args) = 0;
527fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
537fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    /**
547fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * The device's static characteristics metadata buffer
557fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     */
567fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    virtual const CameraMetadata& info() const = 0;
577fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
587fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    /**
597fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * Submit request for capture. The CameraDevice takes ownership of the
607fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * passed-in buffer.
61cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei     * Output lastFrameNumber is the expected frame number of this request.
627fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     */
63cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei    virtual status_t capture(CameraMetadata &request, int64_t *lastFrameNumber = NULL) = 0;
647fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
657fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    /**
6690e59c98c343e941b1a75307ffa4b4b5f1eb50d6Jianing Wei     * Submit a list of requests.
67cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei     * Output lastFrameNumber is the expected last frame number of the list of requests.
6890e59c98c343e941b1a75307ffa4b4b5f1eb50d6Jianing Wei     */
69cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei    virtual status_t captureList(const List<const CameraMetadata> &requests,
70cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei                                 int64_t *lastFrameNumber = NULL) = 0;
7190e59c98c343e941b1a75307ffa4b4b5f1eb50d6Jianing Wei
7290e59c98c343e941b1a75307ffa4b4b5f1eb50d6Jianing Wei    /**
737fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * Submit request for streaming. The CameraDevice makes a copy of the
747fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * passed-in buffer and the caller retains ownership.
75cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei     * Output lastFrameNumber is the last frame number of the previous streaming request.
767fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     */
77cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei    virtual status_t setStreamingRequest(const CameraMetadata &request,
78cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei                                         int64_t *lastFrameNumber = NULL) = 0;
797fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
807fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    /**
8190e59c98c343e941b1a75307ffa4b4b5f1eb50d6Jianing Wei     * Submit a list of requests for streaming.
82cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei     * Output lastFrameNumber is the last frame number of the previous streaming request.
8390e59c98c343e941b1a75307ffa4b4b5f1eb50d6Jianing Wei     */
84cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei    virtual status_t setStreamingRequestList(const List<const CameraMetadata> &requests,
85cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei                                             int64_t *lastFrameNumber = NULL) = 0;
8690e59c98c343e941b1a75307ffa4b4b5f1eb50d6Jianing Wei
8790e59c98c343e941b1a75307ffa4b4b5f1eb50d6Jianing Wei    /**
887fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * Clear the streaming request slot.
89cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei     * Output lastFrameNumber is the last frame number of the previous streaming request.
907fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     */
91cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei    virtual status_t clearStreamingRequest(int64_t *lastFrameNumber = NULL) = 0;
927fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
937fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    /**
947fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * Wait until a request with the given ID has been dequeued by the
957fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * HAL. Returns TIMED_OUT if the timeout duration is reached. Returns
967fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * immediately if the latest request received by the HAL has this id.
977fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     */
987fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    virtual status_t waitUntilRequestReceived(int32_t requestId,
997fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala            nsecs_t timeout) = 0;
1007fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
1017fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    /**
1027fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * Create an output stream of the requested size and format.
1037fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     *
1047fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * If format is CAMERA2_HAL_PIXEL_FORMAT_OPAQUE, then the HAL device selects
1057fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * an appropriate format; it can be queried with getStreamInfo.
1067fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     *
1077fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * If format is HAL_PIXEL_FORMAT_COMPRESSED, the size parameter must be
1087fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * equal to the size in bytes of the buffers to allocate for the stream. For
1097fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * other formats, the size parameter is ignored.
1107fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     */
1117fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    virtual status_t createStream(sp<ANativeWindow> consumer,
11228c9b6f298134624cb52b1af4ed8716dddb983d3Zhijun He            uint32_t width, uint32_t height, int format, int *id) = 0;
1137fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
1147fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    /**
1157fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * Create an input reprocess stream that uses buffers from an existing
1167fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * output stream.
1177fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     */
1187fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    virtual status_t createReprocessStreamFromStream(int outputId, int *id) = 0;
1197fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
1207fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    /**
1217fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * Get information about a given stream.
1227fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     */
1237fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    virtual status_t getStreamInfo(int id,
1247fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala            uint32_t *width, uint32_t *height, uint32_t *format) = 0;
1257fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
1267fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    /**
1277fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * Set stream gralloc buffer transform
1287fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     */
1297fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    virtual status_t setStreamTransform(int id, int transform) = 0;
1307fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
1317fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    /**
1327fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * Delete stream. Must not be called if there are requests in flight which
1337fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * reference that stream.
1347fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     */
1357fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    virtual status_t deleteStream(int id) = 0;
1367fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
1377fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    /**
1387fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * Delete reprocess stream. Must not be called if there are requests in
1397fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * flight which reference that stream.
1407fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     */
1417fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    virtual status_t deleteReprocessStream(int id) = 0;
1427fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
1437fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    /**
144e2d167eb689d7a536805f950c31f11b9e9c578aeIgor Murashkin     * Take the currently-defined set of streams and configure the HAL to use
145e2d167eb689d7a536805f950c31f11b9e9c578aeIgor Murashkin     * them. This is a long-running operation (may be several hundered ms).
146e2d167eb689d7a536805f950c31f11b9e9c578aeIgor Murashkin     *
147e2d167eb689d7a536805f950c31f11b9e9c578aeIgor Murashkin     * The device must be idle (see waitUntilDrained) before calling this.
148e2d167eb689d7a536805f950c31f11b9e9c578aeIgor Murashkin     *
149e2d167eb689d7a536805f950c31f11b9e9c578aeIgor Murashkin     * Returns OK on success; otherwise on error:
150e2d167eb689d7a536805f950c31f11b9e9c578aeIgor Murashkin     * - BAD_VALUE if the set of streams was invalid (e.g. fmts or sizes)
151e2d167eb689d7a536805f950c31f11b9e9c578aeIgor Murashkin     * - INVALID_OPERATION if the device was in the wrong state
152e2d167eb689d7a536805f950c31f11b9e9c578aeIgor Murashkin     */
153e2d167eb689d7a536805f950c31f11b9e9c578aeIgor Murashkin    virtual status_t configureStreams() = 0;
154e2d167eb689d7a536805f950c31f11b9e9c578aeIgor Murashkin
155e2d167eb689d7a536805f950c31f11b9e9c578aeIgor Murashkin    /**
1567fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * Create a metadata buffer with fields that the HAL device believes are
1577fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * best for the given use case
1587fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     */
1597fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    virtual status_t createDefaultRequest(int templateId,
1607fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala            CameraMetadata *request) = 0;
1617fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
1627fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    /**
1637fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * Wait until all requests have been processed. Returns INVALID_OPERATION if
1647fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * the streaming slot is not empty, or TIMED_OUT if the requests haven't
1657fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * finished processing in 10 seconds.
1667fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     */
1677fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    virtual status_t waitUntilDrained() = 0;
1687fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
1697fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    /**
17028c9b6f298134624cb52b1af4ed8716dddb983d3Zhijun He     * Get Jpeg buffer size for a given jpeg resolution.
17128c9b6f298134624cb52b1af4ed8716dddb983d3Zhijun He     * Negative values are error codes.
17228c9b6f298134624cb52b1af4ed8716dddb983d3Zhijun He     */
17328c9b6f298134624cb52b1af4ed8716dddb983d3Zhijun He    virtual ssize_t getJpegBufferSize(uint32_t width, uint32_t height) const = 0;
17428c9b6f298134624cb52b1af4ed8716dddb983d3Zhijun He
17528c9b6f298134624cb52b1af4ed8716dddb983d3Zhijun He    /**
1767fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * Abstract class for HAL notification listeners
1777fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     */
1787fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    class NotificationListener {
1797fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala      public:
180f1e98d857ec377f2c9b916073d40732e6ebb7cedEino-Ville Talvala        // The set of notifications is a merge of the notifications required for
181f1e98d857ec377f2c9b916073d40732e6ebb7cedEino-Ville Talvala        // API1 and API2.
182f1e98d857ec377f2c9b916073d40732e6ebb7cedEino-Ville Talvala
183f1e98d857ec377f2c9b916073d40732e6ebb7cedEino-Ville Talvala        // Required for API 1 and 2
184cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei        virtual void notifyError(ICameraDeviceCallbacks::CameraErrorCode errorCode,
185cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei                                 const CaptureResultExtras &resultExtras) = 0;
186f1e98d857ec377f2c9b916073d40732e6ebb7cedEino-Ville Talvala
187f1e98d857ec377f2c9b916073d40732e6ebb7cedEino-Ville Talvala        // Required only for API2
188f1e98d857ec377f2c9b916073d40732e6ebb7cedEino-Ville Talvala        virtual void notifyIdle() = 0;
189cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei        virtual void notifyShutter(const CaptureResultExtras &resultExtras,
190f1e98d857ec377f2c9b916073d40732e6ebb7cedEino-Ville Talvala                nsecs_t timestamp) = 0;
191f1e98d857ec377f2c9b916073d40732e6ebb7cedEino-Ville Talvala
192f1e98d857ec377f2c9b916073d40732e6ebb7cedEino-Ville Talvala        // Required only for API1
1937fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala        virtual void notifyAutoFocus(uint8_t newState, int triggerId) = 0;
1947fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala        virtual void notifyAutoExposure(uint8_t newState, int triggerId) = 0;
1957fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala        virtual void notifyAutoWhitebalance(uint8_t newState,
1967fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala                int triggerId) = 0;
1977fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala      protected:
1987fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala        virtual ~NotificationListener();
1997fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    };
2007fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
2017fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    /**
2027fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * Connect HAL notifications to a listener. Overwrites previous
2037fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * listener. Set to NULL to stop receiving notifications.
2047fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     */
2057fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    virtual status_t setNotifyCallback(NotificationListener *listener) = 0;
2067fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
2077fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    /**
20846910bdc57c35ac36bd4adcbb76f4f3a590e3f21Eino-Ville Talvala     * Whether the device supports calling notifyAutofocus, notifyAutoExposure,
20946910bdc57c35ac36bd4adcbb76f4f3a590e3f21Eino-Ville Talvala     * and notifyAutoWhitebalance; if this returns false, the client must
21046910bdc57c35ac36bd4adcbb76f4f3a590e3f21Eino-Ville Talvala     * synthesize these notifications from received frame metadata.
21146910bdc57c35ac36bd4adcbb76f4f3a590e3f21Eino-Ville Talvala     */
21246910bdc57c35ac36bd4adcbb76f4f3a590e3f21Eino-Ville Talvala    virtual bool     willNotify3A() = 0;
21346910bdc57c35ac36bd4adcbb76f4f3a590e3f21Eino-Ville Talvala
21446910bdc57c35ac36bd4adcbb76f4f3a590e3f21Eino-Ville Talvala    /**
2157fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * Wait for a new frame to be produced, with timeout in nanoseconds.
2167fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * Returns TIMED_OUT when no frame produced within the specified duration
217f1e98d857ec377f2c9b916073d40732e6ebb7cedEino-Ville Talvala     * May be called concurrently to most methods, except for getNextFrame
2187fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     */
2197fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    virtual status_t waitForNextFrame(nsecs_t timeout) = 0;
2207fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
2217fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    /**
222cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei     * Get next capture result frame from the result queue. Returns NOT_ENOUGH_DATA
223cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei     * if the queue is empty; caller takes ownership of the metadata buffer inside
224cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei     * the capture result object's metadata field.
225cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei     * May be called concurrently to most methods, except for waitForNextFrame.
2267fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     */
227cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei    virtual status_t getNextResult(CaptureResult *frame) = 0;
2287fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
2297fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    /**
2307fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * Trigger auto-focus. The latest ID used in a trigger autofocus or cancel
2317fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * autofocus call will be returned by the HAL in all subsequent AF
2327fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * notifications.
2337fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     */
2347fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    virtual status_t triggerAutofocus(uint32_t id) = 0;
2357fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
2367fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    /**
2377fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * Cancel auto-focus. The latest ID used in a trigger autofocus/cancel
2387fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * autofocus call will be returned by the HAL in all subsequent AF
2397fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * notifications.
2407fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     */
2417fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    virtual status_t triggerCancelAutofocus(uint32_t id) = 0;
2427fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
2437fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    /**
2447fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * Trigger pre-capture metering. The latest ID used in a trigger pre-capture
2457fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * call will be returned by the HAL in all subsequent AE and AWB
2467fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * notifications.
2477fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     */
2487fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    virtual status_t triggerPrecaptureMetering(uint32_t id) = 0;
2497fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
2507fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    /**
2517fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * Abstract interface for clients that want to listen to reprocess buffer
2527fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * release events
2537fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     */
2547fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    struct BufferReleasedListener : public virtual RefBase {
2557fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala        virtual void onBufferReleased(buffer_handle_t *handle) = 0;
2567fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    };
2577fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
2587fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    /**
2597fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * Push a buffer to be reprocessed into a reprocessing stream, and
2607fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * provide a listener to call once the buffer is returned by the HAL
2617fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     */
2627fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    virtual status_t pushReprocessBuffer(int reprocessStreamId,
2637fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala            buffer_handle_t *buffer, wp<BufferReleasedListener> listener) = 0;
264abaa51d3ca31f0eda99e1d271e6dc64c877dbf58Eino-Ville Talvala
265abaa51d3ca31f0eda99e1d271e6dc64c877dbf58Eino-Ville Talvala    /**
266abaa51d3ca31f0eda99e1d271e6dc64c877dbf58Eino-Ville Talvala     * Flush all pending and in-flight requests. Blocks until flush is
267abaa51d3ca31f0eda99e1d271e6dc64c877dbf58Eino-Ville Talvala     * complete.
268cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei     * Output lastFrameNumber is the last frame number of the previous streaming request.
269abaa51d3ca31f0eda99e1d271e6dc64c877dbf58Eino-Ville Talvala     */
270cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei    virtual status_t flush(int64_t *lastFrameNumber = NULL) = 0;
271abaa51d3ca31f0eda99e1d271e6dc64c877dbf58Eino-Ville Talvala
272204e3295e2814052aef7e45ee9edd60128efbbd0Zhijun He    /**
273204e3295e2814052aef7e45ee9edd60128efbbd0Zhijun He     * Get the HAL device version.
274204e3295e2814052aef7e45ee9edd60128efbbd0Zhijun He     */
275204e3295e2814052aef7e45ee9edd60128efbbd0Zhijun He    virtual uint32_t getDeviceVersion() = 0;
2767fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala};
2777fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
2787fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala}; // namespace android
2797fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
2807fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala#endif
281