[mythtv] Adding PLP support (DTV_STREAM_ID)

Torbjorn Jansson torbjorn.jansson at mbox200.swipnet.se
Sat Feb 3 15:55:55 UTC 2018

On 2018-01-29 19:39, David Matthews wrote:
> On 28/01/2018 17:49, Torbjorn Jansson wrote:
>> On 2018-01-28 16:42, Peter Bennett wrote:
>>> On 01/28/2018 08:12 AM, Torbjorn Jansson wrote:
>>>> Hello.
>>>> i have a few questions but first some background.
>>>> several years ago i bought a usb based dvbt2 tuner with the intention to 
>>>> replace my pcie card.
>>>> i picked a TT CT2-4650 since it was supposed to have linux support already.
>>>> turned out that was not true since i got a newer version of it with no 
>>>> linux support, so with a bit of hacking on the drivers i was able to get it 
>>>> working due to the similarities with other cards.
>>>> but i quickly realized i could not tune to any dvb-t2 mux, after a lot of 
>>>> troubleshooting i gave up and forgot about it.
>>>> then a year or so later my dvb tv box broke down and i bought a new one 
>>>> (vu+ solo4k) and to my surprise it had the exact same issue.
>>>> after even more troubleshooting i found out i need to set PLP ID to 1 for 
>>>> tuning to work on dvb-t2 muxes.
>>>> so then i realized that must be the same problem with my ct2-4650 and it was.
>>>> yesterday i got tvheadend working on the usb tuner successfully and thats 
>>>> the first time i got the usb tuner to do something useful.
>>>> BUT channel scanning is not working, so mux must be setup manualy, that 
>>>> includes PLP ID and other paramters.
>>>> so i think the drivers don't do auto detect like my pcie card does.
>>>> and the downside of missing autodetect of plp is that most software dont 
>>>> know how to handle plp and this applies to mythtv too.
>>>> so for mythtv to work with this card i need to convince the backend to 
>>>> specify plp when tuning.
>>>> so a new mux paramter need to be added to database and then used during 
>>>> tuning.
>>>> as i understand it this is done with a property called: DTV_STREAM_ID and i 
>>>> need to try to understand better how 
>>>> libs/libmythtv/recorders/dvbchannel.cpp works.
>>>> can someone give me any pointers about this?
>>>> to start with i'm happy with a proof of concept hack that sets 
>>>> DTV_STREAM_ID to 1 on all dvb-t2 tuning attempts, then if it works i can 
>>>> try and get a proper patch for it.
>>>> i probably wont be able to get the mux editor or settings working since i'm 
>>>> not familiar with how the setup gui works.
>>>> but if i get a new optional mux setting for plp in place then i'm happy.
> I wrote the original patch to add support for DVB-T2 
> https://code.mythtv.org/trac/ticket/12342 .  In the UK we don't use PLP or it 
> may have been that the tuner I had auto-detected but either way there was no 
> need to add PLP support at the time.  If you follow that link it should 
> indicate roughly where to add the DTV_STREAM_ID property.  It's a long time 
> since I looked at this but let me know if I can help.
> David

see below for a quick proof of concept patch that's mostly a hack to check that 
it works.
with this i can get the hd channels to work.

now i need to make this into a proper patch by adding a new column to 
dtv_multiplext table and reading that value in.
plus make sure it defaults to off, for example by using -1 to indicate it 
should not be used.

diff --git a/mythtv/libs/libmythtv/recorders/dvbchannel.cpp 
index dbdf7adc11..f327cc3750 100644
--- a/mythtv/libs/libmythtv/recorders/dvbchannel.cpp
+++ b/mythtv/libs/libmythtv/recorders/dvbchannel.cpp
@@ -553,7 +553,7 @@ static struct dtv_properties *dtvmultiplex_to_dtvproperties(
      if (!cmdseq)
          return NULL;

-    cmdseq->props = (struct dtv_property*) calloc(12, sizeof(*(cmdseq->props)));
+    cmdseq->props = (struct dtv_property*) calloc(13, sizeof(*(cmdseq->props)));
      if (!(cmdseq->props))
@@ -609,6 +609,12 @@ static struct dtv_properties *dtvmultiplex_to_dtvproperties(
          cmdseq->props[c].cmd      = DTV_HIERARCHY;
          cmdseq->props[c++].u.data = tuning.hierarchy;
+    //PLP test
+    if (tuner_type == DTVTunerType::kTunerTypeDVBT2)
+    {
+        cmdseq->props[c].cmd      = DTV_STREAM_ID;
+        cmdseq->props[c++].u.data = 1;
+    }

      if (tuning.mod_sys == DTVModulationSystem::kModulationSystem_DVBS2)

More information about the mythtv-dev mailing list