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

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

?? balancer.pas

?? TBalncer 音頻聲道均衡控件 基于 DSPack 的音頻均衡控件,可以設置左右聲道. 因為原版 DSPack 里是沒有對左右聲道作選擇的,要選擇左右聲道只能通過一邊的喇叭出聲,另一邊沒聲.
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
    end;
  end;

  MpegAudioDecoder := nil;
  ppEnum := nil;
  ppFilter := nil;
  Result := S_OK;
end;

function TBalancerFilter.CheckInputType(mtIn: PAMMediaType):
  HRESULT;
begin
  if not IsEqualGUID(mtIn^.majortype, MEDIATYPE_Audio) then
  begin
    Result := VFW_E_INVALIDMEDIATYPE;
    Exit;
  end;

  if (not IsEqualGUID(mtIn^.subtype, MEDIASUBTYPE_PCM)) and
    (not IsEqualGUID(mtIn^.subtype, MEDIASUBTYPE_IEEE_FLOAT)) then
  begin
    Result := VFW_E_INVALIDSUBTYPE;
    Exit;
  end;

  if not IsEqualGUID(mtIn^.formattype, FORMAT_WaveFormatEx) then
  begin
    Result := VFW_E_TYPE_NOT_ACCEPTED;
    Exit;
  end;

  Result := S_OK;
end;

constructor TBalancerFilter.Create(ObjName: string; unk:
  IInterface;
  out hr: HRESULT);
var
  pmt: PAMMediaType;
begin
  inherited Create(ObjName, unk, CLSID_Balancer, hr);
  FThisInstance := InterlockedIncrement(InstanceCount);
  pmt := @FPreferred;
  TBCMediaType(pmt).InitMediaType;
  FBalancerLock := TBCCritSec.Create;
  FCurrentChannel := acStereo;
end;

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

destructor TBalancerFilter.Destroy;
begin
  FBalancerLock.Free;
  inherited;
end;

function TBalancerFilter.get_IPin(out Pin: IPin): HRESULT;
begin
  Result := S_OK;
  FBalancerLock.Lock;
  try
    if (Input = nil) then
    begin
      Pin := nil;
      Exit;
    end;
    if not Input.IsConnected then
      Pin := nil
    else
      Pin := Input.GetConnected;
  finally
    FBalancerLock.UnLock;
  end;
end;

function TBalancerFilter.get_MediaType(out mt: TAMMediaType):
  HRESULT;
begin
  FBalancerLock.Lock;
  try
    mt := FPreferred;
    Result := NOERROR;
  finally
    FBalancerLock.UnLock;
  end;
end;

function TBalancerFilter.get_State(out State: TFilterState):
  HRESULT;
begin
  FBalancerLock.Lock;
  try
    State := self.State;
    Result := NOERROR;
  finally
    FBalancerLock.UnLock;
  end;
end;

function TBalancerFilter.GetPages(out pages: TCAGUID): HResult;
begin
  Pages.cElems := 1;
  Result := NOERROR;
end;

function TBalancerFilter.put_MediaType(mt: PAMMediaType):
  HRESULT;
var
  Pin: IPin;
  pmt: PAMMediaType;
begin
  FBalancerLock.Lock;
  try
    if (State = State_Running) then
    begin
      Result := E_UNEXPECTED;
      Exit;
    end;

    pmt := @FPreferred;
    if (mt = nil) then
      TBCMediaType(pmt).InitMediaType
    else
    begin
      Pin := Input.GetConnected;
      if (Pin <> nil) then
      begin
        if (Pin.QueryAccept(mt^) <> NOERROR) then
        begin
          MessageBox(0,
            PChar('Upstream filter cannot provide this type'),
            PChar('Format Selection'),
            MB_OK or MB_ICONEXCLAMATION);
          Result := VFW_E_TYPE_NOT_ACCEPTED;
          Exit;
        end;
      end;

      Pin := Output.GetConnected;
      if (Pin <> nil) then
      begin
        if (Pin.QueryAccept(mt^) <> NOERROR) then
        begin
          MessageBox(0,
            PChar('Downstream filter cannot accept this type'),
            PChar('Format Selection'),
            MB_OK or MB_ICONEXCLAMATION);
          Result := VFW_E_TYPE_NOT_ACCEPTED;
          Exit;
        end;
      end;
      FPreferred := mt^;
    end;

    if (Input.IsConnected) then
    begin
      pmt := Input.CurrentMediaType.MediaType;
      if not TBCMediaType(pmt).Equal(@FPreferred) then
        Graph.Reconnect(Input);
    end;
    Result := NOERROR;
  finally
    FBalancerLock.Unlock;
  end;
end;

function TBalancerFilter.Transform(Sample: IMediaSample):
  HRESULT;
var
  PWaveFormat: PWaveFormatEx;
  AudioChannel: TAudioChannel;
  Size: Integer;
  PBuffer: PByte;
