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.