19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** Copyright 2008, The Android Open Source Project 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** Licensed under the Apache License, Version 2.0 (the "License"); 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** you may not use this file except in compliance with the License. 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** You may obtain a copy of the License at 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** http://www.apache.org/licenses/LICENSE-2.0 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** Unless required by applicable law or agreed to in writing, software 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** distributed under the License is distributed on an "AS IS" BASIS, 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** See the License for the specific language governing permissions and 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** limitations under the License. 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project*/ 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifndef ANDROID_HARDWARE_CAMERA_HARDWARE_STUB_H 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define ANDROID_HARDWARE_CAMERA_HARDWARE_STUB_H 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "FakeCamera.h" 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/threads.h> 23000479f9e325b4e426a67033abd92d47da412725Mathias Agopian#include <camera/CameraHardwareInterface.h> 240795272aa226f4e965968a03daddc53ce30b7cdaMathias Agopian#include <binder/MemoryBase.h> 250795272aa226f4e965968a03daddc53ce30b7cdaMathias Agopian#include <binder/MemoryHeapBase.h> 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/threads.h> 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnamespace android { 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass CameraHardwareStub : public CameraHardwareInterface { 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic: 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual sp<IMemoryHeap> getPreviewHeap() const; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual sp<IMemoryHeap> getRawHeap() const; 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 35da83f4674a564007baac03db062a289c8158d940Benny Wong virtual void setCallbacks(notify_callback notify_cb, 36da83f4674a564007baac03db062a289c8158d940Benny Wong data_callback data_cb, 37da83f4674a564007baac03db062a289c8158d940Benny Wong data_callback_timestamp data_cb_timestamp, 38da83f4674a564007baac03db062a289c8158d940Benny Wong void* user); 39da83f4674a564007baac03db062a289c8158d940Benny Wong 40da83f4674a564007baac03db062a289c8158d940Benny Wong virtual void enableMsgType(int32_t msgType); 41da83f4674a564007baac03db062a289c8158d940Benny Wong virtual void disableMsgType(int32_t msgType); 42da83f4674a564007baac03db062a289c8158d940Benny Wong virtual bool msgTypeEnabled(int32_t msgType); 43da83f4674a564007baac03db062a289c8158d940Benny Wong 44da83f4674a564007baac03db062a289c8158d940Benny Wong virtual status_t startPreview(); 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual void stopPreview(); 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual bool previewEnabled(); 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 48da83f4674a564007baac03db062a289c8158d940Benny Wong virtual status_t startRecording(); 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual void stopRecording(); 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual bool recordingEnabled(); 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual void releaseRecordingFrame(const sp<IMemory>& mem); 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 53da83f4674a564007baac03db062a289c8158d940Benny Wong virtual status_t autoFocus(); 54244f8c26365a303d9dd861bd48a29a4b48578da1Chih-Chung Chang virtual status_t cancelAutoFocus(); 55da83f4674a564007baac03db062a289c8158d940Benny Wong virtual status_t takePicture(); 56da83f4674a564007baac03db062a289c8158d940Benny Wong virtual status_t cancelPicture(); 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual status_t dump(int fd, const Vector<String16>& args) const; 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual status_t setParameters(const CameraParameters& params); 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual CameraParameters getParameters() const; 6036f68b8f24df906c969581b0b8e1a47f95dc03cbWu-cheng Li virtual status_t sendCommand(int32_t command, int32_t arg1, 6136f68b8f24df906c969581b0b8e1a47f95dc03cbWu-cheng Li int32_t arg2); 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual void release(); 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static sp<CameraHardwareInterface> createInstance(); 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprivate: 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CameraHardwareStub(); 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual ~CameraHardwareStub(); 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static wp<CameraHardwareInterface> singleton; 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static const int kBufferCount = 4; 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project class PreviewThread : public Thread { 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CameraHardwareStub* mHardware; 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public: 77ae7f3c5dcb4e7bfd56afcd1f86a8f37888afb358Marco Nelissen PreviewThread(CameraHardwareStub* hw) : 78ae7f3c5dcb4e7bfd56afcd1f86a8f37888afb358Marco Nelissen#ifdef SINGLE_PROCESS 79ae7f3c5dcb4e7bfd56afcd1f86a8f37888afb358Marco Nelissen // In single process mode this thread needs to be a java thread, 80ae7f3c5dcb4e7bfd56afcd1f86a8f37888afb358Marco Nelissen // since we won't be calling through the binder. 81ae7f3c5dcb4e7bfd56afcd1f86a8f37888afb358Marco Nelissen Thread(true), 82ae7f3c5dcb4e7bfd56afcd1f86a8f37888afb358Marco Nelissen#else 83ae7f3c5dcb4e7bfd56afcd1f86a8f37888afb358Marco Nelissen Thread(false), 84ae7f3c5dcb4e7bfd56afcd1f86a8f37888afb358Marco Nelissen#endif 85ae7f3c5dcb4e7bfd56afcd1f86a8f37888afb358Marco Nelissen mHardware(hw) { } 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual void onFirstRef() { 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project run("CameraPreviewThread", PRIORITY_URGENT_DISPLAY); 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual bool threadLoop() { 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHardware->previewThread(); 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // loop until we need to quit 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void initDefaultParameters(); 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void initHeapLocked(); 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int previewThread(); 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static int beginAutoFocusThread(void *cookie); 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int autoFocusThread(); 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static int beginPictureThread(void *cookie); 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int pictureThread(); 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mutable Mutex mLock; 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CameraParameters mParameters; 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<MemoryHeapBase> mPreviewHeap; 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<MemoryHeapBase> mRawHeap; 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<MemoryBase> mBuffers[kBufferCount]; 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project FakeCamera *mFakeCamera; 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool mPreviewRunning; 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int mPreviewFrameSize; 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // protected by mLock 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<PreviewThread> mPreviewThread; 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 122da83f4674a564007baac03db062a289c8158d940Benny Wong notify_callback mNotifyCb; 123da83f4674a564007baac03db062a289c8158d940Benny Wong data_callback mDataCb; 124da83f4674a564007baac03db062a289c8158d940Benny Wong data_callback_timestamp mDataCbTimestamp; 125da83f4674a564007baac03db062a289c8158d940Benny Wong void *mCallbackCookie; 126da83f4674a564007baac03db062a289c8158d940Benny Wong 127da83f4674a564007baac03db062a289c8158d940Benny Wong int32_t mMsgEnabled; 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // only used from PreviewThread 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int mCurrentPreviewFrame; 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; // namespace android 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif 136