⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dspack.pas

📁 摄像头视频捕捉程序
💻 PAS
📖 第 1 页 / 共 5 页
字号:
      FilterGraph2.QueryInterface(IID_IMediaControl, MediaControl);
      FilterGraph2.QueryInterface(IID_IMediaEventEx, MediaEventEx);
      FilterGraph2.QueryInterface(IID_IVideoWindow, VideoWindow);
      FilterGraph2.QueryInterface(IID_IBasicAudio, BasicAudio);
      FilterGraph2.QueryInterface(IID_IBasicVideo2, BasicVideo2);
      FilterGraph2.QueryInterface(IID_IMediaSeeking, MediaSeeking);
      FilterGraph2.QueryInterface(IID_IAMGraphStreams, AMGraphStreams);
      FilterGraph2.QueryInterface(IID_IFilterChain, FilterChain);
      FilterGraph2.QueryInterface(IID_IFilterMapper2, FilterMapper2);
      FilterGraph2.QueryInterface(IID_IGraphConfig, GraphConfig);
      FilterGraph2.QueryInterface(IID_IGraphVersion, GraphVersion);
      FilterGraph2.QueryInterface(IID_IMediaEventSink, MediaEventSink);
      FilterGraph2.QueryInterface(IID_IQueueCommand, QueueCommand);
      FilterGraph2.QueryInterface(IID_IResourceManager, ResourceManager);
      FilterGraph2.QueryInterface(IID_IVideoFrameStep, VideoFrameStep);
    end;
    if assigned(FTB) then FTB.SetGraph(self);
    inherited QueryInterfaces;
  end;

  procedure TDSFilterGraph2.ClearGraph;
  begin
    if assigned(GraphBuilder) then
    begin
      if assigned(FTB) then FTB.SetRate(1);
    end;
    inherited ClearGraph;
  end;

