JpegProcessor.h revision d09801b99503b57c35e321ad9afa7e861e012813
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>
26ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala#include "Parameters.h"
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;
38da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala
39ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala/***
40ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala * Still image capture output image processing
41ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala */
42da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvalaclass JpegProcessor:
43ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala            public Thread, public CpuConsumer::FrameAvailableListener {
44ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala  public:
45d09801b99503b57c35e321ad9afa7e861e012813Eino-Ville Talvala    JpegProcessor(sp<Camera2Client> client, wp<CaptureSequencer> sequencer);
46da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala    ~JpegProcessor();
47ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala
48b3a95a56f0adaf2b60ff164275487d1870442734Igor Murashkin    // CpuConsumer listener implementation
49ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala    void onFrameAvailable();
50ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala
51ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala    status_t updateStream(const Parameters &params);
52ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala    status_t deleteStream();
53ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala    int getStreamId() const;
54ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala
55da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala    void dump(int fd, const Vector<String16>& args) const;
56ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala  private:
57ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala    static const nsecs_t kWaitDuration = 10000000; // 10 ms
58d09801b99503b57c35e321ad9afa7e861e012813Eino-Ville Talvala    wp<CameraDeviceBase> mDevice;
59da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala    wp<CaptureSequencer> mSequencer;
60d09801b99503b57c35e321ad9afa7e861e012813Eino-Ville Talvala    int mId;
61ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala
62ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala    mutable Mutex mInputMutex;
63ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala    bool mCaptureAvailable;
64ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala    Condition mCaptureAvailableSignal;
65ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala
66ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala    enum {
67ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala        NO_STREAM = -1
68ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala    };
69ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala
70ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala    int mCaptureStreamId;
71ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala    sp<CpuConsumer>    mCaptureConsumer;
72ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala    sp<ANativeWindow>  mCaptureWindow;
73a6b4c40e70eafc5aba16163999de6d3e26667b89Alex Ray    sp<MemoryHeapBase>    mCaptureHeap;
74ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala
75ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala    virtual bool threadLoop();
76ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala
77d09801b99503b57c35e321ad9afa7e861e012813Eino-Ville Talvala    status_t processNewCapture();
780fa1e760f7093d025c977e5813e8d3a04c863ce3Alex Ray    size_t findJpegSize(uint8_t* jpegBuffer, size_t maxSize);
79ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala
80ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala};
81ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala
82ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala
83ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala}; //namespace camera2
84ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala}; //namespace android
85ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala
86ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala#endif
87