|
|
|
@ -62,7 +62,13 @@ int isoburn_new(struct isoburn **objpt, int flag)
|
|
|
|
|
o->emulation_mode= 0; |
|
|
|
|
o->min_start_byte= 0; |
|
|
|
|
o->nwa= 0; |
|
|
|
|
|
|
|
|
|
#ifdef Libisoburn_no_fifO |
|
|
|
|
o->iso_source= NULL; |
|
|
|
|
#else |
|
|
|
|
o->fifo= NULL; |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
o->wrote_well= -1; |
|
|
|
|
o->fabricated_disc_status= BURN_DISC_UNREADY; |
|
|
|
|
for(i=0;i<65536;i++) |
|
|
|
@ -102,8 +108,15 @@ int isoburn_destroy(struct isoburn **objpt, int flag)
|
|
|
|
|
|
|
|
|
|
if(o->image!=NULL) |
|
|
|
|
iso_image_unref(o->image); |
|
|
|
|
|
|
|
|
|
#ifdef Libisoburn_no_fifO |
|
|
|
|
if(o->iso_source!=NULL) |
|
|
|
|
burn_source_free(o->iso_source); |
|
|
|
|
#else |
|
|
|
|
if(o->fifo!=NULL) |
|
|
|
|
burn_source_free(o->fifo); |
|
|
|
|
#endif /* ! Libisoburn_no_fifO */ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
free((char *) o); |
|
|
|
|
*objpt= NULL; |
|
|
|
@ -247,7 +260,7 @@ int isoburn_prepare_disc_aux(struct burn_drive *d, struct burn_disc **disc,
|
|
|
|
|
struct isoburn *o; |
|
|
|
|
Ecma119WriteOpts wopts; |
|
|
|
|
enum burn_disc_status state; |
|
|
|
|
int ret, chunks; |
|
|
|
|
int ret, fifo_chunks; |
|
|
|
|
|
|
|
|
|
ret= isoburn_find_emulator(&o, d, 0); |
|
|
|
|
if(ret<0 || o==NULL) |
|
|
|
@ -261,6 +274,13 @@ int isoburn_prepare_disc_aux(struct burn_drive *d, struct burn_disc **disc,
|
|
|
|
|
/* unsuitable status */ |
|
|
|
|
return -2; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
fifo_chunks= 32; |
|
|
|
|
if(opts->fifo_size >= 64*1024 && opts->fifo_size <= 1024.0 * 1024.0 * 1024.0){ |
|
|
|
|
fifo_chunks= opts->fifo_size/2048; |
|
|
|
|
if(fifo_chunks*2048 < opts->fifo_size) |
|
|
|
|
fifo_chunks++; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
memset((char *) &wopts, 0, sizeof(wopts)); |
|
|
|
|
wopts.level = opts->level; |
|
|
|
@ -285,6 +305,13 @@ int isoburn_prepare_disc_aux(struct burn_drive *d, struct burn_disc **disc,
|
|
|
|
|
wopts.gid = opts->gid; |
|
|
|
|
wopts.uid = opts->uid; |
|
|
|
|
wopts.output_charset = opts->output_charset; |
|
|
|
|
#ifdef Libisoburn_no_fifO |
|
|
|
|
wopts.fifo_size= fifo_chunks; |
|
|
|
|
|
|
|
|
|
/* <<<
|
|
|
|
|
fprintf(stderr, "libisoburn_DEBUG: fifo chunks: %d\n", fifo_chunks); |
|
|
|
|
*/ |
|
|
|
|
#endif /* Libisoburn_no_fifO */ |
|
|
|
|
|
|
|
|
|
if (new_img) { |
|
|
|
|
wopts.ms_block = 0; |
|
|
|
@ -311,23 +338,28 @@ int isoburn_prepare_disc_aux(struct burn_drive *d, struct burn_disc **disc,
|
|
|
|
|
|
|
|
|
|
/* TODO check return values for failure. propertly clean-up on error */ |
|
|
|
|
|
|
|
|
|
chunks= 32; |
|
|
|
|
if(opts->fifo_size >= 64*1024 && opts->fifo_size <= 1024.0 * 1024.0 * 1024.0){ |
|
|
|
|
chunks= opts->fifo_size/2048; |
|
|
|
|
if(chunks*2048 < opts->fifo_size) |
|
|
|
|
chunks++; |
|
|
|
|
} |
|
|
|
|
o->fifo = burn_fifo_source_new(wsrc, 2048, chunks, 0); |
|
|
|
|
#ifdef Libisoburn_no_fifO |
|
|
|
|
o->iso_source= wsrc; |
|
|
|
|
#else |
|
|
|
|
o->fifo = burn_fifo_source_new(wsrc, 2048, fifo_chunks, 0); |
|
|
|
|
burn_source_free(wsrc); |
|
|
|
|
if (o->fifo == NULL) { |
|
|
|
|
fprintf(stderr, "Cannot attach fifo\n"); |
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
#endif /* ! Libisoburn_no_fifO */ |
|
|
|
|
|
|
|
|
|
*disc = burn_disc_create(); |
|
|
|
|
session = burn_session_create(); |
|
|
|
|
burn_disc_add_session(*disc, session, BURN_POS_END); |
|
|
|
|
track = burn_track_create(); |
|
|
|
|
|
|
|
|
|
#ifdef Libisoburn_no_fifO |
|
|
|
|
burn_track_set_source(track, o->iso_source); |
|
|
|
|
#else |
|
|
|
|
burn_track_set_source(track, o->fifo); |
|
|
|
|
#endif /* ! Libisoburn_no_fifO */ |
|
|
|
|
|
|
|
|
|
burn_session_add_track(session, track, BURN_POS_END); |
|
|
|
|
|
|
|
|
|
/* give up local references */ |
|
|
|
|