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>
257fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
267fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala#include "hardware/camera2.h"
277fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala#include "camera/CameraMetadata.h"
287fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
297fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvalanamespace android {
307fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
317fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala/**
327fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala * Base interface for version >= 2 camera device classes, which interface to
337fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala * camera HAL device versions >= 2.
347fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala */
357fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvalaclass CameraDeviceBase : public virtual RefBase {
367fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala  public:
377fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    virtual ~CameraDeviceBase();
387fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
3971381051e2d048b2705c447b3d59db6e972493eeIgor Murashkin    /**
4071381051e2d048b2705c447b3d59db6e972493eeIgor Murashkin     * The device's camera ID
4171381051e2d048b2705c447b3d59db6e972493eeIgor Murashkin     */
4271381051e2d048b2705c447b3d59db6e972493eeIgor Murashkin    virtual int      getId() const = 0;
4371381051e2d048b2705c447b3d59db6e972493eeIgor Murashkin
447fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    virtual status_t initialize(camera_module_t *module) = 0;
457fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    virtual status_t disconnect() = 0;
467fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
477fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    virtual status_t dump(int fd, const Vector<String16>& args) = 0;
487fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
497fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    /**
507fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * The device's static characteristics metadata buffer
517fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     */
527fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    virtual const CameraMetadata& info() const = 0;
537fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
547fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    /**
557fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * Submit request for capture. The CameraDevice takes ownership of the
567fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * passed-in buffer.
577fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     */
587fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    virtual status_t capture(CameraMetadata &request) = 0;
597fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
607fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    /**
617fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * Submit request for streaming. The CameraDevice makes a copy of the
627fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * passed-in buffer and the caller retains ownership.
637fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     */
647fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    virtual status_t setStreamingRequest(const CameraMetadata &request) = 0;
657fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
667fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    /**
677fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * Clear the streaming request slot.
687fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     */
697fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    virtual status_t clearStreamingRequest() = 0;
707fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
717fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    /**
727fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * Wait until a request with the given ID has been dequeued by the
737fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * HAL. Returns TIMED_OUT if the timeout duration is reached. Returns
747fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * immediately if the latest request received by the HAL has this id.
757fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     */
767fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    virtual status_t waitUntilRequestReceived(int32_t requestId,
777fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala            nsecs_t timeout) = 0;
787fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
797fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    /**
807fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * Create an output stream of the requested size and format.
817fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     *
827fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * If format is CAMERA2_HAL_PIXEL_FORMAT_OPAQUE, then the HAL device selects
837fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * an appropriate format; it can be queried with getStreamInfo.
847fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     *
857fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * If format is HAL_PIXEL_FORMAT_COMPRESSED, the size parameter must be
867fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * equal to the size in bytes of the buffers to allocate for the stream. For
877fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * other formats, the size parameter is ignored.
887fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     */
897fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    virtual status_t createStream(sp<ANativeWindow> consumer,
907fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala            uint32_t width, uint32_t height, int format, size_t size,
917fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala            int *id) = 0;
927fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
937fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    /**
947fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * Create an input reprocess stream that uses buffers from an existing
957fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * output stream.
967fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     */
977fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    virtual status_t createReprocessStreamFromStream(int outputId, int *id) = 0;
987fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
997fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    /**
1007fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * Get information about a given stream.
1017fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     */
1027fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    virtual status_t getStreamInfo(int id,
1037fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala            uint32_t *width, uint32_t *height, uint32_t *format) = 0;
1047fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
1057fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    /**
1067fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * Set stream gralloc buffer transform
1077fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     */
1087fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    virtual status_t setStreamTransform(int id, int transform) = 0;
1097fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
1107fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    /**
1117fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * Delete stream. Must not be called if there are requests in flight which
1127fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * reference that stream.
1137fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     */
1147fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    virtual status_t deleteStream(int id) = 0;
1157fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
1167fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    /**
1177fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * Delete reprocess stream. Must not be called if there are requests in
1187fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * flight which reference that stream.
1197fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     */
1207fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    virtual status_t deleteReprocessStream(int id) = 0;
1217fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
1227fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    /**
1237fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * Create a metadata buffer with fields that the HAL device believes are
1247fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * best for the given use case
1257fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     */
1267fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    virtual status_t createDefaultRequest(int templateId,
1277fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala            CameraMetadata *request) = 0;
1287fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
1297fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    /**
1307fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * Wait until all requests have been processed. Returns INVALID_OPERATION if
1317fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * the streaming slot is not empty, or TIMED_OUT if the requests haven't
1327fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * finished processing in 10 seconds.
1337fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     */
1347fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    virtual status_t waitUntilDrained() = 0;
1357fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
1367fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    /**
1377fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * Abstract class for HAL notification listeners
1387fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     */
1397fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    class NotificationListener {
1407fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala      public:
1417fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala        // Refer to the Camera2 HAL definition for notification definitions
1427fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala        virtual void notifyError(int errorCode, int arg1, int arg2) = 0;
1437fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala        virtual void notifyShutter(int frameNumber, nsecs_t timestamp) = 0;
1447fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala        virtual void notifyAutoFocus(uint8_t newState, int triggerId) = 0;
1457fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala        virtual void notifyAutoExposure(uint8_t newState, int triggerId) = 0;
1467fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala        virtual void notifyAutoWhitebalance(uint8_t newState,
1477fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala                int triggerId) = 0;
1487fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala      protected:
1497fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala        virtual ~NotificationListener();
1507fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    };
1517fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
1527fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    /**
1537fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * Connect HAL notifications to a listener. Overwrites previous
1547fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * listener. Set to NULL to stop receiving notifications.
1557fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     */
1567fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    virtual status_t setNotifyCallback(NotificationListener *listener) = 0;
1577fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
1587fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    /**
159a0e0adee5fbea1457996b0ac6a4c15bea4c1acb0Eino-Ville Talvala     * Whether the device supports calling notifyAutofocus, notifyAutoExposure,
160a0e0adee5fbea1457996b0ac6a4c15bea4c1acb0Eino-Ville Talvala     * and notifyAutoWhitebalance; if this returns false, the client must
161a0e0adee5fbea1457996b0ac6a4c15bea4c1acb0Eino-Ville Talvala     * synthesize these notifications from received frame metadata.
162a0e0adee5fbea1457996b0ac6a4c15bea4c1acb0Eino-Ville Talvala     */
163a0e0adee5fbea1457996b0ac6a4c15bea4c1acb0Eino-Ville Talvala    virtual bool     willNotify3A() = 0;
164a0e0adee5fbea1457996b0ac6a4c15bea4c1acb0Eino-Ville Talvala
165a0e0adee5fbea1457996b0ac6a4c15bea4c1acb0Eino-Ville Talvala    /**
1667fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * Wait for a new frame to be produced, with timeout in nanoseconds.
1677fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * Returns TIMED_OUT when no frame produced within the specified duration
1687fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     */
1697fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    virtual status_t waitForNextFrame(nsecs_t timeout) = 0;
1707fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
1717fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    /**
1727fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * Get next metadata frame from the frame queue. Returns NULL if the queue
1737fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * is empty; caller takes ownership of the metadata buffer.
1747fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     */
1757fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    virtual status_t getNextFrame(CameraMetadata *frame) = 0;
1767fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
1777fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    /**
1787fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * Trigger auto-focus. The latest ID used in a trigger autofocus or cancel
1797fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * autofocus call will be returned by the HAL in all subsequent AF
1807fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * notifications.
1817fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     */
1827fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    virtual status_t triggerAutofocus(uint32_t id) = 0;
1837fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
1847fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    /**
1857fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * Cancel auto-focus. The latest ID used in a trigger autofocus/cancel
1867fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * autofocus call will be returned by the HAL in all subsequent AF
1877fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * notifications.
1887fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     */
1897fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    virtual status_t triggerCancelAutofocus(uint32_t id) = 0;
1907fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
1917fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    /**
1927fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * Trigger pre-capture metering. The latest ID used in a trigger pre-capture
1937fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * call will be returned by the HAL in all subsequent AE and AWB
1947fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * notifications.
1957fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     */
1967fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    virtual status_t triggerPrecaptureMetering(uint32_t id) = 0;
1977fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
1987fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    /**
1997fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * Abstract interface for clients that want to listen to reprocess buffer
2007fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * release events
2017fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     */
2027fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    struct BufferReleasedListener : public virtual RefBase {
2037fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala        virtual void onBufferReleased(buffer_handle_t *handle) = 0;
2047fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    };
2057fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
2067fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    /**
2077fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * Push a buffer to be reprocessed into a reprocessing stream, and
2087fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     * provide a listener to call once the buffer is returned by the HAL
2097fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala     */
2107fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala    virtual status_t pushReprocessBuffer(int reprocessStreamId,
2117fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala            buffer_handle_t *buffer, wp<BufferReleasedListener> listener) = 0;
2127fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala};
2137fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
2147fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala}; // namespace android
2157fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala
2167fa43f376ebd63fda24d85c9ebf97e0ddf534083Eino-Ville Talvala#endif
217