summaryrefslogtreecommitdiff
path: root/libdtv/libsi
diff options
context:
space:
mode:
Diffstat (limited to 'libdtv/libsi')
-rw-r--r--libdtv/libsi/include/libsi.h23
-rw-r--r--libdtv/libsi/si_parser.c7
2 files changed, 29 insertions, 1 deletions
diff --git a/libdtv/libsi/include/libsi.h b/libdtv/libsi/include/libsi.h
index 366387a..8e9e260 100644
--- a/libdtv/libsi/include/libsi.h
+++ b/libdtv/libsi/include/libsi.h
@@ -315,6 +315,29 @@ struct Descriptor {
};
+/* ConditionalAccessDescriptor */
+
+struct ConditionalAccessDescriptor {
+ struct NODE Node;
+ unsigned short Tag;
+ unsigned short Amount; /* Data */
+ unsigned char *Data;
+};
+
+#define CreateConditionalAccessDescriptor(descr, amount, data) \
+ do \
+ { \
+ unsigned char *tmpptr; \
+ \
+ xMemAlloc (amount, &tmpptr); \
+ memcpy (tmpptr, data, amount); \
+ xCreateNode (((struct ConditionalAccessDescriptor *)descr), NULL); \
+ ((struct ConditionalAccessDescriptor *)descr)->Tag = DESCR_CA; \
+ ((struct ConditionalAccessDescriptor *)descr)->Amount = amount; \
+ ((struct ConditionalAccessDescriptor *)descr)->Data = tmpptr; \
+ } while (0)
+
+
/* Iso639LanguageDescriptor */
struct Iso639LanguageDescriptor {
diff --git a/libdtv/libsi/si_parser.c b/libdtv/libsi/si_parser.c
index be0d254..ccca6e5 100644
--- a/libdtv/libsi/si_parser.c
+++ b/libdtv/libsi/si_parser.c
@@ -705,6 +705,12 @@ void siParseDescriptor (struct LIST *Descriptors, u_char *Buffer)
HILO (CastTimeShiftedEventDescriptor(Ptr)->reference_event_id));
break;
+ case DESCR_CA:
+ CreateConditionalAccessDescriptor (Descriptor,
+ *(Ptr + 1) + 2, // we'll need the entire raw data!
+ Ptr);
+ break;
+
case DESCR_ISO_639_LANGUAGE:
CreateIso639LanguageDescriptor (Descriptor,
CastIso639LanguageDescriptor(Buffer)->lang_code1,
@@ -790,7 +796,6 @@ void siParseDescriptor (struct LIST *Descriptors, u_char *Buffer)
case DESCR_DATA_STREAM_ALIGN:
case DESCR_TARGET_BACKGRID:
case DESCR_VIDEO_WINDOW:
- case DESCR_CA:
case DESCR_SYSTEM_CLOCK:
case DESCR_MULTIPLEX_BUFFER_UTIL:
case DESCR_COPYRIGHT: