Welcome to Doom9's Forum, THE in-place to be for everyone interested in DVD conversion.

Before you start posting please read the forum rules. By posting to this forum you agree to abide by the rules.

 

Go Back   Doom9's Forum > Announcements and Chat > General Discussion

Reply
 
Thread Tools Search this Thread Display Modes
Old 19th January 2008, 16:32   #1  |  Link
RadScorpion
Registered User
 
Join Date: Jul 2003
Location: Bratislava, Slovakia
Posts: 147
Opensource GraphEdit project

Hello people. If you work with DirectShow you might be interested in this new project.

clsid gave me an idea of a new graph information project and because I've been missing lot of cool features in graphedit myself I've decided to start a new project - GraphStudio.

Project is free with open source. You can find screenshots, binaries and source on my blog here :
http://blog.monogram.sk/janos/tools/...m-graphstudio/

As of this moment, the application si really simple, but any ideas/hints/reports are more than welcome.

Igor
RadScorpion is offline   Reply With Quote
Old 19th January 2008, 16:45   #2  |  Link
Sharktooth
Mr. Sandman
 
Sharktooth's Avatar
 
Join Date: Sep 2003
Location: Haddonfield, IL
Posts: 11,768
oh! an OSS alternative to graphedit!
nice, im going to try it asap
thanx
Sharktooth is offline   Reply With Quote
Old 20th January 2008, 16:53   #3  |  Link
RadScorpion
Registered User
 
Join Date: Jul 2003
Location: Bratislava, Slovakia
Posts: 147
Updated version is up. You can follow the original link from the first post to download the latest version.

I've added some new features like:
  • added seekbar
  • added play/stop/pause controls
  • added Graph Events window with copy-to-clipboard feature
  • added logging of all known DirectShow events
  • EC_USERABORT now stops the graph

Igor
RadScorpion is offline   Reply With Quote
Old 20th January 2008, 17:05   #4  |  Link
Kurtnoise
Swallowed in the Sea
 
Kurtnoise's Avatar
 
Join Date: Oct 2002
Location: Aix-en-Provence, France
Posts: 5,182
Great...

Some ideas for the next releases:
  • Drag & Drop
  • Loading Filters interface with the right click.
Kurtnoise is offline   Reply With Quote
Old 20th January 2008, 17:06   #5  |  Link
RadScorpion
Registered User
 
Join Date: Jul 2003
Location: Bratislava, Slovakia
Posts: 147
Yepp.. as well as enumerating all compatible filters for pin via rightclick
RadScorpion is offline   Reply With Quote
Old 20th January 2008, 17:34   #6  |  Link
clsid
Registered User
 
Join Date: Feb 2005
Posts: 4,667
You already know my most desired feature:
Text based representation of the graph.

What about a tabbed view with the following tabs:
- Visual representation of the graph
- Text representation of the graph (for each filter: name, clsid, filename, merit) (possibly also some pin information)
- Graph events
Options in view menu for enabling/disabling which tabs get shown.

In case of multiple active graphs, you could add a number to each tab title to distinguish between graphs. For example: "Graph (1)", "Graph Details (1)", "Graph Events (1), "Graph (2)", etc.


I think it would be useful if the "Open" button on the toolbar can be used to open files of all types. Let the file extension determine the action to take: .grf -> open graph, .ifo -> render DVD, everything else -> render media file.

Last edited by clsid; 20th January 2008 at 17:39.
clsid is offline   Reply With Quote
Old 20th January 2008, 20:12   #7  |  Link
RadScorpion
Registered User
 
Join Date: Jul 2003
Location: Bratislava, Slovakia
Posts: 147
I was thinking of the format how the text report should look like.
What do you think of this ?

Code:
-------------------------------------------------------------------
 Filters
-------------------------------------------------------------------
1. D:\Friends.avi {CLSID_AsyncReader}
2. AVI Splitter {CLSID_AviSplitter}
3. ffdshow MPEG-4 Video Decoder {04FE9017-F873-410E-817E-AB91661A4EF7}
4. Video Renderer {CLSID_VideoMixingRenderer}
5. ffdshow Audio Decoder {0F40E1E5-4F79-f988-B1A9-CC98794E6B55}
6. Default DirectSound Device {CLSID_AudioRenderer}

-------------------------------------------------------------------
 Filters Details
-------------------------------------------------------------------
TODO:

-------------------------------------------------------------------
 Connections
