linuxOS_AP06/app/rkadk/include/rkadk_photo.h
2025-06-03 12:28:32 +08:00

184 lines
5.2 KiB
C

/*
* Copyright (c) 2021 Rockchip, Inc. All Rights Reserved.
*
* 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 __RKADK_PHOTO_H__
#define __RKADK_PHOTO_H__
#ifdef __cplusplus
extern "C" {
#endif
#include "rkadk_common.h"
#include "rkadk_media_comm.h"
#include <stdbool.h>
#define RKADK_MPF_LARGE_THUMB_NUM_MAX 2
/** photo type enum */
typedef enum {
RKADK_PHOTO_TYPE_SINGLE = 0,
RKADK_PHOTO_TYPE_MULTIPLE,
RKADK_PHOTO_TYPE_LAPSE, // TODO
RKADK_PHOTO_TYPE_BUTT
} RKADK_PHOTO_TYPE_E;
typedef enum {
RKADK_JPG_THUMB_TYPE_DCF,
RKADK_JPG_THUMB_TYPE_MFP1,
RKADK_JPG_THUMB_TYPE_MFP2,
RKADK_JPG_THUMB_TYPE_BUTT
} RKADK_JPG_THUMB_TYPE_E;
typedef enum {
RKADK_PHOTO_MPF_SINGLE = 0,
RKADK_PHOTO_MPF_MULTI,
RKADK_PHOTO_MPF_BUTT
} RKADK_PHOTO_MPF_MODE_E;
typedef RKADK_THUMB_ATTR_S RKADK_PHOTO_DATA_ATTR_S;
/** single photo attr */
typedef struct {
// TODO
/* s32TimeSec is 0 that means photo immediately, larger than 0 that means
* photo delay s32TimeSec second */
RKADK_S32 s32Time_sec;
} RKADK_PHOTO_SINGLE_ATTR_S;
/** lapse photo attr */
typedef struct {
RKADK_S32 s32Interval_ms; /* unit: millisecond */
} RKADK_PHOTO_LAPSE_ATTR_S;
/** burst photo attr */
typedef struct {
/* s32Count is -1 that means continuous photo, larger than 0 that meas photo
* number */
RKADK_S32 s32Count;
} RKADK_PHOTO_MULTIPLE_ATTR_S;
/* photo thumbnail MPF config */
typedef struct {
RKADK_U8 u8LargeThumbNum;
SIZE_S astLargeThumbSize[RKADK_MPF_LARGE_THUMB_NUM_MAX];
} RKADK_PHOTO_MPF_CFG_S;
/* photo thumbnail MPF attr */
typedef struct {
RKADK_PHOTO_MPF_MODE_E eMode;
RKADK_PHOTO_MPF_CFG_S sCfg;
} RKADK_PHOTO_MPF_ATTR_S;
/* photo thumbnail attr */
typedef struct {
RKADK_BOOL bSupportDCF; /* Fixed resolution: 160 * 120 jpg */
RKADK_PHOTO_MPF_ATTR_S stMPFAttr;
} RKADK_PHOTO_THUMB_ATTR_S;
/* photo recv data */
typedef struct {
RKADK_U8 *pu8DataBuf;
RKADK_U32 u32DataLen;
RKADK_U32 u32CamId;
bool bStreamEnd;
void *userdata;
} RKADK_PHOTO_RECV_DATA_S;
/* photo data recv callback */
typedef void (*RKADK_PHOTO_DATA_RECV_FN_PTR)(
RKADK_PHOTO_RECV_DATA_S *pstData);
typedef struct {
RKADK_PHOTO_TYPE_E enPhotoType;
union tagPhotoTypeAttr {
RKADK_PHOTO_SINGLE_ATTR_S stSingleAttr;
RKADK_PHOTO_LAPSE_ATTR_S stLapseAttr; // TODO
RKADK_PHOTO_MULTIPLE_ATTR_S stMultipleAttr;
} unPhotoTypeAttr;
} RKADK_TAKE_PHOTO_ATTR_S;
typedef struct {
RKADK_U32 u32VencChn;
RKADK_U32 u32VdecChn;
//format change venc parameter
RKADK_U32 u32BitRate; //default 4M
RKADK_U32 u32Profile; //default 77
} RKADK_PHOTO_FMT_CHANGE_S;
typedef struct {
RKADK_U32 u32CamId; /** cam id, 0--front 1--rear */
RKADK_PHOTO_THUMB_ATTR_S stThumbAttr;
RKADK_PHOTO_DATA_RECV_FN_PTR pfnPhotoDataProc;
void *userdata;
RKADK_POST_ISP_ATTR_S *pstPostIspAttr;
RKADK_PHOTO_FMT_CHANGE_S stFmtChange;
} RKADK_PHOTO_ATTR_S;
/****************************************************************************/
/* Interface Definition */
/****************************************************************************/
/**
* @brief init photo, it should be called first
* @param[in] pstPhotoAttr: photo attribute
* @return 0 success, non-zero error code.
*/
RKADK_S32 RKADK_PHOTO_Init(RKADK_PHOTO_ATTR_S *pstPhotoAttr, RKADK_MW_PTR *ppHandle);
/**
* @brief deinit photo
* @param[in] u32CamId: camera id
* @return 0 success, non-zero error code.
*/
RKADK_S32 RKADK_PHOTO_DeInit(RKADK_MW_PTR pHandle);
/**
* @brief take photo
* @param[in] pstPhotoAttr: photo attribute
* @return 0 success, non-zero error code.
*/
RKADK_S32 RKADK_PHOTO_TakePhoto(RKADK_MW_PTR pHandle, RKADK_TAKE_PHOTO_ATTR_S *pstAttr);
/**
* @brief get thumbnail in jpg
* @param[in] pszFileName: file name
* @param[in] type: thumbnail type
* @param[out] pu8Buf: thumbnail data
* @param[in/out] pu32Size: in: pu8Buf size, out: thumbnail size
* @return 0 success, non-zero error code.
*/
RKADK_S32 RKADK_PHOTO_GetThmInJpg(RKADK_U32 u32CamId, RKADK_CHAR *pszFileName,
RKADK_JPG_THUMB_TYPE_E eThmType,
RKADK_U8 *pu8Buf, RKADK_U32 *pu32Size);
RKADK_S32 RKADK_PHOTO_GetThmInJpgEx(RKADK_U32 u32CamId, RKADK_CHAR *pszFileName,
RKADK_JPG_THUMB_TYPE_E eThmType,
RKADK_THUMB_ATTR_S *pstThumbAttr);
RKADK_S32 RKADK_PHOTO_ThumbBufFree(RKADK_THUMB_ATTR_S *pstThumbAttr);
RKADK_S32 RKADK_PHOTO_Reset(RKADK_MW_PTR *ppHandle);
RKADK_S32 RKADK_PHOTO_GetData(RKADK_CHAR *pcFileName,
RKADK_PHOTO_DATA_ATTR_S *pstDataAttr);
RKADK_S32 RKADK_PHOTO_FreeData(RKADK_PHOTO_DATA_ATTR_S *pstDataAttr);
#ifdef __cplusplus
}
#endif
#endif