1c3dbf1a40df85b75e5805382838a90416f69730fJames Painter/*
2c3dbf1a40df85b75e5805382838a90416f69730fJames Painter * Copyright (C) 2012 The Android Open Source Project
3c3dbf1a40df85b75e5805382838a90416f69730fJames Painter *
4c3dbf1a40df85b75e5805382838a90416f69730fJames Painter * Licensed under the Apache License, Version 2.0 (the "License");
5c3dbf1a40df85b75e5805382838a90416f69730fJames Painter * you may not use this file except in compliance with the License.
6c3dbf1a40df85b75e5805382838a90416f69730fJames Painter * You may obtain a copy of the License at
7c3dbf1a40df85b75e5805382838a90416f69730fJames Painter *
8c3dbf1a40df85b75e5805382838a90416f69730fJames Painter *      http://www.apache.org/licenses/LICENSE-2.0
9c3dbf1a40df85b75e5805382838a90416f69730fJames Painter *
10c3dbf1a40df85b75e5805382838a90416f69730fJames Painter * Unless required by applicable law or agreed to in writing, software
11c3dbf1a40df85b75e5805382838a90416f69730fJames Painter * distributed under the License is distributed on an "AS IS" BASIS,
12c3dbf1a40df85b75e5805382838a90416f69730fJames Painter * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c3dbf1a40df85b75e5805382838a90416f69730fJames Painter * See the License for the specific language governing permissions and
14c3dbf1a40df85b75e5805382838a90416f69730fJames Painter * limitations under the License.
15c3dbf1a40df85b75e5805382838a90416f69730fJames Painter */
16c3dbf1a40df85b75e5805382838a90416f69730fJames Painter
17c3dbf1a40df85b75e5805382838a90416f69730fJames Painter#ifndef ANDROID_SERVERS_CAMERA_BURST_CAPTURE_H
18c3dbf1a40df85b75e5805382838a90416f69730fJames Painter#define ANDROID_SERVERS_CAMERA_BURST_CAPTURE_H
19c3dbf1a40df85b75e5805382838a90416f69730fJames Painter
20bd02dd1bf1f34eb4e100d0d058f1fe5a2790d67eIgor Murashkin#include "camera/CameraMetadata.h"
21c3dbf1a40df85b75e5805382838a90416f69730fJames Painter#include <binder/MemoryBase.h>
22c3dbf1a40df85b75e5805382838a90416f69730fJames Painter#include <binder/MemoryHeapBase.h>
23c3dbf1a40df85b75e5805382838a90416f69730fJames Painter#include <gui/CpuConsumer.h>
24c3dbf1a40df85b75e5805382838a90416f69730fJames Painter#include "Camera2Device.h"
25c3dbf1a40df85b75e5805382838a90416f69730fJames Painter
26c3dbf1a40df85b75e5805382838a90416f69730fJames Painternamespace android {
27c3dbf1a40df85b75e5805382838a90416f69730fJames Painter
28c3dbf1a40df85b75e5805382838a90416f69730fJames Painterclass Camera2Client;
29c3dbf1a40df85b75e5805382838a90416f69730fJames Painter
30c3dbf1a40df85b75e5805382838a90416f69730fJames Painternamespace camera2 {
31c3dbf1a40df85b75e5805382838a90416f69730fJames Painter
32c3dbf1a40df85b75e5805382838a90416f69730fJames Painterclass CaptureSequencer;
33c3dbf1a40df85b75e5805382838a90416f69730fJames Painter
34c3dbf1a40df85b75e5805382838a90416f69730fJames Painterclass BurstCapture : public virtual Thread,
35c3dbf1a40df85b75e5805382838a90416f69730fJames Painter                     public virtual CpuConsumer::FrameAvailableListener
36c3dbf1a40df85b75e5805382838a90416f69730fJames Painter{
37c3dbf1a40df85b75e5805382838a90416f69730fJames Painterpublic:
38c3dbf1a40df85b75e5805382838a90416f69730fJames Painter    BurstCapture(wp<Camera2Client> client, wp<CaptureSequencer> sequencer);
39c3dbf1a40df85b75e5805382838a90416f69730fJames Painter    virtual ~BurstCapture();
40c3dbf1a40df85b75e5805382838a90416f69730fJames Painter
41c3dbf1a40df85b75e5805382838a90416f69730fJames Painter    virtual void onFrameAvailable();
42c3dbf1a40df85b75e5805382838a90416f69730fJames Painter    virtual status_t start(Vector<CameraMetadata> &metadatas, int32_t firstCaptureId);
43c3dbf1a40df85b75e5805382838a90416f69730fJames Painter
44c3dbf1a40df85b75e5805382838a90416f69730fJames Painterprotected:
45c3dbf1a40df85b75e5805382838a90416f69730fJames Painter    Mutex mInputMutex;
46c3dbf1a40df85b75e5805382838a90416f69730fJames Painter    bool mInputChanged;
47c3dbf1a40df85b75e5805382838a90416f69730fJames Painter    Condition mInputSignal;
48c3dbf1a40df85b75e5805382838a90416f69730fJames Painter    int mCaptureStreamId;
49c3dbf1a40df85b75e5805382838a90416f69730fJames Painter    wp<Camera2Client> mClient;
50c3dbf1a40df85b75e5805382838a90416f69730fJames Painter    wp<CaptureSequencer> mSequencer;
51c3dbf1a40df85b75e5805382838a90416f69730fJames Painter
52c3dbf1a40df85b75e5805382838a90416f69730fJames Painter    // Should only be accessed by processing thread
53c3dbf1a40df85b75e5805382838a90416f69730fJames Painter    enum {
54c3dbf1a40df85b75e5805382838a90416f69730fJames Painter        NO_STREAM = -1
55c3dbf1a40df85b75e5805382838a90416f69730fJames Painter    };
56c3dbf1a40df85b75e5805382838a90416f69730fJames Painter
57c3dbf1a40df85b75e5805382838a90416f69730fJames Painter    CpuConsumer::LockedBuffer* jpegEncode(
58c3dbf1a40df85b75e5805382838a90416f69730fJames Painter        CpuConsumer::LockedBuffer *imgBuffer,
59c3dbf1a40df85b75e5805382838a90416f69730fJames Painter        int quality);
60c3dbf1a40df85b75e5805382838a90416f69730fJames Painter
61c3dbf1a40df85b75e5805382838a90416f69730fJames Painter    virtual status_t processFrameAvailable(sp<Camera2Client> &client);
62c3dbf1a40df85b75e5805382838a90416f69730fJames Painter
63c3dbf1a40df85b75e5805382838a90416f69730fJames Painterprivate:
64c3dbf1a40df85b75e5805382838a90416f69730fJames Painter    virtual bool threadLoop();
65c3dbf1a40df85b75e5805382838a90416f69730fJames Painter    static const nsecs_t kWaitDuration = 10000000; // 10 ms
66c3dbf1a40df85b75e5805382838a90416f69730fJames Painter};
67c3dbf1a40df85b75e5805382838a90416f69730fJames Painter
68c3dbf1a40df85b75e5805382838a90416f69730fJames Painter} // namespace camera2
69c3dbf1a40df85b75e5805382838a90416f69730fJames Painter} // namespace android
70c3dbf1a40df85b75e5805382838a90416f69730fJames Painter
71c3dbf1a40df85b75e5805382838a90416f69730fJames Painter#endif
72