[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    extragear/multimedia/kaffeine/src/dvb
From:       Christoph Pfister <christophpfister () gmail ! com>
Date:       2010-11-30 22:12:39
Message-ID: 20101130221239.6C549AC8A3 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1202443 by pfister:

again calculate crc sum for dvb sec sections
- got removed during restructuring


 M  +13 -16    dvbdevice.cpp  
 M  +4 -3      dvbsi.cpp  
 M  +1 -2      dvbsi.h  


--- trunk/extragear/multimedia/kaffeine/src/dvb/dvbdevice.cpp #1202442:1202443
@@ -133,31 +133,27 @@
 
 void DvbSectionFilterInternal::processSections(bool force)
 {
-	const char *data = buffer.constBegin();
+	const char *it = buffer.constBegin();
 	const char *end = buffer.constEnd();
 
-	while (true) {
-		if (data >= end) {
-			break;
-		}
-
-		if (static_cast<unsigned char>(data[0]) == 0xff) {
+	while (it != end) {
+		if (static_cast<unsigned char>(it[0]) == 0xff) {
 			// table id == 0xff means padding
-			data = end;
+			it = end;
 			break;
 		}
 
-		if ((end - data) < 3) {
+		if ((end - it) < 3) {
 			if (force) {
 				kDebug() << "stray data";
-				data = end;
+				it = end;
 			}
 
 			break;
 		}
 
-		const char *sectionEnd = ((((static_cast<unsigned char>(data[1]) & 0x0f) << 8) |
-			static_cast<unsigned char>(data[2])) + 3 + data);
+		const char *sectionEnd = (it + (((static_cast<unsigned char>(it[1]) & 0x0f) << 8) |
+			static_cast<unsigned char>(it[2])) + 3);
 
 		if (force && (sectionEnd > end)) {
 			kDebug() << "short section";
@@ -165,20 +161,21 @@
 		}
 
 		if (sectionEnd <= end) {
-			int size = (sectionEnd - data);
+			int size = (sectionEnd - it);
+			int crc = DvbStandardSection::verifyCrc32(it, size);
 
 			for (int i = 0; i < sectionFilters.size(); ++i) {
-				sectionFilters.at(i)->processSection(data, size, 0); // FIXME
+				sectionFilters.at(i)->processSection(it, size, crc);
 			}
 
-			data = sectionEnd;
+			it = sectionEnd;
 			continue;
 		}
 
 		break;
 	}
 
-	buffer.remove(0, buffer.size() - (end - data));
+	buffer.remove(0, it - buffer.constBegin());
 }
 
 class DvbDataDumper : public QFile, public DvbPidFilter
--- trunk/extragear/multimedia/kaffeine/src/dvb/dvbsi.cpp #1202442:1202443
@@ -39,12 +39,13 @@
 	}
 }
 
-int DvbStandardSection::verifyCrc32() const
+int DvbStandardSection::verifyCrc32(const char *data, int size)
 {
 	unsigned int crc32 = 0xffffffff;
 
-	for (int i = 0; i < length; ++i) {
-		crc32 = (crc32 << 8) ^ crc32Table[(crc32 >> 24) ^ at(i)];
+	for (int i = 0; i < size; ++i) {
+		crc32 = ((crc32 << 8) ^
+			crc32Table[(crc32 >> 24) ^ static_cast<unsigned char>(data[i])]);
 	}
 
 	return crc32;
--- trunk/extragear/multimedia/kaffeine/src/dvb/dvbsi.h #1202442:1202443
@@ -142,8 +142,7 @@
 		return at(7);
 	}
 
-	int verifyCrc32() const;
-
+	static int verifyCrc32(const char *data, int size);
 	static const unsigned int crc32Table[];
 };
 
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic