vdr 2.6.4
recording.h
Go to the documentation of this file.
1/*
2 * recording.h: Recording file handling
3 *
4 * See the main source file 'vdr.c' for copyright information and
5 * how to reach the author.
6 *
7 * $Id: recording.h 5.5 2021/05/23 15:03:17 kls Exp $
8 */
9
10#ifndef __RECORDING_H
11#define __RECORDING_H
12
13#include <time.h>
14#include "channels.h"
15#include "config.h"
16#include "epg.h"
17#include "thread.h"
18#include "timers.h"
19#include "tools.h"
20
21#define FOLDERDELIMCHAR '~'
22
23extern int DirectoryPathMax;
24extern int DirectoryNameMax;
25extern bool DirectoryEncoding;
26extern int InstanceId;
27
29 ruNone = 0x0000, // the recording is currently unused
30 ruTimer = 0x0001, // the recording is currently written to by a timer
31 ruReplay = 0x0002, // the recording is being replayed
32 // mutually exclusive:
33 ruCut = 0x0004, // the recording is being cut
34 ruMove = 0x0008, // the recording is being moved
35 ruCopy = 0x0010, // the recording is being copied
36 // mutually exclusive:
37 ruSrc = 0x0020, // the recording is the source of a cut, move or copy process
38 ruDst = 0x0040, // the recording is the destination of a cut, move or copy process
39 //
40 ruPending = 0x0080, // the recording is pending a cut, move or copy process
41 ruCanceled = 0x8000, // the operation has been canceled, waiting for cleanup
42 };
43
45void AssertFreeDiskSpace(int Priority = 0, bool Force = false);
50
52private:
53 char *fileName;
55public:
56 cResumeFile(const char *FileName, bool IsPesRecording);
58 int Read(void);
59 bool Save(int Index);
60 void Delete(void);
61 };
62
64 friend class cRecording;
65private:
68 const cEvent *event;
70 char *aux;
74 char *fileName;
75 int errors;
76 cRecordingInfo(const cChannel *Channel = NULL, const cEvent *Event = NULL);
77 bool Read(FILE *f);
78public:
79 cRecordingInfo(const char *FileName);
81 tChannelID ChannelID(void) const { return channelID; }
82 const char *ChannelName(void) const { return channelName; }
83 const cEvent *GetEvent(void) const { return event; }
84 const char *Title(void) const { return event->Title(); }
85 const char *ShortText(void) const { return event->ShortText(); }
86 const char *Description(void) const { return event->Description(); }
87 const cComponents *Components(void) const { return event->Components(); }
88 const char *Aux(void) const { return aux; }
89 double FramesPerSecond(void) const { return framesPerSecond; }
91 void SetFileName(const char *FileName);
92 int Errors(void) const { return errors; } // returns -1 if undefined
93 void SetErrors(int Errors);
94 bool Write(FILE *f, const char *Prefix = "") const;
95 bool Read(void);
96 bool Write(void) const;
97 void SetData(const char *Title, const char *ShortText, const char *Description);
98 void SetAux(const char *Aux);
99 };
100
101class cRecording : public cListObject {
102 friend class cRecordings;
103private:
104 int id;
105 mutable int resume;
106 mutable char *titleBuffer;
107 mutable char *sortBufferName;
108 mutable char *sortBufferTime;
109 mutable char *fileName;
110 mutable char *name;
111 mutable int fileSizeMB;
112 mutable int numFrames;
116 mutable int isOnVideoDirectoryFileSystem; // -1 = unknown, 0 = no, 1 = yes
119 cRecording(const cRecording&); // can't copy cRecording
120 cRecording &operator=(const cRecording &); // can't assign cRecording
121 static char *StripEpisodeName(char *s, bool Strip);
122 char *SortName(void) const;
123 void ClearSortName(void);
124 void SetId(int Id); // should only be set by cRecordings
125 time_t start;
128 time_t deleted;
129public:
130 cRecording(cTimer *Timer, const cEvent *Event);
131 cRecording(const char *FileName);
132 virtual ~cRecording();
133 int Id(void) const { return id; }
134 time_t Start(void) const { return start; }
135 int Priority(void) const { return priority; }
136 int Lifetime(void) const { return lifetime; }
137 time_t Deleted(void) const { return deleted; }
138 void SetDeleted(void) { deleted = time(NULL); }
139 virtual int Compare(const cListObject &ListObject) const;
140 bool IsInPath(const char *Path) const;
143 cString Folder(void) const;
146 cString BaseName(void) const;
149 const char *Name(void) const { return name; }
152 const char *FileName(void) const;
155 const char *Title(char Delimiter = ' ', bool NewIndicator = false, int Level = -1) const;
156 cRecordingInfo *Info(void) const { return info; }
157 const char *PrefixFileName(char Prefix);
158 int HierarchyLevels(void) const;
159 void ResetResume(void) const;
160 double FramesPerSecond(void) const { return framesPerSecond; }
161 int NumFrames(void) const;
164 int LengthInSeconds(void) const;
166 int FileSizeMB(void) const;
169 int GetResume(void) const;
172 bool IsNew(void) const { return GetResume() <= 0; }
173 bool IsEdited(void) const;
174 bool IsPesRecording(void) const { return isPesRecording; }
175 bool IsOnVideoDirectoryFileSystem(void) const;
176 bool HasMarks(void) const;
178 bool DeleteMarks(void);
182 void ReadInfo(void);
183 bool WriteInfo(const char *OtherFileName = NULL);
187 void SetStartTime(time_t Start);
195 bool ChangePriorityLifetime(int NewPriority, int NewLifetime);
199 bool ChangeName(const char *NewName);
206 bool Delete(void);
209 bool Remove(void);
212 bool Undelete(void);
216 int IsInUse(void) const;
224 };
225
227
228class cRecordings : public cList<cRecording> {
229private:
232 static int lastRecordingId;
233 static char *updateFileName;
234 static time_t lastUpdate;
236 static const char *UpdateFileName(void);
237public:
238 cRecordings(bool Deleted = false);
239 virtual ~cRecordings();
240 static const cRecordings *GetRecordingsRead(cStateKey &StateKey, int TimeoutMs = 0) { return recordings.Lock(StateKey, false, TimeoutMs) ? &recordings : NULL; }
243 static cRecordings *GetRecordingsWrite(cStateKey &StateKey, int TimeoutMs = 0) { return recordings.Lock(StateKey, true, TimeoutMs) ? &recordings : NULL; }
246 static const cRecordings *GetDeletedRecordingsRead(cStateKey &StateKey, int TimeoutMs = 0) { return deletedRecordings.Lock(StateKey, false, TimeoutMs) ? &deletedRecordings : NULL; }
249 static cRecordings *GetDeletedRecordingsWrite(cStateKey &StateKey, int TimeoutMs = 0) { return deletedRecordings.Lock(StateKey, true, TimeoutMs) ? &deletedRecordings : NULL; }
252 static void Update(bool Wait = false);
256 static void TouchUpdate(void);
260 static bool NeedsUpdate(void);
261 void ResetResume(const char *ResumeFileName = NULL);
262 void ClearSortNames(void);
263 const cRecording *GetById(int Id) const;
264 cRecording *GetById(int Id) { return const_cast<cRecording *>(static_cast<const cRecordings *>(this)->GetById(Id)); };
265 const cRecording *GetByName(const char *FileName) const;
266 cRecording *GetByName(const char *FileName) { return const_cast<cRecording *>(static_cast<const cRecordings *>(this)->GetByName(FileName)); }
267 void Add(cRecording *Recording);
268 void AddByName(const char *FileName, bool TriggerUpdate = true);
269 void DelByName(const char *FileName);
270 void UpdateByName(const char *FileName);
271 int TotalFileSizeMB(void) const;
272 double MBperMinute(void) const;
275 int PathIsInUse(const char *Path) const;
283 int GetNumRecordingsInPath(const char *Path) const;
287 bool MoveRecordings(const char *OldPath, const char *NewPath);
296 };
297
298// Provide lock controlled access to the list:
299
300DEF_LIST_LOCK(Recordings);
301DEF_LIST_LOCK2(Recordings, DeletedRecordings);
302
303// These macros provide a convenient way of locking the global recordings list
304// and making sure the lock is released as soon as the current scope is left
305// (note that these macros wait forever to obtain the lock!):
306
307#define LOCK_RECORDINGS_READ USE_LIST_LOCK_READ(Recordings)
308#define LOCK_RECORDINGS_WRITE USE_LIST_LOCK_WRITE(Recordings)
309#define LOCK_DELETEDRECORDINGS_READ USE_LIST_LOCK_READ2(Recordings, DeletedRecordings)
310#define LOCK_DELETEDRECORDINGS_WRITE USE_LIST_LOCK_WRITE2(Recordings, DeletedRecordings)
311
313
315private:
319 bool error;
320 cRecordingsHandlerEntry *Get(const char *FileName);
321protected:
322 virtual void Action(void);
323public:
324 cRecordingsHandler(void);
325 virtual ~cRecordingsHandler();
326 bool Add(int Usage, const char *FileNameSrc, const char *FileNameDst = NULL);
334 void Del(const char *FileName);
339 void DelAll(void);
341 int GetUsage(const char *FileName);
343 bool Finished(bool &Error);
348 };
349
351
352#define DEFAULTFRAMESPERSECOND 25.0
353
354class cMark : public cListObject {
355 friend class cMarks; // for sorting
356private:
360public:
361 cMark(int Position = 0, const char *Comment = NULL, double FramesPerSecond = DEFAULTFRAMESPERSECOND);
362 virtual ~cMark();
363 int Position(void) const { return position; }
364 const char *Comment(void) const { return comment; }
366 void SetComment(const char *Comment) { comment = Comment; }
367 cString ToText(void);
368 bool Parse(const char *s);
369 bool Save(FILE *f);
370 };
371
372class cMarks : public cConfig<cMark> {
373private:
381public:
382 cMarks(void): cConfig<cMark>("Marks") {};
383 static cString MarksFileName(const cRecording *Recording);
386 static bool DeleteMarksFile(const cRecording *Recording);
387 bool Load(const char *RecordingFileName, double FramesPerSecond = DEFAULTFRAMESPERSECOND, bool IsPesRecording = false);
388 bool Update(void);
389 bool Save(void);
390 void Align(void);
391 void Sort(void);
392 void Add(int Position);
398 const cMark *Get(int Position) const;
399 const cMark *GetPrev(int Position) const;
400 const cMark *GetNext(int Position) const;
401 const cMark *GetNextBegin(const cMark *EndMark = NULL) const;
405 const cMark *GetNextEnd(const cMark *BeginMark) const;
408 int GetNumSequences(void) const;
414 cMark *Get(int Position) { return const_cast<cMark *>(static_cast<const cMarks *>(this)->Get(Position)); }
415 cMark *GetPrev(int Position) { return const_cast<cMark *>(static_cast<const cMarks *>(this)->GetPrev(Position)); }
416 cMark *GetNext(int Position) { return const_cast<cMark *>(static_cast<const cMarks *>(this)->GetNext(Position)); }
417 cMark *GetNextBegin(const cMark *EndMark = NULL) { return const_cast<cMark *>(static_cast<const cMarks *>(this)->GetNextBegin(EndMark)); }
418 cMark *GetNextEnd(const cMark *BeginMark) { return const_cast<cMark *>(static_cast<const cMarks *>(this)->GetNextEnd(BeginMark)); }
419 };
420
421#define RUC_BEFORERECORDING "before"
422#define RUC_STARTRECORDING "started"
423#define RUC_AFTERRECORDING "after"
424#define RUC_EDITINGRECORDING "editing"
425#define RUC_EDITEDRECORDING "edited"
426#define RUC_DELETERECORDING "deleted"
427#define RUC_RENAMEDRECORDING "renamed" // same directory, only the base name is changed
428#define RUC_MOVEDRECORDING "moved" // different directory (and maybe base name), or "copy" to other filesystem + delete original (triggers copying->copied->deleted)
429#define RUC_COPYINGRECORDING "copying"
430#define RUC_COPIEDRECORDING "copied"
431
433private:
434 static const char *command;
435public:
436 static void SetCommand(const char *Command) { command = Command; }
437 static void InvokeCommand(const char *State, const char *RecordingFileName, const char *SourceFileName = NULL);
438 };
439
440// The maximum size of a single frame (up to HDTV 1920x1080):
441#define MAXFRAMESIZE (KILOBYTE(1024) / TS_SIZE * TS_SIZE) // multiple of TS_SIZE to avoid breaking up TS packets
442
443// The maximum file size is limited by the range that can be covered
444// with a 40 bit 'unsigned int', which is 1TB. The actual maximum value
445// used is 6MB below the theoretical maximum, to have some safety (the
446// actual file size may be slightly higher because we stop recording only
447// before the next independent frame, to have a complete Group Of Pictures):
448#define MAXVIDEOFILESIZETS 1048570 // MB
449#define MAXVIDEOFILESIZEPES 2000 // MB
450#define MINVIDEOFILESIZE 100 // MB
451#define MAXVIDEOFILESIZEDEFAULT MAXVIDEOFILESIZEPES
452
453struct tIndexTs;
455
457private:
458 int f;
460 int size, last;
461 tIndexTs *index;
466 void ConvertFromPes(tIndexTs *IndexTs, int Count);
467 void ConvertToPes(tIndexTs *IndexTs, int Count);
468 bool CatchUp(int Index = -1);
469public:
470 cIndexFile(const char *FileName, bool Record, bool IsPesRecording = false, bool PauseLive = false, bool Update = false);
471 ~cIndexFile();
472 bool Ok(void) { return index != NULL; }
473 bool Write(bool Independent, uint16_t FileNumber, off_t FileOffset);
474 bool Get(int Index, uint16_t *FileNumber, off_t *FileOffset, bool *Independent = NULL, int *Length = NULL);
475 int GetNextIFrame(int Index, bool Forward, uint16_t *FileNumber = NULL, off_t *FileOffset = NULL, int *Length = NULL);
476 int GetClosestIFrame(int Index);
481 int Get(uint16_t FileNumber, off_t FileOffset);
482 int Last(void) { CatchUp(); return last; }
484 int GetResume(void) { return resumeFile.Read(); }
485 bool StoreResume(int Index) { return resumeFile.Save(Index); }
486 bool IsStillRecording(void);
487 void Delete(void);
488 static int GetLength(const char *FileName, bool IsPesRecording = false);
491 static cString IndexFileName(const char *FileName, bool IsPesRecording);
492 };
493
495private:
497 uint16_t fileNumber;
499 bool record;
502public:
503 cFileName(const char *FileName, bool Record, bool Blocking = false, bool IsPesRecording = false);
504 ~cFileName();
505 const char *Name(void) { return fileName; }
506 uint16_t Number(void) { return fileNumber; }
507 bool GetLastPatPmtVersions(int &PatVersion, int &PmtVersion);
508 cUnbufferedFile *Open(void);
509 void Close(void);
510 cUnbufferedFile *SetOffset(int Number, off_t Offset = 0); // yes, Number is int for easier internal calculating
512 };
513
515private:
518 void Add(const char *Title);
519public:
520 bool Load(const char *FileName);
521 bool Save(void) const;
522 void Append(const char *Title);
523 bool Contains(const char *Title) const;
524 };
525
527
528cString IndexToHMSF(int Index, bool WithFrame = false, double FramesPerSecond = DEFAULTFRAMESPERSECOND);
529 // Converts the given index to a string, optionally containing the frame number.
530int HMSFToIndex(const char *HMSF, double FramesPerSecond = DEFAULTFRAMESPERSECOND);
531 // Converts the given string (format: "hh:mm:ss.ff") to an index.
532int SecondsToFrames(int Seconds, double FramesPerSecond = DEFAULTFRAMESPERSECOND);
533 // Returns the number of frames corresponding to the given number of seconds.
534
535int ReadFrame(cUnbufferedFile *f, uchar *b, int Length, int Max);
536
537char *ExchangeChars(char *s, bool ToFileSystem);
538 // Exchanges the characters in the given string to or from a file system
539 // specific representation (depending on ToFileSystem). The given string will
540 // be modified and may be reallocated if more space is needed. The return
541 // value points to the resulting string, which may be different from s.
542
543bool GenerateIndex(const char *FileName, bool Update = false);
548
552bool HasRecordingsSortMode(const char *Directory);
553void GetRecordingsSortMode(const char *Directory);
554void SetRecordingsSortMode(const char *Directory, eRecordingsSortMode SortMode);
555void IncRecordingsSortMode(const char *Directory);
556
557void SetRecordingTimerId(const char *Directory, const char *TimerId);
558cString GetRecordingTimerId(const char *Directory);
559
560#endif //__RECORDING_H
cStringList doneRecordings
Definition recording.h:517
bool Save(void) const
Definition recording.c:3122
void Add(const char *Title)
Definition recording.c:3141
cString fileName
Definition recording.h:516
void Append(const char *Title)
Definition recording.c:3146
bool Load(const char *FileName)
Definition recording.c:3101
bool Contains(const char *Title) const
Definition recording.c:3169
Definition epg.h:73
bool isPesRecording
Definition recording.h:501
cUnbufferedFile * NextFile(void)
Definition recording.c:3092
uint16_t Number(void)
Definition recording.h:506
bool record
Definition recording.h:499
void Close(void)
Definition recording.c:3040
uint16_t fileNumber
Definition recording.h:497
cUnbufferedFile * Open(void)
Definition recording.c:3016
char * fileName
Definition recording.h:498
char * pFileNumber
Definition recording.h:498
const char * Name(void)
Definition recording.h:505
bool GetLastPatPmtVersions(int &PatVersion, int &PmtVersion)
Definition recording.c:2965
bool blocking
Definition recording.h:500
cUnbufferedFile * SetOffset(int Number, off_t Offset=0)
Definition recording.c:3050
cUnbufferedFile * file
Definition recording.h:496
int GetNextIFrame(int Index, bool Forward, uint16_t *FileNumber=NULL, off_t *FileOffset=NULL, int *Length=NULL)
Definition recording.c:2799
cResumeFile resumeFile
Definition recording.h:463
bool IsStillRecording(void)
Definition recording.c:2879
void ConvertFromPes(tIndexTs *IndexTs, int Count)
Definition recording.c:2675
bool Write(bool Independent, uint16_t FileNumber, off_t FileOffset)
Definition recording.c:2756
static int GetLength(const char *FileName, bool IsPesRecording=false)
Calculates the recording length (number of frames) without actually reading the index file.
Definition recording.c:2896
bool CatchUp(int Index=-1)
Definition recording.c:2700
int GetResume(void)
Definition recording.h:484
void ConvertToPes(tIndexTs *IndexTs, int Count)
Definition recording.c:2687
bool isPesRecording
Definition recording.h:462
cString fileName
Definition recording.h:459
bool StoreResume(int Index)
Definition recording.h:485
cIndexFileGenerator * indexFileGenerator
Definition recording.h:464
static cString IndexFileName(const char *FileName, bool IsPesRecording)
Definition recording.c:2670
bool Get(int Index, uint16_t *FileNumber, off_t *FileOffset, bool *Independent=NULL, int *Length=NULL)
Definition recording.c:2773
int GetClosestIFrame(int Index)
Returns the index of the I-frame that is closest to the given Index (or Index itself,...
Definition recording.c:2837
bool Ok(void)
Definition recording.h:472
cMutex mutex
Definition recording.h:465
void Delete(void)
Definition recording.c:2884
int Last(void)
Returns the index of the last entry in this file, or -1 if the file is empty.
Definition recording.h:482
tIndexTs * index
Definition recording.h:461
bool Lock(cStateKey &StateKey, bool Write=false, int TimeoutMs=0) const
Tries to get a lock on this list and returns true if successful.
Definition tools.c:2179
Definition tools.h:641
cString comment
Definition recording.h:359
int position
Definition recording.h:358
bool Parse(const char *s)
Definition recording.c:2150
bool Save(FILE *f)
Definition recording.c:2164
cString ToText(void)
Definition recording.c:2145
const char * Comment(void) const
Definition recording.h:364
double framesPerSecond
Definition recording.h:357
void SetPosition(int Position)
Definition recording.h:365
int Position(void) const
Definition recording.h:363
virtual ~cMark()
Definition recording.c:2141
void SetComment(const char *Comment)
Definition recording.h:366
int GetNumSequences(void) const
Returns the actual number of sequences to be cut from the recording.
Definition recording.c:2330
double framesPerSecond
Definition recording.h:376
void Add(int Position)
If this cMarks object is used by multiple threads, the caller must Lock() it before calling Add() and...
Definition recording.c:2263
const cMark * GetNextBegin(const cMark *EndMark=NULL) const
Returns the next "begin" mark after EndMark, skipping any marks at the same position as EndMark.
Definition recording.c:2296
const cMark * GetNext(int Position) const
Definition recording.c:2287
bool Update(void)
Definition recording.c:2199
bool Load(const char *RecordingFileName, double FramesPerSecond=DEFAULTFRAMESPERSECOND, bool IsPesRecording=false)
Definition recording.c:2187
time_t lastFileTime
Definition recording.h:379
const cMark * GetNextEnd(const cMark *BeginMark) const
Returns the next "end" mark after BeginMark, skipping any marks at the same position as BeginMark.
Definition recording.c:2312
const cMark * Get(int Position) const
Definition recording.c:2269
cString recordingFileName
Definition recording.h:374
bool isPesRecording
Definition recording.h:377
time_t nextUpdate
Definition recording.h:378
cString fileName
Definition recording.h:375
static bool DeleteMarksFile(const cRecording *Recording)
Definition recording.c:2176
void Align(void)
Definition recording.c:2239
void Sort(void)
Definition recording.c:2251
cMark * Get(int Position)
Definition recording.h:414
cMark * GetNextEnd(const cMark *BeginMark)
Definition recording.h:418
cMarks(void)
Definition recording.h:382
cMark * GetNextBegin(const cMark *EndMark=NULL)
Definition recording.h:417
cMark * GetPrev(int Position)
Definition recording.h:415
static cString MarksFileName(const cRecording *Recording)
Returns the marks file name for the given Recording (regardless whether such a file actually exists).
Definition recording.c:2171
cMark * GetNext(int Position)
Definition recording.h:416
bool Save(void)
Definition recording.c:2230
const cMark * GetPrev(int Position) const
Definition recording.c:2278
time_t lastChange
Definition recording.h:380
const char * ChannelName(void) const
Definition recording.h:82
void SetFramesPerSecond(double FramesPerSecond)
Definition recording.c:456
cEvent * ownEvent
Definition recording.h:69
const cEvent * GetEvent(void) const
Definition recording.h:83
const cEvent * event
Definition recording.h:68
int Errors(void) const
Definition recording.h:92
const char * ShortText(void) const
Definition recording.h:85
bool Write(void) const
Definition recording.c:566
const char * Title(void) const
Definition recording.h:84
bool Read(void)
Definition recording.c:548
tChannelID channelID
Definition recording.h:66
const char * Aux(void) const
Definition recording.h:88
tChannelID ChannelID(void) const
Definition recording.h:81
void SetFileName(const char *FileName)
Definition recording.c:461
char * channelName
Definition recording.h:67
void SetErrors(int Errors)
Definition recording.c:468
void SetAux(const char *Aux)
Definition recording.c:450
void SetData(const char *Title, const char *ShortText, const char *Description)
Definition recording.c:440
const char * Description(void) const
Definition recording.h:86
double framesPerSecond
Definition recording.h:71
double FramesPerSecond(void) const
Definition recording.h:89
char * fileName
Definition recording.h:74
const cComponents * Components(void) const
Definition recording.h:87
static const char * command
Definition recording.h:434
static void InvokeCommand(const char *State, const char *RecordingFileName, const char *SourceFileName=NULL)
Definition recording.c:2351
static void SetCommand(const char *Command)
Definition recording.h:436
int isOnVideoDirectoryFileSystem
Definition recording.h:116
virtual int Compare(const cListObject &ListObject) const
Must return 0 if this object is equal to ListObject, a positive value if it is "greater",...
Definition recording.c:1044
time_t deleted
Definition recording.h:128
cRecordingInfo * info
Definition recording.h:118
bool ChangePriorityLifetime(int NewPriority, int NewLifetime)
Changes the priority and lifetime of this recording to the given values.
Definition recording.c:1235
bool HasMarks(void) const
Returns true if this recording has any editing marks.
Definition recording.c:1189
cRecording & operator=(const cRecording &)
bool WriteInfo(const char *OtherFileName=NULL)
Writes in info file of this recording.
Definition recording.c:1207
int IsInUse(void) const
Checks whether this recording is currently in use and therefore shall not be tampered with.
Definition recording.c:1350
bool ChangeName(const char *NewName)
Changes the name of this recording to the given value.
Definition recording.c:1260
bool Undelete(void)
Changes the file name so that it will be visible in the "Recordings" menu again and not processed by ...
Definition recording.c:1324
void ResetResume(void) const
Definition recording.c:1366
bool IsNew(void) const
Definition recording.h:172
double framesPerSecond
Definition recording.h:117
bool Delete(void)
Changes the file name so that it will no longer be visible in the "Recordings" menu Returns false in ...
Definition recording.c:1287
cString Folder(void) const
Returns the name of the folder this recording is stored in (without the video directory).
Definition recording.c:1061
bool isPesRecording
Definition recording.h:115
void ClearSortName(void)
Definition recording.c:1023
char * sortBufferName
Definition recording.h:107
int NumFrames(void) const
Returns the number of frames in this recording.
Definition recording.c:1371
bool IsEdited(void) const
Definition recording.c:1176
int Id(void) const
Definition recording.h:133
int GetResume(void) const
Returns the index of the frame where replay of this recording shall be resumed, or -1 in case of an e...
Definition recording.c:1035
bool IsInPath(const char *Path) const
Returns true if this recording is stored anywhere under the given Path.
Definition recording.c:1053
virtual ~cRecording()
Definition recording.c:960
int fileSizeMB
Definition recording.h:111
void SetId(int Id)
Definition recording.c:1030
void SetStartTime(time_t Start)
Sets the start time of this recording to the given value.
Definition recording.c:1228
char * SortName(void) const
Definition recording.c:999
const char * Name(void) const
Returns the full name of the recording (without the video directory).
Definition recording.h:149
time_t Start(void) const
Definition recording.h:134
int Lifetime(void) const
Definition recording.h:136
const char * FileName(void) const
Returns the full path name to the recording directory, including the video directory and the actual '...
Definition recording.c:1073
cRecordingInfo * Info(void) const
Definition recording.h:156
const char * PrefixFileName(char Prefix)
Definition recording.c:1154
bool DeleteMarks(void)
Deletes the editing marks from this recording (if any).
Definition recording.c:1194
bool IsOnVideoDirectoryFileSystem(void) const
Definition recording.c:1182
int HierarchyLevels(void) const
Definition recording.c:1165
int FileSizeMB(void) const
Returns the total file size of this recording (in MB), or -1 if the file size is unknown.
Definition recording.c:1390
cString BaseName(void) const
Returns the base name of this recording (without the video directory and folder).
Definition recording.c:1068
char * fileName
Definition recording.h:109
char * titleBuffer
Definition recording.h:106
void SetDeleted(void)
Definition recording.h:138
int Priority(void) const
Definition recording.h:135
void ReadInfo(void)
Definition recording.c:1199
const char * Title(char Delimiter=' ', bool NewIndicator=false, int Level=-1) const
Definition recording.c:1091
int instanceId
Definition recording.h:114
bool Remove(void)
Actually removes the file from the disk Returns false in case of error.
Definition recording.c:1313
char * name
Definition recording.h:110
cRecording(const cRecording &)
char * sortBufferTime
Definition recording.h:108
time_t start
Definition recording.h:125
int numFrames
Definition recording.h:112
double FramesPerSecond(void) const
Definition recording.h:160
bool IsPesRecording(void) const
Definition recording.h:174
time_t Deleted(void) const
Definition recording.h:137
static char * StripEpisodeName(char *s, bool Strip)
Definition recording.c:970
int LengthInSeconds(void) const
Returns the length (in seconds) of this recording, or -1 in case of error.
Definition recording.c:1382
void DelAll(void)
Deletes/terminates all operations.
Definition recording.c:2102
cRecordingsHandlerEntry * Get(const char *FileName)
Definition recording.c:2051
bool Add(int Usage, const char *FileNameSrc, const char *FileNameDst=NULL)
Adds the given FileNameSrc to the recordings handler for (later) processing.
Definition recording.c:2064
bool Finished(bool &Error)
Returns true if all operations in the list have been finished.
Definition recording.c:2117
virtual void Action(void)
A derived cThread class must implement the code it wants to execute as a separate thread in this func...
Definition recording.c:2026
int GetUsage(const char *FileName)
Returns the usage type for the given FileName.
Definition recording.c:2109
cList< cRecordingsHandlerEntry > operations
Definition recording.h:317
void Del(const char *FileName)
Deletes the given FileName from the list of operations.
Definition recording.c:2095
virtual ~cRecordingsHandler()
Definition recording.c:2021
void ResetResume(const char *ResumeFileName=NULL)
Definition recording.c:1704
void UpdateByName(const char *FileName)
Definition recording.c:1626
static const char * UpdateFileName(void)
Definition recording.c:1534
virtual ~cRecordings()
Definition recording.c:1527
double MBperMinute(void) const
Returns the average data rate (in MB/min) of all recordings, or -1 if this value is unknown.
Definition recording.c:1643
cRecording * GetByName(const char *FileName)
Definition recording.h:266
int GetNumRecordingsInPath(const char *Path) const
Returns the total number of recordings in the given Path, including all sub-folders of Path.
Definition recording.c:1674
static const cRecordings * GetRecordingsRead(cStateKey &StateKey, int TimeoutMs=0)
Gets the list of recordings for read access.
Definition recording.h:240
const cRecording * GetById(int Id) const
Definition recording.c:1569
static const cRecordings * GetDeletedRecordingsRead(cStateKey &StateKey, int TimeoutMs=0)
Gets the list of deleted recordings for read access.
Definition recording.h:246
static cRecordings * GetDeletedRecordingsWrite(cStateKey &StateKey, int TimeoutMs=0)
Gets the list of deleted recordings for write access.
Definition recording.h:249
static time_t lastUpdate
Definition recording.h:234
static cRecordings deletedRecordings
Definition recording.h:231
void AddByName(const char *FileName, bool TriggerUpdate=true)
Definition recording.c:1595
static cRecordings recordings
Definition recording.h:230
int TotalFileSizeMB(void) const
Definition recording.c:1632
static void Update(bool Wait=false)
Triggers an update of the list of recordings, which will run as a separate thread if Wait is false.
Definition recording.c:1557
static cRecordings * GetRecordingsWrite(cStateKey &StateKey, int TimeoutMs=0)
Gets the list of recordings for write access.
Definition recording.h:243
static void TouchUpdate(void)
Touches the '.update' file in the video directory, so that other instances of VDR that access the sam...
Definition recording.c:1541
void Add(cRecording *Recording)
Definition recording.c:1589
static cVideoDirectoryScannerThread * videoDirectoryScannerThread
Definition recording.h:235
void DelByName(const char *FileName)
Definition recording.c:1604
bool MoveRecordings(const char *OldPath, const char *NewPath)
Moves all recordings in OldPath to NewPath.
Definition recording.c:1684
static bool NeedsUpdate(void)
Definition recording.c:1549
cRecording * GetById(int Id)
Definition recording.h:264
void ClearSortNames(void)
Definition recording.c:1712
static int lastRecordingId
Definition recording.h:232
const cRecording * GetByName(const char *FileName) const
Definition recording.c:1578
static char * updateFileName
Definition recording.h:233
int PathIsInUse(const char *Path) const
Checks whether any recording in the given Path is currently in use and therefore the whole Path shall...
Definition recording.c:1664
bool isPesRecording
Definition recording.h:54
bool Save(int Index)
Definition recording.c:306
char * fileName
Definition recording.h:53
int Read(void)
Definition recording.c:261
void Delete(void)
Definition recording.c:344
cUnbufferedFile is used for large files that are mainly written or read in a streaming manner,...
Definition tools.h:504
eRecordingUsage
Definition recording.h:28
@ ruSrc
Definition recording.h:37
@ ruCut
Definition recording.h:33
@ ruReplay
Definition recording.h:31
@ ruCopy
Definition recording.h:35
@ ruCanceled
Definition recording.h:41
@ ruTimer
Definition recording.h:30
@ ruDst
Definition recording.h:38
@ ruNone
Definition recording.h:29
@ ruMove
Definition recording.h:34
@ ruPending
Definition recording.h:40
int DirectoryNameMax
Definition recording.c:76
cString GetRecordingTimerId(const char *Directory)
Definition recording.c:3297
eRecordingsSortMode
Definition recording.h:550
@ rsmName
Definition recording.h:550
@ rsmTime
Definition recording.h:550
#define DEFAULTFRAMESPERSECOND
Definition recording.h:352
int HMSFToIndex(const char *HMSF, double FramesPerSecond=DEFAULTFRAMESPERSECOND)
Definition recording.c:3208
eRecordingsSortDir
Definition recording.h:549
@ rsdDescending
Definition recording.h:549
@ rsdAscending
Definition recording.h:549
int DirectoryPathMax
Definition recording.c:75
void GetRecordingsSortMode(const char *Directory)
Definition recording.c:3249
eRecordingsSortMode RecordingsSortMode
Definition recording.c:3242
bool HasRecordingsSortMode(const char *Directory)
Definition recording.c:3244
int InstanceId
Definition recording.c:78
char * ExchangeChars(char *s, bool ToFileSystem)
Definition recording.c:607
bool DirectoryEncoding
Definition recording.c:77
void IncRecordingsSortMode(const char *Directory)
Definition recording.c:3268
void SetRecordingsSortMode(const char *Directory, eRecordingsSortMode SortMode)
Definition recording.c:3260
cDoneRecordings DoneRecordingsPattern
Definition recording.c:3099
int ReadFrame(cUnbufferedFile *f, uchar *b, int Length, int Max)
Definition recording.c:3226
cRecordingsHandler RecordingsHandler
Definition recording.c:2012
void SetRecordingTimerId(const char *Directory, const char *TimerId)
Definition recording.c:3279
void RemoveDeletedRecordings(void)
Definition recording.c:136
int SecondsToFrames(int Seconds, double FramesPerSecond=DEFAULTFRAMESPERSECOND)
Definition recording.c:3219
cString IndexToHMSF(int Index, bool WithFrame=false, double FramesPerSecond=DEFAULTFRAMESPERSECOND)
Definition recording.c:3192
bool GenerateIndex(const char *FileName, bool Update=false)
Generates the index of the existing recording with the given FileName.
Definition recording.c:2905
void AssertFreeDiskSpace(int Priority=0, bool Force=false)
The special Priority value -1 means that we shall get rid of any deleted recordings faster than norma...
Definition recording.c:153
#define DEF_LIST_LOCK(Class)
Definition tools.h:696
unsigned char uchar
Definition tools.h:31
#define DEF_LIST_LOCK2(Class, Name)
Definition tools.h:679