1
0
mirror of https://github.com/VDR4Arch/vdr.git synced 2023-10-10 13:36:52 +02:00

Implemented option '-i'

This commit is contained in:
Klaus Schmidinger 2009-01-18 11:10:29 +01:00
parent 3def525dc4
commit 3434f061b3
6 changed files with 36 additions and 11 deletions

View File

@ -2214,6 +2214,8 @@ Frank Schmirler <vdr@schmirler.de>
allowed characters allowed characters
for fixing handling address masks in SVDRP host settings for fixing handling address masks in SVDRP host settings
for fixing handling the 'pointer field' in generating and parsing PAT/PMT for fixing handling the 'pointer field' in generating and parsing PAT/PMT
for suggesting to use an "instance id" instead of the "resume id" to distinguish
recordings of the same broadcast made by different instances of VDR
Jörn Reder <joern@zyn.de> Jörn Reder <joern@zyn.de>
for reporting that a recording may unnecessarily block a device with a CAM, while for reporting that a recording may unnecessarily block a device with a CAM, while

View File

@ -5939,3 +5939,7 @@ Video Disk Recorder Revision History
to Make.config.template (thanks to Johann Friedrichs for pointing this out). to Make.config.template (thanks to Johann Friedrichs for pointing this out).
Plugin authors should add this line to their Makefile or Make.config if they use Plugin authors should add this line to their Makefile or Make.config if they use
file access functions that need special versions for 64 bit offsets. file access functions that need special versions for 64 bit offsets.
- The new command line option -i can be used to set an "instance id", which will
be used to distinguish recordings of the same broadcast made by different instances
of VDR (suggested by Frank Schmirler). This replaces the use of the "resume id"
that was introduced in version 1.7.3.

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and * See the main source file 'vdr.c' for copyright information and
* how to reach the author. * how to reach the author.
* *
* $Id: recording.c 2.5 2009/01/16 15:55:18 kls Exp $ * $Id: recording.c 2.6 2009/01/18 11:02:09 kls Exp $
*/ */
#include "recording.h" #include "recording.h"
@ -64,6 +64,7 @@
#define MAX_LINK_LEVEL 6 #define MAX_LINK_LEVEL 6
bool VfatFileSystem = false; bool VfatFileSystem = false;
int InstanceId = 0;
cRecordings DeletedRecordings(true); cRecordings DeletedRecordings(true);
@ -602,7 +603,7 @@ cRecording::cRecording(cTimer *Timer, const cEvent *Event)
name = NULL; name = NULL;
fileSizeMB = -1; // unknown fileSizeMB = -1; // unknown
channel = Timer->Channel()->Number(); channel = Timer->Channel()->Number();
resumeId = Setup.ResumeID; instanceId = InstanceId;
isPesRecording = false; isPesRecording = false;
framesPerSecond = DEFAULTFRAMESPERSECOND; framesPerSecond = DEFAULTFRAMESPERSECOND;
deleted = 0; deleted = 0;
@ -659,7 +660,7 @@ cRecording::cRecording(const char *FileName)
resume = RESUME_NOT_INITIALIZED; resume = RESUME_NOT_INITIALIZED;
fileSizeMB = -1; // unknown fileSizeMB = -1; // unknown
channel = -1; channel = -1;
resumeId = -1; instanceId = -1;
priority = MAXPRIORITY; // assume maximum in case there is no info file priority = MAXPRIORITY; // assume maximum in case there is no info file
lifetime = MAXLIFETIME; lifetime = MAXLIFETIME;
isPesRecording = false; isPesRecording = false;
@ -678,7 +679,7 @@ cRecording::cRecording(const char *FileName)
struct tm tm_r; struct tm tm_r;
struct tm t = *localtime_r(&now, &tm_r); // this initializes the time zone in 't' struct tm t = *localtime_r(&now, &tm_r); // this initializes the time zone in 't'
t.tm_isdst = -1; // makes sure mktime() will determine the correct DST setting t.tm_isdst = -1; // makes sure mktime() will determine the correct DST setting
if (7 == sscanf(p + 1, DATAFORMATTS, &t.tm_year, &t.tm_mon, &t.tm_mday, &t.tm_hour, &t.tm_min, &channel, &resumeId) if (7 == sscanf(p + 1, DATAFORMATTS, &t.tm_year, &t.tm_mon, &t.tm_mday, &t.tm_hour, &t.tm_min, &channel, &instanceId)
|| 7 == sscanf(p + 1, DATAFORMATPES, &t.tm_year, &t.tm_mon, &t.tm_mday, &t.tm_hour, &t.tm_min, &priority, &lifetime)) { || 7 == sscanf(p + 1, DATAFORMATPES, &t.tm_year, &t.tm_mon, &t.tm_mday, &t.tm_hour, &t.tm_min, &priority, &lifetime)) {
t.tm_year -= 1900; t.tm_year -= 1900;
t.tm_mon--; t.tm_mon--;
@ -688,7 +689,7 @@ cRecording::cRecording(const char *FileName)
strncpy(name, FileName, p - FileName); strncpy(name, FileName, p - FileName);
name[p - FileName] = 0; name[p - FileName] = 0;
name = ExchangeChars(name, false); name = ExchangeChars(name, false);
isPesRecording = resumeId < 0; isPesRecording = instanceId < 0;
} }
else else
return; return;
@ -827,7 +828,7 @@ const char *cRecording::FileName(void) const
struct tm *t = localtime_r(&start, &tm_r); struct tm *t = localtime_r(&start, &tm_r);
const char *fmt = isPesRecording ? NAMEFORMATPES : NAMEFORMATTS; const char *fmt = isPesRecording ? NAMEFORMATPES : NAMEFORMATTS;
int ch = isPesRecording ? priority : channel; int ch = isPesRecording ? priority : channel;
int ri = isPesRecording ? lifetime : resumeId; int ri = isPesRecording ? lifetime : instanceId;
name = ExchangeChars(name, true); name = ExchangeChars(name, true);
fileName = strdup(cString::sprintf(fmt, VideoDirectory, name, t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, t->tm_hour, t->tm_min, ch, ri)); fileName = strdup(cString::sprintf(fmt, VideoDirectory, name, t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, t->tm_hour, t->tm_min, ch, ri));
name = ExchangeChars(name, false); name = ExchangeChars(name, false);

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and * See the main source file 'vdr.c' for copyright information and
* how to reach the author. * how to reach the author.
* *
* $Id: recording.h 2.1 2009/01/06 10:49:59 kls Exp $ * $Id: recording.h 2.2 2009/01/18 11:02:00 kls Exp $
*/ */
#ifndef __RECORDING_H #ifndef __RECORDING_H
@ -19,6 +19,7 @@
#include "tools.h" #include "tools.h"
extern bool VfatFileSystem; extern bool VfatFileSystem;
extern int InstanceId;
void RemoveDeletedRecordings(void); void RemoveDeletedRecordings(void);
void AssertFreeDiskSpace(int Priority = 0, bool Force = false); void AssertFreeDiskSpace(int Priority = 0, bool Force = false);
@ -82,7 +83,7 @@ private:
mutable char *name; mutable char *name;
mutable int fileSizeMB; mutable int fileSizeMB;
int channel; int channel;
int resumeId; int instanceId;
bool isPesRecording; bool isPesRecording;
double framesPerSecond; double framesPerSecond;
cRecordingInfo *info; cRecordingInfo *info;

