vdr  2.0.7
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 2.46.1.1 2013/12/25 10:54:05 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 
28 void RemoveDeletedRecordings(void);
29 void ClearVanishedRecordings(void);
30 void AssertFreeDiskSpace(int Priority = 0, bool Force = false);
35 
36 class cResumeFile {
37 private:
38  char *fileName;
40 public:
41  cResumeFile(const char *FileName, bool IsPesRecording);
42  ~cResumeFile();
43  int Read(void);
44  bool Save(int Index);
45  void Delete(void);
46  };
47 
49  friend class cRecording;
50 private:
52  char *channelName;
53  const cEvent *event;
55  char *aux;
57  int priority;
58  int lifetime;
59  char *fileName;
60  cRecordingInfo(const cChannel *Channel = NULL, const cEvent *Event = NULL);
61  bool Read(FILE *f);
62  void SetData(const char *Title, const char *ShortText, const char *Description);
63  void SetAux(const char *Aux);
64 public:
65  cRecordingInfo(const char *FileName);
67  tChannelID ChannelID(void) const { return channelID; }
68  const char *ChannelName(void) const { return channelName; }
69  const cEvent *GetEvent(void) const { return event; }
70  const char *Title(void) const { return event->Title(); }
71  const char *ShortText(void) const { return event->ShortText(); }
72  const char *Description(void) const { return event->Description(); }
73  const cComponents *Components(void) const { return event->Components(); }
74  const char *Aux(void) const { return aux; }
75  double FramesPerSecond(void) const { return framesPerSecond; }
77  bool Write(FILE *f, const char *Prefix = "") const;
78  bool Read(void);
79  bool Write(void) const;
80  };
81 
82 class cRecording : public cListObject {
83  friend class cRecordings;
84 private:
85  mutable int resume;
86  mutable char *titleBuffer;
87  mutable char *sortBufferName;
88  mutable char *sortBufferTime;
89  mutable char *fileName;
90  mutable char *name;
91  mutable int fileSizeMB;
92  mutable int numFrames;
93  int channel;
96  mutable int isOnVideoDirectoryFileSystem; // -1 = unknown, 0 = no, 1 = yes
99  cRecording(const cRecording&); // can't copy cRecording
100  cRecording &operator=(const cRecording &); // can't assign cRecording
101  static char *StripEpisodeName(char *s, bool Strip);
102  char *SortName(void) const;
103  void ClearSortName(void);
104  int GetResume(void) const;
105  time_t start;
106  int priority;
107  int lifetime;
108  time_t deleted;
109 public:
110  cRecording(cTimer *Timer, const cEvent *Event);
111  cRecording(const char *FileName);
112  virtual ~cRecording();
113  time_t Start(void) const { return start; }
114  int Priority(void) const { return priority; }
115  int Lifetime(void) const { return lifetime; }
116  time_t Deleted(void) const { return deleted; }
117  virtual int Compare(const cListObject &ListObject) const;
118  const char *Name(void) const { return name; }
119  const char *FileName(void) const;
120  const char *Title(char Delimiter = ' ', bool NewIndicator = false, int Level = -1) const;
121  const cRecordingInfo *Info(void) const { return info; }
122  const char *PrefixFileName(char Prefix);
123  const char *UpdateFileName(const char *FileName);
124  int HierarchyLevels(void) const;
125  void ResetResume(void) const;
126  double FramesPerSecond(void) const { return framesPerSecond; }
127  int NumFrames(void) const;
130  int LengthInSeconds(void) const;
132  int FileSizeMB(void) const;
135  bool IsNew(void) const { return GetResume() < 0; }
136  bool IsEdited(void) const;
137  bool IsPesRecording(void) const { return isPesRecording; }
138  bool IsOnVideoDirectoryFileSystem(void) const;
139  void ReadInfo(void);
140  bool WriteInfo(void);
141  void SetStartTime(time_t Start);
149  bool Delete(void);
152  bool Remove(void);
155  bool Undelete(void);
159  };
160 
161 class cRecordings : public cList<cRecording>, public cThread {
162 private:
163  static char *updateFileName;
164  bool deleted;
165  bool initial;
166  time_t lastUpdate;
167  int state;
168  const char *UpdateFileName(void);
169  void Refresh(bool Foreground = false);
170  void ScanVideoDir(const char *DirName, bool Foreground = false, int LinkLevel = 0, int DirLevel = 0);
171 protected:
172  void Action(void);
173 public:
174  cRecordings(bool Deleted = false);
175  virtual ~cRecordings();
176  bool Load(void) { return Update(true); }
180  bool Update(bool Wait = false);
186  void TouchUpdate(void);
190  bool NeedsUpdate(void);
191  void ChangeState(void) { state++; }
192  bool StateChanged(int &State);
193  void ResetResume(const char *ResumeFileName = NULL);
194  void ClearSortNames(void);
195  cRecording *GetByName(const char *FileName);
196  void AddByName(const char *FileName, bool TriggerUpdate = true);
197  void DelByName(const char *FileName, bool RemoveRecording = true);
198  void UpdateByName(const char *FileName);
199  int TotalFileSizeMB(void);
200  double MBperMinute(void);
203  };
204 
207 extern cRecordings Recordings;
209 
210 #define DEFAULTFRAMESPERSECOND 25.0
211 
212 class cMark : public cListObject {
213  friend class cMarks; // for sorting
214 private:
216  int position;
218 public:
219  cMark(int Position = 0, const char *Comment = NULL, double FramesPerSecond = DEFAULTFRAMESPERSECOND);
220  virtual ~cMark();
221  int Position(void) const { return position; }
222  const char *Comment(void) const { return comment; }
223  void SetPosition(int Position) { position = Position; }
224  void SetComment(const char *Comment) { comment = Comment; }
225  cString ToText(void);
226  bool Parse(const char *s);
227  bool Save(FILE *f);
228  };
229 
230 class cMarks : public cConfig<cMark> {
231 private:
236  time_t nextUpdate;
237  time_t lastFileTime;
238  time_t lastChange;
239 public:
240  bool Load(const char *RecordingFileName, double FramesPerSecond = DEFAULTFRAMESPERSECOND, bool IsPesRecording = false);
241  bool Update(void);
242  bool Save(void);
243  void Align(void);
244  void Sort(void);
245  void Add(int Position);
246  cMark *Get(int Position);
247  cMark *GetPrev(int Position);
248  cMark *GetNext(int Position);
249  cMark *GetNextBegin(cMark *EndMark = NULL);
253  cMark *GetNextEnd(cMark *BeginMark);
256  int GetNumSequences(void);
262  };
263 
264 #define RUC_BEFORERECORDING "before"
265 #define RUC_AFTERRECORDING "after"
266 #define RUC_EDITEDRECORDING "edited"
267 #define RUC_DELETERECORDING "deleted"
268 
270 private:
271  static const char *command;
272 public:
273  static void SetCommand(const char *Command) { command = Command; }
274  static void InvokeCommand(const char *State, const char *RecordingFileName, const char *SourceFileName = NULL);
275  };
276 
277 // The maximum size of a single frame (up to HDTV 1920x1080):
278 #define MAXFRAMESIZE (KILOBYTE(1024) / TS_SIZE * TS_SIZE) // multiple of TS_SIZE to avoid breaking up TS packets
279 
280 // The maximum file size is limited by the range that can be covered
281 // with a 40 bit 'unsigned int', which is 1TB. The actual maximum value
282 // used is 6MB below the theoretical maximum, to have some safety (the
283 // actual file size may be slightly higher because we stop recording only
284 // before the next independent frame, to have a complete Group Of Pictures):
285 #define MAXVIDEOFILESIZETS 1048570 // MB
286 #define MAXVIDEOFILESIZEPES 2000 // MB
287 #define MINVIDEOFILESIZE 100 // MB
288 #define MAXVIDEOFILESIZEDEFAULT MAXVIDEOFILESIZEPES
289 
290 struct tIndexTs;
291 class cIndexFileGenerator;
292 
293 class cIndexFile {
294 private:
295  int f;
297  int size, last;
303  void ConvertFromPes(tIndexTs *IndexTs, int Count);
304  void ConvertToPes(tIndexTs *IndexTs, int Count);
305  bool CatchUp(int Index = -1);
306 public:
307  cIndexFile(const char *FileName, bool Record, bool IsPesRecording = false, bool PauseLive = false);
308  ~cIndexFile();
309  bool Ok(void) { return index != NULL; }
310  bool Write(bool Independent, uint16_t FileNumber, off_t FileOffset);
311  bool Get(int Index, uint16_t *FileNumber, off_t *FileOffset, bool *Independent = NULL, int *Length = NULL);
312  int GetNextIFrame(int Index, bool Forward, uint16_t *FileNumber = NULL, off_t *FileOffset = NULL, int *Length = NULL);
313  int GetClosestIFrame(int Index);
318  int Get(uint16_t FileNumber, off_t FileOffset);
319  int Last(void) { CatchUp(); return last; }
321  int GetResume(void) { return resumeFile.Read(); }
322  bool StoreResume(int Index) { return resumeFile.Save(Index); }
323  bool IsStillRecording(void);
324  void Delete(void);
325  static int GetLength(const char *FileName, bool IsPesRecording = false);
328  static cString IndexFileName(const char *FileName, bool IsPesRecording);
329  };
330 
331 class cFileName {
332 private:
334  uint16_t fileNumber;
336  bool record;
337  bool blocking;
339 public:
340  cFileName(const char *FileName, bool Record, bool Blocking = false, bool IsPesRecording = false);
341  ~cFileName();
342  const char *Name(void) { return fileName; }
343  uint16_t Number(void) { return fileNumber; }
344  bool GetLastPatPmtVersions(int &PatVersion, int &PmtVersion);
345  cUnbufferedFile *Open(void);
346  void Close(void);
347  cUnbufferedFile *SetOffset(int Number, off_t Offset = 0); // yes, Number is int for easier internal calculating
348  cUnbufferedFile *NextFile(void);
349  };
350 
351 cString IndexToHMSF(int Index, bool WithFrame = false, double FramesPerSecond = DEFAULTFRAMESPERSECOND);
352  // Converts the given index to a string, optionally containing the frame number.
353 int HMSFToIndex(const char *HMSF, double FramesPerSecond = DEFAULTFRAMESPERSECOND);
354  // Converts the given string (format: "hh:mm:ss.ff") to an index.
355 int SecondsToFrames(int Seconds, double FramesPerSecond = DEFAULTFRAMESPERSECOND);
356  // Returns the number of frames corresponding to the given number of seconds.
357 
358 int ReadFrame(cUnbufferedFile *f, uchar *b, int Length, int Max);
359 
360 char *ExchangeChars(char *s, bool ToFileSystem);
361  // Exchanges the characters in the given string to or from a file system
362  // specific representation (depending on ToFileSystem). The given string will
363  // be modified and may be reallocated if more space is needed. The return
364  // value points to the resulting string, which may be different from s.
365 
366 bool GenerateIndex(const char *FileName);
367 
370 bool HasRecordingsSortMode(const char *Directory);
371 void GetRecordingsSortMode(const char *Directory);
372 void SetRecordingsSortMode(const char *Directory, eRecordingsSortMode SortMode);
373 void IncRecordingsSortMode(const char *Directory);
374 
375 #endif //__RECORDING_H
bool initial
Definition: recording.h:165
unsigned char uchar
Definition: tools.h:30
Definition: epg.h:71
void SetFramesPerSecond(double FramesPerSecond)
Definition: recording.c:435
int Priority(void) const
Definition: recording.h:114
int Position(void) const
Definition: recording.h:221
bool 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:1384
int TotalFileSizeMB(void)
Definition: recording.c:1450
tIndexTs * index
Definition: recording.h:298
int NumFrames(void) const
Returns the number of frames in this recording.
Definition: recording.c:1229
void Refresh(bool Foreground=false)
Definition: recording.c:1291
static char * StripEpisodeName(char *s, bool Strip)
Definition: recording.c:934
const char * UpdateFileName(const char *FileName)
Definition: recording.c:1098
bool DirectoryEncoding
Definition: recording.c:72
#define DEFAULTFRAMESPERSECOND
Definition: recording.h:210
time_t Start(void) const
Definition: recording.h:113
cRecordingInfo * info
Definition: recording.h:98
cEvent * ownEvent
Definition: recording.h:54
char * fileName
Definition: recording.h:59
char * sortBufferName
Definition: recording.h:87
bool Load(void)
Loads the current list of recordings and returns true if there is anything in it (for compatibility w...
Definition: recording.h:176
cMark * GetPrev(int Position)
Definition: recording.c:1632
const cRecordingInfo * Info(void) const
Definition: recording.h:121
void ResetResume(const char *ResumeFileName=NULL)
Definition: recording.c:1482
const cEvent * event
Definition: recording.h:53
bool CatchUp(int Index=-1)
Definition: recording.c:2025
cResumeFile(const char *FileName, bool IsPesRecording)
Definition: recording.c:236
bool Save(FILE *f)
Definition: recording.c:1534
void ChangeState(void)
Definition: recording.h:191
bool isPesRecording
Definition: recording.h:299
const char * ShortText(void) const
Definition: recording.h:71
bool IsEdited(void) const
Definition: recording.c:1119
int HMSFToIndex(const char *HMSF, double FramesPerSecond=DEFAULTFRAMESPERSECOND)
Definition: recording.c:2438
void DelByName(const char *FileName, bool RemoveRecording=true)
Definition: recording.c:1420
char * name
Definition: recording.h:90
void Sort(void)
Definition: recording.c:1605
static void InvokeCommand(const char *State, const char *RecordingFileName, const char *SourceFileName=NULL)
Definition: recording.c:1705
double FramesPerSecond(void) const
Definition: recording.h:126
cMark * GetNextBegin(cMark *EndMark=NULL)
Returns the next "begin" mark after EndMark, skipping any marks at the same position as EndMark...
Definition: recording.c:1650
cUnbufferedFile * SetOffset(int Number, off_t Offset=0)
Definition: recording.c:2373
const char * Title(char Delimiter= ' ', bool NewIndicator=false, int Level=-1) const
Definition: recording.c:1026
time_t deleted
Definition: recording.h:108
int GetNextIFrame(int Index, bool Forward, uint16_t *FileNumber=NULL, off_t *FileOffset=NULL, int *Length=NULL)
Definition: recording.c:2124
void Align(void)
Definition: recording.c:1593
bool IsOnVideoDirectoryFileSystem(void) const
Definition: recording.c:1126
cMutex mutex
Definition: recording.h:302
int fileSizeMB
Definition: recording.h:91
cUnbufferedFile * NextFile(void)
Definition: recording.c:2415
Definition: tools.h:479
bool Ok(void)
Definition: recording.h:309
tChannelID channelID
Definition: recording.h:51
const cComponents * Components(void) const
Definition: recording.h:73
cString IndexToHMSF(int Index, bool WithFrame=false, double FramesPerSecond=DEFAULTFRAMESPERSECOND)
Definition: recording.c:2422
virtual ~cMark()
Definition: recording.c:1511
double FramesPerSecond(void) const
Definition: recording.h:75
void ResetResume(void) const
Definition: recording.c:1224
cRecording(const cRecording &)
bool IsNew(void) const
Definition: recording.h:135
int Last(void)
Returns the index of the last entry in this file, or -1 if the file is empty.
Definition: recording.h:319
time_t start
Definition: recording.h:105
void SetPosition(int Position)
Definition: recording.h:223
void SetAux(const char *Aux)
Definition: recording.c:429
eRecordingsSortMode
Definition: recording.h:368
cUnbufferedFile is used for large files that are mainly written or read in a streaming manner...
Definition: tools.h:408
static cString IndexFileName(const char *FileName, bool IsPesRecording)
Definition: recording.c:1995
bool GetLastPatPmtVersions(int &PatVersion, int &PmtVersion)
Definition: recording.c:2289
static void SetCommand(const char *Command)
Definition: recording.h:273
uint16_t Number(void)
Definition: recording.h:343
static const char * command
Definition: recording.h:271
bool HasRecordingsSortMode(const char *Directory)
Definition: recording.c:2474
Definition: timers.h:27
void IncRecordingsSortMode(const char *Directory)
Definition: recording.c:2497
bool Save(int Index)
Definition: recording.c:299
eRecordingsSortMode RecordingsSortMode
Definition: recording.c:2472
bool isPesRecording
Definition: recording.h:39
char * SortName(void) const
Definition: recording.c:963
cMark * GetNextEnd(cMark *BeginMark)
Returns the next "end" mark after BeginMark, skipping any marks at the same position as BeginMark...
Definition: recording.c:1666
int priority
Definition: recording.h:106
double framesPerSecond
Definition: recording.h:97
cMark(int Position=0, const char *Comment=NULL, double FramesPerSecond=DEFAULTFRAMESPERSECOND)
Definition: recording.c:1504
double framesPerSecond
Definition: recording.h:56
cRecording & operator=(const cRecording &)
cRecording * GetByName(const char *FileName)
Definition: recording.c:1395
cIndexFile(const char *FileName, bool Record, bool IsPesRecording=false, bool PauseLive=false)
Definition: recording.c:1903
cMark * GetNext(int Position)
Definition: recording.c:1641
void ReadInfo(void)
Definition: recording.c:1133
const char * Comment(void) const
Definition: recording.h:222
bool isPesRecording
Definition: recording.h:235
char * aux
Definition: recording.h:55
void RemoveDeletedRecordings(void)
Definition: recording.c:128
time_t lastChange
Definition: recording.h:238
bool deleted
Definition: recording.h:164
virtual ~cRecording()
Definition: recording.c:924
char * ExchangeChars(char *s, bool ToFileSystem)
Definition: recording.c:571
char * sortBufferTime
Definition: recording.h:88
bool record
Definition: recording.h:336
bool isPesRecording
Definition: recording.h:95
time_t Deleted(void) const
Definition: recording.h:116
void SetData(const char *Title, const char *ShortText, const char *Description)
Definition: recording.c:419
int GetResume(void) const
Definition: recording.c:993
int LengthInSeconds(void) const
Returns the length (in seconds) of this recording, or -1 in case of error.
Definition: recording.c:1240
bool blocking
Definition: recording.h:337
int instanceId
Definition: recording.h:94
bool GenerateIndex(const char *FileName)
Definition: recording.c:2230
void UpdateByName(const char *FileName)
Definition: recording.c:1442
char * channelName
Definition: recording.h:52
int position
Definition: recording.h:216
int lifetime
Definition: recording.h:107
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:145
void SetStartTime(time_t Start)
Sets the start time of this recording to the given value.
Definition: recording.c:1154
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:1248
int InstanceId
Definition: recording.c:73
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:1161
tChannelID ChannelID(void) const
Definition: recording.h:67
void ConvertToPes(tIndexTs *IndexTs, int Count)
Definition: recording.c:2012
cUnbufferedFile * Open(void)
Definition: recording.c:2340
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:2221
int Lifetime(void) const
Definition: recording.h:115
int isOnVideoDirectoryFileSystem
Definition: recording.h:96
void ConvertFromPes(tIndexTs *IndexTs, int Count)
Definition: recording.c:2000
char * pFileNumber
Definition: recording.h:335
int GetClosestIFrame(int Index)
Returns the index of the I-frame that is closest to the given Index (or Index itself, if it already points to an I-frame).
Definition: recording.c:2162
bool Write(void) const
Definition: recording.c:530
char * fileName
Definition: recording.h:335
static char * updateFileName
Definition: recording.h:163
Definition: thread.h:63
bool Read(void)
Definition: recording.c:512
int HierarchyLevels(void) const
Definition: recording.c:1108
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:1279
bool WriteInfo(void)
Definition: recording.c:1141
void TouchUpdate(void)
Touches the '.update' file in the video directory, so that other instances of VDR that access the sam...
Definition: recording.c:1368
int SecondsToFrames(int Seconds, double FramesPerSecond=DEFAULTFRAMESPERSECOND)
Definition: recording.c:2449
bool Parse(const char *s)
Definition: recording.c:1520
const char * UpdateFileName(void)
Definition: recording.c:1284
bool Remove(void)
Actually removes the file from the disk Returns false in case of error.
Definition: recording.c:1187
const char * Name(void)
Definition: recording.h:342
cString fileName
Definition: recording.h:233
cRecordings DeletedRecordings
bool StoreResume(int Index)
Definition: recording.h:322
cIndexFileGenerator * indexFileGenerator
Definition: recording.h:301
cString comment
Definition: recording.h:217
cRecordings(bool Deleted=false)
Definition: recording.c:1265
void GetRecordingsSortMode(const char *Directory)
Definition: recording.c:2479
int ReadFrame(cUnbufferedFile *f, uchar *b, int Length, int Max)
Definition: recording.c:2456
char * titleBuffer
Definition: recording.h:86
int GetNumSequences(void)
Returns the actual number of sequences to be cut from the recording.
Definition: recording.c:1684
void SetRecordingsSortMode(const char *Directory, eRecordingsSortMode SortMode)
Definition: recording.c:2489
int channel
Definition: recording.h:93
void ScanVideoDir(const char *DirName, bool Foreground=false, int LinkLevel=0, int DirLevel=0)
Definition: recording.c:1301
cMark * Get(int Position)
Definition: recording.c:1623
cFileName(const char *FileName, bool Record, bool Blocking=false, bool IsPesRecording=false)
Definition: recording.c:2265
int GetResume(void)
Definition: recording.h:321
cString fileName
Definition: recording.h:296
void Delete(void)
Definition: recording.c:2209
time_t lastFileTime
Definition: recording.h:237
bool NeedsUpdate(void)
Definition: recording.c:1376
void Close(void)
Definition: recording.c:2364
void Delete(void)
Definition: recording.c:327
void ClearSortName(void)
Definition: recording.c:987
double MBperMinute(void)
Returns the average data rate (in MB/min) of all recordings, or -1 if this value is unknown...
Definition: recording.c:1462
void Add(int Position)
Definition: recording.c:1617
const cEvent * GetEvent(void) const
Definition: recording.h:69
const char * Description(void) const
Definition: recording.h:72
const char * Name(void) const
Definition: recording.h:118
double framesPerSecond
Definition: recording.h:234
void ClearVanishedRecordings(void)
Definition: recording.c:228
cResumeFile resumeFile
Definition: recording.h:300
Definition: thread.h:77
char * fileName
Definition: recording.h:38
const char * Title(void) const
Definition: recording.h:70
bool Update(void)
Definition: recording.c:1553
void ClearSortNames(void)
Definition: recording.c:1492
bool StateChanged(int &State)
Definition: recording.c:1360
int Read(void)
Definition: recording.c:254
int resume
Definition: recording.h:85
bool Load(const char *RecordingFileName, double FramesPerSecond=DEFAULTFRAMESPERSECOND, bool IsPesRecording=false)
Definition: recording.c:1541
cRecordingInfo(const cChannel *Channel=NULL, const cEvent *Event=NULL)
Definition: recording.c:339
time_t nextUpdate
Definition: recording.h:236
bool Get(int Index, uint16_t *FileNumber, off_t *FileOffset, bool *Independent=NULL, int *Length=NULL)
Definition: recording.c:2098
const char * ChannelName(void) const
Definition: recording.h:68
bool IsStillRecording(void)
Definition: recording.c:2204
void SetComment(const char *Comment)
Definition: recording.h:224
const char * Aux(void) const
Definition: recording.h:74
bool isPesRecording
Definition: recording.h:338
uint16_t fileNumber
Definition: recording.h:334
cString recordingFileName
Definition: recording.h:232
char * fileName
Definition: recording.h:89
cRecordings Recordings
Any access to Recordings that loops through the list of recordings needs to hold a thread lock on thi...
Definition: recording.c:1261
int DirectoryPathMax
Definition: recording.c:70
const char * FileName(void) const
Definition: recording.c:1008
time_t lastUpdate
Definition: recording.h:166
virtual int Compare(const cListObject &ListObject) const
Must return 0 if this object is equal to ListObject, a positive value if it is "greater", and a negative value if it is "smaller".
Definition: recording.c:1002
const char * PrefixFileName(char Prefix)
Definition: recording.c:1087
bool Save(void)
Definition: recording.c:1584
cUnbufferedFile * file
Definition: recording.h:333
int numFrames
Definition: recording.h:92
void AddByName(const char *FileName, bool TriggerUpdate=true)
Definition: recording.c:1407
bool IsPesRecording(void) const
Definition: recording.h:137
virtual ~cRecordings()
Definition: recording.c:1274
bool Write(bool Independent, uint16_t FileNumber, off_t FileOffset)
Definition: recording.c:2081
int DirectoryNameMax
Definition: recording.c:71
double framesPerSecond
Definition: recording.h:215
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:1198
Definition: tools.h:166
cString ToText(void)
Definition: recording.c:1515