//******************************************************************************
//
// TDSDVDGraph implementation
//
//******************************************************************************
  procedure TDSDVDGraph.InitServerData;
  const
    CServerData: TServerData = (
      ClassID:   '{FCC152B7-F372-11D0-8E00-00C04FD7C08B}'; // CLSID_DvdGraphBuilder
      IntfIID:   '{FCC152B6-F372-11d0-8E00-00C04FD7C08B}'; // IID_IDvdGraphBuilder
      EventIID:  '';
      LicenseKey: nil;
      Version: 500);
  begin
    ServerData := @CServerData;
  end;

  procedure TDSDVDGraph.DoEvent(Event, Param1, Param2: longint);
  var 
    lcid    : cardinal;
    achLang : array[0..MAX_PATH] of Char;
    tc      : TDVD_TIMECODE;
    frate   : integer;
    hmsftc  : TDVD_HMSF_TIMECODE;
  begin
    inherited DoEvent(Event, Param1, Param2);
    case Event of
      EC_DVD_ANGLE_CHANGE            : if Assigned(FOnDVDAngleChange) then FOnDVDAngleChange(self,Param1,Param2);
      EC_DVD_AUDIO_STREAM_CHANGE     :
        begin
          if Assigned(FOnDVDAudioStreamChange) then
          begin
            DvdInfo2.GetAudioLanguage(Param1, lcid);
            GetLocaleInfo(lcid, LOCALE_SENGLANGUAGE, achLang, MAX_PATH);
            FOnDVDAudioStreamChange(self, Param1, lcid, string(achLang));
          end;
        end;
      EC_DVD_BUTTON_CHANGE           : if Assigned(FOnDVDButtonChange) then FOnDVDButtonChange(self, Param1, Param2);
      EC_DVD_CHAPTER_AUTOSTOP        : if Assigned(FOnDVDChapterAutoStop) then FOnDVDChapterAutoStop(self);
      EC_DVD_CHAPTER_START           : if Assigned(FOnDVDChapterStart) then FOnDVDChapterStart(self, Param1);
      EC_DVD_CURRENT_TIME            :
        begin
          if Assigned(FOnDVDCurrentTime) then
          begin
            tc := IntToTimeCode(Param1);
            case tc.FrameRateCode of
              1 : frate := 25;
              3 : frate := 30;
            else
              frate := 0;
            end;
            FOnDVDCurrentTime(self,tc.Hours1+tc.Hours10*10,tc.Minutes1+tc.Minutes10*10,tc.Seconds1+tc.Seconds10*10,tc.Frames1+tc.Frames10*10,frate);
          end;
        end;
      EC_DVD_DOMAIN_CHANGE           :
        begin
          case Param1 of
            1 : if Assigned(FOnDVDDomainFirstPlay) then FOnDVDDomainFirstPlay(self);
            2 : if Assigned(FOnDVDDomainVideoManagerMenu) then FOnDVDDomainVideoManagerMenu(self);
            3 : if Assigned(FOnDVDDomainVideoTitleSetMenu) then FOnDVDDomainVideoTitleSetMenu(self);
            4 : if Assigned(FOnDVDDomainTitle) then FOnDVDDomainTitle(self);
            5 : if Assigned(FOnDVDDomainStop) then FOnDVDDomainStop(self);
          end;
        end;
      EC_DVD_ERROR                   :
        begin
          case Param1 of
            1 : if Assigned(FOnDVDErrorUnexpected) then FOnDVDErrorUnexpected(self);
            2 : if Assigned(FOnDVDErrorCopyProtectFail) then FOnDVDErrorCopyProtectFail(self);
            3 : if Assigned(FOnDVDErrorInvalidDVD1_0Disc) then FOnDVDErrorInvalidDVD1_0Disc(self);
            4 : if Assigned(FOnDVDErrorInvalidDiscRegion) then FOnDVDErrorInvalidDiscRegion(self);
            5 : if Assigned(FOnDVDErrorLowParentalLevel) then FOnDVDErrorLowParentalLevel(self);
            6 : if Assigned(FOnDVDErrorMacrovisionFail) then FOnDVDErrorMacrovisionFail(self);
            7 : if Assigned(FOnDVDErrorIncompatibleSystemAndDecoderRegions) then FOnDVDErrorIncompatibleSystemAndDecoderRegions(self);
            8 : if Assigned(FOnDVDErrorIncompatibleDiscAndDecoderRegions) then FOnDVDErrorIncompatibleDiscAndDecoderRegions(self);
          end;
        end;
      EC_DVD_NO_FP_PGC               : if Assigned(FOnDVDNoFP_PGC) then FOnDVDNoFP_PGC(self);
      EC_DVD_STILL_OFF               : if Assigned(FOnDVDStillOff) then FOnDVDStillOff(self);
      EC_DVD_STILL_ON                : if Assigned(FOnDVDStillOn) then FOnDVDStillOn(self,(Param1 = 1), Param2);
      EC_DVD_SUBPICTURE_STREAM_CHANGE:
        begin
          if Assigned(FOnDVDSubpictureStreamChange) then
          begin
            DvdInfo2.GetSubpictureLanguage(Param1,lcid);
            GetLocaleInfo(lcid,LOCALE_SENGLANGUAGE,achLang,MAX_PATH);
            FOnDVDSubpictureStreamChange(self,Param1,lcid,string(achLang));
          end;
        end;
      EC_DVD_TITLE_CHANGE            : if Assigned(FOnDVDTitleChange) then FOnDVDTitleChange(self,Param1);
      EC_DVD_VALID_UOPS_CHANGE       : if Assigned(FOnDVDValidUOPSChange) then FOnDVDValidUOPSChange(self,IntToUOPS(Param1));
      EC_DVD_WARNING                 :
        begin
          case Param1 of
            1 : if Assigned(FOnDVDWarningInvalidDVD1_0Disc)  then FOnDVDWarningInvalidDVD1_0Disc(self);
            2 : if Assigned(FOnDVDWarningFormatNotSupported) then FOnDVDWarningFormatNotSupported(self);
            3 : if Assigned(FOnDVDWarningIllegalNavCommand)  then FOnDVDWarningIllegalNavCommand(self);
            4 : if Assigned(FOnDVDWarningOpen)  then FOnDVDWarningOpen(self);
            5 : if Assigned(FOnDVDWarningSeek)  then FOnDVDWarningSeek(self);
            6 : if Assigned(FOnDVDWarningRead)  then FOnDVDWarningRead(self);
          end;
        end;
      EC_DVD_PLAYBACK_RATE_CHANGE    : if Assigned(FOnDVDPlaybackRateChange) then FOnDVDPlaybackRateChange(self,trunc(Param1/10000));
      EC_DVD_PARENTAL_LEVEL_CHANGE   : if Assigned(FOnDVDParentalLevelChange) then FOnDVDParentalLevelChange(self,Param1);
      EC_DVD_PLAYBACK_STOPPED        : if Assigned(FOnDVDPlaybackStopped) then FOnDVDPlaybackStopped(self);
      EC_DVD_ANGLES_AVAILABLE        : if Assigned(FOnDVDAnglesAvailable) then FOnDVDAnglesAvailable(self,(Param1 = 1));
      EC_DVD_PLAYPERIOD_AUTOSTOP     : if Assigned(FOnDVDPlayPeriodAutoStop) then FOnDVDPlayPeriodAutoStop(self);
      EC_DVD_BUTTON_AUTO_ACTIVATED   : if Assigned(FOnDVDButtonAutoActivated) then FOnDVDButtonAutoActivated(self,Param1);
      EC_DVD_CMD_START               : if Assigned(FOnDVDCMDStart) then FOnDVDCMDStart(self,Param1);
      EC_DVD_CMD_END                 : if Assigned(FOnDVDCMDEnd) then FOnDVDCMDEnd(self,Param1);
      EC_DVD_DISC_EJECTED            : if Assigned(FOnDVDDiscEjected) then FOnDVDDiscEjected(self);
      EC_DVD_DISC_INSERTED           : if Assigned(FOnDVDDiscInserted) then FOnDVDDiscInserted(self);
      EC_DVD_CURRENT_HMSF_TIME       :
        begin
          if assigned(FOnDVDCurrentHMSFTime) then
            begin
              hmsftc := TDVD_HMSF_TIMECODE(param1);
              tc := IntToTimeCode(Param2);
              FOnDVDCurrentHMSFTime(self,hmsftc,tc);
            end;
        end;
      EC_DVD_KARAOKE_MODE            : if assigned(FOnDVDKaraokeMode) then FOnDVDKaraokeMode(self,BOOL(Param1));
    end;
  end;

  constructor TDSDVDGraph.Create(AOwner: TComponent);
  begin
    inherited Create(AOwner);
  end;

  destructor TDSDVDGraph.Destroy;
  begin
    inherited Destroy;
  end;

  procedure TDSDVDGraph.Connect;
  var
    punk: IUnknown;
  begin
    if DvdGraphBuilder = nil then
    begin
      punk := GetServer;
      DvdGraphBuilder := punk as IDvdGraphBuilder;
      DvdGraphBuilder.GetFiltergraph(GraphBuilder);
      if RotEnabled then SetRot(true);
    end;
  end;

  procedure TDSDVDGraph.Disconnect;
  begin
    if DvdGraphBuilder <> nil then
    begin
      DvdGraphBuilder := nil;
      DvdControl2     := nil;
      DvdInfo2        := nil;
      AMLine21Decoder := nil;
    end;
    if Assigned(MediaEventEx) then
      MediaEventEx.SetNotifyFlags(AM_MEDIAEVENT_NONOTIFY);
    if GraphBuilder <> nil then
    begin
      if RotEnabled then SetRot(false);
      GraphBuilder    := nil;
      MediaControl    := nil;
      MediaEventEx    := nil;
      VideoWindow     := nil;
      BasicAudio      := nil;
      BasicVideo2     := nil;
      MediaSeeking    := nil;
      AMGraphStreams  := nil;
      FilterChain     := nil;
      FilterMapper2   := nil;
      GraphConfig     := nil;
      GraphVersion    := nil;
      MediaEventSink  := nil;
      QueueCommand    := nil;
      ResourceManager := nil;
      VideoFrameStep  := nil;
    end;
  end;

  procedure TDSDVDGraph.QueryInterfaces;
  begin
    if DvdGraphBuilder <> nil then
    begin
      DvdGraphBuilder.GetDvdInterface(IID_IDvdControl2, DvdControl2);
      DvdGraphBuilder.GetDvdInterface(IID_IDvdInfo2, DvdInfo2);
      DvdGraphBuilder.GetDvdInterface(IID_IAMLine21Decoder, AMLine21Decoder);
    end;
    if GraphBuilder <> nil then
    begin
      GraphBuilder.QueryInterface(IID_IMediaControl, MediaControl);
      GraphBuilder.QueryInterface(IID_IMediaEventEx, MediaEventEx);
      GraphBuilder.QueryInterface(IID_IVideoWindow, VideoWindow);
      GraphBuilder.QueryInterface(IID_IBasicAudio, BasicAudio);
      GraphBuilder.QueryInterface(IID_IBasicVideo2, BasicVideo2);
      GraphBuilder.QueryInterface(IID_IMediaSeeking, MediaSeeking);
      GraphBuilder.QueryInterface(IID_IAMGraphStreams, AMGraphStreams);
      GraphBuilder.QueryInterface(IID_IFilterChain, FilterChain);
      GraphBuilder.QueryInterface(IID_IFilterMapper2, FilterMapper2);
      GraphBuilder.QueryInterface(IID_IGraphConfig, GraphConfig);
      GraphBuilder.QueryInterface(IID_IGraphVersion, GraphVersion);
      GraphBuilder.QueryInterface(IID_IMediaEventSink, MediaEventSink);
      GraphBuilder.QueryInterface(IID_IQueueCommand, QueueCommand);
      GraphBuilder.QueryInterface(IID_IResourceManager, ResourceManager);
      GraphBuilder.QueryInterface(IID_IVideoFrameStep, VideoFrameStep);
    end;
    inherited QueryInterfaces;
  end;

  procedure TDSDVDGraph.SaveBookmark(BookMarkFile: string);
  const
      IID_IPersistStream   : TGUID = '{00000109-0000-0000-C000-000000000046}';
  var hr: HRESULT;
      Bookmark: IDvdState;
      pStorage: IStorage;
      pStream : IStream;
      PersistStream : IPersistStream;
  begin
    if assigned(DVDInfo2) then
    begin
      DVDInfo2.GetState(Bookmark);
      StgCreateDocfile(StringToOleStr(BookMarkFile), STGM_CREATE or STGM_WRITE or STGM_SHARE_EXCLUSIVE, 0, pStorage);
      pStorage.CreateStream('BookMark', STGM_CREATE or STGM_WRITE or STGM_SHARE_EXCLUSIVE, 0, 0, pStream);
      hr := Bookmark.QueryInterface(IID_IPersistStream,PersistStream);
      if (SUCCEEDED(hr)) then
        begin
          OleSaveToStream(PersistStream,pStream);
          PersistStream := nil;
       end
       else
       begin
         PersistStream := nil;
         exit;
       end;
    end;
  end;

  procedure TDSDVDGraph.RestoreBookmark(BookMarkFile: string);
  var pStorage : IStorage;
      pStream  : IStream;
      pBookmark: IDvdState;
      hr       : HRESULT;
      obj      : IDVDCmd;
  begin
    if assigned(DVDControl2) then
    begin
      StgOpenStorage(StringToOleStr(BookMarkFile), nil, STGM_READ or STGM_SHARE_EXCLUSIVE, nil , 0, pStorage);
      pStorage.OpenStream('BookMark', nil, STGM_READ or STGM_SHARE_EXCLUSIVE, 0, pStream);
      OleLoadFromStream(pStream, IID_IDvdState, pBookmark);
      hr := DVDControl2.SetState(pBookmark, DVD_CMD_FLAG_None, obj);
      if not (failed(hr)) then
        begin
          obj.WaitForEnd;
          obj := nil;
        end;
    end;
  end;

//******************************************************************************
//
// TDSCaptureGraph implementation
//
//******************************************************************************

  procedure TDSCaptureGraph.InitServerData;
  begin
    inherited InitServerData;
  end;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -