Flushing buffer to MMC before a new track begins

This commit is contained in:
2012-01-13 12:22:07 +00:00
parent a0540651eb
commit 66639c6e11
4 changed files with 50 additions and 17 deletions

View File

@ -223,6 +223,36 @@ ex:;
}
}
/* ts B20113 : outsourced from get_sector() */
int sector_write_buffer(struct burn_drive *d,
struct burn_track *track, int flag)
{
int err;
struct buffer *out;
out = d->buffer;
if (out->sectors <= 0)
return 2;
err = d->write(d, d->nwa, out);
if (err == BE_CANCELLED)
return 0;
/* ts A61101 */
if(track != NULL) {
track->writecount += out->bytes;
track->written_sectors += out->sectors;
}
/* ts A61119 */
d->progress.buffered_bytes += out->bytes;
d->nwa += out->sectors;
out->bytes = 0;
out->sectors = 0;
return 1;
}
/* ts A61009 : seems to hand out sector start pointer in opts->drive->buffer
and to count hand outs as well as reserved bytes */
/* ts A61101 : added parameter track for counting written bytes */
@ -231,7 +261,7 @@ static unsigned char *get_sector(struct burn_write_opts *opts,
{
struct burn_drive *d = opts->drive;
struct buffer *out = d->buffer;
int outmode, seclen;
int outmode, seclen, write_ret;
unsigned char *ret;
outmode = get_outmode(opts);
@ -250,22 +280,9 @@ static unsigned char *get_sector(struct burn_write_opts *opts,
/* (there is enough buffer size reserve for track->cdxa_conversion) */
if (out->bytes + seclen > BUFFER_SIZE ||
(opts->obs > 0 && out->bytes + seclen > opts->obs)) {
int err;
err = d->write(d, d->nwa, out);
if (err == BE_CANCELLED)
write_ret = sector_write_buffer(d, track, 0);
if (write_ret <= 0)
return NULL;
/* ts A61101 */
if(track != NULL) {
track->writecount += out->bytes;
track->written_sectors += out->sectors;
}
/* ts A61119 */
d->progress.buffered_bytes += out->bytes;
d->nwa += out->sectors;
out->bytes = 0;
out->sectors = 0;
}
ret = out->data + out->bytes;
out->bytes += seclen;