You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
332 lines
9.4 KiB
332 lines
9.4 KiB
13 years ago
|
/*
|
||
|
* Copyright@ Samsung Electronics Co. LTD
|
||
|
*
|
||
|
* 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 __SAMSUNG_SYSLSI_SEC_COMMON_H__
|
||
|
#define __SAMSUNG_SYSLSI_SEC_COMMON_H__
|
||
|
|
||
|
//---------------------------------------------------------//
|
||
|
// Include
|
||
|
//---------------------------------------------------------//
|
||
|
|
||
|
#include <hardware/hardware.h>
|
||
|
#include "sec_format.h"
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
#include <linux/videodev2.h>
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
//---------------------------------------------------------//
|
||
|
// Common structure //
|
||
|
//---------------------------------------------------------//
|
||
|
struct ADDRS {
|
||
|
unsigned int addr_y;
|
||
|
unsigned int addr_cbcr;
|
||
|
unsigned int buf_idx;
|
||
|
unsigned int reserved;
|
||
|
};
|
||
|
|
||
|
//---------------------------------------------------------//
|
||
|
// Common function //
|
||
|
//---------------------------------------------------------//
|
||
|
inline int HAL_PIXEL_FORMAT_2_V4L2_PIX(int HAL_PIXEL_FORMAT)
|
||
|
{
|
||
|
int V4L2_PIX = -1;
|
||
|
|
||
|
switch (HAL_PIXEL_FORMAT) {
|
||
|
case HAL_PIXEL_FORMAT_RGBA_8888:
|
||
|
case HAL_PIXEL_FORMAT_RGBX_8888:
|
||
|
V4L2_PIX = V4L2_PIX_FMT_RGB32;
|
||
|
break;
|
||
|
|
||
|
case HAL_PIXEL_FORMAT_RGB_888:
|
||
|
V4L2_PIX = V4L2_PIX_FMT_RGB24;
|
||
|
break;
|
||
|
|
||
|
case HAL_PIXEL_FORMAT_RGB_565:
|
||
|
V4L2_PIX = V4L2_PIX_FMT_RGB565;
|
||
|
break;
|
||
|
|
||
|
case HAL_PIXEL_FORMAT_BGRA_8888:
|
||
|
//V4L2_PIX = V4L2_PIX_FMT_BGR32; // this is not proper on fimc.
|
||
|
V4L2_PIX = V4L2_PIX_FMT_RGB32;
|
||
|
break;
|
||
|
|
||
|
case HAL_PIXEL_FORMAT_RGBA_5551:
|
||
|
V4L2_PIX = V4L2_PIX_FMT_RGB555X;
|
||
|
break;
|
||
|
|
||
|
case HAL_PIXEL_FORMAT_RGBA_4444:
|
||
|
V4L2_PIX = V4L2_PIX_FMT_RGB444;
|
||
|
break;
|
||
|
|
||
|
case HAL_PIXEL_FORMAT_YV12:
|
||
|
case HAL_PIXEL_FORMAT_YCbCr_420_P:
|
||
|
V4L2_PIX = V4L2_PIX_FMT_YUV420;
|
||
|
break;
|
||
|
|
||
|
case HAL_PIXEL_FORMAT_YCbCr_422_SP:
|
||
|
case HAL_PIXEL_FORMAT_CUSTOM_YCbCr_422_SP:
|
||
|
V4L2_PIX = V4L2_PIX_FMT_NV61;
|
||
|
break;
|
||
|
|
||
|
case HAL_PIXEL_FORMAT_YCbCr_420_SP:
|
||
|
case HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP:
|
||
|
V4L2_PIX = V4L2_PIX_FMT_NV12;
|
||
|
break;
|
||
|
|
||
|
case HAL_PIXEL_FORMAT_YCbCr_422_I:
|
||
|
case HAL_PIXEL_FORMAT_CUSTOM_YCbCr_422_I:
|
||
|
V4L2_PIX = V4L2_PIX_FMT_YUYV;
|
||
|
break;
|
||
|
|
||
|
case HAL_PIXEL_FORMAT_YCbCr_422_P:
|
||
|
V4L2_PIX = V4L2_PIX_FMT_YUV422P;
|
||
|
break;
|
||
|
|
||
|
case HAL_PIXEL_FORMAT_CbYCrY_422_I:
|
||
|
case HAL_PIXEL_FORMAT_CUSTOM_CbYCrY_422_I:
|
||
|
V4L2_PIX = V4L2_PIX_FMT_UYVY;
|
||
|
break;
|
||
|
|
||
|
case HAL_PIXEL_FORMAT_YCrCb_422_SP:
|
||
|
case HAL_PIXEL_FORMAT_CUSTOM_YCrCb_422_SP:
|
||
|
V4L2_PIX = V4L2_PIX_FMT_NV16;
|
||
|
break;
|
||
|
|
||
|
case HAL_PIXEL_FORMAT_YCrCb_420_SP:
|
||
|
case HAL_PIXEL_FORMAT_CUSTOM_YCrCb_420_SP:
|
||
|
V4L2_PIX = V4L2_PIX_FMT_NV21;
|
||
|
break;
|
||
|
|
||
|
case HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP_TILED:
|
||
|
V4L2_PIX = V4L2_PIX_FMT_NV12T;
|
||
|
break;
|
||
|
|
||
|
case HAL_PIXEL_FORMAT_CUSTOM_YCrCb_422_I:
|
||
|
V4L2_PIX = V4L2_PIX_FMT_YVYU;
|
||
|
break;
|
||
|
|
||
|
case HAL_PIXEL_FORMAT_CUSTOM_CrYCbY_422_I:
|
||
|
V4L2_PIX = V4L2_PIX_FMT_VYUY;
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
ALOGE("%s::unmatched HAL_PIXEL_FORMAT color_space(0x%x)\n",
|
||
|
__func__, HAL_PIXEL_FORMAT);
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return V4L2_PIX;
|
||
|
}
|
||
|
|
||
|
inline int V4L2_PIX_2_HAL_PIXEL_FORMAT(int V4L2_PIX)
|
||
|
{
|
||
|
int HAL_PIXEL_FORMAT = -1;
|
||
|
|
||
|
switch (V4L2_PIX) {
|
||
|
case V4L2_PIX_FMT_RGB32:
|
||
|
HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_RGBA_8888;
|
||
|
//HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_RGBX_8888;
|
||
|
break;
|
||
|
|
||
|
case V4L2_PIX_FMT_RGB24:
|
||
|
HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_RGB_888;
|
||
|
break;
|
||
|
|
||
|
case V4L2_PIX_FMT_RGB565:
|
||
|
HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_RGB_565;
|
||
|
break;
|
||
|
|
||
|
case V4L2_PIX_FMT_BGR32:
|
||
|
HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_BGRA_8888;
|
||
|
break;
|
||
|
|
||
|
case V4L2_PIX_FMT_RGB555X:
|
||
|
HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_RGBA_5551;
|
||
|
break;
|
||
|
|
||
|
case V4L2_PIX_FMT_RGB444:
|
||
|
HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_RGBA_4444;
|
||
|
break;
|
||
|
|
||
|
case V4L2_PIX_FMT_YUV420:
|
||
|
//HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_YV12;
|
||
|
HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_YCbCr_420_P;
|
||
|
break;
|
||
|
|
||
|
case V4L2_PIX_FMT_NV16:
|
||
|
//HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_YCrCb_422_SP;
|
||
|
HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CUSTOM_YCrCb_422_SP;
|
||
|
break;
|
||
|
|
||
|
case V4L2_PIX_FMT_NV12:
|
||
|
//HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_YCrCb_420_SP;
|
||
|
HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP;
|
||
|
break;
|
||
|
|
||
|
case V4L2_PIX_FMT_YUYV:
|
||
|
//HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_YCbCr_422_I;
|
||
|
HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CUSTOM_YCbCr_422_I;
|
||
|
break;
|
||
|
|
||
|
case V4L2_PIX_FMT_YUV422P:
|
||
|
HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_YCbCr_422_P;
|
||
|
break;
|
||
|
|
||
|
case V4L2_PIX_FMT_UYVY:
|
||
|
//HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CbYCrY_422_I;
|
||
|
HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CUSTOM_CbYCrY_422_I;
|
||
|
break;
|
||
|
|
||
|
case V4L2_PIX_FMT_NV21:
|
||
|
//HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_YCbCr_420_SP;
|
||
|
HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CUSTOM_YCrCb_420_SP;
|
||
|
break;
|
||
|
|
||
|
case V4L2_PIX_FMT_NV12T:
|
||
|
HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP_TILED;
|
||
|
break;
|
||
|
|
||
|
case V4L2_PIX_FMT_NV61:
|
||
|
HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CUSTOM_YCbCr_422_SP;
|
||
|
break;
|
||
|
|
||
|
case V4L2_PIX_FMT_YVYU:
|
||
|
HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CUSTOM_YCrCb_422_I;
|
||
|
break;
|
||
|
|
||
|
case V4L2_PIX_FMT_VYUY:
|
||
|
HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CUSTOM_CrYCbY_422_I;
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
ALOGE("%s::unmatched V4L2_PIX color_space(%d)\n",
|
||
|
__func__, V4L2_PIX);
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return HAL_PIXEL_FORMAT;
|
||
|
}
|
||
|
|
||
|
#define ALIGN_TO_32B(x) ((((x) + (1 << 5) - 1) >> 5) << 5)
|
||
|
#define ALIGN_TO_128B(x) ((((x) + (1 << 7) - 1) >> 7) << 7)
|
||
|
#define ALIGN_TO_8KB(x) ((((x) + (1 << 13) - 1) >> 13) << 13)
|
||
|
|
||
|
#define GET_32BPP_FRAME_SIZE(w, h) (((w) * (h)) << 2)
|
||
|
#define GET_24BPP_FRAME_SIZE(w, h) (((w) * (h)) * 3)
|
||
|
#define GET_16BPP_FRAME_SIZE(w, h) (((w) * (h)) << 1)
|
||
|
|
||
|
inline unsigned int FRAME_SIZE(int HAL_PIXEL_FORMAT, int w, int h)
|
||
|
{
|
||
|
unsigned int frame_size = 0;
|
||
|
unsigned int size = 0;
|
||
|
|
||
|
switch (HAL_PIXEL_FORMAT) {
|
||
|
// 16bpp
|
||
|
case HAL_PIXEL_FORMAT_RGB_565:
|
||
|
case HAL_PIXEL_FORMAT_RGBA_5551:
|
||
|
//case HAL_PIXEL_FORMAT_ARGB_1555:
|
||
|
//case HAL_PIXEL_FORMAT_BGRA_5551:
|
||
|
//case HAL_PIXEL_FORMAT_ABGR_1555:
|
||
|
|
||
|
//case HAL_PIXEL_FORMAT_RGBX_5551:
|
||
|
//case HAL_PIXEL_FORMAT_XRGB_1555:
|
||
|
//case HAL_PIXEL_FORMAT_BGRX_5551:
|
||
|
//case HAL_PIXEL_FORMAT_XBGR_1555:
|
||
|
|
||
|
case HAL_PIXEL_FORMAT_RGBA_4444:
|
||
|
//case HAL_PIXEL_FORMAT_ARGB_4444:
|
||
|
//case HAL_PIXEL_FORMAT_BGRA_4444:
|
||
|
//case HAL_PIXEL_FORMAT_ABGR_4444:
|
||
|
|
||
|
//case HAL_PIXEL_FORMAT_RGBX_4444:
|
||
|
//case HAL_PIXEL_FORMAT_XRGB_4444:
|
||
|
//case HAL_PIXEL_FORMAT_BGRX_4444:
|
||
|
//case HAL_PIXEL_FORMAT_XBGR_4444:
|
||
|
frame_size = GET_16BPP_FRAME_SIZE(w, h);
|
||
|
break;
|
||
|
|
||
|
// 24bpp
|
||
|
case HAL_PIXEL_FORMAT_RGB_888:
|
||
|
frame_size = GET_24BPP_FRAME_SIZE(w, h);
|
||
|
break;
|
||
|
|
||
|
// 32bpp
|
||
|
case HAL_PIXEL_FORMAT_RGBA_8888:
|
||
|
//case HAL_PIXEL_FORMAT_ARGB_8888:
|
||
|
case HAL_PIXEL_FORMAT_BGRA_8888:
|
||
|
//case HAL_PIXEL_FORMAT_ABGR_8888:
|
||
|
|
||
|
case HAL_PIXEL_FORMAT_RGBX_8888:
|
||
|
//case HAL_PIXEL_FORMAT_XRGB_8888:
|
||
|
//case HAL_PIXEL_FORMAT_BGRX_8888:
|
||
|
//case HAL_PIXEL_FORMAT_XBGR_8888:
|
||
|
frame_size = GET_32BPP_FRAME_SIZE(w, h);
|
||
|
break;
|
||
|
|
||
|
// 12bpp
|
||
|
case HAL_PIXEL_FORMAT_YV12:
|
||
|
case HAL_PIXEL_FORMAT_YCrCb_420_SP:
|
||
|
case HAL_PIXEL_FORMAT_YCbCr_420_P:
|
||
|
case HAL_PIXEL_FORMAT_YCbCr_420_I:
|
||
|
case HAL_PIXEL_FORMAT_CbYCrY_420_I:
|
||
|
case HAL_PIXEL_FORMAT_YCbCr_420_SP:
|
||
|
case HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP:
|
||
|
case HAL_PIXEL_FORMAT_CUSTOM_YCrCb_420_SP:
|
||
|
size = w * h;
|
||
|
// frame_size = width * height * 3 / 2;
|
||
|
// sw5771.park : very curious...
|
||
|
// frame_size = size + ((size / 4) * 2);
|
||
|
frame_size = size + ((size >> 2) << 1);
|
||
|
break;
|
||
|
|
||
|
case HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP_TILED:
|
||
|
frame_size = ALIGN_TO_8KB(ALIGN_TO_128B(w) * ALIGN_TO_32B(h))
|
||
|
+ ALIGN_TO_8KB(ALIGN_TO_128B(w) * ALIGN_TO_32B(h >> 1));
|
||
|
break;
|
||
|
|
||
|
// 16bpp
|
||
|
case HAL_PIXEL_FORMAT_YCbCr_422_SP:
|
||
|
case HAL_PIXEL_FORMAT_YCbCr_422_I:
|
||
|
case HAL_PIXEL_FORMAT_YCbCr_422_P:
|
||
|
case HAL_PIXEL_FORMAT_CbYCrY_422_I:
|
||
|
case HAL_PIXEL_FORMAT_YCrCb_422_SP:
|
||
|
case HAL_PIXEL_FORMAT_CUSTOM_YCbCr_422_SP:
|
||
|
case HAL_PIXEL_FORMAT_CUSTOM_YCrCb_422_SP:
|
||
|
case HAL_PIXEL_FORMAT_CUSTOM_YCbCr_422_I:
|
||
|
case HAL_PIXEL_FORMAT_CUSTOM_YCrCb_422_I:
|
||
|
case HAL_PIXEL_FORMAT_CUSTOM_CbYCrY_422_I:
|
||
|
case HAL_PIXEL_FORMAT_CUSTOM_CrYCbY_422_I:
|
||
|
frame_size = GET_16BPP_FRAME_SIZE(w, h);
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
ALOGD("%s::no matching source colorformat(0x%x), w(%d), h(%d) fail\n",
|
||
|
__func__, HAL_PIXEL_FORMAT, w, h);
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return frame_size;
|
||
|
}
|
||
|
|
||
|
#endif //__SAMSUNG_SYSLSI_SEC_COMMON_H__
|