📄 encoder264.cpp
字号:
// Encoder264.cpp : Defines the entry point for the DLL application.
//
#include "stdafx.h"
#include "Encoder264.h"
#include "lencod\lencod.h"
#include "stdio.h"
#include "stdlib.h"
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
// This is an example of an exported variable
ENCODER264_API int nEncoder264=0;
// This is an example of an exported function.
ENCODER264_API int fnEncoder264(void)
{
return 42;
}
// This is the constructor of a class that has been exported.
// see Encoder264.h for the class definition
CEncoder264::CEncoder264()
{
return;
}
char *cmrRGB;
struct codpar codpar;
bool continueFlag,CmrFlag;
char *outBuffer;
static int frameRate;
static bool noFileFlag=TRUE;
HANDLE success;
bool b_SetInBuf=false; //设置输入缓冲标志
bool b_SetOutBuf=false; //设置输出缓冲标志
bool b_Compress=false; //是否启动压缩标志
extern En_CompressEndHandler_t compressEndHandler=NULL; //压缩完成事件
extern En_CompressErrHandler_t compressErrHandler=NULL; //压缩错误事件
extern bool b_display=false; //是否显示
extern bool b_save=false; //是否存储YUV
extern bool b_264Save=false; //标记是否开始存储264数据
extern bool b_FirstSave=true;
extern FILE* fileEncoder=NULL; //264文件句柄
//初始化
extern ENCODER264_API int En_Init()
{
codpar.defilter = TRUE;
codpar.desave = TRUE;
codpar.drop = 0;
codpar.force = 300;
codpar.format = 0;
codpar.hadama = FALSE;
codpar.srchrange =2;
codpar.QPset = 28;
codpar.codnum = 1;
strcpy(codpar.IPAddr,"127.0.0.1");
frameRate =0;
continueFlag = TRUE;
CmrFlag = FALSE;
noFileFlag = TRUE;
outBuffer=(char*)malloc(512);
memset(outBuffer,0,512);
return 0;
}
ENCODER264_API int En_Exit()
{
if(outBuffer!=NULL)
{
free(outBuffer);
}
outBuffer=NULL;
return 0;
}
//设置原始图像缓冲区
extern ENCODER264_API int En_SetCompressIn(char *InBuf)
{
cmrRGB=InBuf;
b_SetInBuf=true;
return 0;
}
//设置压缩图像压缩后缓冲区
/*
extern ENCODER264_API int En_SetCompressOut(char *OutBuf)
{
b_SetOutBuf=true;
return 0;
}*/
//开始压缩
extern ENCODER264_API int En_StartEncoder(void)
{
if(!b_SetInBuf) //未设置输入输出缓冲区
{
b_Compress=false;
return -1;
}
continueFlag=TRUE;
success=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)cmrcod,NULL,0,NULL );//h264dec(filename,saveName);
if(!success)
{
b_Compress=false;
return -2;
}
b_Compress=true;
return 0;
}
//停止压缩
extern ENCODER264_API int En_StopEncoder(void)
{
continueFlag=FALSE;
b_Compress=false;
return 0;
}
//注册压缩完成后事件处理函数
extern ENCODER264_API int En_RegCompressHandler(En_CompressEndHandler_t compressEndFunc)
{
if(compressEndFunc!=NULL)
{
compressEndHandler=compressEndFunc;
return 0;
}
return -1;
}
//注册错误事件处理函数
extern ENCODER264_API int En_RegErrHandler(En_CompressErrHandler_t CompressErrFunc)
{
if(CompressErrFunc!=NULL)
{
compressErrHandler=CompressErrFunc;
return 0;
}
return -1;
}
//是否去块效应过滤器
extern ENCODER264_API int En_SetDeFilter(bool bFilter)
{
codpar.defilter=bFilter;
return 0;
}
//是否解码存储
extern ENCODER264_API int En_SetDeSave(bool bDeSave)
{
codpar.desave=bDeSave;
return 0;
}
//是否哈德码变换
extern ENCODER264_API int En_SetHadama(bool bHadama)
{
codpar.hadama=bHadama;
return 0;
}
//图形格式,0 QCIF,1 CIF
extern ENCODER264_API int En_SetFormat(int format)
{
codpar.format=format;
return 0;
}
//跳帧设置
extern ENCODER264_API int En_SetDrop(int dropNum)
{
codpar.drop=dropNum;
return 0;
}
//设置搜索范围
extern ENCODER264_API int En_SetSearchRange(int range)
{
codpar.srchrange=range;
return 0;
}
//设置量化参数,默认28
extern ENCODER264_API int En_SetQP(int qp)
{
if(qp<12||qp>36)
return -1;
codpar.QPset=qp;
return 0;
}
//设置强制更新帧间隔
extern ENCODER264_API int En_SetForce(int force)
{
codpar.force=force;
return 0;
}
//设置是否显示
extern ENCODER264_API int En_SetDisplay(bool b)
{
b_display=b;
return 0;
}
//开启存储264文件
extern ENCODER264_API int En_StartSaveEncoder(char *FileName)
{
b_FirstSave=true;
b_264Save=true;
if(fileEncoder!=NULL)
{
fclose(fileEncoder);
fileEncoder=NULL;
}
fileEncoder=fopen(FileName,"wb");
if(fileEncoder==NULL)
{
return -1;
}
return 0;
}
//停止存储264文件
extern ENCODER264_API int En_StopSaveEncoder()
{
b_264Save=false;
b_FirstSave=true;
if(fileEncoder!=NULL)
{
fclose(fileEncoder);
}
fileEncoder=NULL;
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -