126 lines
4.2 KiB
C++
126 lines
4.2 KiB
C++
DEFINE_AVIGUID(CLSID_EditStream, 0x0002000A, 0, 0);
|
|
|
|
struct FAR ICEditStreamInternal : public IUnknown
|
|
{
|
|
STDMETHOD(GetInternalPointer)(LPVOID FAR * ppInternal) = 0;
|
|
};
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
///////////////////////////////////////////////////////////////////////////
|
|
///////////////////////////////////////////////////////////////////////////
|
|
|
|
typedef struct {
|
|
PAVISTREAM pavi;
|
|
LONG lStart;
|
|
LONG lLength;
|
|
LONG unused; // pad to power of two in size....
|
|
RECT rcSource;
|
|
RECT rcDest;
|
|
} EDIT, FAR * LPEDIT;
|
|
|
|
class FAR CEditStream : public virtual IAVIStream,
|
|
public virtual IAVIEditStream,
|
|
public virtual ICEditStreamInternal
|
|
|
|
#ifdef CUSTOMMARSHAL
|
|
, public virtual IMarshal
|
|
#endif
|
|
{
|
|
public:
|
|
static CEditStream FAR * NewEditStream(PAVISTREAM psSource);
|
|
|
|
STDMETHODIMP QueryInterface(const IID FAR& riid, void FAR* FAR* ppv); \
|
|
STDMETHODIMP_(ULONG) AddRef(); \
|
|
STDMETHODIMP_(ULONG) Release();
|
|
STDMETHODIMP Create (THIS_ LPARAM lParam1, LPARAM lParam2);
|
|
STDMETHODIMP Info (THIS_ AVISTREAMINFOW FAR * psi, LONG lSize);
|
|
STDMETHODIMP_(LONG) FindSample (THIS_ LONG lPos, LONG lFlags);
|
|
STDMETHODIMP ReadFormat (THIS_ LONG lPos,
|
|
LPVOID lpFormat, LONG FAR *cbFormat);
|
|
STDMETHODIMP SetFormat (THIS_ LONG lPos,
|
|
LPVOID lpFormat, LONG cbFormat);
|
|
STDMETHODIMP Read (THIS_ LONG lStart, LONG lSamples,
|
|
LPVOID lpBuffer, LONG cbBuffer,
|
|
LONG FAR * plBytes, LONG FAR * plSamples);
|
|
STDMETHODIMP Write (THIS_ LONG lStart, LONG lSamples,
|
|
LPVOID lpBuffer, LONG cbBuffer,
|
|
DWORD dwFlags,
|
|
LONG FAR *plSampWritten,
|
|
LONG FAR *plBytesWritten);
|
|
STDMETHODIMP Delete (THIS_ LONG lStart, LONG lSamples);
|
|
STDMETHODIMP ReadData (THIS_ DWORD fcc, LPVOID lp, LONG FAR *lpcb);
|
|
STDMETHODIMP WriteData (THIS_ DWORD fcc, LPVOID lp, LONG cb);
|
|
STDMETHODIMP Reserved1 (THIS);
|
|
STDMETHODIMP Reserved2 (THIS);
|
|
STDMETHODIMP Reserved3 (THIS);
|
|
STDMETHODIMP Reserved4 (THIS);
|
|
STDMETHODIMP Reserved5 (THIS);
|
|
|
|
STDMETHODIMP Cut(LONG FAR *plStart, LONG FAR *plLength, PAVISTREAM FAR * ppResult);
|
|
STDMETHODIMP Copy(LONG FAR *plStart, LONG FAR *plLength, PAVISTREAM FAR * ppResult);
|
|
STDMETHODIMP Paste(LONG FAR *plPos, LONG FAR *plLength, PAVISTREAM pstream, LONG lStart, LONG lLength);
|
|
STDMETHODIMP Clone(PAVISTREAM FAR *ppResult);
|
|
STDMETHODIMP SetInfo(AVISTREAMINFOW FAR *lpInfo, LONG cbInfo);
|
|
|
|
static HRESULT NewInstance(IUnknown FAR* pUnknownOuter,
|
|
REFIID riid,
|
|
LPVOID FAR* ppv);
|
|
|
|
STDMETHODIMP GetInternalPointer(LPVOID FAR * ppv);
|
|
#ifdef CUSTOMMARSHAL
|
|
// *** IMarshal methods ***
|
|
BOOL CanMarshalSimply();
|
|
|
|
STDMETHODIMP GetUnmarshalClass (THIS_ REFIID riid, LPVOID pv,
|
|
DWORD dwDestContext, LPVOID pvDestContext,
|
|
DWORD mshlflags, LPCLSID pCid);
|
|
STDMETHODIMP GetMarshalSizeMax (THIS_ REFIID riid, LPVOID pv,
|
|
DWORD dwDestContext, LPVOID pvDestContext,
|
|
DWORD mshlflags, LPDWORD pSize);
|
|
STDMETHODIMP MarshalInterface (THIS_ LPSTREAM pStm, REFIID riid,
|
|
LPVOID pv, DWORD dwDestContext, LPVOID pvDestContext,
|
|
DWORD mshlflags);
|
|
STDMETHODIMP UnmarshalInterface (THIS_ LPSTREAM pStm, REFIID riid,
|
|
LPVOID FAR* ppv);
|
|
STDMETHODIMP ReleaseMarshalData (THIS_ LPSTREAM pStm);
|
|
STDMETHODIMP DisconnectObject (THIS_ DWORD dwReserved);
|
|
#endif // CUSTOMMARSHAL
|
|
|
|
private:
|
|
CEditStream() {
|
|
cedits = 0;
|
|
maxedits = 0;
|
|
edits = NULL;
|
|
pgf = NULL;
|
|
psgf = NULL;
|
|
fFullFrames = FALSE;
|
|
};
|
|
|
|
HRESULT ResolveEdits(LONG lPos,
|
|
PAVISTREAM FAR *ppavi, LONG FAR *plPos,
|
|
LONG FAR *pl, BOOL fAllowEnd);
|
|
HRESULT PossiblyRemoveEdit(LONG l);
|
|
HRESULT AllocEditSpace(LONG l, LONG cNew);
|
|
LPBITMAPINFOHEADER NEAR PASCAL CEditStream::CallGetFrame(
|
|
PAVISTREAM p,
|
|
LONG l);
|
|
void CheckEditList();
|
|
|
|
public:
|
|
ULONG ulRefCount;
|
|
//
|
|
// instance data
|
|
//
|
|
AVISTREAMINFOW sinfo;
|
|
LONG cedits;
|
|
LONG maxedits;
|
|
BOOL fFullFrames;
|
|
EDIT _huge * edits;
|
|
|
|
//
|
|
// cached PGETFRAME
|
|
PGETFRAME pgf;
|
|
PAVISTREAM psgf;
|
|
LPBITMAPINFOHEADER lpbiLast;
|
|
};
|