vdr  2.6.1
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 
23 extern int DirectoryPathMax;
24 extern int DirectoryNameMax;
25 extern bool DirectoryEncoding;
26 extern 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 
44 void RemoveDeletedRecordings(void);
45 void AssertFreeDiskSpace(int Priority = 0, bool Force = false);
50 
51 class cResumeFile {
52 private:
53  char *fileName;
55 public:
56  cResumeFile(const char *FileName, bool IsPesRecording);
57  ~cResumeFile();
58  int Read(void);
59  bool Save(int Index);
60  void Delete(void);
61  };
62 
64  friend class cRecording;
65 private:
67  char *channelName;
68  const cEvent *event;
70  char *aux;
72  int priority;
73  int lifetime;
74  char *fileName;
75  int errors;
76  cRecordingInfo(const cChannel *Channel = NULL, const cEvent *Event = NULL);
77  bool Read(FILE *f);
78 public:
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 
101 class cRecording : public cListObject {
102  friend class cRecordings;
103 private:
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;
113  int channel;
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;
126  int priority;
127  int lifetime;
128  time_t deleted;
129 public:
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 
228 class cRecordings : public cList<cRecording> {
229 private:
232  static int lastRecordingId;
233  static char *updateFileName;
234  static time_t lastUpdate;
236  static const char *UpdateFileName(void);
237 public:
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 
300 DEF_LIST_LOCK(Recordings);
301 DEF_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 
314 class cRecordingsHandler : public cThread {
315 private:
318  bool finished;
319  bool error;
320  cRecordingsHandlerEntry *Get(const char *FileName);
321 protected:
322  virtual void Action(void);
323 public:
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 
354 class cMark : public cListObject {
355  friend class cMarks; // for sorting
356 private:
358  int position;
360 public:
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 
372 class cMarks : public cConfig<cMark> {
373 private:
378  time_t nextUpdate;
379  time_t lastFileTime;
380  time_t lastChange;
381 public:
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 
433 private:
434  static const char *command;
435 public:
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 
453 struct tIndexTs;
454 class cIndexFileGenerator;
455 
456 class cIndexFile {
457 private:
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);
469 public:
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 
494 class cFileName {
495 private:
497  uint16_t fileNumber;
499  bool record;
500  bool blocking;
502 public:
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
511  cUnbufferedFile *NextFile(void);
512  };
513 
515 private:
518  void Add(const char *Title);
519 public:
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 
528 cString IndexToHMSF(int Index, bool WithFrame = false, double FramesPerSecond = DEFAULTFRAMESPERSECOND);
529  // Converts the given index to a string, optionally containing the frame number.
530 int HMSFToIndex(const char *HMSF, double FramesPerSecond = DEFAULTFRAMESPERSECOND);
531  // Converts the given string (format: "hh:mm:ss.ff") to an index.
532 int SecondsToFrames(int Seconds, double FramesPerSecond = DEFAULTFRAMESPERSECOND);
533  // Returns the number of frames corresponding to the given number of seconds.
534 
535 int ReadFrame(cUnbufferedFile *f, uchar *b, int Length, int Max);
536 
537 char *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 
543 bool GenerateIndex(const char *FileName, bool Update = false);
548 
552 bool HasRecordingsSortMode(const char *Directory);
553 void GetRecordingsSortMode(const char *Directory);
554 void SetRecordingsSortMode(const char *Directory, eRecordingsSortMode SortMode);
555 void IncRecordingsSortMode(const char *Directory);
556 
557 void SetRecordingTimerId(const char *Directory, const char *TimerId);
558 cString GetRecordingTimerId(const char *Directory);
559 
560 #endif //__RECORDING_H
cRecordings::~cRecordings
virtual ~cRecordings()
Definition: recording.c:1515
cIndexFile::Delete
void Delete(void)
Definition: recording.c:2870
cIndexFile
Definition: recording.h:456
cRecording::BaseName
cString BaseName(void) const
Returns the base name of this recording (without the video directory and folder).
Definition: recording.c:1061
rsmTime
@ rsmTime
Definition: recording.h:550
IncRecordingsSortMode
void IncRecordingsSortMode(const char *Directory)
Definition: recording.c:3254
ReadFrame
int ReadFrame(cUnbufferedFile *f, uchar *b, int Length, int Max)
Definition: recording.c:3212
cRecordingInfo::SetErrors
void SetErrors(int Errors)
Definition: recording.c:461
cRecording::SetId
void SetId(int Id)
Definition: recording.c:1023
eRecordingsSortDir
eRecordingsSortDir
Definition: recording.h:549
cRecordingsHandler
Definition: recording.h:314
cDoneRecordings
Definition: recording.h:514
cRecording::ResetResume
void ResetResume(void) const
Definition: recording.c:1354
cRecording::instanceId
int instanceId
Definition: recording.h:114
cMarks::isPesRecording
bool isPesRecording
Definition: recording.h:377
cRecordings::ResetResume
void ResetResume(const char *ResumeFileName=NULL)
Definition: recording.c:1692
cRecordings::lastUpdate
static time_t lastUpdate
Definition: recording.h:234
cRecording::resume
int resume
Definition: recording.h:105
cMarks::MarksFileName
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:2159
rsdDescending
@ rsdDescending
Definition: recording.h:549
cMark::Save
bool Save(FILE *f)
Definition: recording.c:2152
cVideoDirectoryScannerThread
Definition: recording.c:1391
ruMove
@ ruMove
Definition: recording.h:34
cResumeFile::cResumeFile
cResumeFile(const char *FileName, bool IsPesRecording)
Definition: recording.c:244
InstanceId
int InstanceId
Definition: recording.c:79
cStringList
Definition: tools.h:848
RecordingsHandler
cRecordingsHandler RecordingsHandler
Definition: recording.c:2000
cRecordings::Add
void Add(cRecording *Recording)
Definition: recording.c:1577
cRecordingInfo::SetFramesPerSecond
void SetFramesPerSecond(double FramesPerSecond)
Definition: recording.c:449
cIndexFile::CatchUp
bool CatchUp(int Index=-1)
Definition: recording.c:2686
cRecording::IsPesRecording
bool IsPesRecording(void) const
Definition: recording.h:174
cRecordingsHandler::DelAll
void DelAll(void)
Deletes/terminates all operations.
Definition: recording.c:2090
cMarks::GetNext
const cMark * GetNext(int Position) const
Definition: recording.c:2275
cIndexFile::ConvertToPes
void ConvertToPes(tIndexTs *IndexTs, int Count)
Definition: recording.c:2673
GenerateIndex
bool GenerateIndex(const char *FileName, bool Update=false)
Generates the index of the existing recording with the given FileName.
Definition: recording.c:2891
cIndexFile::GetLength
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:2882
cRecordings::AddByName
void AddByName(const char *FileName, bool TriggerUpdate=true)
Definition: recording.c:1583
cRecording::id
int id
Definition: recording.h:104
cFileName::isPesRecording
bool isPesRecording
Definition: recording.h:501
cRecordingInfo::aux
char * aux
Definition: recording.h:70
cIndexFile::ConvertFromPes
void ConvertFromPes(tIndexTs *IndexTs, int Count)
Definition: recording.c:2661
cMark::framesPerSecond
double framesPerSecond
Definition: recording.h:357
cTimer
Definition: timers.h:31
RecordingsSortMode
eRecordingsSortMode RecordingsSortMode
Definition: recording.c:3228
cMark::ToText
cString ToText(void)
Definition: recording.c:2133
cIndexFileGenerator
Definition: recording.c:2356
ruPending
@ ruPending
Definition: recording.h:40
cFileName::record
bool record
Definition: recording.h:499
cRecordingInfo::Title
const char * Title(void) const
Definition: recording.h:84
cIndexFile::index
tIndexTs * index
Definition: recording.h:461
SetRecordingsSortMode
void SetRecordingsSortMode(const char *Directory, eRecordingsSortMode SortMode)
Definition: recording.c:3246
cRecording::IsNew
bool IsNew(void) const
Definition: recording.h:172
cFileName::SetOffset
cUnbufferedFile * SetOffset(int Number, off_t Offset=0)
Definition: recording.c:3036
cMarks::Sort
void Sort(void)
Definition: recording.c:2239
cRecordings::GetById
cRecording * GetById(int Id)
Definition: recording.h:264
cRecordings::GetRecordingsRead
static const cRecordings * GetRecordingsRead(cStateKey &StateKey, int TimeoutMs=0)
Gets the list of recordings for read access.
Definition: recording.h:240
cRecordings::GetByName
const cRecording * GetByName(const char *FileName) const
Definition: recording.c:1566
cRecordingInfo::SetData
void SetData(const char *Title, const char *ShortText, const char *Description)
Definition: recording.c:433
cRecordingsHandler::cRecordingsHandler
cRecordingsHandler(void)
Definition: recording.c:2002
SecondsToFrames
int SecondsToFrames(int Seconds, double FramesPerSecond=DEFAULTFRAMESPERSECOND)
Definition: recording.c:3205
cRecordings::PathIsInUse
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:1652
cFileName::NextFile
cUnbufferedFile * NextFile(void)
Definition: recording.c:3078
cFileName::Open
cUnbufferedFile * Open(void)
Definition: recording.c:3002
cRecording::IsOnVideoDirectoryFileSystem
bool IsOnVideoDirectoryFileSystem(void) const
Definition: recording.c:1175
cIndexFile::Ok
bool Ok(void)
Definition: recording.h:472
cRecordingsHandler::Finished
bool Finished(bool &Error)
Returns true if all operations in the list have been finished.
Definition: recording.c:2105
cRecording::SetDeleted
void SetDeleted(void)
Definition: recording.h:138
cMark::~cMark
virtual ~cMark()
Definition: recording.c:2129
cRecordingInfo::Description
const char * Description(void) const
Definition: recording.h:86
rsmName
@ rsmName
Definition: recording.h:550
cFileName::fileName
char * fileName
Definition: recording.h:498
cRecording::Info
cRecordingInfo * Info(void) const
Definition: recording.h:156
cRecordingsHandler::Add
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:2052
cIndexFile::IndexFileName
static cString IndexFileName(const char *FileName, bool IsPesRecording)
Definition: recording.c:2656
cRecordingInfo::errors
int errors
Definition: recording.h:75
ruCut
@ ruCut
Definition: recording.h:33
cDoneRecordings::fileName
cString fileName
Definition: recording.h:516
cRecordingInfo::FramesPerSecond
double FramesPerSecond(void) const
Definition: recording.h:89
cRecording::Title
const char * Title(char Delimiter=' ', bool NewIndicator=false, int Level=-1) const
Definition: recording.c:1084
ruCopy
@ ruCopy
Definition: recording.h:35
cRecording::FileName
const char * FileName(void) const
Returns the full path name to the recording directory, including the video directory and the actual '...
Definition: recording.c:1066
cEvent
Definition: epg.h:73
cRecording::Deleted
time_t Deleted(void) const
Definition: recording.h:137
cMarks::GetPrev
cMark * GetPrev(int Position)
Definition: recording.h:415
cRecordingInfo::Errors
int Errors(void) const
Definition: recording.h:92
cRecordings::recordings
static cRecordings recordings
Definition: recording.h:230
cFileName::GetLastPatPmtVersions
bool GetLastPatPmtVersions(int &PatVersion, int &PmtVersion)
Definition: recording.c:2951
tChannelID
Definition: channels.h:47
cRecording::Folder
cString Folder(void) const
Returns the name of the folder this recording is stored in (without the video directory).
Definition: recording.c:1054
cRecordingInfo::ShortText
const char * ShortText(void) const
Definition: recording.h:85
cRecordingsHandler::error
bool error
Definition: recording.h:319
cRecording::sortBufferTime
char * sortBufferTime
Definition: recording.h:108
cMarks::GetPrev
const cMark * GetPrev(int Position) const
Definition: recording.c:2266
cIndexFile::last
int last
Definition: recording.h:460
cMarks::Add
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:2251
cRecordingInfo::Components
const cComponents * Components(void) const
Definition: recording.h:87
cRecordings::deletedRecordings
static cRecordings deletedRecordings
Definition: recording.h:231
cRecording::Delete
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:1280
cRecordings::GetRecordingsWrite
static cRecordings * GetRecordingsWrite(cStateKey &StateKey, int TimeoutMs=0)
Gets the list of recordings for write access.
Definition: recording.h:243
cResumeFile::isPesRecording
bool isPesRecording
Definition: recording.h:54
cStateKey
Definition: thread.h:233
cRecording::Start
time_t Start(void) const
Definition: recording.h:134
cMarks::Update
bool Update(void)
Definition: recording.c:2187
cRecordingInfo::Aux
const char * Aux(void) const
Definition: recording.h:88
DirectoryPathMax
int DirectoryPathMax
Definition: recording.c:76
cRecordingInfo
Definition: recording.h:63
cMarks
Definition: recording.h:372
cRecording::Compare
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:1037
cMark::SetPosition
void SetPosition(int Position)
Definition: recording.h:365
cRecording::StripEpisodeName
static char * StripEpisodeName(char *s, bool Strip)
Definition: recording.c:963
cFileName::Number
uint16_t Number(void)
Definition: recording.h:506
cRecording::Name
const char * Name(void) const
Returns the full name of the recording (without the video directory).
Definition: recording.h:149
cRecordingsHandler::Del
void Del(const char *FileName)
Deletes the given FileName from the list of operations.
Definition: recording.c:2083
cIndexFile::mutex
cMutex mutex
Definition: recording.h:465
ruTimer
@ ruTimer
Definition: recording.h:30
cUnbufferedFile
cUnbufferedFile is used for large files that are mainly written or read in a streaming manner,...
Definition: tools.h:504
cRecordingsHandler::Get
cRecordingsHandlerEntry * Get(const char *FileName)
Definition: recording.c:2039
cMarks::Align
void Align(void)
Definition: recording.c:2227
cMarks::Get
const cMark * Get(int Position) const
Definition: recording.c:2257
cMarks::lastFileTime
time_t lastFileTime
Definition: recording.h:379
cRecordings::UpdateByName
void UpdateByName(const char *FileName)
Definition: recording.c:1614
cRecordingInfo::ChannelID
tChannelID ChannelID(void) const
Definition: recording.h:81
cMutex
Definition: thread.h:67
ruNone
@ ruNone
Definition: recording.h:29
channels.h
cRecording::isOnVideoDirectoryFileSystem
int isOnVideoDirectoryFileSystem
Definition: recording.h:116
cRecordingUserCommand::InvokeCommand
static void InvokeCommand(const char *State, const char *RecordingFileName, const char *SourceFileName=NULL)
Definition: recording.c:2339
GetRecordingsSortMode
void GetRecordingsSortMode(const char *Directory)
Definition: recording.c:3235
cMarks::framesPerSecond
double framesPerSecond
Definition: recording.h:376
cListObject
Definition: tools.h:540
cMarks::recordingFileName
cString recordingFileName
Definition: recording.h:374
cRecording::deleted
time_t deleted
Definition: recording.h:128
cMarks::nextUpdate
time_t nextUpdate
Definition: recording.h:378
cRecordings::GetByName
cRecording * GetByName(const char *FileName)
Definition: recording.h:266
cDoneRecordings::Contains
bool Contains(const char *Title) const
Definition: recording.c:3155
cDoneRecordings::Add
void Add(const char *Title)
Definition: recording.c:3127
cRecordingsHandler::GetUsage
int GetUsage(const char *FileName)
Returns the usage type for the given FileName.
Definition: recording.c:2097
cRecordingUserCommand
Definition: recording.h:432
cRecordings::GetDeletedRecordingsRead
static const cRecordings * GetDeletedRecordingsRead(cStateKey &StateKey, int TimeoutMs=0)
Gets the list of deleted recordings for read access.
Definition: recording.h:246
cMarks::Save
bool Save(void)
Definition: recording.c:2218
cFileName::~cFileName
~cFileName()
Definition: recording.c:2945
cRecording::fileSizeMB
int fileSizeMB
Definition: recording.h:111
cFileName::fileNumber
uint16_t fileNumber
Definition: recording.h:497
rsdAscending
@ rsdAscending
Definition: recording.h:549
cRecordings::GetById
const cRecording * GetById(int Id) const
Definition: recording.c:1557
cRecordingInfo::framesPerSecond
double framesPerSecond
Definition: recording.h:71
cFileName::file
cUnbufferedFile * file
Definition: recording.h:496
cRecording::priority
int priority
Definition: recording.h:126
cFileName
Definition: recording.h:494
cRecording::FramesPerSecond
double FramesPerSecond(void) const
Definition: recording.h:160
cRecording::PrefixFileName
const char * PrefixFileName(char Prefix)
Definition: recording.c:1147
cRecordingsHandler::finished
bool finished
Definition: recording.h:318
uchar
unsigned char uchar
Definition: tools.h:31
cRecordingInfo::SetAux
void SetAux(const char *Aux)
Definition: recording.c:443
cListBase::Lock
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:2175
cRecording::numFrames
int numFrames
Definition: recording.h:112
cMarks::cMarks
cMarks(void)
Definition: recording.h:382
cMarks::GetNextEnd
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:2300
cMarks::GetNextBegin
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:2284
cRecordings::TotalFileSizeMB
int TotalFileSizeMB(void) const
Definition: recording.c:1620
cRecording::FileSizeMB
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:1378
cIndexFile::GetClosestIFrame
int GetClosestIFrame(int Index)
Returns the index of the I-frame that is closest to the given Index (or Index itself,...
Definition: recording.c:2823
cRecordingInfo::~cRecordingInfo
~cRecordingInfo()
Definition: recording.c:425
cMark::comment
cString comment
Definition: recording.h:359
cMark
Definition: recording.h:354
cIndexFile::StoreResume
bool StoreResume(int Index)
Definition: recording.h:485
DirectoryNameMax
int DirectoryNameMax
Definition: recording.c:77
DEF_LIST_LOCK
DEF_LIST_LOCK(Recordings)
cRecording::framesPerSecond
double framesPerSecond
Definition: recording.h:117
cResumeFile::Save
bool Save(int Index)
Definition: recording.c:307
ruCanceled
@ ruCanceled
Definition: recording.h:41
cIndexFile::fileName
cString fileName
Definition: recording.h:459
cRecording
Definition: recording.h:101
DEF_LIST_LOCK2
DEF_LIST_LOCK2(Recordings, DeletedRecordings)
cRecordings::lastRecordingId
static int lastRecordingId
Definition: recording.h:232
cMark::cMark
cMark(int Position=0, const char *Comment=NULL, double FramesPerSecond=DEFAULTFRAMESPERSECOND)
Definition: recording.c:2122
cRecording::LengthInSeconds
int LengthInSeconds(void) const
Returns the length (in seconds) of this recording, or -1 in case of error.
Definition: recording.c:1370
DirectoryEncoding
bool DirectoryEncoding
Definition: recording.c:78
DEFAULTFRAMESPERSECOND
#define DEFAULTFRAMESPERSECOND
Definition: recording.h:352
cRecordingInfo::Read
bool Read(void)
Definition: recording.c:541
cList
Definition: tools.h:641
cRecordingsHandler::Action
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:2014
cRecording::start
time_t start
Definition: recording.h:125
DoneRecordingsPattern
cDoneRecordings DoneRecordingsPattern
Definition: recording.c:3085
cRecordings::Update
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:1545
cIndexFile::cIndexFile
cIndexFile(const char *FileName, bool Record, bool IsPesRecording=false, bool PauseLive=false, bool Update=false)
Definition: recording.c:2559
cMark::Comment
const char * Comment(void) const
Definition: recording.h:364
ruSrc
@ ruSrc
Definition: recording.h:37
SetRecordingTimerId
void SetRecordingTimerId(const char *Directory, const char *TimerId)
Definition: recording.c:3265
eRecordingUsage
eRecordingUsage
Definition: recording.h:28
cIndexFile::IsStillRecording
bool IsStillRecording(void)
Definition: recording.c:2865
IndexToHMSF
cString IndexToHMSF(int Index, bool WithFrame=false, double FramesPerSecond=DEFAULTFRAMESPERSECOND)
Definition: recording.c:3178
cRecordings::videoDirectoryScannerThread
static cVideoDirectoryScannerThread * videoDirectoryScannerThread
Definition: recording.h:235
cComponents
Definition: epg.h:53
cRecording::ChangeName
bool ChangeName(const char *NewName)
Changes the name of this recording to the given value.
Definition: recording.c:1253
cRecordingInfo::priority
int priority
Definition: recording.h:72
cChannel
Definition: channels.h:87
cRecording::~cRecording
virtual ~cRecording()
Definition: recording.c:953
cRecording::isPesRecording
bool isPesRecording
Definition: recording.h:115
cDoneRecordings::doneRecordings
cStringList doneRecordings
Definition: recording.h:517
GetRecordingTimerId
cString GetRecordingTimerId(const char *Directory)
Definition: recording.c:3283
cResumeFile::fileName
char * fileName
Definition: recording.h:53
cFileName::Name
const char * Name(void)
Definition: recording.h:505
cRecordingInfo::SetFileName
void SetFileName(const char *FileName)
Definition: recording.c:454
cRecordings::ClearSortNames
void ClearSortNames(void)
Definition: recording.c:1700
cString
Definition: tools.h:178
eRecordingsSortMode
eRecordingsSortMode
Definition: recording.h:550
cRecordingInfo::cRecordingInfo
cRecordingInfo(const cChannel *Channel=NULL, const cEvent *Event=NULL)
Definition: recording.c:351
cRecordingsHandler::mutex
cMutex mutex
Definition: recording.h:316
cResumeFile::~cResumeFile
~cResumeFile()
Definition: recording.c:257
cRecording::lifetime
int lifetime
Definition: recording.h:127
HMSFToIndex
int HMSFToIndex(const char *HMSF, double FramesPerSecond=DEFAULTFRAMESPERSECOND)
Definition: recording.c:3194
cRecording::HasMarks
bool HasMarks(void) const
Returns true if this recording has any editing marks.
Definition: recording.c:1182
cMark::Parse
bool Parse(const char *s)
Definition: recording.c:2138
cRecordings::UpdateFileName
static const char * UpdateFileName(void)
Definition: recording.c:1522
cDoneRecordings::Save
bool Save(void) const
Definition: recording.c:3108
cIndexFile::indexFileGenerator
cIndexFileGenerator * indexFileGenerator
Definition: recording.h:464
cMark::position
int position
Definition: recording.h:358
cRecording::HierarchyLevels
int HierarchyLevels(void) const
Definition: recording.c:1158
cMarks::GetNextBegin
cMark * GetNextBegin(const cMark *EndMark=NULL)
Definition: recording.h:417
cRecordings::GetNumRecordingsInPath
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:1662
cDoneRecordings::Append
void Append(const char *Title)
Definition: recording.c:3132
cRecordings::NeedsUpdate
static bool NeedsUpdate(void)
Definition: recording.c:1537
cRecordingInfo::channelID
tChannelID channelID
Definition: recording.h:66
timers.h
cRecordings::cRecordings
cRecordings(bool Deleted=false)
Definition: recording.c:1510
HasRecordingsSortMode
bool HasRecordingsSortMode(const char *Directory)
Definition: recording.c:3230
cMark::SetComment
void SetComment(const char *Comment)
Definition: recording.h:366
cMarks::DeleteMarksFile
static bool DeleteMarksFile(const cRecording *Recording)
Definition: recording.c:2164
cMarks::Load
bool Load(const char *RecordingFileName, double FramesPerSecond=DEFAULTFRAMESPERSECOND, bool IsPesRecording=false)
Definition: recording.c:2175
cThread
Definition: thread.h:79
cMarks::GetNumSequences
int GetNumSequences(void) const
Returns the actual number of sequences to be cut from the recording.
Definition: recording.c:2318
cIndexFile::f
int f
Definition: recording.h:458
cFileName::Close
void Close(void)
Definition: recording.c:3026
cIndexFile::Write
bool Write(bool Independent, uint16_t FileNumber, off_t FileOffset)
Definition: recording.c:2742
cRecording::info
cRecordingInfo * info
Definition: recording.h:118
cRecordings::updateFileName
static char * updateFileName
Definition: recording.h:233
cRecordingInfo::ChannelName
const char * ChannelName(void) const
Definition: recording.h:82
cIndexFile::Last
int Last(void)
Returns the index of the last entry in this file, or -1 if the file is empty.
Definition: recording.h:482
cRecordings::DelByName
void DelByName(const char *FileName)
Definition: recording.c:1592
cRecordingsHandler::operations
cList< cRecordingsHandlerEntry > operations
Definition: recording.h:317
cRecording::Undelete
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:1317
cIndexFile::resumeFile
cResumeFile resumeFile
Definition: recording.h:463
cRecordings::TouchUpdate
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:1529
cRecordings::MoveRecordings
bool MoveRecordings(const char *OldPath, const char *NewPath)
Moves all recordings in OldPath to NewPath.
Definition: recording.c:1672
cRecording::fileName
char * fileName
Definition: recording.h:109
cIndexFile::size
int size
Definition: recording.h:460
cRecordingInfo::fileName
char * fileName
Definition: recording.h:74
cRecordingsHandler::~cRecordingsHandler
virtual ~cRecordingsHandler()
Definition: recording.c:2009
cRecordingInfo::GetEvent
const cEvent * GetEvent(void) const
Definition: recording.h:83
cRecordingsHandlerEntry
Definition: recording.c:1871
cRecordings::GetDeletedRecordingsWrite
static cRecordings * GetDeletedRecordingsWrite(cStateKey &StateKey, int TimeoutMs=0)
Gets the list of deleted recordings for write access.
Definition: recording.h:249
cConfig
Definition: config.h:113
cRecording::IsInUse
int IsInUse(void) const
Checks whether this recording is currently in use and therefore shall not be tampered with.
Definition: recording.c:1343
cRecordingInfo::Write
bool Write(void) const
Definition: recording.c:559
cFileName::pFileNumber
char * pFileNumber
Definition: recording.h:498
cRecording::GetResume
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:1028
cResumeFile
Definition: recording.h:51
cMarks::fileName
cString fileName
Definition: recording.h:375
cRecordingUserCommand::SetCommand
static void SetCommand(const char *Command)
Definition: recording.h:436
config.h
cIndexFile::GetNextIFrame
int GetNextIFrame(int Index, bool Forward, uint16_t *FileNumber=NULL, off_t *FileOffset=NULL, int *Length=NULL)
Definition: recording.c:2785
cRecording::channel
int channel
Definition: recording.h:113
cRecording::cRecording
cRecording(const cRecording &)
cMarks::Get
cMark * Get(int Position)
Definition: recording.h:414
cRecordings
Definition: recording.h:228
epg.h
cMarks::GetNextEnd
cMark * GetNextEnd(const cMark *BeginMark)
Definition: recording.h:418
cRecording::operator=
cRecording & operator=(const cRecording &)
cRecording::ChangePriorityLifetime
bool ChangePriorityLifetime(int NewPriority, int NewLifetime)
Changes the priority and lifetime of this recording to the given values.
Definition: recording.c:1228
cRecording::name
char * name
Definition: recording.h:110
cRecording::IsInPath
bool IsInPath(const char *Path) const
Returns true if this recording is stored anywhere under the given Path.
Definition: recording.c:1046
cRecordingInfo::lifetime
int lifetime
Definition: recording.h:73
cRecording::sortBufferName
char * sortBufferName
Definition: recording.h:107
tools.h
AssertFreeDiskSpace
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:154
cRecordingInfo::channelName
char * channelName
Definition: recording.h:67
cResumeFile::Read
int Read(void)
Definition: recording.c:262
cRecording::Priority
int Priority(void) const
Definition: recording.h:135
cRecording::titleBuffer
char * titleBuffer
Definition: recording.h:106
ExchangeChars
char * ExchangeChars(char *s, bool ToFileSystem)
Definition: recording.c:600
cRecording::Remove
bool Remove(void)
Actually removes the file from the disk Returns false in case of error.
Definition: recording.c:1306
cIndexFile::Get
bool Get(int Index, uint16_t *FileNumber, off_t *FileOffset, bool *Independent=NULL, int *Length=NULL)
Definition: recording.c:2759
cRecording::SortName
char * SortName(void) const
Definition: recording.c:992
cRecording::Lifetime
int Lifetime(void) const
Definition: recording.h:136
cRecordingInfo::ownEvent
cEvent * ownEvent
Definition: recording.h:69
cResumeFile::Delete
void Delete(void)
Definition: recording.c:337
thread.h
cIndexFile::isPesRecording
bool isPesRecording
Definition: recording.h:462
cRecordingUserCommand::command
static const char * command
Definition: recording.h:434
cRecording::ClearSortName
void ClearSortName(void)
Definition: recording.c:1016
cMarks::GetNext
cMark * GetNext(int Position)
Definition: recording.h:416
cIndexFile::~cIndexFile
~cIndexFile()
Definition: recording.c:2648
cFileName::cFileName
cFileName(const char *FileName, bool Record, bool Blocking=false, bool IsPesRecording=false)
Definition: recording.c:2927
cMarks::lastChange
time_t lastChange
Definition: recording.h:380
cRecordingInfo::event
const cEvent * event
Definition: recording.h:68
cRecording::IsEdited
bool IsEdited(void) const
Definition: recording.c:1169
cMark::Position
int Position(void) const
Definition: recording.h:363
cRecording::DeleteMarks
bool DeleteMarks(void)
Deletes the editing marks from this recording (if any).
Definition: recording.c:1187
cRecording::NumFrames
int NumFrames(void) const
Returns the number of frames in this recording.
Definition: recording.c:1359
ruDst
@ ruDst
Definition: recording.h:38
cRecordings::MBperMinute
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:1631
cIndexFile::GetResume
int GetResume(void)
Definition: recording.h:484
cFileName::blocking
bool blocking
Definition: recording.h:500
cRecording::Id
int Id(void) const
Definition: recording.h:133
cRecording::ReadInfo
void ReadInfo(void)
Definition: recording.c:1192
cDoneRecordings::Load
bool Load(const char *FileName)
Definition: recording.c:3087
ruReplay
@ ruReplay
Definition: recording.h:31
cRecording::WriteInfo
bool WriteInfo(const char *OtherFileName=NULL)
Writes in info file of this recording.
Definition: recording.c:1200
cRecording::SetStartTime
void SetStartTime(time_t Start)
Sets the start time of this recording to the given value.
Definition: recording.c:1221
RemoveDeletedRecordings
void RemoveDeletedRecordings(void)
Definition: recording.c:137