Your message dated Tue, 17 Oct 2006 21:13:50 +0200
with message-id <[EMAIL PROTECTED]>
and subject line yabp
has caused the attached Bug report to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what I am
talking about this indicates a serious mail system misconfiguration
somewhere.  Please contact me immediately.)

Debian bug tracking system administrator
(administrator, Debian Bugs database)

--- Begin Message ---
Package: dvdauthor
Version: 0.6.11-1
Severity: important
Tags: patch

After running dvdauthor to create a DVD filesystem tree, I run mkisofs
with the -dvd-video to create a filesystem image from this.  In some
cases this results in the following error messages:

mkisofs: Either VIDEO_TS.IFO or VIDEO_TS.VOB is not of correct size.
mkisofs: Unable to parse DVD-Video structures.
mkisofs: Unable to make a DVD-Video image.

I examined the mkisofs source and found that this message could
actually be triggered by files other than those named, so I edited it
to report the correct names and also the values of the variables used
in the comparison.  I found that VTS_01_0.IFO was the culprit in this
case.

The variables mkisofs tests before emitting this error message, and
their values in this case, are:

vts_ifo->vtsi_mat->vts_last_sector = 3695431
         DVDFileSize(vts_ifo_file) = 316     (sectors in VTS_01_0.IFO)
       DVDFileSize(vts_title_file) = 3694824 (sectors in VTS_01_[1-8].VOB)
        DVDFileSize(vts_menu_file) = 232     (sectors in VTS_01_0.vOB)

mkisofs expects that vts_ifo->vtsi_mat->vts_last_sector + 1 >= 2 *
DVDFileSize(vts_ifo_file) + DVDFileSize(vts_title_file) +
DVDFileSize(vts_menu_file), which seems reasonable to me.  In this
case the left hand side is smaller by 256.

To cut a long story short, I found that the WriteIFO function in
dvdifo.c only writes a single byte for many of the sector numbers 
used in the IFO file, so it only works so long as the IFO file takes
up less than 256 sectors.  This is generally true, but this titleset
contains an unusually large amount of video (over 30 hours).

I have changed dvdifo.c to write sector numbers as 4 bytes, on the
assumption that this is the correct length of the fields, which
satisfies mkisofs in at least this case.  However I do not have
documentation of the IFO file format and I have not yet had a chance
to check the resulting image in a DVD player.  A patch follows.

--- dvdauthor-0.6.11/src/dvdifo.c.orig  2005-08-16 14:18:20.893116876 +0100
+++ dvdauthor-0.6.11/src/dvdifo.c       2005-08-16 14:22:03.065885528 +0100
@@ -371,43 +371,43 @@
     write4(buf+128,0x7ff);
     i=1;
 
-    buf[0xCB]=i; // VTS_PTT_SRPT
+    write4(buf+0xC8,i); // VTS_PTT_SRPT
     i+=Create_PTT_SRPT(0,ws->titles);
 
-    buf[0xCF]=i; // VTS_PGCI
+    write4(buf+0xCC,i); // VTS_PGCI
     i+=CreatePGC(0,ws,0);
 
     if( jumppad || forcemenus ) {
-        buf[0xD3]=i; // VTSM_PGCI
+        write4(buf+0xD0,i); // VTSM_PGCI
         i+=CreatePGC(0,ws,1);
     }
 
-    buf[0xD7]=i; // VTS_TMAPT
+    write4(buf+0xD4,i); // VTS_TMAPT
     i+=numsectTMAPT(ws->titles);
 
     if( jumppad || forcemenus ) {
-        buf[0xDB]=i; // VTSM_C_ADT
+        write4(buf+0xD8,i); // VTSM_C_ADT
         i+=CreateCallAdr(0,ws->menus->vg);
         
-        buf[0xDF]=i; // VTSM_VOBU_ADMAP
+        write4(buf+0xDC,i); // VTSM_VOBU_ADMAP
         i+=numsectVOBUAD(ws->menus->vg);
     }
 
