Skip to content

Video Capture device driver settings form #19

Description

@GoogleCodeExporter
Hi.

I want to put a TButton to open the device settings of a video capture device 
(webcam,...) to change sensibility, exposition, saturation,... parameters. This 
settings form ins't the same ... It's depending of the driver and the device in 
use.

Here I put a screen-capture of what i'm looking for...

How I can to that?

Thanks for the help!

Regards.

Original issue reported on code.google.com by axeldeli...@gmail.com on 20 Jan 2014 at 8:01

Attachments:

Activity

  1. GoogleCodeExporter commented on Dec 25, 2015

    @GoogleCodeExporter
    Author
    I am too. I want to open "Capture Properties" of a video capture (webcam).
    
    Thanks before ...
    

    Original comment by tbadmia...@gmail.com on 5 Jul 2014 at 4:23

    Attachments:

  2. GoogleCodeExporter commented on Dec 25, 2015

    @GoogleCodeExporter
    Author
    I did.
    
    First, I changed the TFilter on the DSPack.pas, moving the private function 
    "function GetFilter: IBaseFilter;" to the public area, like this:
    
    // *****************************************************************************
    //  TFilter
    // *****************************************************************************
    
      { This component is an easy way to add a specific filter to a filter graph.
        You can retrieve an interface using the as operator whith D6 :)}
      TFilter = class(TComponent, IFilter)
      private
        FFilterGraph : TFilterGraph;
        FBaseFilter: TBaseFilter;
        FFilter: IBaseFilter;
        //function GetFilter: IBaseFilter;
        function GetName: string;
        procedure NotifyFilter(operation: TFilterOperation; Param: integer = 0);
        procedure SetFilterGraph(AFilterGraph: TFilterGraph);
      protected
        {@exclude}
        procedure Notification(AComponent: TComponent; Operation: TOperation); override;
      public
        { Constructor method. }
        constructor Create(AOwner: TComponent); override;
        { Destructor method. }
        destructor Destroy; override;
        { Retrieve a filter interface. }
        function QueryInterface(const IID: TGUID; out Obj): HResult; override; stdcall;
        function GetFilter: IBaseFilter;
      published
        { This is the Filter Editor .}
        property BaseFilter: TBaseFilter read FBaseFilter write FBaseFilter;
        { The filter must be connected to a TFilterGraph component.}
        property FilterGraph: TFilterGraph read FFilterGraph write SetFilterGraph;
      end;
    
    {
    
    Now, the example:
    
    Add the functions below to a Unit.pas that can access your VideoFilter 
    Component and the VideoWindow Component. Replace my "VideoFilter" and 
    "VideoWindow" by your components names, and call the first function 
    "ShowPropertyDialog" from a button or something else. Done, the code will 
    display the Property Dialog of your device :-)
    
    Off course, you can try to pass the VideoWindow and VideoFilter trought the 
    functions or create a new VideoWindow component with this feature. But now, you 
    have the idea how to do it.
    
    The code below works fine on my DELPHI 5! So, certainly it will works on all 
    the new versions ^^
    
    }
    
    function ShowPropertyDialog(): HResult;
    var
      FilterInfo: FILTER_INFO;
    begin
      Result := VideoFilter.GetFilter.QueryFilterInfo(FilterInfo);
      if not(Failed(Result)) then
        Result := ShowPropertyDialogEx(VideoFilter.GetFilter, FilterInfo.achName);
    end;
    
    function ShowPropertyDialogEx(const IBF: IUnknown;
      FilterName: PWideChar): HResult;
    var
      pProp: ISpecifyPropertyPages;
      c: tagCAUUID;
    begin
      pProp  := nil;
      Result := IBF.QueryInterface(ISpecifyPropertyPages, pProp);
      if Result = S_OK then
      begin
        Result := pProp.GetPages(c);
        if (Result = S_OK) and (c.cElems > 0) then
        begin
          Result := OleCreatePropertyFrame(VideoWindow.Handle, 0, 0,
            FilterName, 1, @IBF, c.cElems, c.pElems, 0, 0, nil);
          CoTaskMemFree(c.pElems);
        end;
      end;
    end; 
    

    Original comment by sylvio.r...@gmail.com on 14 Oct 2014 at 1:01

  3. GoogleCodeExporter commented on Dec 25, 2015

    @GoogleCodeExporter
    Author
    You can use function from DXSUtil
    
    e.g. 
    ShowFilterPropertyPage(Self.Handle, VideoFilter as IBaseFilter);
    

    Original comment by kobylans...@gmail.com on 12 Nov 2014 at 3:48

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions