1/* 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> 23#include <ui/CameraHardwareInterface.h> 24#include <utils/MemoryBase.h> 25#include <utils/MemoryHeapBase.h> 26#include <utils/threads.h> 27 28namespace android { 29 30class CameraHardwareStub : public CameraHardwareInterface { 31public: 32 virtual sp<IMemoryHeap> getPreviewHeap() const; 33 virtual sp<IMemoryHeap> getRawHeap() const; 34 35 virtual status_t startPreview(preview_callback cb, void* user); 36 virtual void stopPreview(); 37 virtual bool previewEnabled(); 38 39 virtual status_t startRecording(recording_callback cb, void* user); 40 virtual void stopRecording(); 41 virtual bool recordingEnabled(); 42 virtual void releaseRecordingFrame(const sp<IMemory>& mem); 43 44 virtual status_t autoFocus(autofocus_callback, void *user); 45 virtual status_t takePicture(shutter_callback, 46 raw_callback, 47 jpeg_callback, 48 void* user); 49 virtual status_t cancelPicture(bool cancel_shutter, 50 bool cancel_raw, 51 bool cancel_jpeg); 52 virtual status_t dump(int fd, const Vector<String16>& args) const; 53 virtual status_t setParameters(const CameraParameters& params); 54 virtual CameraParameters getParameters() const; 55 virtual void release(); 56 57 static sp<CameraHardwareInterface> createInstance(); 58 59private: 60 CameraHardwareStub(); 61 virtual ~CameraHardwareStub(); 62 63 static wp<CameraHardwareInterface> singleton; 64 65 static const int kBufferCount = 4; 66 67 class PreviewThread : public Thread { 68 CameraHardwareStub* mHardware; 69 public: 70 PreviewThread(CameraHardwareStub* hw) 71 : Thread(false), mHardware(hw) { } 72 virtual void onFirstRef() { 73 run("CameraPreviewThread", PRIORITY_URGENT_DISPLAY); 74 } 75 virtual bool threadLoop() { 76 mHardware->previewThread(); 77 // loop until we need to quit 78 return true; 79 } 80 }; 81 82 void initDefaultParameters(); 83 void initHeapLocked(); 84 85 int previewThread(); 86 87 static int beginAutoFocusThread(void *cookie); 88 int autoFocusThread(); 89 90 static int beginPictureThread(void *cookie); 91 int pictureThread(); 92 93 mutable Mutex mLock; 94 95 CameraParameters mParameters; 96 97 sp<MemoryHeapBase> mPreviewHeap; 98 sp<MemoryHeapBase> mRawHeap; 99 sp<MemoryBase> mBuffers[kBufferCount]; 100 101 FakeCamera *mFakeCamera; 102 bool mPreviewRunning; 103 int mPreviewFrameSize; 104 105 shutter_callback mShutterCallback; 106 raw_callback mRawPictureCallback; 107 jpeg_callback mJpegPictureCallback; 108 void *mPictureCallbackCookie; 109 110 // protected by mLock 111 sp<PreviewThread> mPreviewThread; 112 preview_callback mPreviewCallback; 113 void *mPreviewCallbackCookie; 114 115 autofocus_callback mAutoFocusCallback; 116 void *mAutoFocusCallbackCookie; 117 118 // only used from PreviewThread 119 int mCurrentPreviewFrame; 120}; 121 122}; // namespace android 123 124#endif 125