Fix:Box nimmt nach Streamabbruch nicht mehr in SPTS auf

Das Original Benutzerinterface Neutrino-SD incl. zapit, sectionsd, yWeb etc...
Papst
Developer
Beiträge: 279
Registriert: Mittwoch 26. Juni 2002, 22:19

Fix:Box nimmt nach Streamabbruch nicht mehr in SPTS auf

Beitrag von Papst »

Ok, ich fange mal so an:
Box läuft im PES Mode
In den Aufnahmeeinstellungen ist "Im SPTS Modus aufnehmen" aktiviert

Wenn man nun aufnimmt läuft alles wunderbar. Die Box schaltet in den SPTS Mode und die Aufnahme beginnt. ABER wenn nun die Aufnahme kurz abbricht (Zu hohe Bitrate, was auch immer) und dann weiterläuft wird kein ts File mehr geschrieben, sondern diese *.0 *.1 Files. Somit war es für mich immer zu unzuverlässig die Box im PES laufen zu lassen und nur im SPTS aufzunehmen.
Kurzum, ich hab mich grad mal in den Quellcode vertieft und den Fehler gefunden.
Es liegt daran das nach einem Aufnahmeabbruch CVCRControl::CFileDevice::Record erneut aufgerufen, die Variable bool sptsmode aber mit dem Standardwert aus g_settings.misc_spts neu initialisiert wird. Das ist aber in dem oben beschriebenen Fall falsch.

Mit diesem Patch wird sichergestellt das die Variable in genau dem obigen Fall korrekterweise auf true steht.

Code: Alles auswählen

--- vcrcontrol.cppOLD	Wed Sep 13 02:19:53 2006
+++ vcrcontrol.cpp	Wed Sep 13 02:18:53 2006
@@ -681,6 +681,9 @@
 		}
 		sptsmode = false;
 	}
+	if (actmode == 1 && g_settings.recording_in_spts_mode && !sptsmode && mode == 1) {
+		sptsmode = true;
+	}
 
 #define MAXPIDS		64
 	unsigned short pids[MAXPIDS];
Geht vielleicht auch eleganter. Allerdings funktioniert es hier mit dieser kleinen Änderung jetzt bestens.
Wär gut wenn ihr es mal testet und dann eincheckt.
Zuletzt geändert von Papst am Samstag 16. September 2006, 03:29, insgesamt 1-mal geändert.
Gruß

Der Papst
Z80
Erleuchteter
Erleuchteter
Beiträge: 710
Registriert: Dienstag 3. September 2002, 12:54

Re: Fix: "Box nimmt nach Streamabbruch nicht mehr in SP

Beitrag von Z80 »

Papst hat geschrieben:Kurzum, ich hab mich grad mal in den Quellcode vertieft und den Fehler gefunden.
...
Mit diesem Patch wird sichergestellt das die Variable in genau dem obigen Fall korrekterweise auf true steht.
ich könnt dich knutschen! dieser fehler nervt mich schon lange. Danke! :D :P
Tommy
Tuxboxer
Tuxboxer
Beiträge: 4332
Registriert: Dienstag 7. Mai 2002, 17:04

Beitrag von Tommy »

Das Ende des knarzens :lol: Aus o.g. Grund habe ich bis jetzt DauerSPTS an. Vllt kans mal jemand gaaaaaanz schnell einchecken :wink:
---------------------------
Alle weiteren Infos findest Du im WIKI
Bitte vor dem posten Boardregeln lesen und verstehen!
Wie erstelle ich ein Bootlog? Wo finde ich die FAQ?
Houdini
Developer
Beiträge: 2183
Registriert: Mittwoch 10. Dezember 2003, 07:59

Beitrag von Houdini »

3:0 -> eingecheckt
kroki
Einsteiger
Einsteiger
Beiträge: 166
Registriert: Dienstag 22. Juni 2004, 22:12

Beitrag von kroki »

Da fehlt aber noch ene Declaration von actmode, oder ?

Gibt jedenfalls ene Fehlermeldung

Kroki
Houdini
Developer
Beiträge: 2183
Registriert: Mittwoch 10. Dezember 2003, 07:59

Beitrag von Houdini »

nöö...
kroki
Einsteiger
Einsteiger
Beiträge: 166
Registriert: Dienstag 22. Juni 2004, 22:12

