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