11
vdr.1
View File

@ -8,7 +8,7 @@
.\" License as specified in the file COPYING that comes with the .\" License as specified in the file COPYING that comes with the
.\" vdr distribution. .\" vdr distribution.
.\" .\"
.\" $Id: vdr.1 1.33 2008/03/09 16:07:06 kls Exp $ .\" $Id: vdr.1 2.1 2009/01/18 11:05:56 kls Exp $
.\" .\"
.TH vdr 1 "10 Feb 2008" "1.6" "Video Disk Recorder" .TH vdr 1 "10 Feb 2008" "1.6" "Video Disk Recorder"
.SH NAME .SH NAME
@ -71,6 +71,15 @@ grabbing images to disk is disabled.
.B \-h, \-\-help .B \-h, \-\-help
Print a help message and exit. Print a help message and exit.
.TP .TP
.BI \-i\ instance ,\ \-\-instance= instance
Use \fIinstance\fR as the id of this VDR instance (default is 0).
In an environment where several instances of VDR use the same video
directory, this parameter can be set to a positive integer value
that's unique for each instance, so that they won't interfere with
each other in case they record exactly the same broadcast.
The number given here will be part of the directory name in which
the recordings will be stored.
.TP
.BI \-l\ level ,\ \-\-log= level .BI \-l\ level ,\ \-\-log= level
Set logging to \fIlevel\fR. Set logging to \fIlevel\fR.
\fB0\fR\ =\ no logging, \fB1\fR\ =\ errors only, \fB0\fR\ =\ no logging, \fB1\fR\ =\ errors only,

12
vdr.c
View File

@ -22,7 +22,7 @@
* *
* The project's page is at http://www.cadsoft.de/vdr * The project's page is at http://www.cadsoft.de/vdr
* *
* $Id: vdr.c 2.3 2008/09/06 14:08:44 kls Exp $ * $Id: vdr.c 2.4 2009/01/18 11:02:37 kls Exp $
*/ */
#include <getopt.h> #include <getopt.h>
@ -223,6 +223,7 @@ int main(int argc, char *argv[])
{ "epgfile", required_argument, NULL, 'E' }, { "epgfile", required_argument, NULL, 'E' },
{ "grab", required_argument, NULL, 'g' }, { "grab", required_argument, NULL, 'g' },
{ "help", no_argument, NULL, 'h' }, { "help", no_argument, NULL, 'h' },
{ "instance", required_argument, NULL, 'i' },
{ "lib", required_argument, NULL, 'L' }, { "lib", required_argument, NULL, 'L' },
{ "lirc", optional_argument, NULL, 'l' | 0x100 }, { "lirc", optional_argument, NULL, 'l' | 0x100 },
{ "localedir",required_argument, NULL, 'l' | 0x200 }, { "localedir",required_argument, NULL, 'l' | 0x200 },
@ -245,7 +246,7 @@ int main(int argc, char *argv[])
}; };
int c; int c;
while ((c = getopt_long(argc, argv, "a:c:dD:E:g:hl:L:mp:P:r:s:t:u:v:Vw:", long_options, NULL)) != -1) { while ((c = getopt_long(argc, argv, "a:c:dD:E:g:hi:l:L:mp:P:r:s:t:u:v:Vw:", long_options, NULL)) != -1) {
switch (c) { switch (c) {
case 'a': AudioCommand = optarg; case 'a': AudioCommand = optarg;
break; break;
@ -268,6 +269,13 @@ int main(int argc, char *argv[])
break; break;
case 'h': DisplayHelp = true; case 'h': DisplayHelp = true;
break; break;
case 'i': if (isnumber(optarg)) {
InstanceId = atoi(optarg);
if (InstanceId >= 0)
break;
}
fprintf(stderr, "vdr: invalid instance id: %s\n", optarg);
return 2;
case 'l': { case 'l': {
char *p = strchr(optarg, '.'); char *p = strchr(optarg, '.');
if (p) if (p)