1 // RegisterCodec.h 2 3 #ifndef __REGISTERCODEC_H 4 #define __REGISTERCODEC_H 5 6 #include "../Common/MethodId.h" 7 8 typedef void * (*CreateCodecP)(); 9 struct CCodecInfo 10 { 11 CreateCodecP CreateDecoder; 12 CreateCodecP CreateEncoder; 13 CMethodId Id; 14 const wchar_t *Name; 15 UInt32 NumInStreams; 16 bool IsFilter; 17 }; 18 19 void RegisterCodec(const CCodecInfo *codecInfo); 20 21 #define REGISTER_CODEC_NAME(x) CRegisterCodec ## x 22 23 #define REGISTER_CODEC(x) struct REGISTER_CODEC_NAME(x) { \ 24 REGISTER_CODEC_NAME(x)() { RegisterCodec(&g_CodecInfo); }}; \ 25 static REGISTER_CODEC_NAME(x) g_RegisterCodec; 26 27 #define REGISTER_CODECS_NAME(x) CRegisterCodecs ## x 28 #define REGISTER_CODECS(x) struct REGISTER_CODECS_NAME(x) { \ 29 REGISTER_CODECS_NAME(x)() { for (int i = 0; i < sizeof(g_CodecsInfo) / sizeof(g_CodecsInfo[0]); i++) \ 30 RegisterCodec(&g_CodecsInfo[i]); }}; \ 31 static REGISTER_CODECS_NAME(x) g_RegisterCodecs; 32 33 #endif 34