diff options
author | Klaus Schmidinger <vdr@tvdr.de> | 2009-01-06 14:41:11 +0100 |
---|---|---|
committer | Klaus Schmidinger <vdr@tvdr.de> | 2009-01-06 14:41:11 +0100 |
commit | 7de7ede26fcabc232d5647b728080fe3c5d9fca2 (patch) | |
tree | 930f06d43802fefd93c83ac0e78e31aa25d7bf52 /recording.h | |
parent | 7470253c60f98e654e01de5bd7cc3da893524462 (diff) | |
download | vdr-7de7ede26fcabc232d5647b728080fe3c5d9fca2.tar.gz vdr-7de7ede26fcabc232d5647b728080fe3c5d9fca2.tar.bz2 |
The recording format is now Transport Stream
Diffstat (limited to 'recording.h')
-rw-r--r-- | recording.h | 61 |
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); |