| Ludger Kraemer on Sat, 1 Mar 2008 18:40:18 +0100 (CET) |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| apps/tuxbox/enigma/src enigma_main.cpp enigma_main.h enigma_setup.cpp enigma_setup.h sselect.cpp |
dbluelle 08/03/01 18:40:18
Modified: tuxbox/enigma/src enigma_main.cpp enigma_main.h
enigma_setup.cpp enigma_setup.h sselect.cpp
Log:
Add support for permanent timeshift
Revision Changes Path
1.334 +105 -8 apps/tuxbox/enigma/src/enigma_main.cpp
file : http://cvs.tuxbox.org/tuxbox/apps/tuxbox/enigma/src/enigma_main.cpp?rev=1.334&content-type=text/vnd.viewcvs-markup
plain: http://cvs.tuxbox.org/tuxbox/apps/tuxbox/enigma/src/enigma_main.cpp?rev=1.334&content-type=text/plain
revision graph: http://cvs.tuxbox.org/tuxbox/apps/tuxbox/enigma/src/enigma_main.cpp?graph=1.334
diff : http://cvs.tuxbox.org/tuxbox/apps/tuxbox/enigma/src/enigma_main.cpp.diff?r1=1.333&r2=1.334
Index: enigma_main.cpp
===================================================================
RCS file: /cvs/tuxbox/apps/tuxbox/enigma/src/enigma_main.cpp,v
retrieving revision 1.333
retrieving revision 1.334
diff -u -r1.333 -r1.334
--- enigma_main.cpp 19 Jan 2008 16:54:05 -0000 1.333
+++ enigma_main.cpp 1 Mar 2008 17:40:17 -0000 1.334
@@ -60,15 +60,12 @@
#include <src/time_correction.h>
#include <lib/driver/audiodynamic.h>
- // bis waldi das in nen .h tut
-#define MOVIEDIR "/hdd/movie"
-
struct enigmaMainActions
{
eActionMap map;
eAction showMainMenu, standby_press, standby_nomenu_press, standby_repeat, standby_release,
showInfobar, hideInfobar, showInfobarEPG, showServiceSelector,
- showSubservices, showAudio, pluginVTXT, pluginExt, showEPGList, showEPG,
+ showSubservices, showAudioOrPause, showAudio, pluginVTXT, pluginExt, showEPGList, showEPG,
nextSubService, prevSubService, nextService, prevService,
playlistNextService, playlistPrevService, serviceListDown,
serviceListUp, volumeUp, volumeDown, toggleMute,
@@ -94,6 +91,7 @@
showInfobarEPG(map, "showInfobarEPG", _("show infobar or EPG"), eAction::prioDialog),
showServiceSelector(map, "showServiceSelector", _("show service selector"), eAction::prioDialog),
showSubservices(map, "showSubservices", _("show subservices/NVOD"), eAction::prioDialog),
+ showAudioOrPause(map, "showAudioOrPause", _("show audio selector"), eAction::prioDialog),
showAudio(map, "showAudio", _("show audio selector"), eAction::prioDialog),
pluginVTXT(map, "pluginVTXT", _("show Videotext"), eAction::prioDialog),
pluginExt(map, "pluginExt", _("show extension Plugins"), eAction::prioDialog),
@@ -1561,7 +1559,7 @@
,timeout(eApp)
,clocktimer(eApp), messagetimeout(eApp), progresstimer(eApp)
,volumeTimer(eApp), recStatusBlink(eApp), doubleklickTimer(eApp)
- ,unusedTimer(eApp), currentSelectedUserBouquet(0), timeshift(0)
+ ,unusedTimer(eApp), permanentTimeshiftTimer(eApp), currentSelectedUserBouquet(0), timeshift(0)
,skipping(0)
,state(0)
,wasSleeping(0)
@@ -1727,6 +1725,7 @@
ASSIGN(ButtonGreenDis, eLabel, "button_green_disabled");
ASSIGN(ButtonYellowDis, eLabel, "button_yellow_disabled");
ASSIGN(ButtonBlueDis, eLabel, "button_blue_disabled");
+ ASSIGN(AudioOrPause,eLabel, "AudioOrPause");
ASSIGN(DolbyOn, eLabel, "osd_dolby_on");
ASSIGN(CryptOn, eLabel, "osd_crypt_on");
@@ -1778,6 +1777,7 @@
CONNECT(volumeTimer.timeout, eZapMain::hideVolumeSlider );
#ifndef DISABLE_FILE
CONNECT(recStatusBlink.timeout, eZapMain::blinkRecord);
+ CONNECT(permanentTimeshiftTimer.timeout, eZapMain::startPermanentTimeshift);
#endif
CONNECT( eFrontend::getInstance()->s_RotorRunning, eZapMain::onRotorStart );
@@ -2964,6 +2964,12 @@
void eZapMain::showInfobar(bool startTimeout)
{
+ int tmp = 0;
+ eConfig::getInstance()->getKey("/enigma/timeshift/activatepausebutton", tmp );
+ unsigned char pause = (unsigned char) tmp;
+ AudioOrPause->setText(pause ? _("Pause") : _("audio track"));
+
+
if ( !isVisible() && eApp->looplevel() == 1 &&
( !currentFocus || currentFocus == this ) )
show();
@@ -3088,6 +3094,13 @@
}
}
}
+ else if (timeshift == 2) // permanent timeshift
+ {
+ Decoder::Pause(2); // freeze frame
+ Decoder::setAutoFlushScreen(0);
+ handler->serviceCommand(eServiceCommand(eServiceCommand::cmdSetSpeed, 0));
+ Decoder::setAutoFlushScreen(1);
+ }
else
handler->serviceCommand(eServiceCommand(eServiceCommand::cmdSetSpeed, 0));
}
@@ -3129,6 +3142,7 @@
if (onoff) // start recording
{
+ stopPermanentTimeshift();
if ( freeRecordSpace() < 10) // less than 10MB free (or directory not found)
{
handleServiceEvent(eServiceEvent(eServiceEvent::evtRecordFailed));
@@ -3400,7 +3414,9 @@
{
switch (handler->getState())
{
- case eServiceHandler::statePause:
+ case eServiceHandler::statePause:
+ pause();// continue playing in preparation for skipping
+ break;
case eServiceHandler::stateStopped:
return;
default:
@@ -3735,9 +3751,12 @@
int ret = mb.exec();
mb.hide();
if (ret == eMessageBox::btYes)
+ {
+ stopPermanentTimeshift();
// we do hardly shutdown the box..
// any pending timers are ignored
eZap::getInstance()->quit();
+ }
break;
}
case 6: // force .. ( Sleeptimer )
@@ -3755,9 +3774,12 @@
int ret = mb.exec();
mb.hide();
if (ret == eMessageBox::btYes)
+ {
+ stopPermanentTimeshift();
// use message_notifier to goto sleep...
// we will not block the mainloop...
gotoStandby();
+ }
}
else
eZapStandby::getInstance()->renewSleep();
@@ -4604,6 +4626,62 @@
currentSelectedUserBouquet->getList().push_back(service);
}
+#ifndef DISABLE_FILE
+void eZapMain::startPermanentTimeshift()
+{
+
+ if ( state & stateRecording ) // no timeshift when recording
+ return;
+ if ( freeRecordSpace() < 10) // less than 10MB free
+ return;
+ eDebug("starting permanent timeshift ...");
+
+ state |= recPermanentTimeshift;
+ eServiceHandler *handler=eServiceInterface::getInstance()->getService();
+ if (handler->serviceCommand(eServiceCommand(eServiceCommand::cmdRecordOpenPermanentTimeshift)))
+ {
+ state &= ~(recPermanentTimeshift);
+ eDebug("couldn't start permanent timeshift ... :/");
+ } else
+ {
+ handler->serviceCommand(eServiceCommand(eServiceCommand::cmdRecordStart));
+ timeshift = 2;
+ }
+}
+void eZapMain::stopPermanentTimeshift()
+{
+ eDebug("stopping permanent timeshift ...");
+ permanentTimeshiftTimer.stop();
+ eServiceHandler *handler=eServiceInterface::getInstance()->getServiceHandler(eServiceReference::idDVB);
+ timeshift = 0;
+ if (state & recPermanentTimeshift)
+ {
+ if (!handler)
+ return;
+ eDebug("stopping permanent timeshift with handler...");
+ state &= ~(recPermanentTimeshift);
+ handler->serviceCommand(eServiceCommand(eServiceCommand::cmdRecordStop));
+ handler->serviceCommand(eServiceCommand(eServiceCommand::cmdRecordClose));
+ }
+}
+
+void eZapMain::beginPermanentTimeshift()
+{
+ if ( !(state & stateRecording) && !(state & recPermanentTimeshift) && (mode == modeTV || mode == modeRadio))
+ {
+ int permanentOn = 0;
+ eConfig::getInstance()->getKey("/enigma/timeshift/permanent", permanentOn );
+ if (permanentOn)
+ {
+ // start timer for permanent timeshift
+ int permanentdelay = 0;
+ eConfig::getInstance()->getKey("/enigma/timeshift/permanentdelay", permanentdelay );
+ eDebug("starting timeout for permanent timeshift:%d",permanentdelay);
+ permanentTimeshiftTimer.start(permanentdelay*1000, 1);
+ }
+ }
+}
+#endif
void eZapMain::playService(const eServiceReference &service, int flags)
{
int first=0;
@@ -4615,6 +4693,7 @@
goto zap;
#ifndef DISABLE_FILE
+ stopPermanentTimeshift();
if ( !canPlayService(service) )
<<Truncated>>
1.106 +7 -3 apps/tuxbox/enigma/src/enigma_main.h
file : http://cvs.tuxbox.org/tuxbox/apps/tuxbox/enigma/src/enigma_main.h?rev=1.106&content-type=text/vnd.viewcvs-markup
plain: http://cvs.tuxbox.org/tuxbox/apps/tuxbox/enigma/src/enigma_main.h?rev=1.106&content-type=text/plain
revision graph: http://cvs.tuxbox.org/tuxbox/apps/tuxbox/enigma/src/enigma_main.h?graph=1.106
diff : http://cvs.tuxbox.org/tuxbox/apps/tuxbox/enigma/src/enigma_main.h.diff?r1=1.105&r2=1.106
Index: enigma_main.h
===================================================================
RCS file: /cvs/tuxbox/apps/tuxbox/enigma/src/enigma_main.h,v
retrieving revision 1.105
retrieving revision 1.106
diff -u -r1.105 -r1.106
--- enigma_main.h 21 Feb 2007 09:39:54 -0000 1.105
+++ enigma_main.h 1 Mar 2008 17:40:17 -0000 1.106
@@ -331,7 +331,7 @@
friend class eSubServiceSelector;
public:
enum { modeTV, modeRadio, modeFile, modeEnd };
- enum { stateSleeping=2, stateInTimerMode=4, stateRecording=8, recDVR=16, recVCR=32, recNgrab=64, statePaused=128 };
+ enum { stateSleeping=2, stateInTimerMode=4, stateRecording=8, recDVR=16, recVCR=32, recNgrab=64, statePaused=128, recPermanentTimeshift=256 };
enum { messageGoSleep=2, messageShutdown, messageNoRecordSpaceLeft, messageWakeUp, messageCheckVCR };
enum { pathBouquets=1, pathProvider=2, pathRecordings=4, pathPlaylist=8, pathAll=16, pathRoot=32, pathSatellites=64 };
enum { listAll, listSatellites, listProvider, listBouquets };
@@ -346,7 +346,7 @@
*ButtonBlueEn, *ButtonBlueDis,
*DolbyOn, *DolbyOff, *CryptOn, *CryptOff, *WideOn, *WideOff, *recstatus,
mute, volume,
- *DVRSpaceLeft;
+ *DVRSpaceLeft,*AudioOrPause;
eWidget *dvrInfoBar, *dvbInfoBar, *fileInfoBar;
@@ -378,7 +378,7 @@
eTimer timeout, clocktimer, messagetimeout,
progresstimer, volumeTimer, recStatusBlink,
- doubleklickTimer, unusedTimer;
+ doubleklickTimer, unusedTimer, permanentTimeshiftTimer;
/* SNR,AGC,BER DISPLAY */
eTimer *snrTimer;
/* SNR,AGC,BER DISPLAY */
@@ -457,6 +457,7 @@
void skipLoop();
enum { skipForward, skipReverse };
int isRecording() {return state & stateRecording;}
+ int isRecordingPermanentTimeshift() {return state & recPermanentTimeshift;}
int dvrActive(void) {return dvrfunctions;}
#endif
int isSleeping() {return state & stateSleeping;}
@@ -564,6 +565,7 @@
void deleteFile(eServiceSelector *);
void renameFile(eServiceSelector *);
void showHDDSpaceLeft(eLabel *);
+ void startPermanentTimeshift();
#endif // DISABLE_FILE
// both called from other context..
@@ -615,6 +617,8 @@
void saveRecordings( bool destory = false );
void clearRecordings();
int isSkipping() { return skipping; }
+ void stopPermanentTimeshift();
+ void beginPermanentTimeshift();
#endif
int get16_9Logo() {return is16_9;}
int getSmartcardLogo() {return isCrypted;}
1.44 +24 -1 apps/tuxbox/enigma/src/enigma_setup.cpp
file : http://cvs.tuxbox.org/tuxbox/apps/tuxbox/enigma/src/enigma_setup.cpp?rev=1.44&content-type=text/vnd.viewcvs-markup
plain: http://cvs.tuxbox.org/tuxbox/apps/tuxbox/enigma/src/enigma_setup.cpp?rev=1.44&content-type=text/plain
revision graph: http://cvs.tuxbox.org/tuxbox/apps/tuxbox/enigma/src/enigma_setup.cpp?graph=1.44
diff : http://cvs.tuxbox.org/tuxbox/apps/tuxbox/enigma/src/enigma_setup.cpp.diff?r1=1.43&r2=1.44
Index: enigma_setup.cpp
===================================================================
RCS file: /cvs/tuxbox/apps/tuxbox/enigma/src/enigma_setup.cpp,v
retrieving revision 1.43
retrieving revision 1.44
diff -u -r1.43 -r1.44
--- enigma_setup.cpp 15 Jul 2006 13:22:49 -0000 1.43
+++ enigma_setup.cpp 1 Mar 2008 17:40:17 -0000 1.44
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
- * $Id: enigma_setup.cpp,v 1.43 2006/07/15 13:22:49 ghostrider Exp $
+ * $Id: enigma_setup.cpp,v 1.44 2008/03/01 17:40:17 dbluelle Exp $
*/
#include <enigma_setup.h>
@@ -26,6 +26,7 @@
#include <lib/system/econfig.h>
#include <lib/system/info.h>
#include <system_settings.h>
+#include <setup_timeshift.h>
#include <enigma_bouquet.h>
#include <enigma_ci.h>
#include <enigma_scan.h>
@@ -49,6 +50,12 @@
CONNECT((new eListBoxEntryMenu(&list, _("Parental Lock"), eString().sprintf("(%d) %s", ++entry, _("open parental setup")) ))->selected, eZapSetup::parental_lock );
new eListBoxEntryMenuSeparator(&list, eSkin::getActive()->queryImage("listbox.separator"), 0, true );
CONNECT((new eListBoxEntryMenu(&list, _("Expert Setup"), eString().sprintf("(%d) %s", ++entry, _("open expert setup")) ))->selected, eZapSetup::expert_setup);
+#ifndef DISABLE_HDD
+#ifndef DISABLE_FILE
+ new eListBoxEntryMenuSeparator(&list, eSkin::getActive()->queryImage("listbox.separator"), 0, true );
+ CONNECT((new eListBoxEntryMenu(&list, _("Timeshift"), eString().sprintf("(%d) %s", ++entry, _("open timeshift setup")) ))->selected, eZapSetup::timeshift_setup);
+#endif
+#endif
/* emit */ setupHook(this, &entry);
}
@@ -133,3 +140,19 @@
show();
}
+#ifndef DISABLE_HDD
+#ifndef DISABLE_FILE
+void eZapSetup::timeshift_setup()
+{
+ hide();
+ eZapTimeshiftSetup setup;
+#ifndef DISABLE_LCD
+ setup.setLCD(LCDTitle, LCDElement);
+#endif
+ setup.show();
+ setup.exec();
+ setup.hide();
+ show();
+}
+#endif
+#endif
1.27 +5 -0 apps/tuxbox/enigma/src/enigma_setup.h
file : http://cvs.tuxbox.org/tuxbox/apps/tuxbox/enigma/src/enigma_setup.h?rev=1.27&content-type=text/vnd.viewcvs-markup
plain: http://cvs.tuxbox.org/tuxbox/apps/tuxbox/enigma/src/enigma_setup.h?rev=1.27&content-type=text/plain
revision graph: http://cvs.tuxbox.org/tuxbox/apps/tuxbox/enigma/src/enigma_setup.h?graph=1.27
diff : http://cvs.tuxbox.org/tuxbox/apps/tuxbox/enigma/src/enigma_setup.h.diff?r1=1.26&r2=1.27
Index: enigma_setup.h
===================================================================
RCS file: /cvs/tuxbox/apps/tuxbox/enigma/src/enigma_setup.h,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -r1.26 -r1.27
--- enigma_setup.h 14 Feb 2004 03:32:04 -0000 1.26
+++ enigma_setup.h 1 Mar 2008 17:40:17 -0000 1.27
@@ -14,6 +14,11 @@
#endif
void expert_setup();
void parental_lock();
+#ifndef DISABLE_HDD
+#ifndef DISABLE_FILE
+ void timeshift_setup();
+#endif
+#endif
public:
eZapSetup();
};
1.140 +6 -6 apps/tuxbox/enigma/src/sselect.cpp
file : http://cvs.tuxbox.org/tuxbox/apps/tuxbox/enigma/src/sselect.cpp?rev=1.140&content-type=text/vnd.viewcvs-markup
plain: http://cvs.tuxbox.org/tuxbox/apps/tuxbox/enigma/src/sselect.cpp?rev=1.140&content-type=text/plain
revision graph: http://cvs.tuxbox.org/tuxbox/apps/tuxbox/enigma/src/sselect.cpp?graph=1.140
diff : http://cvs.tuxbox.org/tuxbox/apps/tuxbox/enigma/src/sselect.cpp.diff?r1=1.139&r2=1.140
Index: sselect.cpp
===================================================================
RCS file: /cvs/tuxbox/apps/tuxbox/enigma/src/sselect.cpp,v
retrieving revision 1.139
retrieving revision 1.140
diff -u -r1.139 -r1.140
--- sselect.cpp 26 Jul 2007 22:03:28 -0000 1.139
+++ sselect.cpp 1 Mar 2008 17:40:17 -0000 1.140
@@ -582,7 +582,7 @@
serviceentryflags|=eListBoxEntryService::flagSameTransponder;
}
if ( eZap::getInstance()->getServiceSelector() == this
- && (eDVB::getInstance()->recorder || ref.data[0] == -6)
+ && (eDVB::getInstance()->recorder || ref.data[0] == -6) && !eZapMain::getInstance()->isRecordingPermanentTimeshift()
&& eZapMain::getInstance()->getMode() != eZapMain::modeFile )
{
int mask = eZapMain::getInstance()->getMode() == eZapMain::modeTV ? (1<<4)|(1<<1) : ( 1<<2 );
@@ -906,7 +906,7 @@
{
// dont change path in radio and tv mode when recording is running
if ( eZap::getInstance()->getServiceSelector() == this
- && eDVB::getInstance()->recorder
+ && eDVB::getInstance()->recorder && !eZapMain::getInstance()->isRecordingPermanentTimeshift()
&& eZapMain::getInstance()->getMode() != eZapMain::modeFile )
return;
pathUp();
@@ -1149,7 +1149,7 @@
{
// dont change path in radio and tv mode when recording is running
if ( eZap::getInstance()->getServiceSelector() == this
- && eDVB::getInstance()->recorder
+ && eDVB::getInstance()->recorder && !eZapMain::getInstance()->isRecordingPermanentTimeshift()
&& eZapMain::getInstance()->getMode() != eZapMain::modeFile )
return 1;
ci->clear();
@@ -1185,7 +1185,7 @@
{
// dont change path in radio and tv mode when recording is running
if ( eZap::getInstance()->getServiceSelector() == this
- && eDVB::getInstance()->recorder
+ && eDVB::getInstance()->recorder && !eZapMain::getInstance()->isRecordingPermanentTimeshift()
&& eZapMain::getInstance()->getMode() != eZapMain::modeFile )
return 1;
ci->clear();
@@ -1267,7 +1267,7 @@
{
// dont change path in radio and tv mode when recording is running
if ( eZap::getInstance()->getServiceSelector() == this
- && eDVB::getInstance()->recorder
+ && eDVB::getInstance()->recorder && !eZapMain::getInstance()->isRecordingPermanentTimeshift()
&& eZapMain::getInstance()->getMode() != eZapMain::modeFile )
return 1;
pathUp();
@@ -1492,7 +1492,7 @@
{
// dont change path in radio and tv mode when recording is running
if ( eZap::getInstance()->getServiceSelector() == this
- && eDVB::getInstance()->recorder
+ && eDVB::getInstance()->recorder && !eZapMain::getInstance()->isRecordingPermanentTimeshift()
&& eZapMain::getInstance()->getMode() != eZapMain::modeFile )
return 1;
ci->clear();
--
To UNSUBSCRIBE, email to tuxbox-cvs-request@cvs.tuxbox.org
with a subject of "unsubscribe". Trouble? Contact listmaster@cvs.tuxbox.org