Beitrag von kroki »

Sorry mein Fehler.... bin grad auf der Suche... hatte das wohl schon vor einiger Zeit mal gepacht .... :gruebel:

Kroki
petb
Erleuchteter
Erleuchteter
Beiträge: 785
Registriert: Samstag 6. August 2005, 03:39

Beitrag von petb »

Hi,

laienhaft gefragt:
klappt das nun auch besser, wenn zwei Aufnahmen direkt hintereinander liegen ?
Also Ende = 21:15 und Start=21:15 ?
Danke
Bye
PetB
1 x DBOX2 Phillips, 1 x DBOX2 Nokia, 1 x DBOX2 Sagem, 100er Gibertini (Astra / Hotbird), NFS Server
Papst
Developer
Beiträge: 279
Registriert: Mittwoch 26. Juni 2002, 22:19

Beitrag von Papst »

Da meine Box nun im PES Mode läuft und nur zum Aufnehmen in den SPTS Mode schaltet, kann ich nun auch endlich den "Dolby Digital Default" Modus nutzen(Mit avia600vb022 geht ja Ac3 mit spts nicht).
Das Problem ist jetzt aber, dass der Avia sich bei Aufnahmebeginn weghängt, da ja noch die Ac3 Pid aktiv ist wenn in den SPTS Mode geschaltet wird.
Mit der Änderung wird vor der Aufnahme im SPTS Mode auf die Standardtonspur gewechselt. Wenn die Aufnahme beendet ist wird die AC3 Tonspur wieder hergestellt. Die Änderung in der Zapit war nötig damit man während der Aufnahme auf dem Transponder umschalten kann ohne das wieder eine AC3 Pid gesetzt wird. Bei der vcrcontrol und der remotecontrol dürfte es eigentlich keine Seiteneffekte geben. Bei der zapit bin ich mir nicht so sicher, auch wenn hier alles bestens läuft. Die Zapitänderung bewirkt eigentlich nur das im Record Mode immer die Standardtonspur benutzt wird. Anregungen und Vorschläge werden immer gerne genommen.
Auf jeden Fall kann man jetzt mit dem avia600vb022 µcode Dolby Digital standardmäßig benutzen und gleichzeitig ohne Einschränkungen aufnehmen.

vcrcontrol.cpp

Code: Alles auswählen

--- vcrcontrol.cppOLD	Fri Sep 15 02:27:31 2006
+++ vcrcontrol.cpp	Fri Sep 15 02:36:50 2006
@@ -631,9 +631,26 @@
 	bool return_value = (::stop_recording() == STREAM2FILE_OK);
 
 	int actmode=g_Zapit->PlaybackState(); // get actual decoder mode
-	if ((actmode == 1) && (!g_settings.misc_spts)) // actual mode is SPTS and settings require PES
+	if ((actmode == 1) && (!g_settings.misc_spts)) { // actual mode is SPTS and settings require PES
+		int repeatcount=0;
 		g_Zapit->PlaybackPES(); // restore PES mode
+		while ((repeatcount++ < 10) && (g_Zapit->PlaybackState() != 0)) {
+			sleep(1); 
+		}
+	}
 
+	//If Dolby Digital Default is selected, restore ac3 pid after recording
+	if (g_settings.audio_DolbyDigital) {
+		CZapitClient::responseGetPIDs allpids;
+		g_Zapit->getPIDS(allpids);
+		for (unsigned int i = 0; i < allpids.APIDs.size(); i++) {
+			if (allpids.APIDs[i].is_ac3) {
+				g_Zapit->setAudioChannel(i);
+				break;
+			}
+		}
+	}
+	
 	RestoreNeutrino();
 
 	deviceState = CMD_VCR_STOP;
@@ -663,7 +680,8 @@
 
 	// aviaEXT is loaded, actual mode is not SPTS and switchoption is set , only in tvmode
 	if ((actmode == 0) && g_settings.recording_in_spts_mode && mode == 1)
-	{
+	{	
+		g_Zapit->setAudioChannel(0);		
 		g_Zapit->PlaybackSPTS();
 		while ((repeatcount++ < 10) && (g_Zapit->PlaybackState() != 1)) {
 			sleep(1); 
@@ -681,10 +699,10 @@
 		}
 		sptsmode = false;
 	}
-
+	
 	if (actmode == 1 && g_settings.recording_in_spts_mode && !sptsmode && mode == 1) {
 		sptsmode = true;
-	}
+	}			
 
 #define MAXPIDS		64
 	unsigned short pids[MAXPIDS];
