Jump to content

TransEdit v4.2.1.1 and ATSC

Recommended Posts



I have problem with TransEdit v. and ATSC 8VSB WinTV-HVR 950Q tuner.

I don't see "Bandwidth" option anymore and I have error "Invalid or incomplete input".


For example, in TransEdit v3.9.8.0 I can choose "bandwidth" and no problem to add channel.


Please check attached screenshots for both versions.


I'm using Windows 10 x64.


Please suggest.




Link to post

Confirmed. This is a bug in TransEdit The ATSC bandwidth is always 6 MHz, so there is no need to enter it, but the internal processing in TransEdit is wrong.


Where do you receive ATSC? AFAIK it is only used in North America and South Korea.

Link to post

In North America


Update: I did ATSC.ini manually and got tuner LOCK with TransEdit v4.2.1.1




2=New ATSC

1=473000,6,|Channel 14


Edited by daniel2
Link to post

I found more critical problem: TransEdit can't control tuner at all.

If I plug tuner and use only TransEdit, tuner doesn't lock.

Then I use my own program and make tune to lock 473 MHz channel (I use GraphEdit).

After that TransEdit also can lock 473 MHz. But if I ask to lock 600 MHz channel,

which doesn't exist at all, TransEdit still shows old me 473 MHz channel.

I'm sure that TransEdit doesn't send any TuneRequest to the tuner.

I checked amd 3.9.8, both the same.

Link to post
1 hour ago, daniel2 said:

I'm sure that TransEdit doesn't send any TuneRequest to the tuner.


It does. I've checked the program flow under debugger control by setting the tuner type of my Hauppauge DVB-T2 device to ATSC. However, it looks like the driver of your WinTV-HVR 950Q tuner ignores the tune request for some reason. Unfortunately other feedback that we got in the past about the WinTV-HVR 950Q tuner is not very promising:





