vdr  2.4.1
Classes | Macros | Functions | Variables
recording.c File Reference
#include "recording.h"
#include <ctype.h>
#include <dirent.h>
#include <errno.h>
#include <fcntl.h>
#include <inttypes.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <unistd.h>
#include "channels.h"
#include "cutter.h"
#include "i18n.h"
#include "interface.h"
#include "menu.h"
#include "remux.h"
#include "ringbuffer.h"
#include "skins.h"
#include "svdrp.h"
#include "tools.h"
#include "videodir.h"

Go to the source code of this file.

Classes

class  cRemoveDeletedRecordingsThread
 
struct  tCharExchange
 
class  cVideoDirectoryScannerThread
 
class  cDirCopier
 
class  cRecordingsHandlerEntry
 
class  cIndexFileGenerator
 

Macros

#define __STDC_FORMAT_MACROS
 
#define SUMMARYFALLBACK
 
#define RECEXT   ".rec"
 
#define DELEXT   ".del"
 
#define DATAFORMATPES   "%4d-%02d-%02d.%02d%*c%02d.%02d.%02d" RECEXT
 
#define NAMEFORMATPES   "%s/%s/" "%4d-%02d-%02d.%02d.%02d.%02d.%02d" RECEXT
 
#define DATAFORMATTS   "%4d-%02d-%02d.%02d.%02d.%d-%d" RECEXT
 
#define NAMEFORMATTS   "%s/%s/" DATAFORMATTS
 
#define RESUMEFILESUFFIX   "/resume%s%s"
 
#define SUMMARYFILESUFFIX   "/summary.vdr"
 
#define INFOFILESUFFIX   "/info"
 
#define MARKSFILESUFFIX   "/marks"
 
#define SORTMODEFILE   ".sort"
 
#define TIMERRECFILE   ".timer"
 
#define MINDISKSPACE   1024
 
#define REMOVECHECKDELTA   60
 
#define DELETEDLIFETIME   300
 
#define DISKCHECKDELTA   100
 
#define REMOVELATENCY   10
 
#define MARKSUPDATEDELTA   10
 
#define MININDEXAGE   3600
 
#define MAXREMOVETIME   10
 
#define MAX_LINK_LEVEL   6
 
#define LIMIT_SECS_PER_MB_RADIO   5
 
#define RESUME_NOT_INITIALIZED   (-2)
 
#define IFG_BUFFER_SIZE   KILOBYTE(100)
 
#define INDEXFILESUFFIX   "/index"
 
#define MAXINDEXCATCHUP   8
 
#define INDEXCATCHUPWAIT   100
 
#define MAXWAITFORINDEXFILE   10
 
#define INDEXFILECHECKINTERVAL   500
 
#define INDEXFILETESTINTERVAL   10
 
#define MAXFILESPERRECORDINGPES   255
 
#define RECORDFILESUFFIXPES   "/%03d.vdr"
 
#define MAXFILESPERRECORDINGTS   65535
 
#define RECORDFILESUFFIXTS   "/%05d.ts"
 
#define RECORDFILESUFFIXLEN   20
 

Functions

void RemoveDeletedRecordings (void)
 
void AssertFreeDiskSpace (int Priority, bool Force)
 
bool NeedsConversion (const char *p)
 
char * ExchangeChars (char *s, bool ToFileSystem)
 
char * LimitNameLengths (char *s, int PathMax, int NameMax)
 
struct __attribute__ ((packed))
 
bool GenerateIndex (const char *FileName, bool Update)
 
cString IndexToHMSF (int Index, bool WithFrame, double FramesPerSecond)
 
int HMSFToIndex (const char *HMSF, double FramesPerSecond)
 
int SecondsToFrames (int Seconds, double FramesPerSecond)
 
int ReadFrame (cUnbufferedFile *f, uchar *b, int Length, int Max)
 
bool HasRecordingsSortMode (const char *Directory)
 
void GetRecordingsSortMode (const char *Directory)
 
