Skip to content

Commit

Permalink
Store channel service_type in database
Browse files Browse the repository at this point in the history
Store the service type of the channel in database table channel.
The service type is obtained from the service descriptor as
described in the DVB Bluebook A038, Feb 2019, pages 82 and 83.
  • Loading branch information
kmdewaal committed Nov 2, 2019
1 parent aead8ca commit c7ad89a
Show file tree
Hide file tree
Showing 8 changed files with 58 additions and 34 deletions.
1 change: 1 addition & 0 deletions mythtv/libs/libmythtv/channelinfo.cpp
Expand Up @@ -44,6 +44,7 @@ ChannelInfo::ChannelInfo(const ChannelInfo &other)
m_useonairguide = other.m_useonairguide;
m_mplexid = (other.m_mplexid == 32767) ? 0 : other.m_mplexid;
m_serviceid = other.m_serviceid;
m_service_type = other.m_service_type;
m_atsc_major_chan = other.m_atsc_major_chan;
m_atsc_minor_chan = other.m_atsc_minor_chan;
m_last_record = other.m_last_record;
Expand Down
5 changes: 4 additions & 1 deletion mythtv/libs/libmythtv/channelinfo.h
Expand Up @@ -99,6 +99,7 @@ class MTV_PUBLIC ChannelInfo

uint m_mplexid {0};
uint m_serviceid {0};
uint m_service_type {0};
uint m_atsc_major_chan {0};
uint m_atsc_minor_chan {0};

Expand Down Expand Up @@ -150,14 +151,15 @@ class MTV_PUBLIC ChannelInsertInfo
bool _is_encrypted, bool _is_data_service,
bool _is_audio_service, bool _is_opencable,
bool _could_be_opencable, int _decryption_status,
const QString& _default_authority) :
const QString& _default_authority, uint _service_type) :
m_db_mplexid(_db_mplexid),
m_source_id(_source_id),
m_channel_id(_channel_id),
m_callsign(_callsign),
m_service_name(_service_name),
m_chan_num(_chan_num),
m_service_id(_service_id),
m_service_type(_service_type),
m_atsc_major_channel(_atsc_major_channel),
m_atsc_minor_channel(_atsc_minor_channel),
m_use_on_air_guide(_use_on_air_guide),
Expand Down Expand Up @@ -205,6 +207,7 @@ class MTV_PUBLIC ChannelInsertInfo
QString m_service_name;
QString m_chan_num;
uint m_service_id {0};
uint m_service_type {0};
uint m_atsc_major_channel {0};
uint m_atsc_minor_channel {0};
bool m_use_on_air_guide {false};
Expand Down
6 changes: 4 additions & 2 deletions mythtv/libs/libmythtv/channelscan/channelimporter.cpp
Expand Up @@ -656,7 +656,8 @@ ScanDTVTransportList ChannelImporter::InsertChannels(
QString(),
chan.m_format,
QString(),
chan.m_default_authority);
chan.m_default_authority,
chan.m_service_type);

if (!transports[i].m_iptv_tuning.GetDataURL().isEmpty())
ChannelUtil::CreateIPTVTuningData(chan.m_channel_id,
Expand Down Expand Up @@ -825,7 +826,8 @@ ScanDTVTransportList ChannelImporter::UpdateChannels(
QString(),
chan.m_format,
QString(),
chan.m_default_authority);
chan.m_default_authority,
chan.m_service_type);
}

if (updated)
Expand Down
26 changes: 16 additions & 10 deletions mythtv/libs/libmythtv/channelscan/channelscan_sm.cpp
Expand Up @@ -1192,6 +1192,18 @@ static void update_info(ChannelInsertInfo &info,
service_name = desc->ServiceName();
if (service_name.trimmed().isEmpty())
service_name.clear();

info.m_service_type = desc->ServiceType();
info.m_is_data_service =
(desc && !desc->IsDTV() && !desc->IsDigitalAudio());
info.m_is_audio_service = (desc && desc->IsDigitalAudio());
delete desc;
}
else
{
LOG(VB_CHANSCAN, LOG_INFO, "ChannelScanSM: " +
QString("No ServiceDescriptor for onid %1 tid %2 sid %3")
.arg(sdt->OriginalNetworkID()).arg(sdt->TSID()).arg(sdt->ServiceID(i)));
}