-    buf[0xE3]=i; // VTS_C_ADT
+    write4(buf+0xE0,i); // VTS_C_ADT
     i+=CreateCallAdr(0,ws->titles->vg);
 
-    buf[0xE7]=i; // VTS_VOBU_ADMAP
+    write4(buf+0xE4,i); // VTS_VOBU_ADMAP
     i+=numsectVOBUAD(ws->titles->vg);
 
-    buf[31]=i-1;
+    write4(buf+28,i-1);
     if( jumppad || forcemenus ) {
-        buf[0xC3]=i;
+        write4(buf+0xC0,i);
         i+=getvoblen(ws->menus->vg);
     }
     write4(buf+0xC4,i);
     if( ws->titles->numpgcs )
         i+=getvoblen(ws->titles->vg);
-    i+=buf[31];
+    i+=read4(buf+28);
     write4(buf+12,i);
 
     if( jumppad || forcemenus )

-- System Information:
Debian Release: 3.1
  APT prefers testing
  APT policy: (990, 'testing'), (600, 'unstable')
Architecture: i386 (i686)
Kernel: Linux 2.6.8-2-k7
Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8)

Versions of packages dvdauthor depends on:
ii  libbz2-1.0             1.0.2-7           high-quality block-sorting file co
ii  libc6                  2.3.2.ds1-22      GNU C Library: Shared libraries an
ii  libdps1                4.3.0.dfsg.1-14   Display PostScript (DPS) client li
ii  libdvdread3            0.9.4-5           Simple foundation for reading DVDs
ii  libfreetype6           2.1.7-2.4         FreeType 2 font engine, shared lib
ii  libfribidi0            0.10.4-6          Free Implementation of the Unicode
ii  libice6                4.3.0.dfsg.1-14   Inter-Client Exchange library
ii  libjasper-1.701-1      1.701.0-2         The JasPer JPEG-2000 runtime libra
ii  libjpeg62              6b-10             The Independent JPEG Group's JPEG 
ii  liblcms1               1.13-1            Color management library
ii  libmagick6             6:6.0.6.2-2.4     Image manipulation library
ii  libpng12-0             1.2.8rel-1        PNG library - runtime
ii  libsm6                 4.3.0.dfsg.1-14   X Window System Session Management
ii  libtiff4               3.7.2-3           Tag Image File Format (TIFF) libra
ii  libx11-6               4.3.0.dfsg.1-14   X Window System protocol client li
ii  libxext6               4.3.0.dfsg.1-14   X Window System miscellaneous exte
ii  libxml2                2.6.16-7          GNOME XML library
ii  libxt6                 4.3.0.dfsg.1-14   X Toolkit Intrinsics
ii  xlibs                  4.3.0.dfsg.1-14   X Keyboard Extension (XKB) configu
ii  zlib1g                 1:1.2.2-4.sarge.2 compression library - runtime

-- no debconf information


--- End Message ---
--- Begin Message ---
Ben explains his patch:

To cut a long story short, I found that the WriteIFO function in
dvdifo.c only writes a single byte for many of the sector numbers 
used in the IFO file, so it only works so long as the IFO file takes
up less than 256 sectors.  This is generally true, but this titleset
contains an unusually large amount of video (over 30 hours).

I have changed dvdifo.c to write sector numbers as 4 bytes, on the
assumption that this is the correct length of the fields, which
satisfies mkisofs in at least this case.  However I do not have
documentation of the IFO file format and I have not yet had a chance
to check the resulting image in a DVD player.

-- 
  greetz, marc
Bingo! Give Brainiac a fluffy doll!
        Crichton - Crackers Don't Matter
scorpius.homelinux.org 2.6.17 #2 Sun Sep 17 14:04:26 CEST 2006 GNU/Linux

Attachment: signature.asc
Description: Digital signature


--- End Message ---

Reply via email to