DVR Aufnahmen verbessern

Alles rund um das grafische Benutzerinterface Enigma
mrvica
Einsteiger
Einsteiger
Beiträge: 342
Registriert: Freitag 24. September 2004, 12:48

DVR Aufnahmen verbessern

Beitrag von mrvica »

dbluelle 10/09/19 14:24:40

Modified: tuxbox/enigma/lib/dvb servicedvb.cpp
Log:
better skipping on recordings with low bitrate (still not really good because I don't fully understand how the buffering works...)
auf der dbox2 gibts Probleme mit Sendern die mit hoher Bitrate senden wie ARD, ZDF. Ich habe den Buffer in record.cpp halbiert und bekomme jetzt bei den genannten Sendern bessere Aufnahmen, anstatt 512k, kleinerer 256k Buffer, da ts Filegrösse ein vielfaches von 188 Bytes sein muss ist der Buffer nicht exakt 256x1024 Bytes gross, etwas kleiner, um mir die ganze Rechnerei zu ersparen, habe ich einfach CVS Werte halbiert, habe anschliessend Testaufnahmen gemacht, die Programme melden kein icorrect File Size, auch keine Probleme mit Slices (Schnippseln), habe 1GB Schnippsel angelegt, ProjectX fügt sie anstandslos zusammen, habe den Code vorerst für dbox2 abgetrennt, kannst du mal mit 256k Buffer auf der Dream testen, fals OK könnte man dann den Code vereinfachen.

record.cpp.diff

Code: Alles auswählen

--- record.cpp	Mon Jan 04 22:24:56 2010
+++ record.cpp	Fri May 14 18:31:38 2010
@@ -10,6 +10,7 @@
 #include <lib/dvb/servicedvb.h>
 #include <lib/system/file_eraser.h>
 #include <lib/system/econfig.h>
+#include <lib/system/info.h>
 #include <signal.h>
 
 #ifndef DMX_LOW_BITRATE
@@ -210,7 +211,7 @@
 	PatPmtWrite();
 	while (state == stateRunning)
 	{
-		int rd = 524144-bufptr;
+		int rd = eSystemInfo::getInstance()->getHwType() < 3 ? (262072-bufptr) : (524144-bufptr);
 		if ( rd > 65424 )
 			rd = 65424;
 		int r = ::read(dvrfd, buf+bufptr, rd);
@@ -241,13 +242,14 @@
 		/* note that some dvr devices occasionally return EOF, we should ignore that */
 
 		bufptr += r;
+		int buf2 = eSystemInfo::getInstance()->getHwType() < 3 ? 262071 : 524143;
 
 		if ( writePatPmt )  // is set in SAHandler
 		{
 			PatPmtWrite();
 			writePatPmt=false;
 		}
-		else if ( bufptr > 524143 )
+		else if ( bufptr > buf2 )
 			flushBuffer();
 	}
 	alarm(0);
@@ -271,6 +273,7 @@
 			for (ePtrList<PMTEntry>::iterator i(pmt->streams); i != pmt->streams.end(); ++i)
 			{
 				int record=0;
+				int isUndocumentedNA = 0;
 				switch (i->stream_type)
 				{
 					case 1:	// video..
@@ -281,6 +284,11 @@
 					case 4:
 						record=1;
 						break;
+					case 0x80:
+					case 0x81:
+					case 0x82:
+					case 0x83:
+						isUndocumentedNA = 1;
 					case 6:
 					for (ePtrList<Descriptor>::iterator it(i->ES_info); it != i->ES_info.end(); ++it)
 					{
@@ -294,6 +302,12 @@
 									record=1;
 								break;
 							}
+							case DESCR_ISO639_LANGUAGE:
+								if (isUndocumentedNA)
+								{
+									record = 1;
+								}
+								break;
 #ifdef RECORD_TELETEXT
 							case DESCR_TELETEXT:
 							{
@@ -667,10 +681,11 @@
 	__u8 secbuf[4300];  // with ts overhead...
 
 	int len = section2ts(secbuf, (__u8*)data, pid, cc);
+	int buf2 = eSystemInfo::getInstance()->getHwType() < 3 ? 262071 : 524143;
 
 	if ( len )
 	{
-		if ( (bufptr+len) > 524143 )
+		if ( (bufptr+len) > buf2 )
 			flushBuffer();
 
 		memcpy(buf+bufptr, secbuf, len);
dieses "isUnodocumentedNA" habe ich aus den PLi Sourcen, weiss nicht um welche undokumentierte Streams sich dabei handelt, fals man das in record.cpp einfügt, muss dasselbe dann in edvb.cpp eingetragen werden

edvb.cpp.diff

Code: Alles auswählen

--- edvb.cpp	Sun Jul 19 14:59:28 2009
+++ edvb.cpp	Fri May 14 00:13:19 2010
@@ -259,6 +259,7 @@
 		for (ePtrList<PMTEntry>::iterator i(pmt->streams); i != pmt->streams.end(); ++i)
 		{
 			int record=0;
+			int isUndocumentedNA = 0;
 			switch (i->stream_type)
 			{
 			case 1:	// video..
@@ -269,6 +270,11 @@
 			case 4:
 				record=1;
 				break;
+			case 0x80:
+			case 0x81:
+			case 0x82:
+			case 0x83:
+				isUndocumentedNA = 1;
 			case 6:
 				for (ePtrList<Descriptor>::iterator it(i->ES_info); it != i->ES_info.end(); ++it)
 				{
@@ -282,6 +288,12 @@
 								record=1;
 							break;
 						}
+						case DESCR_ISO639_LANGUAGE:
+							if (isUndocumentedNA)
+							{
+								record = 1;
+							}
+							break;
 #ifdef RECORD_TELETEXT
 						case DESCR_TELETEXT:
 						{
mrvica
dbluelle
Contributor
Beiträge: 319
Registriert: Samstag 29. Mai 2004, 18:49

Re: DVR Aufnahmen verbessern

Beitrag von dbluelle »

Auf der Dreambox gibts keine Probleme.

Ich habe das leicht abgewandelt ins CVS eingecheckt.

dbluelle