RegisterCodec.h 911 B

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