void SetRecordingsSortMode (const char *Directory, eRecordingsSortMode SortMode)
 
void IncRecordingsSortMode (const char *Directory)
 
void SetRecordingTimerId (const char *Directory, const char *TimerId)
 
cString GetRecordingTimerId (const char *Directory)
 

Variables

int DirectoryPathMax = PATH_MAX - 1
 
int DirectoryNameMax = NAME_MAX
 
bool DirectoryEncoding = false
 
int InstanceId = 0
 
static cRemoveDeletedRecordingsThread RemoveDeletedRecordingsThread
 
tCharExchange CharExchange []
 
const char * InvalidChars = "\"\\/:*?|<>#"
 
cRecordingsHandler RecordingsHandler
 
double MarkFramesPerSecond = DEFAULTFRAMESPERSECOND
 
cMutex MutexMarkFramesPerSecond
 
eRecordingsSortMode RecordingsSortMode = rsmTime
 

Macro Definition Documentation

◆ __STDC_FORMAT_MACROS

#define __STDC_FORMAT_MACROS

Definition at line 16 of file recording.c.

◆ DATAFORMATPES

#define DATAFORMATPES   "%4d-%02d-%02d.%02d%*c%02d.%02d.%02d" RECEXT

Definition at line 48 of file recording.c.

◆ DATAFORMATTS

#define DATAFORMATTS   "%4d-%02d-%02d.%02d.%02d.%d-%d" RECEXT

Definition at line 50 of file recording.c.

◆ DELETEDLIFETIME

#define DELETEDLIFETIME   300

Definition at line 66 of file recording.c.

◆ DELEXT

#define DELEXT   ".del"

Definition at line 38 of file recording.c.

◆ DISKCHECKDELTA

#define DISKCHECKDELTA   100

Definition at line 67 of file recording.c.

◆ IFG_BUFFER_SIZE

#define IFG_BUFFER_SIZE   KILOBYTE(100)

Definition at line 2322 of file recording.c.

◆ INDEXCATCHUPWAIT

#define INDEXCATCHUPWAIT   100

Definition at line 2500 of file recording.c.

◆ INDEXFILECHECKINTERVAL

#define INDEXFILECHECKINTERVAL   500

Definition at line 2524 of file recording.c.

◆ INDEXFILESUFFIX

#define INDEXFILESUFFIX   "/index"

Definition at line 2496 of file recording.c.

◆ INDEXFILETESTINTERVAL

#define INDEXFILETESTINTERVAL   10

Definition at line 2525 of file recording.c.

◆ INFOFILESUFFIX

#define INFOFILESUFFIX   "/info"

Definition at line 57 of file recording.c.

◆ LIMIT_SECS_PER_MB_RADIO

#define LIMIT_SECS_PER_MB_RADIO   5

Definition at line 75 of file recording.c.

◆ MARKSFILESUFFIX

#define MARKSFILESUFFIX   "/marks"

Definition at line 58 of file recording.c.

◆ MARKSUPDATEDELTA

#define MARKSUPDATEDELTA   10

Definition at line 69 of file recording.c.

◆ MAX_LINK_LEVEL

#define MAX_LINK_LEVEL   6

Definition at line 73 of file recording.c.

◆ MAXFILESPERRECORDINGPES

#define MAXFILESPERRECORDINGPES   255

Definition at line 2884 of file recording.c.

◆ MAXFILESPERRECORDINGTS

#define MAXFILESPERRECORDINGTS   65535

Definition at line 2886 of file recording.c.

◆ MAXINDEXCATCHUP

#define MAXINDEXCATCHUP   8

Definition at line 2499 of file recording.c.

◆ MAXREMOVETIME

#define MAXREMOVETIME   10

Definition at line 71 of file recording.c.

◆ MAXWAITFORINDEXFILE

#define MAXWAITFORINDEXFILE   10

Definition at line 2523 of file recording.c.

◆ MINDISKSPACE

#define MINDISKSPACE   1024

