mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Implemented 'pause live video'
This commit is contained in:
parent
33d670f7d7
commit
a54427e28d
5
HISTORY
5
HISTORY
@ -2034,7 +2034,7 @@ Video Disk Recorder Revision History
|
||||
- Fixed handling of Ca parameters with values <= MAXDEVICES, which don't indicate
|
||||
an actual encrypted channel (thanks to Stefan Huelswitt for reporting this one).
|
||||
|
||||
2003-04-19: Version 1.1.28
|
||||
2003-04-21: Version 1.1.28
|
||||
|
||||
- Using masks in EIT filtering to reduce the number of filters (thanks to Andreas
|
||||
Schultz).
|
||||
@ -2050,3 +2050,6 @@ Video Disk Recorder Revision History
|
||||
single card systems!
|
||||
- Enhanced detection of pending user I/O from CAMs to avoid sluggish reaction
|
||||
to remote control keypresses.
|
||||
- Implemented "pause live video". You can now press "Menu/Yellow" or "Pause" on
|
||||
your remote control while watching live video to start an instant recording
|
||||
of the current programme and immediately start replaying that recording.
|
||||
|
18
MANUAL
18
MANUAL
@ -19,7 +19,7 @@ Video Disk Recorder User's Manual
|
||||
Back - Menu off VDR menu VDR menu Discard VDR menu Recordings menu
|
||||
Red - Record Edit Edit ABC/abc Play/Commands(2) Jump
|
||||
Green - Language New New Ins/Ovr Rewind Skip -60s
|
||||
Yellow - - Delete Delete Delete Delete Skip +60s
|
||||
Yellow - Pause live Delete Delete Delete Delete Skip +60s
|
||||
Blue - Stop/Resume Mark On/Off(1) - Summary Stop
|
||||
0..9 Ch select - - - Numeric inp. Exec cmd(2) Editing
|
||||
|
||||
@ -31,7 +31,7 @@ Video Disk Recorder User's Manual
|
||||
following functions:
|
||||
|
||||
Play resume normal replay
|
||||
Pause pause replay
|
||||
Pause pause replay or live video
|
||||
Stop stop replay
|
||||
Record instant recording
|
||||
FastFwd fast forward
|
||||
@ -191,6 +191,20 @@ Video Disk Recorder User's Manual
|
||||
Stop instant recording by pressing the "Menu" button and selecting
|
||||
"Stop Recording", or by disabling the timer.
|
||||
|
||||
* Pausing live video
|
||||
|
||||
If you want to pause the live programme you are just watching, simple press
|
||||
"Menu/Yellow" or "Pause" on your remote control. VDR will start an instant
|
||||
recording of the current channel (just as if you had pressed "Menu/Red" or
|
||||
"Record") and immediately begin replaying that recording. Replay will be
|
||||
put into "pause" mode, so you can attend to whatever it was that disturbed
|
||||
your live viewing session. Once you're back, simply press the "Up" or "Play"
|
||||
button and you'll be watching the current channel in time shift mode, right
|
||||
from the point where you left off. The instant recording VDR has started
|
||||
will use the same parameters for priority, lifetime and recording duration
|
||||
as any other instant recording, so by default it will record 3 hours (which
|
||||
should be enough for any normal broadcast).
|
||||
|
||||
* Replaying a Recording
|
||||
|
||||
All recordings are listed in the "Recordings" menu. Browse through the
|
||||
|
18
i18n.c
18
i18n.c
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: i18n.c 1.105 2003/04/12 09:39:35 kls Exp $
|
||||
* $Id: i18n.c 1.106 2003/04/21 14:05:17 kls Exp $
|
||||
*
|
||||
* Translations provided by:
|
||||
*
|
||||
@ -3411,6 +3411,22 @@ const tI18nPhrase Phrases[] = {
|
||||
"Caut inregistrari...",
|
||||
"Felvett adások böngészése...",
|
||||
},
|
||||
{ "Pausing live video...",
|
||||
"Live-Signal wird angehalten...",
|
||||
"",// TODO
|
||||
"",// TODO
|
||||
"",// TODO
|
||||
"",// TODO
|
||||
"",// TODO
|
||||
"",// TODO
|
||||
"",// TODO
|
||||
"",// TODO
|
||||
"",// TODO
|
||||
"",// TODO
|
||||
"",// TODO
|
||||
"",// TODO
|
||||
"",// TODO
|
||||
},
|
||||
{ "This plugin has no setup parameters!",
|
||||
"Dieses Plugin hat keine Setup-Parameter!",
|
||||
"",// TODO
|
||||
|
29
menu.c
29
menu.c
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: menu.c 1.236 2003/04/20 09:21:36 kls Exp $
|
||||
* $Id: menu.c 1.237 2003/04/21 14:57:13 kls Exp $
|
||||
*/
|
||||
|
||||
#include "menu.h"
|
||||
@ -2488,7 +2488,7 @@ void cMenuMain::Set(const char *Plugin)
|
||||
|
||||
// Color buttons:
|
||||
|
||||
SetHelp(tr("Record"), cDevice::PrimaryDevice()->NumAudioTracks() > 1 ? tr("Language") : NULL, NULL, replaying ? tr("Button$Stop") : cReplayControl::LastReplayed() ? tr("Resume") : NULL);
|
||||
SetHelp(tr("Record"), cDevice::PrimaryDevice()->NumAudioTracks() > 1 ? tr("Language") : NULL, replaying ? NULL : tr("Pause"), replaying ? tr("Button$Stop") : cReplayControl::LastReplayed() ? tr("Resume") : NULL);
|
||||
Display();
|
||||
lastActivity = time(NULL);
|
||||
}
|
||||
@ -2560,6 +2560,9 @@ eOSState cMenuMain::ProcessKey(eKeys Key)
|
||||
}
|
||||
}
|
||||
break;
|
||||
case kYellow: if (!HasSubMenu())
|
||||
state = osPause;
|
||||
break;
|
||||
case kBlue: if (!HasSubMenu())
|
||||
state = replaying ? osStopReplay : cReplayControl::LastReplayed() ? osReplay : osContinue;
|
||||
break;
|
||||
@ -2936,6 +2939,8 @@ cRecordControl::cRecordControl(cDevice *Device, cTimer *Timer)
|
||||
if (device->AttachReceiver(recorder)) {
|
||||
Recording.WriteSummary();
|
||||
cStatus::MsgRecording(device, Recording.Name());
|
||||
if (!Timer && !cReplayControl::LastReplayed()) // an instant recording, maybe from cRecordControls::PauseLiveVideo()
|
||||
cReplayControl::SetRecording(fileName, Recording.Name());
|
||||
}
|
||||
else
|
||||
DELETENULL(recorder);
|
||||
@ -3073,6 +3078,26 @@ bool cRecordControls::StopPrimary(bool DoIt)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool cRecordControls::PauseLiveVideo(void)
|
||||
{
|
||||
Interface->Open(Setup.OSDwidth, -1);
|
||||
Interface->Status(tr("Pausing live video..."));
|
||||
Interface->Flush();
|
||||
cReplayControl::SetRecording(NULL, NULL); // make sure the new cRecordControl will set cReplayControl::LastReplayed()
|
||||
if (Start()) {
|
||||
sleep(2); // allow recorded file to fill up enough to start replaying
|
||||
cReplayControl *rc = new cReplayControl;
|
||||
cControl::Launch(rc);
|
||||
cControl::Attach();
|
||||
sleep(1); // allow device to replay some frames, so we have a picture
|
||||
Interface->Close();
|
||||
rc->ProcessKey(kPause); // pause, allowing replay mode display
|
||||
return true;
|
||||
}
|
||||
Interface->Close();
|
||||
return false;
|
||||
}
|
||||
|
||||
const char *cRecordControls::GetInstantId(const char *LastInstantId)
|
||||
{
|
||||
for (int i = 0; i < MAXRECORDCONTROLS; i++) {
|
||||
|
3
menu.h
3
menu.h
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: menu.h 1.53 2003/01/12 14:54:05 kls Exp $
|
||||
* $Id: menu.h 1.54 2003/04/21 13:40:45 kls Exp $
|
||||
*/
|
||||
|
||||
#ifndef __MENU_H
|
||||
@ -135,6 +135,7 @@ public:
|
||||
static void Stop(const char *InstantId);
|
||||
static void Stop(cDevice *Device);
|
||||
static bool StopPrimary(bool DoIt = false);
|
||||
static bool PauseLiveVideo(void);
|
||||
static const char *GetInstantId(const char *LastInstantId);
|
||||
static cRecordControl *GetRecordControl(const char *FileName);
|
||||
static void Process(time_t t);
|
||||
|
3
osd.h
3
osd.h
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: osd.h 1.38 2002/12/08 12:21:26 kls Exp $
|
||||
* $Id: osd.h 1.39 2003/04/21 13:40:45 kls Exp $
|
||||
*/
|
||||
|
||||
#ifndef __OSD_H
|
||||
@ -30,6 +30,7 @@ enum eOSState { osUnknown,
|
||||
osPlugin,
|
||||
osSetup,
|
||||
osCommands,
|
||||
osPause,
|
||||
osRecord,
|
||||
osReplay,
|
||||
osStopRecord,
|
||||
|
35
vdr.c
35
vdr.c
@ -22,7 +22,7 @@
|
||||
*
|
||||
* The project's page is at http://www.cadsoft.de/people/kls/vdr
|
||||
*
|
||||
* $Id: vdr.c 1.149 2003/04/12 13:57:45 kls Exp $
|
||||
* $Id: vdr.c 1.150 2003/04/21 14:41:41 kls Exp $
|
||||
*/
|
||||
|
||||
#include <getopt.h>
|
||||
@ -553,6 +553,26 @@ int main(int argc, char *argv[])
|
||||
cDisplayVolume::Process(key);
|
||||
key = kNone; // nobody else needs to see these keys
|
||||
break;
|
||||
// Pausing live video:
|
||||
case kPause:
|
||||
if (!cControl::Control()) {
|
||||
DELETENULL(Menu);
|
||||
Temp = NULL;
|
||||
if (!cRecordControls::PauseLiveVideo())
|
||||
Interface->Error(tr("No free DVB device to record!"));
|
||||
key = kNone; // nobody else needs to see this key
|
||||
}
|
||||
break;
|
||||
// Instant recording:
|
||||
case kRecord:
|
||||
if (!cControl::Control()) {
|
||||
if (cRecordControls::Start())
|
||||
;//XXX Interface->Info(tr("Recording"));
|
||||
else
|
||||
Interface->Error(tr("No free DVB device to record!"));
|
||||
key = kNone; // nobody else needs to see this key
|
||||
}
|
||||
break;
|
||||
// Power off:
|
||||
case kPower: isyslog("Power button pressed");
|
||||
DELETENULL(Menu);
|
||||
@ -577,6 +597,12 @@ int main(int argc, char *argv[])
|
||||
if (state == osUnknown && ISMODELESSKEY(key) && cControl::Control() && Interact != cControl::Control())
|
||||
state = cControl::Control()->ProcessKey(key);
|
||||
switch (state) {
|
||||
case osPause: DELETENULL(Menu);
|
||||
cControl::Shutdown(); // just in case
|
||||
Temp = NULL;
|
||||
if (!cRecordControls::PauseLiveVideo())
|
||||
Interface->Error(tr("No free DVB device to record!"));
|
||||
break;
|
||||
case osRecord: DELETENULL(Menu);
|
||||
Temp = NULL;
|
||||
if (cRecordControls::Start())
|
||||
@ -652,13 +678,6 @@ int main(int argc, char *argv[])
|
||||
break;
|
||||
// Viewing Control:
|
||||
case kOk: LastChannel = -1; break; // forces channel display
|
||||
// Instant recording:
|
||||
case kRecord:
|
||||
if (cRecordControls::Start())
|
||||
;//XXX Interface->Info(tr("Recording"));
|
||||
else
|
||||
Interface->Error(tr("No free DVB device to record!"));
|
||||
break;
|
||||
// Key macros:
|
||||
case kRed:
|
||||
case kGreen:
|
||||
|
Loading…
Reference in New Issue
Block a user