1ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala/*
2ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala * Copyright (C) 2012 The Android Open Source Project
3ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala *
4ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala * Licensed under the Apache License, Version 2.0 (the "License");
5ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala * you may not use this file except in compliance with the License.
6ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala * You may obtain a copy of the License at
7ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala *
8ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala *      http://www.apache.org/licenses/LICENSE-2.0
9ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala *
10ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala * Unless required by applicable law or agreed to in writing, software
11ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala * distributed under the License is distributed on an "AS IS" BASIS,
12ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala * See the License for the specific language governing permissions and
14ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala * limitations under the License.
15ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala */
16ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala
17da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala#ifndef ANDROID_SERVERS_CAMERA_CAMERA2_JPEGPROCESSOR_H
18da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala#define ANDROID_SERVERS_CAMERA_CAMERA2_JPEGPROCESSOR_H
19ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala
20ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala#include <utils/Thread.h>
21ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala#include <utils/String16.h>
22ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala#include <utils/Vector.h>
23ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala#include <utils/Mutex.h>
24ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala#include <utils/Condition.h>
25ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala#include <gui/CpuConsumer.h>
267b82efe7a376c882f8f938e1c41b8311a8cdda4aEino-Ville Talvala
277efa520c76e6a1f6b3146404cc6aca5a8353583aIgor Murashkin#include "camera/CameraMetadata.h"
28ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala
29ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvalanamespace android {
30ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala
31ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvalaclass Camera2Client;
32d09801b99503b57c35e321ad9afa7e861e012813Eino-Ville Talvalaclass CameraDeviceBase;
3373bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvalaclass MemoryHeapBase;
34ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala
35ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvalanamespace camera2 {
36ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala
37da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvalaclass CaptureSequencer;
38d309fb9c8a2c4564d88fffba19c4e3688e4b862bEino-Ville Talvalastruct Parameters;
39da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala
40ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala/***
41ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala * Still image capture output image processing
42ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala */
43da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvalaclass JpegProcessor:
44b0fdc1ed2182fe851ef7ca98a1b4a552b53b3033Shuzhen Wang            public Thread, public CpuConsumer::FrameAvailableListener,
45b0fdc1ed2182fe851ef7ca98a1b4a552b53b3033Shuzhen Wang            public camera3::Camera3StreamBufferListener {
46ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala  public:
47d09801b99503b57c35e321ad9afa7e861e012813Eino-Ville Talvala    JpegProcessor(sp<Camera2Client> client, wp<CaptureSequencer> sequencer);
48da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala    ~JpegProcessor();
49ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala
50b3a95a56f0adaf2b60ff164275487d1870442734Igor Murashkin    // CpuConsumer listener implementation
5104f101c35eaa90b1f95939afac30674ec1611e6fDan Stoza    void onFrameAvailable(const BufferItem& item);
52ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala
53b0fdc1ed2182fe851ef7ca98a1b4a552b53b3033Shuzhen Wang    // Camera3StreamBufferListener implementation
54b0fdc1ed2182fe851ef7ca98a1b4a552b53b3033Shuzhen Wang    void onBufferAcquired(const BufferInfo& bufferInfo) override;
55b0fdc1ed2182fe851ef7ca98a1b4a552b53b3033Shuzhen Wang    void onBufferReleased(const BufferInfo& bufferInfo) override;
56b0fdc1ed2182fe851ef7ca98a1b4a552b53b3033Shuzhen Wang
57ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala    status_t updateStream(const Parameters &params);
58ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala    status_t deleteStream();
59ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala    int getStreamId() const;
60ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala
61da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala    void dump(int fd, const Vector<String16>& args) const;
62ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala  private:
63ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala    static const nsecs_t kWaitDuration = 10000000; // 10 ms
64d09801b99503b57c35e321ad9afa7e861e012813Eino-Ville Talvala    wp<CameraDeviceBase> mDevice;
65da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala    wp<CaptureSequencer> mSequencer;
66d09801b99503b57c35e321ad9afa7e861e012813Eino-Ville Talvala    int mId;
67ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala
68ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala    mutable Mutex mInputMutex;
69b0fdc1ed2182fe851ef7ca98a1b4a552b53b3033Shuzhen Wang    bool mCaptureDone;
70b0fdc1ed2182fe851ef7ca98a1b4a552b53b3033Shuzhen Wang    bool mCaptureSuccess;
71b0fdc1ed2182fe851ef7ca98a1b4a552b53b3033Shuzhen Wang    Condition mCaptureDoneSignal;
72ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala
73ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala    enum {
74ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala        NO_STREAM = -1
75ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala    };
76ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala
77ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala    int mCaptureStreamId;
78ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala    sp<CpuConsumer>    mCaptureConsumer;
79727d172137b4f32681c098de8e2623c0b65a6406Eino-Ville Talvala    sp<Surface>        mCaptureWindow;
80727d172137b4f32681c098de8e2623c0b65a6406Eino-Ville Talvala    sp<MemoryHeapBase> mCaptureHeap;
81ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala
82ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala    virtual bool threadLoop();
83ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala
84b0fdc1ed2182fe851ef7ca98a1b4a552b53b3033Shuzhen Wang    status_t processNewCapture(bool captureSuccess);
850fa1e760f7093d025c977e5813e8d3a04c863ce3Alex Ray    size_t findJpegSize(uint8_t* jpegBuffer, size_t maxSize);
86ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala
87ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala};
88ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala
89ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala
90ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala}; //namespace camera2
91ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala}; //namespace android
92ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala
93ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala#endif
94