亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ctlutil.h

?? 用DirectX制作高級動畫-[Advanced.Animation.with.DirectX]
?? H
?? 第 1 頁 / 共 2 頁
字號:
//------------------------------------------------------------------------------
// File: CtlUtil.h
//
// Desc: DirectShow base classes.
//
// Copyright (c) 1992-2002 Microsoft Corporation.  All rights reserved.
//------------------------------------------------------------------------------


// Base classes implementing IDispatch parsing for the basic control dual
// interfaces. Derive from these and implement just the custom method and
// property methods. We also implement CPosPassThru that can be used by
// renderers and transforms to pass by IMediaPosition and IMediaSeeking

#ifndef __CTLUTIL__
#define __CTLUTIL__

// OLE Automation has different ideas of TRUE and FALSE

#define OATRUE (-1)
#define OAFALSE (0)


// It's possible that we could replace this class with CreateStdDispatch

class CBaseDispatch
{
    ITypeInfo * m_pti;

public:

    CBaseDispatch() : m_pti(NULL) {}
    ~CBaseDispatch();

    /* IDispatch methods */
    STDMETHODIMP GetTypeInfoCount(UINT * pctinfo);

    STDMETHODIMP GetTypeInfo(
      REFIID riid,
      UINT itinfo,
      LCID lcid,
      ITypeInfo ** pptinfo);

    STDMETHODIMP GetIDsOfNames(
      REFIID riid,
      OLECHAR  ** rgszNames,
      UINT cNames,
      LCID lcid,
      DISPID * rgdispid);
};


class AM_NOVTABLE CMediaControl :
    public IMediaControl,
    public CUnknown
{
    CBaseDispatch m_basedisp;

public:

    CMediaControl(const TCHAR *, LPUNKNOWN);

    DECLARE_IUNKNOWN

    // override this to publicise our interfaces
    STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void **ppv);

    /* IDispatch methods */
    STDMETHODIMP GetTypeInfoCount(UINT * pctinfo);

    STDMETHODIMP GetTypeInfo(
      UINT itinfo,
      LCID lcid,
      ITypeInfo ** pptinfo);

    STDMETHODIMP GetIDsOfNames(
      REFIID riid,
      OLECHAR  ** rgszNames,
      UINT cNames,
      LCID lcid,
      DISPID * rgdispid);

    STDMETHODIMP Invoke(
      DISPID dispidMember,
      REFIID riid,
      LCID lcid,
      WORD wFlags,
      DISPPARAMS * pdispparams,
      VARIANT * pvarResult,
      EXCEPINFO * pexcepinfo,
      UINT * puArgErr);
};


class AM_NOVTABLE CMediaEvent :
    public IMediaEventEx,
    public CUnknown
{
    CBaseDispatch m_basedisp;

public:

    CMediaEvent(const TCHAR *, LPUNKNOWN);

    DECLARE_IUNKNOWN

    // override this to publicise our interfaces
    STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void **ppv);

    /* IDispatch methods */
    STDMETHODIMP GetTypeInfoCount(UINT * pctinfo);

    STDMETHODIMP GetTypeInfo(
      UINT itinfo,
      LCID lcid,
      ITypeInfo ** pptinfo);

    STDMETHODIMP GetIDsOfNames(
      REFIID riid,
      OLECHAR  ** rgszNames,
      UINT cNames,
      LCID lcid,
      DISPID * rgdispid);

    STDMETHODIMP Invoke(
      DISPID dispidMember,
      REFIID riid,
      LCID lcid,
      WORD wFlags,
      DISPPARAMS * pdispparams,
      VARIANT * pvarResult,
      EXCEPINFO * pexcepinfo,
      UINT * puArgErr);
};


