freebsd-ports/multimedia/vdr/files/vdr-1.7.21-ttxtsubs.patch-2
Juergen Lock 556296fe66 - Update multimedia/vdr to 1.7.22 .
- Add startup script that the rc.d script invokes to wait for
  /dev/dvb nodes to appear, can be disabled by setting vdr_waitdvb="NO"
  in rc.conf(5).  (This turned out to be necessary in some situations
  because devd starts webcamd only later in the boot process.)
- One more fix for changing OSD language when using UTF-8.
- Update multimedia/vdr-plugin-femon to 1.7.11 .
- Update multimedia/vdr-plugin-ttxtsubs to 0.2.4 .
- Bump PORTREVISION for all other plugins.
- Update www/vdradmin-am to 3.6.9 .
2012-01-21 17:32:54 +00:00

56 lines
3.1 KiB
Text

diff --git a/pat.c b/pat.c
index b7493ec..9262491 100644
--- a/pat.c
+++ b/pat.c
@@ -17,6 +17,7 @@
#include "libsi/section.h"
#include "libsi/descriptor.h"
#include "thread.h"
+#include "vdrttxtsubshooks.h"
#define PMT_SCAN_TIMEOUT 10 // seconds
@@ -347,6 +348,8 @@ void cPatFilter::Process(u_short Pid, u_
char DLangs[MAXDPIDS][MAXLANGCODE2] = { "" };
char SLangs[MAXSPIDS][MAXLANGCODE2] = { "" };
int Tpid = 0;
+ tTeletextSubtitlePage TeletextSubtitlePages[MAXTXTPAGES];
+ int NumTPages = 0;
int NumApids = 0;
int NumDpids = 0;
int NumSpids = 0;
@@ -438,8 +441,21 @@ void cPatFilter::Process(u_short Pid, u_
NumSpids++;
}
break;
- case SI::TeletextDescriptorTag:
+ case SI::TeletextDescriptorTag: {
Tpid = esPid;
+ SI::TeletextDescriptor *sd = (SI::TeletextDescriptor *)d;
+ SI::TeletextDescriptor::Teletext ttxt;
+ for (SI::Loop::Iterator it; sd->teletextLoop.getNext(ttxt, it); ) {
+ bool isSubtitlePage = (ttxt.getTeletextType() == 0x02) || (ttxt.getTeletextType() == 0x05);
+ if ((NumTPages < MAXTXTPAGES) && ttxt.languageCode[0] && isSubtitlePage) {
+ strn0cpy(TeletextSubtitlePages[NumTPages].ttxtLanguage, I18nNormalizeLanguageCode(ttxt.languageCode), MAXLANGCODE1);
+ TeletextSubtitlePages[NumTPages].ttxtPage = ttxt.getTeletextPageNumber();
+ TeletextSubtitlePages[NumTPages].ttxtMagazine = ttxt.getTeletextMagazineNumber();
+ TeletextSubtitlePages[NumTPages].ttxtType = ttxt.getTeletextType();
+ NumTPages++;
+ }
+ }
+ }
break;
case SI::ISO639LanguageDescriptorTag: {
SI::ISO639LanguageDescriptor *ld = (SI::ISO639LanguageDescriptor *)d;
@@ -541,6 +557,11 @@ void cPatFilter::Process(u_short Pid, u_
}
if (Setup.UpdateChannels >= 2) {
Channel->SetPids(Vpid, Ppid, Vtype, Apids, Atypes, ALangs, Dpids, Dtypes, DLangs, Spids, SLangs, Tpid);
+ if (NumTPages < MAXTXTPAGES) {
+ int manualPageNumber = cVDRTtxtsubsHookListener::Hook()->ManualPageNumber(Channel);
+ if (manualPageNumber)
+ TeletextSubtitlePages[NumTPages++] = tTeletextSubtitlePage(manualPageNumber);
+ }
if (!cSource::IsType(Channel->Source(), 'I'))
Channel->SetCaIds(CaDescriptors->CaIds());
Channel->SetSubtitlingDescriptors(SubtitlingTypes, CompositionPageIds, AncillaryPageIds);