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

📄 cvidc.h

📁 一个不错的视频压缩源码
💻 H
字号:
// CVIDC.H
// VIDEO CODEC MANAGER
//
// Public Class definition header
// RELEASE 1099 :
//		
// Last Edition 06.10.00
// (c)V.Gorbatenko	1996-2000
// All rights reserved
// gvv@mail.tomsknet.ru
//C++ Builder ported by Ismael Bamba ismail.b@mangoosta.net
//__________________________________________________________________________________________

#ifndef _VIDC_INCL

#include <windows.h>
#include <vcl.h>

#if !defined(_INC_VFW)
    #define	NODRAWDIB
    #define	NOAVIFMT
    #define	NOMMREG
    #define	NOAVIFILE
    #define	NOMCIWND
    #define	NOMSACM
    #define	NOVIDEO
    #include <vfw.h>
#endif

#define _VIDC_INCL

/*
  DLL export directive
*/
#ifdef _DLL_BUILD_
 #define _DLL_EXPOSURE_  __declspec(dllexport)
#else
 #define _DLL_EXPOSURE_  __declspec(dllimport)
#endif


//__________________________________________________________________________________________
typedef HANDLE HDIB;
//__________________________________________________________________________________________
/*
 C++ builder specific stuff to emulate MFC CStringArray ,CString and  CDWordArray
*/
#include <vector>

template<class T> class CObjectArray
{
public:
 CObjectArray(void){}
 ~CObjectArray(void){}
 void RemoveAll(){vector_.clear();}
 void RemoveAt( int nIndex, int nCount = 1 )//TODO delete subsequent nCount elements
 {
   std::vector<T>::iterator where =&vector_[nIndex];
   vector_.erase(where);
 }
 void CObjectArray::Add(T newElement){vector_.push_back(newElement);}
 int GetSize( ) const{return vector_.size();}
 T operator [](int i)const{return  vector_[i];}
private:
 std::vector<T> vector_;
};
//__________________________________________________________________________________________
typedef class _DLL_EXPOSURE_ tagString
{
 public:
 tagString(void);
 tagString(tagString&);
 tagString(const char*);
 tagString::tagString(const AnsiString& );
 ~tagString(void);
 operator const char* ()const;
 operator char* ()const;
 friend BOOL operator ==(tagString,tagString);
 BOOL operator ==(const char*);
 const char* c_str(void)const ;
 void operator =(const char*);
 void operator =(const AnsiString&);
 void Format(char* szFormat,...);
 private:
 AnsiString str_;
}CString;
//__________________________________________________________________________________________
typedef CObjectArray<CString> CStringArray;
//__________________________________________________________________________________________
typedef CObjectArray<DWORD>   CDWordArray;
//__________________________________________________________________________________________
float	_DLL_EXPOSURE_ AE32(BYTE *buf1, BYTE *buf2, int cx, int cy);
float	_DLL_EXPOSURE_ AE24(BYTE *buf1, BYTE *buf2, int cx, int cy);
//__________________________________________________________________________________________
inline int BITMAPSIZE(LPBITMAPINFOHEADER pbih)
{
 float bytesPerpixel;
 switch(pbih->biBitCount)
 {
  case 1 : bytesPerpixel=0.125;break;
  case 4 : bytesPerpixel=0.5;break;
  case 8 : bytesPerpixel=1;break;
  case 24: bytesPerpixel=3;break;
  case 32: bytesPerpixel=4;break;
 }
 return (int)(pbih->biWidth*pbih->biHeight*bytesPerpixel);
}
//__________________________________________________________________________________________
class _DLL_EXPOSURE_ CVidc
{

public:
	CVidc();
	~CVidc();
	
	BOOL	OpenCompressor(DWORD dwFccOutput, BOOL fQuery=FALSE);
	BOOL	OpenDecompressor(LPBITMAPINFOHEADER lpInBmp);
	BOOL	OpenDecompressor(DWORD dwFccInput);
	BOOL	SetProgressCallback(LONG lParam, VOID *cb);


	HDIB	Compress(LPBITMAPINFO lpInputBmp, LPBYTE lpData, BOOL fUse_any=TRUE);
	HDIB	Decompress(LPBITMAPINFO lpInputBmp, LPBITMAPINFO lpOutputBmp, LPBYTE lpInb);
	BOOL	DecompressEx(LPBITMAPINFO lpInputBmp, LPBYTE lpInb, LPBITMAPINFO lpOutputBmp, LPBYTE lpOutb, DWORD dwFlags);
	
	VOID	Close();

	LPCSTR	GetName();
	DWORD	GetFcc();
	BOOL	IsOpened();
	
	//static methods
static	BOOL	EnumCodecs(CStringArray &names, CDWordArray &fcc,CDWordArray &QualitySupport);
static	LPSTR	GetCompressorName(DWORD dwFccOut);

	//misc
static	LPBYTE	LockDIB(HDIB hdib, LPBITMAPINFO *lpBI);
static	HDIB	UnlockDIB(HDIB hdib);
static	VOID	FreeDIB(HDIB hdib)	{if(hdib) GlobalFree(hdib);}

	//Query
	BOOL	QueryAboutDlg();
	BOOL	QueryConfigDlg();
	BOOL	QueryCompressInputFormat(LPBITMAPINFOHEADER   lpInBmp);
	BOOL	QueryDecompressFormat(LPBITMAPINFOHEADER lpInBmp, LPBITMAPINFOHEADER lpOutBmp=NULL);
	
	//dialogs
	BOOL	AboutDlg(HWND hwnd);
	BOOL	ConfigDlg(HWND hwnd);

	//attribute
	INT		m_iCompressionQuality;

protected:
	HIC		_open4Query(int indx);
	void	_selfInit();
	void	_getName();

	DWORD	m_dwFcc;
	HIC		m_hIC;
	CString	m_Name;
	ICINFO	m_icinfo;
	DWORD	m_dwMode;
};

//inlines
inline 	LPCSTR	CVidc::GetName()
	{return (LPCSTR)m_Name;}
inline	DWORD	CVidc::GetFcc()
	{return m_dwFcc;}
inline	BOOL	CVidc::IsOpened()
	{return (BOOL)m_hIC;}

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -