2026-04-12 17:47:54 +08:00

153 lines
4.3 KiB
C

/*
*******************************************************************************
* Copyright (c) 2010-2022 VATICS(KNERON) Inc. All rights reserved.
*
* +-----------------------------------------------------------------+
* | THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED |
* | AND COPIED IN ACCORDANCE WITH THE TERMS AND CONDITIONS OF SUCH |
* | A LICENSE AND WITH THE INCLUSION OF THE THIS COPY RIGHT NOTICE. |
* | THIS SOFTWARE OR ANY OTHER COPIES OF THIS SOFTWARE MAY NOT BE |
* | PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON. THE |
* | OWNERSHIP AND TITLE OF THIS SOFTWARE IS NOT TRANSFERRED. |
* | |
* | THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT |
* | ANY PRIOR NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY |
* | VATICS(KNERON) INC. |
* +-----------------------------------------------------------------+
*
*******************************************************************************
*/
#ifndef _AVICONTAINER_H_
#define _AVICONTAINER_H_
/*
The data format of config info
Video codecs (H264, JPEG)
FOURCC_type (FOURCC_H264 or FOURCC_JPEG, 4 bytes)
width (4 bytes)
height (4 bytes)
G711:
FOURCC_G711 (4 bytes)
compression_format (FOURCC_ULAW or FOURCC_ALAW, 4bytes)
G726:
FOURCC_G726 (4 bytes)
dwCodewordBits (bitrate/sample rate, 4 bytes)
GAMR:
FOURCC_GAMR (4 bytes)
AAC4
FOURCC_AAC4 (4 bytes)
sameple rate (4 bytes)
channel num (4 bytes)
*/
#define AVIC_PADDING_SIZE 2
#define AVIC_KEYFRAME 0x00000010
#define AVIC_NONE 0x00000000
//#define BLOCK_ALIGNMENT
typedef struct
{
char *szAVIFile; /**< file name */
unsigned int dwVideoTrackNum; /**< The total number of track */
unsigned char* ptVideoTrackBufInfo[2]; /**< The video config info array */
unsigned int dwAudioTrackNum; /**< total audio number of track */
unsigned char* ptAudioTrackBufInfo[2]; /**< The audio config info array */
unsigned int dwAviCreateHeader; /**< create avi header when creating file*/
#ifdef AVIv2
unsigned int dwRecLen; /**< Record length in Seconds*/
unsigned int dwFrameToUpdate; /**< Number of frames to trigger SuperIdx Update*/
#endif
} AVICCreateOptions;
typedef struct AVICHandle AVICHandle;
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief Function to initialize AVI container.
*
* @return The handle of AVI container
*/
AVICHandle* AVIC_Init();
/**
* @brief Function to release AVI container.
*
* @param[in] handle The handle of AVI container.
*/
void AVIC_Release(AVICHandle* handle);
/**
* @brief Function to create an AVI file.
*
* @param[in] handle The handle of AVI container.
* @param[in] option The AVI container's configuration.
* @return Success: 0 Fail: negative integer.
*/
int AVIC_CreateFile(AVICHandle* handle, const AVICCreateOptions* option);
typedef struct
{
unsigned int dwFlags;
unsigned char* data;
} avic_sample_info_t;
/**
* @brief Add a sample into an AVI file.
*
* @param[in] handle The handle of AVI container.
* @param[in] dwTrackID The AVI track id for written data.
* @param[in] pbyRawData The pointer to a sample.
* @param[in] dwSampleSz the size of a sample.
* @return Success: 0 Fail: negative integer.
*/
int AVIC_AddSample(AVICHandle* handle, unsigned int dwTrackID, const avic_sample_info_t* sample);
/**
* @brief Function to cloase an AVI file.
*
* @param[in] handle The handle of AVI container.
* @param[in] video_duration_ms The video data's duration (in msec).
* @return Success: 0 Fail: negative integer.
*/
int AVIC_CloseFile(AVICHandle* handle, unsigned int video_duration_ms);
/**
* @brief Start/Notify to sync data into disk (Non-Blocking).
*
* @param[in] handle The handle of AVI container.
* @return Success: 0 Fail: negative integer.
*/
int AVIC_CommitData(AVICHandle* handle);
/**
* @brief Flush I/O cache and sync data into disk.
*
* @param[in] handle The handle of AVI container.
* @return Success: 0 Fail: negative integer.
*/
int AVIC_FlushCache(AVICHandle* handle);
#ifdef AVIv2
/**
* @brief Avi 2.0, Update SuperIndx and standard index
*
* @param[in] handle The handle of AVI container.
* @return Success: 0 Fail: negative integer.
*/
int AVIC_UpdateFile(AVICHandle* handle, int duration_ms);
#endif
#ifdef __cplusplus
}
#endif
#endif // _AVICONTAINER_H_