// RegisterCodec.h | |
#ifndef __REGISTERCODEC_H | |
#define __REGISTERCODEC_H | |
#include "../Common/MethodId.h" | |
typedef void * (*CreateCodecP)(); | |
struct CCodecInfo | |
{ | |
CreateCodecP CreateDecoder; | |
CreateCodecP CreateEncoder; | |
CMethodId Id; | |
const wchar_t *Name; | |
UInt32 NumInStreams; | |
bool IsFilter; | |
}; | |
void RegisterCodec(const CCodecInfo *codecInfo); | |
#define REGISTER_CODEC_NAME(x) CRegisterCodec ## x | |
#define REGISTER_CODEC(x) struct REGISTER_CODEC_NAME(x) { \ | |
REGISTER_CODEC_NAME(x)() { RegisterCodec(&g_CodecInfo); }}; \ | |
static REGISTER_CODEC_NAME(x) g_RegisterCodec; | |
#define REGISTER_CODECS_NAME(x) CRegisterCodecs ## x | |
#define REGISTER_CODECS(x) struct REGISTER_CODECS_NAME(x) { \ | |
REGISTER_CODECS_NAME(x)() { for (int i = 0; i < sizeof(g_CodecsInfo) / sizeof(g_CodecsInfo[0]); i++) \ | |
RegisterCodec(&g_CodecsInfo[i]); }}; \ | |
static REGISTER_CODECS_NAME(x) g_RegisterCodecs; | |
#endif |