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

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

?? uasyncflt.pas

?? 一套及時通訊的原碼
?? PAS
字號:
//------------------------------------------------------------------------------
// File: UAsyncFlt.pas
// Original files: AsyncFlt.h, AsyncFlt.c
//
// Desc: AsyncFilter implementation
//
// Portions created by Microsoft are
// Copyright (c) 2000-2002  Microsoft Corporation.  All rights reserved.
//------------------------------------------------------------------------------
unit UAsyncFlt;

interface
uses
  BaseClass, DirectShow9, Windows, SysUtils, MMSystem, Math, ActiveX,
  UAsyncRdr, UAsyncIo, DSUtil;

const
  // Setup data for filter registration
  sudPinTypes : TRegPinTypes =
  (
  clsMajorType: @MEDIATYPE_Stream;
  clsMinorType: @MEDIASUBTYPE_NULL
  );

  // pins info
  sudpPins : array[0..0] of TRegFilterPins =
  (
   (
    strName: 'Output';         // Pins string name
    bRendered: False;          // Is it rendered
    bOutput: True;             // Is it an output
    bZero: False;              // Are we allowed none
    bMany: False;              // And allowed many
    oFilter: @GUID_NULL;       // Connects to filter
    strConnectsToPin: 'Input'; // Connects to pin
    nMediaTypes: 1;            // Number of types
    lpMediaType: @sudPinTypes  // Pin information
   )
  );

type
  //  NOTE:  This filter does NOT support AVI format

  //
  //  Define an internal filter that wraps the base CBaseReader stuff
  //

  TBCMemStream = class(TBCAsyncStream)
  public
    constructor Create;
    destructor Destroy; override;

    //  Initialization
    procedure Init(AData: PByte; ALength: LONGLONG; AKBPerSec: DWord = INFINITE);

    function SetPointer(APos: LONGLONG): HResult; override;
    function Read(ABuffer: PByte; ABytesToRead: DWord;
      AAlign: Boolean; out ABytesRead: DWord): HResult; override;
    function Size(out ASizeAvailable: LONGLONG): LONGLONG; override;
    function Alignment: DWord; override;
    procedure Lock; override;
    procedure UnLock; override;

  private
    FCSLock: TBCCritSec;
    FData: PByte;
    FLength: LONGLONG;
    FPosition: LONGLONG;
    FKBPerSec: DWord;
    FTimeStart: DWord;
  end;

  TBCAsyncFilter = class(TBCAsyncReader, IFileSourceFilter)
  public
    // construction / destruction
    constructor Create(ObjName: string; Unk: IUnKnown; out hr : HRESULT);
    constructor CreateFromFactory(Factory: TBCClassFactory;
      const Controller: IUnknown); override;

    destructor Destroy; override;

    function NonDelegatingQueryInterface(const IID: TGUID;
      out Obj): HResult; override;

    //  IFileSourceFilter methods

    //  Load a (new) file
    function Load(AFileName: PWideChar; const Amt: PAMMediaType): HResult; stdcall;

    // Modeled on IPersistFile::Load
    // Caller needs to CoTaskMemFree or equivalent.
    function GetCurFile(out AFileName: PWideChar; Amt: PAMMediaType): HResult;
      stdcall;
  private
    FFileName: PWideChar;
    FSize: LONGLONG;
    FData: PByte;
    FStream: TBCMemStream;

    function ReadTheFile(AFileName: PChar): Boolean;
  end;

implementation

// --- TBCMemStream ---

constructor TBCMemStream.Create;
begin
  Inherited;

  FCSLock := TBCCritSec.Create;
  FPosition := 0;
end;

destructor TBCMemStream.Destroy;
begin
  if Assigned(FCSLock) then
    FreeAndNil(FCSLock);

  Inherited Destroy;
end;

procedure TBCMemStream.Init(AData: PByte; ALength: LONGLONG;
  AKBPerSec: DWord = INFINITE);
begin
  FData := AData;
  FLength := ALength;
  FKBPerSec := AKBPerSec;
  FTimeStart := timeGetTime;
end;

function TBCMemStream.SetPointer(APos: LONGLONG): HResult;
begin
  if (APos < 0) or (APos > FLength) then
    Result := S_FALSE
  else
    begin
      FPosition := APos;
      Result := S_OK;
    end;
end;

function TBCMemStream.Read(ABuffer: PByte; ABytesToRead: DWord;
  AAlign: Boolean; out ABytesRead: DWord): HResult;
var
  _ReadLength, _Time, _TimeToArrive: DWord;
  _Data: PByte;
