You are not logged in.

#1 2005-05-23 15:45:45

Father
Member
From: Australia
Registered: 2004-06-01
Posts: 209

[Multimedia] ldvd + buffer - Backup DVDs

here is ldvd, a gtk frontend to a few dvd tools

its ugly and ive been told buggy.. but hey.. its better than entering 10000 entries at the command line

this program gives the same results as dvd9to5, except the gui is badly done, and doesnt provide good options.. i also believe the image was slightly shakey..
use dvd9to5 instead.. http://bbs.archlinux.org/viewtopic.php?p=89047#89047
it also DIDNT create the menus like i was lead to believe... grrr

other dependencies can be found in this thread
http://bbs.archlinux.org/viewtopic.php?t=9450

[edit] updated LDVD to 2.0.0 [/edit]


buffer
PKGBUILD

#contributor: Adam Griffiths <adam_griffithsAATTdart.net.au>
pkgname=buffer
pkgver=1.19
pkgrel=1
pkgdesc="Buffer is a program designed to speed up writing tapes on remote tape drives."
url="http://www.hello-penguin.com/software.htm"
license=""
depends=()
source=('http://www.hello-penguin.com/software/buffer/buffer-1.19.tar.gz')

build()
{
  cd $startdir/src/$pkgname-$pkgver

  mkdir -p $startdir/pkg/usr/bin
  mkdir -p $startdir/pkg/usr/man/manl

  patch -p1 < $startdir/1.19-deb-gentoo.patch

  sed -i "sINSTBIN=/usr/local/binINSTBIN=$startdir/pkg/usr/bin\" $startdir/src/$pkgname-$pkgver/Makefile
  sed -i "sINSTMAN=/usr/man/manlINSTMAN=$startdir/pkg/usr/man/manl\" $startdir/src/$pkgname-$pkgver/Makefile

  make || return 1
  make install
}
md5sums=('35951ffca7e4df9ad7f97092e1f05b75')

1.19-deb-gentoo.patch http://gentoo.kems.net/gentoo-portage/s … ntoo.patch

diff -ur buffer-1.19.orig/buffer.c buffer-1.19/buffer.c
--- buffer-1.19.orig/buffer.c    2004-08-21 01:45:29.938082048 -0400
+++ buffer-1.19/buffer.c    2004-08-21 01:45:39.444118464 -0400
@@ -109,6 +109,9 @@
  * Initial revision
  * 
  */
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
 #include <unistd.h>
 #include <stdio.h>
 #include <signal.h>
@@ -120,6 +123,7 @@
 #include <sys/shm.h>
 #include <sys/sem.h>
 #include <sys/wait.h>
+#include <sys/time.h>
 #include "sem.h"
 
 #ifndef lint
@@ -127,8 +131,8 @@
 #endif
 
-#ifndef __alpha
+#ifndef __linux__
 extern char *shmat();
-#endif /* __alpha */
+#endif /* __linux__ */
 
 /* General macros */
 #define TRUE 1
@@ -136,6 +140,14 @@
 #define K *1024
 #define M *1024*1024
 
+#if defined __GNUC__ || __STDC_VERSION__ >= 199901L
+#define NUM_K_TYPE unsigned long long
+#define NUM_K_FMT "llu"
+#else
+#define NUM_K_TYPE unsigned long
+#define NUM_K_FMT "lu"
+#endif
+
 /* Some forward declarations */
 void byee();
 void start_reader_and_writer();
@@ -250,7 +262,9 @@
 
 char print_total = 0;
 /* Number of K output */
-unsigned long outk = 0;
+NUM_K_TYPE outk = 0;
+
+struct timeval starttime;
 
 int
 main( argc, argv )
@@ -262,6 +276,8 @@
     set_handlers();
 
     buffer_allocate();
+    
+    gettimeofday(&starttime, NULL);
 
     start_reader_and_writer();
 
@@ -384,8 +400,8 @@
             fprintf( stderr, "Usage: %s [-B] [-t] [-S size] [-m memsize] [-b blocks] [-p percent] [-s blocksize] [-u pause] [-i infile] [-o outfile] [-z size]n",
                 progname );
             fprintf( stderr, "-B = blocked device - pad out last blockn" );
-            fprintf( stderr, "-t = show total amount writen at endn" );
-            fprintf( stderr, "-S size = show amount writen every size bytesn" );
+            fprintf( stderr, "-t = show total amount written at endn" );
+            fprintf( stderr, "-S size = show amount written every size bytesn" );
             fprintf( stderr, "-m size = size of shared mem chunk to grabn" );
             fprintf( stderr, "-b num = number of blocks in queuen" );
             fprintf( stderr, "-p percent = don't start writing until percent blocks filledn" );
