From c8e0472637aeddc3764d5c552fb442b234962825 Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Wed, 18 Nov 2009 18:56:14 +0000 Subject: [PATCH] Reserving enough track space for 64 kB write chunks --- cdrskin/cdrskin_timestamp.h | 2 +- libburn/write.c | 22 ++++++++++------------ 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/cdrskin/cdrskin_timestamp.h b/cdrskin/cdrskin_timestamp.h index 3c63350..b53d247 100644 --- a/cdrskin/cdrskin_timestamp.h +++ b/cdrskin/cdrskin_timestamp.h @@ -1 +1 @@ -#define Cdrskin_timestamP "2009.11.18.122713" +#define Cdrskin_timestamP "2009.11.18.185733" diff --git a/libburn/write.c b/libburn/write.c index 389f0c3..f5d0559 100644 --- a/libburn/write.c +++ b/libburn/write.c @@ -1096,10 +1096,11 @@ int burn_disc_open_track_dvd_minus_r(struct burn_write_opts *o, #endif if (o->write_type == BURN_WRITE_SAO) { /* DAO */ - /* Round track size up to 32 KiB and reserve track */ - size = ((off_t) burn_track_get_sectors(s->track[tnum])) - * (off_t) 2048; - size = (size + (off_t) 0x7fff) & ~((off_t) 0x7fff); + /* Round track size up to write chunk size and reserve track */ + size = ((off_t) burn_track_get_sectors(s->track[tnum])); + if (size % o->obs) + size += (off_t) (o->obs - (size % o->obs)); + size *= (off_t) 2048; ret = d->reserve_track(d, size); if (ret <= 0) { sprintf(msg, "Cannot reserve track of %.f bytes", @@ -1137,14 +1138,11 @@ int burn_disc_open_track_dvd_plus_r(struct burn_write_opts *o, if (o->write_type == BURN_WRITE_SAO && ! burn_track_is_open_ended(s->track[tnum])) { - /* Round track size up to 32 KiB and reserve track */ - - /* ts A81208 */ - /* >>> ??? round to 64 KiB for BD-R ? (It is not mandatory) */ - - size = ((off_t) burn_track_get_sectors(s->track[tnum])) - * (off_t) 2048; - size = (size + (off_t) 0x7fff) & ~((off_t) 0x7fff); + /* Round track size up to write chunk size and reserve track */ + size = ((off_t) burn_track_get_sectors(s->track[tnum])); + if (size % o->obs) + size += (off_t) (o->obs - (size % o->obs)); + size *= (off_t) 2048; ret = d->reserve_track(d, size); if (ret <= 0) { sprintf(msg, "Cannot reserve track of %.f bytes",