begin
  Result := E_FAIL;

  FCSLock.Lock;
  try
    //  Wait until the bytes are here!
    _Time := timeGetTime;

    if (FPosition + ABytesToRead > FLength) then
        _ReadLength := FLength - FPosition
    else
      _ReadLength := ABytesToRead;
    _TimeToArrive := (FPosition + _ReadLength) div FKBPerSec;

    if (_Time - FTimeStart < _TimeToArrive) then
      Sleep(_TimeToArrive - _Time + FTimeStart);

    _Data := FData;
    Inc(_Data, FPosition);
    CopyMemory(ABuffer, _Data, _ReadLength);

    Inc(FPosition, _ReadLength);
    ABytesRead := _ReadLength;
    Result := S_OK;

  finally
    FCSLock.UnLock;
  end;
end;

function TBCMemStream.Size(out ASizeAvailable: LONGLONG): LONGLONG;
var
  _CurrentAvailable: LONGLONG;
begin
  _CurrentAvailable := UInt32x32To64(timeGetTime - FTimeStart, FKBPerSec);

  ASizeAvailable := min(FLength, _CurrentAvailable);
  Result := FLength;
end;

function TBCMemStream.Alignment: DWord;
begin
  Result := 1;
end;

procedure TBCMemStream.Lock;
begin
  FCSLock.Lock;
end;

procedure TBCMemStream.UnLock;
begin
  FCSLock.UnLock;
end;

// --- TBCAsyncFilter ---

constructor TBCAsyncFilter.Create(ObjName: string; Unk: IUnKnown; out hr : HRESULT);
begin
  try
    FStream := TBCMemStream.Create;

    Inherited Create(ObjName, Unk, FStream, hr);

    FFileName := '';
    FData := nil;
    hr := NOERROR;
  except
    hr := E_OUTOFMEMORY;
  end;
end;

constructor TBCAsyncFilter.CreateFromFactory(Factory: TBCClassFactory;
  const Controller: IUnknown);
var
  hr: HRESULT;
begin
  Create(Factory.Name, Controller, hr);
end;

destructor TBCAsyncFilter.Destroy;
begin
  if Assigned(FData) then
    FreeMem(FData);
  FFileName := '';

  Inherited Destroy;
end;

function TBCAsyncFilter.NonDelegatingQueryInterface(const IID: TGUID;
  out Obj): HResult;
begin
  if IsEqualGUID(IID, IID_IFileSourceFilter) then
    if GetInterface(IID_IFileSourceFilter, Obj) then
      Result := S_OK
    else
      Result := E_FAIL
  else
    Result := Inherited NonDelegatingQueryInterface(IID, Obj);
end;

function TBCAsyncFilter.Load(AFileName: PWideChar;
  const Amt: PAMMediaType): HResult;
var
  cch: Integer;
  {$IFNDEF UNICODE}
  _FileName: PChar;
  {$ELSE}
  _FileName: array[0..MAX_PATH - 1] of Char;
  {$ENDIF}
  _mt: TAMMediaType;
begin
  if (AFileName = nil) then
  begin
    Result := E_POINTER;
    Exit;
  end;

  // lstrlenW is one of the few Unicode functions that works on win95
  cch := lstrlenW(AFileName) + 1;

  {$IFNDEF UNICODE}
  try
    _FileName := nil;
    GetMem(_FileName, cch * 2);
  except
    Result := E_OUTOFMEMORY;
    Exit;
  end;

  WideCharToMultiByte(GetACP, 0, AFileName, -1,
    _FileName, cch, nil, nil);
  {$ELSE}
  ZeroMemory(@_FileName[0], MAX_PATH, 0);
  lstrcpy(_FileName, AFileName);
  {$ENDIF}

  FCSFilter.Lock;
  try
    //  Check the file type
    if (Amt = nil) then
    begin
      ZeroMemory(@_mt, SizeOf(TAMMediaType));
      _mt.majortype := MEDIATYPE_Stream;
{$IFDEF AVI}
      _mt.subtype := MEDIASUBTYPE_AVI;
{$ELSE}
      _mt.subtype := MEDIASUBTYPE_NULL;
{$ENDIF}
    end
      else
        CopyMemory(@_mt, Amt, SizeOf(TAMMediaType));

    if Not ReadTheFile(_FileName) then
    begin
      {$IFNDEF UNICODE}
        FreeMem(_FileName);
      {$ENDIF}
      Result := E_FAIL;
      Exit;
    end;

    FStream.Init(FData, FSize);

    try
      GetMem(FFileName, SizeOf(WideChar) * cch);
    except
      Result := E_OUTOFMEMORY;
      Exit;
    end;

    CopyMemory(FFileName, AFileName, cch * SizeOf(WideChar));

    // this is not a simple assignment... pointers and format
    // block (if any) are intelligently copied
    CopyMemory(@Fmt, @_mt, SizeOf(TAMMediaType));

    Fmt.bTemporalCompression := True;
    Fmt.lSampleSize := 1;

    Result := S_OK;
  finally
    FCSFilter.UnLock;
  end;