Definition at line 63 of file recording.c.

◆ MININDEXAGE

#define MININDEXAGE   3600

Definition at line 70 of file recording.c.

◆ NAMEFORMATPES

#define NAMEFORMATPES   "%s/%s/" "%4d-%02d-%02d.%02d.%02d.%02d.%02d" RECEXT

Definition at line 49 of file recording.c.

◆ NAMEFORMATTS

#define NAMEFORMATTS   "%s/%s/" DATAFORMATTS

Definition at line 51 of file recording.c.

◆ RECEXT

#define RECEXT   ".rec"

Definition at line 37 of file recording.c.

◆ RECORDFILESUFFIXLEN

#define RECORDFILESUFFIXLEN   20

Definition at line 2888 of file recording.c.

◆ RECORDFILESUFFIXPES

#define RECORDFILESUFFIXPES   "/%03d.vdr"

Definition at line 2885 of file recording.c.

◆ RECORDFILESUFFIXTS

#define RECORDFILESUFFIXTS   "/%05d.ts"

Definition at line 2887 of file recording.c.

◆ REMOVECHECKDELTA

#define REMOVECHECKDELTA   60

Definition at line 65 of file recording.c.

◆ REMOVELATENCY

#define REMOVELATENCY   10

Definition at line 68 of file recording.c.

◆ RESUME_NOT_INITIALIZED

#define RESUME_NOT_INITIALIZED   (-2)

Definition at line 568 of file recording.c.

◆ RESUMEFILESUFFIX

#define RESUMEFILESUFFIX   "/resume%s%s"

Definition at line 53 of file recording.c.

◆ SORTMODEFILE

#define SORTMODEFILE   ".sort"

Definition at line 60 of file recording.c.

◆ SUMMARYFALLBACK

#define SUMMARYFALLBACK

Definition at line 35 of file recording.c.

◆ SUMMARYFILESUFFIX

#define SUMMARYFILESUFFIX   "/summary.vdr"

Definition at line 55 of file recording.c.

◆ TIMERRECFILE

#define TIMERRECFILE   ".timer"

Definition at line 61 of file recording.c.

Function Documentation

◆ __attribute__()

struct __attribute__ ( (packed)  )

◆ AssertFreeDiskSpace()

void AssertFreeDiskSpace ( int  Priority = 0,
bool  Force = false 
)

◆ ExchangeChars()

char* ExchangeChars ( char *  s,
bool  ToFileSystem 
)

◆ GenerateIndex()

bool GenerateIndex ( const char *  FileName,
bool  Update = false 
)

Generates the index of the existing recording with the given FileName.

If Update is true, an existing index file will be checked whether it is complete, and will be updated if it isn't. Otherwise an existing index file will be removed before a new one is generated.

Definition at line 2853 of file recording.c.

References cThread::Active(), AddDirectory(), DirectoryOk(), INDEXFILECHECKINTERVAL, INDEXFILESUFFIX, cRecording::IsPesRecording(), cRecording::Name(), and cCondWait::SleepMs().

Referenced by main().

◆ GetRecordingsSortMode()

void GetRecordingsSortMode ( const char *  Directory)

◆ GetRecordingTimerId()

cString GetRecordingTimerId ( const char *  Directory)

Definition at line 3152 of file recording.c.

References AddDirectory(), stripspace(), and TIMERRECFILE.

Referenced by TimerStillRecording().

◆ HasRecordingsSortMode()

bool HasRecordingsSortMode ( const char *  Directory)

Definition at line 3099 of file recording.c.

References AddDirectory(), and SORTMODEFILE.

◆ HMSFToIndex()

int HMSFToIndex ( const char *  HMSF,
double  FramesPerSecond 
)

Definition at line 3063 of file recording.c.

Referenced by cSVDRPServer::CmdPLAY(), and cMark::Parse().

◆ IncRecordingsSortMode()

void IncRecordingsSortMode ( const char *  Directory)

◆ IndexToHMSF()

