Source code
Revision control
Copy as Markdown
Other Tools
// CreateCoder.h↩
↩
#ifndef __CREATE_CODER_H↩
#define __CREATE_CODER_H↩
↩
#include "../../Common/MyCom.h"↩
#include "../../Common/MyString.h"↩
↩
#include "../ICoder.h"↩
↩
#include "MethodId.h"↩
↩
/*↩
if EXTERNAL_CODECS is not defined, the code supports only codecs that↩
are statically linked at compile-time and link-time.↩
↩
if EXTERNAL_CODECS is defined, the code supports also codecs from another↩
executable modules, that can be linked dynamically at run-time:↩
- EXE module can use codecs from external DLL files.↩
- DLL module can use codecs from external EXE and DLL files.↩
↩
CExternalCodecs contains information about codecs and interfaces to create them.↩
↩
The order of codecs:↩
1) Internal codecs↩
2) External codecs↩
*/↩
↩
#ifdef EXTERNAL_CODECS↩
↩
struct CCodecInfoEx↩
{↩
CMethodId Id;↩
AString Name;↩
UInt32 NumStreams;↩
bool EncoderIsAssigned;↩
bool DecoderIsAssigned;↩
↩
CCodecInfoEx(): EncoderIsAssigned(false), DecoderIsAssigned(false) {}↩
};↩
↩
struct CHasherInfoEx↩
{↩
CMethodId Id;↩
AString Name;↩
};↩
↩
#define PUBLIC_ISetCompressCodecsInfo public ISetCompressCodecsInfo,↩
#define QUERY_ENTRY_ISetCompressCodecsInfo MY_QUERYINTERFACE_ENTRY(ISetCompressCodecsInfo)↩
#define DECL_ISetCompressCodecsInfo STDMETHOD(SetCompressCodecsInfo)(ICompressCodecsInfo *compressCodecsInfo);↩
#define IMPL_ISetCompressCodecsInfo2(x) \↩
STDMETHODIMP x::SetCompressCodecsInfo(ICompressCodecsInfo *compressCodecsInfo) { \↩
COM_TRY_BEGIN __externalCodecs.GetCodecs = compressCodecsInfo; return __externalCodecs.Load(); COM_TRY_END }↩
#define IMPL_ISetCompressCodecsInfo IMPL_ISetCompressCodecsInfo2(CHandler)↩
↩
struct CExternalCodecs↩
{↩
CMyComPtr<ICompressCodecsInfo> GetCodecs;↩
CMyComPtr<IHashers> GetHashers;↩
↩
CObjectVector<CCodecInfoEx> Codecs;↩
CObjectVector<CHasherInfoEx> Hashers;↩
↩
bool IsSet() const { return GetCodecs != NULL || GetHashers != NULL; }↩
↩
HRESULT Load();↩
↩
void ClearAndRelease()↩
{↩
Hashers.Clear();↩
Codecs.Clear();↩
GetHashers.Release();↩
GetCodecs.Release();↩
}↩
↩
~CExternalCodecs()↩
{↩
GetHashers.Release();↩
GetCodecs.Release();↩
}↩
};↩
↩
extern CExternalCodecs g_ExternalCodecs;↩
↩
#define EXTERNAL_CODECS_VARS2 (__externalCodecs.IsSet() ? &__externalCodecs : &g_ExternalCodecs)↩
#define EXTERNAL_CODECS_VARS2_L (&__externalCodecs)↩
#define EXTERNAL_CODECS_VARS2_G (&g_ExternalCodecs)↩
↩
#define DECL_EXTERNAL_CODECS_VARS CExternalCodecs __externalCodecs;↩
↩
#define EXTERNAL_CODECS_VARS EXTERNAL_CODECS_VARS2,↩
#define EXTERNAL_CODECS_VARS_L EXTERNAL_CODECS_VARS2_L,↩
#define EXTERNAL_CODECS_VARS_G EXTERNAL_CODECS_VARS2_G,↩
↩
#define DECL_EXTERNAL_CODECS_LOC_VARS2 const CExternalCodecs *__externalCodecs↩
#define EXTERNAL_CODECS_LOC_VARS2 __externalCodecs↩
↩
#define DECL_EXTERNAL_CODECS_LOC_VARS DECL_EXTERNAL_CODECS_LOC_VARS2,↩
#define EXTERNAL_CODECS_LOC_VARS EXTERNAL_CODECS_LOC_VARS2,↩
↩
#else↩
↩
#define PUBLIC_ISetCompressCodecsInfo↩
#define QUERY_ENTRY_ISetCompressCodecsInfo↩
#define DECL_ISetCompressCodecsInfo↩
#define IMPL_ISetCompressCodecsInfo↩
#define EXTERNAL_CODECS_VARS2↩
#define DECL_EXTERNAL_CODECS_VARS↩
#define EXTERNAL_CODECS_VARS↩
#define EXTERNAL_CODECS_VARS_L↩
#define EXTERNAL_CODECS_VARS_G↩
#define DECL_EXTERNAL_CODECS_LOC_VARS2↩
#define EXTERNAL_CODECS_LOC_VARS2↩
#define DECL_EXTERNAL_CODECS_LOC_VARS↩
#define EXTERNAL_CODECS_LOC_VARS↩
↩
#endif↩
↩
int FindMethod_Index(↩
DECL_EXTERNAL_CODECS_LOC_VARS↩
const AString &name,↩
bool encode,↩
CMethodId &methodId,↩
UInt32 &numStreams);↩
↩
bool FindMethod(↩
DECL_EXTERNAL_CODECS_LOC_VARS↩
CMethodId methodId,↩
AString &name);↩
↩
bool FindHashMethod(↩
DECL_EXTERNAL_CODECS_LOC_VARS↩
const AString &name,↩
CMethodId &methodId);↩
↩
void GetHashMethods(↩
DECL_EXTERNAL_CODECS_LOC_VARS↩
CRecordVector<CMethodId> &methods);↩
↩
↩
struct CCreatedCoder↩
{↩
CMyComPtr<ICompressCoder> Coder;↩
CMyComPtr<ICompressCoder2> Coder2;↩
↩
bool IsExternal;↩
bool IsFilter; // = true, if Coder was created from filter↩
UInt32 NumStreams;↩
↩
// CCreatedCoder(): IsExternal(false), IsFilter(false), NumStreams(1) {}↩
};↩
↩
↩
HRESULT CreateCoder_Index(↩
DECL_EXTERNAL_CODECS_LOC_VARS↩
unsigned codecIndex, bool encode,↩
CMyComPtr<ICompressFilter> &filter,↩
CCreatedCoder &cod);↩
↩
HRESULT CreateCoder_Index(↩
DECL_EXTERNAL_CODECS_LOC_VARS↩
unsigned index, bool encode,↩
CCreatedCoder &cod);↩
↩
HRESULT CreateCoder_Id(↩
DECL_EXTERNAL_CODECS_LOC_VARS↩
CMethodId methodId, bool encode,↩
CMyComPtr<ICompressFilter> &filter,↩
CCreatedCoder &cod);↩
↩
HRESULT CreateCoder_Id(↩
DECL_EXTERNAL_CODECS_LOC_VARS↩
CMethodId methodId, bool encode,↩
CCreatedCoder &cod);↩
↩
HRESULT CreateCoder_Id(↩
DECL_EXTERNAL_CODECS_LOC_VARS↩
CMethodId methodId, bool encode,↩
CMyComPtr<ICompressCoder> &coder);↩
↩
HRESULT CreateFilter(↩
DECL_EXTERNAL_CODECS_LOC_VARS↩
CMethodId methodId, bool encode,↩
CMyComPtr<ICompressFilter> &filter);↩
↩
HRESULT CreateHasher(↩
DECL_EXTERNAL_CODECS_LOC_VARS↩
CMethodId methodId,↩
AString &name,↩
CMyComPtr<IHasher> &hasher);↩
↩
#endif↩