class AM_NOVTABLE CMediaPosition :
    public IMediaPosition,
    public CUnknown
{
    CBaseDispatch m_basedisp;


public:

    CMediaPosition(const TCHAR *, LPUNKNOWN);
    CMediaPosition(const TCHAR *, LPUNKNOWN, HRESULT *phr);

    DECLARE_IUNKNOWN

    // override this to publicise our interfaces
    STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void **ppv);

    /* IDispatch methods */
    STDMETHODIMP GetTypeInfoCount(UINT * pctinfo);

    STDMETHODIMP GetTypeInfo(
      UINT itinfo,
      LCID lcid,
      ITypeInfo ** pptinfo);

    STDMETHODIMP GetIDsOfNames(
      REFIID riid,
      OLECHAR  ** rgszNames,
      UINT cNames,
      LCID lcid,
      DISPID * rgdispid);

    STDMETHODIMP Invoke(
      DISPID dispidMember,
      REFIID riid,
      LCID lcid,
      WORD wFlags,
      DISPPARAMS * pdispparams,
      VARIANT * pvarResult,
      EXCEPINFO * pexcepinfo,
      UINT * puArgErr);

};


// OA-compatibility means that we must use double as the RefTime value,
// and REFERENCE_TIME (essentially a LONGLONG) within filters.
// this class converts between the two

class COARefTime : public CRefTime {
public:

    COARefTime() {
    };

    COARefTime(CRefTime t)
        : CRefTime(t)
    {
    };

    COARefTime(REFERENCE_TIME t)
        : CRefTime(t)
    {
    };

    COARefTime(double d) {
        m_time = (LONGLONG) (d * 10000000);
    };

    operator double() {
        return double(m_time) / 10000000;
    };

    operator REFERENCE_TIME() {
        return m_time;
    };

    COARefTime& operator=(const double& rd)  {
        m_time = (LONGLONG) (rd * 10000000);
        return *this;
    }

    COARefTime& operator=(const REFERENCE_TIME& rt)  {
        m_time = rt;
        return *this;
    }

    inline BOOL operator==(const COARefTime& rt)
    {
        return m_time == rt.m_time;
    };

    inline BOOL operator!=(const COARefTime& rt)
    {
        return m_time != rt.m_time;
    };

    inline BOOL operator < (const COARefTime& rt)
    {
        return m_time < rt.m_time;
    };

    inline BOOL operator > (const COARefTime& rt)
    {
        return m_time > rt.m_time;
    };

    inline BOOL operator >= (const COARefTime& rt)
    {
        return m_time >= rt.m_time;
    };

    inline BOOL operator <= (const COARefTime& rt)
    {
        return m_time <= rt.m_time;
    };

    inline COARefTime operator+(const COARefTime& rt)
    {
        return COARefTime(m_time + rt.m_time);
    };

    inline COARefTime operator-(const COARefTime& rt)
    {
        return COARefTime(m_time - rt.m_time);
    };

    inline COARefTime operator*(LONG l)
    {
        return COARefTime(m_time * l);
    };

    inline COARefTime operator/(LONG l)
    {
        return COARefTime(m_time / l);
    };

private:
    //  Prevent bugs from constructing from LONG (which gets
    //  converted to double and then multiplied by 10000000
    COARefTime(LONG);
    operator=(LONG);
};


// A utility class that handles IMediaPosition and IMediaSeeking on behalf
// of single-input pin renderers, or transform filters.
//
// Renderers will expose this from the filter; transform filters will
// expose it from the output pin and not the renderer.
//
// Create one of these, giving it your IPin* for your input pin, and delegate
// all IMediaPosition methods to it. It will query the input pin for
// IMediaPosition and respond appropriately.
//
// Call ForceRefresh if the pin connection changes.
//
// This class no longer caches the upstream IMediaPosition or IMediaSeeking
// it acquires it on each method call. This means ForceRefresh is not needed.
// The method is kept for source compatibility and to minimise the changes
// if we need to put it back later for performance reasons.

class CPosPassThru : public IMediaSeeking, public CMediaPosition
{
    IPin *m_pPin;

    HRESULT GetPeer(IMediaPosition **ppMP);
    HRESULT GetPeerSeeking(IMediaSeeking **ppMS);

public:

    CPosPassThru(const TCHAR *, LPUNKNOWN, HRESULT*, IPin *);
    DECLARE_IUNKNOWN

    HRESULT ForceRefresh() {
        return S_OK;
    };

