//MRPlaySdkApi.h
#ifndef __MRPLAYSDK_API_H__
#define __MRPLAYSDK_API_H__

#include "MRNetSdkApi.h"

#ifdef __cplusplus
extern "C" {
#endif

// 播放结束使用消息通知
// 文件需要获得帧编号
// 老文件格式支持

#define MRPLAYSDK_API		extern "C"__declspec(dllexport)
#define MRPLAYSDK_CALL		__stdcall


/* fdMRPSdkSizeChangeCallBack
 * 图像尺寸改变回调函数
   lChn			: 播放句柄
   stream_index	: 视频流通道
   nOldWidth	: 改变前宽度
   nOldHeight	: 改变前高度
   nNewWidth	: 改变后宽度
   nNewHeight	: 改变后高度
   context      : 用户数据
*/
typedef void (*fdMRPSdkSizeChangeCallBack)(
							MRPARAM_IN LONG lChn, 
							MRPARAM_IN int stream_index,
							MRPARAM_IN int nOldWidth,
							MRPARAM_IN int nOldHeight,
							MRPARAM_IN int nNewWidth, 
							MRPARAM_IN int nNewHeight, 
							MRPARAM_IN void *context
							);

typedef enum{
	MRPSDK_MODE_BACKKEYFRAME = 12,	// 关键帧倒退播放
	MRPSDK_MODE_16X   = 11,			// 16倍快进
	MRPSDK_MODE_8X    = 10,			// 8倍快进
	MRPSDK_MODE_4X    = 9,			// 4倍快进
	MRPSDK_MODE_2X    = 8,			// 2倍快进
	MRPSDK_MODE_PLAY  = 7,			// 正常播放
	MRPSDK_MODE_1X16  = 6,			// 1/16慢放
	MRPSDK_MODE_1X8   = 5,			// 1/8慢放
	MRPSDK_MODE_1X4   = 4,			// 1/4慢放
	MRPSDK_MODE_1X2   = 3,			// 1/2慢放
	MRPSDK_MODE_STEP  = 2,			// 单步播放
	MRPSDK_MODE_PAUSE = 1			// 暂停
}MRPSDK_MODE_TYPE;

/* MRPSDK_Init
 * 初始化播放库
 * 成功返回0， 其他为错误值
 * 在使用该模块时，先调研该函数初始化模块
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Init(void);

/* MRPSDK_Cleanup
 * 卸载播放库
 * 成功返回0， 其他为错误值
 * 在停止使用播放库时，调用该函数清除资源
*/
MRPLAYSDK_API void MRPLAYSDK_CALL MRPSDK_Cleanup(void);

/* MRPSDK_GetVersion
 * 获得播放库版本
 * 返回播放库版本
*/
MRPLAYSDK_API DWORD  MRPLAYSDK_CALL MRPSDK_GetVersion(void);
// 根据输入数据获得音频信息

/* MRPSDK_GetAudioInfo
 * 解码音频数据，获得音频信息(如AAC，MP3编码)
   codec_id		: 音频压缩算法, 见MR_AUDIOCODEC_TYPE定义
   pAudioBits   : 压缩音频码流Buffer
   nSize		: pAudioBits大小
   pSampleRate	: 返回采样频率
   pSampleSize	: 返回采样精度
   pChannel		: 返回通道数
   pBitRate		: 返回压缩码率
 * 成功返回0， 其他为错误值
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_GetAudioInfo(
										MRPARAM_IN int codec_id, 
										MRPARAM_IN BYTE *pAudioBits, 
										MRPARAM_IN int nSize, 
										MRPARAM_OUT int *pSampleRate, 
										MRPARAM_OUT int *pSampleSize, 
										MRPARAM_OUT int *pChannel, 
										MRPARAM_OUT int *pBitRate
										);

/* MRPSDK_Chn_LiveOpen
 * 打开流播放通道
   pStChn		: 输出播放通道句柄
   nFifoNums    : 内部缓冲大小, 越大越占用内存
   bLive		: 实时流标志，TRUE - 实时流，FALSE - 远程播放
 * 成功返回0， 其他为错误值
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Chn_LiveOpen(
										MRPARAM_OUT LONG *pStChn, 
										MRPARAM_IN int nFifoNums,
										MRPARAM_IN BOOL bLive
										);

/* MRPSDK_Chn_SetStream
 * 设置通道流信息
   lStChn		: MRPSDK_Chn_LiveOpen的输出值
   nb_streams   : 流总数
   stream		: 流信息指针
 * 成功返回0， 其他为错误值
 * 需要调用MRPSDK_Chn_Start启动播放
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Chn_SetStream(
										MRPARAM_IN LONG lStChn, 
										MRPARAM_IN int nb_streams,
										MRPARAM_IN MRAVSTREAM_T *stream
										);

/* MRPSDK_Chn_GetStream
 * 获得通道流信息
   lStChn		: MRPSDK_Chn_LiveOpen或MRPSDK_Chn_FileOpen的输出值
   stream_index : 流索引
   stream		: 流信息指针
 * 成功返回0， 其他为错误值
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Chn_GetStream(
										MRPARAM_IN LONG lChn, 
										MRPARAM_IN int stream_index, 
										MRPARAM_OUT MRAVSTREAM_T *stream
										);

/* MRPSDK_Chn_FileOpen
 * 打开本地文件播放通道
   pFlChn		: 输出播放句柄
   szFileName   : 文件名
   i64StPos		: 文件播放开始位置
   i64EdPos		: 文件播放结束位置
 * 成功返回0， 其他为错误值
 * 如果播放整个文件，i64EdPos设置成0
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Chn_FileOpen(
										MRPARAM_OUT LONG *pFlChn, 
										MRPARAM_IN const char *szFileName, 
										MRPARAM_IN INT64 i64StPos, 
										MRPARAM_IN INT64 i64EdPos
										);

/* MRPSDK_Chn_RegPlayEndMsg
 * 注册播放结束消息
   lFlChn		: MRPSDK_Chn_FileOpen的输出值
   hMsgWnd		: 接收消息窗口
   wMsgID		: 消息ID
 * 成功返回0， 其他为错误值
 * 需要调用MRPSDK_Chn_Start启动播放
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Chn_RegPlayEndMsg(
										MRPARAM_IN LONG lFlChn, 
										MRPARAM_IN HWND hMsgWnd, 
										MRPARAM_IN UINT uMsgID
										);
/* MRPSDK_Chn_FileIsPassword
 * 判断文件是否有密码
   lFlChn		: MRPSDK_Chn_FileOpen的输出值
 * 有密码返回大于0，返回0为无密码, 小于0为错误值
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Chn_FileIsPassword(
										MRPARAM_IN LONG lFlChn
										);

/* MRPSDK_Chn_FileCheckPassword
 * 校验密码
   lFlChn		: MRPSDK_Chn_FileOpen的输出值
   szPassword	: 密码
 * 校验成功返回1，小于0为错误代码
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Chn_FileCheckPassword(
										MRPARAM_IN LONG lFlChn, 
										MRPARAM_IN const char *szPassword
										);

/* MRPSDK_Chn_Close
 * 关闭播放通道
   lChn		: MRPSDK_Chn_LiveOpen 或 MRPSDK_Chn_FileOpen 的输出值
   szPassword	: 密码
 * 成功返回0，其他为错误值
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Chn_Close(
										MRPARAM_IN LONG lChn
										);

/* MRPSDK_Chn_Stop
 * 停止播放
   lChn		: MRPSDK_Chn_LiveOpen 或 MRPSDK_Chn_FileOpen 的输出值
 * 成功返回0，其他为错误值
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Chn_Stop(
										MRPARAM_IN LONG lChn
										);

/* MRPSDK_Chn_Start
 * 开始播放
   lChn		: MRPSDK_Chn_LiveOpen 或 MRPSDK_Chn_FileOpen 的输出值
 * 成功返回0，其他为错误值
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Chn_Start(
										MRPARAM_IN LONG lChn
										);

/* MRPSDK_Chn_PutData
 * 流播放发送数据
   lChn				: MRPSDK_Chn_LiveOpen的输出值，且bLive为FALSE
   bMallocBuffer	: 分配内存标志, TRUE - 播放SDK内部分配内存，FALSE -不分配内存，直接使用pFrame中的数据指针
   bBlock			: 阻塞标志，TRUE - 如果内部缓冲慢，这个函数会阻塞知道有空的缓冲可用，FALSE - 如果没有可用缓冲，直接返回错误
 * 成功返回0，其他为错误值
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Chn_PutData(
										MRPARAM_IN LONG lChn, 
										MRPARAM_IN BOOL bMallocBuffer, 
										MRPARAM_IN MRAVFrame *pFrame,
										MRPARAM_IN BOOL bBlock
										);

/* MRPSDK_Chn_RegDrawDC
 * 注册OSD表面
   lChn			: MRPSDK_Chn_LiveOpen 或 MRPSDK_Chn_FileOpen 的输出值
   fdCallBack	: 获得OSD表面回调函数
   userdata		: 用户数据
 * 成功返回0，其他为错误值
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Chn_RegDrawDC(
										MRPARAM_IN LONG lChn, 
										MRPARAM_IN fdMRNCb_ChnDrawDC fdCallBack, 
										MRPARAM_IN void *userdata
										);

/* MRPSDK_Chn_RegGetDecFrame
 * 注册获得视频解码数据回调函数
   lChn			: MRPSDK_Chn_LiveOpen 或 MRPSDK_Chn_FileOpen 的输出值
   fdCallBack	: 获得视频解码数据回调函数
   userdata		: 用户数据
 * 成功返回0，其他为错误值
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Chn_RegGetDecFrame(
										MRPARAM_IN LONG lChn, 
										MRPARAM_IN fdMRNCb_ChnGetDecFrame fdCallBack, 
										MRPARAM_IN void *userdata
										);

/* MRPSDK_Chn_RegSizeChange
 * 注册获得视频图像大小改变回调函数
   lChn			: MRPSDK_Chn_LiveOpen 或 MRPSDK_Chn_FileOpen 的输出值
   fdCallBack	: 获得视频图像大小改变回调函数
   userdata		: 用户数据
 * 成功返回0，其他为错误值
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Chn_RegSizeChange(
										MRPARAM_IN LONG lChn, 
										MRPARAM_IN fdMRPSdkSizeChangeCallBack fdCallBack, 
										MRPARAM_IN void *userdata
										);

/* MRPSDK_Chn_GetFifoState
 * 获得内部缓冲状态
   lChn			: MRPSDK_Chn_LiveOpen 或 MRPSDK_Chn_FileOpen 的输出值
   pFillNums	: 输出已经缓冲个数
   userdata		: 输出剩余缓冲个数
 * 成功返回0，其他为错误值
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Chn_GetFifoState(
										MRPARAM_IN LONG lChn, 
										MRPARAM_OUT int *pFillNums, 
										MRPARAM_OUT int *pFreeNums
										);

/* MRPSDK_Chn_GetStreams
 * 获得播放通道流总数
   lChn			: MRPSDK_Chn_LiveOpen 或 MRPSDK_Chn_FileOpen 的输出值
 * 返回流总数，小于0为错误值
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Chn_GetStreams(
										MRPARAM_IN LONG lChn
										);

/* MRPSDK_Chn_GetVideoStreams
 * 获得播放通道视频流总数
   lChn			: MRPSDK_Chn_LiveOpen 或 MRPSDK_Chn_FileOpen 的输出值
 * 返回视频流总数，小于0为错误值
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Chn_GetVideoStreams(
										MRPARAM_IN LONG lChn
										);
/* MRPSDK_Chn_SetVideoWnd
 * 设置视频流显示窗口
   lChn			: MRPSDK_Chn_LiveOpen 的输出值
   stream_index	: 视频流索引
   hWnd			: 视频显示窗口，不能为空，如果要不显示视频以节省CPU资源，使用MRPSDK_Chn_ShowVideo实现
 * 成功返回0，其他为错误值
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Chn_SetVideoWnd(
										MRPARAM_IN LONG lChn, 
										MRPARAM_IN int stream_index, 
										MRPARAM_IN HWND hWnd
										);

/* MRPSDK_Chn_SetAllVideoWnd
 * 设置播放通道所有视频流显示窗口
   lChn			: MRPSDK_Chn_LiveOpen 的输出值
   nb_Wnds		: 视频窗口总数
   hWnd			: 视频窗口列表
 * 成功返回0，其他为错误值
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Chn_SetAllVideoWnd(
										MRPARAM_IN LONG lChn, 
										MRPARAM_IN int nb_Wnds, 
										MRPARAM_IN HWND *pWnd
										);

/* MRPSDK_Chn_SetDelay
 * 设置流播放延时时间
   lChn			: MRPSDK_Chn_LiveOpen 的输出值
   delayms		: 延时时间(毫秒)
 * 成功返回0，其他为错误值
 * 延时越大占用内存越大，反之亦然
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Chn_SetDelay(
										MRPARAM_IN LONG lChn, 
										MRPARAM_IN int delayms
										);

/* MRPSDK_Chn_CleanFifo
 * 清空内部缓冲
   lChn			: MRPSDK_Chn_LiveOpen 的输出值
 * 成功返回0，其他为错误值
 * 在做流播放时，有时需要清空播放缓冲，比如文件跳转
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Chn_CleanFifo(
										MRPARAM_IN LONG lChn
										);

/* MRPSDK_Chn_GetInxData
 * 获得文件索引数据
   lFlChn		: MRPSDK_Chn_FileOpen 的输出值
   pInxBuffer	: 输出索引指针	
 * 返回索引数据长度，小于0为错误值
 * 保留功能
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Chn_GetInxData(
										MRPARAM_IN LONG lFlChn, 
										MRPARAM_OUT BYTE **pInxBuffer
										);

/* MRPSDK_Chn_Play
 * 正常播放
   lChn			: MRPSDK_Chn_LiveOpen 或 MRPSDK_Chn_FileOpen 的输出值
 * 成功返回0，其他为错误值
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Chn_Play(
										MRPARAM_IN LONG lFlChn
										);

/* MRPSDK_Chn_Pause
 * 暂停播放
   lChn			: MRPSDK_Chn_LiveOpen 或 MRPSDK_Chn_FileOpen 的输出值
 * 成功返回0，其他为错误值
 * 实时播放不支持该操作
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Chn_Pause(
										MRPARAM_IN LONG lFlChn
										);

/* MRPSDK_Chn_Step
 * 单步播放
   lChn			: MRPSDK_Chn_LiveOpen 或 MRPSDK_Chn_FileOpen 的输出值
 * 成功返回0，其他为错误值
 * 实时播放不支持该操作
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Chn_Step(
										MRPARAM_IN LONG lFlChn
										);

/* MRPSDK_Chn_SeekTime
 * 播放跳转
   lChn			: MRPSDK_Chn_FileOpen 的输出值
   nSecond		: 调转时间(秒)
 * 成功返回0，其他为错误值
 * 只支持文件播放
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Chn_SeekTime(
										MRPARAM_IN LONG lFlChn, 
										MRPARAM_IN int nSecond
										);

/* MRPSDK_Chn_Fast
 * 快进
   lChn			: MRPSDK_Chn_FileOpen 的输出值
   nFastValue	: 快进值，2, 4, 8, 16可用，0 - 播放器内部自动切换模式，使用MRPSDK_Chn_GetCurPlayMode获得当前模式
 * 成功返回0，其他为错误值
 * 只支持文件播放
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Chn_Fast(
										MRPARAM_IN LONG lFlChn,
										MRPARAM_IN int nFastValue
										);

/* MRPSDK_Chn_Slow
 * 慢放
   lChn			: MRPSDK_Chn_FileOpen 的输出值
   nSlowValue	: 快进值，2, 4, 8, 16对应1/2, 1/4, 1/8, 1/16，0 - 播放器内部自动切换模式，使用MRPSDK_Chn_GetCurPlayMode获得当前模式
 * 成功返回0，其他为错误值
 * 只支持文件播放
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Chn_Slow(
										MRPARAM_IN LONG lFlChn,
										MRPARAM_IN int nSlowValue
										);

/* MRPSDK_Chn_BackKeyFrame
 * 倒退关键帧播放
   lChn			: MRPSDK_Chn_FileOpen 的输出值
 * 成功返回0，其他为错误值
 * 只支持文件播放
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Chn_BackKeyFrame(
										MRPARAM_IN LONG lFlChn
										);

/* MRPSDK_Chn_GetCurPlayMode
 * 获得当前播放状态
   lFlChn		: MRPSDK_Chn_LiveOpen 或 MRPSDK_Chn_FileOpen 的输出值
 * 成功返回MRPSDK_MODE_TYPE定义，小于0为错误值
 * 支持文件和流播放，不支持实时播放
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Chn_GetCurPlayMode(
										MRPARAM_IN LONG lFlChn
										);

/* MRPSDK_Chn_GetFileTime
 * 获得文件总时间
   lFlChn		: MRPSDK_Chn_FileOpen 的输出值
 * 成功返回文件时间(秒)，小于0为错误值
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Chn_GetFileTime(
										MRPARAM_IN LONG lFlChn
										);

/* MRPSDK_Chn_GetCurFrameNo
 * 获得当前帧编号
   lFlChn		: MRPSDK_Chn_FileOpen 的输出值
   stream_index : 流索引
 * 成功返回帧编号，小于0为错误值
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Chn_GetCurFrameNo(
										MRPARAM_IN LONG lFlChn,
										MRPARAM_IN int stream_index
										);


/* MRPSDK_Chn_GetCurTime
 * 获得当前播放时间
   lFlChn		: MRPSDK_Chn_FileOpen 的输出值
 * 成功返回当前播放时间，小于0为错误值
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Chn_GetCurTime(
										MRPARAM_IN LONG lFlChn
										);

/* MRPSDK_Chn_SetCurTime
 * 设置当前播放时间
   lFlChn		: MRPSDK_Chn_FileOpen 的输出值
 * 成功返回0，小于0为错误值
 * 保留功能
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Chn_SetCurTime(
										MRPARAM_IN LONG lFlChn, 
										MRPARAM_IN int nCurSecs
										);

/* MRPSDK_Chn_RegGetData
 * 注册文件播放获得数据回调函数
   lFlChn		 : MRPSDK_Chn_FileOpen 的输出值
   fdCallBack    : 获取数据回调函数指针
   userdata      : 回调函数用户数据
 * 返回0成功，其他为错误值
*/
MRPLAYSDK_API int MRPLAYSDK_CALL MRPSDK_Chn_RegGetData(
										MRPARAM_IN LONG lFlChn, 
										MRPARAM_IN fdMRNCb_ChnGetData fdCallBack, 
										MRPARAM_IN void *userdata
										);

/* MRPSDK_Chn_GetVideosByTime
 * 回去视频通道列表
   lFlChn		: MRPSDK_Chn_FileOpen 的输出值
 * 返回视频通道总数
 * 保留功能
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Chn_GetVideosByTime(
										MRPARAM_IN LONG lFlChn, 
										MRPARAM_IN int nCurSecs, 
										MRPARAM_IN int nRangMs, 
										MRPARAM_OUT int *pVChnList
										);

/* MRPSDK_Chn_GetVideosByFrames
 * 回去视频通道列表
   lFlChn		: MRPSDK_Chn_FileOpen 的输出值
 * 返回视频通道总数
 * 保留功能
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Chn_GetVideosByFrames(
										MRPARAM_IN LONG lFlChn, 
										MRPARAM_OUT int *pVChnList
										);

/* MRPSDK_Chn_ShowVideo
 * 显示/回放
   lChn			: MRPSDK_Chn_LiveOpen 或 MRPSDK_Chn_FileOpen 的输出值
   bShow		: TRUE - 显示视频，FALSE - 不显示视频，并且不解码
 * 成功返回0，小于0为错误值
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Chn_ShowVideo(
										MRPARAM_IN LONG lChn, 
										MRPARAM_IN BOOL bShow
										);

/* MRPSDK_Chn_RefrenshWnd
 * 刷新视频显示窗口
   lChn			: MRPSDK_Chn_LiveOpen 或 MRPSDK_Chn_FileOpen 的输出值
   stream_index	: -1为所有视频窗口
 * 成功返回0，小于0为错误值
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Chn_RefrenshWnd(
										MRPARAM_IN LONG lChn, 
										MRPARAM_IN int stream_index
										);

/* MRPSDK_Chn_ZoomPicture
 * 局部放大视频
   lChn			: MRPSDK_Chn_LiveOpen 或 MRPSDK_Chn_FileOpen 的输出值
   hWnd			: 显示局部放大视频窗口，NULL关闭局部放大
   stream_index : 视频流所有
   nXPen		: X位置(按百分比)
   nYPen		: Y位置(按百分比)
   nWPen		: 宽度(按百分比), 0关闭局部放大
   nHPen		: 高度(按百分比), 0关闭局部放大
 * 成功返回0，小于0为错误值
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Chn_ZoomPicture(
										MRPARAM_IN LONG lChn, 
										MRPARAM_IN HWND hWnd, 
										MRPARAM_IN int stream_index, 
										MRPARAM_IN int nXPen, 
										MRPARAM_IN int nYPen, 
										MRPARAM_IN int nWPen, 
										MRPARAM_IN int nHPen
										);

/* MRPSDK_Chn_CaptureJpeg
 * 抓拍JPEG
   lChn			: MRPSDK_Chn_LiveOpen 或 MRPSDK_Chn_FileOpen 的输出值
   hWnd			: 显示局部放大视频窗口，NULL关闭局部放大
   stream_index : 视频流所有
   nQuality		: 抓拍质量(0 - 100), 100 最后
   lpFileName	: 保存的文件名
 * 成功返回0，小于0为错误值
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Chn_CaptureJpeg(
										MRPARAM_IN LONG lChn, 
										MRPARAM_IN int stream_index,
										MRPARAM_IN int nQuality, 
										MRPARAM_IN const char *lpFileName
										);

/* MRPSDK_Chn_SoundPlay
 * 播放音频
   lChn			: MRPSDK_Chn_LiveOpen 或 MRPSDK_Chn_FileOpen 的输出值
   bStart		: TRUE - 开始播放音频，FALSE - 关闭音频
 * 成功返回0，小于0为错误值
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Chn_SoundPlay(
										MRPARAM_IN LONG lChn, 
										MRPARAM_IN BOOL bStart
										);

/* MRPSDK_Chn_SoundIsOpen
 * 判断是否在播放音频
   lChn			: MRPSDK_Chn_LiveOpen 或 MRPSDK_Chn_FileOpen 的输出值
 * 正在播放音频返回1
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Chn_SoundIsOpen(
										MRPARAM_IN LONG lChn
										);

/* MRPSDK_Chn_GetVolume
 * 获得音量
   lChn			: MRPSDK_Chn_LiveOpen 或 MRPSDK_Chn_FileOpen 的输出值
 * 返回音量(0 - 100)，小于0为错误值
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Chn_GetVolume(
										MRPARAM_IN LONG lChn
										);

/* MRPSDK_Chn_SetVolume
 * 设置音量
   lChn			: MRPSDK_Chn_LiveOpen 或 MRPSDK_Chn_FileOpen 的输出值
   nVolume		: 音量值(0 - 100)
 * 成功返回0，其他为错误值
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Chn_SetVolume(
										MRPARAM_IN LONG lChn, 
										MRPARAM_IN int nVolume
										);

/* MRPSDK_Chn_SoundIsExist
 * 判断播放通道私有包含音频流
   lChn			: MRPSDK_Chn_LiveOpen 或 MRPSDK_Chn_FileOpen 的输出值
 * 有音频返回1，无返回0
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_Chn_SoundIsExist(
										MRPARAM_IN LONG lChn
										);


/* MRPSDK_AudioPlay_Start
 * 打开音频播放通道
   pApChn		: 输出音频播放通道
   audio_codec	: 音频压缩格式, MR_AUDIOCODEC_TYPE
   nSampleRate	: 采样频率
   nSampleBits	: 采样精度
   nChannel		: 通道数
 * 成功返回0，其他为错误值
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_AudioPlay_Start(
										MRPARAM_OUT LONG *pApChn,
										MRPARAM_IN int audio_codec, 
										MRPARAM_IN int nSampleRate, 
										MRPARAM_IN int nSampleBits,
										MRPARAM_IN int nChannel
										);

/* MRPSDK_AudioPlay_PutData
 * 发送音频数据
   lChn			: 音频通道句柄，MRPSDK_AudioPlay_Start的输出值
   pData		: 音频数据
   pts			: 时间戳(毫秒)
   nSize		: 数据大小
 * 成功返回0，其他为错误值
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_AudioPlay_PutData(
										MRPARAM_IN LONG lChn,
										MRPARAM_IN unsigned char *pData,
										MRPARAM_IN int pts,
										MRPARAM_IN int nSize
										);

/* MRPSDK_AudioPlay_Stop
 * 关闭音频播放通道
   lChn			: 音频通道句柄，MRPSDK_AudioPlay_Start的输出值
 * 成功返回0，其他为错误值
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_AudioPlay_Stop(
										MRPARAM_IN LONG lChn
										);

/* MRPSDK_VideoView_OpenChn
 * 打开视频显示通道
   lChn			: 输出显示通道句柄
   hWnd			: 显示窗口
   nWidth		: 宽度
   nHeight		: 高度
 * 成功返回0，其他为错误值
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_VideoView_OpenChn(
										MRPARAM_OUT LONG *lChn, 
										MRPARAM_IN HWND hWnd, 
										MRPARAM_IN int nWidth, 
										MRPARAM_IN int nHeight
										);

/* MRPSDK_VideoView_CloseChn
 * 关闭视频显示通道
   lChn		: 显示句柄，MRPSDK_VideoView_OpenChn的输出值
 * 成功返回0，其他为错误值
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_VideoView_CloseChn(
										MRPARAM_IN LONG lChn
										);

/* MRPSDK_VideoView_ChnShow
 * 显示视频
   lChn		: 显示句柄，MRPSDK_VideoView_OpenChn的输出值
   pY		: Y数据
   pU		: U数据
   pV		: V数据
   nW		: 宽度
   nH		: 高度
   nYStride	: Y跨度
   nUVStride: UV跨度
 * 成功返回0，其他为错误值
 * 图像格式为YUV420平坦模式
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_VideoView_ChnShow(
										MRPARAM_IN LONG lChn, 
										MRPARAM_IN unsigned char *pY, 
										MRPARAM_IN unsigned char *pU, 
										MRPARAM_IN unsigned char *pV,
										MRPARAM_IN int nW, 
										MRPARAM_IN int nH, 
										MRPARAM_IN int nYStride, 
										MRPARAM_IN int nUVStride
										);

/* MRPSDK_CutFileByFrame
 * 按帧剪切文件
   pCutHandle		: 输出剪切句柄
   szSrcFileName	: 源文件名
   u64StPos			: 源文件开始位置
   u64EdPos			: 源文件结束位置，0 - 整个文件
   nStFrameNo		: 开始帧编号
   nEdFrameNo		: 结束帧编号
   szDstFileName	: 剪切保存文件名
   nSaveFileType	: 剪切保持文件类型, MR_PACKTYPE_TYPE
 * 成功返回0，其他为错误值
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_CutFileByFrame(
										MRPARAM_OUT LONG *pCutHandle,
										MRPARAM_IN const char *szSrcFileName,
										MRPARAM_IN UINT64 u64StPos,
										MRPARAM_IN UINT64 u64EdPos,
										MRPARAM_IN int nStFrameNo,
										MRPARAM_IN int nEdFrameNo,
										MRPARAM_IN const char *szDstFileName,
										MRPARAM_IN int nSaveFileType
										);

/* MRPSDK_CutFileByTime
 * 按时间剪切文件
   pCutHandle		: 输出剪切句柄
   szSrcFileName	: 源文件名
   u64StPos			: 源文件开始位置
   u64EdPos			: 源文件结束位置，0 - 整个文件
   nStTime			: 开始时间(秒)
   nEdTime			: 结束时间(秒)
   szDstFileName	: 剪切保存文件名
   nSaveFileType	: 剪切保持文件类型, MR_PACKTYPE_TYPE
 * 成功返回0，其他为错误值
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_CutFileByTime(
										MRPARAM_OUT LONG *pCutHandle,
										MRPARAM_IN const char *szSrcFileName,
										MRPARAM_IN UINT64 u64StPos,
										MRPARAM_IN UINT64 u64EdPos,
										MRPARAM_IN int nStTime,
										MRPARAM_IN int nEdTime,
										MRPARAM_IN const char *szDstFileName,
										MRPARAM_IN int nSaveFileType
										);

/* MRPSDK_CutGetState
 * 获得剪切状态
   lCutHandle		: 剪切句柄，MRPSDK_CutFileByFrame 或 MRPSDK_CutFileByTime 的输出值
 * 成功返回 0 - 100为剪切完成百分比，101为剪切结束，小于0为错误值
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_CutGetState(
										MRPARAM_IN LONG lCutHandle
										);

/* MRPSDK_CutFileClose
 * 关闭剪切句柄
   lCutHandle		: 剪切句柄，MRPSDK_CutFileByFrame 或 MRPSDK_CutFileByTime 的输出值
 * 成功返回0，其他为错误值
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_CutFileClose(
										MRPARAM_IN LONG lCutHandle
										);

/* MRPSDK_MargeFile
 * 文件合并
   pMargeHandle		: 输出合并句柄
   szSrcFileName1	: 源文件名1
   u64StPos1		: 源文件开始位置1
   u64EdPos1		: 源文件结束位置1，0 - 整个文件
   szSrcFileName1	: 源文件名2
   u64StPos2		: 源文件开始位置2
   u64EdPos2		: 源文件结束位置2，0 - 整个文件
   szDstFileName	: 合并保存文件名
   nSaveFileType	: 合并保持文件类型, MR_PACKTYPE_TYPE
 * 成功返回0，其他为错误值
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_MargeFile(
										MRPARAM_OUT LONG *pMargeHandle,
										MRPARAM_IN const char *szSrcFileName1,
										MRPARAM_IN UINT64 u64StPos1,
										MRPARAM_IN UINT64 u64EdPos1,
										MRPARAM_IN const char *szSrcFileName2,
										MRPARAM_IN UINT64 u64StPos2,
										MRPARAM_IN UINT64 u64EdPos2,
										MRPARAM_IN const char *szDstFileName,
										MRPARAM_IN int nSaveFileType
										);

/* MRPSDK_MargeGetState
 * 获得合并状态
   lMargeHandle		: 合并句柄，MRPSDK_MargeFile 的输出值
 * 成功返回 0 - 100为合并完成百分比，101为合并结束，小于0为错误值
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_MargeGetState(
										MRPARAM_IN LONG lMargeHandle
										);

/* MRPSDK_MargeClose
 * 关闭合并句柄
   lMargeHandle		: 合并句柄，MRPSDK_MargeFile 的输出值
 * 成功返回0，其他为错误值
*/
MRPLAYSDK_API int  MRPLAYSDK_CALL MRPSDK_MargeClose(
										MRPARAM_IN LONG lMargeHandle
										);

#ifdef __cplusplus
}
#endif
#endif//__MRPLAYSDK_API_H__
