summaryrefslogtreecommitdiff
path: root/libdtv/libvdr/libvdr.c
diff options
context:
space:
mode:
authorKlaus Schmidinger <kls (at) cadsoft (dot) de>2001-08-18 18:00:00 +0200
committerKlaus Schmidinger <kls (at) cadsoft (dot) de>2001-08-18 18:00:00 +0200
commit371bf0665eda455c67926999f52b4850cd8529e4 (patch)
tree383f39f92ef1f3846d89e4ae6ad7e39699334f01 /libdtv/libvdr/libvdr.c
parentefea0f64d08052b0189d962101e1a3634d4adfc8 (diff)
downloadvdr-patch-lnbsharing-371bf0665eda455c67926999f52b4850cd8529e4.tar.gz
vdr-patch-lnbsharing-371bf0665eda455c67926999f52b4850cd8529e4.tar.bz2
Version 0.92vdr-0.92
- The "channel not sync'ed" log message now also lists the card number. - Now using the EIT services from 'libdtv' (thanks to Rolf Hakenes), which provides EPG information for NVOD ("Near Video On Demand") channels. - Doing some bug fixing on the EPG data (some tv stations apparently have their own idea on how to fill in the data...). The level up to which EPG bugs are fixed can be controlled with the EPGBugfixLevel parameter in the "Setup" menu (see MANUAL for details, and cEventInfo::FixEpgBugs() in eit.c for the actual implementation). - Fixed broken recordings after a driver buffer overflow. - Fixed the chirping sound after Pause/Play of a DVD (thanks to Andreas Schultz).
Diffstat (limited to 'libdtv/libvdr/libvdr.c')
-rw-r--r--libdtv/libvdr/libvdr.c169
1 files changed, 169 insertions, 0 deletions
diff --git a/libdtv/libvdr/libvdr.c b/libdtv/libvdr/libvdr.c
new file mode 100644
index 0000000..5caa5d7
--- /dev/null
+++ b/libdtv/libvdr/libvdr.c
@@ -0,0 +1,169 @@
+//////////////////////////////////////////////////////////////
+/// ///
+/// libvdr.c: routines to parse the DVB-SI stream ///
+/// ///
+//////////////////////////////////////////////////////////////
+
+// $Revision: 1.1 $
+// $Date: 2001/08/15 14:05:24 $
+// $Author: kls $
+//
+// (C) 2001 Rolf Hakenes <hakenes@hippomi.de>, under the GNU GPL.
+//
+// libvdr is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2, or (at your option)
+// any later version.
+//
+// libvdr is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You may have received a copy of the GNU General Public License
+// along with libvdr; see the file COPYING. If not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/ioctl.h>
+#include <fcntl.h>
+
+#include <liblx.h>
+#include <libsi.h>
+#include <si_tables.h>
+#include "libvdr.h"
+
+
+
+struct LIST *createVdrProgramInfos (unsigned char *siBuffer)
+{
+ struct VdrProgramInfo *VdrProgramInfo;
+ struct LIST *Result, *EventList;
+ struct Event *Event;
+ struct Descriptor *Descriptor;
+
+ if (!siBuffer) return (NULL);
+
+ if (!(EventList = siParseEIT (siBuffer))) return (NULL);
+
+ Result = xNewList (NULL);
+
+ xForeach (EventList, Event)
+ {
+ VdrProgramInfo = NULL;
+
+ xForeach (Event->Descriptors, Descriptor)
+ {
+ switch (Descriptor->Tag)
+ {
+ case DESCR_SHORT_EVENT:
+ {
+ if (!xName(Descriptor) || !xName(Descriptor)[0])
+ break;
+
+ if (!VdrProgramInfo)
+ {
+ CreateVdrProgramInfo(VdrProgramInfo,
+ Event->EventID, Event->TransportStreamID,
+ Event->ServiceID, Event->StartTime,
+ Event->Duration, Event->Status);
+
+ VdrProgramInfo->ShortName =
+ xSetText (xName (Descriptor));
+ VdrProgramInfo->ShortText =
+ xSetText (((struct ShortEventDescriptor
+ *)Descriptor)->Text);
+ memcpy (VdrProgramInfo->LanguageCode, ((struct
+ ShortEventDescriptor *)Descriptor)->
+ LanguageCode, 4);
+ }
+ }
+ break;
+
+ case DESCR_TIME_SHIFTED_EVENT:
+ {
+ struct tm *StartTime;
+
+ if (!VdrProgramInfo)
+ {
+ CreateVdrProgramInfo(VdrProgramInfo,
+ Event->EventID, Event->TransportStreamID,
+ Event->ServiceID, Event->StartTime,
+ Event->Duration, Event->Status);
+
+ VdrProgramInfo->ReferenceServiceID =
+ ((struct TimeShiftedEventDescriptor
+ *)Descriptor)->ReferenceServiceID;
+ VdrProgramInfo->ReferenceEventID =
+ ((struct TimeShiftedEventDescriptor
+ *)Descriptor)->ReferenceEventID;
+ }
+ }
+ break;
+
+ case DESCR_EXTENDED_EVENT:
+ {
+ struct ExtendedEventItem *Item;
+
+ if (VdrProgramInfo)
+ {
+ if (xName (Descriptor))
+ AddToText (xName (Descriptor),
+ VdrProgramInfo->ExtendedName);
+ xForeach (((struct ExtendedEventDescriptor*)
+ Descriptor)->Items, Item)
+ {
+ AddItemToText (xName (Item),
+ VdrProgramInfo->ExtendedText);
+ AddItemToText (Item->Text,
+ VdrProgramInfo->ExtendedText);
+ }
+ }
+ }
+ break;
+
+ case DESCR_CONTENT:
+ {
+ int i, j;
+
+ if (VdrProgramInfo)
+ {
+ for (j = 0; j < ((struct ContentDescriptor*)
+ Descriptor)->Amount; j++)
+ {
+ VdrProgramInfo->ContentNibble1 =
+ GetContentContentNibble1(Descriptor, j);
+ VdrProgramInfo->ContentNibble2 =
+ GetContentContentNibble2(Descriptor, j);
+ }
+ }
+ }
+ break;
+
+ case DESCR_PARENTAL_RATING:
+ {
+ struct ParentalRating *Rating;
+
+ if (VdrProgramInfo)
+ {
+ xForeach (((struct ParentalRatingDescriptor *)
+ Descriptor)->Ratings, Rating)
+ if (!strncmp (VdrProgramInfo->LanguageCode,
+ Rating->LanguageCode, 3))
+ VdrProgramInfo->Rating = Rating->Rating;
+ }
+ }
+ break;
+ }
+ }
+ if (VdrProgramInfo) xAddTail (Result, VdrProgramInfo);
+ }
+
+ return (Result);
+}