mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Added support for LCN (Logical Channel Numbers)
This commit is contained in:
parent
b3bc711ed2
commit
1c4865147a
@ -1194,6 +1194,7 @@ Rolf Ahrenberg <Rolf.Ahrenberg@sci.fi>
|
|||||||
for fixing a problem with subtitles not being displayed because the broadcaster
|
for fixing a problem with subtitles not being displayed because the broadcaster
|
||||||
doesn't set the data's version numbers as required by the DVB standard
|
doesn't set the data's version numbers as required by the DVB standard
|
||||||
for the "binary skip" patch
|
for the "binary skip" patch
|
||||||
|
for adding support for LCN (Logical Channel Numbers)
|
||||||
|
|
||||||
Ralf Klueber <ralf.klueber@vodafone.com>
|
Ralf Klueber <ralf.klueber@vodafone.com>
|
||||||
for reporting a bug in cutting a recording if there is only a single editing mark
|
for reporting a bug in cutting a recording if there is only a single editing mark
|
||||||
|
2
HISTORY
2
HISTORY
@ -8450,3 +8450,5 @@ Video Disk Recorder Revision History
|
|||||||
- Made cRecording::GetResume() public (suggested by Stefan Braun).
|
- Made cRecording::GetResume() public (suggested by Stefan Braun).
|
||||||
- Fixed setting the read index in cDvbPlayer::Goto() in case Still is false.
|
- Fixed setting the read index in cDvbPlayer::Goto() in case Still is false.
|
||||||
- The function cDvbPlayer::Goto() now automatically calls Play() if Still is false.
|
- The function cDvbPlayer::Goto() now automatically calls Play() if Still is false.
|
||||||
|
- Added support for LCN (Logical Channel Numbers), which plugins may use to sort
|
||||||
|
channels (thanks to Rolf Ahrenberg).
|
||||||
|
11
channels.c
11
channels.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: channels.c 3.7 2015/01/14 12:15:03 kls Exp $
|
* $Id: channels.c 3.8 2015/02/01 13:47:05 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "channels.h"
|
#include "channels.h"
|
||||||
@ -248,6 +248,15 @@ void cChannel::SetId(int Nid, int Tid, int Sid, int Rid)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void cChannel::SetLcn(int Lcn)
|
||||||
|
{
|
||||||
|
if (lcn != Lcn) {
|
||||||
|
if (Number())
|
||||||
|
dsyslog("changing lcn of channel %d (%s) from %d to %d\n", Number(), name, lcn, Lcn);
|
||||||
|
lcn = Lcn;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void cChannel::SetName(const char *Name, const char *ShortName, const char *Provider)
|
void cChannel::SetName(const char *Name, const char *ShortName, const char *Provider)
|
||||||
{
|
{
|
||||||
if (!isempty(Name)) {
|
if (!isempty(Name)) {
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: channels.h 3.2 2014/01/04 15:01:21 kls Exp $
|
* $Id: channels.h 3.3 2015/02/01 13:30:26 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __CHANNELS_H
|
#ifndef __CHANNELS_H
|
||||||
@ -121,6 +121,7 @@ private:
|
|||||||
int tid;
|
int tid;
|
||||||
int sid;
|
int sid;
|
||||||
int rid;
|
int rid;
|
||||||
|
int lcn; // Logical channel number assigned by data stream (or -1 if not available)
|
||||||
int number; // Sequence number assigned on load
|
int number; // Sequence number assigned on load
|
||||||
bool groupSep;
|
bool groupSep;
|
||||||
int __EndData__;
|
int __EndData__;
|
||||||
@ -174,6 +175,7 @@ public:
|
|||||||
int Tid(void) const { return tid; }
|
int Tid(void) const { return tid; }
|
||||||
int Sid(void) const { return sid; }
|
int Sid(void) const { return sid; }
|
||||||
int Rid(void) const { return rid; }
|
int Rid(void) const { return rid; }
|
||||||
|
int Lcn(void) const { return lcn; }
|
||||||
int Number(void) const { return number; }
|
int Number(void) const { return number; }
|
||||||
void SetNumber(int Number) { number = Number; }
|
void SetNumber(int Number) { number = Number; }
|
||||||
bool GroupSep(void) const { return groupSep; }
|
bool GroupSep(void) const { return groupSep; }
|
||||||
@ -192,6 +194,7 @@ public:
|
|||||||
void CopyTransponderData(const cChannel *Channel);
|
void CopyTransponderData(const cChannel *Channel);
|
||||||
bool SetTransponderData(int Source, int Frequency, int Srate, const char *Parameters, bool Quiet = false);
|
bool SetTransponderData(int Source, int Frequency, int Srate, const char *Parameters, bool Quiet = false);
|
||||||
void SetId(int Nid, int Tid, int Sid, int Rid = 0);
|
void SetId(int Nid, int Tid, int Sid, int Rid = 0);
|
||||||
|
void SetLcn(int Lcn);
|
||||||
void SetName(const char *Name, const char *ShortName, const char *Provider);
|
void SetName(const char *Name, const char *ShortName, const char *Provider);
|
||||||
void SetPortalName(const char *PortalName);
|
void SetPortalName(const char *PortalName);
|
||||||
void SetPids(int Vpid, int Ppid, int Vtype, int *Apids, int *Atypes, char ALangs[][MAXLANGCODE2], int *Dpids, int *Dtypes, char DLangs[][MAXLANGCODE2], int *Spids, char SLangs[][MAXLANGCODE2], int Tpid);
|
void SetPids(int Vpid, int Ppid, int Vtype, int *Apids, int *Atypes, char ALangs[][MAXLANGCODE2], int *Dpids, int *Dtypes, char DLangs[][MAXLANGCODE2], int *Spids, char SLangs[][MAXLANGCODE2], int Tpid);
|
||||||
|
36
nit.c
36
nit.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: nit.c 3.3 2014/03/16 10:38:31 kls Exp $
|
* $Id: nit.c 3.4 2015/02/01 13:46:00 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "nit.h"
|
#include "nit.h"
|
||||||
@ -357,6 +357,40 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case SI::LogicalChannelDescriptorTag: {
|
||||||
|
SI::LogicalChannelDescriptor *lcd = (SI::LogicalChannelDescriptor *)d;
|
||||||
|
SI::LogicalChannelDescriptor::LogicalChannel LogicalChannel;
|
||||||
|
for (SI::Loop::Iterator it4; lcd->logicalChannelLoop.getNext(LogicalChannel, it4); ) {
|
||||||
|
int lcn = LogicalChannel.getLogicalChannelNumber();
|
||||||
|
int sid = LogicalChannel.getServiceId();
|
||||||
|
if (LogicalChannel.getVisibleServiceFlag()) {
|
||||||
|
for (cChannel *Channel = Channels.First(); Channel; Channel = Channels.Next(Channel)) {
|
||||||
|
if (!Channel->GroupSep() && Channel->Sid() == sid && Channel->Nid() == ts.getOriginalNetworkId() && Channel->Tid() == ts.getTransportStreamId()) {
|
||||||
|
Channel->SetLcn(lcn);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SI::HdSimulcastLogicalChannelDescriptorTag: {
|
||||||
|
SI::HdSimulcastLogicalChannelDescriptor *lcd = (SI::HdSimulcastLogicalChannelDescriptor *)d;
|
||||||
|
SI::HdSimulcastLogicalChannelDescriptor::HdSimulcastLogicalChannel HdSimulcastLogicalChannel;
|
||||||
|
for (SI::Loop::Iterator it4; lcd->hdSimulcastLogicalChannelLoop.getNext(HdSimulcastLogicalChannel, it4); ) {
|
||||||
|
int lcn = HdSimulcastLogicalChannel.getLogicalChannelNumber();
|
||||||
|
int sid = HdSimulcastLogicalChannel.getServiceId();
|
||||||
|
if (HdSimulcastLogicalChannel.getVisibleServiceFlag()) {
|
||||||
|
for (cChannel *Channel = Channels.First(); Channel; Channel = Channels.Next(Channel)) {
|
||||||
|
if (!Channel->GroupSep() && Channel->Sid() == sid && Channel->Nid() == ts.getOriginalNetworkId() && Channel->Tid() == ts.getTransportStreamId()) {
|
||||||
|
Channel->SetLcn(lcn);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
default: ;
|
default: ;
|
||||||
}
|
}
|
||||||
delete d;
|
delete d;
|
||||||
|
Loading…
Reference in New Issue
Block a user