-------------------------------------------------------------------
[D:\Friends.avi]
    |
    +-- (Output) -> (input pin) 
        [AVI Splitter]
            |
            +-- (Stream 00) -> (In)
            |   [ffdshow MPEG-4 Video Decoder]
            |       |
            |       +-- (Out) -> (VMR Input0)
            |           [Video Renderer]
            |
            +-- (Stream 01) -> (In)
                [ffdshow Audio Decoder]
                    |
                    +-- (Out) -> (Audio input pin(rendered))
                        [Default DirectSound Device]

-------------------------------------------------------------------
 Connection Details
-------------------------------------------------------------------
1. [D:\Friends.avi]/(Output) -> [AVI Splitter]/(input pin)
    Major: MEDIATYPE_Stream
    Subtype: MEDIASUBTYPE_Avi
    Format: GUID_NULL

2. [AVI Splitter]/(Stream 00) -> [ffdshow MPEG-4 Video Decoder]/(In)
    Major: MEDIATYPE_Video
    Subtype: {44495658-0000-0010-8000-00AA00389B71} - FourCC(XVID)
    Format: FORMAT_VideoInfo
    VIDEOINFOHEADER:
        576x532 ... TODO:

3. [ffdshow MPEG-4 Video Decoder]/(Out) -> [Video Renderer]/(VMR Input0)
    Major: MEDIATYPE_Video
    Subtype: MEDIASUBTYPE_YV12
    Format: FORMAT_VideoInfo2
    VIDEOINFOHEADER2:
        Size: 576x432
        Aspect Ratio: 4x3
        Interlace format: Frames
        rcSrc: (0,0,576,432)
        rcDst: (0,0,576,432)
RadScorpion is offline   Reply With Quote
Old 20th January 2008, 22:19   #8  |  Link
clsid
Registered User
 
Join Date: Feb 2005
Posts: 4,667
First of all I think it would be useful to be able to configure the level of detail. For most users the filters list and filter detail information will be sufficient. Connection info is more for expert users (like here on Doom9).

I would suggest to only use the filter's names under the "Filters" header. The CLSID should go under "Filter Details". I think that will improve readability.

Perhaps the "Connections" part can be skipped? You could just list all 5 connections under "Connection Details".

Maybe hide the pin name when there is only 1 input (or output) pin on a filter. I think that will improve readability.

Some extra spaces to line up text:
Code:
    Major:   MEDIATYPE_Stream
    Subtype: MEDIASUBTYPE_Avi
    Format:  GUID_NULL

Last edited by clsid; 20th January 2008 at 22:23.
clsid is offline   Reply With Quote
Old 21st January 2008, 07:13   #9  |  Link
CruNcher
Registered User
 
CruNcher's Avatar
 
Join Date: Apr 2002
Location: Germany
Posts: 4,950
Nice Rad i had expected to find this in the Development Section of the Board tough hehe

Feature Request:
Inteligent Connection Spy for the Render Media File mode (like Matroskadiag does, so you know to wich filters it connects and where it might fail, great for Debuging)
Also a little Proccess Explorer functunality would be nice (so you right click on the node and can see from wich dll,ax it is executed this way you could identifiy especialy file Parsers very easy)

Btw: I see you stoped? Radlight and with it the Delphi times,congrats to your Master
__________________
all my compares are riddles so please try to decipher them yourselves :)

It is about Time

Join the Revolution NOW before it is to Late !

http://forum.doom9.org/showthread.php?t=168004

Last edited by CruNcher; 21st January 2008 at 07:26.
CruNcher is offline   Reply With Quote
Old 21st January 2008, 09:14   #10  |  Link
RadScorpion
Registered User
 
Join Date: Jul 2003
Location: Bratislava, Slovakia
Posts: 147
I'm always unsure if I chose the right board section.

Yes. The IC-spy feature can be easily done with the IAMGraphBuilderCallback interface. This way it could be possible to abort a never-ending loop when the graph builder goes mad.

As for the RadLight thing. After we had some problems with Martin there have been some things that kept us from working on RL. But since these problems have been settled recently we can freely write stuff again and perhaps prepare some basics for new RL. We've created a new company (the MONOGRAM Multimedia) together with another slovak IT company (MONOGRAM Technologies). As the result we at MM work together with MT on larger projects and can write free/opensource stuff labeled with the magic M word partly in working hours as a kind of promotion... So everyone wins.
RadScorpion is offline   Reply With Quote
Old 21st January 2008, 20:48   #11  |  Link
RadScorpion
Registered User
 
Join Date: Jul 2003
Location: Bratislava, Slovakia
Posts: 147
Okay. I've uploaded a new 0.1.2.0 build.
Added new window for text reports with report type combo box. Currently there are just dummies and the highest detail level is used.
I've also added parser for WAVEFORMATEX structure.
What do you think?
RadScorpion is offline   Reply With Quote
Old 21st January 2008, 23:36   #12  |  Link
clsid
Registered User
 
