blob: 9b66a76ba8318ec266b8aced3accc36c0ed3f3c2 [file] [log] [blame]
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001/*
2**
3** Copyright 2008, The Android Open Source Project
4**
5** Licensed under the Apache License, Version 2.0 (the "License");
6** you may not use this file except in compliance with the License.
7** You may obtain a copy of the License at
8**
9** http://www.apache.org/licenses/LICENSE-2.0
10**
11** Unless required by applicable law or agreed to in writing, software
12** distributed under the License is distributed on an "AS IS" BASIS,
13** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14** See the License for the specific language governing permissions and
15** limitations under the License.
16*/
17
18#ifndef ANDROID_HARDWARE_CAMERA_HARDWARE_STUB_H
19#define ANDROID_HARDWARE_CAMERA_HARDWARE_STUB_H
20
21#include "FakeCamera.h"
22#include <utils/threads.h>
Mathias Agopian000479f2010-02-09 17:46:37 -080023#include <camera/CameraHardwareInterface.h>
Mathias Agopian07952722009-05-19 19:08:10 -070024#include <binder/MemoryBase.h>
25#include <binder/MemoryHeapBase.h>
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080026#include <utils/threads.h>
27
28namespace android {
29
30class CameraHardwareStub : public CameraHardwareInterface {
31public:
Jamie Gennisc8536d192010-08-23 17:23:08 -070032 virtual status_t setPreviewWindow(const sp<ANativeWindow>& buf);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080033 virtual sp<IMemoryHeap> getRawHeap() const;
34
Benny Wongda83f462009-08-12 12:01:27 -050035 virtual void setCallbacks(notify_callback notify_cb,
36 data_callback data_cb,
37 data_callback_timestamp data_cb_timestamp,
38 void* user);
39
40 virtual void enableMsgType(int32_t msgType);
41 virtual void disableMsgType(int32_t msgType);
42 virtual bool msgTypeEnabled(int32_t msgType);
43
44 virtual status_t startPreview();
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080045 virtual void stopPreview();
46 virtual bool previewEnabled();
47
Benny Wongda83f462009-08-12 12:01:27 -050048 virtual status_t startRecording();
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080049 virtual void stopRecording();
50 virtual bool recordingEnabled();
51 virtual void releaseRecordingFrame(const sp<IMemory>& mem);
52
Benny Wongda83f462009-08-12 12:01:27 -050053 virtual status_t autoFocus();
Chih-Chung Chang244f8c22009-09-15 14:51:56 +080054 virtual status_t cancelAutoFocus();
Benny Wongda83f462009-08-12 12:01:27 -050055 virtual status_t takePicture();
56 virtual status_t cancelPicture();
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080057 virtual status_t dump(int fd, const Vector<String16>& args) const;
58 virtual status_t setParameters(const CameraParameters& params);
59 virtual CameraParameters getParameters() const;
Wu-cheng Li36f68b82009-09-28 16:14:58 -070060 virtual status_t sendCommand(int32_t command, int32_t arg1,
61 int32_t arg2);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080062 virtual void release();
63
64 static sp<CameraHardwareInterface> createInstance();
65
66private:
67 CameraHardwareStub();
68 virtual ~CameraHardwareStub();
69
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080070 static const int kBufferCount = 4;
71
72 class PreviewThread : public Thread {
73 CameraHardwareStub* mHardware;
74 public:
Marco Nelissenae7f3c52009-08-13 09:24:47 -070075 PreviewThread(CameraHardwareStub* hw) :
76#ifdef SINGLE_PROCESS
77 // In single process mode this thread needs to be a java thread,
78 // since we won't be calling through the binder.
79 Thread(true),
80#else
81 Thread(false),
82#endif
83 mHardware(hw) { }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080084 virtual void onFirstRef() {
85 run("CameraPreviewThread", PRIORITY_URGENT_DISPLAY);
86 }
87 virtual bool threadLoop() {
88 mHardware->previewThread();
89 // loop until we need to quit
90 return true;
91 }
92 };
93
94 void initDefaultParameters();
95 void initHeapLocked();
96
97 int previewThread();
98
99 static int beginAutoFocusThread(void *cookie);
100 int autoFocusThread();
101
102 static int beginPictureThread(void *cookie);
103 int pictureThread();
104
105 mutable Mutex mLock;
106
107 CameraParameters mParameters;
108
109 sp<MemoryHeapBase> mPreviewHeap;
110 sp<MemoryHeapBase> mRawHeap;
111 sp<MemoryBase> mBuffers[kBufferCount];
112
113 FakeCamera *mFakeCamera;
114 bool mPreviewRunning;
115 int mPreviewFrameSize;
116
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800117 // protected by mLock
118 sp<PreviewThread> mPreviewThread;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800119
Benny Wongda83f462009-08-12 12:01:27 -0500120 notify_callback mNotifyCb;
121 data_callback mDataCb;
122 data_callback_timestamp mDataCbTimestamp;
123 void *mCallbackCookie;
124
125 int32_t mMsgEnabled;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800126
127 // only used from PreviewThread
128 int mCurrentPreviewFrame;
129};
130
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800131}; // namespace android
132
133#endif