qcamera_test.h revision 6f83d735d8e3b918da42e6b559fcd0efb78133e5
1/* Copyright (c) 2012-2013, The Linux Foundataion. All rights reserved.
2 *
3 * Redistribution and use in source and binary forms, with or without
4 * modification, are permitted provided that the following conditions are
5 * met:
6 *     * Redistributions of source code must retain the above copyright
7 *       notice, this list of conditions and the following disclaimer.
8 *     * Redistributions in binary form must reproduce the above
9 *       copyright notice, this list of conditions and the following
10 *       disclaimer in the documentation and/or other materials provided
11 *       with the distribution.
12 *     * Neither the name of The Linux Foundation nor the names of its
13 *       contributors may be used to endorse or promote products derived
14 *       from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
19 * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
20 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
23 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
25 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
26 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 *
28 */
29
30#ifndef QCAMERA_TEST_H
31#define QCAMERA_TEST_H
32
33namespace qcamera {
34
35using namespace android;
36
37typedef enum qcamera_test_cmds_t {
38    SWITCH_CAMERA_CMD = 'A',
39    RESUME_PREVIEW_CMD = '[',
40    START_PREVIEW_CMD = '1',
41    STOP_PREVIEW_CMD = '2',
42    CHANGE_PREVIEW_SIZE_CMD = '4',
43    CHANGE_PICTURE_SIZE_CMD = '5',
44    DUMP_CAPS_CMD = 'E',
45    AUTOFOCUS_CMD = 'f',
46    TAKEPICTURE_CMD = 'p',
47    ENABLE_PRV_CALLBACKS_CMD = '&',
48    EXIT_CMD = 'q'
49} qcamera_test_cmds;
50
51class CameraContext : public CameraListener {
52public:
53
54    CameraContext(int cameraIndex) :
55        mCameraIndex(cameraIndex),
56        mResizePreview(true),
57        mHardwareActive(false),
58        mPreviewRunning(false),
59        mCamera(NULL),
60        mClient(NULL),
61        mSurfaceControl(NULL),
62        mPreviewSurface(NULL) {}
63
64    status_t openCamera();
65    status_t closeCamera();
66
67    status_t startPreview();
68    status_t stopPreview();
69    status_t resumePreview();
70    status_t autoFocus();
71    status_t enablePreviewCallbacks();
72    status_t takePicture();
73
74    status_t nextPreviewSize();
75    status_t getCurrentPreviewSize(Size &previewSize);
76
77    status_t nextPictureSize();
78    status_t getCurrentPictureSize(Size &pictureSize);
79
80    void printSupportedParams();
81
82    int getCameraIndex() { return mCameraIndex; }
83    int getNumberOfCameras();
84
85    virtual ~CameraContext();
86
87    virtual void notify(int32_t msgType, int32_t ext1, int32_t ext2);
88    virtual void postData(int32_t msgType,
89                          const sp<IMemory>& dataPtr,
90                          camera_frame_metadata_t *metadata);
91
92    virtual void postDataTimestamp(nsecs_t timestamp,
93                                   int32_t msgType,
94                                   const sp<IMemory>& dataPtr);
95
96private:
97
98    status_t createPreviewSurface(unsigned int width,
99                                  unsigned int height,
100                                  int32_t pixFormat);
101    status_t destroyPreviewSurface();
102
103    status_t saveFile(const sp<IMemory>& mem, String8 path);
104    void previewCallback(const sp<IMemory>& mem);
105
106    static int JpegIdx;
107    int mCameraIndex;
108    bool mResizePreview;
109    bool mHardwareActive;
110    bool mPreviewRunning;
111
112    sp<Camera> mCamera;
113    sp<SurfaceComposerClient> mClient;
114    sp<SurfaceControl> mSurfaceControl;
115    sp<Surface> mPreviewSurface;
116    CameraParameters mParams;
117
118    int mCurrentPreviewSizeIdx;
119    int mCurrentPictureSizeIdx;
120    Vector<Size> mSupportedPreviewSizes;
121    Vector<Size> mSupportedPictureSizes;
122};
123
124}; //namespace qcamera
125
126#endif
127