New struct burn_progress_v2 and API call burn_drive_get_status_v2()
This commit is contained in:
parent
17a020e9fc
commit
d48bbb4b66
@ -1 +1 @@
|
||||
#define Cdrskin_timestamP "2024.02.27.194737"
|
||||
#define Cdrskin_timestamP "2024.03.01.185046"
|
||||
|
10
configure.ac
10
configure.ac
@ -152,12 +152,12 @@ LT_RELEASE=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION
|
||||
dnl
|
||||
dnl ### This is the release version libburn-1.5.6
|
||||
dnl This is the development version after above release version
|
||||
dnl LT_CURRENT++, LT_AGE++ has not yet happened.
|
||||
dnl ### LT_CURRENT++, LT_AGE++ has happened meanwhile.
|
||||
dnl ### LT_CURRENT++, LT_AGE++ has not yet happened.
|
||||
dnl LT_CURRENT++, LT_AGE++ has happened meanwhile.
|
||||
dnl
|
||||
dnl SONAME = 113 - 109 = 4 . Linux library name = libburn.so.4.109.0
|
||||
LT_CURRENT=113
|
||||
LT_AGE=109
|
||||
dnl SONAME = 114 - 110 = 4 . Linux library name = libburn.so.4.110.0
|
||||
LT_CURRENT=114
|
||||
LT_AGE=110
|
||||
LT_REVISION=0
|
||||
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
|
||||
|
||||
/* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens
|
||||
Copyright (c) 2006 - 2017 Thomas Schmitt <scdbackup@gmx.net>
|
||||
Copyright (c) 2006 - 2024 Thomas Schmitt <scdbackup@gmx.net>
|
||||
Provided under GPL version 2 or later.
|
||||
*/
|
||||
|
||||
@ -279,7 +279,7 @@ static void *scan_worker_func(struct w_list *w)
|
||||
}
|
||||
|
||||
static void reset_progress(struct burn_drive *d, int sessions, int tracks,
|
||||
int indices, int sectors, int flag)
|
||||
int indices, off_t sectors, int flag)
|
||||
{
|
||||
/* reset the progress indicator */
|
||||
d->progress.session = 0;
|
||||
@ -412,7 +412,7 @@ void burn_disc_erase(struct burn_drive *drive, int fast)
|
||||
return;
|
||||
}
|
||||
|
||||
reset_progress(drive, 1, 1, 1, 0x10000, 0);
|
||||
reset_progress(drive, 1, 1, 1, (off_t) 0x10000, 0);
|
||||
|
||||
/* A70103 : will be set to 0 by burn_disc_erase_sync() */
|
||||
drive->cancel = 1;
|
||||
@ -494,7 +494,7 @@ void burn_disc_format(struct burn_drive *drive, off_t size, int flag)
|
||||
int ok = 0, ret;
|
||||
char msg[40];
|
||||
|
||||
reset_progress(drive, 1, 1, 1, 0x10000, 0);
|
||||
reset_progress(drive, 1, 1, 1, (off_t) 0x10000, 0);
|
||||
|
||||
if ((SCAN_GOING()) || find_worker(drive) != NULL) {
|
||||
libdax_msgs_submit(libdax_messenger, drive->global_index,
|
||||
@ -652,7 +652,7 @@ void burn_disc_write(struct burn_write_opts *opts, struct burn_disc *disc)
|
||||
}
|
||||
|
||||
reset_progress(d, disc->sessions, disc->session[0]->tracks,
|
||||
disc->session[0]->track[0]->indices, 0, 0);
|
||||
disc->session[0]->track[0]->indices, (off_t) 0, 0);
|
||||
|
||||
/* For the next lines any return indicates failure */
|
||||
d->cancel = 1;
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
|
||||
|
||||
/* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens
|
||||
Copyright (c) 2006 - 2021 Thomas Schmitt <scdbackup@gmx.net>
|
||||
Copyright (c) 2006 - 2024 Thomas Schmitt <scdbackup@gmx.net>
|
||||
Provided under GPL version 2 or later.
|
||||
*/
|
||||
|
||||
@ -1136,12 +1136,13 @@ int burn_disc_erasable(struct burn_drive *d)
|
||||
{
|
||||
return d->erasable;
|
||||
}
|
||||
enum burn_drive_status burn_drive_get_status(struct burn_drive *d,
|
||||
struct burn_progress *p)
|
||||
|
||||
|
||||
void burn_drive_get_status_sig_handling(void)
|
||||
{
|
||||
/* --- Part of asynchronous signal handling --- */
|
||||
/* This frequently used call may be used to react on messages from
|
||||
the libburn built-in signal handler.
|
||||
/* The frequently used callx burn_drive_get_status*() may be used
|
||||
to react on messages from the libburn built-in signal handler.
|
||||
*/
|
||||
|
||||
/* ts B00225 :
|
||||
@ -1165,11 +1166,61 @@ enum burn_drive_status burn_drive_get_status(struct burn_drive *d,
|
||||
}
|
||||
|
||||
/* --- End of asynchronous signal handling --- */
|
||||
}
|
||||
|
||||
|
||||
enum burn_drive_status burn_drive_get_status(struct burn_drive *d,
|
||||
struct burn_progress *p)
|
||||
{
|
||||
burn_drive_get_status_sig_handling();
|
||||
|
||||
if (p != NULL) {
|
||||
memcpy(p, &(d->progress), sizeof(struct burn_progress));
|
||||
/* TODO: add mutex */
|
||||
|
||||
p->sessions = d->progress.sessions;
|
||||
p->session = d->progress.session;
|
||||
p->tracks = d->progress.tracks;
|
||||
p->track = d->progress.track;
|
||||
p->indices = d->progress.indices;
|
||||
p->index = d->progress.index;
|
||||
if(d->progress.start_sector < 0x80000000)
|
||||
p->start_sector = d->progress.start_sector;
|
||||
else
|
||||
p->start_sector = 0x7fffffff;
|
||||
if(d->progress.sectors < 0x80000000)
|
||||
p->sectors = d->progress.sectors;
|
||||
else
|
||||
p->sectors = 0x7fffffff;
|
||||
if(d->progress.sector < 0x80000000)
|
||||
p->sector = d->progress.sector;
|
||||
else
|
||||
p->sector = 0x7fffffff;
|
||||
if(d->progress.buffer_capacity < 0x100000000)
|
||||
p->buffer_capacity = d->progress.buffer_capacity;
|
||||
else
|
||||
p->buffer_capacity = 0xffffffff;
|
||||
if(d->progress.buffer_available < 0x100000000)
|
||||
p->buffer_available = d->progress.buffer_available;
|
||||
else
|
||||
p->buffer_available = 0xffffffff;
|
||||
p->buffered_bytes = d->progress.buffered_bytes;
|
||||
if(d->progress.buffer_min_fill < 0x100000000)
|
||||
p->buffer_min_fill = d->progress.buffer_min_fill;
|
||||
else
|
||||
p->buffer_min_fill = 0xffffffff;
|
||||
}
|
||||
return d->busy;
|
||||
}
|
||||
|
||||
|
||||
enum burn_drive_status burn_drive_get_status_v2(struct burn_drive *d,
|
||||
struct burn_progress_v2 *p)
|
||||
{
|
||||
burn_drive_get_status_sig_handling();
|
||||
if (p != NULL) {
|
||||
/* TODO: add mutex */
|
||||
|
||||
memcpy(p, &(d->progress), sizeof(struct burn_progress_v2));
|
||||
}
|
||||
return d->busy;
|
||||
}
|
||||
|
@ -680,7 +680,8 @@ struct burn_drive_info
|
||||
|
||||
|
||||
/** Operation progress report. All values are 0 based indices.
|
||||
* */
|
||||
Handed out by burn_drive_get_status().
|
||||
**/
|
||||
struct burn_progress {
|
||||
/** The total number of sessions */
|
||||
int sessions;
|
||||
@ -722,6 +723,52 @@ struct burn_progress {
|
||||
};
|
||||
|
||||
|
||||
/** Operation progress report with long block numbers.
|
||||
All values are 0 based indices.
|
||||
Handed out by burn_drive_get_status_v2().
|
||||
@since 1.5.8
|
||||
**/
|
||||
struct burn_progress_v2 {
|
||||
/** Revision of the struct format.
|
||||
0= Elements up to .buffer_min_fill */
|
||||
int revision;
|
||||
|
||||
/** The total number of sessions */
|
||||
int sessions;
|
||||
/** Current session.*/
|
||||
int session;
|
||||
/** The total number of tracks */
|
||||
int tracks;
|
||||
/** Current track. */
|
||||
int track;
|
||||
/** The total number of indices */
|
||||
int indices;
|
||||
/** Current index. */
|
||||
int index;
|
||||
/** The starting logical block address */
|
||||
off_t start_sector;
|
||||
/** On write: The number of sectors.
|
||||
On blank: 0x10000 as upper limit for relative progress steps */
|
||||
off_t sectors;
|
||||
/** On write: The current sector being processed.
|
||||
On blank: Relative progress steps 0 to 0x10000 */
|
||||
off_t sector;
|
||||
|
||||
/** The capacity of the drive buffer */
|
||||
off_t buffer_capacity;
|
||||
/** The free space in the drive buffer (might be slightly outdated) */
|
||||
off_t buffer_available;
|
||||
|
||||
/** The number of bytes sent to the drive buffer */
|
||||
off_t buffered_bytes;
|
||||
/** The minimum number of bytes stored in buffer during write.
|
||||
(Caution: Before surely one buffer size of bytes was processed,
|
||||
this value is 0xffffffffffffffff.)
|
||||
*/
|
||||
off_t buffer_min_fill;
|
||||
};
|
||||
|
||||
|
||||
/* ts A61226 */
|
||||
/* @since 0.3.0 */
|
||||
/** Description of a speed capability as reported by the drive in conjunction
|
||||
@ -1667,6 +1714,15 @@ int burn_disc_erasable(struct burn_drive *d);
|
||||
enum burn_drive_status burn_drive_get_status(struct burn_drive *drive,
|
||||
struct burn_progress *p);
|
||||
|
||||
/** Returns the progress with long block numbers and the status of the drive.
|
||||
@param drive The drive to query busy state for.
|
||||
@param p Returns the progress of the operation, NULL if you don't care
|
||||
@return the current status of the drive. See also burn_drive_status.
|
||||
@since 1.5.8
|
||||
*/
|
||||
enum burn_drive_status burn_drive_get_status_v2(struct burn_drive *drive,
|
||||
struct burn_progress_v2 *p);
|
||||
|
||||
/** Creates a write_opts struct for burning to the specified drive.
|
||||
The returned object must later be freed with burn_write_opts_free().
|
||||
@param drive The drive to write with
|
||||
|
@ -213,3 +213,8 @@ libdax_audioxtr_new;
|
||||
libdax_audioxtr_read;
|
||||
local: *;
|
||||
};
|
||||
|
||||
LIBBURN4_1.5.8 {
|
||||
burn_drive_get_status_v2;
|
||||
} LIBBURN4;
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
|
||||
|
||||
/* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens
|
||||
Copyright (c) 2006 - 2016 Thomas Schmitt <scdbackup@gmx.net>
|
||||
Copyright (c) 2006 - 2024 Thomas Schmitt <scdbackup@gmx.net>
|
||||
Provided under GPL version 2 or later.
|
||||
*/
|
||||
|
||||
@ -766,7 +766,8 @@ ex:;
|
||||
*/
|
||||
static int mmc_wait_for_buffer_free(struct burn_drive *d, struct buffer *buf)
|
||||
{
|
||||
int usec= 0, need, reported_3s = 0, first_wait = 1;
|
||||
int usec= 0, reported_3s = 0, first_wait = 1;
|
||||
off_t need;
|
||||
struct timeval t0,tnow;
|
||||
double max_fac, min_fac, waiting;
|
||||
|
||||
@ -1065,7 +1066,7 @@ fprintf(stderr, "libburn_DEBUG: buffer sectors= %d bytes= %d\n",
|
||||
*/
|
||||
if (d->current_profile == 0x14 && d->write_opts != NULL &&
|
||||
(d->progress.buffer_capacity == 0 ||
|
||||
start < (int) d->progress.buffer_capacity / 2048) &&
|
||||
start < (off_t) d->progress.buffer_capacity / 2048) &&
|
||||
key == 5 && asc == 0x64 && ascq == 0) {
|
||||
if (d->write_opts->write_type == BURN_WRITE_TAO) {
|
||||
d->was_feat21h_failure = 1 + (start == 0);
|
||||
@ -3706,7 +3707,7 @@ int mmc_read_buffer_capacity(struct burn_drive *d)
|
||||
d->pessimistic_buffer_free = d->progress.buffer_available;
|
||||
d->pbf_altered = 0;
|
||||
if (d->progress.buffered_bytes >= d->progress.buffer_capacity){
|
||||
double fill;
|
||||
off_t fill;
|
||||
|
||||
fill = d->progress.buffer_capacity
|
||||
- d->progress.buffer_available;
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
|
||||
|
||||
/* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens
|
||||
Copyright (c) 2006 - 2014 Thomas Schmitt <scdbackup@gmx.net>
|
||||
Copyright (c) 2006 - 2024 Thomas Schmitt <scdbackup@gmx.net>
|
||||
Provided under GPL version 2 or later.
|
||||
*/
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
|
||||
|
||||
/* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens
|
||||
Copyright (c) 2006 - 2020 Thomas Schmitt <scdbackup@gmx.net>
|
||||
Copyright (c) 2006 - 2024 Thomas Schmitt <scdbackup@gmx.net>
|
||||
Provided under GPL version 2 or later.
|
||||
*/
|
||||
|
||||
@ -394,7 +394,7 @@ struct burn_drive
|
||||
struct burn_disc *disc; /* disc structure */
|
||||
int block_types[4];
|
||||
struct buffer *buffer;
|
||||
struct burn_progress progress;
|
||||
struct burn_progress_v2 progress;
|
||||
|
||||
/* To be used by mmc.c, sbc.c, spc.c for SCSI commands where the struct
|
||||
content surely does not have to persist while another command gets
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
|
||||
|
||||
/* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens
|
||||
Copyright (c) 2006 - 2021 Thomas Schmitt <scdbackup@gmx.net>
|
||||
Copyright (c) 2006 - 2024 Thomas Schmitt <scdbackup@gmx.net>
|
||||
Provided under GPL version 2 or later.
|
||||
*/
|
||||
|
||||
@ -1358,7 +1358,7 @@ int burn_disc_init_write_status(struct burn_write_opts *o,
|
||||
d->progress.buffer_capacity = 0;
|
||||
d->progress.buffer_available = 0;
|
||||
d->progress.buffered_bytes = 0;
|
||||
d->progress.buffer_min_fill = 0xffffffff;
|
||||
d->progress.buffer_min_fill = 0x7fffffffffffffff;
|
||||
|
||||
/* ts A70711 */
|
||||
d->pessimistic_buffer_free = 0;
|
||||
@ -1897,7 +1897,7 @@ int burn_dvd_write_track(struct burn_write_opts *o,
|
||||
struct buffer *out = d->buffer;
|
||||
int sectors;
|
||||
int i, open_ended = 0, ret= 0, is_flushed = 0, track_open = 0;
|
||||
int first_buf_cap = 0, further_cap = 0, buf_cap_step = 1024;
|
||||
off_t first_buf_cap = 0, further_cap = 0, buf_cap_step = 1024;
|
||||
|
||||
/* ts A70213 : eventually expand size of track to max */
|
||||
burn_track_apply_fillup(t, d->media_capacity_remaining, 0);
|
||||
@ -2836,7 +2836,8 @@ int burn_stdio_write_track(struct burn_write_opts *o, struct burn_session *s,
|
||||
struct burn_track *t = s->track[tnum];
|
||||
struct burn_drive *d = o->drive;
|
||||
char *buf = NULL;
|
||||
int i, prev_sync_sector = 0, us_corr = 0, max_corr = 250000;
|
||||
int i, us_corr = 0, max_corr = 250000;
|
||||
off_t prev_sync_sector = 0;
|
||||
struct buffer *out = d->buffer;
|
||||
struct timeval prev_time;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user