if (info.m_callsign.isEmpty())
Expand All @@ -1206,16 +1218,10 @@ static void update_info(ChannelInsertInfo &info,

info.m_hidden = false;
info.m_hidden_in_guide = false;

info.m_is_data_service =
(desc && !desc->IsDTV() && !desc->IsDigitalAudio());
info.m_is_audio_service = (desc && desc->IsDigitalAudio());
delete desc;

info.m_service_id = sdt->ServiceID(i);
info.m_sdt_tsid = sdt->TSID();
info.m_orig_netid = sdt->OriginalNetworkID();
info.m_in_sdt = true;
info.m_service_id = sdt->ServiceID(i);
info.m_sdt_tsid = sdt->TSID();
info.m_orig_netid = sdt->OriginalNetworkID();
info.m_in_sdt = true;

desc_list_t parsed =
MPEGDescriptor::Parse(sdt->ServiceDescriptors(i),
Expand Down
6 changes: 4 additions & 2 deletions mythtv/libs/libmythtv/channelscan/scaninfo.cpp
Expand Up @@ -118,7 +118,8 @@ ScanDTVTransportList LoadScan(uint scanid)
" in_pat, in_pmt, in_vct, "
" in_nit, in_sdt, is_encrypted, "
" is_data_service, is_audio_service, is_opencable, "
" could_be_opencable, decryption_status, default_authority "
" could_be_opencable, decryption_status, default_authority, "
" service_type "
"FROM channelscan_channel "
"WHERE transportid = :TRANSPORTID");
query2.bindValue(":TRANSPORTID", query.value(15).toUInt());
Expand Down Expand Up @@ -178,7 +179,8 @@ ScanDTVTransportList LoadScan(uint scanid)
query2.value(32).toBool()/*is_opencable*/,
query2.value(33).toBool()/*could_be_opencable*/,
query2.value(34).toInt()/*decryption_status*/,
query2.value(35).toString()/*default_authority*/);
query2.value(35).toString()/*default_authority*/,
query2.value(36).toUInt()/*service_type*/);

