/* * Copyright (c) 2022 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_MUXER_H__ #define __RKADK_MUXER_H__ #ifdef __cplusplus extern "C" { #endif #include #include #include #include #include "rkadk_common.h" #include "rkadk_aov.h" #include "rkadk_media_comm.h" #define RKADK_MUXER_FILE_NAME_LEN RKADK_MAX_FILE_PATH_LEN #define RKADK_MUXER_STREAM_MAX_CNT RECORD_FILE_NUM_MAX #define RKADK_MUXER_TRACK_MAX_CNT 2 /* a video track and a audio track */ #define RKADK_MUXER_CELL_MAX_CNT 40 typedef enum { RKADK_MUXER_EVENT_STREAM_START = 0, RKADK_MUXER_EVENT_STREAM_STOP, RKADK_MUXER_EVENT_FILE_BEGIN, RKADK_MUXER_EVENT_FILE_END, RKADK_MUXER_EVENT_MANUAL_SPLIT_END, RKADK_MUXER_EVENT_ERR_GET_FILENAME, RKADK_MUXER_EVENT_ERR_CREATE_FILE_FAIL, RKADK_MUXER_EVENT_ERR_WRITE_FILE_FAIL, RKADK_MUXER_EVENT_FILE_WRITING_SLOW, RKADK_MUXER_EVENT_ERR_CARD_NONEXIST, RKADK_MUXER_EVENT_BUTT } RKADK_MUXER_EVENT_E; typedef struct { RKADK_CHAR asFileName[RKADK_MUXER_FILE_NAME_LEN]; RKADK_U32 u32Duration; // ms } RKADK_MUXER_FILE_EVENT_INFO_S; typedef struct { RKADK_CHAR asFileName[RKADK_MUXER_FILE_NAME_LEN]; RKADK_S32 s32ErrorCode; } RKADK_MUXER_ERROR_EVENT_INFO_S; typedef struct { RKADK_MUXER_EVENT_E enEvent; union { RKADK_MUXER_FILE_EVENT_INFO_S stFileInfo; RKADK_MUXER_ERROR_EVENT_INFO_S stErrorInfo; } unEventInfo; } RKADK_MUXER_EVENT_INFO_S; typedef struct { RKADK_U32 u32CamId; RKADK_U32 u32ChnId; RKADK_U64 u64PTS; RKADK_U32 u32Seq; const char *pFileName; } RKADK_MUXER_PTS_INFO_S; /* muxer pts callback function */ typedef RKADK_VOID (*RKADK_MUXER_PTS_CALLBACK_FN)(const RKADK_MUXER_PTS_INFO_S *pstPtsInfo); /* muxer event callback function */ typedef RKADK_VOID (*RKADK_MUXER_EVENT_CALLBACK_FN)( RKADK_MW_PTR pHandle, const RKADK_MUXER_EVENT_INFO_S *pstEventInfo); /* Muxer request file name callback function */ typedef int (*RKADK_MUXER_REQUEST_FILE_NAME_CB)(RKADK_VOID *pHandle, RKADK_CHAR *pcFileName, RKADK_U32 u32MuxerId); /* cell release buf callback */ typedef int (*RKADK_MUXER_CELL_CALLBACK)(void *pMbBlk); /* muxer manual split type enum */ typedef enum { MUXER_PRE_MANUAL_SPLIT, /* pre manual split type */ MUXER_NORMAL_MANUAL_SPLIT, /* normal manual split type */ } RKADK_MUXER_MANUAL_SPLIT_TYPE_E; /* pre manual split attribute */ typedef struct { RKADK_MUXER_MANUAL_SPLIT_TYPE_E enManualType; /* maual split type */ RKADK_U32 u32DurationSec; /* file duration of manual split file */ } RKADK_MUXER_MANUAL_SPLIT_ATTR_S; typedef enum { RKADK_MUXER_TYPE_MP4 = 0, RKADK_MUXER_TYPE_MPEGTS, RKADK_MUXER_TYPE_FLV, RKADK_MUXER_TYPE_BUTT } RKADK_MUXER_FILE_TYPE_E; typedef enum { RKADK_TRACK_SOURCE_TYPE_VIDEO = 0, RKADK_TRACK_SOURCE_TYPE_AUDIO, RKADK_TRACK_SOURCE_TYPE_BUTT } RKADK_TRACK_SOURCE_TYPE_E; typedef struct { RKADK_CODEC_TYPE_E enCodecType; RKADK_CHAR cPixFmt[RKADK_PIX_FMT_LEN]; RKADK_U32 u32Width; RKADK_U32 u32Height; RKADK_U32 u32BitRate; RKADK_U32 u32FrameRate; RKADK_U32 u32Gop; RKADK_U16 u16Profile; RKADK_U16 u16Level; } RKADK_TRACK_VIDEO_SOURCE_INFO_S; typedef struct { RKADK_CODEC_TYPE_E enCodecType; RKADK_U16 u32BitWidth; RKADK_U32 u32ChnCnt; RKADK_U32 u32SampleRate; RKADK_U32 u32SamplesPerFrame; RKADK_U32 u32Bitrate; } RKADK_TRACK_AUDIO_SOURCE_INFO_S; typedef struct { RKADK_TRACK_SOURCE_TYPE_E enTrackType; union { RKADK_TRACK_VIDEO_SOURCE_INFO_S stVideoInfo; /*