remotecontrol.cpp

Code: Alles auswählen

--- remotecontrol.cppOLD	Fri Sep 15 02:43:46 2006
+++ remotecontrol.cpp	Fri Sep 15 02:44:46 2006
@@ -260,7 +260,7 @@
 			t_channel_id * p = new t_channel_id;
 			*p = current_channel_id;
 			g_RCInput->postMsg(NeutrinoMessages::EVT_ZAP_GOTPIDS, (const neutrino_msg_data_t)p, false); // data is pointer to allocated memory
-
+			
 			processAPIDnames();
 		}
 	    return messages_return::handled;
@@ -445,8 +445,8 @@
 					}
 					e++;
 				}
-
-				if ( g_settings.audio_DolbyDigital == 1)
+				
+				if ( g_settings.audio_DolbyDigital == 1 && !g_Zapit->isRecordModeActive())
 				{
 					for (unsigned int j=0; j< current_PIDs.APIDs.size(); j++)
 						if ( current_PIDs.APIDs[j].is_ac3 )
@@ -486,7 +486,7 @@
 	if ((current_PIDs.PIDs.selected_apid == APID ) ||
 	    (APID >= current_PIDs.APIDs.size()))
 		return;
-
+		
 	current_PIDs.PIDs.selected_apid = APID;
 	g_Zapit->setAudioChannel( APID );
 }
zapit.cpp

Code: Alles auswählen

--- zapit.cppOLD	Fri Sep 15 02:46:57 2006
+++ zapit.cpp	Fri Sep 15 02:11:17 2006
@@ -915,8 +915,12 @@
 			WARN("pmt parsing failed");
 			failed = true;
 		}
-
-      thisChannel->setAudioChannel(audioChannel);
+			
+			if (currentMode & RECORD_MODE) {
+      	thisChannel->setAudioChannel(0);
+      } else {
+      	thisChannel->setAudioChannel(audioChannel);
+    	}
 
 		if ((!failed) && (thisChannel->getAudioPid() == NONE) && (thisChannel->getVideoPid() == NONE)) {
 			WARN("neither audio nor video pid found");
Wär gut wenn ihr mal was dazu sagt und das Ganze testet.

Edit: Kleine Änderung im remotecontrol diff.
Gruß

Der Papst
Papst
Developer
Beiträge: 279
Registriert: Mittwoch 26. Juni 2002, 22:19

Beitrag von Papst »

@petb
Habe grade mal ein paar Aufnahmen getestet die in der selben Minute aufhören und wieder anfangen. Läuft problemlos.

@all
Wie siehts mit den anderen Änderungen aus? Keiner ne Meinung
Gruß

Der Papst
schlori74
Neugieriger
Neugieriger
Beiträge: 4
Registriert: Montag 8. Januar 2007, 20:23

Beitrag von schlori74 »

Hallo Papst,

sehr interessiert habe ich deinen Thread gelesen ... das SPTS Problem nervt mich auch. Leider kenne ich mich noch nicht sehr gut aus. Daher meine Frage, was muss ich genau machen, um deine Lösung bei mir umsetzen zu können?
Vorab vielen Dank für deine Antwort.
Gruß,
Schlori
wolgade
Semiprofi
Semiprofi
Beiträge: 1313
Registriert: Donnerstag 2. Dezember 2004, 00:18

Beitrag von wolgade »

Öh, der Thread ist schon älter. Wenn du ein aktuelles Image benutzt, mußt du gar nichts machen, da der Patch dort schon mit drin ist.
schlori74
Neugieriger
Neugieriger
Beiträge: 4
Registriert: Montag 8. Januar 2007, 20:23

Beitrag von schlori74 »

Vielen Dank für die Antwort. Hätte da noch folgende Fragen:
- Was wäre denn ein solches Image?
- bzw. wie komme ich denn an den Patch heran? Muß ich den programmieren und compilieren?
Danke vorab für die Antwort
wolgade
Semiprofi
Semiprofi
Beiträge: 1313
Registriert: Donnerstag 2. Dezember 2004, 00:18

Beitrag von wolgade »