12863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala/*
22863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala * Copyright (C) 2012 The Android Open Source Project
32863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala *
42863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala * Licensed under the Apache License, Version 2.0 (the "License");
52863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala * you may not use this file except in compliance with the License.
62863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala * You may obtain a copy of the License at
72863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala *
82863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala *      http://www.apache.org/licenses/LICENSE-2.0
92863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala *
102863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala * Unless required by applicable law or agreed to in writing, software
112863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala * distributed under the License is distributed on an "AS IS" BASIS,
122863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala * See the License for the specific language governing permissions and
142863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala * limitations under the License.
152863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala */
162863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala
172863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala#ifndef ANDROID_SERVERS_CAMERA_CAMERA2_CALLBACKPROCESSOR_H
182863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala#define ANDROID_SERVERS_CAMERA_CAMERA2_CALLBACKPROCESSOR_H
192863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala
202863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala#include <utils/Thread.h>
212863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala#include <utils/String16.h>
222863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala#include <utils/Vector.h>
232863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala#include <utils/Mutex.h>
242863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala#include <utils/Condition.h>
252863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala#include <gui/CpuConsumer.h>
262863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala#include "Parameters.h"
27bd02dd1bf1f34eb4e100d0d058f1fe5a2790d67eIgor Murashkin#include "camera/CameraMetadata.h"
282863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala#include "Camera2Heap.h"
292863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala
302863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvalanamespace android {
312863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala
322863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvalaclass Camera2Client;
3302f8457cf788e09e4f0c302dda453f13293009e7Eino-Ville Talvalaclass CameraDeviceBase;
342863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala
352863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvalanamespace camera2 {
362863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala
372863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala/***
382863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala * Still image capture output image processing
392863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala */
402863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvalaclass CallbackProcessor:
412863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala            public Thread, public CpuConsumer::FrameAvailableListener {
422863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala  public:
4302f8457cf788e09e4f0c302dda453f13293009e7Eino-Ville Talvala    CallbackProcessor(sp<Camera2Client> client);
442863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala    ~CallbackProcessor();
452863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala
462863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala    void onFrameAvailable();
472863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala
482863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala    status_t updateStream(const Parameters &params);
492863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala    status_t deleteStream();
502863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala    int getStreamId() const;
512863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala
5269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala    void dump(int fd, const Vector<String16>& args) const;
532863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala  private:
542863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala    static const nsecs_t kWaitDuration = 10000000; // 10 ms
552863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala    wp<Camera2Client> mClient;
5602f8457cf788e09e4f0c302dda453f13293009e7Eino-Ville Talvala    wp<CameraDeviceBase> mDevice;
5702f8457cf788e09e4f0c302dda453f13293009e7Eino-Ville Talvala    int mId;
582863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala
592863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala    mutable Mutex mInputMutex;
602863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala    bool mCallbackAvailable;
612863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala    Condition mCallbackAvailableSignal;
622863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala
632863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala    enum {
642863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala        NO_STREAM = -1
652863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala    };
662863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala
672863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala    int mCallbackStreamId;
682863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala    static const size_t kCallbackHeapCount = 6;
692863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala    sp<CpuConsumer>    mCallbackConsumer;
702863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala    sp<ANativeWindow>  mCallbackWindow;
712863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala    sp<Camera2Heap>    mCallbackHeap;
722863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala    int mCallbackHeapId;
732863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala    size_t mCallbackHeapHead, mCallbackHeapFree;
742863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala
752863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala    virtual bool threadLoop();
762863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala
772863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala    status_t processNewCallback(sp<Camera2Client> &client);
7802f8457cf788e09e4f0c302dda453f13293009e7Eino-Ville Talvala    // Used when shutting down
7902f8457cf788e09e4f0c302dda453f13293009e7Eino-Ville Talvala    status_t discardNewCallback();
8092086e6d402dcad6e199325ef097d7707b3d1f83Eino-Ville Talvala
8192086e6d402dcad6e199325ef097d7707b3d1f83Eino-Ville Talvala    // Convert from flexible YUV to NV21 or YV12
8292086e6d402dcad6e199325ef097d7707b3d1f83Eino-Ville Talvala    status_t convertFromFlexibleYuv(int32_t previewFormat,
8392086e6d402dcad6e199325ef097d7707b3d1f83Eino-Ville Talvala            uint8_t *dst,
8492086e6d402dcad6e199325ef097d7707b3d1f83Eino-Ville Talvala            const CpuConsumer::LockedBuffer &src,
8592086e6d402dcad6e199325ef097d7707b3d1f83Eino-Ville Talvala            uint32_t dstYStride,
8692086e6d402dcad6e199325ef097d7707b3d1f83Eino-Ville Talvala            uint32_t dstCStride) const;
872863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala};
882863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala
892863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala
902863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala}; //namespace camera2
912863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala}; //namespace android
922863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala
932863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala#endif
94