17f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He/* Copyright (c) 2012-2016, The Linux Foundation. All rights reserved. 27f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He * 37f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He * Redistribution and use in source and binary forms, with or without 47f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He * modification, are permitted provided that the following conditions are 57f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He * met: 67f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He * * Redistributions of source code must retain the above copyright 77f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He * notice, this list of conditions and the following disclaimer. 87f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He * * Redistributions in binary form must reproduce the above 97f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He * copyright notice, this list of conditions and the following 107f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He * disclaimer in the documentation and/or other materials provided 117f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He * with the distribution. 127f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He * * Neither the name of The Linux Foundation nor the names of its 137f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He * contributors may be used to endorse or promote products derived 147f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He * from this software without specific prior written permission. 157f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He * 167f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 177f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 187f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 197f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 207f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 217f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 227f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 237f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 247f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 257f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 267f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 277f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He * 287f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He */ 297f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 307f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He#ifndef QCAMERA_TEST_H 317f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He#define QCAMERA_TEST_H 327f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 337f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He#include <SkData.h> 347f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He#include <SkBitmap.h> 357f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He#include <SkStream.h> 367f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 377f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun Henamespace qcamera { 387f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 397f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun Heusing namespace android; 407f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 417f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He#define MAX_CAM_INSTANCES 3 427f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 437f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun Heclass TestContext; 447f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 457f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun Heclass CameraContext : public CameraListener, 467f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He public ICameraRecordingProxyListener{ 477f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun Hepublic: 487f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He typedef enum { 497f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He READ_METADATA = 1, 507f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He READ_IMAGE = 2, 517f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He READ_ALL = 3 527f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He } ReadMode_t; 537f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 547f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He // This structure is used to store jpeg file sections in memory. 557f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He typedef struct { 567f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He unsigned char * Data; 577f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He int Type; 587f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He size_t Size; 597f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He } Sections_t; 607f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 617f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun Hepublic: 627f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He static const char KEY_ZSL[]; 637f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 647f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He CameraContext(int cameraIndex); 657f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He virtual ~CameraContext(); 667f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 677f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 687f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 697f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He status_t openCamera(); 707f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He status_t closeCamera(); 717f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 727f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He status_t startPreview(); 737f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He status_t stopPreview(); 747f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He status_t resumePreview(); 757f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He status_t autoFocus(); 767f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He status_t enablePreviewCallbacks(); 777f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He status_t takePicture(); 787f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He status_t startRecording(); 797f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He status_t stopRecording(); 807f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He status_t startViVRecording(); 817f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He status_t stopViVRecording(); 827f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He status_t configureViVRecording(); 837f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 847f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He status_t nextPreviewSize(); 857f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He status_t setPreviewSize(const char *format); 867f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He status_t getCurrentPreviewSize(Size &previewSize); 877f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 887f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He status_t nextPictureSize(); 897f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He status_t getCurrentPictureSize(Size &pictureSize); 907f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He status_t setPictureSize(const char *format); 917f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 927f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He status_t nextVideoSize(); 937f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He status_t setVideoSize(const char *format); 947f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He status_t getCurrentVideoSize(Size &videoSize); 957f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He status_t configureRecorder(); 967f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He status_t unconfigureRecorder(); 977f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He Sections_t *FindSection(int SectionType); 987f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He status_t ReadSectionsFromBuffer (unsigned char *buffer, 997f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He size_t buffer_size, ReadMode_t ReadMode); 1007f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He virtual IBinder* onAsBinder(); 1017f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He void setTestCtxInstance(TestContext *instance); 1027f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 1037f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He void printMenu(sp<CameraContext> currentCamera); 1047f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He void printSupportedParams(); 1057f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He const char *getZSL(); 1067f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He void setZSL(const char *value); 1077f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 1087f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 1097f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He int getCameraIndex() { return mCameraIndex; } 1107f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He int getNumberOfCameras(); 1117f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He void enablePrintPreview(); 1127f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He void disablePrintPreview(); 1137f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He void enablePiPCapture(); 1147f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He void disablePiPCapture(); 1157f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He void CheckSectionsAllocated(); 1167f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He void DiscardData(); 1177f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He void DiscardSections(); 1187f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He size_t calcBufferSize(int width, int height); 1197f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He size_t calcStride(int width); 1207f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He size_t calcYScanLines(int height); 1217f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He size_t calcUVScanLines(int height); 1227f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 1237f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He virtual void notify(int32_t msgType, int32_t ext1, int32_t ext2); 1247f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He virtual void postData(int32_t msgType, 1257f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He const sp<IMemory>& dataPtr, 1267f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He camera_frame_metadata_t *metadata); 1277f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 1287f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He virtual void postDataTimestamp(nsecs_t timestamp, 1297f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He int32_t msgType, 1307f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He const sp<IMemory>& dataPtr); 1317f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He virtual void dataCallbackTimestamp(nsecs_t timestamp, 1327f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He int32_t msgType, 1337f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He const sp<IMemory>& dataPtr); 1347f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 1357f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun Heprivate: 1367f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 1377f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He status_t createPreviewSurface(int width, int height, int32_t pixFormat); 1387f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He status_t destroyPreviewSurface(); 1397f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 1407f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He status_t saveFile(const sp<IMemory>& mem, String8 path); 1417f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He SkBitmap * PiPCopyToOneFile(SkBitmap *bitmap0, SkBitmap *bitmap1); 1427f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He status_t decodeJPEG(const sp<IMemory>& mem, SkBitmap *skBM); 1437f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He status_t encodeJPEG(SkWStream * stream, const SkBitmap *bitmap, 1447f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He String8 path); 1457f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He void previewCallback(const sp<IMemory>& mem); 1467f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 1477f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He static int JpegIdx; 1487f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He int mCameraIndex; 1497f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He bool mResizePreview; 1507f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He bool mHardwareActive; 1517f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He bool mPreviewRunning; 1527f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He bool mRecordRunning; 1537f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He int mVideoFd; 1547f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He int mVideoIdx; 1557f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He bool mRecordingHint; 1567f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He bool mDoPrintMenu; 1577f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He bool mPiPCapture; 1587f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He static int mPiPIdx; 1597f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He unsigned int mfmtMultiplier; 1607f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He int mWidthTmp; 1617f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He int mHeightTmp; 1627f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He size_t mSectionsRead; 1637f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He size_t mSectionsAllocated; 1647f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He Sections_t * mSections; 1657f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He Sections_t * mJEXIFTmp; 1667f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He Sections_t mJEXIFSection; 1677f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He int mHaveAll; 1687f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He TestContext *mInterpr; 1697f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 1707f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He sp<Camera> mCamera; 1717f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He sp<SurfaceComposerClient> mClient; 1727f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He sp<SurfaceControl> mSurfaceControl; 1737f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He sp<Surface> mPreviewSurface; 1747f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He sp<MediaRecorder> mRecorder; 1757f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He CameraParameters mParams; 1767f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He SkBitmap *skBMDec; 1777f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He SkBitmap skBMtmp; 1787f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He sp<IMemory> PiPPtrTmp; 1797f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 1807f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He size_t mCurrentPreviewSizeIdx; 1817f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He Size getPreviewSizeFromVideoSizes(Size currentVideoSize); 1827f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He size_t mCurrentPictureSizeIdx; 1837f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He size_t mCurrentVideoSizeIdx; 1847f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He Vector<Size> mSupportedPreviewSizes; 1857f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He Vector<Size> mSupportedPictureSizes; 1867f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He Vector<Size> mSupportedVideoSizes; 1877f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 1887f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He bool mInUse; 1897f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He Mutex mLock; 1907f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He Condition mCond; 1917f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 1927f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He void useLock(); 1937f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He void signalFinished(); 1947f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 1957f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He //------------------------------------------------------------------------ 1967f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He // JPEG markers consist of one or more 0xFF bytes, followed by a marker 1977f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He // code byte (which is not an FF). Here are the marker codes of interest 1987f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He // in this program. (See jdmarker.c for a more complete list.) 1997f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He //------------------------------------------------------------------------ 2007f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He #define M_SOF0 0xC0 // Start Of Frame N 2017f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He #define M_SOF1 0xC1 // N indicates which compression process 2027f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He #define M_SOF2 0xC2 // Only SOF0-SOF2 are now in common use 2037f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He #define M_SOF3 0xC3 2047f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He #define M_SOF5 0xC5 // NB: codes C4 and CC are NOT SOF markers 2057f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He #define M_SOF6 0xC6 2067f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He #define M_SOF7 0xC7 2077f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He #define M_SOF9 0xC9 2087f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He #define M_SOF10 0xCA 2097f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He #define M_SOF11 0xCB 2107f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He #define M_SOF13 0xCD 2117f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He #define M_SOF14 0xCE 2127f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He #define M_SOF15 0xCF 2137f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He #define M_SOI 0xD8 // Start Of Image (beginning of datastream) 2147f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He #define M_EOI 0xD9 // End Of Image (end of datastream) 2157f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He #define M_SOS 0xDA // Start Of Scan (begins compressed data) 2167f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He #define M_JFIF 0xE0 // Jfif marker 2177f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He #define M_EXIF 0xE1 // Exif marker. Also used for XMP data! 2187f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He #define M_XMP 0x10E1 // Not a real tag same value as Exif! 2197f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He #define M_COM 0xFE // COMment 2207f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He #define M_DQT 0xDB 2217f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He #define M_DHT 0xC4 2227f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He #define M_DRI 0xDD 2237f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He #define M_IPTC 0xED // IPTC marker 2247f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He #define PSEUDO_IMAGE_MARKER 0x123; // Extra value. 2257f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He}; 2267f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 2277f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun Heclass Interpreter 2287f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He{ 2297f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun Hepublic: 2307f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He enum Commands_e { 2317f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He SWITCH_CAMERA_CMD = 'A', 2327f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He RESUME_PREVIEW_CMD = '[', 2337f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He START_PREVIEW_CMD = '1', 2347f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He STOP_PREVIEW_CMD = '2', 2357f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He CHANGE_VIDEO_SIZE_CMD = '3', 2367f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He CHANGE_PREVIEW_SIZE_CMD = '4', 2377f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He CHANGE_PICTURE_SIZE_CMD = '5', 2387f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He START_RECORD_CMD = '6', 2397f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He STOP_RECORD_CMD = '7', 2407f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He START_VIV_RECORD_CMD = '8', 2417f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He STOP_VIV_RECORD_CMD = '9', 2427f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He DUMP_CAPS_CMD = 'E', 2437f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He AUTOFOCUS_CMD = 'f', 2447f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He TAKEPICTURE_CMD = 'p', 2457f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He TAKEPICTURE_IN_PICTURE_CMD = 'P', 2467f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He ENABLE_PRV_CALLBACKS_CMD = '&', 2477f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He EXIT_CMD = 'q', 2487f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He DELAY = 'd', 2497f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He ZSL_CMD = 'z', 2507f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He INVALID_CMD = '0' 2517f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He }; 2527f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 2537f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He struct Command { 2547f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He Command( Commands_e cmd_, char *arg_ = NULL) 2557f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He : cmd(cmd_) 2567f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He , arg(arg_) {} 2577f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He Command() 2587f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He : cmd(INVALID_CMD) 2597f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He , arg(NULL) {} 2607f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He Commands_e cmd; 2617f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He char *arg; 2627f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He }; 2637f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 2647f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He /* API */ 2657f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He Interpreter() 2667f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He : mUseScript(false) 2677f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He , mScript(NULL) {} 2687f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 2697f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He Interpreter(const char *file); 2707f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He ~Interpreter(); 2717f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 2727f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He Command getCommand(sp<CameraContext> currentCamera); 2737f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He void releasePiPBuff(); 2747f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He status_t configureViVCodec(); 2757f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He void setViVSize(Size VideoSize, int camIndex); 2767f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He void setTestCtxInst(TestContext *instance); 2777f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He status_t unconfigureViVCodec(); 2787f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He status_t ViVEncoderThread(); 2797f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He void ViVEncode(); 2807f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He static void *ThreadWrapper(void *context); 2817f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 2827f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun Heprivate: 2837f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He static const int numberOfCommands; 2847f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 2857f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He bool mUseScript; 2867f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He size_t mCmdIndex; 2877f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He char *mScript; 2887f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He Vector<Command> mCommands; 2897f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He TestContext *mTestContext; 2907f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He pthread_t mViVEncThread; 2917f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He}; 2927f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 2937f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun Heclass TestContext 2947f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He{ 2957f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He friend class CameraContext; 2967f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He friend class Interpreter; 2977f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun Hepublic: 2987f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He TestContext(); 2997f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He ~TestContext(); 3007f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 3017f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He size_t GetCamerasNum(); 3027f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He status_t FunctionalTest(); 3037f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He status_t AddScriptFromFile(const char *scriptFile); 3047f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He void setViVSize(Size VideoSize, int camIndex); 3057f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He void PiPLock(); 3067f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He void PiPUnlock(); 3077f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He void ViVLock(); 3087f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He void ViVUnlock(); 3097f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 3107f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun Heprivate: 3117f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He sp<CameraContext> camera[MAX_CAM_INSTANCES]; 3127f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He char GetNextCmd(sp<qcamera::CameraContext> currentCamera); 3137f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He size_t mCurrentCameraIndex; 3147f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He size_t mSaveCurrentCameraIndex; 3157f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He Vector< sp<qcamera::CameraContext> > mAvailableCameras; 3167f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He bool mTestRunning; 3177f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He Interpreter *mInterpreter; 3187f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He Mutex mPiPLock; 3197f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He Condition mPiPCond; 3207f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He bool mPiPinUse; 3217f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He Mutex mViVLock; 3227f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He Condition mViVCond; 3237f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He bool mViVinUse; 3247f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He bool mIsZSLOn; 3257f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 3267f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He typedef struct ViVBuff_t{ 3277f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He void *buff; 3287f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He size_t buffSize; 3297f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He size_t YStride; 3307f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He size_t UVStride; 3317f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He size_t YScanLines; 3327f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He size_t UVScanLines; 3337f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He size_t srcWidth; 3347f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He size_t srcHeight; 3357f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He } ViVBuff_t; 3367f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 3377f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He typedef struct ViVVid_t{ 3387f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He sp<IGraphicBufferProducer> bufferProducer; 3397f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He sp<Surface> surface; 3407f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He sp<MediaCodec> codec; 3417f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He sp<MediaMuxer> muxer; 3427f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He sp<ANativeWindow> ANW; 3437f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He Vector<sp<ABuffer> > buffers; 3447f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He Size VideoSizes[2]; 3457f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He int ViVIdx; 3467f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He size_t buff_cnt; 3477f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He sp<GraphicBuffer> graphBuf; 3487f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He void * mappedBuff; 3497f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He bool isBuffValid; 3507f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He int sourceCameraID; 3517f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He int destinationCameraID; 3527f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He } vidPiP_t; 3537f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 3547f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He ViVVid_t mViVVid; 3557f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He ViVBuff_t mViVBuff; 3567f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He}; 3577f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 3587f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He}; //namespace qcamera 3597f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He 3607f47f6bd7178f8bf54cf78a003a52c3f4585158cZhijun He#endif 361