misc/libphysfs/lzma/CPP/7zip/Common/CreateCoder.h
changeset 13886 99b265e0d1d0
parent 13885 5f819b90d479
child 13887 b172a5d40eee
equal deleted inserted replaced
13885:5f819b90d479 13886:99b265e0d1d0
     1 // CreateCoder.h
       
     2 
       
     3 #ifndef __CREATECODER_H
       
     4 #define __CREATECODER_H
       
     5 
       
     6 #include "Common/MyCom.h"
       
     7 #include "Common/MyString.h"
       
     8 #include "../ICoder.h"
       
     9 
       
    10 #include "MethodId.h"
       
    11 
       
    12 #ifdef EXTERNAL_CODECS
       
    13 
       
    14 struct CCodecInfoEx
       
    15 {
       
    16   UString Name;
       
    17   CMethodId Id;
       
    18   UInt32 NumInStreams;
       
    19   UInt32 NumOutStreams;
       
    20   bool EncoderIsAssigned;
       
    21   bool DecoderIsAssigned;
       
    22   bool IsSimpleCodec() const { return NumOutStreams == 1 && NumInStreams == 1; }
       
    23   CCodecInfoEx(): EncoderIsAssigned(false), DecoderIsAssigned(false) {}
       
    24 };
       
    25 
       
    26 HRESULT LoadExternalCodecs(ICompressCodecsInfo *codecsInfo, CObjectVector<CCodecInfoEx> &externalCodecs);
       
    27 
       
    28 #define PUBLIC_ISetCompressCodecsInfo public ISetCompressCodecsInfo,
       
    29 #define QUERY_ENTRY_ISetCompressCodecsInfo MY_QUERYINTERFACE_ENTRY(ISetCompressCodecsInfo)
       
    30 #define DECL_ISetCompressCodecsInfo STDMETHOD(SetCompressCodecsInfo)(ICompressCodecsInfo *compressCodecsInfo);
       
    31 #define IMPL_ISetCompressCodecsInfo2(x) \
       
    32 STDMETHODIMP x::SetCompressCodecsInfo(ICompressCodecsInfo *compressCodecsInfo) { \
       
    33   COM_TRY_BEGIN _codecsInfo = compressCodecsInfo;  return LoadExternalCodecs(_codecsInfo, _externalCodecs); COM_TRY_END }
       
    34 #define IMPL_ISetCompressCodecsInfo IMPL_ISetCompressCodecsInfo2(CHandler)
       
    35 
       
    36 #define EXTERNAL_CODECS_VARS2 _codecsInfo, &_externalCodecs
       
    37 
       
    38 #define DECL_EXTERNAL_CODECS_VARS CMyComPtr<ICompressCodecsInfo> _codecsInfo; CObjectVector<CCodecInfoEx> _externalCodecs;
       
    39 #define EXTERNAL_CODECS_VARS EXTERNAL_CODECS_VARS2,
       
    40 
       
    41 #define DECL_EXTERNAL_CODECS_LOC_VARS2 ICompressCodecsInfo *codecsInfo, const CObjectVector<CCodecInfoEx> *externalCodecs
       
    42 #define EXTERNAL_CODECS_LOC_VARS2 codecsInfo, externalCodecs
       
    43 
       
    44 #define DECL_EXTERNAL_CODECS_LOC_VARS DECL_EXTERNAL_CODECS_LOC_VARS2,
       
    45 #define EXTERNAL_CODECS_LOC_VARS EXTERNAL_CODECS_LOC_VARS2,
       
    46 
       
    47 #else
       
    48 
       
    49 #define PUBLIC_ISetCompressCodecsInfo
       
    50 #define QUERY_ENTRY_ISetCompressCodecsInfo
       
    51 #define DECL_ISetCompressCodecsInfo
       
    52 #define IMPL_ISetCompressCodecsInfo
       
    53 #define EXTERNAL_CODECS_VARS2
       
    54 #define DECL_EXTERNAL_CODECS_VARS
       
    55 #define EXTERNAL_CODECS_VARS EXTERNAL_CODECS_VARS2
       
    56 #define DECL_EXTERNAL_CODECS_LOC_VARS2
       
    57 #define EXTERNAL_CODECS_LOC_VARS2
       
    58 #define DECL_EXTERNAL_CODECS_LOC_VARS
       
    59 #define EXTERNAL_CODECS_LOC_VARS
       
    60 
       
    61 #endif
       
    62 
       
    63 bool FindMethod(
       
    64   DECL_EXTERNAL_CODECS_LOC_VARS
       
    65   const UString &name, CMethodId &methodId, UInt32 &numInStreams, UInt32 &numOutStreams);
       
    66 
       
    67 bool FindMethod(
       
    68   DECL_EXTERNAL_CODECS_LOC_VARS
       
    69   CMethodId methodId, UString &name);
       
    70 
       
    71 
       
    72 HRESULT CreateCoder(
       
    73   DECL_EXTERNAL_CODECS_LOC_VARS
       
    74   CMethodId methodId,
       
    75   CMyComPtr<ICompressFilter> &filter,
       
    76   CMyComPtr<ICompressCoder> &coder,
       
    77   CMyComPtr<ICompressCoder2> &coder2,
       
    78   bool encode, bool onlyCoder);
       
    79 
       
    80 HRESULT CreateCoder(
       
    81   DECL_EXTERNAL_CODECS_LOC_VARS
       
    82   CMethodId methodId,
       
    83   CMyComPtr<ICompressCoder> &coder,
       
    84   CMyComPtr<ICompressCoder2> &coder2,
       
    85   bool encode);
       
    86 
       
    87 HRESULT CreateCoder(
       
    88   DECL_EXTERNAL_CODECS_LOC_VARS
       
    89   CMethodId methodId, 
       
    90   CMyComPtr<ICompressCoder> &coder, bool encode);
       
    91 
       
    92 HRESULT CreateFilter(
       
    93   DECL_EXTERNAL_CODECS_LOC_VARS
       
    94   CMethodId methodId,
       
    95   CMyComPtr<ICompressFilter> &filter,
       
    96   bool encode);
       
    97 
       
    98 #endif