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