camera: Remove unused files
Change-Id: I0c717d165162469ba4b78ea07da6dd88b5cfc18a
This commit is contained in:
parent
a018167757
commit
782b2a0c20
9 changed files with 0 additions and 6422 deletions
|
@ -1,256 +0,0 @@
|
|||
/*
|
||||
** Copyright 2008, The Android Open Source Project
|
||||
**
|
||||
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||
** you may not use this file except in compliance with the License.
|
||||
** You may obtain a copy of the License at
|
||||
**
|
||||
** http://www.apache.org/licenses/LICENSE-2.0
|
||||
**
|
||||
** Unless required by applicable law or agreed to in writing, software
|
||||
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
** See the License for the specific language governing permissions and
|
||||
** limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef ANDROID_HARDWARE_QCAMERA_PARAMETERS_H
|
||||
#define ANDROID_HARDWARE_QCAMERA_PARAMETERS_H
|
||||
|
||||
// Camera dependencies
|
||||
#include <camera/CameraParameters.h>
|
||||
|
||||
namespace android {
|
||||
|
||||
struct FPSRange{
|
||||
int minFPS;
|
||||
int maxFPS;
|
||||
FPSRange(){
|
||||
minFPS=0;
|
||||
maxFPS=0;
|
||||
};
|
||||
FPSRange(int min,int max){
|
||||
minFPS=min;
|
||||
maxFPS=max;
|
||||
};
|
||||
};
|
||||
class QCameraParameters: public CameraParameters
|
||||
{
|
||||
public:
|
||||
#if 1
|
||||
QCameraParameters() : CameraParameters() {};
|
||||
QCameraParameters(const String8 ¶ms): CameraParameters(params) {};
|
||||
#else
|
||||
QCameraParameters() : CameraParameters() {};
|
||||
QCameraParameters(const String8 ¶ms) { unflatten(params); }
|
||||
#endif
|
||||
~QCameraParameters();
|
||||
|
||||
// Supported PREVIEW/RECORDING SIZES IN HIGH FRAME RATE recording, sizes in pixels.
|
||||
// Example value: "800x480,432x320". Read only.
|
||||
static const char KEY_SUPPORTED_HFR_SIZES[];
|
||||
// The mode of preview frame rate.
|
||||
// Example value: "frame-rate-auto, frame-rate-fixed".
|
||||
static const char KEY_PREVIEW_FRAME_RATE_MODE[];
|
||||
static const char KEY_SUPPORTED_PREVIEW_FRAME_RATE_MODES[];
|
||||
static const char KEY_PREVIEW_FRAME_RATE_AUTO_MODE[];
|
||||
static const char KEY_PREVIEW_FRAME_RATE_FIXED_MODE[];
|
||||
|
||||
static const char KEY_SKIN_TONE_ENHANCEMENT[] ;
|
||||
static const char KEY_SUPPORTED_SKIN_TONE_ENHANCEMENT_MODES[] ;
|
||||
|
||||
//Touch Af/AEC settings.
|
||||
static const char KEY_TOUCH_AF_AEC[];
|
||||
static const char KEY_SUPPORTED_TOUCH_AF_AEC[];
|
||||
//Touch Index for AEC.
|
||||
static const char KEY_TOUCH_INDEX_AEC[];
|
||||
//Touch Index for AF.
|
||||
static const char KEY_TOUCH_INDEX_AF[];
|
||||
// Current auto scene detection mode.
|
||||
// Example value: "off" or SCENE_DETECT_XXX constants. Read/write.
|
||||
static const char KEY_SCENE_DETECT[];
|
||||
// Supported auto scene detection settings.
|
||||
// Example value: "off,backlight,snow/cloudy". Read only.
|
||||
static const char KEY_SUPPORTED_SCENE_DETECT[];
|
||||
// Returns true if video snapshot is supported. That is, applications
|
||||
static const char KEY_FULL_VIDEO_SNAP_SUPPORTED[];
|
||||
static const char KEY_POWER_MODE_SUPPORTED[];
|
||||
|
||||
static const char KEY_ISO_MODE[];
|
||||
static const char KEY_SUPPORTED_ISO_MODES[];
|
||||
static const char KEY_LENSSHADE[] ;
|
||||
static const char KEY_SUPPORTED_LENSSHADE_MODES[] ;
|
||||
|
||||
static const char KEY_AUTO_EXPOSURE[];
|
||||
static const char KEY_SUPPORTED_AUTO_EXPOSURE[];
|
||||
|
||||
static const char KEY_GPS_LATITUDE_REF[];
|
||||
static const char KEY_GPS_LONGITUDE_REF[];
|
||||
static const char KEY_GPS_ALTITUDE_REF[];
|
||||
static const char KEY_GPS_STATUS[];
|
||||
static const char KEY_EXIF_DATETIME[];
|
||||
static const char KEY_MEMORY_COLOR_ENHANCEMENT[];
|
||||
static const char KEY_SUPPORTED_MEM_COLOR_ENHANCE_MODES[];
|
||||
|
||||
|
||||
static const char KEY_POWER_MODE[];
|
||||
|
||||
static const char KEY_ZSL[];
|
||||
static const char KEY_SUPPORTED_ZSL_MODES[];
|
||||
|
||||
static const char KEY_CAMERA_MODE[];
|
||||
|
||||
static const char KEY_VIDEO_HIGH_FRAME_RATE[];
|
||||
static const char KEY_SUPPORTED_VIDEO_HIGH_FRAME_RATE_MODES[];
|
||||
static const char KEY_HIGH_DYNAMIC_RANGE_IMAGING[];
|
||||
static const char KEY_SUPPORTED_HDR_IMAGING_MODES[];
|
||||
static const char KEY_AE_BRACKET_HDR[];
|
||||
|
||||
|
||||
// DENOISE
|
||||
static const char KEY_DENOISE[];
|
||||
static const char KEY_SUPPORTED_DENOISE[];
|
||||
|
||||
//Selectable zone AF.
|
||||
static const char KEY_SELECTABLE_ZONE_AF[];
|
||||
static const char KEY_SUPPORTED_SELECTABLE_ZONE_AF[];
|
||||
|
||||
//Face Detection
|
||||
static const char KEY_FACE_DETECTION[];
|
||||
static const char KEY_SUPPORTED_FACE_DETECTION[];
|
||||
|
||||
//Redeye Reduction
|
||||
static const char KEY_REDEYE_REDUCTION[];
|
||||
static const char KEY_SUPPORTED_REDEYE_REDUCTION[];
|
||||
static const char EFFECT_EMBOSS[];
|
||||
static const char EFFECT_SKETCH[];
|
||||
static const char EFFECT_NEON[];
|
||||
|
||||
// Values for Touch AF/AEC
|
||||
static const char TOUCH_AF_AEC_OFF[] ;
|
||||
static const char TOUCH_AF_AEC_ON[] ;
|
||||
static const char SCENE_MODE_ASD[];
|
||||
static const char SCENE_MODE_BACKLIGHT[];
|
||||
static const char SCENE_MODE_FLOWERS[];
|
||||
static const char SCENE_MODE_AR[];
|
||||
static const char SCENE_MODE_HDR[];
|
||||
static const char SCENE_DETECT_OFF[];
|
||||
static const char SCENE_DETECT_ON[];
|
||||
static const char PIXEL_FORMAT_YUV420SP_ADRENO[]; // ADRENO
|
||||
static const char PIXEL_FORMAT_RAW[];
|
||||
static const char PIXEL_FORMAT_YV12[]; // NV12
|
||||
static const char PIXEL_FORMAT_NV12[]; //NV12
|
||||
// Normal focus mode. Applications should call
|
||||
// CameraHardwareInterface.autoFocus to start the focus in this mode.
|
||||
static const char FOCUS_MODE_NORMAL[];
|
||||
static const char ISO_AUTO[];
|
||||
static const char ISO_HJR[] ;
|
||||
static const char ISO_100[];
|
||||
static const char ISO_200[] ;
|
||||
static const char ISO_400[];
|
||||
static const char ISO_800[];
|
||||
static const char ISO_1600[];
|
||||
// Values for Lens Shading
|
||||
static const char LENSSHADE_ENABLE[] ;
|
||||
static const char LENSSHADE_DISABLE[] ;
|
||||
|
||||
// Values for auto exposure settings.
|
||||
static const char AUTO_EXPOSURE_FRAME_AVG[];
|
||||
static const char AUTO_EXPOSURE_CENTER_WEIGHTED[];
|
||||
static const char AUTO_EXPOSURE_SPOT_METERING[];
|
||||
|
||||
static const char KEY_SHARPNESS[];
|
||||
static const char KEY_MAX_SHARPNESS[];
|
||||
static const char KEY_CONTRAST[];
|
||||
static const char KEY_MAX_CONTRAST[];
|
||||
static const char KEY_SATURATION[];
|
||||
static const char KEY_MAX_SATURATION[];
|
||||
|
||||
static const char KEY_HISTOGRAM[] ;
|
||||
static const char KEY_SUPPORTED_HISTOGRAM_MODES[] ;
|
||||
// Values for HISTOGRAM
|
||||
static const char HISTOGRAM_ENABLE[] ;
|
||||
static const char HISTOGRAM_DISABLE[] ;
|
||||
|
||||
// Values for SKIN TONE ENHANCEMENT
|
||||
static const char SKIN_TONE_ENHANCEMENT_ENABLE[] ;
|
||||
static const char SKIN_TONE_ENHANCEMENT_DISABLE[] ;
|
||||
|
||||
// Values for Denoise
|
||||
static const char DENOISE_OFF[] ;
|
||||
static const char DENOISE_ON[] ;
|
||||
|
||||
// Values for auto exposure settings.
|
||||
static const char SELECTABLE_ZONE_AF_AUTO[];
|
||||
static const char SELECTABLE_ZONE_AF_SPOT_METERING[];
|
||||
static const char SELECTABLE_ZONE_AF_CENTER_WEIGHTED[];
|
||||
static const char SELECTABLE_ZONE_AF_FRAME_AVERAGE[];
|
||||
|
||||
// Values for Face Detection settings.
|
||||
static const char FACE_DETECTION_OFF[];
|
||||
static const char FACE_DETECTION_ON[];
|
||||
|
||||
// Values for MCE settings.
|
||||
static const char MCE_ENABLE[];
|
||||
static const char MCE_DISABLE[];
|
||||
|
||||
// Values for ZSL settings.
|
||||
static const char ZSL_OFF[];
|
||||
static const char ZSL_ON[];
|
||||
|
||||
// Values for HDR Bracketing settings.
|
||||
static const char AE_BRACKET_HDR_OFF[];
|
||||
static const char AE_BRACKET_HDR[];
|
||||
static const char AE_BRACKET[];
|
||||
|
||||
// Values for Power mode settings.
|
||||
static const char LOW_POWER[];
|
||||
static const char NORMAL_POWER[];
|
||||
|
||||
// Values for HFR settings.
|
||||
static const char VIDEO_HFR_OFF[];
|
||||
static const char VIDEO_HFR_2X[];
|
||||
static const char VIDEO_HFR_3X[];
|
||||
static const char VIDEO_HFR_4X[];
|
||||
|
||||
// Values for Redeye Reduction settings.
|
||||
static const char REDEYE_REDUCTION_ENABLE[];
|
||||
static const char REDEYE_REDUCTION_DISABLE[];
|
||||
// Values for HDR settings.
|
||||
static const char HDR_ENABLE[];
|
||||
static const char HDR_DISABLE[];
|
||||
|
||||
// Values for Redeye Reduction settings.
|
||||
// static const char REDEYE_REDUCTION_ENABLE[];
|
||||
// static const char REDEYE_REDUCTION_DISABLE[];
|
||||
// Values for HDR settings.
|
||||
// static const char HDR_ENABLE[];
|
||||
// static const char HDR_DISABLE[];
|
||||
|
||||
|
||||
static const char KEY_SINGLE_ISP_OUTPUT_ENABLED[];
|
||||
static const char KEY_SUPPORTED_CAMERA_FEATURES[];
|
||||
static const char KEY_MAX_NUM_REQUESTED_FACES[];
|
||||
|
||||
enum {
|
||||
CAMERA_ORIENTATION_UNKNOWN = 0,
|
||||
CAMERA_ORIENTATION_PORTRAIT = 1,
|
||||
CAMERA_ORIENTATION_LANDSCAPE = 2,
|
||||
};
|
||||
int getOrientation() const;
|
||||
void setOrientation(int orientation);
|
||||
void getSupportedHfrSizes(Vector<Size> &sizes) const;
|
||||
void setPreviewFpsRange(int minFPS,int maxFPS);
|
||||
void setPreviewFrameRateMode(const char *mode);
|
||||
const char *getPreviewFrameRateMode() const;
|
||||
void setTouchIndexAec(int x, int y);
|
||||
void getTouchIndexAec(int *x, int *y) const;
|
||||
void setTouchIndexAf(int x, int y);
|
||||
void getTouchIndexAf(int *x, int *y) const;
|
||||
void getMeteringAreaCenter(int * x, int *y) const;
|
||||
|
||||
};
|
||||
|
||||
}; // namespace android
|
||||
|
||||
#endif
|
File diff suppressed because it is too large
Load diff
|
@ -1,49 +0,0 @@
|
|||
/* Copyright (c) 2011-2012, The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer in the documentation and/or other materials provided
|
||||
* with the distribution.
|
||||
* * Neither the name of The Linux Foundation nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
|
||||
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
||||
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef __QCAMERA_MJPEG_DECODE_H
|
||||
#define __QCAMERA_MJPEG_DECODE_H
|
||||
|
||||
typedef int MJPEGD_ERR;
|
||||
#define MJPEGD_NO_ERROR 0
|
||||
#define MJPEGD_ERROR -1
|
||||
#define MJPEGD_INSUFFICIENT_MEM -2
|
||||
|
||||
MJPEGD_ERR mjpegDecoderInit(void**);
|
||||
|
||||
MJPEGD_ERR mjpegDecoderDestroy(void* mjpegd);
|
||||
|
||||
MJPEGD_ERR mjpegDecode(
|
||||
void* mjpegd,
|
||||
char* mjpegBuffer,
|
||||
int mjpegBufferSize,
|
||||
char* outputYptr,
|
||||
char* outputUVptr,
|
||||
int outputFormat);
|
||||
|
||||
#endif /* __QCAMERA_MJPEG_DECODE_H */
|
|
@ -1,178 +0,0 @@
|
|||
/* Copyright (c) 2012, The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer in the documentation and/or other materials provided
|
||||
* with the distribution.
|
||||
* * Neither the name of The Linux Foundation nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
|
||||
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
||||
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef ANDROID_HARDWARE_QCAMERA_USB_PARM_H
|
||||
#define ANDROID_HARDWARE_QCAMERA_USB_PARM_H
|
||||
|
||||
|
||||
#include <utils/threads.h>
|
||||
#include <hardware/camera.h>
|
||||
#include <binder/MemoryBase.h>
|
||||
#include <binder/MemoryHeapBase.h>
|
||||
#include <utils/threads.h>
|
||||
#include <cutils/properties.h>
|
||||
#include <camera/Camera.h>
|
||||
#include <camera/QCameraParameters.h>
|
||||
#include <system/window.h>
|
||||
#include <system/camera.h>
|
||||
#include <hardware/camera.h>
|
||||
#include <gralloc_priv.h>
|
||||
#include <hardware/power.h>
|
||||
|
||||
extern "C" {
|
||||
#include <linux/android_pmem.h>
|
||||
#include <linux/msm_ion.h>
|
||||
#include <camera.h>
|
||||
#include <camera_defs_i.h>
|
||||
} //extern C
|
||||
|
||||
//Error codes
|
||||
#define NOT_FOUND -1
|
||||
|
||||
/******************************************************************************
|
||||
* Macro definitions
|
||||
******************************************************************************/
|
||||
/* enum definitions for picture formats */
|
||||
static const int PICTURE_FORMAT_JPEG = 1;
|
||||
static const int PICTURE_FORMAT_RAW = 2;
|
||||
|
||||
/* Default preview width in pixels */
|
||||
#define DEFAULT_USBCAM_PRVW_WD 1280//640
|
||||
|
||||
/* Default preview height in pixels */
|
||||
#define DEFAULT_USBCAM_PRVW_HT 720//480
|
||||
|
||||
/* Default picture format */
|
||||
#define DEFAULT_USBCAM_PICT_FMT PICTURE_FORMAT_JPEG
|
||||
|
||||
/* Default picture width in pixels */
|
||||
#define DEFAULT_USBCAM_PICT_WD 640
|
||||
|
||||
/* Default picture height in pixels */
|
||||
#define DEFAULT_USBCAM_PICT_HT 480
|
||||
|
||||
/* Default picture JPEG quality 0-100 */
|
||||
#define DEFAULT_USBCAM_PICT_QLTY 85
|
||||
|
||||
/* Default thumbnail width in pixels */
|
||||
#define DEFAULT_USBCAM_THUMBNAIL_WD 432
|
||||
|
||||
/* Default thumbnail height in pixels */
|
||||
#define DEFAULT_USBCAM_THUMBNAIL_HT 288
|
||||
|
||||
/* Default thumbnail JPEG quality 0-100 */
|
||||
#define DEFAULT_USBCAM_THUMBNAIL_QLTY 85
|
||||
|
||||
/* Default preview format */
|
||||
#define DEFAULT_USBCAM_PRVW_FMT HAL_PIXEL_FORMAT_YCrCb_420_SP
|
||||
|
||||
/* minimum of the default preview fps range in milli-Hz */
|
||||
#define MIN_PREV_FPS 5000
|
||||
|
||||
/* maximum of the default preview fps range in milli-Hz */
|
||||
#define MAX_PREV_FPS 121000
|
||||
|
||||
//for histogram stats
|
||||
#define HISTOGRAM_STATS_SIZE 257
|
||||
#define NUM_HISTOGRAM_BUFFERS 3
|
||||
|
||||
namespace android {
|
||||
|
||||
/******************************************************************************
|
||||
* Structure definitions
|
||||
******************************************************************************/
|
||||
typedef struct {
|
||||
uint32_t aspect_ratio;
|
||||
uint32_t width;
|
||||
uint32_t height;
|
||||
} thumbnail_size_type;
|
||||
|
||||
/******************************************************************************
|
||||
* Function: usbCamInitDefaultParameters
|
||||
* Description: This function sets default parameters to camera HAL context
|
||||
*
|
||||
* Input parameters:
|
||||
* camHal - camera HAL handle
|
||||
*
|
||||
* Return values:
|
||||
* 0 No error
|
||||
* -1 Error
|
||||
*
|
||||
* Notes: none
|
||||
*****************************************************************************/
|
||||
int usbCamInitDefaultParameters(camera_hardware_t *camHal);
|
||||
|
||||
/******************************************************************************
|
||||
* Function: usbCamSetParameters
|
||||
* Description: This function parses the parameter string and stores the
|
||||
* parameters in the camera HAL handle
|
||||
*
|
||||
* Input parameters:
|
||||
* camHal - camera HAL handle
|
||||
* params - pointer to parameter string
|
||||
*
|
||||
* Return values:
|
||||
* 0 Success
|
||||
* -1 Error
|
||||
* Notes: none
|
||||
*****************************************************************************/
|
||||
int usbCamSetParameters(camera_hardware_t *camHal, const char *params);
|
||||
|
||||
/******************************************************************************
|
||||
* Function: usbCamGetParameters
|
||||
* Description: This function allocates memory for parameter string,
|
||||
* composes and returns the parameter string
|
||||
*
|
||||
* Input parameters:
|
||||
* camHal - camera HAL handle
|
||||
*
|
||||
* Return values:
|
||||
* Address to the parameter string
|
||||
*
|
||||
* Notes: none
|
||||
*****************************************************************************/
|
||||
char* usbCamGetParameters(camera_hardware_t *camHal);
|
||||
|
||||
/******************************************************************************
|
||||
* Function: usbCamPutParameters
|
||||
* Description: This function frees the memory allocated for parameter string
|
||||
*
|
||||
* Input parameters:
|
||||
* camHal - camera HAL handle
|
||||
* parms - Parameter string
|
||||
*
|
||||
* Return values:
|
||||
* 0 Success
|
||||
* -1 Error
|
||||
* Notes: none
|
||||
*****************************************************************************/
|
||||
void usbCamPutParameters(camera_hardware_t *camHal, char *parms);
|
||||
|
||||
}; // namespace android
|
||||
|
||||
#endif /* ANDROID_HARDWARE_QCAMERA_USB_PARM_H */
|
|
@ -1,202 +0,0 @@
|
|||
/* Copyright (c) 2012, The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer in the documentation and/or other materials provided
|
||||
* with the distribution.
|
||||
* * Neither the name of The Linux Foundation nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
|
||||
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
||||
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef ANDROID_HARDWARE_QCAMERA_USB_PRIV_H
|
||||
#define ANDROID_HARDWARE_QCAMERA_USB_PRIV_H
|
||||
|
||||
namespace android {
|
||||
|
||||
/* File name length in number of characters */
|
||||
#define FILENAME_LENGTH (256)
|
||||
|
||||
/* Number of display buffers (in addition to minimum number of undequed buffers */
|
||||
#define PRVW_DISP_BUF_CNT 2
|
||||
|
||||
/* Number of V4L2 capture buffers. */
|
||||
#define PRVW_CAP_BUF_CNT 4
|
||||
|
||||
/* Maximum buffer size for JPEG output in number of bytes */
|
||||
#define MAX_JPEG_BUFFER_SIZE (1024 * 1024)
|
||||
|
||||
/* Preview loop commands */
|
||||
#define USB_CAM_PREVIEW_EXIT (0x100)
|
||||
#define USB_CAM_PREVIEW_PAUSE (0x101)
|
||||
#define USB_CAM_PREVIEW_TAKEPIC (0x200)
|
||||
|
||||
/******************************************************************************
|
||||
* Macro function to input validate device handle
|
||||
*****************************************************************************/
|
||||
#define VALIDATE_DEVICE_HDL(camHal, device, ret_err_code) {\
|
||||
if(device && device->priv){\
|
||||
camHal = (camera_hardware_t *)device->priv;\
|
||||
}else{\
|
||||
ALOGE("%s: Null device or device->priv", __func__);\
|
||||
return ret_err_code;\
|
||||
}\
|
||||
}\
|
||||
|
||||
/******************************************************************************
|
||||
* Macro function to check return status of a function, log and exit the thread
|
||||
*****************************************************************************/
|
||||
#define ERROR_CHECK_EXIT_THREAD(rc, string) {\
|
||||
if(rc < 0) {\
|
||||
ALOGE("%s: Error %s", __func__, string);\
|
||||
return (void *)-1;\
|
||||
}\
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* Macro function to check return status of a function, log and exit
|
||||
*****************************************************************************/
|
||||
#define ERROR_CHECK_EXIT(rc, string) {\
|
||||
if(rc < 0) {\
|
||||
ALOGE("%s: Error %s", __func__, string);\
|
||||
return -1;\
|
||||
}\
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* Macro function to Print the parameter string 1000 characters at a time
|
||||
******************************************************************************/
|
||||
#define PRINT_PARAM_STR(parms) {\
|
||||
char temp[1001] = {0};\
|
||||
int n=0;\
|
||||
while(1) {\
|
||||
strlcpy(temp,parms+n,1000);\
|
||||
ALOGD("parms = %s", temp);\
|
||||
if (strlen(temp) < 1000) break;\
|
||||
n += 1000;\
|
||||
}\
|
||||
}\
|
||||
|
||||
/******************************************************************************
|
||||
* Macro function to open camera
|
||||
*****************************************************************************/
|
||||
#define USB_CAM_OPEN(camHal) {\
|
||||
camHal->fd = open(camHal->dev_name, O_RDWR | O_NONBLOCK, 0);\
|
||||
if(!camHal->fd)\
|
||||
ALOGE("%s: Error in open", __func__);\
|
||||
else\
|
||||
ALOGD("%s: Successfully opened", __func__);\
|
||||
}\
|
||||
|
||||
/******************************************************************************
|
||||
* Macro function to close camera
|
||||
*****************************************************************************/
|
||||
#define USB_CAM_CLOSE(camHal) {\
|
||||
int rc;\
|
||||
if(camHal->fd){\
|
||||
rc = close(camHal->fd);\
|
||||
if(0 > rc){\
|
||||
ALOGE("%s: close failed ", __func__);\
|
||||
}\
|
||||
else{\
|
||||
camHal->fd = 0;\
|
||||
ALOGD("%s: close successful", __func__);\
|
||||
}\
|
||||
}\
|
||||
}\
|
||||
|
||||
struct bufObj {
|
||||
void *data;
|
||||
int len;
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
camera_device hw_dev;
|
||||
Mutex lock;
|
||||
int previewEnabledFlag;
|
||||
int prvwStoppedForPicture;
|
||||
int msgEnabledFlag;
|
||||
volatile int prvwCmdPending;
|
||||
volatile int prvwCmd;
|
||||
pthread_t previewThread;
|
||||
pthread_t takePictureThread;
|
||||
|
||||
camera_notify_callback notify_cb;
|
||||
camera_data_callback data_cb;
|
||||
camera_data_timestamp_callback data_cb_timestamp;
|
||||
camera_request_memory get_memory;
|
||||
void* cb_ctxt;
|
||||
|
||||
/* capture related members */
|
||||
/* prevFormat is pixel format of preview buffers that are exported */
|
||||
int prevFormat;
|
||||
int prevFps;
|
||||
int prevWidth;
|
||||
int prevHeight;
|
||||
/* captureFormat is internal setting for USB camera buffers */
|
||||
int captureFormat;
|
||||
char dev_name[FILENAME_LENGTH];
|
||||
int fd;
|
||||
unsigned int n_buffers;
|
||||
struct v4l2_buffer curCaptureBuf;
|
||||
struct bufObj *buffers;
|
||||
|
||||
/* Display related members */
|
||||
preview_stream_ops* window;
|
||||
QCameraHalMemory_t previewMem;
|
||||
/* dispFormat is preview display format.Same as preview buffer format*/
|
||||
int dispFormat;
|
||||
int dispWidth;
|
||||
int dispHeight;
|
||||
|
||||
/* MJPEG decoder related members */
|
||||
/* MJPEG decoder object */
|
||||
void* mjpegd;
|
||||
|
||||
/* JPEG picture and thumbnail related members */
|
||||
int pictFormat;
|
||||
int pictWidth;
|
||||
int pictHeight;
|
||||
int pictJpegQlty;
|
||||
int thumbnailWidth;
|
||||
int thumbnailHeight;
|
||||
int thumbnailJpegQlty;
|
||||
QCameraHalMemory_t pictMem;
|
||||
int takePictInProgress;
|
||||
int jpegEncInProgress;
|
||||
pthread_mutex_t jpegEncMutex;
|
||||
pthread_cond_t jpegEncCond;
|
||||
|
||||
/* */
|
||||
QCameraParameters qCamParams;
|
||||
String8 prevSizeValues;
|
||||
String8 pictSizeValues;
|
||||
String8 thumbnailSizeValues;
|
||||
String8 vidSizeValues;
|
||||
String8 pictFormatValues;
|
||||
String8 prevFormatValues;
|
||||
String8 prevFpsRangesValues;
|
||||
|
||||
} camera_hardware_t;
|
||||
|
||||
|
||||
}; // namespace android
|
||||
|
||||
#endif /* ANDROID_HARDWARE_QCAMERA_USB_PRIV_H */
|
|
@ -1,243 +0,0 @@
|
|||
/* Copyright (c) 2011-2012, The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer in the documentation and/or other materials provided
|
||||
* with the distribution.
|
||||
* * Neither the name of The Linux Foundation nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
|
||||
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
||||
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef ANDROID_HARDWARE_QUALCOMM_CAMERA_USBCAM_H
|
||||
#define ANDROID_HARDWARE_QUALCOMM_CAMERA_USBCAM_H
|
||||
|
||||
extern "C" {
|
||||
#include <sys/time.h>
|
||||
}
|
||||
|
||||
#include "QCameraHWI.h"
|
||||
|
||||
extern "C" {
|
||||
|
||||
/*#include <hardware/camera.h>*/
|
||||
|
||||
int usbcam_get_number_of_cameras();
|
||||
int usbcam_get_camera_info(int camera_id, struct camera_info *info);
|
||||
|
||||
int usbcam_camera_device_open(const struct hw_module_t* module, const char* id,
|
||||
struct hw_device_t** device);
|
||||
|
||||
hw_device_t * usbcam_open_camera_device(int cameraId);
|
||||
|
||||
int usbcam_close_camera_device( hw_device_t *);
|
||||
|
||||
namespace android {
|
||||
|
||||
/** Set the ANativeWindow to which preview frames are sent */
|
||||
int usbcam_set_preview_window(struct camera_device *,
|
||||
struct preview_stream_ops *window);
|
||||
|
||||
/** Set the notification and data callbacks */
|
||||
void usbcam_set_CallBacks(struct camera_device *,
|
||||
camera_notify_callback notify_cb,
|
||||
camera_data_callback data_cb,
|
||||
camera_data_timestamp_callback data_cb_timestamp,
|
||||
camera_request_memory get_memory,
|
||||
void *user);
|
||||
|
||||
/**
|
||||
* The following three functions all take a msg_type, which is a bitmask of
|
||||
* the messages defined in include/ui/Camera.h
|
||||
*/
|
||||
|
||||
/**
|
||||
* Enable a message, or set of messages.
|
||||
*/
|
||||
void usbcam_enable_msg_type(struct camera_device *, int32_t msg_type);
|
||||
|
||||
/**
|
||||
* Disable a message, or a set of messages.
|
||||
*
|
||||
* Once received a call to disableMsgType(CAMERA_MSG_VIDEO_FRAME), camera
|
||||
* HAL should not rely on its client to call releaseRecordingFrame() to
|
||||
* release video recording frames sent out by the cameral HAL before and
|
||||
* after the disableMsgType(CAMERA_MSG_VIDEO_FRAME) call. Camera HAL
|
||||
* clients must not modify/access any video recording frame after calling
|
||||
* disableMsgType(CAMERA_MSG_VIDEO_FRAME).
|
||||
*/
|
||||
void usbcam_disable_msg_type(struct camera_device *, int32_t msg_type);
|
||||
|
||||
/**
|
||||
* Query whether a message, or a set of messages, is enabled. Note that
|
||||
* this is operates as an AND, if any of the messages queried are off, this
|
||||
* will return false.
|
||||
*/
|
||||
int usbcam_msg_type_enabled(struct camera_device *, int32_t msg_type);
|
||||
|
||||
/**
|
||||
* Start preview mode.
|
||||
*/
|
||||
int usbcam_start_preview(struct camera_device *);
|
||||
|
||||
/**
|
||||
* Stop a previously started preview.
|
||||
*/
|
||||
void usbcam_stop_preview(struct camera_device *);
|
||||
|
||||
/**
|
||||
* Returns true if preview is enabled.
|
||||
*/
|
||||
int usbcam_preview_enabled(struct camera_device *);
|
||||
|
||||
/**
|
||||
* Request the camera HAL to store meta data or real YUV data in the video
|
||||
* buffers sent out via CAMERA_MSG_VIDEO_FRAME for a recording session. If
|
||||
* it is not called, the default camera HAL behavior is to store real YUV
|
||||
* data in the video buffers.
|
||||
*
|
||||
* This method should be called before startRecording() in order to be
|
||||
* effective.
|
||||
*
|
||||
* If meta data is stored in the video buffers, it is up to the receiver of
|
||||
* the video buffers to interpret the contents and to find the actual frame
|
||||
* data with the help of the meta data in the buffer. How this is done is
|
||||
* outside of the scope of this method.
|
||||
*
|
||||
* Some camera HALs may not support storing meta data in the video buffers,
|
||||
* but all camera HALs should support storing real YUV data in the video
|
||||
* buffers. If the camera HAL does not support storing the meta data in the
|
||||
* video buffers when it is requested to do do, INVALID_OPERATION must be
|
||||
* returned. It is very useful for the camera HAL to pass meta data rather
|
||||
* than the actual frame data directly to the video encoder, since the
|
||||
* amount of the uncompressed frame data can be very large if video size is
|
||||
* large.
|
||||
*
|
||||
* @param enable if true to instruct the camera HAL to store
|
||||
* meta data in the video buffers; false to instruct
|
||||
* the camera HAL to store real YUV data in the video
|
||||
* buffers.
|
||||
*
|
||||
* @return OK on success.
|
||||
*/
|
||||
int usbcam_store_meta_data_in_buffers(struct camera_device *, int enable);
|
||||
|
||||
/**
|
||||
* Start record mode. When a record image is available, a
|
||||
* CAMERA_MSG_VIDEO_FRAME message is sent with the corresponding
|
||||
* frame. Every record frame must be released by a camera HAL client via
|
||||
* releaseRecordingFrame() before the client calls
|
||||
* disableMsgType(CAMERA_MSG_VIDEO_FRAME). After the client calls
|
||||
* disableMsgType(CAMERA_MSG_VIDEO_FRAME), it is the camera HAL's
|
||||
* responsibility to manage the life-cycle of the video recording frames,
|
||||
* and the client must not modify/access any video recording frames.
|
||||
*/
|
||||
int usbcam_start_recording(struct camera_device *);
|
||||
|
||||
/**
|
||||
* Stop a previously started recording.
|
||||
*/
|
||||
void usbcam_stop_recording(struct camera_device *);
|
||||
|
||||
/**
|
||||
* Returns true if recording is enabled.
|
||||
*/
|
||||
int usbcam_recording_enabled(struct camera_device *);
|
||||
|
||||
/**
|
||||
* Release a record frame previously returned by CAMERA_MSG_VIDEO_FRAME.
|
||||
*
|
||||
* It is camera HAL client's responsibility to release video recording
|
||||
* frames sent out by the camera HAL before the camera HAL receives a call
|
||||
* to disableMsgType(CAMERA_MSG_VIDEO_FRAME). After it receives the call to
|
||||
* disableMsgType(CAMERA_MSG_VIDEO_FRAME), it is the camera HAL's
|
||||
* responsibility to manage the life-cycle of the video recording frames.
|
||||
*/
|
||||
void usbcam_release_recording_frame(struct camera_device *,
|
||||
const void *opaque);
|
||||
|
||||
/**
|
||||
* Start auto focus, the notification callback routine is called with
|
||||
* CAMERA_MSG_FOCUS once when focusing is complete. autoFocus() will be
|
||||
* called again if another auto focus is needed.
|
||||
*/
|
||||
int usbcam_auto_focus(struct camera_device *);
|
||||
|
||||
/**
|
||||
* Cancels auto-focus function. If the auto-focus is still in progress,
|
||||
* this function will cancel it. Whether the auto-focus is in progress or
|
||||
* not, this function will return the focus position to the default. If
|
||||
* the camera does not support auto-focus, this is a no-op.
|
||||
*/
|
||||
int usbcam_cancel_auto_focus(struct camera_device *);
|
||||
|
||||
/**
|
||||
* Take a picture.
|
||||
*/
|
||||
int usbcam_take_picture(struct camera_device *);
|
||||
|
||||
/**
|
||||
* Cancel a picture that was started with takePicture. Calling this method
|
||||
* when no picture is being taken is a no-op.
|
||||
*/
|
||||
int usbcam_cancel_picture(struct camera_device *);
|
||||
|
||||
/**
|
||||
* Set the camera parameters. This returns BAD_VALUE if any parameter is
|
||||
* invalid or not supported.
|
||||
*/
|
||||
int usbcam_set_parameters(struct camera_device *, const char *parms);
|
||||
|
||||
//status_t setParameters(const QCameraParameters& params);
|
||||
/** Retrieve the camera parameters. The buffer returned by the camera HAL
|
||||
must be returned back to it with put_parameters, if put_parameters
|
||||
is not NULL.
|
||||
*/
|
||||
char* usbcam_get_parameters(struct camera_device *);
|
||||
|
||||
/** The camera HAL uses its own memory to pass us the parameters when we
|
||||
call get_parameters. Use this function to return the memory back to
|
||||
the camera HAL, if put_parameters is not NULL. If put_parameters
|
||||
is NULL, then you have to use free() to release the memory.
|
||||
*/
|
||||
void usbcam_put_parameters(struct camera_device *, char *);
|
||||
|
||||
/**
|
||||
* Send command to camera driver.
|
||||
*/
|
||||
int usbcam_send_command(struct camera_device *,
|
||||
int32_t cmd, int32_t arg1, int32_t arg2);
|
||||
|
||||
/**
|
||||
* Release the hardware resources owned by this object. Note that this is
|
||||
* *not* done in the destructor.
|
||||
*/
|
||||
void usbcam_release(struct camera_device *);
|
||||
|
||||
/**
|
||||
* Dump state of the camera hardware
|
||||
*/
|
||||
int usbcam_dump(struct camera_device *, int fd);
|
||||
|
||||
}; // namespace android
|
||||
|
||||
} //extern "C"
|
||||
|
||||
#endif
|
|
@ -1,701 +0,0 @@
|
|||
/* Copyright (c) 2011-2012, The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer in the documentation and/or other materials provided
|
||||
* with the distribution.
|
||||
* * Neither the name of The Linux Foundation nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
|
||||
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
||||
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
//#define ALOG_NDEBUG 0
|
||||
#define ALOG_NIDEBUG 0
|
||||
#define LOG_TAG "QCameraMjpegDecode"
|
||||
#include <utils/Log.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <pthread.h>
|
||||
|
||||
extern "C" {
|
||||
#include "jpeg_buffer.h"
|
||||
#include "jpeg_common.h"
|
||||
#include "jpegd.h"
|
||||
}
|
||||
|
||||
#include "QCameraMjpegDecode.h"
|
||||
|
||||
/* TBDJ: Can be removed */
|
||||
#define MIN(a,b) (((a) < (b)) ? (a) : (b))
|
||||
|
||||
// Abstract the return type of the function to be run as a thread
|
||||
#define OS_THREAD_FUNC_RET_T void *
|
||||
|
||||
// Abstract the argument type to the thread function
|
||||
#define OS_THREAD_FUNC_ARG_T void *
|
||||
|
||||
// Helpful constants for return values in the thread functions
|
||||
#define OS_THREAD_FUNC_RET_SUCCEEDED (OS_THREAD_FUNC_RET_T)0
|
||||
#define OS_THREAD_FUNC_RET_FAILED (OS_THREAD_FUNC_RET_T)1
|
||||
|
||||
// Abstract the function modifier placed in the beginning of the thread
|
||||
// declaration (empty for Linux)
|
||||
#define OS_THREAD_FUNC_MODIFIER
|
||||
|
||||
#define os_mutex_init(a) pthread_mutex_init(a, NULL)
|
||||
#define os_cond_init(a) pthread_cond_init(a, NULL)
|
||||
#define os_mutex_lock pthread_mutex_lock
|
||||
#define os_mutex_unlock pthread_mutex_unlock
|
||||
#define os_cond_wait pthread_cond_wait
|
||||
#define os_cond_signal pthread_cond_signal
|
||||
|
||||
const char event_to_string[4][14] =
|
||||
{
|
||||
"EVENT_DONE",
|
||||
"EVENT_WARNING",
|
||||
"EVENT_ERROR",
|
||||
};
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint32_t width;
|
||||
uint32_t height;
|
||||
uint32_t format;
|
||||
uint32_t preference;
|
||||
uint32_t abort_time;
|
||||
uint16_t back_to_back_count;
|
||||
/* TBDJ: Is this required */
|
||||
int32_t rotation;
|
||||
/* TBDJ: Is this required */
|
||||
jpeg_rectangle_t region;
|
||||
/* TBDJ: Is this required */
|
||||
jpegd_scale_type_t scale_factor;
|
||||
uint32_t hw_rotation;
|
||||
|
||||
char* inputMjpegBuffer;
|
||||
int inputMjpegBufferSize;
|
||||
char* outputYptr;
|
||||
char* outputUVptr;
|
||||
|
||||
} test_args_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int tid;
|
||||
pthread_t thread;
|
||||
jpegd_obj_t decoder;
|
||||
uint8_t decoding;
|
||||
uint8_t decode_success;
|
||||
pthread_mutex_t mutex;
|
||||
pthread_cond_t cond;
|
||||
test_args_t *p_args;
|
||||
jpegd_output_buf_t *p_whole_output_buf;
|
||||
|
||||
} thread_ctrl_blk_t;
|
||||
|
||||
OS_THREAD_FUNC_RET_T OS_THREAD_FUNC_MODIFIER decoder_test(OS_THREAD_FUNC_ARG_T p_thread_args);
|
||||
void decoder_event_handler(void *p_user_data,
|
||||
jpeg_event_t event,
|
||||
void *p_arg);
|
||||
int decoder_output_handler(void *p_user_data,
|
||||
jpegd_output_buf_t *p_output_buffer,
|
||||
uint32_t first_row_id,
|
||||
uint8_t is_last_buffer);
|
||||
uint32_t decoder_input_req_handler(void *p_user_data,
|
||||
jpeg_buffer_t buffer,
|
||||
uint32_t start_offset,
|
||||
uint32_t length);
|
||||
static void* insertHuffmanTable(void *p, int size);
|
||||
|
||||
static int mjpegd_timer_start(timespec *p_timer);
|
||||
static int mjpegd_timer_get_elapsed(timespec *p_timer, int *elapsed_in_ms, uint8_t reset_start);
|
||||
static int mjpegd_cond_timedwait(pthread_cond_t *p_cond, pthread_mutex_t *p_mutex, uint32_t ms);
|
||||
|
||||
// Global variables
|
||||
/* TBDJ: can be removed */
|
||||
thread_ctrl_blk_t *thread_ctrl_blks = NULL;
|
||||
|
||||
/*
|
||||
* This function initializes the mjpeg decoder and returns the object
|
||||
*/
|
||||
MJPEGD_ERR mjpegDecoderInit(void** mjpegd_obj)
|
||||
{
|
||||
test_args_t* mjpegd;
|
||||
|
||||
ALOGD("%s: E", __func__);
|
||||
|
||||
mjpegd = (test_args_t *)malloc(sizeof(test_args_t));
|
||||
if(!mjpegd)
|
||||
return MJPEGD_INSUFFICIENT_MEM;
|
||||
|
||||
memset(mjpegd, 0, sizeof(test_args_t));
|
||||
|
||||
/* Defaults */
|
||||
/* Due to current limitation, s/w decoder is selected always */
|
||||
mjpegd->preference = JPEG_DECODER_PREF_HW_ACCELERATED_PREFERRED;
|
||||
mjpegd->back_to_back_count = 1;
|
||||
mjpegd->rotation = 0;
|
||||
mjpegd->hw_rotation = 0;
|
||||
mjpegd->scale_factor = (jpegd_scale_type_t)1;
|
||||
|
||||
/* TBDJ: can be removed */
|
||||
mjpegd->width = 640;
|
||||
mjpegd->height = 480;
|
||||
mjpegd->abort_time = 0;
|
||||
|
||||
*mjpegd_obj = (void *)mjpegd;
|
||||
|
||||
ALOGD("%s: X", __func__);
|
||||
return MJPEGD_NO_ERROR;
|
||||
}
|
||||
|
||||
MJPEGD_ERR mjpegDecode(
|
||||
void* mjpegd_obj,
|
||||
char* inputMjpegBuffer,
|
||||
int inputMjpegBufferSize,
|
||||
char* outputYptr,
|
||||
char* outputUVptr,
|
||||
int outputFormat)
|
||||
{
|
||||
int rc, c, i;
|
||||
test_args_t* mjpegd;
|
||||
test_args_t test_args;
|
||||
|
||||
ALOGD("%s: E", __func__);
|
||||
/* store input arguments in the context */
|
||||
mjpegd = (test_args_t*) mjpegd_obj;
|
||||
mjpegd->inputMjpegBuffer = inputMjpegBuffer;
|
||||
mjpegd->inputMjpegBufferSize = inputMjpegBufferSize;
|
||||
mjpegd->outputYptr = outputYptr;
|
||||
mjpegd->outputUVptr = outputUVptr;
|
||||
mjpegd->format = outputFormat;
|
||||
|
||||
/* TBDJ: can be removed */
|
||||
memcpy(&test_args, mjpegd, sizeof(test_args_t));
|
||||
|
||||
// check the formats
|
||||
if (((test_args.format == YCRCBLP_H1V2) || (test_args.format == YCBCRLP_H1V2) ||
|
||||
(test_args.format == YCRCBLP_H1V1) || (test_args.format == YCBCRLP_H1V1)) &&
|
||||
!(test_args.preference == JPEG_DECODER_PREF_HW_ACCELERATED_ONLY)) {
|
||||
ALOGE("%s:These formats are not supported by SW format %d", __func__, test_args.format);
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Create thread control blocks
|
||||
thread_ctrl_blks = (thread_ctrl_blk_t *)malloc( sizeof(thread_ctrl_blk_t));
|
||||
if (!thread_ctrl_blks)
|
||||
{
|
||||
ALOGE("%s: decoder_test failed: insufficient memory in creating thread control blocks", __func__);
|
||||
return 1;
|
||||
}
|
||||
memset(thread_ctrl_blks, 0, sizeof(thread_ctrl_blk_t));
|
||||
// Initialize the blocks and kick off the threads
|
||||
thread_ctrl_blks[i].tid = i;
|
||||
thread_ctrl_blks[i].p_args = &test_args;
|
||||
os_mutex_init(&thread_ctrl_blks[i].mutex);
|
||||
os_cond_init(&thread_ctrl_blks[i].cond);
|
||||
|
||||
rc = (int)decoder_test(&thread_ctrl_blks[i]);
|
||||
|
||||
if (!rc)
|
||||
ALOGD("%s: decoder_test finished successfully ", __func__);
|
||||
else
|
||||
ALOGE("%s: decoder_test failed",__func__);
|
||||
|
||||
ALOGD("%s: X rc: %d", __func__, rc);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
OS_THREAD_FUNC_RET_T OS_THREAD_FUNC_MODIFIER decoder_test(OS_THREAD_FUNC_ARG_T arg)
|
||||
{
|
||||
int rc, i;
|
||||
jpegd_obj_t decoder;
|
||||
jpegd_src_t source;
|
||||
jpegd_dst_t dest;
|
||||
jpegd_cfg_t config;
|
||||
jpeg_hdr_t header;
|
||||
jpegd_output_buf_t p_output_buffers;
|
||||
uint32_t output_buffers_count = 1; // currently only 1 buffer a time is supported
|
||||
uint8_t use_pmem = true;
|
||||
timespec os_timer;
|
||||
thread_ctrl_blk_t *p_thread_arg = (thread_ctrl_blk_t *)arg;
|
||||
test_args_t *p_args = p_thread_arg->p_args;
|
||||
uint32_t output_width;
|
||||
uint32_t output_height;
|
||||
uint32_t total_time = 0;
|
||||
|
||||
ALOGD("%s: E", __func__);
|
||||
|
||||
// Determine whether pmem should be used (useful for pc environment testing where
|
||||
// pmem is not available)
|
||||
if ((jpegd_preference_t)p_args->preference == JPEG_DECODER_PREF_SOFTWARE_PREFERRED ||
|
||||
(jpegd_preference_t)p_args->preference == JPEG_DECODER_PREF_SOFTWARE_ONLY) {
|
||||
use_pmem = false;
|
||||
}
|
||||
|
||||
if (((jpegd_preference_t)p_args->preference !=
|
||||
JPEG_DECODER_PREF_HW_ACCELERATED_ONLY) &&
|
||||
((jpegd_preference_t)p_args->scale_factor > 0)) {
|
||||
ALOGI("%s: Setting scale factor to 1x", __func__);
|
||||
}
|
||||
|
||||
ALOGD("%s: before jpegd_init p_thread_arg: %p", __func__, p_thread_arg);
|
||||
|
||||
// Initialize decoder
|
||||
rc = jpegd_init(&decoder,
|
||||
&decoder_event_handler,
|
||||
&decoder_output_handler,
|
||||
p_thread_arg);
|
||||
|
||||
if (JPEG_FAILED(rc)) {
|
||||
ALOGE("%s: decoder_test: jpegd_init failed", __func__);
|
||||
goto fail;
|
||||
}
|
||||
p_thread_arg->decoder = decoder;
|
||||
|
||||
// Set source information
|
||||
source.p_input_req_handler = &decoder_input_req_handler;
|
||||
source.total_length = p_args->inputMjpegBufferSize & 0xffffffff;
|
||||
|
||||
rc = jpeg_buffer_init(&source.buffers[0]);
|
||||
if (JPEG_SUCCEEDED(rc)) {
|
||||
/* TBDJ: why buffer [1] */
|
||||
rc = jpeg_buffer_init(&source.buffers[1]);
|
||||
}
|
||||
if (JPEG_SUCCEEDED(rc)) {
|
||||
#if 1
|
||||
rc = jpeg_buffer_allocate(source.buffers[0], 0xA000, use_pmem);
|
||||
#else
|
||||
rc = jpeg_buffer_use_external_buffer(source.buffers[0],
|
||||
(uint8_t *)p_args->inputMjpegBuffer,
|
||||
p_args->inputMjpegBufferSize,
|
||||
0);
|
||||
#endif
|
||||
ALOGD("%s: source.buffers[0]:%p compressed buffer ptr = %p", __func__,
|
||||
source.buffers[0], p_args->inputMjpegBuffer);
|
||||
}
|
||||
if (JPEG_SUCCEEDED(rc)) {
|
||||
#if 1
|
||||
rc = jpeg_buffer_allocate(source.buffers[1], 0xA000, use_pmem);
|
||||
#else
|
||||
rc = jpeg_buffer_use_external_buffer(source.buffers[1],
|
||||
(uint8_t *)p_args->inputMjpegBuffer,
|
||||
p_args->inputMjpegBufferSize,
|
||||
0);
|
||||
#endif
|
||||
ALOGD("%s: source.buffers[1]:%p compressed buffer ptr = %p", __func__,
|
||||
source.buffers[1], p_args->inputMjpegBuffer);
|
||||
}
|
||||
if (JPEG_FAILED(rc)) {
|
||||
jpeg_buffer_destroy(&source.buffers[0]);
|
||||
jpeg_buffer_destroy(&source.buffers[1]);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
ALOGI("%s: *** Starting back-to-back decoding of %d frame(s)***\n",
|
||||
__func__, p_args->back_to_back_count);
|
||||
|
||||
// Loop to perform n back-to-back decoding (to the same output file)
|
||||
for(i = 0; i < p_args->back_to_back_count; i++) {
|
||||
if(mjpegd_timer_start(&os_timer) < 0) {
|
||||
ALOGE("%s: failed to get start time", __func__);
|
||||
}
|
||||
|
||||
/* TBDJ: Every frame? */
|
||||
ALOGD("%s: before jpegd_set_source source.p_arg:%p", __func__, source.p_arg);
|
||||
rc = jpegd_set_source(decoder, &source);
|
||||
if (JPEG_FAILED(rc))
|
||||
{
|
||||
ALOGE("%s: jpegd_set_source failed", __func__);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
rc = jpegd_read_header(decoder, &header);
|
||||
if (JPEG_FAILED(rc))
|
||||
{
|
||||
ALOGE("%s: jpegd_read_header failed", __func__);
|
||||
goto fail;
|
||||
}
|
||||
p_args->width = header.main.width;
|
||||
p_args->height = header.main.height;
|
||||
ALOGD("%s: main dimension: (%dx%d) subsampling: (%d)", __func__,
|
||||
header.main.width, header.main.height, (int)header.main.subsampling);
|
||||
|
||||
// main image decoding:
|
||||
// Set destination information
|
||||
dest.width = (p_args->width) ? (p_args->width) : header.main.width;
|
||||
dest.height = (p_args->height) ? (p_args->height) : header.main.height;
|
||||
dest.output_format = (jpeg_color_format_t) p_args->format;
|
||||
dest.region = p_args->region;
|
||||
|
||||
// if region is defined, re-assign the output width/height
|
||||
output_width = dest.width;
|
||||
output_height = dest.height;
|
||||
|
||||
if (p_args->region.right || p_args->region.bottom)
|
||||
{
|
||||
if (0 == p_args->rotation || 180 == p_args->rotation)
|
||||
{
|
||||
output_width = MIN((dest.width),
|
||||
(uint32_t)(dest.region.right - dest.region.left + 1));
|
||||
output_height = MIN((dest.height),
|
||||
(uint32_t)(dest.region.bottom - dest.region.top + 1));
|
||||
}
|
||||
// Swap output width/height for 90/270 rotation cases
|
||||
else if (90 == p_args->rotation || 270 == p_args->rotation)
|
||||
{
|
||||
output_height = MIN((dest.height),
|
||||
(uint32_t)(dest.region.right - dest.region.left + 1));
|
||||
output_width = MIN((dest.width),
|
||||
(uint32_t)(dest.region.bottom - dest.region.top + 1));
|
||||
}
|
||||
// Unsupported rotation cases
|
||||
else
|
||||
{
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
|
||||
if (dest.output_format == YCRCBLP_H2V2 || dest.output_format == YCBCRLP_H2V2 ||
|
||||
dest.output_format == YCRCBLP_H2V1 || dest.output_format == YCBCRLP_H2V1 ||
|
||||
dest.output_format == YCRCBLP_H1V2 || dest.output_format == YCBCRLP_H1V2 ||
|
||||
dest.output_format == YCRCBLP_H1V1 || dest.output_format == YCBCRLP_H1V1) {
|
||||
jpeg_buffer_init(&p_output_buffers.data.yuv.luma_buf);
|
||||
jpeg_buffer_init(&p_output_buffers.data.yuv.chroma_buf);
|
||||
} else {
|
||||
jpeg_buffer_init(&p_output_buffers.data.rgb.rgb_buf);
|
||||
|
||||
}
|
||||
|
||||
{
|
||||
// Assign 0 to tile width and height
|
||||
// to indicate that no tiling is requested.
|
||||
p_output_buffers.tile_width = 0;
|
||||
p_output_buffers.tile_height = 0;
|
||||
}
|
||||
p_output_buffers.is_in_q = 0;
|
||||
|
||||
switch (dest.output_format)
|
||||
{
|
||||
case YCRCBLP_H2V2:
|
||||
case YCBCRLP_H2V2:
|
||||
// case YCRCBLP_H2V1:
|
||||
// case YCBCRLP_H2V1:
|
||||
// case YCRCBLP_H1V2:
|
||||
// case YCBCRLP_H1V2:
|
||||
// case YCRCBLP_H1V1:
|
||||
// case YCBCRLP_H1V1:
|
||||
jpeg_buffer_use_external_buffer(
|
||||
p_output_buffers.data.yuv.luma_buf,
|
||||
(uint8_t*)p_args->outputYptr,
|
||||
p_args->width * p_args->height * SQUARE(p_args->scale_factor),
|
||||
0);
|
||||
jpeg_buffer_use_external_buffer(
|
||||
p_output_buffers.data.yuv.chroma_buf,
|
||||
(uint8_t*)p_args->outputUVptr,
|
||||
p_args->width * p_args->height / 2 * SQUARE(p_args->scale_factor),
|
||||
0);
|
||||
break;
|
||||
|
||||
default:
|
||||
ALOGE("%s: decoder_test: unsupported output format", __func__);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
// Set up configuration
|
||||
memset(&config, 0, sizeof(jpegd_cfg_t));
|
||||
config.preference = (jpegd_preference_t) p_args->preference;
|
||||
config.decode_from = JPEGD_DECODE_FROM_AUTO;
|
||||
config.rotation = p_args->rotation;
|
||||
config.scale_factor = p_args->scale_factor;
|
||||
config.hw_rotation = p_args->hw_rotation;
|
||||
dest.back_to_back_count = p_args->back_to_back_count;
|
||||
|
||||
// Start decoding
|
||||
p_thread_arg->decoding = true;
|
||||
|
||||
rc = jpegd_start(decoder, &config, &dest, &p_output_buffers, output_buffers_count);
|
||||
dest.back_to_back_count--;
|
||||
|
||||
if(JPEG_FAILED(rc)) {
|
||||
ALOGE("%s: decoder_test: jpegd_start failed (rc=%d)\n",
|
||||
__func__, rc);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
ALOGD("%s: decoder_test: jpegd_start succeeded", __func__);
|
||||
|
||||
// Do abort
|
||||
if (p_args->abort_time) {
|
||||
os_mutex_lock(&p_thread_arg->mutex);
|
||||
while (p_thread_arg->decoding)
|
||||
{
|
||||
rc = mjpegd_cond_timedwait(&p_thread_arg->cond, &p_thread_arg->mutex, p_args->abort_time);
|
||||
if (rc == JPEGERR_ETIMEDOUT)
|
||||
{
|
||||
// Do abort
|
||||
os_mutex_unlock(&p_thread_arg->mutex);
|
||||
rc = jpegd_abort(decoder);
|
||||
if (rc)
|
||||
{
|
||||
ALOGE("%s: decoder_test: jpegd_abort failed: %d", __func__, rc);
|
||||
goto fail;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (p_thread_arg->decoding)
|
||||
os_mutex_unlock(&p_thread_arg->mutex);
|
||||
} else {
|
||||
// Wait until decoding is done or stopped due to error
|
||||
os_mutex_lock(&p_thread_arg->mutex);
|
||||
while (p_thread_arg->decoding)
|
||||
{
|
||||
os_cond_wait(&p_thread_arg->cond, &p_thread_arg->mutex);
|
||||
}
|
||||
os_mutex_unlock(&p_thread_arg->mutex);
|
||||
}
|
||||
|
||||
int diff;
|
||||
// Display the time elapsed
|
||||
if (mjpegd_timer_get_elapsed(&os_timer, &diff, 0) < 0) {
|
||||
ALOGE("%s: decoder_test: failed to get elapsed time", __func__);
|
||||
} else {
|
||||
if(p_args->abort_time) {
|
||||
if(p_thread_arg->decoding) {
|
||||
ALOGI("%s: decoder_test: decoding aborted successfully after %d ms", __func__, diff);
|
||||
goto buffer_clean_up;
|
||||
}
|
||||
else
|
||||
{
|
||||
ALOGI("%s: decoder_test: decoding stopped before abort is issued. "
|
||||
"decode time: %d ms", __func__, diff);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if(p_thread_arg->decode_success) {
|
||||
total_time += diff;
|
||||
ALOGI("%s: decode time: %d ms (%d frame(s), total=%dms, avg=%dms/frame)",
|
||||
__func__, diff, i+1, total_time, total_time/(i+1));
|
||||
}
|
||||
else
|
||||
{
|
||||
fprintf(stderr, "decoder_test: decode failed\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(p_thread_arg->decode_success) {
|
||||
ALOGD("%s: Frame(s) = %d, Total Time = %dms, Avg. decode time = %dms/frame)\n",
|
||||
__func__, p_args->back_to_back_count, total_time, total_time/p_args->back_to_back_count);
|
||||
}
|
||||
|
||||
buffer_clean_up:
|
||||
// Clean up decoder and allocate buffers
|
||||
jpeg_buffer_destroy(&source.buffers[0]);
|
||||
jpeg_buffer_destroy(&source.buffers[1]);
|
||||
switch (dest.output_format)
|
||||
{
|
||||
case YCRCBLP_H2V2:
|
||||
case YCBCRLP_H2V2:
|
||||
case YCRCBLP_H2V1:
|
||||
case YCBCRLP_H2V1:
|
||||
case YCRCBLP_H1V2:
|
||||
case YCBCRLP_H1V2:
|
||||
case YCRCBLP_H1V1:
|
||||
case YCBCRLP_H1V1:
|
||||
jpeg_buffer_destroy(&p_output_buffers.data.yuv.luma_buf);
|
||||
jpeg_buffer_destroy(&p_output_buffers.data.yuv.chroma_buf);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
jpegd_destroy(&decoder);
|
||||
|
||||
if (!p_thread_arg->decode_success)
|
||||
{
|
||||
goto fail;
|
||||
}
|
||||
|
||||
ALOGD("%s: X", __func__);
|
||||
return OS_THREAD_FUNC_RET_SUCCEEDED;
|
||||
fail:
|
||||
|
||||
ALOGD("%s: X", __func__);
|
||||
return OS_THREAD_FUNC_RET_FAILED;
|
||||
}
|
||||
|
||||
void decoder_event_handler(void *p_user_data,
|
||||
jpeg_event_t event,
|
||||
void *p_arg)
|
||||
{
|
||||
thread_ctrl_blk_t *p_thread_arg = (thread_ctrl_blk_t *)p_user_data;
|
||||
|
||||
ALOGD("%s: E", __func__);
|
||||
|
||||
ALOGD("%s: Event: %s\n", __func__, event_to_string[event]);
|
||||
if (event == JPEG_EVENT_DONE)
|
||||
{
|
||||
p_thread_arg->decode_success = true;
|
||||
ALOGD("%s: decode_success: %d\n", __func__, p_thread_arg->decode_success);
|
||||
}
|
||||
// If it is not a warning event, decoder has stopped; Signal
|
||||
// main thread to clean up
|
||||
if (event != JPEG_EVENT_WARNING)
|
||||
{
|
||||
os_mutex_lock(&p_thread_arg->mutex);
|
||||
p_thread_arg->decoding = false;
|
||||
os_cond_signal(&p_thread_arg->cond);
|
||||
os_mutex_unlock(&p_thread_arg->mutex);
|
||||
}
|
||||
ALOGD("%s: X", __func__);
|
||||
|
||||
}
|
||||
|
||||
// consumes the output buffer.
|
||||
/*TBDJ: Can be removed. Is this related to tiling */
|
||||
int decoder_output_handler(void *p_user_data,
|
||||
jpegd_output_buf_t *p_output_buffer,
|
||||
uint32_t first_row_id,
|
||||
uint8_t is_last_buffer)
|
||||
{
|
||||
uint8_t* whole_output_buf_ptr, *tiling_buf_ptr;
|
||||
|
||||
ALOGD("%s: E", __func__);
|
||||
|
||||
thread_ctrl_blk_t *p_thread_arg = (thread_ctrl_blk_t *)p_user_data;
|
||||
|
||||
jpeg_buffer_get_addr(p_thread_arg->p_whole_output_buf->data.rgb.rgb_buf, &whole_output_buf_ptr);
|
||||
jpeg_buffer_get_addr(p_output_buffer->data.rgb.rgb_buf, &tiling_buf_ptr);
|
||||
|
||||
if (p_output_buffer->tile_height != 1)
|
||||
return JPEGERR_EUNSUPPORTED;
|
||||
|
||||
// testing purpose only
|
||||
// This is to simulate that the user needs to bail out when error happens
|
||||
// in the middle of decoding
|
||||
//if (first_row_id == 162)
|
||||
// return JPEGERR_EFAILED;
|
||||
|
||||
// do not enqueue any buffer if it reaches the last buffer
|
||||
if (!is_last_buffer)
|
||||
{
|
||||
jpegd_enqueue_output_buf(p_thread_arg->decoder, p_output_buffer, 1);
|
||||
}
|
||||
ALOGD("%s: X", __func__);
|
||||
|
||||
return JPEGERR_SUCCESS;
|
||||
}
|
||||
|
||||
// p_reader->p_input_req_handler(p_reader->decoder,
|
||||
// p_reader->p_input_buf,
|
||||
// p_reader->next_byte_offset,
|
||||
// MAX_BYTES_TO_FETCH);
|
||||
|
||||
uint32_t decoder_input_req_handler(void *p_user_data,
|
||||
jpeg_buffer_t buffer,
|
||||
uint32_t start_offset,
|
||||
uint32_t length)
|
||||
{
|
||||
uint32_t buf_size;
|
||||
uint8_t *buf_ptr;
|
||||
int bytes_to_read, bytes_read, rc;
|
||||
thread_ctrl_blk_t *p_thread_arg = (thread_ctrl_blk_t *)p_user_data;
|
||||
thread_ctrl_blk_t *thread_ctrl_blk = (thread_ctrl_blk_t *)p_user_data;
|
||||
test_args_t* mjpegd = (test_args_t*) thread_ctrl_blk->p_args;
|
||||
|
||||
ALOGD("%s: E", __func__);
|
||||
|
||||
jpeg_buffer_get_max_size(buffer, &buf_size);
|
||||
jpeg_buffer_get_addr(buffer, &buf_ptr);
|
||||
bytes_to_read = (length < buf_size) ? length : buf_size;
|
||||
bytes_read = 0;
|
||||
|
||||
ALOGD("%s: buf_ptr = %p, start_offset = %d, length = %d buf_size = %d bytes_to_read = %d", __func__, buf_ptr, start_offset, length, buf_size, bytes_to_read);
|
||||
if (bytes_to_read)
|
||||
{
|
||||
/* TBDJ: Should avoid this Mem copy */
|
||||
#if 1
|
||||
memcpy(buf_ptr, (char *)mjpegd->inputMjpegBuffer + start_offset, bytes_to_read);
|
||||
#else
|
||||
if(JPEGERR_SUCCESS != jpeg_buffer_set_start_offset(buffer, start_offset))
|
||||
ALOGE("%s: jpeg_buffer_set_start_offset failed", __func__);
|
||||
#endif
|
||||
bytes_read = bytes_to_read;
|
||||
}
|
||||
|
||||
ALOGD("%s: X", __func__);
|
||||
return bytes_read;
|
||||
}
|
||||
|
||||
static int mjpegd_timer_start(timespec *p_timer)
|
||||
{
|
||||
if (!p_timer)
|
||||
return JPEGERR_ENULLPTR;
|
||||
|
||||
if (clock_gettime(CLOCK_REALTIME, p_timer))
|
||||
return JPEGERR_EFAILED;
|
||||
|
||||
return JPEGERR_SUCCESS;
|
||||
}
|
||||
|
||||
static int mjpegd_timer_get_elapsed(timespec *p_timer, int *elapsed_in_ms, uint8_t reset_start)
|
||||
{
|
||||
timespec now;
|
||||
long diff;
|
||||
int rc = mjpegd_timer_start(&now);
|
||||
|
||||
if (JPEG_FAILED(rc))
|
||||
return rc;
|
||||
|
||||
diff = (long)(now.tv_sec - p_timer->tv_sec) * 1000;
|
||||
diff += (long)(now.tv_nsec - p_timer->tv_nsec) / 1000000;
|
||||
*elapsed_in_ms = (int)diff;
|
||||
|
||||
if (reset_start)
|
||||
*p_timer = now;
|
||||
|
||||
return JPEGERR_SUCCESS;
|
||||
}
|
||||
|
||||
int mjpegd_cond_timedwait(pthread_cond_t *p_cond, pthread_mutex_t *p_mutex, uint32_t ms)
|
||||
{
|
||||
struct timespec ts;
|
||||
int rc = clock_gettime(CLOCK_REALTIME, &ts);
|
||||
if (rc < 0) return rc;
|
||||
|
||||
if (ms >= 1000) {
|
||||
ts.tv_sec += (ms/1000);
|
||||
ts.tv_nsec += ((ms%1000) * 1000000);
|
||||
} else {
|
||||
ts.tv_nsec += (ms * 1000000);
|
||||
}
|
||||
|
||||
rc = pthread_cond_timedwait(p_cond, p_mutex, &ts);
|
||||
if (rc == ETIMEDOUT)
|
||||
{
|
||||
rc = JPEGERR_ETIMEDOUT;
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
|
|
@ -1,683 +0,0 @@
|
|||
/* Copyright (c) 2012, The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer in the documentation and/or other materials provided
|
||||
* with the distribution.
|
||||
* * Neither the name of The Linux Foundation nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
|
||||
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
||||
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
//#define ALOG_NDEBUG 0
|
||||
#define ALOG_NIDEBUG 0
|
||||
#define LOG_TAG "QCameraUsbParm"
|
||||
#include <utils/Log.h>
|
||||
|
||||
#include <utils/Errors.h>
|
||||
#include <utils/threads.h>
|
||||
#include <utils/String16.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <cutils/properties.h>
|
||||
#include <math.h>
|
||||
#if HAVE_ANDROID_OS
|
||||
#include <linux/android_pmem.h>
|
||||
#endif
|
||||
#include <linux/ioctl.h>
|
||||
#include <camera/QCameraParameters.h>
|
||||
#include <media/mediarecorder.h>
|
||||
#include <gralloc_priv.h>
|
||||
|
||||
#include "linux/msm_mdp.h"
|
||||
#include <linux/fb.h>
|
||||
#include <limits.h>
|
||||
|
||||
|
||||
extern "C" {
|
||||
#include <fcntl.h>
|
||||
#include <time.h>
|
||||
#include <pthread.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <termios.h>
|
||||
#include <assert.h>
|
||||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
#include <signal.h>
|
||||
#include <errno.h>
|
||||
#include <sys/mman.h>
|
||||
#include <sys/system_properties.h>
|
||||
#include <sys/time.h>
|
||||
#include <stdlib.h>
|
||||
#include <linux/msm_ion.h>
|
||||
#include <camera.h>
|
||||
#include <cam_fifo.h>
|
||||
#include <jpege.h>
|
||||
|
||||
} // extern "C"
|
||||
|
||||
#include "QCameraHWI.h"
|
||||
#include "QualcommUsbCamera.h"
|
||||
#include "QCameraUsbPriv.h"
|
||||
#include "QCameraUsbParm.h"
|
||||
|
||||
namespace android {
|
||||
|
||||
/********************************************************************/
|
||||
static const str_map preview_formats[] = {
|
||||
{QCameraParameters::PIXEL_FORMAT_YUV420SP, HAL_PIXEL_FORMAT_YCrCb_420_SP},
|
||||
};
|
||||
|
||||
static const preview_format_info_t preview_format_info_list[] = {
|
||||
{HAL_PIXEL_FORMAT_YV12, CAMERA_YUV_420_YV12, CAMERA_PAD_TO_WORD, 3}
|
||||
};
|
||||
|
||||
static struct camera_size_type previewSizes[] = {
|
||||
{ 1920, 1088}, //1080p
|
||||
{ 1280, 720}, // 720P,
|
||||
{ 640, 480}, // VGA
|
||||
{ 512, 384},
|
||||
{ 480, 320},
|
||||
{ 320, 240}, // QVGA
|
||||
};
|
||||
|
||||
// All fps ranges which can be supported. This list will be filtered according
|
||||
// to the min and max fps supported by hardware
|
||||
// this list must be sorted first by max_fps and then min_fps
|
||||
// fps values are multiplied by 1000
|
||||
static android::FPSRange prevFpsRanges[] = {
|
||||
android::FPSRange(5000, 121000),
|
||||
};
|
||||
|
||||
/* TBR: Is frame rate mode mandatory */
|
||||
static const str_map frame_rate_modes[] = {
|
||||
{QCameraParameters::KEY_QC_PREVIEW_FRAME_RATE_AUTO_MODE, FPS_MODE_AUTO},
|
||||
{QCameraParameters::KEY_QC_PREVIEW_FRAME_RATE_FIXED_MODE, FPS_MODE_FIXED}
|
||||
};
|
||||
|
||||
static const str_map picture_formats[] = {
|
||||
{QCameraParameters::PIXEL_FORMAT_JPEG, PICTURE_FORMAT_JPEG},
|
||||
//{QCameraParameters::PIXEL_FORMAT_RAW, PICTURE_FORMAT_RAW}
|
||||
};
|
||||
|
||||
static camera_size_type picture_sizes[] = {
|
||||
{ 1920, 1088}, //HD1080
|
||||
{ 1280, 720}, //HD720
|
||||
{ 640, 480}, // VGA
|
||||
{ 320, 240}, // QVGA
|
||||
};
|
||||
|
||||
/* aspect ratio removed */
|
||||
static camera_size_type thumbnail_sizes[] = {
|
||||
{ 512, 288 }, //1.777778
|
||||
{ 480, 288 }, //1.666667
|
||||
{ 256, 154 }, //1.66233
|
||||
{ 432, 288 }, //1.5
|
||||
{ 512, 384 }, //1.333333
|
||||
{ 352, 288 }, //1.222222
|
||||
{ 320, 240 }, //1.33333
|
||||
{ 176, 144 }, //1.222222
|
||||
};
|
||||
|
||||
static const str_map recording_Hints[] = {
|
||||
{"false", FALSE},
|
||||
{"true", TRUE}
|
||||
};
|
||||
|
||||
/* Static functions list */
|
||||
static String8 create_sizes_str(const camera_size_type *sizes, int len);
|
||||
static String8 create_values_str(const str_map *values, int len);
|
||||
static String8 create_fps_str(const android:: FPSRange* fps, int len);
|
||||
static String8 create_values_range_str(int min, int max);
|
||||
static int usbCamSetPrvwSize( camera_hardware_t *camHal,
|
||||
const QCameraParameters& params);
|
||||
static int usbCamSetPictSize( camera_hardware_t *camHal,
|
||||
const QCameraParameters& params);
|
||||
static int usbCamSetThumbnailSize( camera_hardware_t *camHal,
|
||||
const QCameraParameters& params);
|
||||
static int usbCamSetJpegQlty( camera_hardware_t *camHal,
|
||||
const QCameraParameters& params);
|
||||
|
||||
/******************************************************************************
|
||||
* Function: usbCamInitDefaultParameters
|
||||
* Description: This function sets default parameters to camera HAL context
|
||||
*
|
||||
* Input parameters:
|
||||
* camHal - camera HAL handle
|
||||
*
|
||||
* Return values:
|
||||
* None
|
||||
*
|
||||
* Notes: none
|
||||
*****************************************************************************/
|
||||
int usbCamInitDefaultParameters(camera_hardware_t *camHal)
|
||||
{
|
||||
ALOGD("%s: E", __func__);
|
||||
int rc = 0;
|
||||
char tempStr[FILENAME_LENGTH];
|
||||
|
||||
/* Default initializations */
|
||||
camHal->prevFormat = DEFAULT_USBCAM_PRVW_FMT;
|
||||
camHal->prevWidth = DEFAULT_USBCAM_PRVW_WD;
|
||||
camHal->prevHeight = DEFAULT_USBCAM_PRVW_HT;
|
||||
camHal->dispFormat = camHal->prevFormat;
|
||||
camHal->dispWidth = camHal->prevWidth;
|
||||
camHal->dispHeight = camHal->prevHeight;
|
||||
camHal->pictFormat = DEFAULT_USBCAM_PICT_FMT;
|
||||
camHal->pictWidth = DEFAULT_USBCAM_PICT_WD;
|
||||
camHal->pictHeight = DEFAULT_USBCAM_PICT_HT;
|
||||
camHal->pictJpegQlty = DEFAULT_USBCAM_PICT_QLTY;
|
||||
camHal->thumbnailWidth = DEFAULT_USBCAM_THUMBNAIL_WD;
|
||||
camHal->thumbnailHeight = DEFAULT_USBCAM_THUMBNAIL_HT;
|
||||
camHal->thumbnailJpegQlty = DEFAULT_USBCAM_THUMBNAIL_QLTY;
|
||||
camHal->previewEnabledFlag = 0;
|
||||
camHal->prvwStoppedForPicture = 0;
|
||||
camHal->prvwCmdPending = 0;
|
||||
camHal->takePictInProgress = 0;
|
||||
|
||||
//Set picture size values
|
||||
camHal->pictSizeValues = create_sizes_str(
|
||||
picture_sizes, sizeof(picture_sizes) / sizeof(camera_size_type));
|
||||
camHal->qCamParams.set(QCameraParameters::KEY_SUPPORTED_PICTURE_SIZES,
|
||||
camHal->pictSizeValues.string());
|
||||
camHal->qCamParams.setPictureSize(camHal->pictWidth, camHal->pictHeight);
|
||||
|
||||
//Set picture format
|
||||
camHal->pictFormatValues = create_values_str(
|
||||
picture_formats, sizeof(picture_formats) / sizeof(str_map));
|
||||
camHal->qCamParams.set(QCameraParameters::KEY_SUPPORTED_PICTURE_FORMATS,
|
||||
camHal->pictFormatValues.string());
|
||||
if(PICTURE_FORMAT_JPEG == camHal->pictFormat)
|
||||
camHal->qCamParams.setPictureFormat(QCameraParameters::PIXEL_FORMAT_JPEG);
|
||||
|
||||
//Set picture quality
|
||||
sprintf(tempStr, "%d", camHal->pictJpegQlty);
|
||||
camHal->qCamParams.set(QCameraParameters::KEY_JPEG_QUALITY, tempStr);
|
||||
|
||||
//Set Thumbnail size
|
||||
camHal->thumbnailSizeValues = create_sizes_str(
|
||||
thumbnail_sizes, sizeof(thumbnail_sizes) /sizeof(camera_size_type));
|
||||
camHal->qCamParams.set(QCameraParameters::KEY_SUPPORTED_JPEG_THUMBNAIL_SIZES,
|
||||
camHal->thumbnailSizeValues.string());
|
||||
sprintf(tempStr, "%d", camHal->thumbnailWidth);
|
||||
camHal->qCamParams.set(QCameraParameters::KEY_JPEG_THUMBNAIL_WIDTH,
|
||||
tempStr);
|
||||
sprintf(tempStr, "%d", camHal->thumbnailHeight);
|
||||
camHal->qCamParams.set(QCameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT,
|
||||
tempStr);
|
||||
|
||||
//Set Thumbnail quality
|
||||
sprintf(tempStr, "%d", camHal->thumbnailJpegQlty);
|
||||
camHal->qCamParams.set(QCameraParameters::KEY_JPEG_THUMBNAIL_QUALITY,
|
||||
tempStr);
|
||||
|
||||
//Set Preview Format
|
||||
camHal->prevFormatValues = create_values_str(
|
||||
preview_formats, sizeof(preview_formats) / sizeof(str_map));
|
||||
camHal->qCamParams.set(QCameraParameters::KEY_SUPPORTED_PREVIEW_FORMATS,
|
||||
camHal->prevFormatValues.string());
|
||||
if(HAL_PIXEL_FORMAT_YCrCb_420_SP == camHal->prevFormat)
|
||||
camHal->qCamParams.setPreviewFormat(QCameraParameters::PIXEL_FORMAT_YUV420SP);
|
||||
|
||||
//Set Preview size
|
||||
camHal->prevSizeValues = create_sizes_str(
|
||||
previewSizes, sizeof(previewSizes) / sizeof(camera_size_type));
|
||||
camHal->qCamParams.set(QCameraParameters::KEY_SUPPORTED_PREVIEW_SIZES,
|
||||
camHal->prevSizeValues.string());
|
||||
camHal->qCamParams.setPreviewSize(camHal->prevWidth, camHal->prevHeight);
|
||||
|
||||
//Set Preivew fps range
|
||||
camHal->prevFpsRangesValues = create_fps_str(
|
||||
prevFpsRanges, sizeof(prevFpsRanges) / sizeof(android::FPSRange));
|
||||
|
||||
camHal->qCamParams.set(CameraParameters::KEY_SUPPORTED_PREVIEW_FPS_RANGE,
|
||||
camHal->prevFpsRangesValues);
|
||||
camHal->qCamParams.setPreviewFpsRange(MIN_PREV_FPS, MAX_PREV_FPS);
|
||||
|
||||
ALOGD("%s: X", __func__);
|
||||
|
||||
return rc;
|
||||
} /* usbCamInitDefaultParameters */
|
||||
|
||||
/******************************************************************************
|
||||
* Function: usbCamSetParameters
|
||||
* Description: This function parses the parameter string and stores the
|
||||
* parameters in the camera HAL handle
|
||||
*
|
||||
* Input parameters:
|
||||
* camHal - camera HAL handle
|
||||
* params - pointer to parameter string
|
||||
*
|
||||
* Return values:
|
||||
* 0 Success
|
||||
* -1 Error
|
||||
* Notes: none
|
||||
*****************************************************************************/
|
||||
int usbCamSetParameters(camera_hardware_t *camHal, const char *params)
|
||||
{
|
||||
int rc = 0;
|
||||
String8 str = String8(params);
|
||||
QCameraParameters qParam;
|
||||
|
||||
ALOGD("%s: E", __func__);
|
||||
|
||||
if(params)
|
||||
PRINT_PARAM_STR(params);
|
||||
|
||||
qParam.unflatten(str);
|
||||
|
||||
if(usbCamSetPrvwSize(camHal, qParam))
|
||||
rc = -1;
|
||||
if(usbCamSetPictSize(camHal, qParam))
|
||||
rc = -1;
|
||||
if(usbCamSetThumbnailSize(camHal, qParam))
|
||||
rc = -1;
|
||||
if(usbCamSetJpegQlty(camHal, qParam))
|
||||
rc = -1;
|
||||
|
||||
ALOGD("%s: X", __func__);
|
||||
return rc;
|
||||
} /* usbCamSetParameters */
|
||||
|
||||
/******************************************************************************
|
||||
* Function: usbCamGetParameters
|
||||
* Description: This function allocates memory for parameter string,
|
||||
* composes and returns the parameter string
|
||||
*
|
||||
* Input parameters:
|
||||
* camHal - camera HAL handle
|
||||
*
|
||||
* Return values:
|
||||
* Address to the parameter string
|
||||
*
|
||||
* Notes: none
|
||||
*****************************************************************************/
|
||||
char* usbCamGetParameters(camera_hardware_t *camHal)
|
||||
{
|
||||
ALOGD("%s: E", __func__);
|
||||
char *parms = NULL;
|
||||
char* rc = NULL;
|
||||
String8 str;
|
||||
|
||||
QCameraParameters qParam = camHal->qCamParams;
|
||||
//qParam.dump();
|
||||
str = qParam.flatten( );
|
||||
rc = (char *)malloc(sizeof(char)*(str.length()+1));
|
||||
if(rc != NULL){
|
||||
memset(rc, 0, sizeof(char)*(str.length()+1));
|
||||
strncpy(rc, str.string(), str.length());
|
||||
rc[str.length()] = 0;
|
||||
parms = rc;
|
||||
}
|
||||
|
||||
PRINT_PARAM_STR(parms);
|
||||
|
||||
ALOGD("%s: X", __func__);
|
||||
return (parms);
|
||||
} /* usbCamGetParameters */
|
||||
|
||||
/******************************************************************************
|
||||
* Function: usbCamPutParameters
|
||||
* Description: This function frees the memory allocated for parameter string
|
||||
*
|
||||
* Input parameters:
|
||||
* camHal - camera HAL handle
|
||||
* parms - Parameter string
|
||||
*
|
||||
* Return values:
|
||||
* None
|
||||
*
|
||||
* Notes: none
|
||||
*****************************************************************************/
|
||||
void usbCamPutParameters(camera_hardware_t *camHal, char *parms)
|
||||
{
|
||||
ALOGD("%s: E", __func__);
|
||||
if(parms)
|
||||
free(parms);
|
||||
parms = NULL;
|
||||
ALOGD("%s: X", __func__);
|
||||
} /* usbCamPutParameters */
|
||||
|
||||
/******************************************************************************
|
||||
* Function: create_sizes_str
|
||||
* Description: This function loops through /dev/video entries and probes with
|
||||
* UVCIOC query. If the device responds to the query, then it is
|
||||
* detected as UVC webcam
|
||||
* Input parameters:
|
||||
* devname - String pointer. The function return dev entry
|
||||
* name in this string
|
||||
* Return values:
|
||||
* 0 Success
|
||||
* -1 Error
|
||||
* Notes: none
|
||||
*****************************************************************************/
|
||||
static String8 create_sizes_str(const camera_size_type *sizes, int len) {
|
||||
String8 str;
|
||||
char buffer[32];
|
||||
|
||||
if (len > 0) {
|
||||
snprintf(buffer, sizeof(buffer), "%dx%d", sizes[0].width, sizes[0].height);
|
||||
str.append(buffer);
|
||||
}
|
||||
for (int i = 1; i < len; i++) {
|
||||
snprintf(buffer, sizeof(buffer), ",%dx%d", sizes[i].width, sizes[i].height);
|
||||
str.append(buffer);
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* Function: create_values_str
|
||||
* Description: This function loops through /dev/video entries and probes with
|
||||
* UVCIOC query. If the device responds to the query, then it is
|
||||
* detected as UVC webcam
|
||||
* Input parameters:
|
||||
* devname - String pointer. The function return dev entry
|
||||
* name in this string
|
||||
* Return values:
|
||||
* 0 Success
|
||||
* -1 Error
|
||||
* Notes: none
|
||||
*****************************************************************************/
|
||||
static String8 create_values_str(const str_map *values, int len) {
|
||||
String8 str;
|
||||
|
||||
if (len > 0) {
|
||||
str.append(values[0].desc);
|
||||
}
|
||||
for (int i = 1; i < len; i++) {
|
||||
str.append(",");
|
||||
str.append(values[i].desc);
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* Function: create_fps_str
|
||||
* Description: This function loops through /dev/video entries and probes with
|
||||
* UVCIOC query. If the device responds to the query, then it is
|
||||
* detected as UVC webcam
|
||||
* Input parameters:
|
||||
* devname - String pointer. The function return dev entry
|
||||
* name in this string
|
||||
* Return values:
|
||||
* 0 Success
|
||||
* -1 Error
|
||||
* Notes: none
|
||||
*****************************************************************************/
|
||||
static String8 create_fps_str(const android:: FPSRange* fps, int len) {
|
||||
String8 str;
|
||||
char buffer[32];
|
||||
|
||||
if (len > 0) {
|
||||
snprintf(buffer, sizeof(buffer), "(%d,%d)", fps[0].minFPS, fps[0].maxFPS);
|
||||
str.append(buffer);
|
||||
}
|
||||
for (int i = 1; i < len; i++) {
|
||||
snprintf(buffer, sizeof(buffer), ",(%d,%d)", fps[i].minFPS, fps[i].maxFPS);
|
||||
str.append(buffer);
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* Function: create_values_range_str
|
||||
* Description: This function loops through /dev/video entries and probes with
|
||||
* UVCIOC query. If the device responds to the query, then it is
|
||||
* detected as UVC webcam
|
||||
* Input parameters:
|
||||
* devname - String pointer. The function return dev entry
|
||||
* name in this string
|
||||
* Return values:
|
||||
* 0 Success
|
||||
* -1 Error
|
||||
* Notes: none
|
||||
*****************************************************************************/
|
||||
static String8 create_values_range_str(int min, int max){
|
||||
String8 str;
|
||||
char buffer[32];
|
||||
|
||||
if(min <= max){
|
||||
snprintf(buffer, sizeof(buffer), "%d", min);
|
||||
str.append(buffer);
|
||||
|
||||
for (int i = min + 1; i <= max; i++) {
|
||||
snprintf(buffer, sizeof(buffer), ",%d", i);
|
||||
str.append(buffer);
|
||||
}
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* Function: usbCamSetPrvwSize
|
||||
* Description: This function parses preview width and height from the input
|
||||
* parameters and stores into the context
|
||||
*
|
||||
* Input parameters:
|
||||
* camHal - camera HAL handle
|
||||
* params - QCameraParameters reference
|
||||
*
|
||||
* Return values:
|
||||
* 0 If parameters are valid
|
||||
* -1 If parameters are invalid
|
||||
*
|
||||
* Notes: none
|
||||
*****************************************************************************/
|
||||
static int usbCamSetPrvwSize( camera_hardware_t *camHal,
|
||||
const QCameraParameters& params)
|
||||
{
|
||||
int rc = 0, width, height, i, numPrvwSizes, validSize;
|
||||
ALOGD("%s: E", __func__);
|
||||
|
||||
params.getPreviewSize(&width, &height);
|
||||
ALOGI("%s: Requested preview size %d x %d", __func__, width, height);
|
||||
|
||||
// Validate the preview size
|
||||
numPrvwSizes = sizeof(previewSizes) / sizeof(camera_size_type);
|
||||
for (i = 0, validSize = 0; i < numPrvwSizes; i++) {
|
||||
if (width == previewSizes[i].width
|
||||
&& height == previewSizes[i].height) {
|
||||
validSize = 1;
|
||||
|
||||
camHal->qCamParams.setPreviewSize(width, height);
|
||||
ALOGD("%s: setPreviewSize: width: %d height: %d",
|
||||
__func__, width, height);
|
||||
|
||||
camHal->prevWidth = width;
|
||||
camHal->prevHeight = height;
|
||||
camHal->dispWidth = width;
|
||||
camHal->dispHeight = height;
|
||||
|
||||
/* TBD: restrict pictures size and video to preview size */
|
||||
}
|
||||
}
|
||||
if(!validSize)
|
||||
ALOGE("%s: Invalid preview size %dx%d requested", __func__,
|
||||
width, height);
|
||||
|
||||
rc = (validSize == 0)? -1:0;
|
||||
ALOGD("%s: X", __func__);
|
||||
|
||||
return rc;
|
||||
} /* usbCamSetPrvwSize */
|
||||
|
||||
/******************************************************************************
|
||||
* Function: usbCamSetPictSize
|
||||
* Description: This function parses picture width and height from the input
|
||||
* parameters and stores into the context
|
||||
*
|
||||
* Input parameters:
|
||||
* camHal - camera HAL handle
|
||||
* params - QCameraParameters reference
|
||||
*
|
||||
* Return values:
|
||||
* 0 If parameters are valid
|
||||
* -1 If parameters are invalid
|
||||
*
|
||||
* Notes: none
|
||||
*****************************************************************************/
|
||||
static int usbCamSetPictSize( camera_hardware_t *camHal,
|
||||
const QCameraParameters& params)
|
||||
{
|
||||
int rc = 0, width, height, i, numPictSizes, validSize;
|
||||
ALOGD("%s: E", __func__);
|
||||
|
||||
/* parse for picture width and height */
|
||||
params.getPictureSize(&width, &height);
|
||||
ALOGI("%s: Requested picture size %d x %d", __func__, width, height);
|
||||
|
||||
// Validate the picture size
|
||||
numPictSizes = sizeof(picture_sizes) / sizeof(camera_size_type);
|
||||
for (i = 0, validSize = 0; i < numPictSizes; i++) {
|
||||
if (width == picture_sizes[i].width
|
||||
&& height == picture_sizes[i].height) {
|
||||
validSize = 1;
|
||||
|
||||
camHal->qCamParams.setPictureSize(width, height);
|
||||
ALOGD("%s: setPictureSize: width: %d height: %d",
|
||||
__func__, width, height);
|
||||
|
||||
/* TBD: If new pictSize is different from old size, restart prvw */
|
||||
camHal->pictWidth = width;
|
||||
camHal->pictHeight = height;
|
||||
}
|
||||
}
|
||||
if(!validSize)
|
||||
ALOGE("%s: Invalid picture size %dx%d requested", __func__,
|
||||
width, height);
|
||||
rc = (validSize == 0)? -1:0;
|
||||
ALOGD("%s: X", __func__);
|
||||
|
||||
return rc;
|
||||
} /* usbCamSetPictSize */
|
||||
|
||||
/******************************************************************************
|
||||
* Function: usbCamSetThumbnailSize
|
||||
* Description: This function parses picture width and height from the input
|
||||
* parameters and stores into the context
|
||||
*
|
||||
* Input parameters:
|
||||
* camHal - camera HAL handle
|
||||
* params - QCameraParameters reference
|
||||
*
|
||||
* Return values:
|
||||
* 0 If parameters are valid
|
||||
* -1 If parameters are invalid
|
||||
*
|
||||
* Notes: none
|
||||
*****************************************************************************/
|
||||
static int usbCamSetThumbnailSize( camera_hardware_t *camHal,
|
||||
const QCameraParameters& params)
|
||||
{
|
||||
int rc = 0, width, height, i, numThumbnailSizes, validSize;
|
||||
char tempStr[FILENAME_LENGTH];
|
||||
ALOGD("%s: E", __func__);
|
||||
|
||||
/* parse for thumbnail width and height */
|
||||
width = params.getInt(QCameraParameters::KEY_JPEG_THUMBNAIL_WIDTH);
|
||||
height = params.getInt(QCameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT);
|
||||
ALOGI("%s: Requested thumbnail size %d x %d", __func__, width, height);
|
||||
|
||||
// Validate the thumbnail size
|
||||
numThumbnailSizes = sizeof(thumbnail_sizes) / sizeof(camera_size_type);
|
||||
for (i = 0, validSize = 0; i < numThumbnailSizes; i++) {
|
||||
if (width == thumbnail_sizes[i].width
|
||||
&& height == thumbnail_sizes[i].height) {
|
||||
validSize = 1;
|
||||
|
||||
camHal->thumbnailWidth = width;
|
||||
camHal->thumbnailHeight = height;
|
||||
sprintf(tempStr, "%d", camHal->thumbnailWidth);
|
||||
camHal->qCamParams.set(QCameraParameters::KEY_JPEG_THUMBNAIL_WIDTH,
|
||||
width);
|
||||
sprintf(tempStr, "%d", camHal->thumbnailHeight);
|
||||
camHal->qCamParams.set(QCameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT,
|
||||
height);
|
||||
|
||||
}
|
||||
}
|
||||
if(!validSize)
|
||||
ALOGE("%s: Invalid picture size %dx%d requested", __func__,
|
||||
width, height);
|
||||
rc = (validSize == 0)? -1:0;
|
||||
ALOGD("%s: X", __func__);
|
||||
|
||||
return rc;
|
||||
} /* usbCamSetThumbnailSize */
|
||||
|
||||
/******************************************************************************
|
||||
* Function: usbCamSetJpegQlty
|
||||
* Description: This function parses picture and thumbnail JPEG quality and
|
||||
* validates before storing in the context
|
||||
*
|
||||
* Input parameters:
|
||||
* camHal - camera HAL handle
|
||||
* params - QCameraParameters reference
|
||||
*
|
||||
* Return values:
|
||||
* 0 If parameters are valid
|
||||
* -1 If parameters are invalid
|
||||
*
|
||||
* Notes: none
|
||||
*****************************************************************************/
|
||||
static int usbCamSetJpegQlty( camera_hardware_t *camHal,
|
||||
const QCameraParameters& params)
|
||||
{
|
||||
int rc = 0, quality = 0;
|
||||
char tempStr[FILENAME_LENGTH];
|
||||
ALOGD("%s: E", __func__);
|
||||
|
||||
/**/
|
||||
quality = params.getInt(QCameraParameters::KEY_JPEG_QUALITY);
|
||||
ALOGI("%s: Requested picture qlty %d", __func__, quality);
|
||||
|
||||
if (quality >= 0 && quality <= 100) {
|
||||
camHal->pictJpegQlty = quality;
|
||||
sprintf(tempStr, "%d", camHal->pictJpegQlty);
|
||||
camHal->qCamParams.set(QCameraParameters::KEY_JPEG_QUALITY, quality);
|
||||
} else {
|
||||
ALOGE("Invalid jpeg quality=%d", quality);
|
||||
rc = -1;
|
||||
}
|
||||
|
||||
quality = params.getInt(QCameraParameters::KEY_JPEG_THUMBNAIL_QUALITY);
|
||||
ALOGI("%s: Requested thumbnail qlty %d", __func__, quality);
|
||||
|
||||
if (quality >= 0 && quality <= 100) {
|
||||
camHal->thumbnailJpegQlty = quality;
|
||||
sprintf(tempStr, "%d", camHal->thumbnailJpegQlty);
|
||||
camHal->qCamParams.set(QCameraParameters::KEY_JPEG_THUMBNAIL_QUALITY,
|
||||
tempStr);
|
||||
} else {
|
||||
ALOGE("Invalid jpeg thumbnail quality=%d", quality);
|
||||
rc = -1;
|
||||
}
|
||||
|
||||
ALOGD("%s: X rc:%d", __func__, rc);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
}; /*namespace android */
|
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue