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

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

?? baseclass.pas

?? 一套及時通訊的原碼
?? PAS
?? 第 1 頁 / 共 5 頁
字號:
    // --- TBCBaseOutputPin ------------

    function QueryId(out Id: PWideChar): HRESULT; override; stdcall;
    // Grab and release extra interfaces if required
    function CheckConnect(Pin: IPin): HRESULT; override;
    function BreakConnect: HRESULT; override;
    function CompleteConnect(ReceivePin: IPin): HRESULT; override;

    // check that we can support this output type
    function CheckMediaType(mtOut: PAMMediaType): HRESULT; override;

    // set the connection media type
    function SetMediaType(pmt: PAMMediaType): HRESULT; override;

    // called from CBaseOutputPin during connection to ask for
    // the count and size of buffers we need.
    function DecideBufferSize(Alloc: IMemAllocator; Prop: PAllocatorProperties): HRESULT; override;

    // returns the preferred formats for a pin
    function GetMediaType(Position: integer; out MediaType: PAMMediaType): HRESULT; override;

    // inherited from IQualityControl via CBasePin
    function Notify(Sendr: IBaseFilter; q: TQuality): HRESULT; override; stdcall;
  end;

// milenko start (added TBCVideoTransformFilter conversion)
  TBCVideoTransformFilter = class(TBCTransformFilter)
  public
    constructor Create(Name: WideString; Unk: IUnknown; clsid: TGUID);
    destructor Destroy; override;
    function EndFlush: HRESULT; override;

    // =================================================================
    // ----- override these bits ---------------------------------------
    // =================================================================
    // The following methods are in CTransformFilter which is inherited.
    // They are mentioned here for completeness
    //
    // These MUST be supplied in a derived class
    //
    // NOTE:
    // virtual HRESULT Transform(IMediaSample * pIn, IMediaSample *pOut);
    // virtual HRESULT CheckInputType(const CMediaType* mtIn) PURE;
    // virtual HRESULT CheckTransform
    //     (const CMediaType* mtIn, const CMediaType* mtOut) PURE;
    // static CCOMObject * CreateInstance(LPUNKNOWN, HRESULT *);
    // virtual HRESULT DecideBufferSize
    //     (IMemAllocator * pAllocator, ALLOCATOR_PROPERTIES *pprop) PURE;
    // virtual HRESULT GetMediaType(int iPosition, CMediaType *pMediaType) PURE;
    //
    // These MAY also be overridden
    //
    // virtual HRESULT StopStreaming();
    // virtual HRESULT SetMediaType(PIN_DIRECTION direction,const CMediaType *pmt);
    // virtual HRESULT CheckConnect(PIN_DIRECTION dir,IPin *pPin);
    // virtual HRESULT BreakConnect(PIN_DIRECTION dir);
    // virtual HRESULT CompleteConnect(PIN_DIRECTION direction,IPin *pReceivePin);
    // virtual HRESULT EndOfStream(void);
    // virtual HRESULT BeginFlush(void);
    // virtual HRESULT EndFlush(void);
    // virtual HRESULT NewSegment
    //     (REFERENCE_TIME tStart,REFERENCE_TIME tStop,double dRate);
  {$IFDEF PERF}
    // If you override this - ensure that you register all these ids
    // as well as any of your own,
    procedure RegisterPerfId; virtual;
  {$ENDIF}
  protected
    // =========== QUALITY MANAGEMENT IMPLEMENTATION ========================
    // Frames are assumed to come in three types:
    // Type 1: an AVI key frame or an MPEG I frame.
    //        This frame can be decoded with no history.
    //        Dropping this frame means that no further frame can be decoded
    //        until the next type 1 frame.
    //        Type 1 frames are sync points.
    // Type 2: an AVI non-key frame or an MPEG P frame.
    //        This frame cannot be decoded unless the previous type 1 frame was
    //        decoded and all type 2 frames since have been decoded.
    //        Dropping this frame means that no further frame can be decoded
    //        until the next type 1 frame.
    // Type 3: An MPEG B frame.
    //        This frame cannot be decoded unless the previous type 1 or 2 frame
    //        has been decoded AND the subsequent type 1 or 2 frame has also
    //        been decoded.  (This requires decoding the frames out of sequence).
    //        Dropping this frame affects no other frames.  This implementation
    //        does not allow for these.  All non-sync-point frames are treated
    //        as being type 2.
    //
    // The spacing of frames of type 1 in a file is not guaranteed.  There MUST
    // be a type 1 frame at (well, near) the start of the file in order to start
    // decoding at all.  After that there could be one every half second or so,
    // there could be one at the start of each scene (aka "cut", "shot") or
    // there could be no more at all.
    // If there is only a single type 1 frame then NO FRAMES CAN BE DROPPED
    // without losing all the rest of the movie.  There is no way to tell whether
    // this is the case, so we find that we are in the gambling business.
    // To try to improve the odds, we record the greatest interval between type 1s
    // that we have seen and we bet on things being no worse than this in the
    // future.

    // You can tell if it's a type 1 frame by calling IsSyncPoint().
    // there is no architected way to test for a type 3, so you should override
    // the quality management here if you have B-frames.

    FKeyFramePeriod: integer; // the largest observed interval between type 1 frames
                              // 1 means every frame is type 1, 2 means every other.

    FFramesSinceKeyFrame: integer; // Used to count frames since the last type 1.
                                   // becomes the new m_nKeyFramePeriod if greater.

    FSkipping: Boolean;           // we are skipping to the next type 1 frame

  {$IFDEF PERF}
    FidFrameType: integer;          // MSR id Frame type.  1=Key, 2="non-key"
    FidSkip: integer;               // MSR id skipping
    FidLate: integer;               // MSR id lateness
    FidTimeTillKey: integer;        // MSR id for guessed time till next key frame.
  {$ENDIF}

    FitrLate: integer;          // lateness from last Quality message
                                // (this overflows at 214 secs late).
    FtDecodeStart: integer;     // timeGetTime when decode started.
    FitrAvgDecode: integer;     // Average decode time in reference units.

    FNoSkip: Boolean;            // debug - no skipping.

    // We send an EC_QUALITY_CHANGE notification to the app if we have to degrade.
    // We send one when we start degrading, not one for every frame, this means
    // we track whether we've sent one yet.
    FQualityChanged: Boolean;

    // When non-zero, don't pass anything to renderer until next keyframe
    // If there are few keys, give up and eventually draw something
    FWaitForKey: integer;

    function AbortPlayback(hr: HRESULT): HRESULT;  // if something bad happens
    function ShouldSkipFrame(pIn: IMediaSample): Boolean;
  public
    function StartStreaming: HRESULT; override;
    function Receive(Sample: IMediaSample): HRESULT; override;
    function AlterQuality(const q: TQuality): HRESULT; override;
  end;
