rpms/vdr/devel vdr-1.4.7-hlcutter-0.2.0-finnish.patch, NONE, 1.1 vdr-1.4.7-hlcutter-0.2.0.diff, NONE, 1.1 vdr-runvdr.sh, 1.2, 1.3 vdr.spec, 1.17, 1.18 vdr.sysconfig, 1.3, 1.4
Ville Skytta (scop)
fedora-extras-commits at redhat.com
Sun Jan 20 22:07:51 UTC 2008
- Previous message (by thread): rpms/metacafe-dl/F-7 index.html, NONE, 1.1 metacafe-dl, NONE, 1.1 metacafe-dl.spec, NONE, 1.1
- Next message (by thread): rpms/kscope/devel kscope.spec, NONE, 1.1 .cvsignore, 1.1, 1.2 sources, 1.1, 1.2
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Author: scop
Update of /cvs/pkgs/rpms/vdr/devel
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv11745
Modified Files:
vdr-runvdr.sh vdr.spec vdr.sysconfig
Added Files:
vdr-1.4.7-hlcutter-0.2.0-finnish.patch
vdr-1.4.7-hlcutter-0.2.0.diff
Log Message:
* Sat Jan 12 2008 Ville Skyttä <ville.skytta at iki.fi> - 1.4.7-7
- Include Udo Richter's hard link cutter patch v0.2.0 (see README-HLCUTTER).
- Add some plugins to the default plugin order list in sysconfig.
- Minor runvdr cleanups.
vdr-1.4.7-hlcutter-0.2.0-finnish.patch:
--- NEW FILE vdr-1.4.7-hlcutter-0.2.0-finnish.patch ---
--- i18n.c~ 2007-02-25 14:08:26.000000000 +0200
+++ i18n.c 2008-01-12 20:52:25.000000000 +0200
@@ -4294,6 +4294,28 @@
"Max. video filstørrelse (MB)",
"Maximální velikost nahrávky (MB)",
},
+ { "Setup.Recording$Max. recording size (GB)",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "Suurin tallennekoko (Gt)",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ },
{ "Setup.Recording$Split edited files",
"Editierte Dateien aufteilen",
"Razdeli urejene datoteke",
@@ -4316,6 +4338,28 @@
"Opdel redigerede filer",
"Dìlit editované soubory",
},
+ { "Setup.Recording$Hard Link Cutter",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "Käytä kovalinkkejä muokkauksessa",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ },
{ "Setup.Replay$Multi speed mode",
"Mehrstufiger Vor-/Rücklauf",
"Re¾im z veè hitrostmi",
vdr-1.4.7-hlcutter-0.2.0.diff:
--- NEW FILE vdr-1.4.7-hlcutter-0.2.0.diff ---
Index: menu.c
===================================================================
--- menu.c (Revision 1000)
+++ menu.c (Arbeitskopie)
@@ -2571,2 +2571,4 @@
Add(new cMenuEditIntItem( tr("Setup.Recording$Max. video file size (MB)"), &data.MaxVideoFileSize, MINVIDEOFILESIZE, MAXVIDEOFILESIZE));
+ Add(new cMenuEditIntItem( tr("Setup.Recording$Max. recording size (GB)"), &data.MaxRecordingSize, MINRECORDINGSIZE, MAXRECORDINGSIZE));
Add(new cMenuEditBoolItem(tr("Setup.Recording$Split edited files"), &data.SplitEditedFiles));
+ Add(new cMenuEditBoolItem(tr("Setup.Recording$Hard Link Cutter"), &data.HardLinkCutter));
Index: cutter.c
===================================================================
--- cutter.c (Revision 1000)
+++ cutter.c (Arbeitskopie)
@@ -71,6 +71,7 @@
Mark = fromMarks.Next(Mark);
int FileSize = 0;
int CurrentFileNumber = 0;
+ bool SkipThisSourceFile = false;
int LastIFrame = 0;
toMarks.Add(0);
toMarks.Save();
@@ -88,12 +89,92 @@
// Read one frame:
- if (fromIndex->Get(Index++, &FileNumber, &FileOffset, &PictureType, &Length)) {
- if (FileNumber != CurrentFileNumber) {
- fromFile = fromFileName->SetOffset(FileNumber, FileOffset);
- fromFile->SetReadAhead(MEGABYTE(20));
- CurrentFileNumber = FileNumber;
- }
+ if (!fromIndex->Get(Index++, &FileNumber, &FileOffset, &PictureType, &Length)) {
+ // Error, unless we're past last cut-in and there's no cut-out
+ if (Mark || LastMark)
+ error = "index";
+ break;
+ }
+
+ if (FileNumber != CurrentFileNumber) {
+ fromFile = fromFileName->SetOffset(FileNumber, FileOffset);
+ fromFile->SetReadAhead(MEGABYTE(20));
+ CurrentFileNumber = FileNumber;
+ if (SkipThisSourceFile) {
+ // At end of fast forward: Always skip to next file
+ toFile = toFileName->NextFile();
+ if (!toFile) {
+ error = "toFile 4";
+ break;
+ }
+ FileSize = 0;
+ SkipThisSourceFile = false;
+ }
+
+
+ if (Setup.HardLinkCutter && FileOffset == 0) {
+ // We are at the beginning of a new source file.
+ // Do we need to copy the whole file?
+
+ // if !Mark && LastMark, then we're past the last cut-out and continue to next I-frame
+ // if !Mark && !LastMark, then there's just a cut-in, but no cut-out
+ // if Mark, then we're between a cut-in and a cut-out
+
+ uchar MarkFileNumber;
+ int MarkFileOffset;
+ // Get file number of next cut mark
+ if (!Mark && !LastMark
+ || Mark
+ && fromIndex->Get(Mark->position, &MarkFileNumber, &MarkFileOffset)
+ && (MarkFileNumber != CurrentFileNumber)) {
+ // The current source file will be copied completely.
+ // Start new output file unless we did that already
+ if (FileSize != 0) {
+ toFile = toFileName->NextFile();
+ if (!toFile) {
+ error = "toFile 3";
+ break;
+ }
+ FileSize = 0;
+ }
+
+ // Safety check that file has zero size
+ struct stat buf;
+ if (stat(toFileName->Name(), &buf) == 0) {
+ if (buf.st_size != 0) {
+ esyslog("cCuttingThread: File %s exists and has nonzero size", toFileName->Name());
+ error = "nonzero file exist";
+ break;
+ }
+ }
+ else if (errno != ENOENT) {
+ esyslog("cCuttingThread: stat failed on %s", toFileName->Name());
+ error = "stat";
+ break;
+ }
+
+ // Clean the existing 0-byte file
+ toFileName->Close();
+ cString ActualToFileName(ReadLink(toFileName->Name()), true);
+ unlink(ActualToFileName);
+ unlink(toFileName->Name());
+
+ // Try to create a hard link
+ if (HardLinkVideoFile(fromFileName->Name(), toFileName->Name())) {
+ // Success. Skip all data transfer for this file
+ SkipThisSourceFile = true;
+ cutIn = false;
+ toFile = NULL; // was deleted by toFileName->Close()
+ }
+ else {
+ // Fallback: Re-open the file if necessary
+ toFile = toFileName->Open();
+ }
+ }
+ }
+ }
+
+ if (!SkipThisSourceFile) {
if (fromFile) {
int len = ReadFrame(fromFile, buffer, Length, sizeof(buffer));
if (len < 0) {
@@ -110,15 +191,12 @@
break;
}
}
- else
- break;
-
// Write one frame:
if (PictureType == I_FRAME) { // every file shall start with an I_FRAME
if (LastMark) // edited version shall end before next I-frame
break;
- if (FileSize > MEGABYTE(Setup.MaxVideoFileSize)) {
+ if (!SkipThisSourceFile && FileSize > toFileName->MaxFileSize()) {
toFile = toFileName->NextFile();
if (!toFile) {
error = "toFile 1";
@@ -128,12 +206,12 @@
}
LastIFrame = 0;
- if (cutIn) {
+ if (!SkipThisSourceFile && cutIn) {
cRemux::SetBrokenLink(buffer, Length);
cutIn = false;
}
}
- if (toFile->Write(buffer, Length) < 0) {
+ if (!SkipThisSourceFile && toFile->Write(buffer, Length) < 0) {
error = "safe_write";
break;
}
@@ -168,7 +246,7 @@
}
}
else
- LastMark = true;
+ LastMark = true; // After last cut-out: Write on until next I-frame, then exit
}
}
Recordings.TouchUpdate();
Index: README-HLCUTTER
===================================================================
--- README-HLCUTTER (Revision 0)
+++ README-HLCUTTER (Revision 0)
@@ -0,0 +1,117 @@
+
+ VDR-HLCUTTER README
+
+
+Written by: Udo Richter
+Available at: http://www.udo-richter.de/vdr/patches.html#hlcutter
+ http://www.udo-richter.de/vdr/patches.en.html#hlcutter
+Contact: udo_richter at gmx.de
+
+
+
+About
+-----
+
+The hard link cutter patch changes the recording editing algorithms of VDR to
+use filesystem hard links to 'copy' recording files whenever possible to speed
+up editing recordings noticeably.
+
+The patch has matured to be quite stable, at least I'm using it without issues.
+Nevertheless the patch is still in development and should be used with caution.
+The patch is EXPERIMENTAL for multiple /videoxx folders. The safety checks
+should prevent data loss, but you should always carefully check the results.
+
+While editing a recording, the patch searches for any 00x.vdr files that dont
+contain editing marks and would normally be copied 1:1 unmodified to the edited
+recording. In this case the current target 00x.vdr file will be aborted, and
+the cutter process attempts to duplicate the source file as a hard link, so
+that both files share the same disk space. If this succeeds, the editing
+process fast-forwards through the duplicated file and continues normally
+beginning with the next source file. If hard linking fails, the cutter process
+continues with plain old copying. (but does not take up the aborted last file.)
+
+After editing, the un-edited recording can be deleted as usual, the hard linked
+copies will continue to exist as the only remaining copy.
+
+To be effective, the default 'Max. video file size (MB)' should be lowered.
+The patch lowers the smallest possible file size to 1mb. Since VDR only
+supports up to 255 files, this would limit the recording size to 255Mb or
+10 minutes, in other words: This setting is insane!
+
+To make sure that the 255 file limit will not be reached, the patch also
+introduces "Max. recording size (GB)" with a default of 100Gb (66 hours), and
+increases the file size to 2000Mb early enough, so that 100Gb-recordings will
+fit into the 255 files.
+
+Picking the right parameters can be tricky. The smaller the file size, the
+faster the editing process works. However, with a small file size, long
+recordings will fall back to 2000Mb files soon, that are slow on editing again.
+
+Here are some examples:
+
+Max file size: 100Gb 100Gb 100Gb 100Gb 100Gb 100Gb 100Gb
+Max recording size: 1Mb 10Mb 20Mb 30Mb 40Mb 50Mb 100Mb
+
+Small files: 1-203 1-204 1-205 1-206 1-207 1-209 1-214
+ GBytes: 0.2 2.0 4.0 6.0 8.1 10.2 20.9
+ Hours: 0.13 1.3 2.65 4 5.4 6.8 13.9
+
+Big (2000mb) files: 204-255 204-255 206-255 207-255 208-255 210-255 215-255
+ GBytes: 101.5 99.6 97.7 95.7 93.8 89.8 80.1
+ Hours: 67 66 65 63 62 60 53
+
+A recording limit of 100Gb keeps plenty of reserve without blocking too much
+file numbers. And with a file size of 30-40Mb, recordings of 4-5 hours fit into
+small files completely. (depends on bit rate of course)
+
+
+
+The patch must be enabled in Setup-> Recordings-> Hard Link Cutter. When
+disabled, the cutter process behaves identical to VDR's default cutter.
+
+There's a //#define HARDLINK_TEST_ONLY in the videodir.c file that enables a
+test-mode that hard-links 00x.vdr_ files only, and continues the classic
+editing. The resulting 00x.vdr and 00x.vdr_ files should be identical. If you
+delete the un-edited recording, dont forget to delete the *.vdr_ files too,
+they will now eat real disk space.
+
+Note: 'du' displays the disk space of hard links only on first appearance, and
+usually you will see a noticeably smaller size on the edited recording.
+
+
+History
+-------
+
+Version 0.2.0
+ New: Support for multiple /videoXX recording folders, using advanced searching
+ for matching file systems where a hard link can be created.
+ Also supports deep mounted file systems.
+ Fix: Do not fail if last mark is a cut-in. (Again.)
+
+Version 0.1.4
+ New: Dynamic increase of file size before running out of xxx.vdr files
+ Fix: Last edit mark is not a cut-out
+ Fix: Write error if link-copied file is smaller than allowed file size
+ Fix: Broken index/marks if cut-in is at the start of a new file
+ Fix: Clear dangeling pointer to free'd cUnbufferedFile,
+ thx to Matthias Schwarzott
+
+Version 0.1.0
+ Initial release
+
+
+
+
+Future plans
+------------
+
+Since original and edited copy share disk space, free space is wrong if one of
+them is moved to *.del. Free space should only count files with hard link
+count = 1. This still goes wrong if all copies get deleted.
+
+
+For more safety, the hard-linked files may be made read-only, as modifications
+to one copy will affect the other copy too. (except deleting, of course)
+
+
+SetBrokenLink may get lost on rare cases, this needs some more thoughts.
Index: recorder.c
===================================================================
--- recorder.c (Revision 1000)
+++ recorder.c (Arbeitskopie)
@@ -82,7 +82,7 @@
bool cFileWriter::NextFile(void)
{
if (recordFile && pictureType == I_FRAME) { // every file shall start with an I_FRAME
- if (fileSize > MEGABYTE(Setup.MaxVideoFileSize) || RunningLowOnDiskSpace()) {
+ if (fileSize > fileName->MaxFileSize() || RunningLowOnDiskSpace()) {
recordFile = fileName->NextFile();
fileSize = 0;
}
Index: config.c
===================================================================
--- config.c (Revision 1000)
+++ config.c (Arbeitskopie)
@@ -264,7 +264,9 @@
OSDMessageTime = 1;
UseSmallFont = 1;
MaxVideoFileSize = MAXVIDEOFILESIZE;
+ MaxRecordingSize = DEFAULTRECORDINGSIZE;
SplitEditedFiles = 0;
+ HardLinkCutter = 0;
MinEventTimeout = 30;
MinUserInactivity = 300;
MultiSpeedMode = 0;
@@ -425,7 +427,9 @@
else if (!strcasecmp(Name, "OSDMessageTime")) OSDMessageTime = atoi(Value);
else if (!strcasecmp(Name, "UseSmallFont")) UseSmallFont = atoi(Value);
else if (!strcasecmp(Name, "MaxVideoFileSize")) MaxVideoFileSize = atoi(Value);
+ else if (!strcasecmp(Name, "MaxRecordingSize")) MaxRecordingSize = atoi(Value);
else if (!strcasecmp(Name, "SplitEditedFiles")) SplitEditedFiles = atoi(Value);
+ else if (!strcasecmp(Name, "HardLinkCutter")) HardLinkCutter = atoi(Value);
else if (!strcasecmp(Name, "MinEventTimeout")) MinEventTimeout = atoi(Value);
else if (!strcasecmp(Name, "MinUserInactivity")) MinUserInactivity = atoi(Value);
else if (!strcasecmp(Name, "MultiSpeedMode")) MultiSpeedMode = atoi(Value);
@@ -493,7 +497,9 @@
Store("OSDMessageTime", OSDMessageTime);
Store("UseSmallFont", UseSmallFont);
Store("MaxVideoFileSize", MaxVideoFileSize);
+ Store("MaxRecordingSize", MaxRecordingSize);
Store("SplitEditedFiles", SplitEditedFiles);
+ Store("HardLinkCutter", HardLinkCutter);
Store("MinEventTimeout", MinEventTimeout);
Store("MinUserInactivity", MinUserInactivity);
Store("MultiSpeedMode", MultiSpeedMode);
Index: config.h
===================================================================
--- config.h (Revision 1000)
+++ config.h (Arbeitskopie)
@@ -242,7 +242,9 @@
int OSDMessageTime;
int UseSmallFont;
int MaxVideoFileSize;
+ int MaxRecordingSize;
int SplitEditedFiles;
+ int HardLinkCutter;
int MinEventTimeout, MinUserInactivity;
int MultiSpeedMode;
int ShowReplayMode;
Index: recording.c
===================================================================
--- recording.c (Revision 1000)
+++ recording.c (Arbeitskopie)
@@ -1489,6 +1489,16 @@
return NULL;
}
+int cFileName::MaxFileSize() {
+ const int smallFiles = (255 * MAXVIDEOFILESIZE - 1024 * Setup.MaxRecordingSize)
+ / max(MAXVIDEOFILESIZE - Setup.MaxVideoFileSize, 1);
+
+ if (fileNumber <= smallFiles)
+ return MEGABYTE(Setup.MaxVideoFileSize);
+
+ return MEGABYTE(MAXVIDEOFILESIZE);
+}
+
cUnbufferedFile *cFileName::NextFile(void)
{
return SetOffset(fileNumber + 1);
Index: recording.h
===================================================================
--- recording.h (Revision 1000)
+++ recording.h (Arbeitskopie)
@@ -187,8 +187,16 @@
// may be slightly higher because we stop recording only before the next
// 'I' frame, to have a complete Group Of Pictures):
#define MAXVIDEOFILESIZE 2000 // MB
-#define MINVIDEOFILESIZE 100 // MB
+#define MINVIDEOFILESIZE 1 // MB
+#define MINRECORDINGSIZE 25 // GB
+#define MAXRECORDINGSIZE 500 // GB
+#define DEFAULTRECORDINGSIZE 100 // GB
+// Dynamic recording size:
+// Keep recording file size at Setup.MaxVideoFileSize for as long as possible,
+// but switch to MAXVIDEOFILESIZE early enough, so that Setup.MaxRecordingSize
+// will be reached, before recording to file 255.vdr
+
class cIndexFile {
private:
struct tIndex { int offset; uchar type; uchar number; short reserved; };
@@ -228,6 +236,8 @@
cUnbufferedFile *Open(void);
void Close(void);
cUnbufferedFile *SetOffset(int Number, int Offset = 0);
+ int MaxFileSize();
+ // Dynamic file size for this file
cUnbufferedFile *NextFile(void);
};
Index: videodir.c
===================================================================
--- videodir.c (Revision 1000)
+++ videodir.c (Arbeitskopie)
@@ -19,6 +19,9 @@
#include "recording.h"
#include "tools.h"
+
+//#define HARDLINK_TEST_ONLY
+
const char *VideoDirectory = VIDEODIR;
class cVideoDirectory {
@@ -168,6 +171,120 @@
return RemoveFileOrDir(FileName, true);
}
+static bool StatNearestDir(const char *FileName, struct stat *Stat)
+{
+ cString Name(FileName);
+ char *p;
+ while ((p = strrchr((const char*)Name + 1, '/')) != NULL) {
+ *p = 0; // truncate at last '/'
+ if (stat(Name, Stat) == 0) {
+ isyslog("StatNearestDir: Stating %s", (const char*)Name);
+ return true;
+ }
+ }
+ return false;
+}
+
+bool HardLinkVideoFile(const char *OldName, const char *NewName)
+{
+ // Incoming name must be in base video directory:
+ if (strstr(OldName, VideoDirectory) != OldName) {
+ esyslog("ERROR: %s not in %s", OldName, VideoDirectory);
+ return false;
+ }
+ if (strstr(NewName, VideoDirectory) != NewName) {
+ esyslog("ERROR: %s not in %s", NewName, VideoDirectory);
+ return false;
+ }
+
+ const char *ActualNewName = NewName;
+ cString ActualOldName(ReadLink(OldName), true);
+
+ // Some safety checks:
+ struct stat StatOldName;
+ if (lstat(ActualOldName, &StatOldName) == 0) {
+ if (S_ISLNK(StatOldName.st_mode)) {
+ esyslog("HardLinkVideoFile: Failed to resolve symbolic link %s", (const char*)ActualOldName);
+ return false;
+ }
+ }
+ else {
+ esyslog("HardLinkVideoFile: lstat failed on %s", (const char*)ActualOldName);
+ return false;
+ }
+ isyslog("HardLinkVideoFile: %s is on %i", (const char*)ActualOldName, (int)StatOldName.st_dev);
+
+ // Find the video directory where ActualOldName is located
+
+ cVideoDirectory Dir;
+ struct stat StatDir;
+ if (!StatNearestDir(NewName, &StatDir)) {
+ esyslog("HardLinkVideoFile: stat failed on %s", NewName);
+ return false;
+ }
+
+ isyslog("HardLinkVideoFile: %s is on %i", NewName, (int)StatDir.st_dev);
+ if (StatDir.st_dev != StatOldName.st_dev) {
+ // Not yet found.
+
+ if (!Dir.IsDistributed()) {
+ esyslog("HardLinkVideoFile: No matching video folder to hard link %s", (const char*)ActualOldName);
+ return false;
+ }
+
+ // Search in video01 and upwards
+ bool found = false;
+ while (Dir.Next()) {
+ Dir.Store();
+ const char *TmpNewName = Dir.Adjust(NewName);
+ if (StatNearestDir(TmpNewName, &StatDir) && StatDir.st_dev == StatOldName.st_dev) {
+ isyslog("HardLinkVideoFile: %s is on %i (match)", TmpNewName, (int)StatDir.st_dev);
+ ActualNewName = TmpNewName;
+ found = true;
+ break;
+ }
+ isyslog("HardLinkVideoFile: %s is on %i", TmpNewName, (int)StatDir.st_dev);
+ }
+ if (ActualNewName == NewName) {
+ esyslog("HardLinkVideoFile: No matching video folder to hard link %s", (const char*)ActualOldName);
+ return false;
+ }
+
+ // Looking good, we have a match. Create necessary folders.
+ if (!MakeDirs(ActualNewName, false))
+ return false;
+ // There's no guarantee that the directory of ActualNewName
+ // is on the same device as the dir that StatNearestDir found.
+ // But worst case is that the link fails.
+ }
+
+#ifdef HARDLINK_TEST_ONLY
+ // Do the hard link to *.vdr_ for testing only
+ char *name = NULL;
+ asprintf(&name, "%s_",ActualNewName);
+ link(ActualOldName, name);
+ free(name);
+ return false;
+#endif // HARDLINK_TEST_ONLY
+
+ // Try creating the hard link
+ if (link(ActualOldName, ActualNewName) != 0) {
+ // Failed to hard link. Maybe not allowed on file system.
+ LOG_ERROR_STR(ActualNewName);
+ isyslog("HardLinkVideoFile: failed to hard link from %s to %s", (const char*)ActualOldName, ActualNewName);
+ return false;
+ }
+
+ if (ActualNewName != NewName) {
+ // video01 and up. Do the remaining symlink
+ if (symlink(ActualNewName, NewName) < 0) {
+ LOG_ERROR_STR(NewName);
+ return false;
+ }
+ }
+ return true;
+}
+
bool VideoFileSpaceAvailable(int SizeMB)
{
cVideoDirectory Dir;
Index: videodir.h
===================================================================
--- videodir.h (Revision 1000)
+++ videodir.h (Arbeitskopie)
@@ -19,6 +19,7 @@
int CloseVideoFile(cUnbufferedFile *File);
bool RenameVideoFile(const char *OldName, const char *NewName);
bool RemoveVideoFile(const char *FileName);
+bool HardLinkVideoFile(const char *OldName, const char *NewName);
bool VideoFileSpaceAvailable(int SizeMB);
int VideoDiskSpace(int *FreeMB = NULL, int *UsedMB = NULL); // returns the used disk space in percent
cString PrefixVideoFileName(const char *FileName, char Prefix);
Index: vdr-runvdr.sh
===================================================================
RCS file: /cvs/pkgs/rpms/vdr/devel/vdr-runvdr.sh,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- vdr-runvdr.sh 17 Dec 2006 20:55:06 -0000 1.2
+++ vdr-runvdr.sh 20 Jan 2008 22:07:12 -0000 1.3
@@ -4,6 +4,8 @@
#
# runvdr [VDROPTION]...
+shopt -s nullglob
+
VDR=/usr/sbin/vdr
PLUGINDIR=/usr/lib/vdr
PLUGINVER=VDR_PLUGIN_VERSION
@@ -43,7 +45,7 @@
fi
# Add the rest available.
for file in $PLUGINDIR/libvdr-*.so$libsuf ; do
- plugin=`basename $file | sed -e 's/^libvdr-\(.*\)\.so.*$/\1/'`
+ plugin=$(basename $file | sed -e 's/^libvdr-\(.*\)\.so.*$/\1/')
if [ -n "$VDR_PLUGIN_ORDER" ] ; then
for p in $VDR_PLUGIN_ORDER ; do
if [ "$plugin" = "$p" ] ; then
@@ -52,9 +54,7 @@
fi
done
fi
- if [ -e "$file" ] ; then
- plugconf "$plugin"
- fi
+ plugconf "$plugin"
done
}
Index: vdr.spec
===================================================================
RCS file: /cvs/pkgs/rpms/vdr/devel/vdr.spec,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- vdr.spec 16 Oct 2007 21:10:49 -0000 1.17
+++ vdr.spec 20 Jan 2008 22:07:12 -0000 1.18
@@ -19,7 +19,7 @@
Name: vdr
Version: 1.4.7
-Release: 6%{?dist}
+Release: 7%{?dist}
Summary: Video Disk Recorder
Group: Applications/Multimedia
@@ -50,6 +50,10 @@
Patch5: %{name}-1.4.6-1-syncearly.patch
Patch6: http://www.saunalahti.fi/~rahrenbe/vdr/patches/vdr-1.4.7-subtitles-0.5.0-and-ttxtsubs-0.0.5.diff.gz
Patch7: %{name}-1.4.7-recmenu-play.patch
+# Patch8: http://www.udo-richter.de/vdr/files/vdr-1.4.7-hlcutter-0.2.0.diff
+# edited so that it applies on top of the liemikuutio patch (menu.c)
+Patch8: %{name}-1.4.7-hlcutter-0.2.0.diff
+Patch9: %{name}-1.4.7-hlcutter-0.2.0-finnish.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires: libjpeg-devel
@@ -139,6 +143,8 @@
%patch5 -p0
%patch6 -p1
%patch7 -p0
+%patch8 -p0
+%patch9 -p0
# Fix up paths
sed -i \
@@ -443,6 +449,11 @@
%endif
%changelog
+* Sat Jan 12 2008 Ville Skyttä <ville.skytta at iki.fi> - 1.4.7-7
+- Include Udo Richter's hard link cutter patch v0.2.0 (see README-HLCUTTER).
+- Add some plugins to the default plugin order list in sysconfig.
+- Minor runvdr cleanups.
+
* Wed Oct 17 2007 Ville Skyttä <ville.skytta at iki.fi> - 1.4.7-6
- Add patch to start playback from recordings menu with the play button.
Index: vdr.sysconfig
===================================================================
RCS file: /cvs/pkgs/rpms/vdr/devel/vdr.sysconfig,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- vdr.sysconfig 28 Jan 2007 11:11:18 -0000 1.3
+++ vdr.sysconfig 20 Jan 2008 22:07:12 -0000 1.4
@@ -25,7 +25,10 @@
ttxtsubs
osdpip
femon
+recstatus
sudoku
+weather
+weatherng
dvd
externalplayer
mplayer
- Previous message (by thread): rpms/metacafe-dl/F-7 index.html, NONE, 1.1 metacafe-dl, NONE, 1.1 metacafe-dl.spec, NONE, 1.1
- Next message (by thread): rpms/kscope/devel kscope.spec, NONE, 1.1 .cvsignore, 1.1, 1.2 sources, 1.1, 1.2
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the fedora-extras-commits
mailing list