@@ -397,6 +413,11 @@
             byee( -1 );
         }
     }
+    
+    if (argc > optind) {
+        fprintf( stderr, "too many argumentsn" );
+        byee( -1 );
+    }
 
     if (zflag) showevery = blocksize;
 
@@ -507,9 +528,9 @@
     get_buffer();
 
     if( debug )
-        fprintf( stderr, "%s pbuffer is 0x%08x, buffer_size is %d [%d x %d]n",
+        fprintf( stderr, "%s pbuffer is 0x%08lx, buffer_size is %d [%d x %d]n",
             proc_string,
-            (char *)pbuffer, buffer_size, blocks, blocksize );
+            (unsigned long)pbuffer, buffer_size, blocks, blocksize );
 
 #ifdef SYS5
     memset( (char *)pbuffer, '', buffer_size );
@@ -528,7 +549,17 @@
     pbuffer->blocks_free_lock = 1;
     /* start this off so lock() can be called on it for each block
      * till all the blocks are used up */
+    /* Initializing the semaphore to "blocks - 1" causes a hang when using option
+     * "-p 100" because it always keeps one block free, so we'll never reach 100% fill
+     * level. However, there doesn't seem to be a good reason to keep one block free,
+     * so we initialize the semaphore to "blocks" instead.
+     * <mbuck@debian.org> 2004-01-11
+     */    
+#if 0
     sem_set( pbuffer->semid, pbuffer->blocks_free_lock, blocks - 1 );
+#else
+    sem_set( pbuffer->semid, pbuffer->blocks_free_lock, blocks );
+#endif
 
     /* Detattach the shared memory so the fork doesnt do anything odd */
     shmdt( (char *)pbuffer );