// milenko end

  TBCTransInPlaceOutputPin = class;
  TBCTransInPlaceInputPin  = class;

  TBCTransInPlaceFilter = class(TBCTransformFilter)
  public
    // map getpin/getpincount for base enum of pins to owner
    // override this to return more specialised pin objects
    function GetPin(n: integer): TBCBasePin; override;

    //  Set bModifiesData == false if your derived filter does
    //  not modify the data samples (for instance it's just copying
    //  them somewhere else or looking at the timestamps).
    constructor Create(ObjectName: string; unk: IUnKnown; clsid: TGUID;
      out hr: HRESULT; ModifiesData: boolean = True);

    constructor CreateFromFactory(Factory: TBCClassFactory; const Controller: IUnknown); override;

    // The following are defined to avoid undefined pure virtuals.
    // Even if they are never called, they will give linkage warnings/errors

    // We override EnumMediaTypes to bypass the transform class enumerator
    // which would otherwise call this.
    function GetMediaType(Position: integer; out MediaType: PAMMediaType): HRESULT; override;

    // This is called when we actually have to provide out own allocator.
    function DecideBufferSize(Alloc: IMemAllocator; propInputRequest: PAllocatorProperties): HRESULT; override;

    // The functions which call this in CTransform are overridden in this
    // class to call CheckInputType with the assumption that the type
    // does not change.  In Debug builds some calls will be made and
    // we just ensure that they do not assert.
    function CheckTransform(mtIn, mtOut: PAMMediaType): HRESULT; override;

    // =================================================================
    // ----- You may want to override this -----------------------------
    // =================================================================

    function CompleteConnect(dir: TPinDirection; ReceivePin: IPin): HRESULT; override;

    // chance to customize the transform process
    function Receive(Sample: IMediaSample): HRESULT; override;

    // =================================================================
    // ----- You MUST override these -----------------------------------
    // =================================================================

    function Transform(Sample: IMediaSample): HRESULT; reintroduce; virtual; abstract;

    // this goes in the factory template table to create new instances
    // static CCOMObject * CreateInstance(LPUNKNOWN, HRESULT *);

  protected
    FModifiesData: boolean; // Does this filter change the data?
    function Copy(Source: IMediaSample): IMediaSample;

    // these hold our input and output pins
    function InputPin: TBCTransInPlaceInputPin;
    function OutputPin: TBCTransInPlaceOutputPin;

    //  Helper to see if the input and output types match
    function TypesMatch: boolean;

    //  Are the input and output allocators different?
    function UsingDifferentAllocators: boolean;
  end;

  TBCTransInPlaceInputPin = class(TBCTransformInputPin)
  protected
    FTIPFilter: TBCTransInPlaceFilter; // our filter
    FReadOnly : boolean;               // incoming stream is read only
  public
    constructor Create(ObjectName: string; Filter: TBCTransInPlaceFilter;
      out hr: HRESULT; Name: WideString);
    // --- IMemInputPin -----
    // Provide an enumerator for media types by getting one from downstream
    function EnumMediaTypes(out ppEnum: IEnumMediaTypes): HRESULT; override; stdcall;

    // Say whether media type is acceptable.
    function CheckMediaType(pmt: PAMMediaType): HRESULT; override;

    // Return our upstream allocator
    function GetAllocator(out Allocator: IMemAllocator): HRESULT; stdcall;

    // get told which allocator the upstream output pin is actually
    // going to use.
    function NotifyAllocator(Allocator: IMemAllocator; ReadOnly: BOOL): HRESULT; stdcall;

    // Allow the filter to see what allocator we have
    // N.B. This does NOT AddRef
    function PeekAllocator: IMemAllocator;

    // Pass this on downstream if it ever gets called.
    function GetAllocatorRequirements(props: PAllocatorProperties): HRESULT; stdcall;

    property ReadOnly: Boolean read FReadOnly;
  end;


