📄 cvidc.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 + -