end;

function TBCAsyncFilter.GetCurFile(out AFileName: PWideChar;
  Amt: PAMMediaType): HResult;
var
  n: DWord;
begin
  AFileName := nil;

  if Assigned(FFileName) then
  begin
    n := SizeOf(WideChar) * (1 + lstrlenW(FFileName));

    AFileName := CoTaskMemAlloc(n);
    if Assigned(AFileName) then
      CopyMemory(AFileName, FFileName, n);
  end;

  if Assigned(Amt) then
    CopyMemory(Amt, @Fmt, SizeOf(TAMMediaType));

  Result := NOERROR;
end;

function TBCAsyncFilter.ReadTheFile(AFileName: PChar): Boolean;
var
  _BytesRead: DWord;
  _File: THandle;
  _Size: ULARGE_INTEGER;
  _Mem: PByte;
begin
  // Open the requested file
  _File := CreateFile(AFileName, GENERIC_READ, FILE_SHARE_READ,
    nil, OPEN_EXISTING, 0, 0);
  if (_File = INVALID_HANDLE_VALUE) then
  begin
    {$IFDEF DEBUG}
    DbgLog(Format('Could not open %s', [AFileName]));
    {$ENDIF}
    Result := False;
    Exit;
  end;
  // Determine the file size
  _Size.LowPart := GetFileSize(_File, @_Size.HighPart);

  try
    _Mem := nil;
    GetMem(_Mem, _Size.LowPart);
  except
    CloseHandle(_File);
    Result := False;
    Exit;
  end;

  // Read the data from the file
  if (Not ReadFile(_File, _Mem^, _Size.LowPart, _BytesRead, nil)) or
    (_BytesRead <> _Size.LowPart) then
  begin
    {$IFDEF DEBUG}
    DbgLog(Format('Could not read %s', [AFileName]));
    {$ENDIF}

    FreeMem(_Mem);
    CloseHandle(_File);
    Result := False;
    Exit;
  end;


  // Save a pointer to the data that was read from the file
  FData := _Mem;
  FSize := _Size.QuadPart;

  // Close the file
  CloseHandle(_File);

  Result := True;
end;

initialization
  // provide an entry in the CFactoryTemplate array
  TBCClassFactory.CreateFilter(TBCAsyncFilter,
    StringToOleStr('_ Sample File Source (Async.)'),
    CLSID_AsyncSample, CLSID_LegacyAmFilterCategory, MERIT_UNLIKELY,
    1, @sudpPins);