// ==================================================
// Implements the output pin
// ==================================================

  TBCTransInPlaceOutputPin = class(TBCTransformOutputPin)
  protected
    // m_pFilter points to our CBaseFilter
    FTIPFilter: TBCTransInPlaceFilter;
  public
    constructor Create(ObjectName: string; Filter: TBCTransInPlaceFilter;
      out hr: HRESULT; Name: WideString);

    // --- CBaseOutputPin ------------

    // negotiate the allocator and its buffer size/count
    // Insists on using our own allocator.  (Actually the one upstream of us).
    // We don't override this - instead we just agree the default
    // then let the upstream filter decide for itself on reconnect
    // virtual HRESULT DecideAllocator(IMemInputPin * pPin, IMemAllocator ** pAlloc);

    // Provide a media type enumerator.  Get it from upstream.
    function EnumMediaTypes(out ppEnum: IEnumMediaTypes): HRESULT; override; stdcall;

    // Say whether media type is acceptable.
    function CheckMediaType(pmt: PAMMediaType): HRESULT; override;

    //  This just saves the allocator being used on the output pin
    //  Also called by input pin's GetAllocator()
    procedure SetAllocator(Allocator: IMemAllocator);

    function ConnectedIMemInputPin: IMemInputPin;

    // Allow the filter to see what allocator we have
    // N.B. This does NOT AddRef
    function PeekAllocator: IMemAllocator;
  end;


  TBCBasePropertyPage = class(TBCUnknown, IPropertyPage)
  private
    FObjectSet: boolean;          // SetObject has been called or not.
  protected
    FPageSite: IPropertyPageSite; // Details for our property site
    FDirty: boolean;              // Has anything been changed
    FForm: TFormPropertyPage;
  public

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品国产999大香线蕉| 成人午夜视频在线| 国产 欧美在线| 欧美日韩黄色一区二区| 国产精品丝袜在线| 免费欧美高清视频| 色狠狠综合天天综合综合| 欧美精品一区二区三区一线天视频| 中文字幕亚洲在| 久久激情五月激情| 欧美性欧美巨大黑白大战| 欧美国产在线观看| 五月激情综合色| 91美女在线观看| 国产日韩欧美不卡在线| 人人精品人人爱| 欧美日韩在线亚洲一区蜜芽| 国产精品网站在线| 国产一区二区在线影院| 日韩视频中午一区| 亚洲国产精品欧美一二99| 91在线精品一区二区三区| 国产调教视频一区| 韩国成人精品a∨在线观看| 在线精品亚洲一区二区不卡| 欧美精品一区二区三区四区| 一区二区视频在线| 青青草伊人久久| 色吊一区二区三区| 国产精品福利电影一区二区三区四区 | 亚洲视频 欧洲视频| 亚洲超碰97人人做人人爱| av资源网一区| 精品久久久久久久久久久久久久久 | 粉嫩av一区二区三区在线播放| 欧美色男人天堂| 亚洲人精品午夜| 风间由美一区二区三区在线观看| 欧美肥胖老妇做爰| 一区二区激情视频| 成人激情开心网| 欧洲人成人精品| 一区二区三国产精华液| 成人av在线播放网站| 精品美女在线观看| 青青草成人在线观看| 欧美女孩性生活视频| 亚洲精品免费在线观看| 成人黄色片在线观看| 欧美精品xxxxbbbb| 日欧美一区二区| 91精品国产综合久久久久久漫画| 亚洲电影视频在线| 欧美日韩一卡二卡三卡 | 91精品国产综合久久蜜臀 | 91在线视频官网| 国产欧美精品一区二区色综合| 午夜久久电影网| 欧美一区二区在线免费播放| 亚洲小说欧美激情另类| 欧美亚洲国产bt| 午夜精品福利一区二区三区蜜桃| 欧美日韩精品一区二区三区 | 成人av网址在线| 亚洲三级在线播放| 色综合久久久久综合体| 一区二区三区美女| 色狠狠色噜噜噜综合网| 最新热久久免费视频| 欧美中文字幕一二三区视频| 亚洲综合男人的天堂| 欧美日韩一区久久| 麻豆久久久久久| 久久精品视频免费观看| 91麻豆国产精品久久| 亚洲国产成人porn| 欧美曰成人黄网| 五月激情综合色| 欧美性极品少妇| 亚洲成年人网站在线观看| 欧美在线不卡视频| 久草精品在线观看| 久久久久久久综合日本| 99r国产精品| 日本成人在线电影网| 国产婷婷色一区二区三区| 色综合中文字幕| 精品系列免费在线观看| 中文字幕日韩欧美一区二区三区| 欧美久久一二三四区| 福利电影一区二区三区| 亚洲电影视频在线| 国产精品久久久久三级| 色猫猫国产区一区二在线视频| 青青草国产成人av片免费| 中文字幕综合网| 精品国产亚洲在线| 欧美日韩一区二区欧美激情| 国产成人在线看| 强制捆绑调教一区二区| 国产亚洲欧美日韩俺去了| www.欧美亚洲| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆 | 中文字幕va一区二区三区| 欧美天堂亚洲电影院在线播放| 亚洲国产成人av| 精品日产卡一卡二卡麻豆| 欧洲激情一区二区| 成人av电影在线| 美女视频一区在线观看| 国产欧美精品一区aⅴ影院| 欧美美女视频在线观看| 91网页版在线| 国产成人无遮挡在线视频| 日本成人在线视频网站| 亚洲第一久久影院| 亚洲精品一二三| 亚洲欧美中日韩| 中文字幕不卡的av| 日韩亚洲欧美成人一区| 欧美日韩一区二区三区不卡 | 日韩女优av电影| 欧美裸体一区二区三区| 成人黄色电影在线| 国产乱码精品一品二品| 久久狠狠亚洲综合| 免费视频一区二区| 日本在线不卡视频| 午夜精品久久久久久久久久久| 久久精品亚洲国产奇米99 | 精东粉嫩av免费一区二区三区 | 日韩一区二区精品在线观看| 欧美视频日韩视频| 欧美性猛交xxxxxx富婆| 欧美在线不卡视频| 国产一区二区三区在线观看免费 | 国产美女视频一区| 一区二区久久久久久| 亚洲欧洲av色图| 亚洲国产精品激情在线观看| 欧美精品v国产精品v日韩精品| 91亚洲国产成人精品一区二区三| 免费av网站大全久久| 美国av一区二区| 国产精品一区在线观看乱码 | 日本视频一区二区三区| 同产精品九九九| 夜夜爽夜夜爽精品视频| 亚洲自拍偷拍麻豆| 午夜伦理一区二区| 久久er99精品| 成人精品国产免费网站| 国产成人av电影免费在线观看| 激情国产一区二区| 成人精品国产免费网站| 欧美中文字幕久久| 日韩欧美综合一区| 久久综合九色综合97婷婷女人| 欧美国产欧美综合| 亚洲色图制服诱惑| 一区二区视频免费在线观看| 丝袜美腿成人在线| 国产suv精品一区二区6| 91蝌蚪porny| 日韩欧美在线1卡| 国产精品色婷婷| 天天操天天综合网| 三级精品在线观看| 国产真实乱偷精品视频免| 国产一区欧美一区| 日本道色综合久久| 精品久久久久久亚洲综合网 | 亚洲777理论| 国产精品456露脸| 欧美性猛片aaaaaaa做受| 欧美电视剧免费全集观看| 亚洲日本电影在线| 裸体一区二区三区| 色综合久久久网| 久久久久久久久一| 亚洲成人精品一区二区| 国产成人亚洲综合a∨猫咪| 在线免费亚洲电影| 欧美精品一卡二卡| 成人欧美一区二区三区小说| 美女视频网站黄色亚洲| 色视频欧美一区二区三区| 欧美精品欧美精品系列| 国产亚洲综合在线| 秋霞电影一区二区| 欧美手机在线视频| 91精品国产黑色紧身裤美女| 日韩美女视频一区二区在线观看| 欧美精品一区二区在线播放| 中文字幕第一页久久| 激情丁香综合五月| 日韩免费看的电影| 天涯成人国产亚洲精品一区av| 国产精品一二三区| 2023国产精华国产精品|