diff --git a/cdrskin/cdrskin_timestamp.h b/cdrskin/cdrskin_timestamp.h index 0a4c2a6..05b2db9 100644 --- a/cdrskin/cdrskin_timestamp.h +++ b/cdrskin/cdrskin_timestamp.h @@ -1 +1 @@ -#define Cdrskin_timestamP "2009.02.20.132334" +#define Cdrskin_timestamP "2009.02.27.143100" diff --git a/libburn/drive.c b/libburn/drive.c index 3e51a5e..afbfbe5 100644 --- a/libburn/drive.c +++ b/libburn/drive.c @@ -62,6 +62,7 @@ int burn_setup_drive(struct burn_drive *d, char *fname) d->stdio_fd = -1; d->status = BURN_DISC_UNREADY; d->do_stream_recording = 0; + d->stream_recording_start= 0; return 1; } @@ -792,6 +793,18 @@ enum burn_drive_status burn_drive_get_status(struct burn_drive *d, return d->busy; } +int burn_drive_set_stream_recording(struct burn_drive *d, int recmode, + int start, int flag) +{ + + if (recmode == 1) + d->do_stream_recording = 1; + else if (recmode == -1) + d->do_stream_recording = 0; + d->stream_recording_start = start; + return(1); +} + void burn_drive_cancel(struct burn_drive *d) { pthread_mutex_lock(&d->access_lock); diff --git a/libburn/libburn.h b/libburn/libburn.h index 8f50f8b..1eec091 100644 --- a/libburn/libburn.h +++ b/libburn/libburn.h @@ -1388,6 +1388,28 @@ int burn_precheck_write(struct burn_write_opts *o, struct burn_disc *disc, */ void burn_disc_write(struct burn_write_opts *o, struct burn_disc *disc); + +/* ts A90227 */ +/** Control stream recording during the write run and eventually set the start + LBA for stream recording. + Stream recording is set from struct burn_write_opts when the write run + gets started. See burn_write_opts_set_stream_recording(). + The call described here can be used later to override this setting and + to program automatic switching at a given LBA. It also affects subsequent + calls to burn_random_access_write(). + @param drive The drive which performs the write operation. + @param recmode -1= disable stream recording + 0= leave setting as is + 1= enable stream recording + @param start The LBA where actual stream recording shall start. + (0 means unconditional stream recording) + @param flag Bitfield for control purposes (unused yet, submit 0). + @return 1=success , <=0 failure + @since 0.6.4 +*/ +int burn_drive_set_stream_recording(struct burn_drive *drive, int recmode, + int start, int flag); + /** Cancel an operation on a drive. This will only work when the drive's busy state is BURN_DRIVE_READING or BURN_DRIVE_WRITING. @@ -1906,12 +1928,15 @@ void burn_write_opts_set_force(struct burn_write_opts *opts, int use_force); /* ts A80412 */ /** Eventually makes use of the more modern write command AAh WRITE12 and - sets the Streaming bit. With DVD-RAM this can override the traditional - slowdown to half nominal speed. But if it speeds up writing then it also - disables error management and correction. Weigh your priorities. - This only affects the write operations of burn_disc_write(). + sets the Streaming bit. With DVD-RAM and BD this can override the + traditional slowdown to half nominal speed. But if it speeds up writing + then it also disables error management and correction. Weigh your + priorities. This affects the write operations of burn_disc_write() + and subsequent calls of burn_random_access_write(). @param opts The write opts to change @param value 0=use 2Ah WRITE10, 1=use AAh WRITE12 with Streaming bit + @since 0.6.4: + >=16 use WRITE12 but not before the LBA given by value @since 0.4.6 */ void burn_write_opts_set_stream_recording(struct burn_write_opts *opts, diff --git a/libburn/mmc.c b/libburn/mmc.c index 9316b06..e8dc44b 100644 --- a/libburn/mmc.c +++ b/libburn/mmc.c @@ -55,10 +55,10 @@ extern struct libdax_msgs *libdax_messenger; /* ts A70306 */ #define Libburn_support_dvd_plus_R 1 -/* ts A70509 : handling 0x41 and 0x42 as read-only types */ +/* ts A70509 : handling 0x41 as read-only type */ #define Libburn_support_bd_r_readonlY 1 -/* >>> ts A81208 */ +/* ts A81208 */ #define Libburn_support_bd_plus_r_srM 1 @@ -124,6 +124,7 @@ extern struct libdax_msgs *libdax_messenger; BD-RE is now an officially supported profile. ts A81209 : The first two sessions have been written to BD-R SRM (auto formatted without Defect Management). + ts A90107 : BD-R is now supported media type */ /* ts A70519 : With MMC commands of data direction FROM_DRIVE: @@ -744,7 +745,7 @@ int mmc_write(struct burn_drive *d, int start, struct buffer *buf) mmc_wait_for_buffer_free(d, buf); /* ts A80412 */ - if(d->do_stream_recording > 0) { + if(d->do_stream_recording > 0 && start >= d->stream_recording_start) { /* >>> ??? is WRITE12 available ? */ /* >>> ??? inquire feature 107h Stream Writing bit ? */ diff --git a/libburn/options.c b/libburn/options.c index 4b8cf45..501d17f 100644 --- a/libburn/options.c +++ b/libburn/options.c @@ -385,7 +385,7 @@ void burn_write_opts_set_force(struct burn_write_opts *opts, int use_force) void burn_write_opts_set_stream_recording(struct burn_write_opts *opts, int value) { - opts->do_stream_recording = !!value; + opts->do_stream_recording = value; } diff --git a/libburn/transport.h b/libburn/transport.h index ee45330..c0ef4df 100644 --- a/libburn/transport.h +++ b/libburn/transport.h @@ -205,6 +205,11 @@ struct burn_drive with BD-RE */ int do_stream_recording; + /* ts A90227 : the LBA where stream recording shall start. + Writing to lower LBA will be done without streaming. + */ + int stream_recording_start; + /* ts A61218 from 51h READ DISC INFORMATION */ int bg_format_status; /* 0=needs format start, 1=needs format restart*/ diff --git a/libburn/write.c b/libburn/write.c index 975d1f9..fbf428c 100644 --- a/libburn/write.c +++ b/libburn/write.c @@ -2106,8 +2106,12 @@ void burn_disc_write_sync(struct burn_write_opts *o, struct burn_disc *disc) /* ts A61224 */ burn_disc_init_write_status(o, disc); /* must be done very early */ - /* ts A80412 */ - d->do_stream_recording = o->do_stream_recording; + /* ts A80412 , A90227 */ + d->do_stream_recording = !!o->do_stream_recording; + if (o->do_stream_recording >= 16) + d->stream_recording_start = o->do_stream_recording; + else + d->stream_recording_start = 0; d->buffer = &buf; memset(d->buffer, 0, sizeof(struct buffer));