cString IndexToHMSF ( int  Index,
bool  WithFrame,
double  FramesPerSecond 
)

Definition at line 3047 of file recording.c.

References cString::sprintf().

Referenced by cDvbPlayer::Action(), cReplayControl::ShowProgress(), and cMark::ToText().

◆ LimitNameLengths()

char* LimitNameLengths ( char *  s,
int  PathMax,
int  NameMax 
)

Definition at line 661 of file recording.c.

References FOLDERDELIMCHAR, NeedsConversion(), and SI::Utf8CharLen().

Referenced by cRecording::FileName().

◆ NeedsConversion()

bool NeedsConversion ( const char *  p)

Definition at line 583 of file recording.c.

References DirectoryEncoding, FOLDERDELIMCHAR, and InvalidChars.

Referenced by ExchangeChars(), and LimitNameLengths().

◆ ReadFrame()

int ReadFrame ( cUnbufferedFile f,
uchar b,
int  Length,
int  Max 
)

Definition at line 3081 of file recording.c.

References esyslog, LOG_ERROR, and cUnbufferedFile::Read().

Referenced by cDvbPlayer::Goto(), and cCuttingThread::LoadFrame().

◆ RemoveDeletedRecordings()

void RemoveDeletedRecordings ( void  )

◆ SecondsToFrames()

int SecondsToFrames ( int  Seconds,
double  FramesPerSecond 
)

◆ SetRecordingsSortMode()

void SetRecordingsSortMode ( const char *  Directory,
eRecordingsSortMode  SortMode 
)

Definition at line 3115 of file recording.c.

References AddDirectory(), SORTMODEFILE, and cString::sprintf().

Referenced by IncRecordingsSortMode().

◆ SetRecordingTimerId()

void SetRecordingTimerId ( const char *  Directory,
const char *  TimerId 
)

Variable Documentation

◆ CharExchange

tCharExchange CharExchange[]
Initial value:
= {
{ FOLDERDELIMCHAR, '/' },
{ '/', FOLDERDELIMCHAR },
{ ' ', '_' },
{ '\'', '\'' },
{ '\'', '\x01' },
{ '/', '\x02' },
{ 0, 0 }
}

Definition at line 570 of file recording.c.

Referenced by ExchangeChars().

◆ DirectoryEncoding

bool DirectoryEncoding = false

Definition at line 78 of file recording.c.

Referenced by ExchangeChars(), main(), and NeedsConversion().

◆ DirectoryNameMax

int DirectoryNameMax = NAME_MAX

Definition at line 77 of file recording.c.

Referenced by cRecording::FileName(), and main().

◆ DirectoryPathMax

int DirectoryPathMax = PATH_MAX - 1

Definition at line 76 of file recording.c.

Referenced by cRecording::FileName(), and main().

◆ InstanceId

int InstanceId = 0

Definition at line 79 of file recording.c.

Referenced by cRecording::cRecording(), and main().

◆ InvalidChars

const char* InvalidChars = "\"\\/:*?|<>#"

Definition at line 581 of file recording.c.

Referenced by NeedsConversion().

◆ MarkFramesPerSecond

double MarkFramesPerSecond = DEFAULTFRAMESPERSECOND

Definition at line 2086 of file recording.c.

Referenced by cMark::Parse(), and cMarks::Update().

◆ MutexMarkFramesPerSecond

cMutex MutexMarkFramesPerSecond

Definition at line 2087 of file recording.c.

Referenced by cMarks::Update().

◆ RecordingsHandler

cRecordingsHandler RecordingsHandler

◆ RecordingsSortMode

eRecordingsSortMode RecordingsSortMode = rsmTime

◆ RemoveDeletedRecordingsThread

cRemoveDeletedRecordingsThread RemoveDeletedRecordingsThread
static

Definition at line 133 of file recording.c.

Referenced by RemoveDeletedRecordings().

FOLDERDELIMCHAR
#define FOLDERDELIMCHAR
Definition: recording.h:21