DirectShow filter change property (DSPACK) - delphi

I am relatively new to directshow programming, i use a directshow video compression device, using GraphEdit can change the compression settings simply by right clicking on the filter and selecting properties, there a way to do this programmatically?
I tried the VideoMediaType, but i get a single value !? how do I set all the configuration pages?
Configuration http://i.imgur.com/Srpeuyp.png
Pins Interfaces http://i.imgur.com/tlFiJ4j.png
I am programming in Delphi 7 using DSPACK.

These properties are implemented and available though certain device-specific COM interfaces. You need to contact Sigma Designs to request documentation or SDK to access them programmatically. What you are seeing on configuration screenshot is their (Sigma Designs) property page which is internally using the mentioned interfaces to set up the device. To do the same/similar from your code you need interface definitions.

Related

Get current used videocard

I am programming a simulation in xna/monogame; but i want to go sure and wanna warn (myself ..( = ) if I use inadventertly my on-board video card..
Do you know any way to solve my problem?
Does the graphicsdevice offer a property to determine current used video card?
Thank you in advance!
During XNA start-up you can create your own custom GraphicsDeviceManager that can rank or choose devices based on criteria you provide.
MSDN:
GraphicsDeviceManager Class
Handles the configuration and management of the graphics device. Custom behavior of the GraphicsDeviceManager can be achieved by deriving a class from GraphicsDeviceManager. For example, to allow only widescreen devices in full-screen mode the RankDevices method could be overridden to drop non-widescreen devices. - Tell me more...
During the call to your RankDevices() method, you can inspect the list of GraphicsDeviceInformation to determine information about the adapter and device.
RankDevices() orders the provided list so that devices earlier in the list are preferred over devices later in the list. This method can remove devices from the list if they do not satisfy some custom criteria. Tell me more
Each GraphicsDeviceInformation object has an Adapter property of type GraphicsAdapter. There you will find such useful properties as:
Description
DeviceId
DeviceName
VendorId
...and many more.
More
The tutorial Restricting Aspect Ratio on a Graphics Device will walk you through the process of controlling what device you get. Once you understand that, altering it to filter based on device types should be easy.

How to make custom GUI controls visible to screen readers?

I'm trying to improve the accessibility of my Delphi made application to vision impaired users. My application uses many custom GUI components. They mostly descend from TWinControl or TGraphicControl.
My custom components seem to be invisible when testing with NVDA. For example NVDA will respond by reading the name of the control (or other details) when mousing over regular Delphi VCL controls such as buttons or forms. By contrast NVDA doesn't respond at all when mousing over any of my custom controls.
How do I make my custom components visible to NVDA and other screen reading software?
Found the answer on the NVDA Design Overview page. NVDA uses a number of accessibility APIs to gather information about GUI controls. NVDA supports:
Microsoft Active Accessibility (MSAA) (also known as IAccessible),
​IAccessible2,
Java Access Bridge
UI Automation
It looks like I'll need to implement one of the above APIs. Not sure what the pros and cons of each API are yet.
Creating Accessible UI components in Delphi provides details on implementing IAccessible. (Thanks for the link David)

How can I directly embed a DirectShow Push Source filter in an EXE?

I have a Delphi 6 program that receives audio from an external program via a socket. Now I want to feed that audio to a DirectShow filter graph I create that routes that audio to different output filters on the PC. I am using DSPACK for my DirectShow filter graph work. I'll be using one of the DSPACK examples that shows how to create a Push Source Filter as my starting point.
Is it possible to embed a DirectShow filter directly into my main EXE, or do I have to create an external DLL or AX file and run regsvr32 on it? I'd like to avoid creating an external module otherwise I'll have to create a parameter and data passing bridge between it and my main program and I'd prefer to eliminate that work. I'm wondering if there is a way to simply include the push source filter code in my main program and finesse Windows into working with it as a DirectShow filter if that is at all possible.
Filters don't have to be put into libraries (DLL), and they don't have to be even registered COM objects, no. As mentioned, the only reason to make this, is to make the filter available to applications through CoCreateInstance and/or through enumeration of DirectShow categories.
Being put into your application directly, it has to implement IBaseFilter and you will IFilterGraph::AddFilter it into the graph. An advantage of having filter privately, is that you don't need to implement communication between application and filter through COM interface, and you can use native/direct pointers.
See also Geraint's post Using Filters Without Registration.
I think the only reason to put your filters in a DLL is to be able to use them in multiple programs. On the other hand, if you were to put your filters into a DLL you could always have them implement an inferface that you QI for when you need it.
In my work, I had to play movies that were stored within a proprietary archive file. I made a source that had an output pin that described its media format properly, and the rest worked automatically, if I wanted it to. I also needed to use a proprietary renderer for the video. All this stuff was built into the .exe which was written in C++

How best to create a HMI display panel (user-customised interface) in Delphi

I need to improve a screen in our Application that presents an HMI (Human Machine Interface) display embedded in our Delphi code. This screen provides our customer with the ability to perform a range of actions (run test, product report etc) and to expose and view key named data values. This customisation is required because our Application controls machinery that might be operated by a range of skill levels from simple operator (may not speak English and must have very limited control) through to a power user who wishes to 'see everything' and have max control.
Some years back I created a solution based on an embedded HTML viewer (Turbopower's as it was then) and TPageProducer to dynamically tweak an HTML template (that the user could customise) and which would display a simple set of controls and data tables. This works fine but is slow to edit (you have to tweak the template and look-see the effect) and I'm sure there are better ways now.
What I need is similiar to a Delphi form that can be customised at runtime. I need: buttons, labels and edits. Editable shapes and arrows are desireable as are fixed images over which controls and text can be laid. The layout should be saveable (like a DFM file) and text labels should be of two types - fixed text and those which update to display key values on an update notification (like a DB control would). The final layout should zoom its scale to fit a resizable layout.
This question is about the best tool for the job and I'm not coming into this totally cold, I've experimented with Greatis Form Designer and obtained a working solution but before I commit, I would apprecaite comments about whether a report tool (with built-in report editor) would be possible / useable / better since a print dump feature would also be useful. (Fast Reports? Quick Report etc?). Note though that this is a display requirement primarily. Comments re newer embedded HTML solutions would also be welcome as would anything to ensure max future-proofing of the layout format.
Any solution should be useable in Dephi 7 (for now!) and does not need to be unicode as long as there is a migration path to this for newer Delphi's.
Any other comments or observations would be very welcome. Thanks.
Have you looked first at the free JVCL stuff? There's a JvInspector (RTTI component property inspector, just like Delphi property inspector), and a form designer, and so on. You could roll your own solution based on these, and even use JvInterpreter for some scripting capability.
Secondly, if you can support ANY control that you have, in your designer, and you need some HMI specific stuff, check out IOCOMP: http://www.iocomp.com/
TMS Scripter Studio Pro provides a Delphi-like IDE and form designer with scripting, but it maybe overkill for your requirements.

Find out which display belongs to which adapter?

I'm working on a SlimDX apps which works for multiple display. The apps will occupy the selected display, and it's selection is input via commandline, as int. I then use System.Windows.Forms.Screen.AllScreens[selection] to find out about the bound, and display my apps "fullscreen" on that display.
Now, to optimize performance, I need to select which gpu adapter to initialize the Direct3D's device. How do I find out which gpu adapter is powering the selected display?
Since Each gpu adapter might have one to two display connected, I can't use the display number.
I'm utilizing Direct3D10. I don't mind solution in Direct3D9.
Worse case would be to let user select display and adapter via commandline, but I prefer a fool prove method.
Thanks
Both D3D10 and D3D11 use DXGI for managing details like this. The Factory interface you create lets you get a list of adapters installed on the system. Each adapter can have one or more outputs, which you can enumerate from the Adapter interface.
This will get you a list of Output interfaces, which have a Description property that contains, among other things, a Rectangle of the output's bounds as well as an IntPtr handle to the monitor on which it is running.
I don't think the Winforms Screen class exposes the underlying native pointer, which is why we provide the SlimDX.Windows.DisplayMonitor class to serve as a replacement for the Screen class. You can use this to determine the particular details of the display and choose the right adapter for your needs.

Resources