@@ -648,7 +679,7 @@
 int
 fill_block()
 {
-    int bytes;
+    int bytes = 0;
     char *start;
     int toread;
     static char eof_reached = 0;
@@ -707,7 +738,7 @@
 {
     int filled = 0;
     int maxfilled = (blocks * percent) / 100;
-    int first_block;
+    int first_block = 0;
 
     if( debug )
         fprintf( stderr, "tW: Entering writern blocks = %dn maxfilled = %dn",
@@ -742,7 +773,7 @@
     }
 
     if( print_total ){
-        fprintf( stderr, "Kilobytes Out %lun", outk );
+        fprintf( stderr, "Kilobytes Out %" NUM_K_FMT "n", outk );
     }
 
     if( debug )
@@ -783,14 +814,14 @@
 void
 write_block_to_stdout()
 {
-    static unsigned long out = 0;
+    unsigned long out = 0;
     static unsigned long last_gb = 0;
-    static unsigned long next_k = 0;
+    static NUM_K_TYPE next_k = 0;
     int written;
 
     if( next_k == 0 && showevery ){
         if( debug > 3 )
-            fprintf( stderr, "W: next_k = %lu showevery = %dn", next_k, showevery );
+            fprintf( stderr, "W: next_k = %" NUM_K_FMT " showevery = %dn", next_k, showevery );
         showevery = showevery / 1024;
         next_k = showevery;
     }
@@ -798,7 +829,7 @@
     if( (written = write( fdout, curr_block->data, curr_block->bytes )) != curr_block->bytes ){
         report_proc();
         perror( "write of data failed" );
-        fprintf( stderr, "bytes to write=%d, bytes written=%d, total written %10luKn", curr_block->bytes, written, outk );
+        fprintf( stderr, "bytes to write=%d, bytes written=%d, total written %10" NUM_K_FMT "Kn", curr_block->bytes, written, outk );
         byee( -1 );
     }
 
@@ -825,7 +856,7 @@
     }
     if( showevery ){
         if( debug > 3 )
-            fprintf( stderr, "W: outk = %lu, next_k = %lun",
+            fprintf( stderr, "W: outk = %" NUM_K_FMT ", next_k = %" NUM_K_FMT "n",
                 outk, next_k );
         if( outk >= next_k ){
             pr_out();
@@ -914,13 +945,12 @@
 do_size( arg )
     char *arg;
 {
-    char format[ 20 ];
-    int ret;
+    int ret = 0;
 
-    *format = '';
-    sscanf( arg, "%d%s", &ret, format );
+    char unit = '';
+    sscanf( arg, "%d%c", &ret, &unit );
 
-    switch( *format ){
+    switch( unit ){
     case 'm':
     case 'M':
         ret = ret K K;
@@ -941,7 +971,36 @@
 void
 pr_out()
 {
-    fprintf( stderr, " %10luKr", outk );
+    struct timeval now;
+    unsigned long ms_delta, k_per_s;
+    
+    gettimeofday(&now, NULL);
+    ms_delta = (now.tv_sec - starttime.tv_sec) * 1000
+           + (now.tv_usec - starttime.tv_usec) / 1000;
+    if (ms_delta) {
+        /* Use increased accuracy for small amounts of data,
+         * decreased accuracy for *huge* throughputs > 4.1GB/s
+         * to avoid division by 0. This will overflow if your
+         * machine's throughput exceeds 4TB/s - you deserve to
+         * loose if you're still using 32 bit longs on such a
+         * beast ;-)
+         * <mbuck@debian.org>
+         */
+        if (outk < ULONG_MAX / 1000) {
+            k_per_s = (outk * 1000) / ms_delta;
+        } else if (ms_delta >= 1000) {
+            k_per_s = outk / (ms_delta / 1000);
+        } else {
+            k_per_s = (outk / ms_delta) * 1000;
+        }
+        fprintf( stderr, " %10" NUM_K_FMT "K, %10luK/sr", outk, k_per_s );
+    } else {
+        if (outk) {
+            fprintf( stderr, " %10" NUM_K_FMT "K,          ?K/sr", outk );
+        } else {
+            fprintf( stderr, "          0K,          0K/sr");
+        }
+    }
 }
 
 #ifdef SYS5
diff -ur buffer-1.19.orig/buffer.man buffer-1.19/buffer.man
--- buffer-1.19.orig/buffer.man    2004-08-21 01:45:29.935085504 -0400
+++ buffer-1.19/buffer.man    2004-08-21 01:45:39.441121920 -0400
@@ -37,7 +37,8 @@
 Use the given file as the output file.  The default is stdout.
 .TP
 .B -S size
-After every chunk this size has been writen print out how much been writen so far.
+After every chunk of this size has been written, print out how much has
+been written so far. Also prints the total througput.
 By default this is not set.
 .TP
 .B -s size
@@ -71,9 +72,9 @@
 throughput on some drives.)
 .TP
 .B -B
-Force each block writen to be padded out to the blocksize.  This is needed by some tape
+Force each block written to be padded out to the blocksize.  This is needed by some tape
 and cartridge drives.  Defaults to unpadded.  This only affects the
-last block writen.
+last block written.
 .TP
 .B -t
 On exiting print to stderr a brief message showing the total number of
@@ -82,7 +83,7 @@
 .B -Z
 If reading/writing directly to a character device (like a tape drive)
 then after each gigabyte perform an lseek to the start of the file.
-Use this flag with extreme care.  If can only be used on devices where
+Use this flag with extreme care.  It can only be used on devices where
 an lseek does not rewind the tape but does reset the kernels position
 flags.  It is used to allow more than 2 gigabytes to be written.
 .PP
diff -ur buffer-1.19.orig/sem.c buffer-1.19/sem.c
--- buffer-1.19.orig/sem.c    2004-08-21 01:45:29.939080896 -0400
+++ buffer-1.19/sem.c    2004-08-21 01:47:41.265618240 -0400
@@ -27,6 +27,7 @@
  * semaphores */
 
 #include <stdio.h>
+#include <unistd.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <sys/ipc.h>
@@ -95,7 +96,7 @@
     return sem;
 }
 
-static
+static void
 do_sem( sem_id, pbuf, err )
     int sem_id;
     struct sembuf *pbuf;

ldvd
PKGBUILD

#contributor: Adam Griffiths <adam_griffithsAATTdart.net.au>
pkgname=ldvd
pkgver=2.0.0
pkgrel=1
pkgdesc=""
url="http://ldvd9to5.gff-clan.net/index.php"
depends=('perl' 'gtk-perl' 'transcode' 'dvdauthor' 'dvd+rw-tools' 'mjpegtools' 'cdrtools' 'buffer')
source=(http://files.gff-clan.net/pub/ldvd/$pkgname-$pkgver.tar.bz2)
md5sums=('535baa31a6b2bd161cbade48da526c4f')

build()
{
  cd $startdir/src/$pkgname-$pkgver
  make || return 1
  make DESTDIR=$startdir/pkg install
}

enjoy

Offline

Board footer

Powered by FluxBB