    // override to return an accurate current position
    virtual HRESULT GetMediaTime(LONGLONG *pStartTime,LONGLONG *pEndTime) {
        return E_FAIL;
    }

    STDMETHODIMP NonDelegatingQueryInterface(REFIID riid,void **ppv);

    // IMediaSeeking methods
    STDMETHODIMP GetCapabilities( DWORD * pCapabilities );
    STDMETHODIMP CheckCapabilities( DWORD * pCapabilities );
    STDMETHODIMP SetTimeFormat(const GUID * pFormat);
    STDMETHODIMP GetTimeFormat(GUID *pFormat);
    STDMETHODIMP IsUsingTimeFormat(const GUID * pFormat);
    STDMETHODIMP IsFormatSupported( const GUID * pFormat);
    STDMETHODIMP QueryPreferredFormat( GUID *pFormat);
    STDMETHODIMP ConvertTimeFormat(LONGLONG * pTarget, const GUID * pTargetFormat,
                                   LONGLONG    Source, const GUID * pSourceFormat );
    STDMETHODIMP SetPositions( LONGLONG * pCurrent, DWORD CurrentFlags
                             , LONGLONG * pStop, DWORD StopFlags );

    STDMETHODIMP GetPositions( LONGLONG * pCurrent, LONGLONG * pStop );
    STDMETHODIMP GetCurrentPosition( LONGLONG * pCurrent );
    STDMETHODIMP GetStopPosition( LONGLONG * pStop );
    STDMETHODIMP SetRate( double dRate);
    STDMETHODIMP GetRate( double * pdRate);
    STDMETHODIMP GetDuration( LONGLONG *pDuration);
    STDMETHODIMP GetAvailable( LONGLONG *pEarliest, LONGLONG *pLatest );
    STDMETHODIMP GetPreroll( LONGLONG *pllPreroll );

    // IMediaPosition properties
    STDMETHODIMP get_Duration(REFTIME * plength);
    STDMETHODIMP put_CurrentPosition(REFTIME llTime);
    STDMETHODIMP get_StopTime(REFTIME * pllTime);
    STDMETHODIMP put_StopTime(REFTIME llTime);
    STDMETHODIMP get_PrerollTime(REFTIME * pllTime);
    STDMETHODIMP put_PrerollTime(REFTIME llTime);
    STDMETHODIMP get_Rate(double * pdRate);
    STDMETHODIMP put_Rate(double dRate);
    STDMETHODIMP get_CurrentPosition(REFTIME * pllTime);
    STDMETHODIMP CanSeekForward(LONG *pCanSeekForward);
    STDMETHODIMP CanSeekBackward(LONG *pCanSeekBackward);

private:
    HRESULT GetSeekingLongLong( HRESULT (__stdcall IMediaSeeking::*pMethod)( LONGLONG * ),
                                LONGLONG * pll );
};


// Adds the ability to return a current position

class CRendererPosPassThru : public CPosPassThru
{
    CCritSec m_PositionLock;    // Locks access to our position
    LONGLONG m_StartMedia;      // Start media time last seen
    LONGLONG m_EndMedia;        // And likewise the end media
    BOOL m_bReset;              // Have media times been set

public:

    // Used to help with passing media times through graph

    CRendererPosPassThru(const TCHAR *, LPUNKNOWN, HRESULT*, IPin *);
    HRESULT RegisterMediaTime(IMediaSample *pMediaSample);
    HRESULT RegisterMediaTime(LONGLONG StartTime,LONGLONG EndTime);
    HRESULT GetMediaTime(LONGLONG *pStartTime,LONGLONG *pEndTime);
    HRESULT ResetMediaTime();
    HRESULT EOS();
};

STDAPI CreatePosPassThru(
    LPUNKNOWN pAgg,
    BOOL bRenderer,
    IPin *pPin,
    IUnknown **ppPassThru
);

// A class that handles the IDispatch part of IBasicAudio and leaves the
// properties and methods themselves pure virtual.

class AM_NOVTABLE CBasicAudio : public IBasicAudio, public CUnknown
{
    CBaseDispatch m_basedisp;

public:

    CBasicAudio(const TCHAR *, LPUNKNOWN);

    DECLARE_IUNKNOWN