Join Date: Feb 2005
Posts: 4,667
Filters are listed in reverse order in the log. Or is that intentional?

A small cosmetic request: could you capitalize the hex numbers of the merits in the "Insert Filters" dialog? That way they will line up nicely.
clsid is offline   Reply With Quote
Old 22nd January 2008, 22:03   #13  |  Link
RadScorpion
Registered User
 
Join Date: Jul 2003
Location: Bratislava, Slovakia
Posts: 147
Yet another updated version
[0.1.3.0 - Alpha 22/Jan/2008]
  • added Drag&Drop support for opening files
  • filters dialog now displays merits formatted as uppercase
  • inserted filters are checked for IFileSourceFilter
  • filters exposing IFileSourceFilter are named after the file they deliver
  • added IFileSourceFilter dialog that keeps list of recently used files/urls
  • added “Insert File Source (Async.)” shortcut into the Graph menu
  • added parser for VIDEOINFOHEADER, VIDEOINFOHEADER2, BITMAPINFOHEADER and MPEG2VIDEOINFO
  • added 5 levels of details for text report

cu
Igor
RadScorpion is offline   Reply With Quote
Old 24th January 2008, 16:07   #14  |  Link
clsid
Registered User
 
Join Date: Feb 2005
Posts: 4,667
This file can make GraphStudio crash. To reproduce: drag&drop the file into GraphStudio, then drag&drop it in a second time. Crash. Tried the same with several other files, but it only happens with this specific file.

An inconsistency: Insert a source filter. No other filters. The visual graph will display the name of the opened file (= correct behavior). The text log however, will show the name of the filter instead of the filename.

Another inconsistency (perhaps intentional): Drag&drop will clear the window and create a new graph. "File -> Render media file" does not clear the window. So that can result in multiple active graphs.

Text Information currently behaves like a log. I personally would prefer if it only reflected the active graphs in GraphStudio. I would suggest the following:
- Remove the refresh and clear buttons
- Automatically clear and refresh the contents of the text information window when (1) a change to the graph(s) is made, or (2) a display setting (such as report detail) is changed.
- Add a save button that opens a "Save File" dialog where a user can save the info as a .txt file.
- Currently the text information is a combination of all displayed graphs. That is a bit confusing. It would be better to write the information as separated pieces of text. So first the info for graph 1, then the info for graph 2, etc. Or maybe add a dropdown selection box where the user can select for which graph to display information. The name of the first filter in each graph could be used a titles in the dropdown.

Could you disable (make them "greyed out") the buttons whos functionality has not been implemented yet.

The default renderer that is used is VMR(7?). Is it possible to an option to use a different renderer? Maybe by right-clicking on the video renderer in the graph and having an option like "Change video renderer" that opens a dialog that lists all available renderers.

Another useful feature could be a frame grab function to take screenshots. Or perhaps even something similar to the "Save Thumbnails" function of MPC.

Last edited by clsid; 24th January 2008 at 16:20.
clsid is offline   Reply With Quote
Old 24th January 2008, 23:02   #15  |  Link
RadScorpion
Registered User
 
Join Date: Jul 2003
Location: Bratislava, Slovakia
Posts: 147
Good work with testing thank you.

I did not have time yet to check the file but I'll try as soon as possible.

Yes. You are right with the filter names in text report and graph. At the moment I just wanted to test how the text reports would look like and I would like to rewrite the graph analysis part so the output would not only be limited to static text reports. My idea was a tree structure with abstract classes where nodes would represent structures and leaves would represent "key=value" pairs with type info so there could be different actions/views possible. E.g. GUID type could be copied to memory as {XXXXXXXX-XXXX-XXXX....} or also as a piece of C++ code that would declare the given GUID. For FOURCC codes the hexadecimal display could be used or four character strings... With this tree structure simple class could export information into HTML or XML as well.

As for the Drag&Drop behavior. I have observed how graphedit behaves on this one. The "open file" item stops any graph that may be active, releases everything and creates a new graph. Then the specified file is checked for extension and a new graph is constructed either from GRF file or using IGraphBuilder::RenderFile.

"Render media file" item can only be used when the graph is stopped and it will add necessary filters to existing graph to render specified file.

In both cases only one existing graph may remain. When a file is dropped into the GraphStudio, it is being processed by the "open file" method.

