vdr 2.6.1
|
#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) |
static const char * | SkipFuzzyChars (const char *s) |
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 |
cDoneRecordings | DoneRecordingsPattern |
static const char * | FuzzyChars = " -:" |
eRecordingsSortMode | RecordingsSortMode = rsmTime |
#define __STDC_FORMAT_MACROS |
Definition at line 15 of file recording.c.
#define DATAFORMATPES "%4d-%02d-%02d.%02d%*c%02d.%02d.%02d" RECEXT |
Definition at line 47 of file recording.c.
#define DATAFORMATTS "%4d-%02d-%02d.%02d.%02d.%d-%d" RECEXT |
Definition at line 49 of file recording.c.
#define DELETEDLIFETIME 300 |
Definition at line 65 of file recording.c.
#define DELEXT ".del" |
Definition at line 37 of file recording.c.
#define DISKCHECKDELTA 100 |
Definition at line 66 of file recording.c.
#define IFG_BUFFER_SIZE KILOBYTE(100) |
Definition at line 2354 of file recording.c.
#define INDEXCATCHUPWAIT 100 |
Definition at line 2532 of file recording.c.
#define INDEXFILECHECKINTERVAL 500 |
Definition at line 2556 of file recording.c.
#define INDEXFILESUFFIX "/index" |
Definition at line 2528 of file recording.c.
#define INDEXFILETESTINTERVAL 10 |
Definition at line 2557 of file recording.c.
#define INFOFILESUFFIX "/info" |
Definition at line 56 of file recording.c.
#define LIMIT_SECS_PER_MB_RADIO 5 |
Definition at line 74 of file recording.c.
#define MARKSFILESUFFIX "/marks" |
Definition at line 57 of file recording.c.
#define MARKSUPDATEDELTA 10 |
Definition at line 68 of file recording.c.
#define MAX_LINK_LEVEL 6 |
Definition at line 72 of file recording.c.
#define MAXFILESPERRECORDINGPES 255 |
Definition at line 2921 of file recording.c.
#define MAXFILESPERRECORDINGTS 65535 |
Definition at line 2923 of file recording.c.
#define MAXINDEXCATCHUP 8 |
Definition at line 2531 of file recording.c.
#define MAXREMOVETIME 10 |
Definition at line 70 of file recording.c.
#define MAXWAITFORINDEXFILE 10 |
Definition at line 2555 of file recording.c.
#define MINDISKSPACE 1024 |
Definition at line 62 of file recording.c.
#define MININDEXAGE 3600 |
Definition at line 69 of file recording.c.
#define NAMEFORMATPES "%s/%s/" "%4d-%02d-%02d.%02d.%02d.%02d.%02d" RECEXT |
Definition at line 48 of file recording.c.
#define NAMEFORMATTS "%s/%s/" DATAFORMATTS |
Definition at line 50 of file recording.c.
#define RECEXT ".rec" |
Definition at line 36 of file recording.c.
#define RECORDFILESUFFIXLEN 20 |
Definition at line 2925 of file recording.c.
#define RECORDFILESUFFIXPES "/%03d.vdr" |
Definition at line 2922 of file recording.c.
#define RECORDFILESUFFIXTS "/%05d.ts" |
Definition at line 2924 of file recording.c.
#define REMOVECHECKDELTA 60 |
Definition at line 64 of file recording.c.
#define REMOVELATENCY 10 |
Definition at line 67 of file recording.c.
#define RESUME_NOT_INITIALIZED (-2) |
Definition at line 577 of file recording.c.
#define RESUMEFILESUFFIX "/resume%s%s" |
Definition at line 52 of file recording.c.
#define SORTMODEFILE ".sort" |
Definition at line 59 of file recording.c.
#define SUMMARYFALLBACK |
Definition at line 34 of file recording.c.
#define SUMMARYFILESUFFIX "/summary.vdr" |
Definition at line 54 of file recording.c.
#define TIMERRECFILE ".timer" |
Definition at line 60 of file recording.c.
struct __attribute__ | ( | (packed) | ) |
Definition at line 2380 of file recording.c.
Referenced by get_unaligned(), and put_unaligned().
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 normal (because we're cutting).
If Force is true, the check will be done even if the timeout hasn't expired yet.
Definition at line 154 of file recording.c.
References cRecording::Delete(), DISKCHECKDELTA, cRecording::IsEdited(), cRecording::IsOnVideoDirectoryFileSystem(), isyslog, cRecording::Lifetime(), cLockFile::Lock(), LOCK_DELETEDRECORDINGS_READ, LOCK_DELETEDRECORDINGS_WRITE, LOCK_RECORDINGS_WRITE, MAXLIFETIME, MINDISKSPACE, mtWarning, cVideoDirectory::Name(), cListObject::Next(), cRecording::Priority(), cSkins::QueueMessage(), cRecording::Remove(), REMOVELATENCY, SECSINDAY, Skins, cRecording::Start(), tr, cRecordings::Update(), and cVideoDirectory::VideoFileSpaceAvailable().
Referenced by main(), cCuttingThread::ProcessSequence(), and cRecordControls::Start().
char * ExchangeChars | ( | char * | s, |
bool | ToFileSystem | ||
) |
Definition at line 600 of file recording.c.
References tCharExchange::a, CharExchange, DirectoryEncoding, esyslog, FOLDERDELIMCHAR, and NeedsConversion().
Referenced by cMenuRecordingEdit::Action(), cSVDRPServer::CmdCPYR(), cRecording::cRecording(), cMenuRecordings::DirectoryName(), and cRecording::FileName().
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 2891 of file recording.c.
References cThread::Active(), AddDirectory(), DirectoryOk(), INDEXFILECHECKINTERVAL, INDEXFILESUFFIX, cRecording::IsPesRecording(), cRecording::Name(), and cCondWait::SleepMs().
Referenced by main().
void GetRecordingsSortMode | ( | const char * | Directory | ) |
Definition at line 3235 of file recording.c.
References AddDirectory(), constrain(), cSetup::DefaultSortModeRec, RecordingsSortMode, rsmTime, Setup, and SORTMODEFILE.
Referenced by IncRecordingsSortMode(), and cMenuRecordings::Set().
cString GetRecordingTimerId | ( | const char * | Directory | ) |
Definition at line 3283 of file recording.c.
References AddDirectory(), stripspace(), and TIMERRECFILE.
Referenced by TimerStillRecording().
bool HasRecordingsSortMode | ( | const char * | Directory | ) |
Definition at line 3230 of file recording.c.
References AddDirectory(), and SORTMODEFILE.
int HMSFToIndex | ( | const char * | HMSF, |
double | FramesPerSecond | ||
) |
Definition at line 3194 of file recording.c.
Referenced by cSVDRPServer::CmdPLAY(), and cMark::Parse().
void IncRecordingsSortMode | ( | const char * | Directory | ) |
Definition at line 3254 of file recording.c.
References GetRecordingsSortMode(), RecordingsSortMode, rsmTime, and SetRecordingsSortMode().
Referenced by cMenuRecordings::Sort().
cString IndexToHMSF | ( | int | Index, |
bool | WithFrame, | ||
double | FramesPerSecond | ||
) |
Definition at line 3178 of file recording.c.
References cString::sprintf().
Referenced by cDvbPlayer::Action(), cReplayControl::ShowProgress(), and cMark::ToText().
char * LimitNameLengths | ( | char * | s, |
int | PathMax, | ||
int | NameMax | ||
) |
Definition at line 671 of file recording.c.
References FOLDERDELIMCHAR, NeedsConversion(), and Utf8CharLen().
Referenced by cRecording::FileName().
bool NeedsConversion | ( | const char * | p | ) |
Definition at line 593 of file recording.c.
References DirectoryEncoding, FOLDERDELIMCHAR, and InvalidChars.
Referenced by ExchangeChars(), and LimitNameLengths().
int ReadFrame | ( | cUnbufferedFile * | f, |
uchar * | b, | ||
int | Length, | ||
int | Max | ||
) |
Definition at line 3212 of file recording.c.
References esyslog, LOG_ERROR, and cUnbufferedFile::Read().
Referenced by cDvbPlayer::Goto(), and cCuttingThread::LoadFrame().
void RemoveDeletedRecordings | ( | void | ) |
Definition at line 137 of file recording.c.
References cThread::Active(), DELETEDLIFETIME, LOCK_DELETEDRECORDINGS_READ, cListObject::Next(), REMOVECHECKDELTA, RemoveDeletedRecordingsThread, and cThread::Start().
Referenced by main().
int SecondsToFrames | ( | int | Seconds, |
double | FramesPerSecond | ||
) |
Definition at line 3205 of file recording.c.
Referenced by cReplayControl::EditTest(), cReplayControl::MarkJump(), cDvbPlayer::SkipSeconds(), and cReplayControl::TimeSearchProcess().
void SetRecordingsSortMode | ( | const char * | Directory, |
eRecordingsSortMode | SortMode | ||
) |
Definition at line 3246 of file recording.c.
References AddDirectory(), SORTMODEFILE, and cString::sprintf().
Referenced by IncRecordingsSortMode().
void SetRecordingTimerId | ( | const char * | Directory, |
const char * | TimerId | ||
) |
Definition at line 3265 of file recording.c.
References AddDirectory(), dsyslog, LOG_ERROR_STR, and TIMERRECFILE.
Referenced by cRecordControl::cRecordControl(), and cRecordControl::Stop().
|
static |
Definition at line 3148 of file recording.c.
References FuzzyChars.
Referenced by cDoneRecordings::Contains().
tCharExchange CharExchange[] |
Definition at line 580 of file recording.c.
Referenced by ExchangeChars().
bool DirectoryEncoding = false |
Definition at line 78 of file recording.c.
Referenced by ExchangeChars(), main(), and NeedsConversion().
int DirectoryNameMax = NAME_MAX |
Definition at line 77 of file recording.c.
Referenced by cRecording::FileName(), and main().
int DirectoryPathMax = PATH_MAX - 1 |
Definition at line 76 of file recording.c.
Referenced by cRecording::FileName(), and main().
cDoneRecordings DoneRecordingsPattern |
Definition at line 3085 of file recording.c.
Referenced by main(), cTimer::Matches(), and cRecordControl::Stop().
|
static |
Definition at line 3146 of file recording.c.
Referenced by SkipFuzzyChars().
int InstanceId = 0 |
Definition at line 79 of file recording.c.
Referenced by cRecording::cRecording(), and main().
const char* InvalidChars = "\"\\/:*?|<>#" |
Definition at line 591 of file recording.c.
Referenced by NeedsConversion().
double MarkFramesPerSecond = DEFAULTFRAMESPERSECOND |
Definition at line 2119 of file recording.c.
Referenced by cMark::Parse(), and cMarks::Update().
cMutex MutexMarkFramesPerSecond |
Definition at line 2120 of file recording.c.
Referenced by cMarks::Update().
cRecordingsHandler RecordingsHandler |
Definition at line 2000 of file recording.c.
Referenced by cMenuRecordingEdit::Action(), cSVDRPServer::CmdCPYR(), cSVDRPServer::CmdEDIT(), cShutdownHandler::ConfirmRestart(), cShutdownHandler::ConfirmShutdown(), cMenuRecordings::Delete(), cReplayControl::EditCut(), cRecording::IsInUse(), main(), cVideoDirectory::Move(), cMenuMain::ProcessKey(), and cMenuMain::Update().
eRecordingsSortMode RecordingsSortMode = rsmTime |
Definition at line 3228 of file recording.c.
Referenced by GetRecordingsSortMode(), IncRecordingsSortMode(), cMenuRecordings::Set(), and cRecording::SortName().
|
static |
Definition at line 133 of file recording.c.
Referenced by RemoveDeletedRecordings().