nuttx/boards/arm/cxd56xx/spresense/include/cxd56_imageproc.h
Alin Jerpelea 077ef70b0c cxd56xx improvements (#48)
* arch: cxd56xx: Add size limitation for I2C SCU xfer

This is a fw restriction, unroll loop because it can be transfer
up to 16 bytes.

* arch: cxd56xx: Fix lack of leave_critical_section

add the missing leave_critical_section

* arch: cxd56xx: Remove unnecessary file

this header is duplicate and we can remove it

* arch: cxd56xx: Cosmetic change

remove space after function

* arch: cxd56xx: update topreg registers

the topreg registers are updated to match the cxd5602 HW

* arch: cxd56xx: Add voltage setting for low battery notification

Add voltage setting for low battery notification

* arch: cxd56xx: Improve perfomance of SD card

Improve a problem that the clock of SD Host Controller is lower than the
expected value in SDR25 transfer mode.

* arch: cxd56xx: Cosmetic changes

cleanup to comply with coding standard

* boards: cxd56xx: Cosmetic changes

updates to comply with coding standard

* boards: cxd56xx: Fix SD card cannot mount issue

SD card cannot mount when connecting and disconnecting three times
or more due to wrong state of parameter 'initialized'.

This change enables to skip swtching initialized state when mount
failed.
2020-01-07 11:21:58 -03:00

152 lines
5.0 KiB
C

/***************************************************************************
* boards/arm/cxd56xx/spresense/include/cxd56_imageproc.h
*
* Copyright 2018 Sony Semiconductor Solutions Corporation
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. 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.
* 3. Neither the name of Sony Corporation 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 BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE 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 __BOARDS_ARM_CXD56XX_SPRESENSE_INCLUDE_CXD56_IMAGEPROC_H
#define __BOARDS_ARM_CXD56XX_SPRESENSE_INCLUDE_CXD56_IMAGEPROC_H
#include <stdint.h>
#ifdef __cplusplus
extern "C"
{
#endif
/* Structure of rectangle coordinates from left top point to
* right buttom point.
*/
struct imageproc_rect_s
{
uint16_t x1; /* X coordinate of left top point */
uint16_t y1; /* Y coordinate of left top point */
uint16_t x2; /* X coordinate of rignt bottom point */
uint16_t y2; /* Y coordinate of rignt bottom point */
};
typedef struct imageproc_rect_s imageproc_rect_t;
/* Initialize imageproc library
*/
void imageproc_initialize(void);
/* Finalize imageproc library
*/
void imageproc_finalize(void);
/* Convert color format (YUV to RGB)
*
* TODO: need more description here
*
* [in,out] ibuf: image
* [in] hsize: Horizontal size
* [in] vsize: Vertical size
*/
void imageproc_convert_yuv2rgb(uint8_t * ibuf, uint32_t hsize,
uint32_t vsize);
/* Convert color format (YUV to grayscale)
*
* TODO: need more description here
*
* [in] ibuf: Input image
* [out] obuf: Output buffer
* [in] hsize: Horizontal size
* [in] vsize: Vertical size
*/
void imageproc_convert_yuv2gray(uint8_t * ibuf, uint8_t * obuf,
size_t hsize, size_t vsize);
/* Resize image
*
* Resize image specified by ibuf to ohsize, ovsize. Processed
* image will be stored to obuf.
*
* For ohsize and ovsize, specify output size calculated by multiply
* in range 1/2^n to 2^n (n=0..5) against ihsize and ivsize.
*
* This function can be processing for YUV422 color format.
* So all of specified sizes must be multiple of 2.
*
* And there is limitation about output size below.
*
* * Shrink
* + Horizontal size least 12 pixels
* + Vertical size least 12 pixels
* * Enlarge
* + Horizontal size up to 768 pixels
* + Vertical size up to 1024 pixels
*
* [in] ibuf: Input image
* [in] ihsize: Input horizontal size
* [in] ivsize: Input vertical size
* [out] obuf: Output buffer
* [in] ohsize: Output horizontal size
* [in] ovsize: Output vertical size
* [in] bpp: Bits per pixel (16 or 8)
*
* return 0 on success, otherwise error code.
*/
int imageproc_resize(uint8_t * ibuf, uint16_t ihsize, uint16_t ivsize,
uint8_t * obuf, uint16_t ohsize, uint16_t ovsize,
int bpp);
/* Clip and Resize image
*
* [in] ibuf: Input image
* [in] ihsize: Input horizontal size
* [in] ivsize: Input vertical size
* [out] obuf: Output buffer
* [in] ohsize: Output horizontal size
* [in] ovsize: Output vertical size
* [in] bpp: Bits per pixel (16 or 8)
* [in] clip_rect: Clipping rectangle on input image.
*
* return 0 on success, otherwise error code.
*/
int imageproc_clip_and_resize(uint8_t * ibuf, uint16_t ihsize,
uint16_t ivsize, uint8_t * obuf,
uint16_t ohsize, uint16_t ovsize, int bpp,
imageproc_rect_t * clip_rect);
#ifdef __cplusplus
}
#endif
#endif /* __BOARDS_ARM_CXD56XX_SPRESENSE_INCLUDE_CXD56_IMAGEPROC_H */