    // override this to publicise our interfaces
    STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void **ppv);

    /* IDispatch methods */
    STDMETHODIMP GetTypeInfoCount(UINT * pctinfo);

    STDMETHODIMP GetTypeInfo(
      UINT itinfo,
      LCID lcid,
      ITypeInfo ** pptinfo);

    STDMETHODIMP GetIDsOfNames(
      REFIID riid,
      OLECHAR  ** rgszNames,
      UINT cNames,
      LCID lcid,
      DISPID * rgdispid);

    STDMETHODIMP Invoke(
      DISPID dispidMember,
      REFIID riid,
      LCID lcid,
      WORD wFlags,
      DISPPARAMS * pdispparams,
      VARIANT * pvarResult,
      EXCEPINFO * pexcepinfo,
      UINT * puArgErr);
};


// A class that handles the IDispatch part of IBasicVideo and leaves the
// properties and methods themselves pure virtual.

class AM_NOVTABLE CBaseBasicVideo : public IBasicVideo2, public CUnknown
{
    CBaseDispatch m_basedisp;

public:

    CBaseBasicVideo(const TCHAR *, LPUNKNOWN);

    DECLARE_IUNKNOWN

    // override this to publicise our interfaces
    STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void **ppv);

    /* IDispatch methods */
    STDMETHODIMP GetTypeInfoCount(UINT * pctinfo);

    STDMETHODIMP GetTypeInfo(
      UINT itinfo,
      LCID lcid,
      ITypeInfo ** pptinfo);

    STDMETHODIMP GetIDsOfNames(
      REFIID riid,
      OLECHAR  ** rgszNames,

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产乱码精品一区二区三| 日日夜夜精品视频天天综合网| 欧美在线一二三四区| 丰满放荡岳乱妇91ww| 国产一区二区不卡老阿姨| 日本欧洲一区二区| 亚洲高清中文字幕| 亚洲va欧美va国产va天堂影院| 一二三区精品福利视频| 一区二区免费看| 亚洲国产精品一区二区尤物区| 亚洲人精品一区| 一区二区三区久久| 亚洲一区在线看| 五月激情综合婷婷| 青草av.久久免费一区| 日韩综合小视频| 久久精品免费看| 国产一区二区主播在线| 懂色av一区二区三区免费观看| 高清久久久久久| 91猫先生在线| 日韩精品一区二区三区视频| 欧美一区二区不卡视频| 欧美精品一区二区三区一线天视频| 日韩亚洲欧美一区| 国产日韩精品一区二区三区| 国产精品网友自拍| 亚洲精品自拍动漫在线| 视频一区二区中文字幕| 久久机这里只有精品| 国产成人精品亚洲777人妖| 成年人国产精品| 欧美探花视频资源| 日韩精品一区在线| 综合在线观看色| 午夜激情久久久| 高清shemale亚洲人妖| 91精品1区2区| 久久综合色天天久久综合图片| 国产精品全国免费观看高清| 亚洲成人动漫在线观看| 国产久卡久卡久卡久卡视频精品| av不卡免费电影| 欧美一区二区成人6969| 国产精品激情偷乱一区二区∴| 午夜精品视频在线观看| 国产在线精品一区二区| 在线亚洲一区二区| 国产日韩三级在线| 亚洲成a人片综合在线| 国产精品123区| 欧美久久久久久久久久| 国产精品国产三级国产a| 日本sm残虐另类| 在线视频欧美精品| 国产精品色一区二区三区| 天天操天天干天天综合网| 白白色 亚洲乱淫| 欧美一区二区日韩| 亚洲电影中文字幕在线观看| 成人av综合一区| 久久男人中文字幕资源站| 日韩黄色在线观看| 欧美午夜一区二区三区免费大片| 国产农村妇女毛片精品久久麻豆 | 91视频在线观看| 日韩欧美成人一区二区| 亚洲一区二区在线免费看| 99精品视频在线观看免费| www亚洲一区| 热久久一区二区| 欧美撒尿777hd撒尿| 亚洲精品乱码久久久久久黑人| 国产成人亚洲综合a∨婷婷图片| 欧美一级搡bbbb搡bbbb| 天天做天天摸天天爽国产一区| 色综合网站在线| 国产日韩欧美亚洲| 日韩激情中文字幕| 欧美午夜宅男影院| 亚洲一区二区三区四区在线观看| 91首页免费视频| 亚洲美女在线一区| 色综合久久中文字幕综合网| 亚洲欧洲成人精品av97| 99久久综合99久久综合网站| 国产精品的网站| 91黄视频在线| 一区二区三区欧美在线观看| 在线中文字幕一区| 亚洲一区二区av电影| 欧美高清激情brazzers| 蜜臀av性久久久久av蜜臀妖精| 欧美高清视频在线高清观看mv色露露十八| 亚洲一区av在线| 91精品国产综合久久香蕉的特点| 日本午夜一区二区| 精品国产三级电影在线观看| 国产一区二区伦理片| 国产精品久久久久久久久久免费看| 成人国产精品免费网站| 最新中文字幕一区二区三区| 欧美亚洲免费在线一区| 日本不卡中文字幕| 久久精品亚洲国产奇米99| 99精品久久只有精品| 亚洲成人中文在线| 欧美精品一区二区精品网| 国产99精品在线观看| 亚洲欧美另类久久久精品| 欧美欧美欧美欧美首页| 国产在线精品视频| 夜夜操天天操亚洲| 日韩欧美卡一卡二| 91偷拍与自偷拍精品| 日本不卡一区二区三区高清视频| 久久久久久久综合日本| 日本久久电影网| 九色综合狠狠综合久久| 亚洲欧洲综合另类| 日韩女优av电影在线观看| 成人a免费在线看| 日本成人在线网站| 亚洲色欲色欲www| 日韩一区二区三免费高清| 成人综合在线网站| 日韩精品久久久久久| 一区在线观看视频| 欧美成人精品福利| 欧美亚洲综合网| 国产高清成人在线| 免播放器亚洲一区| 一区二区成人在线| 中文字幕av在线一区二区三区| 欧美日韩国产综合久久 | 精品日韩一区二区三区免费视频| 99久久99久久精品免费观看| 久久精品国产在热久久| 亚洲自拍偷拍av| 国产精品成人午夜| 国产欧美日本一区二区三区| 日韩欧美中文字幕一区| 精品视频1区2区3区| av一本久道久久综合久久鬼色| 精品一区二区三区蜜桃| 亚洲成av人片在www色猫咪| 国产精品的网站| 国产蜜臀97一区二区三区| 精品久久五月天| 欧美不卡123| 9191精品国产综合久久久久久| 日本道色综合久久| 91亚洲资源网| av高清不卡在线| 成人妖精视频yjsp地址| 成人免费视频一区二区| 国产剧情一区在线| 精品一区二区三区在线视频| 蜜桃视频在线一区| 日韩国产欧美三级| 日本不卡一区二区三区| 日韩av一区二区在线影视| 亚洲国产视频一区| 五月综合激情日本mⅴ| 偷拍与自拍一区| 日本欧美加勒比视频| 日韩国产欧美视频| 黄色日韩网站视频| 国产精品自拍在线| 成人高清av在线| 91免费版在线看| 欧美日韩一二三区| 欧美一区二区视频观看视频| 日韩精品一区二区三区视频播放 | 日韩欧美一卡二卡| 久久综合狠狠综合久久综合88| 精品国产自在久精品国产| 久久久久亚洲综合| 国产农村妇女精品| 亚洲主播在线观看| 日本午夜一本久久久综合| 极品少妇一区二区| 国产成人免费在线观看不卡| 风间由美一区二区av101| 日本久久电影网| 日韩欧美中文字幕公布| 国产精品高潮呻吟久久| 一区二区欧美精品| 激情欧美日韩一区二区| 不卡视频免费播放| 欧美午夜精品免费| 久久男人中文字幕资源站| 国产精品福利一区二区三区| 亚洲成人av电影在线| 国产美女精品在线| 欧美少妇一区二区| 国产网红主播福利一区二区| 亚洲一级二级三级在线免费观看| 不卡一区二区中文字幕|