rlm@1: // CreateCoder.h rlm@1: rlm@1: #ifndef __CREATECODER_H rlm@1: #define __CREATECODER_H rlm@1: rlm@1: #include "../../Common/MyCom.h" rlm@1: #include "../../Common/MyString.h" rlm@1: #include "../ICoder.h" rlm@1: rlm@1: #include "MethodId.h" rlm@1: rlm@1: #ifdef EXTERNAL_CODECS rlm@1: rlm@1: struct CCodecInfoEx rlm@1: { rlm@1: UString Name; rlm@1: CMethodId Id; rlm@1: UInt32 NumInStreams; rlm@1: UInt32 NumOutStreams; rlm@1: bool EncoderIsAssigned; rlm@1: bool DecoderIsAssigned; rlm@1: bool IsSimpleCodec() const { return NumOutStreams == 1 && NumInStreams == 1; } rlm@1: CCodecInfoEx(): EncoderIsAssigned(false), DecoderIsAssigned(false) {} rlm@1: }; rlm@1: rlm@1: HRESULT LoadExternalCodecs(ICompressCodecsInfo *codecsInfo, CObjectVector &externalCodecs); rlm@1: rlm@1: #define PUBLIC_ISetCompressCodecsInfo public ISetCompressCodecsInfo, rlm@1: #define QUERY_ENTRY_ISetCompressCodecsInfo MY_QUERYINTERFACE_ENTRY(ISetCompressCodecsInfo) rlm@1: #define DECL_ISetCompressCodecsInfo STDMETHOD(SetCompressCodecsInfo)(ICompressCodecsInfo *compressCodecsInfo); rlm@1: #define IMPL_ISetCompressCodecsInfo2(x) \ rlm@1: STDMETHODIMP x::SetCompressCodecsInfo(ICompressCodecsInfo *compressCodecsInfo) { \ rlm@1: COM_TRY_BEGIN _codecsInfo = compressCodecsInfo; return LoadExternalCodecs(_codecsInfo, _externalCodecs); COM_TRY_END } rlm@1: #define IMPL_ISetCompressCodecsInfo IMPL_ISetCompressCodecsInfo2(CHandler) rlm@1: rlm@1: #define EXTERNAL_CODECS_VARS2 _codecsInfo, &_externalCodecs rlm@1: rlm@1: #define DECL_EXTERNAL_CODECS_VARS CMyComPtr _codecsInfo; CObjectVector _externalCodecs; rlm@1: #define EXTERNAL_CODECS_VARS EXTERNAL_CODECS_VARS2, rlm@1: rlm@1: #define DECL_EXTERNAL_CODECS_LOC_VARS2 ICompressCodecsInfo *codecsInfo, const CObjectVector *externalCodecs rlm@1: #define EXTERNAL_CODECS_LOC_VARS2 codecsInfo, externalCodecs rlm@1: rlm@1: #define DECL_EXTERNAL_CODECS_LOC_VARS DECL_EXTERNAL_CODECS_LOC_VARS2, rlm@1: #define EXTERNAL_CODECS_LOC_VARS EXTERNAL_CODECS_LOC_VARS2, rlm@1: rlm@1: #else rlm@1: rlm@1: #define PUBLIC_ISetCompressCodecsInfo rlm@1: #define QUERY_ENTRY_ISetCompressCodecsInfo rlm@1: #define DECL_ISetCompressCodecsInfo rlm@1: #define IMPL_ISetCompressCodecsInfo rlm@1: #define EXTERNAL_CODECS_VARS2 rlm@1: #define DECL_EXTERNAL_CODECS_VARS rlm@1: #define EXTERNAL_CODECS_VARS EXTERNAL_CODECS_VARS2 rlm@1: #define DECL_EXTERNAL_CODECS_LOC_VARS2 rlm@1: #define EXTERNAL_CODECS_LOC_VARS2 rlm@1: #define DECL_EXTERNAL_CODECS_LOC_VARS rlm@1: #define EXTERNAL_CODECS_LOC_VARS rlm@1: rlm@1: #endif rlm@1: rlm@1: bool FindMethod( rlm@1: DECL_EXTERNAL_CODECS_LOC_VARS rlm@1: const UString &name, CMethodId &methodId, UInt32 &numInStreams, UInt32 &numOutStreams); rlm@1: rlm@1: bool FindMethod( rlm@1: DECL_EXTERNAL_CODECS_LOC_VARS rlm@1: CMethodId methodId, UString &name); rlm@1: rlm@1: rlm@1: HRESULT CreateCoder( rlm@1: DECL_EXTERNAL_CODECS_LOC_VARS rlm@1: CMethodId methodId, rlm@1: CMyComPtr &filter, rlm@1: CMyComPtr &coder, rlm@1: CMyComPtr &coder2, rlm@1: bool encode, bool onlyCoder); rlm@1: rlm@1: HRESULT CreateCoder( rlm@1: DECL_EXTERNAL_CODECS_LOC_VARS rlm@1: CMethodId methodId, rlm@1: CMyComPtr &coder, rlm@1: CMyComPtr &coder2, rlm@1: bool encode); rlm@1: rlm@1: HRESULT CreateCoder( rlm@1: DECL_EXTERNAL_CODECS_LOC_VARS rlm@1: CMethodId methodId, rlm@1: CMyComPtr &coder, bool encode); rlm@1: rlm@1: HRESULT CreateFilter( rlm@1: DECL_EXTERNAL_CODECS_LOC_VARS rlm@1: CMethodId methodId, rlm@1: CMyComPtr &filter, rlm@1: bool encode); rlm@1: rlm@1: #endif