111a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev/* Copyright (c) 2012-2013, The Linux Foundataion. All rights reserved. 211a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * 311a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * Redistribution and use in source and binary forms, with or without 411a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * modification, are permitted provided that the following conditions are 511a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * met: 611a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * * Redistributions of source code must retain the above copyright 711a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * notice, this list of conditions and the following disclaimer. 811a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * * Redistributions in binary form must reproduce the above 911a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * copyright notice, this list of conditions and the following 1011a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * disclaimer in the documentation and/or other materials provided 1111a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * with the distribution. 1211a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * * Neither the name of The Linux Foundation nor the names of its 1311a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * contributors may be used to endorse or promote products derived 1411a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * from this software without specific prior written permission. 1511a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * 1611a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 1711a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 1811a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 1911a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 2011a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2111a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2211a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 2311a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 2411a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 2511a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 2611a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2711a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev * 2811a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev */ 2911a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 3011a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev#ifndef QCAMERA_TEST_H 3111a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev#define QCAMERA_TEST_H 3211a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 3311a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchevnamespace qcamera { 3411a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 3511a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchevusing namespace android; 3611a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 3711a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchevtypedef enum qcamera_test_cmds_t { 3811a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev SWITCH_CAMERA_CMD = 'A', 3911a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev RESUME_PREVIEW_CMD = '[', 4011a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev START_PREVIEW_CMD = '1', 4111a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev STOP_PREVIEW_CMD = '2', 4211a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev CHANGE_PREVIEW_SIZE_CMD = '4', 4311a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev CHANGE_PICTURE_SIZE_CMD = '5', 4411a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev DUMP_CAPS_CMD = 'E', 4511a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev AUTOFOCUS_CMD = 'f', 4611a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev TAKEPICTURE_CMD = 'p', 4711a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev ENABLE_PRV_CALLBACKS_CMD = '&', 4811a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev EXIT_CMD = 'q' 4911a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev} qcamera_test_cmds; 5011a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 5111a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchevclass CameraContext : public CameraListener { 5211a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchevpublic: 5311a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 5411a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev CameraContext(int cameraIndex) : 5511a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev mCameraIndex(cameraIndex), 5611a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev mResizePreview(true), 5711a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev mHardwareActive(false), 5811a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev mPreviewRunning(false), 5911a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev mCamera(NULL), 6011a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev mClient(NULL), 6111a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev mSurfaceControl(NULL), 6211a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev mPreviewSurface(NULL) {} 6311a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 6411a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev status_t openCamera(); 6511a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev status_t closeCamera(); 6611a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 6711a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev status_t startPreview(); 6811a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev status_t stopPreview(); 6911a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev status_t resumePreview(); 7011a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev status_t autoFocus(); 7111a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev status_t enablePreviewCallbacks(); 7211a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev status_t takePicture(); 7311a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 7411a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev status_t nextPreviewSize(); 7511a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev status_t getCurrentPreviewSize(Size &previewSize); 7611a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 7711a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev status_t nextPictureSize(); 7811a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev status_t getCurrentPictureSize(Size &pictureSize); 7911a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 8011a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev void printSupportedParams(); 8111a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 8211a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev int getCameraIndex() { return mCameraIndex; } 8311a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev int getNumberOfCameras(); 8411a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 8511a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev virtual ~CameraContext(); 8611a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 8711a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev virtual void notify(int32_t msgType, int32_t ext1, int32_t ext2); 8811a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev virtual void postData(int32_t msgType, 8911a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev const sp<IMemory>& dataPtr, 9011a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev camera_frame_metadata_t *metadata); 9111a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 9211a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev virtual void postDataTimestamp(nsecs_t timestamp, 9311a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev int32_t msgType, 9411a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev const sp<IMemory>& dataPtr); 9511a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 9611a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchevprivate: 9711a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 9811a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev status_t createPreviewSurface(unsigned int width, 9911a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev unsigned int height, 10011a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev int32_t pixFormat); 10111a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev status_t destroyPreviewSurface(); 10211a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 10311a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev status_t saveFile(const sp<IMemory>& mem, String8 path); 10411a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev void previewCallback(const sp<IMemory>& mem); 10511a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 10611a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev static int JpegIdx; 10711a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev int mCameraIndex; 10811a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev bool mResizePreview; 10911a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev bool mHardwareActive; 11011a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev bool mPreviewRunning; 11111a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 11211a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev sp<Camera> mCamera; 11311a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev sp<SurfaceComposerClient> mClient; 11411a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev sp<SurfaceControl> mSurfaceControl; 11511a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev sp<Surface> mPreviewSurface; 11611a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev CameraParameters mParams; 11711a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 11811a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev int mCurrentPreviewSizeIdx; 11911a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev int mCurrentPictureSizeIdx; 12011a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev Vector<Size> mSupportedPreviewSizes; 12111a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev Vector<Size> mSupportedPictureSizes; 12211a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev}; 12311a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 12411a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev}; //namespace qcamera 12511a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev 12611a4b5c79df5f832d512e0da94d596380c319dbcIliyan Malchev#endif 127