summaryrefslogtreecommitdiff
path: root/recording.h
diff options
context:
space:
mode:
authorKlaus Schmidinger <vdr@tvdr.de>2009-01-06 14:41:11 +0100
committerKlaus Schmidinger <vdr@tvdr.de>2009-01-06 14:41:11 +0100
commit7de7ede26fcabc232d5647b728080fe3c5d9fca2 (patch)
tree930f06d43802fefd93c83ac0e78e31aa25d7bf52 /recording.h
parent7470253c60f98e654e01de5bd7cc3da893524462 (diff)
downloadvdr-7de7ede26fcabc232d5647b728080fe3c5d9fca2.tar.gz
vdr-7de7ede26fcabc232d5647b728080fe3c5d9fca2.tar.bz2
The recording format is now Transport Stream
Diffstat (limited to 'recording.h')
-rw-r--r--recording.h61
1 files changed, 42 insertions, 19 deletions
diff --git a/recording.h b/recording.h
index 4bdcd1b2..a1d497d7 100644
--- a/recording.h
+++ b/recording.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: recording.h 1.59 2007/10/14 10:11:34 kls Exp $
+ * $Id: recording.h 2.1 2009/01/06 10:49:59 kls Exp $
*/
#ifndef __RECORDING_H
@@ -30,8 +30,9 @@ void AssertFreeDiskSpace(int Priority = 0, bool Force = false);
class cResumeFile {
private:
char *fileName;
+ bool isPesRecording;
public:
- cResumeFile(const char *FileName);
+ cResumeFile(const char *FileName, bool IsPesRecording);
~cResumeFile();
int Read(void);
bool Save(int Index);
@@ -46,10 +47,15 @@ private:
const cEvent *event;
cEvent *ownEvent;
char *aux;
+ double framesPerSecond;
+ int priority;
+ int lifetime;
+ char *fileName;
cRecordingInfo(const cChannel *Channel = NULL, const cEvent *Event = NULL);
void SetData(const char *Title, const char *ShortText, const char *Description);
void SetAux(const char *Aux);
public:
+ cRecordingInfo(const char *FileName);
~cRecordingInfo();
tChannelID ChannelID(void) const { return channelID; }
const char *ChannelName(void) const { return channelName; }
@@ -58,8 +64,12 @@ public:
const char *Description(void) const { return event->Description(); }
const cComponents *Components(void) const { return event->Components(); }
const char *Aux(void) const { return aux; }
+ double FramesPerSecond(void) const { return framesPerSecond; }
+ void SetFramesPerSecond(double FramesPerSecond);
bool Read(FILE *f);
bool Write(FILE *f, const char *Prefix = "") const;
+ bool Read(void);
+ bool Write(void) const;
};
class cRecording : public cListObject {
@@ -71,6 +81,10 @@ private:
mutable char *fileName;
mutable char *name;
mutable int fileSizeMB;
+ int channel;
+ int resumeId;
+ bool isPesRecording;
+ double framesPerSecond;
cRecordingInfo *info;
cRecording(const cRecording&); // can't copy cRecording
cRecording &operator=(const cRecording &); // can't assign cRecording
@@ -93,8 +107,10 @@ public:
const char *PrefixFileName(char Prefix);
int HierarchyLevels(void) const;
void ResetResume(void) const;
+ double FramesPerSecond(void) { return framesPerSecond; }
bool IsNew(void) const { return GetResume() <= 0; }
bool IsEdited(void) const;
+ bool IsPesRecording(void) const { return isPesRecording; }
bool WriteInfo(void);
bool Delete(void);
// Changes the file name so that it will no longer be visible in the "Recordings" menu
@@ -149,11 +165,15 @@ public:
extern cRecordings Recordings;
extern cRecordings DeletedRecordings;
+#define DEFAULTFRAMESPERSECOND 25.0
+
class cMark : public cListObject {
+private:
+ double framesPerSecond;
public:
int position;
char *comment;
- cMark(int Position = 0, const char *Comment = NULL);
+ cMark(int Position = 0, const char *Comment = NULL, double FramesPerSecond = DEFAULTFRAMESPERSECOND);
virtual ~cMark();
cString ToText(void);
bool Parse(const char *s);
@@ -161,8 +181,10 @@ public:
};
class cMarks : public cConfig<cMark> {
+private:
+ double framesPerSecond;
public:
- bool Load(const char *RecordingFileName);
+ bool Load(const char *RecordingFileName, double FramesPerSecond = DEFAULTFRAMESPERSECOND, bool IsPesRecording = false);
void Sort(void);
cMark *Add(int Position);
cMark *Get(int Position);
@@ -182,9 +204,6 @@ public:
static void InvokeCommand(const char *State, const char *RecordingFileName);
};
-//XXX+
-#define FRAMESPERSEC 25
-
// The maximum size of a single frame (up to HDTV 1920x1080):
#define MAXFRAMESIZE KILOBYTE(512)
@@ -197,24 +216,27 @@ public:
#define MAXVIDEOFILESIZE 2000 // MB
#define MINVIDEOFILESIZE 100 // MB
+struct tIndexTs;
+
class cIndexFile {
private:
- struct tIndex { int offset; uchar type; uchar number; short reserved; };
int f;
char *fileName;
int size, last;
- tIndex *index;
+ tIndexTs *index;
+ bool isPesRecording;
cResumeFile resumeFile;
cMutex mutex;
+ void ConvertFromPes(tIndexTs *IndexTs, int Count);
bool CatchUp(int Index = -1);
public:
- cIndexFile(const char *FileName, bool Record);
+ cIndexFile(const char *FileName, bool Record, bool IsPesRecording = false);
~cIndexFile();
bool Ok(void) { return index != NULL; }
- bool Write(uchar PictureType, uchar FileNumber, int FileOffset);
- bool Get(int Index, uchar *FileNumber, int *FileOffset, uchar *PictureType = NULL, int *Length = NULL);
- int GetNextIFrame(int Index, bool Forward, uchar *FileNumber = NULL, int *FileOffset = NULL, int *Length = NULL, bool StayOffEnd = false);
- int Get(uchar FileNumber, int FileOffset);
+ bool Write(bool Independent, uint16_t FileNumber, off_t FileOffset);
+ bool Get(int Index, uint16_t *FileNumber, off_t *FileOffset, bool *Independent = NULL, int *Length = NULL);
+ int GetNextIFrame(int Index, bool Forward, uint16_t *FileNumber = NULL, off_t *FileOffset = NULL, int *Length = NULL, bool StayOffEnd = false);
+ int Get(uint16_t FileNumber, off_t FileOffset);
int Last(void) { CatchUp(); return last; }
int GetResume(void) { return resumeFile.Read(); }
bool StoreResume(int Index) { return resumeFile.Save(Index); }
@@ -228,22 +250,23 @@ private:
char *fileName, *pFileNumber;
bool record;
bool blocking;
+ bool isPesRecording;
public:
- cFileName(const char *FileName, bool Record, bool Blocking = false);
+ cFileName(const char *FileName, bool Record, bool Blocking = false, bool IsPesRecording = false);
~cFileName();
const char *Name(void) { return fileName; }
int Number(void) { return fileNumber; }
cUnbufferedFile *Open(void);
void Close(void);
- cUnbufferedFile *SetOffset(int Number, int Offset = 0);
+ cUnbufferedFile *SetOffset(int Number, off_t Offset = 0);
cUnbufferedFile *NextFile(void);
};
-cString IndexToHMSF(int Index, bool WithFrame = false);
+cString IndexToHMSF(int Index, bool WithFrame = false, double FramesPerSecond = DEFAULTFRAMESPERSECOND);
// Converts the given index to a string, optionally containing the frame number.
-int HMSFToIndex(const char *HMSF);
+int HMSFToIndex(const char *HMSF, double FramesPerSecond = DEFAULTFRAMESPERSECOND);
// Converts the given string (format: "hh:mm:ss.ff") to an index.
-int SecondsToFrames(int Seconds); //XXX+ ->player???
+int SecondsToFrames(int Seconds, double FramesPerSecond = DEFAULTFRAMESPERSECOND);
// Returns the number of frames corresponding to the given number of seconds.
int ReadFrame(cUnbufferedFile *f, uchar *b, int Length, int Max);