end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
轻轻草成人在线| 欧美撒尿777hd撒尿| 亚洲国产日韩a在线播放性色| 日本一区二区高清| 日本一区二区三区高清不卡| 久久精品在这里| 久久久精品国产免费观看同学| 26uuu欧美日本| 欧美激情综合五月色丁香小说| 国产三级久久久| 国产精品久久久久一区二区三区 | 国产精品久久影院| 久久精品无码一区二区三区 | 成人激情开心网| 成人国产在线观看| 色综合网色综合| 欧美日韩国产精选| 制服.丝袜.亚洲.中文.综合| 欧美一级在线观看| 欧美精品一区二区久久久 | 福利电影一区二区三区| 高清不卡在线观看av| 99久久久无码国产精品| 91毛片在线观看| 欧美一区二区三区视频免费播放 | 成人黄色免费短视频| 欧美色图免费看| 亚洲精品在线一区二区| 日韩美女视频一区二区 | 成人激情免费视频| 欧美日韩一二三区| 久久久精品天堂| 亚洲国产成人精品视频| 国产精品一区二区久久不卡| 91网站黄www| 日韩欧美不卡在线观看视频| 中文字幕在线不卡视频| 青娱乐精品视频| 91免费观看国产| www国产精品av| 亚洲成人手机在线| 99在线热播精品免费| 日韩欧美国产午夜精品| 亚洲精品免费播放| 成人性生交大片免费看视频在线| 欧美日韩电影在线| 国产精品国产精品国产专区不片 | 国产日韩综合av| 日韩黄色小视频| 色悠久久久久综合欧美99| 2022国产精品视频| 午夜天堂影视香蕉久久| av一二三不卡影片| 国产日韩精品一区二区三区在线| 无吗不卡中文字幕| 一本色道久久综合亚洲aⅴ蜜桃 | 理论片日本一区| 91性感美女视频| 国产色一区二区| 久久精品72免费观看| 欧美人妇做爰xxxⅹ性高电影| 中文字幕一区二区三区乱码在线| 国产成人在线看| 国产日韩欧美精品一区| 久久国产免费看| 日韩手机在线导航| 青青草精品视频| 91精品国产高清一区二区三区蜜臀| 亚洲精品高清在线| 91一区一区三区| 国产精品电影院| av爱爱亚洲一区| 亚洲欧洲色图综合| 99久久99久久久精品齐齐| 欧美精选在线播放| 色婷婷久久综合| 亚洲情趣在线观看| 91成人在线精品| 亚洲欧美日韩国产手机在线| 色婷婷亚洲综合| 亚洲国产日日夜夜| 欧美一区二区三区视频| 久久国产精品露脸对白| 久久亚区不卡日本| 国产91清纯白嫩初高中在线观看 | 福利一区二区在线| 国产精品不卡在线| 日本久久电影网| 亚洲国产乱码最新视频| 欧美高清精品3d| 久久精品国内一区二区三区| 久久综合狠狠综合久久综合88 | 久久网站热最新地址| 久久99国产精品成人| 久久亚洲私人国产精品va媚药| 国产在线不卡视频| 中文字幕亚洲欧美在线不卡| 91久久精品午夜一区二区| 婷婷综合在线观看| 亚洲精品在线三区| av成人免费在线观看| 亚洲一区在线观看免费观看电影高清| 欧美久久婷婷综合色| 韩国v欧美v日本v亚洲v| 综合色中文字幕| 日韩欧美你懂的| av亚洲精华国产精华精华| 日韩中文字幕1| 亚洲国产精品高清| 欧美精三区欧美精三区| 国产乱码字幕精品高清av| 亚洲国产精品久久人人爱| 精品国产91亚洲一区二区三区婷婷| 成人黄色国产精品网站大全在线免费观看 | 国产美女精品人人做人人爽| 国产精品福利在线播放| 7777精品久久久大香线蕉| 国产不卡视频一区| 日本中文字幕一区二区有限公司| 国产婷婷色一区二区三区| 911精品国产一区二区在线| 成人精品视频一区二区三区| 日韩国产在线观看一区| 亚洲色图欧美在线| 久久在线免费观看| 欧美久久婷婷综合色| 99视频在线精品| 国产精品一区二区x88av| 日韩影院免费视频| 亚洲免费观看高清| 中文字幕欧美日韩一区| 日韩欧美一区二区三区在线| 91精品1区2区| 成人av资源站| 国产精品亚洲а∨天堂免在线| 性久久久久久久久| 亚洲自拍另类综合| 中文字幕一区二区三区在线播放 | 国产a区久久久| 精品亚洲成av人在线观看| 亚洲电影在线播放| 亚洲男同1069视频| 国产精品高潮呻吟久久| 欧美激情一区三区| 国产视频视频一区| 久久精品人人做人人爽人人| 日韩精品一区二区三区在线| 欧美一区二区三区免费大片 | 91亚洲资源网| 波波电影院一区二区三区| 国产成人av网站| 国产一区二区91| 国产一区二区成人久久免费影院| 日韩精品电影在线观看| 婷婷开心激情综合| 偷偷要91色婷婷| 美国av一区二区| 黄页网站大全一区二区| 韩国三级在线一区| 国产精品88888| 99热这里都是精品| 欧美在线一区二区三区| 欧美人体做爰大胆视频| 日韩欧美一区在线| 国产欧美日本一区二区三区| 国产亲近乱来精品视频| 中文字幕中文字幕一区| 亚洲三级在线观看| 午夜影院久久久| 青青草国产精品97视觉盛宴| 久久国产欧美日韩精品| 国产·精品毛片| 欧日韩精品视频| 欧美大白屁股肥臀xxxxxx| 久久一区二区三区国产精品| 国产精品久久久久久久久免费樱桃| 亚洲免费av高清| 麻豆精品精品国产自在97香蕉| 国产精品一线二线三线| 91麻豆自制传媒国产之光| 欧美美女黄视频| 国产视频一区在线播放| 一区二区三区美女视频| 九九视频精品免费| 色综合一个色综合| 精品黑人一区二区三区久久 | 精品国产免费人成电影在线观看四季| 国产日韩精品一区二区浪潮av| 亚洲老司机在线| 精品一区二区三区视频在线观看| 成人国产精品免费| 欧美理论片在线| 国产精品灌醉下药二区| 男人操女人的视频在线观看欧美| 成年人网站91| 日韩欧美综合在线| 一区二区三区不卡在线观看| 国产传媒久久文化传媒| 3d成人动漫网站| 亚洲免费在线观看视频|