begin
  try
    PWaveFormat := FInput.CurrentMediaType.MediaType.pbFormat;

    AudioChannel := FCurrentChannel;

    Sample.GetPointer(PBuffer);
    Size := Sample.GetActualDataLength;

    AudioChannelMix(Pbuffer, Size, AudioChannel,
      PWaveFormat.wBitsPerSample);
  finally
    Result := S_OK;
  end;
end;

function TBalancerFilter.SetAudioChannel(AudioChannel:
  TAudioChannel): HRESULT;
  stdcall;
begin
  try
    FCurrentChannel := AudioChannel;
  finally
    Result := S_OK;
  end;
end;

function TBalancer.GetFilter: IBaseFilter;
begin
  Result := FBaseFilter;
end;

function TBalancer.GetName: string;
begin
  Result := Name_Balancer;
end;

procedure TBalancer.NotifyFilter(operation: TFilterOperation; Param: integer =
  0);
begin
  case operation of
    foAdding: FBaseFilter := FFilter as IBaseFilter;
    foRemoving: if FFilter <> nil then
        FFilter.Stop;
    foRemoved: FFilter := nil;
    foRefresh: if assigned(FFilterGraph) then
      begin
        TBalancerFilterGraph(FFilterGraph).RemoveFilter(self);
        TBalancerFilterGraph(FFilterGraph).InsertFilter(self);
      end;
  end;
end;

procedure TBalancer.SetFilterGraph(AFilterGraph: TFilterGraph);
begin
  if AFilterGraph = FFilterGraph then
    exit;
  if FFilterGraph <> nil then
    TBalancerFilterGraph(FFilterGraph).RemoveFilter(self);
  if AFilterGraph <> nil then
    TBalancerFilterGraph(AFilterGraph).InsertFilter(self);
  FFilterGraph := AFilterGraph;
end;

procedure TBalancer.Notification(AComponent: TComponent; Operation:
  TOperation);
begin
  inherited Notification(AComponent, Operation);
  if ((AComponent = FFilterGraph) and (Operation = opRemove)) then
    FFilterGraph := nil;
end;

constructor TBalancer.Create(AOwner: TComponent);
var
  hr: HRESULT;
begin
  inherited Create(AOwner);
  FFilter := TBalancerFilter.Create(Name, nil, hr);
  FFilter.Parent := Self;
  FBaseFilter := FFilter as IBaseFilter;
  FAudioChannel := acStereo;
end;

destructor TBalancer.Destroy;
begin
  FilterGraph := nil;
  inherited Destroy;
end;

function TBalancer.QueryInterface(const IID: TGUID; out Obj):
  HResult;
begin
  Result := inherited QueryInterface(IID, Obj);
  if not Succeeded(Result) then
    if Assigned(FFilter) then
    begin
      Result := FFilter.QueryInterface(IID, Obj);
    end;
end;

procedure TBalancer.SetAudioChannel(AAudioChannel: TAudioChannel);
begin
  FAudioChannel := AAudioChannel;
  FFilter.SetAudioChannel(FAudioChannel);
end;

