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