⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 encoder264.cpp

📁 h264编解码.用C++实现了图像的编解码功能。
💻 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 + -