Hmm.. the report thing is a bit more complicated. It is possible to detect changes in graph by reacting on the EC_GRAPH_CHANGED event. But this only covers addition and removal of filters. E.g. dynamic format changes can not be traced this way... and you can see that e.g. the format between decoder and video renderer is different when you first build the graph and after you start it.

Perhaps there could be more views. One that would only reflect the filters and connections. And another one that would also display detailed information about formats.

@disable buttons: yes
@different renderer: yes
@screenshot: definitely

I just don't know where to start with so many features

Thanks again for testing.

Igor
RadScorpion is offline   Reply With Quote
Old 25th January 2008, 04:29   #16  |  Link
squid_80
Registered User
 
Join Date: Dec 2004
Location: Melbourne, AU
Posts: 1,963
Pretty please could you look at implementing the Connect to Remote Graph option? I'm so sick of restarting apps because they crash after I use graphedt to check that everything's being connected properly. Or graphedt just randomly fails, and has to be repeatedly retried until it works.
squid_80 is offline   Reply With Quote
Old 25th January 2008, 12:35   #17  |  Link
clsid
Registered User
 
Join Date: Feb 2005
Posts: 4,667
Quote:
Hmm.. the report thing is a bit more complicated. It is possible to detect changes in graph by reacting on the EC_GRAPH_CHANGED event. But this only covers addition and removal of filters. E.g. dynamic format changes can not be traced this way... and you can see that e.g. the format between decoder and video renderer is different when you first build the graph and after you start it.
I see. In that case you could let it update automatically when the graph is changed, and keep the refresh button so users can manually update the info to see the effects of dynamic changes.

Quote:
I just don't know where to start with so many features
Start with the last few missing features in GraphStudio that are present in GraphEdit. Like viewing property pages and the remote graph. Then everyone can dump GraphEdit and switch to your tool.
After that you could add some filter management functionality. Unregister filters and changing merits. That is used very often.
Then implement the tree structure for storing the filter and connection objects.
After that add "Filter Details" section to the Text Information.
clsid is offline   Reply With Quote
Old 26th January 2008, 22:39   #18  |  Link
RadScorpion
Registered User
 
Join Date: Jul 2003
Location: Bratislava, Slovakia
Posts: 147
I've uploaded a new build - 0.1.4.0.

Code:
[0.1.4.0 - Alpha   26/Jan/2008]
+ GraphStudio can now display property pages
+ added rightclick menu on filters/pins
+ doubleclicking a filter will show its property page
+ the "Property page" button in "Filters" window now works
+ added shourcut - doubleclicking a filter in the "Filters" window will add it to the graph
+ added "Render pin" feature
+ not-implemented buttons are disabled now
+ added vista-style tool bars
As for the crash thing I think I may have a clue. It appears that the crash happens when releasing a filter graph with certain filters. But I think this may have something to do with the filters themselves. I have tested it with one of my filters that contained a stupid bug. When I released and removed all filters manually and then released the graph the crash did not happen.
RadScorpion is offline   Reply With Quote
Old 26th January 2008, 22:54   #19  |  Link
clsid
Registered User
 
Join Date: Feb 2005
Posts: 4,667
Just tested the new version.

"Render pin" feature is cool
Could you hide the option from the menu (instead of disabling it) when a pin is already rendered?

The properties option will open an empty window (with ok, close, apply buttons) for filters that have no property page.

Another addition for the ToDo list: volume slider and/or mute button
clsid is offline   Reply With Quote
Old 26th January 2008, 23:02   #20  |  Link
RadScorpion
Registered User
 
Join Date: Jul 2003
Location: Bratislava, Slovakia
Posts: 147
Quote:
Could you hide the option from the menu (instead of disabling it) when a pin is already rendered?
Okay. A cool feature could be to display a list of compatible filters in the right-click menu of a pin so you could directly select the next filter in the chain without the need to dig though the complete filter list.

Quote:
The properties option will open an empty window (with ok, close, apply buttons) for filters that have no property page.
Yes.. for the moment. There will always be at least one page for filter/pin displaying the information such as filter name, file, version, clsid, mediatype, ..etc. I'd also like to implement property pages for the most common interfaces such as IFileSourceFilter.

Quote:
Another addition for the ToDo list: volume slider and/or mute button
or a vertical sliderbar that would be located directly in the box of any filter exposing IBasicAudio interface. It could be alpha blended and fade in/out as you approach the fitler with your mouse cursor . This way each of audio renderers could be configured separately in case more audio streams are present in the graph.
RadScorpion is offline   Reply With Quote
Reply

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT +1. The time now is 12:16.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2017, vBulletin Solutions Inc.