Re: Re: Problems with dvd+rw-tools 6 and Pioneer drive
I have the same speed related problem with dvd+rw-tools 6.0 and ASUS
DRW-1608P.
It seems that the problem is in set_speed_B9 function in
growisofs_mmc.cpp.
So here is my output from dvd+rw-mediainfo:
INQUIRY: [ASUS ][DRW-1608P ][1.17]
GET [CURRENT] CONFIGURATION:
Mounted Media: 11h, DVD-R Sequential
Media ID: TTG02
Current Write Speed: 8.0x1385=11080KB/s
Write Speed #0: 8.0x1385=11080KB/s
Write Speed #1: 6.0x1385=8310KB/s
Write Speed #2: 4.0x1385=5540KB/s
Speed Descriptor#0: 00/2298495 R@1.0x1385=1385KB/s
W@8.0x1385=11080KB/s
Speed Descriptor#1: 00/2298495 R@1.0x1385=1385KB/s
W@6.0x1385=8310KB/s
Speed Descriptor#2: 00/2298495 R@1.0x1385=1385KB/s
W@4.0x1385=5540KB/s
READ DVD STRUCTURE[#10h]:
Media Book Type: 25h, DVD-R book [revision 5]
Legacy lead-out at: 2298496*2KB=4707319808
READ DVD STRUCTURE[#0h]:
Media Book Type: 25h, DVD-R book [revision 5]
Last border-out at: 0*2KB=0
READ DISC INFORMATION:
Disc status: blank
Number of Sessions: 1
State of Last Session: empty
Number of Tracks: 1
READ TRACK INFORMATION[#1]:
Track State: invisible incremental
Track Start Address: 0*2KB
Next Writable Address: 0*2KB
Free Blocks: 2297888*2KB
Track Size: 2297888*2KB
READ CAPACITY: 0*2048=0
As you can see, the minimal speed is "Write Speed #2:
4.0x1385=5540KB/s" and it should be treated as 1x for this media.
Indeed after finishing this for loop in growisofs_mmc:
for (minv=0x7fffffff,i=0;i<j;i+=16)
{ v=wsdp[i+12]<<24|wsdp[i+13]<<16|wsdp[i+14]<<8|wsdp[i+15];
if (v<minv) minv=v;
} // minv will be treated as 1x
minv equals to 5540, speed_factor = 8.0.
Later you have a set of if statements to determine divisor for
speed_factor. 5540 is definitely > then (3*ONEX), so speed_factor will
be divided by 4.0 and now we have (speed_factor == 4.0). But later you
have something like this:
if (!dvddash && minv>(2*ONEX))
// 2.4x is like 1x for DVD+, but it turned out that there're
// units, most notably "DVDRW IDE1004," burning DVD+ at
// lower speed, so I have to watch out for it...
speed_factor /= 2.4;
else if (minv>=(2*ONEX))
speed_factor /= 2.0;
5540 is also >= then (2*ONEX) and speed_factor will be also divided by
2.0. So now (speed_factor == 1.0) and we get 4x speed instead of 8x
specified at command line.
The solution can be to replace
if (!dvddash && minv>(2*ONEX))
with
else if (!dvddash && minv>(2*ONEX))
Then the former 2 if statements will be checked only if all above
failed.
This solution worked for me, but I'm not sure if it addresses all issues
of speed_factor calculations. I didn't dig there too deep :)
As temporary workaround it is possible to set "speed" option of k3b to
"Ignore" for -speed option not to be passed to growisofs.
Reply to: