From patchwork Mon May 22 14:11:23 2006 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Huelswitt X-Patchwork-Id: 12314 Received: from wp012.webpack.hosteurope.de ([80.237.132.19]) by www.linuxtv.org with esmtp (Exim 4.50) id 1FiB9B-0005CS-HK for vdr@linuxtv.org; Mon, 22 May 2006 16:12:37 +0200 Received: by wp012.webpack.hosteurope.de running Exim 4.43 using esmtpsa (TLSv1:DES-CBC3-SHA:168) from ip4.35.1411p-cud12k-02.ish.de ([62.143.35.4] helo=video.local.muempf.de) id 1FiB8c-0007dp-OW; Mon, 22 May 2006 16:12:02 +0200 Received: from video.local.muempf.de (localhost [127.0.0.1]) by video.local.muempf.de (8.12.6/8.12.6/SuSE Linux 0.6) with ESMTP id k4MEBNUF014970 for ; Mon, 22 May 2006 16:11:23 +0200 Received: (from news@localhost) by video.local.muempf.de (8.12.6/8.12.6/Submit) id k4MEBNCW014969 for vdr@linuxtv.org; Mon, 22 May 2006 16:11:23 +0200 To: vdr@linuxtv.org Path: not-for-mail From: s.huelswitt@gmx.de (Stefan Huelswitt) Newsgroups: local.linux.vdr Date: Mon, 22 May 2006 14:11:23 +0000 (UTC) Organization: Home, sweet home Lines: 139 Sender: nathan@gmx.de Message-ID: NNTP-Posting-Host: master.local.muempf.de Mime-Version: 1.0 X-Trace: video.local.muempf.de 1148307083 6097 192.168.1.1 (22 May 2006 14:11:23 GMT) X-Complaints-To: s.huelswitt@gmx.de NNTP-Posting-Date: Mon, 22 May 2006 14:11:23 +0000 (UTC) X-Newsreader: knews 1.0b.1 Subject: [vdr] libsi Premiere content descriptor erroneous X-BeenThere: vdr@linuxtv.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: VDR Mailing List List-Id: VDR Mailing List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 22 May 2006 14:12:37 -0000 Status: O X-Status: X-Keywords: X-UID: 9558 Hi, the implementation of the Premiere content descriptor in libsi is erroneous. The list of starttimes is a nested structure. The outer structure gives the day and the inner structure give the times for this day. The attached patch fixes the code. Regards. diff -ur vdr-1.4.0-orig/libsi/descriptor.c vdr-1.4.0/libsi/descriptor.c --- vdr-1.4.0-orig/libsi/descriptor.c 2006-04-17 14:19:15.000000000 +0200 +++ vdr-1.4.0/libsi/descriptor.c 2006-05-22 15:32:12.000000000 +0200 @@ -806,21 +806,34 @@ return HILO(s->service_id); } -int PremiereContentTransmissionDescriptor::getMJD() const { +void PremiereContentTransmissionDescriptor::Parse() { + s=data.getData(); + startDayLoop.setData(data+sizeof(descr_premiere_content_transmission), getLength()-sizeof(descr_premiere_content_transmission)); +} + +int PremiereContentTransmissionDescriptor::StartDayEntry::getMJD() const { return HILO(s->mjd); } -void PremiereContentTransmissionDescriptor::Parse() { - s=data.getData(); - startTimeLoop.setData(data+sizeof(descr_premiere_content_transmission), getLength()-sizeof(descr_premiere_content_transmission)); +int PremiereContentTransmissionDescriptor::StartDayEntry::getLoopLength() const { + return s->start_time_loop; +} + +int PremiereContentTransmissionDescriptor::StartDayEntry::getLength() { + return sizeof(item_premiere_content_transmission_day)+getLoopLength(); +} + +void PremiereContentTransmissionDescriptor::StartDayEntry::Parse() { + s=data.getData(); + startTimeLoop.setData(data+sizeof(item_premiere_content_transmission_day), getLoopLength()); } -time_t PremiereContentTransmissionDescriptor::StartTimeEntry::getStartTime(int mjd) const { +time_t PremiereContentTransmissionDescriptor::StartDayEntry::StartTimeEntry::getStartTime(int mjd) const { return DVBTime::getTime(mjd >> 8, mjd & 0xff, s->start_time_h, s->start_time_m, s->start_time_s); } -void PremiereContentTransmissionDescriptor::StartTimeEntry::Parse() { - s=data.getData(); +void PremiereContentTransmissionDescriptor::StartDayEntry::StartTimeEntry::Parse() { + s=data.getData(); } void ApplicationSignallingDescriptor::Parse() { diff -ur vdr-1.4.0-orig/libsi/descriptor.h vdr-1.4.0/libsi/descriptor.h --- vdr-1.4.0-orig/libsi/descriptor.h 2006-04-14 12:53:44.000000000 +0200 +++ vdr-1.4.0/libsi/descriptor.h 2006-05-22 15:30:41.000000000 +0200 @@ -490,20 +490,30 @@ class PremiereContentTransmissionDescriptor : public Descriptor { public: - class StartTimeEntry : public LoopElement { + class StartDayEntry : public LoopElement { public: - virtual int getLength() { return sizeof(item_premiere_content_transmission_reference); } - time_t getStartTime(int mjd) const; //UTC + class StartTimeEntry : public LoopElement { + public: + virtual int getLength() { return sizeof(item_premiere_content_transmission_time); } + time_t getStartTime(int mjd) const; //UTC + protected: + virtual void Parse(); + private: + const item_premiere_content_transmission_time *s; + }; + StructureLoop startTimeLoop; + virtual int getLength(); + int getMJD() const; + int getLoopLength() const; protected: virtual void Parse(); private: - const item_premiere_content_transmission_reference *s; + const item_premiere_content_transmission_day *s; }; - StructureLoop startTimeLoop; + StructureLoop startDayLoop; int getOriginalNetworkId() const; int getTransportStreamId() const; int getServiceId() const; - int getMJD() const; protected: virtual void Parse(); private: diff -ur vdr-1.4.0-orig/libsi/headers.h vdr-1.4.0/libsi/headers.h --- vdr-1.4.0-orig/libsi/headers.h 2006-04-14 12:53:44.000000000 +0200 +++ vdr-1.4.0/libsi/headers.h 2006-05-22 14:51:20.000000000 +0200 @@ -1790,7 +1790,7 @@ // 0xF2 Content Transmission Descriptor // http://dvbsnoop.sourceforge.net/examples/example-private-section.html -#define DESCR_PREMIERE_CONTENT_TRANSMISSION_LEN 11 +#define DESCR_PREMIERE_CONTENT_TRANSMISSION_LEN 8 struct descr_premiere_content_transmission { u_char descriptor_tag :8; @@ -1801,14 +1801,19 @@ u_char original_network_id_lo :8; u_char service_id_hi :8; u_char service_id_lo :8; +}; + +#define ITEM_PREMIERE_CONTENT_TRANSMISSION_DAY_LEN 3 + +struct item_premiere_content_transmission_day { u_char mjd_hi :8; u_char mjd_lo :8; u_char start_time_loop :8; }; -#define ITEM_PREMIERE_CONTENT_TRANSMISSION_LEN 3 +#define ITEM_PREMIERE_CONTENT_TRANSMISSION_TIME_LEN 3 -struct item_premiere_content_transmission_reference { +struct item_premiere_content_transmission_time { u_char start_time_h :8; u_char start_time_m :8; u_char start_time_s :8;