However, there are some things that you can try:

  1. Any change with Settings -> Hardware -> Use internal Network Provider filter off? It  lets TransEdit use the MS Network Provider filter instead of its own built-in component.
  2. Any change with Settings -> Hardware -> Use standard interface on? It lets TransEdit use the IATSCLocator interface instead of talking more directly to the driver via IBDA_FrequencyFilter (so that's as close as you can get to a BDA graph in GraphEdit).
  3. Settings -> Hardware -> Stop stream while tuning may also be worth a try (= perform tuning while the BDA graph is in stopped state instead of running state).

Unfortunately we can't test ATSC here in Germany at all, so it all depends on user feedback. However, the latest report from a Korean user with a Hauppauge WinTV-dualHD ATSC device suggests that the DVBViewer BDA implementation for ATSC basically works.


Link to post

Use internal Network Provider filter On/Off - both are not working.

Stop stream while tuning  On/Off - both are not working.

Most interesting is Use standard interface On

I got error:




Link to post

I want to share how I tune 950q in my own program and it works:




locator = DS.BDA.ATSCLocator()
assert (DS.BDA.IATSCLocator.put_CarrierFrequency(locator, 471250) == 0)                # central carrier frequency is 473 MHz
assert (DS.BDA.IATSCChannelTuneRequest.put_Locator(tuneRequest, locator) == 0)



Link to post

12:37:06.706 Failed to add and connect the tuner filter


WinTV HVR-950 BDA Tuner doesn't connect to the Microsoft ATSC Network Provider, so building the BDA filter graph fails and TransEdit doesn't get to the point where it can use the IATSCLocator interface.


I wonder if it is caused by the other tuner types that are exposed by the WinTV HVR-950 BDA Tuner (Analog and DVB-C). Same happens here if I set the tuner type of my Hauppauge DVB-T2 device to ATSC, because it doesn't really match.


Link to post

For 950Q I'm not using Microsoft ATSC Network Provider (old), but general Network Provider (new).



Edited by daniel2
append image
Link to post

Does the old Microsoft ATSC Network Provider connect to the tuner filter in GraphEdit?


Somehow the new Universal Network Provider doesn't work in TransEdit. ITuner.put_TuningSpace and ITuner.put_TuneRequest both fail with E_INVALID_ARG though it works pretty well with the old Network Provider. I'm just trying to find out why.


By default TransEdit doesn't use all this Locator, TuningSpace and TuneRequest stuff, but communicates directly with the tuner filter via the IBDA_XXX interfaces (particularly IBDA_FrequencyFilter in case of ATSC), that are internally used by the MS Network Provider filter. This works much faster and less error-prone with almost all BDA drivers except the WinTV-HVR 950Q tuner ;)


Link to post

No, old Microsoft ATSC Network Provider can't be connected to 950Q and gives error.


Please see my fully working graph for 950Q.

I also have my own C# program to build the same graph and that program also works good with 950Q.



Link to post

Maybe that help.


When you use general "Network Provider", you need to specify network type. I do following:


DS.BDA.IATSCTuningSpace.put__NetworkType(tuningSpace, CLSID_ATSCNetworkProvider)



full code:

    tuningSpace = DS.BDA.ATSCTuningSpace()
    DS.BDA.IATSCTuningSpace.put_UniqueName(tuningSpace, "ATSC TuningSpace")
    DS.BDA.IATSCTuningSpace.put_FriendlyName(tuningSpace, "ATSC TuningSpace")
    DS.BDA.IATSCTuningSpace.put__NetworkType(tuningSpace, CLSID_ATSCNetworkProvider)

    (hr, tuneRequest) = DS.BDA.IATSCTuningSpace.CreateTuneRequest(tuningSpace)


Link to post
6 minutes ago, daniel2 said:

DS.BDA.IATSCTuningSpace.put__NetworkType(tuningSpace, CLSID_ATSCNetworkProvider)


I know. That's exactly what TransEdit does if it uses the MS Network Provider.


TransEdit and DVBViewer don't use the MPEG2 Demultiplexer and the other BDA filters that are connected to its output pins at all. They are replaced by a simple dump filter that receives the TS output of the Capture/Receiver component for further processing. By default the MS Network Provider Filter is replaced by our own NP. It is more or less a dummy filter because there is nothing to do for it when the IBDA_XXX interfaces are used. You can have a look at it with "Connect to Remote Graph" in GraphEdit (provided the BDA graph can be built - rather use the Analyzer function for it, not scanning a single frequency).


Maybe the WinTV-HVR 950Q tuner only wants to ccoperate with the MS Universal NP.... obviously it connects to the internal TransEdit NP, but without responding to IBDA_FrequencyFilter.put_Frequency.


I have to do some other things now, but will come back to this topic...


Link to post

Yes, I agree. 950Q wants to cooperate only with Universal NP, and Universal Network Provider doesn't tune if there is no BDA MPEG-2 Transport Information Filter.

It's strange but it's true. You need TIF to make TuneRequest gives effect.


I hope you will prepare test version soon, I'm really interesting to get 950Q working with TransEdit.

Link to post






The Network Provider acts as the default tuner in a BDA filter graph, by exposing the ITuner interface. No signals or data actually pass through this filter. It works closely with the Transport Information Filter (TIF) and the MPEG-2 Demultiplexer to acquire transport streams and route the elementary stream to the appropriate downstream filters.





Link to post

I made some progress concerning the Universal NP,  but without getting to a solution.


DVBViewer and TransEdit can't work with a standard BDA graph as intended by MS. On the one hand it is too bloated, on the other hand too limited for what we want to do. So in order to make the MS NP work we tried to make our BDA dump filter a TIF replacement,  allowing to register it with IBDA_TIF_REGISTRATION.RegisterTIFEx. This is extremely difficult because the NP expects some special TIF interfaces including undocumented ones (read more about it here). Unfortunately MSDN doesn't support writing a TIF replacement at all.


Finally we managed to deceive the old tuner type-specific MS NPs by implementing some dummy interfaces in the BDA dump filter, so it is accepted as TIF and enables tuning. However, this doesn't work with the Universal NP. I guess it wants some more / other TIF interfaces, probably undocumented again. >_<


So what I've achieved up to now: After the graph has been built with the Universal NP (using my Hauppauge DVB-T2 device) the whole tuning space / tune request / locator stuff is executed without error. But actually no tuning takes place. I always get the stream from the last frequency that has been tuned successfully, as reported by you here. This is most likely caused by TIF registration failing with E_INVALIDARG.


Link to post

I checked TransEdit's graph with GraphEdit remote connect.


When I use TransEdit with following settings:



I have following graph:




It's very close to what I have in my program.




What I suggest to try:


Universal Network Provider -> BDA Tuner -> BDA Capture -> Infinite Pin Tree Filter ({F8388A40-D5BB-11D0-BE5A-0080C706568E}) -> and then you can connect your current BDA Sample Dumper and to second pin you can connect MPEG-2 Demultiplexer  with BDA MPEG2 Transport Information Filter and MPEG-2 Sections and Tables







Link to post

Do you just connect the filters or do you additionally configure the MPEG-2 Demultiplexer? Is IBDA_TIF_REGISTRATION.RegisterTIFEx performed automagically or do you have to call it explicitely?


Anyway, it's too much overhead for becoming a general solution in DVBViewer/TransEdit. Maybe it makes the WinTV-HVR 950Q work, but who knows what it will do with the other 400 devices in our hardware database...


I 'm still wondering why setting up the frequency with IBDA_FrequencyFilter doesn't work. In the end the Universal NP can't do much more than that. TransEdit does the following:

  • call IBDA_DeviceControl.StartChanges on all device filters (tuner, receiver/capture) that expose this interface.
  • call IBDA_AutoDemodulate.put_AutoDemodulate on all device filter control nodes that expose this interface (I found this as recommendation somewhere, dunno if it is really necessary for ATSC... DVBViewer doesn't do it)
  • call IBDA_FrequencyFilter.put_Frequency(Frequency - 1750)  and IBDA_FrequencyFilter.put_Bandwidth(6) on the first device filter control node that exposes this interface and where both calls succeed (maybe it should rather be called on all control nodes because it is a hybrid tuner?)
  • call IBDA_DeviceControl.CheckChanges and IBDA_DeviceControl.CommitChanges on all filters that expose this interface.

The control nodes are retrieved by querying the device filters for IBDA_Topology, calling IBDA_Topology.GetNodeTypes and IBDA_Topology.GetControlNode for each list entry.


Link to post

The following document explains why the old NP filters don't connect to the WinTV-HVR 950Q tuner:




see BDA Demodulator type section. The TransEdit_Test log shows that two demodulator nodes are published: KSNODE_BDA_8VSB_DEMODULATOR = {71985F4F-1CA1-11D3-9CC8-00C04F7971E0} and KSNODE_BDA_QAM_DEMODULATOR = {71985F4D-1CA1-11D3-9CC8-00C04F7971E0}.

Link to post

Yes, I just connect the filters and don't configure nothing.

I see that you do a lot of internal work to confiure the tuner. For me it's more simple, I only append filters and send one TuneRequest.


950Q can work in two modes ATSC and Cable QAM. I expect that if i set ATSC in TransEdit settings, you will tune 950Q as ATSC and not as cable QAM.

Link to post

Do you have the Signal Monitor tool from Hauppauge mentioned here?



I found it helpful to use a Happauge device since it comes with a program called Signal Monitor which displays whether the tuner is in ATSC or QAM mode.


Link to post

I checked my GraphEdit.

If I have TIF, then the Tuner changes carrier frequency correctly.

If I remove TIF, the Tuner works on last loaded frequency and doesn't change carrier frequency anymore.


TIF is 100% necessary when I work with Universal Network Provider.

Link to post
29 minutes ago, daniel2 said:

TransEdit correctly sets 8-VSB mode


TransEdit does nothing about it, except calling  IBDA_AutoDemodulate.put_AutoDemodulate (standard interface off only), and hoping that the driver will sort it out somehow. I guess 8-VSB mode is the default. Here is something from Hauppauge about this topic:




(see "Driver Extensions for QAM/ATSC Tuning" section).


Link to post

Let me revise what we have now:

(1) TransEdit had problem with ATSC Channel GUI editor, you fixed that.

(2) TransEdit shows error when we use "Standard Interface" with 950Q - it's ok, because ATSC Network Provider is too old and we should not use it at all.

(3) With Internal Network Provider we have problem that tuner doesn't react on carrier frequency changes, but other features work correct, I can see packets and analyze them with TransEdit. You said it's because 950Q speciality. It's ok for me, I don't want you to change your Internal Network Provider.

(4) When we disable "Internal Network Provider", GraphEdit uses "Universal Network Provider" and builds graph very close to what I have in my GraphEdit.

And I found that without TIF, my graph also doesn't tune carrier frequency. Looks like TIF is necessary for 950Q.

I ask you to add TIF to your graph when you have "Universal Network Provider" and let me check how it works.


Link to post
On 6/23/2018 at 1:20 PM, daniel2 said:

What I suggest to try:


Universal Network Provider -> BDA Tuner -> BDA Capture -> Infinite Pin Tree Filter ({F8388A40-D5BB-11D0-BE5A-0080C706568E}) -> and then you can connect your current BDA Sample Dumper and to second pin you can connect MPEG-2 Demultiplexer  with BDA MPEG2 Transport Information Filter and MPEG-2 Sections and Tables 


Doh! The MPEG2 Demux creates 30 output pins here. Looks like a hedgehog... or a resource hog. I'm not really fond of hogs. However, it may be useful for experimental purpose if the code can easily be plugged in and out. That needs some restructuring of the graph building code.


2 hours ago, daniel2 said:

(3) With Internal Network Provider we have problem that tuner doesn't react on carrier frequency changes


That's what I would like to fix. Maybe we can get some information from Hauppauge...


Link to post

I'm ready to help you to debug your version with Internal Network Provider, but I'm sure that Universal Network Provider should work, because I use it.

Maybe 950Q driver is incompatible with your Internal Netowrk Provider. In truth, it's not so important for me as to work with Universal Network Provider.

Link to post
3 hours ago, daniel2 said:

Maybe 950Q driver is incompatible with your Internal Netowrk Provider.


Basically the NP does two things:

  1. Configuring device filters when they get connected and call IBDA_NetworkProvider.RegisterDeviceFilter, particularly by querying the filter for the IBDA_Topology interface and using methods like CreatePin and CreateTopology. This is also performed by the internal TransEdit NP.
  2. Providing an abstraction layer above the device filter properties (all that tuning space, locator etc. stuff) by translating tune requests to IBDA_XXX calls. This can be done as well without the NP by using the IBDA_XXX or IKSPropertySet interfaces of filters directly (which is inevitable if device filters provide properties that are not used by the NP or not covered by the BDA standard - see Hauppauge driver extensions link above).

So in theory calling the same BDA_XXX methods with the same parameters as the NP does in 2 should yield the same tuning result. I think we can use the method proposed by you for logging which IBDA_FrequencyFilter and IBDA_DigitalDemodulator values are set after the tune request, plus logging which IBDA_NetworkProvider methods are called. Maybe that reveals something...


Link to post
12 hours ago, Griga said:

logging which IBDA_FrequencyFilter and IBDA_DigitalDemodulator values are set after the tune request


It seems that device filters tend to implement the setters without getters >_<


Is there any point in your code where the 8VSB modulation comes in, e.g. in the default locator of your ATSC tuning space? I'm asking this because a device that also supports QAM, but without automatic modulation detection may require to set up the modulation for tuning. TransEdit doesn't do it.


As consequence TransEdit would have to provide a modulation column for ATSC in the transponder list editor.


Link to post



HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Multimedia\TV\Tuning Spaces\ATSC\Default Locator


contains ModulationType = 7 = BDA_MOD_128QAM. Same value in the ATSC Cable default locator. 



Link to post

No, I don't specify 8VSB in my code. I only make


tuningSpace = DS.BDA.ATSCTuningSpace()

DS.BDA.IATSCTuningSpace.put__NetworkType(tuningSpace, CLSID_ATSCNetworkProvider)

locator = DS.BDA.ATSCLocator()
assert (DS.BDA.IATSCLocator.put_CarrierFrequency(locator, 471250) == 0)
assert (DS.BDA.IATSCChannelTuneRequest.put_Locator(tuneRequest, locator) == 0)



Link to post

When I send TuneRequest to 950Q, the tuner starts to check in sequence: cable 64-QAM, cable 256-QAM, ATSC 8VSB, then again until one of them get lock.

I see that in Signal Monitor tool from Hauppauge in status field.

I think you don't have to define modulation type for 950Q.

Link to post

Just to let everybody know the solution that we have finally found:


The ATSC 8VSB WinTV-HVR 950Q tuner wants the frequency to be specified in Hz, not in kHz as TransEdit and DVBViewer do. This does not comply with the Microsoft recommendations (see here), but can be solved by explicitely setting the frequency multiplier value to 1000 (instead of 1, which seems to be the driver default).


Future DVBViewer / Media Server / TransEdit releases will contain this fix. Thanks to @daniel2 for his help to solve this problem!


  • Like 1
Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Similar Content

    • oleq
      By oleq
      When I play this stream: https://www91.zippyshare.com/v/HpXZhE2M/file.html and try to run Teletext/Subtitle Analyzer on PID 8125 (Teletext subtitles for channel WP) - TransEdit will freeze, need to kill it.
      I think this is something new, started to happen on 4.2.4, might be related to this fix, but not sure...
    • cosmoshin
      By cosmoshin
      Ich habe das Problem, dass ich in Korea mit DVBViewer nur sehr wenige Sender empfangen kann.
      Erst einmal ein paar Eckpunkte:
      - Windows 10
      - DVBViewer pro
      - ATSC USB TV Tuner bei Aliba** bestellt. Mit dem TV Tuner wurde TotalMedia 3.5 von ArcSoft mitgeliefert.
      - Kabelfernsehen in Seoul, ca. 50 frei empfangbare Sender
      - Mit TotalMedia kann ich alle frei empfangbare Sender finden und sehen
      - Mit DVBViewer werden nur 9 Sender gefunden
      Hier die Daten zum ATSC Tuner:
      Device Interface: USB 2.0
      Internal Tuner Type:ATSC tuner for over-the-air digital TV
      TV Input Interface: IEC or type-F, 75 Ohm
      TV Receiving Frequency: 48.25 ~ 863.25 MHz
      Digital Video Format: MPEG-II Main Profile,Main Level
      Video Recording Quality: up to 1080p(1920x1080 pixels)
      Audio Format: WMA, MPEG-II Audio Layer I/ II
      Stream Capture: PES & TS
      Operation System Support: Win10, Win8.1/8, Win7, Vista, XP
      Welche Einstellungen sind nötig, damit ich mit DVBViewer alle Sender empfangen kann?
      Ich habe im Verzeichnis von MediaTotal nach einer Sendereinstellungsdatei gesucht, um dort Hinweise für die richtige Sendersuche im DVBViewer zu finden. Leider finde ich bei MediaTotal eine entsprechende Datei nicht (gibt es bestimmt, nur ich finde sie nicht).
      Im Forum habe ich leider keine Beträge zu meinem Problem gefunden.
      Ich habe zwar einen Beitrag gefunden, wo ein User aus Korea DVBViewer nutzt, aber er schien ein ganz anderes Problem gehabt zu haben.
      Im Anhang die Informationen zu den 9 Sendern, die ich gefunden habe.
      Ich wäre sehr froh, wenn jemand mir helfen könnte.
      Korea ATSC.ini
    • userip
      By userip
      After a lot of time requesting the Streaming button in the TransEdit tool, finally the last version 4.2.1 has it! THANK YOU! :-)
      Now, I have another suggestion. If you use SAT>IP servers as your tuners, you know for sure that a lot of servers doesn't support the Full Transport streaming. Yes, almost all support "pids=all", and this it's great. However, when the TS has a high bandwidth, or it goes over a specific bitrate, in this case the resulting RTP streaming has a lot of Continuity Errors. This, isn't a problem for the internal Analyzer of the TransEdit, as the PSI tables can be readed multiple times. However, if you like to do an streaming, this can be a problem.
      So, here it's my suggestion: At time, when you select with the mouse multiple pids in the Analyzer and you start the streaming (CTRL+S), then you're sending only the selected pids. And this it's great! Thank you! However, the TransEdit are in fact receving the full TS. So the filtering it's internal. But, if you include in the configuration some option, it should be possible to request to the tuner to only send the selected pids. And when the streaming stops, or some change occurs in the pid list, then update the list (and when no streaming, then restablish the "pids=all").
      This will be a must have for SAT>IP servers! With this any external tool can be used for TS analysis, using the TransEdit as a TUNER.
      Please, consider it.
    • allanlee
      By allanlee
      Updated to DVBViewer Pro 6.0.4, DMS 2.0.4 and TrandEdit 4.2.1
      If there's an ongoing recording in DMS , it will "grab" the tuner from DMS without any warning or notification.
      At the meantime however, DMS "Status" tab still displays as normal (except for data rate decreasing and file size remaining the same). Seems that it does not even know the tuner what "robbed" away by TransEdit.
      See this behavior in 2 of my PCs. Is it a new - "feature" - of the new version? In previous versions TransEdit will tell me something like "Initialize device failed" or "No hardware available".
    • ss1704
      By ss1704
      Guten Tag!
      Wenn ich mit TransEdit (Version ) eine/mehrer Senderlisten neu erstelle (einen neuen Satellit scannen und  exportieren) und diese dann in den DVBVierer/Pro importiere, funktionieren diese, solange ich den DVBViewer/Pro ( nicht beende. Sobald DVBViewer neu gestartet wird, sind die neuen (frisch importierten) Listen verschwunden.
      In TransEdit:
      - scannen + exportieren
      1) Sendelisten-Editor
      2) Importieren (unten links "+")
      3) Übernehmen
      --> neue Sat/Senderliste wird angezeigt und funktioniert ...
      sobald DVBViewer/Pro neu gestartet wird, fehlen die  neue(n) Senderlisten.
      was mache ich falsch?
      Danke für einen Hinweis!
  • Create New...