diff options
Diffstat (limited to 'libsi')
-rw-r--r-- | libsi/descriptor.c | 22 | ||||
-rw-r--r-- | libsi/descriptor.h | 7 |
2 files changed, 18 insertions, 11 deletions
diff --git a/libsi/descriptor.c b/libsi/descriptor.c index 82e2a8f..685722e 100644 --- a/libsi/descriptor.c +++ b/libsi/descriptor.c @@ -6,7 +6,7 @@ * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * - * $Id: descriptor.c 1.10 2004/03/13 15:08:12 kls Exp $ + * $Id: descriptor.c 1.12 2004/03/26 15:25:28 kls Exp $ * * ***************************************************************************/ @@ -78,12 +78,13 @@ void ExtendedEventDescriptor::Item::Parse() { return ret; }*/ -int ExtendedEventDescriptors::getMaximumTextLength() { - return getMaximumTextPlainLength()+getMaximumTextItemizedLength(); +int ExtendedEventDescriptors::getMaximumTextLength(const char *separation1, const char *separation2) { + //add length of plain text, of itemized text with separators, and for one separator between the two fields. + return getMaximumTextPlainLength()+getMaximumTextItemizedLength(separation1, separation2)+strlen(separation2); } char *ExtendedEventDescriptors::getText(const char *separation1, const char *separation2) { - char *text=new char[getMaximumTextLength()+strlen(separation1)+strlen(separation2)]; + char *text=new char[getMaximumTextLength(separation1, separation2)]; return getText(text, separation1, separation2); } @@ -171,20 +172,21 @@ char *ExtendedEventDescriptors::getTextPlain(char *buffer) { return buffer; } -int ExtendedEventDescriptors::getMaximumTextItemizedLength() { +int ExtendedEventDescriptors::getMaximumTextItemizedLength(const char *separation1, const char *separation2) { int ret=0; + int sepLength=strlen(separation1)+strlen(separation2)-2; for (int i=0;i<length;i++) { ExtendedEventDescriptor *d=(ExtendedEventDescriptor *)array[i]; if (!d) continue; - //the size for the two separating characters is included ;-) - ret+=d->itemLoop.getLength(); + //The length includes two 8-bit length fields which have already been subtracted from sepLength + ret+=d->itemLoop.getLength()+sepLength; } return ret; } char *ExtendedEventDescriptors::getTextItemized(const char *separation1, const char *separation2) { - char *text=new char[getMaximumTextItemizedLength()+strlen(separation1)+strlen(separation2)]; + char *text=new char[getMaximumTextItemizedLength(separation1, separation2)]; return getTextItemized(text, separation1, separation2); } @@ -547,6 +549,10 @@ int SubtitlingDescriptor::Subtitling::getAncillaryPageId() const { void SubtitlingDescriptor::Subtitling::Parse() { s=data.getData<const item_subtitling>(); + languageCode[0]=s->lang_code1; + languageCode[1]=s->lang_code2; + languageCode[2]=s->lang_code3; + languageCode[3]=0; } int ServiceMoveDescriptor::getNewOriginalNetworkId() const { diff --git a/libsi/descriptor.h b/libsi/descriptor.h index 3368b0a..db3bba6 100644 --- a/libsi/descriptor.h +++ b/libsi/descriptor.h @@ -6,7 +6,7 @@ * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * - * $Id: descriptor.h 1.7 2004/03/07 11:13:54 kls Exp $ + * $Id: descriptor.h 1.9 2004/03/26 15:26:03 kls Exp $ * * ***************************************************************************/ @@ -50,7 +50,7 @@ private: class ExtendedEventDescriptors : public DescriptorGroup { public: - int getMaximumTextLength(); + int getMaximumTextLength(const char *separation1="\t", const char *separation2="\n"); //Returns a concatenated version of first the non-itemized and then the itemized text //same semantics as with SI::String char *getText(const char *separation1="\t", const char *separation2="\n"); @@ -66,7 +66,7 @@ public: //Between the description and the text the separation1 character is used, //separation2 used between two pairs. Example: //Director\tSteven Spielberg\nActor\tMichael Mendl\n - int getMaximumTextItemizedLength(); + int getMaximumTextItemizedLength(const char *separation1="\t", const char *separation2="\n"); char *getTextItemized(const char *separation1="\t", const char *separation2="\n"); char *getTextItemized(char *buffer, const char *separation1="\t", const char *separation2="\n"); //returns the itemized text pair by pair. Maximum length for buffers is 256. @@ -285,6 +285,7 @@ class SubtitlingDescriptor : public Descriptor { public: class Subtitling : public Descriptor { public: + char languageCode[4]; int getSubtitlingType() const; int getCompositionPageId() const; int getAncillaryPageId() const; |