mux.m_channels.push_back(chan);
}
Expand Down
36 changes: 21 additions & 15 deletions mythtv/libs/libmythtv/channelutil.cpp
Expand Up @@ -1482,7 +1482,8 @@ bool ChannelUtil::CreateChannel(uint db_mplexid,
QString icon,
QString format,
QString xmltvid,
QString default_authority)
QString default_authority,
uint service_type)
{
MSqlQuery query(MSqlQuery::InitCon());

Expand All @@ -1498,7 +1499,8 @@ bool ChannelUtil::CreateChannel(uint db_mplexid,
qstr +=
" atsc_major_chan, atsc_minor_chan, "
" useonairguide, visible, tvformat, "
" icon, xmltvid, default_authority) "
" icon, xmltvid, default_authority, "
" service_type) "
"VALUES "
" (:CHANID, :CHANNUM, :SOURCEID, "
" :CALLSIGN, :NAME, :SERVICEID, ";
Expand All @@ -1507,7 +1509,8 @@ bool ChannelUtil::CreateChannel(uint db_mplexid,
qstr +=
" :MAJORCHAN, :MINORCHAN, "
" :USEOAG, :VISIBLE, :TVFORMAT, "
" :ICON, :XMLTVID, :AUTHORITY) ";
" :ICON, :XMLTVID, :AUTHORITY, "
" :SERVICETYPE ) ";

query.prepare(qstr);

Expand All @@ -1531,10 +1534,11 @@ bool ChannelUtil::CreateChannel(uint db_mplexid,
query.bindValue(":FREQID", freqid);

QString tvformat = (atsc_minor_channel > 0) ? "ATSC" : std::move(format);
query.bindValueNoNull(":TVFORMAT", tvformat);
query.bindValueNoNull(":ICON", icon);
query.bindValueNoNull(":XMLTVID", xmltvid);
query.bindValueNoNull(":AUTHORITY", default_authority);
query.bindValueNoNull(":TVFORMAT", tvformat);
query.bindValueNoNull(":ICON", icon);
query.bindValueNoNull(":XMLTVID", xmltvid);
query.bindValueNoNull(":AUTHORITY", default_authority);
query.bindValue (":SERVICETYPE", service_type);

if (!query.exec() || !query.isActive())
{
Expand All @@ -1560,7 +1564,8 @@ bool ChannelUtil::UpdateChannel(uint db_mplexid,
const QString& icon,
QString format,
const QString& xmltvid,
const QString& default_authority)
const QString& default_authority,
uint service_type)
{
if (!channel_id)
return false;
Expand All @@ -1574,7 +1579,7 @@ bool ChannelUtil::UpdateChannel(uint db_mplexid,
" atsc_major_chan = :MAJORCHAN, atsc_minor_chan = :MINORCHAN, "
" callsign = :CALLSIGN, name = :NAME, "
" sourceid = :SOURCEID, useonairguide = :USEOAG, "
" visible = :VISIBLE "
" visible = :VISIBLE, service_type = :SERVICETYPE "
"WHERE chanid=:CHANID")
.arg((!set_channum) ? "" : "channum = :CHANNUM, ")
.arg((freqid.isEmpty()) ? "" : "freqid = :FREQID, ")
Expand All @@ -1596,13 +1601,14 @@ bool ChannelUtil::UpdateChannel(uint db_mplexid,
query.bindValueNoNull(":CALLSIGN", callsign);
query.bindValueNoNull(":NAME", service_name);

query.bindValue(":MPLEXID", db_mplexid);
query.bindValue(":MPLEXID", db_mplexid);
query.bindValue(":SERVICEID", service_id);
query.bindValue(":MAJORCHAN", atsc_major_channel);
query.bindValue(":MINORCHAN", atsc_minor_channel);
query.bindValue(":USEOAG", use_on_air_guide);
query.bindValue(":VISIBLE", !hidden);
query.bindValue(":SERVICETYPE", service_type);

query.bindValue(":SERVICEID", service_id);
query.bindValue(":MAJORCHAN", atsc_major_channel);
query.bindValue(":MINORCHAN", atsc_minor_channel);
query.bindValue(":USEOAG", use_on_air_guide);
query.bindValue(":VISIBLE", !hidden);
(void) hidden_in_guide; // MythTV can't hide the channel in just the guide.

if (!freqid.isEmpty())
Expand Down
6 changes: 4 additions & 2 deletions mythtv/libs/libmythtv/channelutil.h
Expand Up @@ -117,7 +117,8 @@ class MTV_PUBLIC ChannelUtil
QString icon = QString(),
QString format = "Default",
QString xmltvid = QString(),
QString default_authority = QString());
QString default_authority = QString(),
uint service_type = 0);

static bool UpdateChannel(uint db_mplexid,
uint source_id,
Expand All @@ -135,7 +136,8 @@ class MTV_PUBLIC ChannelUtil
const QString& icon = QString(),
QString format = QString(),
const QString& xmltvid = QString(),
const QString& default_authority = QString());
const QString& default_authority = QString(),
uint service_type = 0);

static bool CreateIPTVTuningData(
uint channel_id, const IPTVTuningData &tuning)
Expand Down
6 changes: 4 additions & 2 deletions mythtv/libs/libmythtv/dtvmultiplex.cpp
Expand Up @@ -569,7 +569,8 @@ bool ScanDTVTransport::FillFromDB(DTVTunerType type, uint mplexid)
" c.serviceid, c.atsc_major_chan, c.atsc_minor_chan, "
" c.useonairguide, c.visible, c.freqid, "
" c.icon, c.tvformat, c.xmltvid, "
" d.transportid, d.networkid, c.default_authority "
" d.transportid, d.networkid, c.default_authority,"
" c.service_type "
"FROM channel AS c, dtv_multiplex AS d "
"WHERE c.mplexid = :MPLEXID AND"
" c.mplexid = d.mplexid");
Expand Down Expand Up @@ -600,7 +601,8 @@ bool ScanDTVTransport::FillFromDB(DTVTunerType type, uint mplexid)
false, false, false, false,
false, false, false, false,
false, false, false, 0,
query.value(17).toString() /* default_authority */);
query.value(17).toString(), /* default_authority */
query.value(18).toUInt()); /* service_type */

m_channels.push_back(chan);
}
Expand Down

0 comments on commit c7ad89a

Please sign in to comment.