1d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala/*
2d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala * Copyright (C) 2012 The Android Open Source Project
3d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala *
4d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala * Licensed under the Apache License, Version 2.0 (the "License");
5d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala * you may not use this file except in compliance with the License.
6d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala * You may obtain a copy of the License at
7d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala *
8d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala *      http://www.apache.org/licenses/LICENSE-2.0
9d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala *
10d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala * Unless required by applicable law or agreed to in writing, software
11d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala * distributed under the License is distributed on an "AS IS" BASIS,
12d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala * See the License for the specific language governing permissions and
14d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala * limitations under the License.
15d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala */
16d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala
17d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala#ifndef ANDROID_SERVERS_CAMERA_CAMERA2_CALLBACKPROCESSOR_H
18d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala#define ANDROID_SERVERS_CAMERA_CAMERA2_CALLBACKPROCESSOR_H
19d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala
20d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala#include <utils/Thread.h>
21d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala#include <utils/String16.h>
22d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala#include <utils/Vector.h>
23d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala#include <utils/Mutex.h>
24d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala#include <utils/Condition.h>
25d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala#include <gui/CpuConsumer.h>
267b82efe7a376c882f8f938e1c41b8311a8cdda4aEino-Ville Talvala
277b82efe7a376c882f8f938e1c41b8311a8cdda4aEino-Ville Talvala#include "api1/client2/Camera2Heap.h"
28d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala
29d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvalanamespace android {
30d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala
31d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvalaclass Camera2Client;
32d09801b99503b57c35e321ad9afa7e861e012813Eino-Ville Talvalaclass CameraDeviceBase;
33d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala
34d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvalanamespace camera2 {
35d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala
36d309fb9c8a2c4564d88fffba19c4e3688e4b862bEino-Ville Talvalastruct Parameters;
377b82efe7a376c882f8f938e1c41b8311a8cdda4aEino-Ville Talvala
38d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala/***
39d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala * Still image capture output image processing
40d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala */
41d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvalaclass CallbackProcessor:
42d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala            public Thread, public CpuConsumer::FrameAvailableListener {
43d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala  public:
448b0b971b1416738f22488a80be726d1ec12552a8Chih-Hung Hsieh    explicit CallbackProcessor(sp<Camera2Client> client);
45d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala    ~CallbackProcessor();
46d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala
4704f101c35eaa90b1f95939afac30674ec1611e6fDan Stoza    void onFrameAvailable(const BufferItem& item);
48d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala
493ee3550a2f529cbf56d87d8503f59a8f45dccf32Eino-Ville Talvala    // Set to NULL to disable the direct-to-app callback window
508b0b971b1416738f22488a80be726d1ec12552a8Chih-Hung Hsieh    status_t setCallbackWindow(const sp<Surface>& callbackWindow);
51d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala    status_t updateStream(const Parameters &params);
52d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala    status_t deleteStream();
53d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala    int getStreamId() const;
54d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala
55da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala    void dump(int fd, const Vector<String16>& args) const;
56d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala  private:
57d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala    static const nsecs_t kWaitDuration = 10000000; // 10 ms
58d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala    wp<Camera2Client> mClient;
59d09801b99503b57c35e321ad9afa7e861e012813Eino-Ville Talvala    wp<CameraDeviceBase> mDevice;
60d09801b99503b57c35e321ad9afa7e861e012813Eino-Ville Talvala    int mId;
61d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala
62d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala    mutable Mutex mInputMutex;
63d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala    bool mCallbackAvailable;
64d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala    Condition mCallbackAvailableSignal;
65d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala
66d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala    enum {
67d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala        NO_STREAM = -1
68d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala    };
69d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala
703ee3550a2f529cbf56d87d8503f59a8f45dccf32Eino-Ville Talvala    // True if mCallbackWindow is a remote consumer, false if just the local
713ee3550a2f529cbf56d87d8503f59a8f45dccf32Eino-Ville Talvala    // mCallbackConsumer
723ee3550a2f529cbf56d87d8503f59a8f45dccf32Eino-Ville Talvala    bool mCallbackToApp;
73d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala    int mCallbackStreamId;
74d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala    static const size_t kCallbackHeapCount = 6;
75d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala    sp<CpuConsumer>    mCallbackConsumer;
76727d172137b4f32681c098de8e2623c0b65a6406Eino-Ville Talvala    sp<Surface>        mCallbackWindow;
77d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala    sp<Camera2Heap>    mCallbackHeap;
78d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala    size_t mCallbackHeapHead, mCallbackHeapFree;
79d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala
80d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala    virtual bool threadLoop();
81d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala
82d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala    status_t processNewCallback(sp<Camera2Client> &client);
83d09801b99503b57c35e321ad9afa7e861e012813Eino-Ville Talvala    // Used when shutting down
84d09801b99503b57c35e321ad9afa7e861e012813Eino-Ville Talvala    status_t discardNewCallback();
854a66ad403b21a256773c719ae39f7b5e705b244eEino-Ville Talvala
864a66ad403b21a256773c719ae39f7b5e705b244eEino-Ville Talvala    // Convert from flexible YUV to NV21 or YV12
874a66ad403b21a256773c719ae39f7b5e705b244eEino-Ville Talvala    status_t convertFromFlexibleYuv(int32_t previewFormat,
884a66ad403b21a256773c719ae39f7b5e705b244eEino-Ville Talvala            uint8_t *dst,
894a66ad403b21a256773c719ae39f7b5e705b244eEino-Ville Talvala            const CpuConsumer::LockedBuffer &src,
904a66ad403b21a256773c719ae39f7b5e705b244eEino-Ville Talvala            uint32_t dstYStride,
914a66ad403b21a256773c719ae39f7b5e705b244eEino-Ville Talvala            uint32_t dstCStride) const;
92d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala};
93d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala
94d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala
95d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala}; //namespace camera2
96d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala}; //namespace android
97d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala
98d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala#endif
99