57 esyslog(
"no editing marks found for %s", FromFileName);
83 int CurrentFileNumber = 0;
84 bool SkipThisSourceFile =
false;
90 bool CheckForSeamlessStream =
false;
91 bool LastMark =
false;
93 bool suspensionLogged =
false;
103 if (!suspensionLogged) {
104 dsyslog(
"suspending cutter thread");
105 suspensionLogged =
true;
110 else if (suspensionLogged) {
111 dsyslog(
"resuming cutter thread");
112 suspensionLogged =
false;
121 if (!
fromIndex->
Get(Index++, &FileNumber, &FileOffset, &Independent, &Length)) {
123 if (Mark || LastMark)
128 if (FileNumber != CurrentFileNumber) {
132 CurrentFileNumber = FileNumber;
133 if (SkipThisSourceFile) {
141 SkipThisSourceFile =
false;
153 uint16_t MarkFileNumber;
154 off_t MarkFileOffset;
156 if (!Mark && !LastMark
159 && (MarkFileNumber != CurrentFileNumber)) {
174 if (buf.st_size != 0) {
176 error =
"nonzero file exist";
180 else if (errno != ENOENT) {
189 unlink(ActualToFileName);
195 SkipThisSourceFile =
true;
207 if (!SkipThisSourceFile) {
215 CurrentFileNumber = 0;
239 if (CheckForSeamlessStream) {
240 if (Length == Length2) {
242 for (
int i = 0; i < Length; i++) {
243 if (buffer[i] != buffer2[i]) {
251 CheckForSeamlessStream =
false;
253 if (!SkipThisSourceFile && cutIn) {
261 if (!SkipThisSourceFile &&
toFile->
Write(buffer, Length) < 0) {
262 error =
"safe_write";
275 if (Mark && Index >= Mark->
Position()) {
283 if (
fromIndex->
Get(Index, &FileNumber, &FileOffset, &Independent, &Length2)) {
284 if (FileNumber != CurrentFileNumber)
288 if (len >= 0 && len == Length2)
289 CheckForSeamlessStream =
true;
294 CurrentFileNumber = 0;
312 esyslog(
"no editing marks found!");
324 bool cCutter::Start(
const char *FileName,
const char *TargetFileName,
bool Overwrite)
339 if (!Overwrite && *evn && (access(*evn, F_OK) == 0) && !
Interface->
Confirm(
tr(
"File already exists - overwrite?"))) {
342 }
while (*evn && (access(*evn, F_OK) == 0));
347 char *s = strdup(*evn);
348 char *e = strrchr(s,
'.');
350 if (strcmp(e,
".rec") == 0) {
376 isyslog(
"editing process has been interrupted");
378 esyslog(
"ERROR: '%s' during editing process", Error);
419 #define CUTTINGCHECKINTERVAL 500 // ms between checks for the active cutting process
425 if (Recording.
Name()) {
434 fprintf(stderr,
"can't start editing process\n");
437 fprintf(stderr,
"'%s' has no editing marks\n", FileName);
440 fprintf(stderr,
"'%s' is not a recording\n", FileName);
443 fprintf(stderr,
"'%s' is not a directory\n", FileName);