You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
321 lines
9.1 KiB
321 lines
9.1 KiB
/*
|
|
* @DEC_COPYRIGHT@
|
|
*/
|
|
/*
|
|
* HISTORY
|
|
* $Log: h26x_int.h,v $
|
|
* $EndLog$
|
|
*/
|
|
/*
|
|
**++
|
|
** FACILITY: Workstation Multimedia (WMM) v1.0
|
|
**
|
|
** FILE NAME: h26x_int.h
|
|
** MODULE NAME: h26x_int.h
|
|
**
|
|
** MODULE DESCRIPTION: Internal H.261/H.263 header - used by h26x.c
|
|
**
|
|
** DESIGN OVERVIEW:
|
|
**
|
|
**--
|
|
*/
|
|
#ifndef _H26X_INT_H_
|
|
#define _H26X_INT_H_
|
|
#if !defined(_DEBUG) && defined(WIN32)
|
|
#define HANDLE_EXCEPTIONS
|
|
// #define EXCEPTION_MESSAGES /* dialog boxes appear on critical exceptions */
|
|
#endif
|
|
|
|
#ifdef __osf__ /* NOT needed for NT */
|
|
/*
|
|
* For loading .so.
|
|
*/
|
|
#include <stdlib.h>
|
|
#include <dlfcn.h>
|
|
#endif
|
|
|
|
#define _huge
|
|
#define _loadds
|
|
|
|
#include <windows.h>
|
|
#include <VFW.H>
|
|
// #include "cmm.h"
|
|
#include "slib.h"
|
|
// #include "SR.h"
|
|
#include "dech26x.h"
|
|
|
|
|
|
|
|
#ifdef H261_SUPPORT
|
|
#define H26X_FOURCC VIDEO_FORMAT_DIGITAL_H261
|
|
#ifdef WIN32
|
|
#define H26X_NAME L"Digital H.261"
|
|
#define H26X_DESCRIPTION L"Digital H261 Video CODEC"
|
|
#define H26X_DRIVER L"dech261.dll"
|
|
#else /* !WIN32 */
|
|
#define H26X_NAME "Digital H.261"
|
|
#define H26X_DESCRIPTION "Digital H.261 Video CODEC"
|
|
#define H26X_DRIVER "libh261.so"
|
|
#endif
|
|
#define H26X_KEYNAME "vidc.d261"
|
|
#define H26X_KEYNAME_PRE "vidc"
|
|
#define H26X_KEYNAME_POST "d261"
|
|
#else /* H263 */
|
|
#define H26X_FOURCC VIDEO_FORMAT_DIGITAL_H263
|
|
#ifdef WIN32
|
|
#define H26X_NAME L"Digital H.263"
|
|
#define H26X_DESCRIPTION L"Digital H263 Video CODEC"
|
|
#define H26X_DRIVER L"dech263.dll"
|
|
#else /* !WIN32 */
|
|
#define H26X_NAME "Digital H.263"
|
|
#define H26X_DESCRIPTION "Digital H.263 Video CODEC"
|
|
#define H26X_DRIVER "libh263.so"
|
|
#endif
|
|
#define H26X_KEYNAME "vidc.d263"
|
|
#define H26X_KEYNAME_PRE "vidc"
|
|
#define H26X_KEYNAME_POST "d263"
|
|
#endif /* H263 */
|
|
|
|
#define H26X_VERSION 0x001
|
|
#define H26X_DEFAULT_SATURATION 5000.0
|
|
#define H26X_DEFAULT_CONTRAST 5000.0
|
|
#define H26X_DEFAULT_BRIGHTNESS 5000.0
|
|
#define H26X_DEFAULT_QUALITY 5000
|
|
#define H26X_DEFAULT_FRAMERATE 15.0F
|
|
#define H26X_DEFAULT_BITRATE 0 /* 57344*2 */
|
|
#define H26X_DEFAULT_MODE 0 /* PARAM_ALGFLAG_UMV|PARAM_ALGFLAG_ADVANCED */
|
|
#define H26X_DEFAULT_PACKETSIZE 512
|
|
#define H26X_DEFAULT_RTP EC_RTP_MODE_OFF
|
|
#define H26X_DEFAULT_SQCIF_QI 8
|
|
#define H26X_DEFAULT_SQCIF_QP 8
|
|
#define H26X_DEFAULT_QCIF_QI 9
|
|
#define H26X_DEFAULT_QCIF_QP 9
|
|
#define H26X_DEFAULT_CIF_QI 14
|
|
#define H26X_DEFAULT_CIF_QP 14
|
|
|
|
#define IsH263Codec(h) ((_ICMGetType(h) == VIDEO_FORMAT_DIGITAL_H263) ? TRUE : FALSE)
|
|
#define IsH261Codec(h) ((_ICMGetType(h) == VIDEO_FORMAT_DIGITAL_H261) ? TRUE : FALSE)
|
|
|
|
/*
|
|
* For the loading of the .so (H26X_DRIVER)
|
|
*/
|
|
#define H26X_LDLIB_PATH_COMP "mmeserver"
|
|
#define H26X_DRIVERPROC_ENTRY "ICH263Message"
|
|
#define H26X_OPENPROC_ENTRY "ICH263Open"
|
|
|
|
/*
|
|
** Standard Image sizes
|
|
*/
|
|
#define FULL_WIDTH 640
|
|
#define FULL_HEIGHT 480
|
|
#define NTSC_WIDTH 320
|
|
#define NTSC_HEIGHT 240
|
|
#define SIF_WIDTH 352
|
|
#define SIF_HEIGHT 240
|
|
#define CIF_WIDTH 352
|
|
#define CIF_HEIGHT 288
|
|
#define SQCIF_WIDTH 128
|
|
#define SQCIF_HEIGHT 96
|
|
#define QCIF_WIDTH 176
|
|
#define QCIF_HEIGHT 144
|
|
#define CIF4_WIDTH (CIF_WIDTH*2)
|
|
#define CIF4_HEIGHT (CIF_HEIGHT*2)
|
|
#define CIF16_WIDTH (CIF_WIDTH*4)
|
|
#define CIF16_HEIGHT (CIF_HEIGHT*4)
|
|
|
|
typedef struct SvH261_T_BSINFO_TRAILER{
|
|
unsigned dword dwVersion;
|
|
unsigned dword dwFlags;
|
|
unsigned dword dwUniqueCode;
|
|
unsigned dword dwCompressedSize;
|
|
unsigned dword dwNumberOfPackets;
|
|
unsigned char SourceFormat;
|
|
unsigned char TR;
|
|
unsigned char TRB;
|
|
unsigned char DBQ;
|
|
} RTPTRAILER_t;
|
|
|
|
typedef struct SvH263_T_EX_BITSTREAM_INFO{
|
|
unsigned dword dwFlag;
|
|
unsigned dword dwBitOffset;
|
|
unsigned char Mode;
|
|
unsigned char MBA;
|
|
unsigned char Quant;
|
|
unsigned char GOBN;
|
|
char HMV1;
|
|
char VMV1;
|
|
char HMV2;
|
|
char VMV2;
|
|
} SvH263BITSTREAM_INFO;
|
|
|
|
typedef struct SvH261_T_EX_BITSTREAM_INFO{
|
|
unsigned dword dwFlag;
|
|
unsigned dword dwBitOffset;
|
|
unsigned char MBAP;
|
|
unsigned char Quant;
|
|
unsigned char GOBN;
|
|
char HMV;
|
|
char VMV;
|
|
char padding0;
|
|
short padding1;
|
|
} SvH261BITSTREAM_INFO;
|
|
|
|
|
|
typedef struct _h26Xinfo
|
|
{
|
|
struct _h26Xinfo *next;
|
|
HIC hic;
|
|
BOOL bCompressBegun;
|
|
BOOL bDecompressBegun;
|
|
BOOL bPaletteInitialized;
|
|
BOOL bUsesCodec;
|
|
BOOL bUsesRender;
|
|
DWORD fccType;
|
|
DWORD fccHandler;
|
|
SlibHandle_t Sh;
|
|
LPBITMAPINFOHEADER lpbiOut;
|
|
LPBITMAPINFOHEADER lpbiIn;
|
|
void *client;
|
|
BOOL clientGone;
|
|
DWORD openFlags;
|
|
DWORD dwMaxCompBytes;
|
|
/****** Frame-by-frame Modified Params ******/
|
|
DWORD dwMaxQuality;
|
|
DWORD dwMaxQi;
|
|
DWORD dwMaxQp;
|
|
DWORD dwQi;
|
|
DWORD dwQp;
|
|
/********* Custom Settings ******/
|
|
float fFrameRate;
|
|
long lastFrameNum;
|
|
DWORD lastCompBytes;
|
|
DWORD dwQuality;
|
|
DWORD dwBitrate;
|
|
DWORD dwPacketSize;
|
|
DWORD dwRTP;
|
|
DWORD dwBrightness;
|
|
DWORD dwContrast;
|
|
DWORD dwSaturation;
|
|
} H26XINFO;
|
|
|
|
extern H26XINFO *IChic2info(HIC hic);
|
|
extern H26XINFO *ICclient2info(void *client);
|
|
extern BOOL ICclientGone(void *client);
|
|
extern MMRESULT CALLBACK ICH263Message(DWORD_PTR driverHandle,
|
|
UINT uiMessage,
|
|
LPARAM lParam1,
|
|
LPARAM lParam2,
|
|
H26XINFO *info);
|
|
extern HIC ICH263Open(void *client);
|
|
extern void ICH263Close(H26XINFO *info, BOOL postreply);
|
|
extern BOOL ICH263QueryConfigure(H26XINFO *info);
|
|
extern MMRESULT ICH263Configure(H26XINFO *info);
|
|
extern BOOL ICH263QueryAbout(H26XINFO *info);
|
|
extern MMRESULT ICH263About(H26XINFO *info);
|
|
extern MMRESULT ICH263GetInfo(H26XINFO *info, ICINFO * pic, DWORD dwSize);
|
|
extern MMRESULT ICH263GetDefaultQuality(H26XINFO *info, DWORD *lParam1);
|
|
extern MMRESULT ICH263GetQuality(H26XINFO *info, DWORD *lParam1);
|
|
extern MMRESULT ICH263SetQuality(H26XINFO *info, DWORD lParam1);
|
|
|
|
extern MMRESULT ICH263CompressQuery(H26XINFO *info,
|
|
LPBITMAPINFOHEADER lpbiIn,
|
|
LPBITMAPINFOHEADER lpbiOut);
|
|
extern MMRESULT ICH263CompressBegin(H26XINFO *info,
|
|
LPBITMAPINFOHEADER lpbiIn,
|
|
LPBITMAPINFOHEADER lpbiOut);
|
|
extern MMRESULT ICH263CompressGetFormat(H26XINFO *info,
|
|
LPBITMAPINFOHEADER lpbiIn,
|
|
LPBITMAPINFOHEADER lpbiOut);
|
|
extern DWORD ICH263CompressGetSize(LPBITMAPINFOHEADER lpbiIn);
|
|
extern MMRESULT ICH263Compress(H26XINFO *info,
|
|
ICCOMPRESS *icCompress,
|
|
DWORD dwSize);
|
|
extern MMRESULT ICH263CompressEnd(H26XINFO *info);
|
|
|
|
extern MMRESULT ICH263DecompressQuery(H26XINFO *info,
|
|
LPBITMAPINFOHEADER lpbiIn,
|
|
LPBITMAPINFOHEADER lpbiOut);
|
|
extern MMRESULT ICH263DecompressBegin(H26XINFO *info,
|
|
LPBITMAPINFOHEADER lpbiIn,
|
|
LPBITMAPINFOHEADER lpbiOut);
|
|
extern MMRESULT ICH263DecompressGetFormat(H26XINFO *info,
|
|
LPBITMAPINFOHEADER lpbiIn,
|
|
LPBITMAPINFOHEADER lpbiOut);
|
|
|
|
|
|
extern MMRESULT ICH263DecompressGetSize(H26XINFO *info,
|
|
LPBITMAPINFOHEADER lpbiIn,
|
|
LPBITMAPINFOHEADER lpbiOut);
|
|
|
|
extern MMRESULT ICH263Decompress(H26XINFO *info,
|
|
ICDECOMPRESS *icDecompress,
|
|
DWORD dwSize);
|
|
|
|
extern MMRESULT ICH263DecompressEnd(H26XINFO *info);
|
|
extern MMRESULT ICH263PrepareHeader(H26XINFO *info,
|
|
ICDECOMPRESS *icDecompress,
|
|
DWORD dwSize);
|
|
extern MMRESULT ICH263UnprepareHeader(H26XINFO *info,
|
|
ICDECOMPRESS *icDecompress,
|
|
DWORD dwSize);
|
|
extern MMRESULT ICH263SetQuality(H26XINFO *info, DWORD dwValue);
|
|
|
|
extern MMRESULT ICH263CustomEncoder (H26XINFO *info, DWORD lParam1, DWORD lParam2);
|
|
|
|
|
|
extern void WaitMsec(long waitTimeInMsec);
|
|
extern int TerminateH263();
|
|
extern int DriverPostReply(void *client, DWORD ret, DWORD arg);
|
|
|
|
/*
|
|
* Windows NT debugging.
|
|
*/
|
|
#ifdef _SLIBDEBUG_
|
|
#include <stdio.h>
|
|
static int ScDebugPrintf(char *fmtstr, ...)
|
|
{
|
|
int cnt;
|
|
if (fmtstr)
|
|
{
|
|
char text[255];
|
|
va_list argptr;
|
|
va_start(argptr, fmtstr);
|
|
cnt=vsprintf(text, fmtstr, argptr);
|
|
va_end(argptr);
|
|
OutputDebugString(text);
|
|
}
|
|
return(cnt);
|
|
}
|
|
|
|
static char *BMHtoString(LPBITMAPINFOHEADER lpbi)
|
|
{
|
|
static char text[255];
|
|
if (lpbi)
|
|
{
|
|
DWORD format=lpbi->biCompression;
|
|
if (format==BI_RGB)
|
|
sprintf(text, "%dx%d,%d bits (RGB)",
|
|
lpbi->biWidth, lpbi->biHeight, lpbi->biBitCount);
|
|
else if (format==BI_BITFIELDS)
|
|
sprintf(text, "%dx%d,%d bits (BITFIELDS)",
|
|
lpbi->biWidth, lpbi->biHeight, lpbi->biBitCount);
|
|
else
|
|
sprintf(text, "%dx%d,%d bits (%c%c%c%c)",
|
|
lpbi->biWidth, lpbi->biHeight, lpbi->biBitCount,
|
|
(char)(format&0xFF), (char)((format>>8)&0xFF),
|
|
(char)((format>>16)&0xFF), (char)((format>>24)&0xFF));
|
|
}
|
|
else
|
|
sprintf(text, "NULL");
|
|
return(text);
|
|
}
|
|
|
|
#define DPF ScDebugPrintf
|
|
#define DPF2 ScDebugPrintf
|
|
#else
|
|
#define DPF
|
|
#define DPF2
|
|
#endif
|
|
|
|
#endif /* _H26X_INT_H_ */
|
|
|