1177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala/*
2177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala * Copyright (C) 2012 The Android Open Source Project
3177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala *
4177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala * Licensed under the Apache License, Version 2.0 (the "License");
5177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala * you may not use this file except in compliance with the License.
6177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala * You may obtain a copy of the License at
7177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala *
8177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala *      http://www.apache.org/licenses/LICENSE-2.0
9177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala *
10177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala * Unless required by applicable law or agreed to in writing, software
11177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala * distributed under the License is distributed on an "AS IS" BASIS,
12177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala * See the License for the specific language governing permissions and
14177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala * limitations under the License.
15177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala */
16177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala
1769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala#ifndef ANDROID_SERVERS_CAMERA_CAMERA2_JPEGPROCESSOR_H
1869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala#define ANDROID_SERVERS_CAMERA_CAMERA2_JPEGPROCESSOR_H
19177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala
20177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala#include <utils/Thread.h>
21177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala#include <utils/String16.h>
22177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala#include <utils/Vector.h>
23177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala#include <utils/Mutex.h>
24177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala#include <utils/Condition.h>
25177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala#include <gui/CpuConsumer.h>
26177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala#include "Parameters.h"
27bd02dd1bf1f34eb4e100d0d058f1fe5a2790d67eIgor Murashkin#include "camera/CameraMetadata.h"
28177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala
29177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvalanamespace android {
30177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala
31177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvalaclass Camera2Client;
3202f8457cf788e09e4f0c302dda453f13293009e7Eino-Ville Talvalaclass CameraDeviceBase;
3343cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvalaclass MemoryHeapBase;
34177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala
35177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvalanamespace camera2 {
36177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala
3769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvalaclass CaptureSequencer;
3869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala
39177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala/***
40177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala * Still image capture output image processing
41177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala */
4269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvalaclass JpegProcessor:
43177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala            public Thread, public CpuConsumer::FrameAvailableListener {
44177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala  public:
4502f8457cf788e09e4f0c302dda453f13293009e7Eino-Ville Talvala    JpegProcessor(sp<Camera2Client> client, wp<CaptureSequencer> sequencer);
4669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala    ~JpegProcessor();
47177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala
484d2f2e8414df33337d4f09e5235719dfcc705674Igor Murashkin    // CpuConsumer listener implementation
49177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala    void onFrameAvailable();
50177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala
51177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala    status_t updateStream(const Parameters &params);
52177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala    status_t deleteStream();
53177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala    int getStreamId() const;
54177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala
5569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala    void dump(int fd, const Vector<String16>& args) const;
56177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala  private:
57177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala    static const nsecs_t kWaitDuration = 10000000; // 10 ms
5802f8457cf788e09e4f0c302dda453f13293009e7Eino-Ville Talvala    wp<CameraDeviceBase> mDevice;
5969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala    wp<CaptureSequencer> mSequencer;
6002f8457cf788e09e4f0c302dda453f13293009e7Eino-Ville Talvala    int mId;
61177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala
62177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala    mutable Mutex mInputMutex;
63177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala    bool mCaptureAvailable;
64177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala    Condition mCaptureAvailableSignal;
65177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala
66177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala    enum {
67177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala        NO_STREAM = -1
68177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala    };
69177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala
70177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala    int mCaptureStreamId;
71177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala    sp<CpuConsumer>    mCaptureConsumer;
72177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala    sp<ANativeWindow>  mCaptureWindow;
7312c5d13c644cef1774cec2aafcbfeb4b205ba70fAlex Ray    sp<MemoryHeapBase>    mCaptureHeap;
74177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala
75177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala    virtual bool threadLoop();
76177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala
7702f8457cf788e09e4f0c302dda453f13293009e7Eino-Ville Talvala    status_t processNewCapture();
786751c093886112f4774bc3de514268e7b85ea417Alex Ray    size_t findJpegSize(uint8_t* jpegBuffer, size_t maxSize);
79177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala
80177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala};
81177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala
82177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala
83177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala}; //namespace camera2
84177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala}; //namespace android
85177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala
86177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala#endif
87