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.
462 lines
9.9 KiB
462 lines
9.9 KiB
/*
|
|
*
|
|
* Copyright 2012 Samsung Electronics S.LSI 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.
|
|
*/
|
|
|
|
/*
|
|
* @file swconverter.h
|
|
* @brief SEC_OMX specific define. It support MFC 5.x tiled.
|
|
* NV12T(tiled) layout:
|
|
* Each element is not pixel. It is 64x32 pixel block.
|
|
* uv pixel block is interleaved as u v u v u v ...
|
|
* y1 y2 y7 y8 y9 y10 y15 y16
|
|
* y3 y4 y5 y6 y11 y12 y13 y14
|
|
* y17 y18 y23 y24 y25 y26 y31 y32
|
|
* y19 y20 y21 y22 y27 y28 y29 y30
|
|
* uv1 uv2 uv7 uv8 uv9 uv10 uv15 uv16
|
|
* uv3 uv4 uv5 uv6 uv11 uv12 uv13 uv14
|
|
* YUV420Planar(linear) layout:
|
|
* Each element is not pixel. It is 64x32 pixel block.
|
|
* y1 y2 y3 y4 y5 y6 y7 y8
|
|
* y9 y10 y11 y12 y13 y14 y15 y16
|
|
* y17 y18 y19 y20 y21 y22 y23 y24
|
|
* y25 y26 y27 y28 y29 y30 y31 y32
|
|
* u1 u2 u3 u4 u5 u6 u7 u8
|
|
* v1 v2 v3 v4 v5 v6 v7 v8
|
|
* YUV420Semiplanar(linear) layout:
|
|
* Each element is not pixel. It is 64x32 pixel block.
|
|
* uv pixel block is interleaved as u v u v u v ...
|
|
* y1 y2 y3 y4 y5 y6 y7 y8
|
|
* y9 y10 y11 y12 y13 y14 y15 y16
|
|
* y17 y18 y19 y20 y21 y22 y23 y24
|
|
* y25 y26 y27 y28 y29 y30 y31 y32
|
|
* uv1 uv2 uv3 uv4 uv5 uv6 uv7 uv8
|
|
* uv9 uv10 uv11 uv12 uv13 uv14 uv15 uv16
|
|
* @author ShinWon Lee (shinwon.lee@samsung.com)
|
|
* @version 1.0
|
|
* @history
|
|
* 2012.02.01 : Create
|
|
*/
|
|
|
|
#ifndef SW_CONVERTOR_H_
|
|
#define SW_CONVERTOR_H_
|
|
|
|
/*--------------------------------------------------------------------------------*/
|
|
/* Format Conversion API */
|
|
/*--------------------------------------------------------------------------------*/
|
|
/*
|
|
* De-interleaves src to dest1, dest2
|
|
*
|
|
* @param dest1
|
|
* Address of de-interleaved data[out]
|
|
*
|
|
* @param dest2
|
|
* Address of de-interleaved data[out]
|
|
*
|
|
* @param src
|
|
* Address of interleaved data[in]
|
|
*
|
|
* @param src_size
|
|
* Size of interleaved data[in]
|
|
*/
|
|
void csc_deinterleave_memcpy(
|
|
unsigned char *dest1,
|
|
unsigned char *dest2,
|
|
unsigned char *src,
|
|
unsigned int src_size);
|
|
|
|
/*
|
|
* Interleaves src1, src2 to dest
|
|
*
|
|
* @param dest
|
|
* Address of interleaved data[out]
|
|
*
|
|
* @param src1
|
|
* Address of de-interleaved data[in]
|
|
*
|
|
* @param src2
|
|
* Address of de-interleaved data[in]
|
|
*
|
|
* @param src_size
|
|
* Size of de-interleaved data[in]
|
|
*/
|
|
void csc_interleave_memcpy(
|
|
unsigned char *dest,
|
|
unsigned char *src1,
|
|
unsigned char *src2,
|
|
unsigned int src_size);
|
|
|
|
/* C Code */
|
|
/*
|
|
* Converts tiled data to linear
|
|
* 1. y of nv12t to y of yuv420p
|
|
* 2. y of nv12t to y of yuv420s
|
|
*
|
|
* @param dst
|
|
* y address of yuv420[out]
|
|
*
|
|
* @param src
|
|
* y address of nv12t[in]
|
|
*
|
|
* @param yuv420_width
|
|
* real width of yuv420[in]
|
|
* it should be even
|
|
*
|
|
* @param yuv420_height
|
|
* real height of yuv420[in]
|
|
* it should be even.
|
|
*
|
|
*/
|
|
void csc_tiled_to_linear_y(
|
|
unsigned char *y_dst,
|
|
unsigned char *y_src,
|
|
unsigned int width,
|
|
unsigned int height);
|
|
|
|
/*
|
|
* Converts tiled data to linear
|
|
* 1. uv of nv12t to y of yuv420s
|
|
*
|
|
* @param dst
|
|
* uv address of yuv420s[out]
|
|
*
|
|
* @param src
|
|
* uv address of nv12t[in]
|
|
*
|
|
* @param yuv420_width
|
|
* real width of yuv420s[in]
|
|
*
|
|
* @param yuv420_height
|
|
* real height of yuv420s[in]
|
|
*
|
|
*/
|
|
void csc_tiled_to_linear_uv(
|
|
unsigned char *uv_dst,
|
|
unsigned char *uv_src,
|
|
unsigned int width,
|
|
unsigned int height);
|
|
|
|
/*
|
|
* Converts tiled data to linear
|
|
* 1. uv of nt12t to uv of yuv420p
|
|
*
|
|
* @param u_dst
|
|
* u address of yuv420p[out]
|
|
*
|
|
* @param v_dst
|
|
* v address of yuv420p[out]
|
|
*
|
|
* @param uv_src
|
|
* uv address of nt12t[in]
|
|
*
|
|
* @param yuv420_width
|
|
* real width of yuv420p[in]
|
|
*
|
|
* @param yuv420_height
|
|
* real height of yuv420p[in]
|
|
*/
|
|
void csc_tiled_to_linear_uv_deinterleave(
|
|
unsigned char *u_dst,
|
|
unsigned char *v_dst,
|
|
unsigned char *uv_src,
|
|
unsigned int width,
|
|
unsigned int height);
|
|
|
|
/*
|
|
* Converts linear data to tiled
|
|
* 1. y of yuv420 to y of nv12t
|
|
*
|
|
* @param dst
|
|
* y address of nv12t[out]
|
|
*
|
|
* @param src
|
|
* y address of yuv420[in]
|
|
*
|
|
* @param yuv420_width
|
|
* real width of yuv420[in]
|
|
* it should be even
|
|
*
|
|
* @param yuv420_height
|
|
* real height of yuv420[in]
|
|
* it should be even.
|
|
*
|
|
*/
|
|
void csc_linear_to_tiled_y(
|
|
unsigned char *y_dst,
|
|
unsigned char *y_src,
|
|
unsigned int width,
|
|
unsigned int height);
|
|
|
|
/*
|
|
* Converts and interleaves linear data to tiled
|
|
* 1. uv of nv12t to uv of yuv420
|
|
*
|
|
* @param dst
|
|
* uv address of nv12t[out]
|
|
*
|
|
* @param src
|
|
* u address of yuv420[in]
|
|
*
|
|
* @param src
|
|
* v address of yuv420[in]
|
|
*
|
|
* @param yuv420_width
|
|
* real width of yuv420[in]
|
|
*
|
|
* @param yuv420_height
|
|
* real height of yuv420[in]
|
|
*
|
|
*/
|
|
void csc_linear_to_tiled_uv(
|
|
unsigned char *uv_dst,
|
|
unsigned char *u_src,
|
|
unsigned char *v_src,
|
|
unsigned int width,
|
|
unsigned int height);
|
|
|
|
/*
|
|
* Converts tiled data to linear for mfc 6.x
|
|
* 1. Y of NV12T to Y of YUV420P
|
|
* 2. Y of NV12T to Y of YUV420S
|
|
*
|
|
* @param dst
|
|
* Y address of YUV420[out]
|
|
*
|
|
* @param src
|
|
* Y address of NV12T[in]
|
|
*
|
|
* @param yuv420_width
|
|
* real width of YUV420[in]
|
|
*
|
|
* @param yuv420_height
|
|
* Y: real height of YUV420[in]
|
|
*
|
|
*/
|
|
void csc_tiled_to_linear_y_neon(
|
|
unsigned char *y_dst,
|
|
unsigned char *y_src,
|
|
unsigned int width,
|
|
unsigned int height);
|
|
|
|
/*
|
|
* Converts tiled data to linear for mfc 6.x
|
|
* 1. UV of NV12T to Y of YUV420S
|
|
*
|
|
* @param u_dst
|
|
* UV plane address of YUV420P[out]
|
|
*
|
|
* @param nv12t_src
|
|
* Y or UV plane address of NV12T[in]
|
|
*
|
|
* @param yuv420_width
|
|
* real width of YUV420[in]
|
|
*
|
|
* @param yuv420_height
|
|
* (real height)/2 of YUV420[in]
|
|
*/
|
|
void csc_tiled_to_linear_uv_neon(
|
|
unsigned char *uv_dst,
|
|
unsigned char *uv_src,
|
|
unsigned int width,
|
|
unsigned int height);
|
|
|
|
/*
|
|
* Converts tiled data to linear for mfc 6.x
|
|
* Deinterleave src to u_dst, v_dst
|
|
* 1. UV of NV12T to Y of YUV420P
|
|
*
|
|
* @param u_dst
|
|
* U plane address of YUV420P[out]
|
|
*
|
|
* @param v_dst
|
|
* V plane address of YUV420P[out]
|
|
*
|
|
* @param nv12t_src
|
|
* Y or UV plane address of NV12T[in]
|
|
*
|
|
* @param yuv420_width
|
|
* real width of YUV420[in]
|
|
*
|
|
* @param yuv420_height
|
|
* (real height)/2 of YUV420[in]
|
|
*/
|
|
void csc_tiled_to_linear_uv_deinterleave_neon(
|
|
unsigned char *u_dst,
|
|
unsigned char *v_dst,
|
|
unsigned char *uv_src,
|
|
unsigned int width,
|
|
unsigned int height);
|
|
|
|
/*
|
|
* Converts linear data to tiled
|
|
* 1. y of yuv420 to y of nv12t
|
|
*
|
|
* @param dst
|
|
* y address of nv12t[out]
|
|
*
|
|
* @param src
|
|
* y address of yuv420[in]
|
|
*
|
|
* @param yuv420_width
|
|
* real width of yuv420[in]
|
|
* it should be even
|
|
*
|
|
* @param yuv420_height
|
|
* real height of yuv420[in]
|
|
* it should be even.
|
|
*
|
|
*/
|
|
void csc_linear_to_tiled_y_neon(
|
|
unsigned char *y_dst,
|
|
unsigned char *y_src,
|
|
unsigned int width,
|
|
unsigned int height);
|
|
|
|
/*
|
|
* Converts and interleaves linear data to tiled
|
|
* 1. uv of nv12t to uv of yuv420
|
|
*
|
|
* @param dst
|
|
* uv address of nv12t[out]
|
|
*
|
|
* @param src
|
|
* u address of yuv420[in]
|
|
*
|
|
* @param src
|
|
* v address of yuv420[in]
|
|
*
|
|
* @param yuv420_width
|
|
* real width of yuv420[in]
|
|
*
|
|
* @param yuv420_height
|
|
* real height of yuv420[in]
|
|
*
|
|
*/
|
|
void csc_linear_to_tiled_uv_neon(
|
|
unsigned char *uv_dst,
|
|
unsigned char *u_src,
|
|
unsigned char *v_src,
|
|
unsigned int width,
|
|
unsigned int height);
|
|
|
|
/*
|
|
* Converts RGB565 to YUV420P
|
|
*
|
|
* @param y_dst
|
|
* Y plane address of YUV420P[out]
|
|
*
|
|
* @param u_dst
|
|
* U plane address of YUV420P[out]
|
|
*
|
|
* @param v_dst
|
|
* V plane address of YUV420P[out]
|
|
*
|
|
* @param rgb_src
|
|
* Address of RGB565[in]
|
|
*
|
|
* @param width
|
|
* Width of RGB565[in]
|
|
*
|
|
* @param height
|
|
* Height of RGB565[in]
|
|
*/
|
|
void csc_RGB565_to_YUV420P(
|
|
unsigned char *y_dst,
|
|
unsigned char *u_dst,
|
|
unsigned char *v_dst,
|
|
unsigned char *rgb_src,
|
|
unsigned int width,
|
|
unsigned int height);
|
|
|
|
/*
|
|
* Converts RGB565 to YUV420S
|
|
*
|
|
* @param y_dst
|
|
* Y plane address of YUV420S[out]
|
|
*
|
|
* @param uv_dst
|
|
* UV plane address of YUV420S[out]
|
|
*
|
|
* @param rgb_src
|
|
* Address of RGB565[in]
|
|
*
|
|
* @param width
|
|
* Width of RGB565[in]
|
|
*
|
|
* @param height
|
|
* Height of RGB565[in]
|
|
*/
|
|
void csc_RGB565_to_YUV420SP(
|
|
unsigned char *y_dst,
|
|
unsigned char *uv_dst,
|
|
unsigned char *rgb_src,
|
|
unsigned int width,
|
|
unsigned int height);
|
|
|
|
/*
|
|
* Converts ARGB8888 to YUV420P
|
|
*
|
|
* @param y_dst
|
|
* Y plane address of YUV420P[out]
|
|
*
|
|
* @param u_dst
|
|
* U plane address of YUV420P[out]
|
|
*
|
|
* @param v_dst
|
|
* V plane address of YUV420P[out]
|
|
*
|
|
* @param rgb_src
|
|
* Address of ARGB8888[in]
|
|
*
|
|
* @param width
|
|
* Width of ARGB8888[in]
|
|
*
|
|
* @param height
|
|
* Height of ARGB8888[in]
|
|
*/
|
|
void csc_ARGB8888_to_YUV420P(
|
|
unsigned char *y_dst,
|
|
unsigned char *u_dst,
|
|
unsigned char *v_dst,
|
|
unsigned char *rgb_src,
|
|
unsigned int width,
|
|
unsigned int height);
|
|
|
|
/*
|
|
* Converts ARGB888 to YUV420SP
|
|
*
|
|
* @param y_dst
|
|
* Y plane address of YUV420SP[out]
|
|
*
|
|
* @param uv_dst
|
|
* UV plane address of YUV420SP[out]
|
|
*
|
|
* @param rgb_src
|
|
* Address of ARGB8888[in]
|
|
*
|
|
* @param width
|
|
* Width of ARGB8888[in]
|
|
*
|
|
* @param height
|
|
* Height of ARGB8888[in]
|
|
*/
|
|
void csc_ARGB8888_to_YUV420SP(
|
|
unsigned char *y_dst,
|
|
unsigned char *uv_dst,
|
|
unsigned char *rgb_src,
|
|
unsigned int width,
|
|
unsigned int height);
|
|
|
|
#endif /*COLOR_SPACE_CONVERTOR_H_*/
|
|
|