procedure Register;
begin
  RegisterComponents('DSPack', [TBalancer]);
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成都精品91一区二区三| 欧美一区二区视频观看视频| 欧美日韩一区在线观看| www成人在线观看| 日本一不卡视频| 在线视频中文字幕一区二区| 欧美韩国一区二区| 免费在线观看视频一区| 91极品美女在线| 国产精品你懂的在线欣赏| 九九九久久久精品| 在线综合亚洲欧美在线视频| 亚洲主播在线播放| 99久久久久久99| 国产精品久久久久久久久久免费看 | 国产成人一级电影| 日韩小视频在线观看专区| 樱花影视一区二区| 国产一区二区美女| 日韩一区二区三区av| 婷婷丁香激情综合| 在线播放91灌醉迷j高跟美女| 亚洲男人的天堂在线观看| 99视频一区二区| 国产精品久久午夜| 成人丝袜高跟foot| 中文字幕精品一区二区三区精品| 国产精品一区二区在线看| 久久嫩草精品久久久精品一| 国产一区二区免费视频| 久久蜜桃一区二区| 成人开心网精品视频| 国产精品久久久久精k8| 99精品欧美一区二区蜜桃免费 | 成人午夜免费电影| 国产精品网友自拍| 99精品一区二区| 亚洲一区影音先锋| 欧美裸体bbwbbwbbw| 裸体健美xxxx欧美裸体表演| 亚洲精品一区二区三区精华液 | 亚洲国产精品欧美一二99| 欧美色精品在线视频| 日韩专区在线视频| 精品剧情在线观看| 成人污污视频在线观看| 亚洲欧美日韩一区二区三区在线观看| 91蜜桃婷婷狠狠久久综合9色| 亚洲精品亚洲人成人网在线播放| 91久久精品网| 青青草国产精品亚洲专区无| 久久免费看少妇高潮| 99精品欧美一区二区三区小说 | 欧美日本免费一区二区三区| 蜜桃av一区二区在线观看| 欧美精品一区二区三区很污很色的| 国产麻豆成人传媒免费观看| 亚洲欧洲日韩一区二区三区| 欧美日韩在线直播| 国产在线精品视频| 亚洲欧美日韩国产另类专区 | 久久99国产精品久久99果冻传媒| 亚洲精品在线网站| 色综合中文字幕| 免费人成精品欧美精品| 国产精品剧情在线亚洲| 欧美日韩国产成人在线免费| 国产剧情一区在线| 亚洲高清免费观看高清完整版在线观看| 日韩欧美亚洲另类制服综合在线| av电影在线观看完整版一区二区| 婷婷夜色潮精品综合在线| 久久人人爽爽爽人久久久| 色系网站成人免费| 国产麻豆成人传媒免费观看| 一区二区三区视频在线观看 | 91麻豆精品国产| 成人av中文字幕| 免费欧美在线视频| 一区二区三区四区蜜桃| 国产亚洲综合性久久久影院| 51精品视频一区二区三区| 成人av综合在线| 精品亚洲porn| 日韩精品每日更新| 一区二区在线看| 国产精品无码永久免费888| 91精品国产福利| 欧美最猛性xxxxx直播| 国产91在线|亚洲| 免费成人在线视频观看| 亚洲尤物视频在线| 国产精品福利一区| 国产亚洲精品bt天堂精选| 欧美电影在哪看比较好| 91豆麻精品91久久久久久| 高清在线不卡av| 精品在线免费视频| 日韩二区三区四区| 亚洲国产欧美在线| 亚洲伦在线观看| 国产精品色一区二区三区| 久久亚洲精华国产精华液 | 另类人妖一区二区av| 亚洲五码中文字幕| 亚洲乱码日产精品bd| 亚洲女同女同女同女同女同69| 久久综合久久鬼色| 日韩美女视频在线| 日韩欧美激情在线| 日韩免费性生活视频播放| 欧洲国内综合视频| 欧美日韩国产一级片| 欧美色网一区二区| 欧美丰满少妇xxxxx高潮对白 | 99久久99久久精品国产片果冻| 国产成人三级在线观看| 国产精品一区二区黑丝| 国内精品伊人久久久久av一坑| 久久丁香综合五月国产三级网站| 麻豆精品在线视频| 国产精品资源在线| 国产东北露脸精品视频| 蜜桃精品在线观看| 精品一区二区三区免费毛片爱| 国产综合色视频| 懂色av一区二区三区蜜臀| 盗摄精品av一区二区三区| 99视频一区二区三区| 在线视频欧美精品| 91精品国产综合久久久久久久久久| 欧美精品aⅴ在线视频| 欧美成人综合网站| 国产日韩在线不卡| 亚洲婷婷综合久久一本伊一区| 又紧又大又爽精品一区二区| 五月天激情综合| 久久99精品视频| 丁香婷婷综合色啪| 色综合天天天天做夜夜夜夜做| 91豆麻精品91久久久久久| 日韩欧美中文一区| 中文字幕高清一区| 亚洲高清不卡在线| 国内欧美视频一区二区| 91在线视频观看| 日韩亚洲电影在线| 国产丝袜美腿一区二区三区| 中文成人综合网| 日韩电影在线一区| 成人做爰69片免费看网站| 日本道精品一区二区三区 | 中文字幕日本乱码精品影院| 一区二区三区蜜桃| 精品午夜一区二区三区在线观看| 99精品在线免费| 日韩精品一区二区在线| 亚洲欧美一区二区在线观看| 奇米一区二区三区| 97精品电影院| 久久久久久免费| 亚欧色一区w666天堂| av一区二区三区四区| 在线不卡免费av| 亚洲男同1069视频| 国产一区二区不卡| 在线成人免费观看| 亚洲视频一二三区| 国产精品亚洲第一区在线暖暖韩国 | 99久久伊人网影院| 亚洲精品一区在线观看| 亚洲va国产天堂va久久en| 99精品桃花视频在线观看| 精品第一国产综合精品aⅴ| 亚洲综合丝袜美腿| 播五月开心婷婷综合| 日韩亚洲欧美高清| 五月婷婷综合激情| 欧美色图第一页| 久久久久久电影| 亚洲国产综合视频在线观看| 国产成人在线电影| 久久免费精品国产久精品久久久久| 亚洲成人午夜电影| 色婷婷精品大在线视频| 国产精品色哟哟| 成人午夜av在线| 国产日韩av一区二区| 国产一区二区三区在线看麻豆| 欧美精品免费视频| 亚洲一区二区三区四区在线观看 | 国内精品伊人久久久久av影院| 欧美男生操女生| 亚洲韩国精品一区| 欧美日韩一区二区三区免费看| 一个色在线综合| 色欧美片视频在线观看| 亚洲黄色av一区| 欧美日本精品一区二区三区| 午夜精品成人在线视频|