Configure options --enable-cdrskin-fifo-odirect, --enable-dvd-obs-64k

This commit is contained in:
Thomas Schmitt 2009-11-16 16:53:07 +00:00
parent 25489521bb
commit b28165f10b
8 changed files with 79 additions and 26 deletions

View File

@ -12,6 +12,7 @@ lib_LTLIBRARIES = libburn/libburn.la
# Build libraries
libburn_libburn_la_LDFLAGS = \
-version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE)
libburn_libburn_la_CFLAGS = $(LIBBURN_DVD_OBS_64K)
libburn_libburn_la_LIBADD = $(LIBBURN_ARCH_LIBS) $(THREAD_LIBS)
libburn_libburn_la_SOURCES = \
libburn/async.c \
@ -112,7 +113,8 @@ test_structest_SOURCES = test/structest.c
## cdrskin construction site - ts A60816 - A91012
cdrskin_cdrskin_CPPFLAGS = -Ilibburn
cdrskin_cdrskin_CFLAGS = -DCdrskin_libburn_0_7_3
cdrskin_cdrskin_CFLAGS = -DCdrskin_libburn_0_7_3 \
$(CDRSKIN_O_DIRECT_DEF) $(CDRSKIN_DVD_OBS_64K)
# cdrskin_cdrskin_LDADD = $(libburn_libburn_la_OBJECTS) $(LIBBURN_EXTRALIBS)
# ts A80123, change proposed by Simon Huggins to cause dynamic libburn linking

View File

@ -124,7 +124,7 @@ struct CdrfifO {
struct burn_source object.
@param chunk_size Size of buffer block for a single transaction (0=default)
@param buffer_size Size of fifo buffer
@param flag Unused yet
@param flag bit0= Debugging verbosity
@return 1 on success, <=0 on failure
*/
int Cdrfifo_new(struct CdrfifO **ff, int source_fd, int dest_fd,
@ -180,6 +180,8 @@ int Cdrfifo_new(struct CdrfifO **ff, int source_fd, int dest_fd,
o->chain_idx= 0;
#ifdef Cdrskin_read_o_direcT
if(flag & 1)
fprintf(stderr,"cdrfifo: DEBUG : allocating fifo buffer via mmap()\n");
o->buffer= mmap(NULL, (size_t) buffer_size, PROT_READ | PROT_WRITE,
MAP_SHARED | MAP_ANONYMOUS, -1, (off_t) 0);
if(o->buffer == MAP_FAILED)
@ -188,7 +190,7 @@ int Cdrfifo_new(struct CdrfifO **ff, int source_fd, int dest_fd,
o->buffer= TSOB_FELD(char,buffer_size);
if(o->buffer==NULL)
goto failed;
#endif /* Cdrskin_read_o_direcT */
#endif /* ! Cdrskin_read_o_direcT */
return(1);
failed:;

View File

@ -33,7 +33,7 @@ struct CdrfifO;
struct burn_source object.
@param chunk_size Size of buffer block for a single transaction (0=default)
@param buffer_size Size of fifo buffer
@param flag unused yet
@param flag bit0= Debugging verbosity
@return 1 on success, <=0 on failure
*/
int Cdrfifo_new(struct CdrfifO **ff, int source_fd, int dest_fd,

View File

@ -2,7 +2,7 @@
.\" First parameter, NAME, should be all caps
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
.\" other parameters are allowed: see man(7), man(1)
.TH CDRSKIN 1 "Nov 15, 2009"
.TH CDRSKIN 1 "Nov 16, 2009"
.\" Please adjust this date whenever revising the manpage.
.\"
.\" Some roff macros, for reference:
@ -902,9 +902,10 @@ overwriteable DVD-RW it is 32k.
.BI dvd_obs= default|32k|64k
Linux specific:
Set the number of bytes to be transmitted with each write operation to DVD
or BD media. A number of 64 KB may improve throughput with bus systems which
show latency problems. The default depends on media type and option
stream_recording= .
or BD media. Tracks get padded up to the next multiple of this write
size. A number of 64 KB may improve throughput with bus systems which
show latency problems. The default depends on media type, option
stream_recording=, and on compile time options.
.TP
.BI fallback_program= command
Set a command name to be executed if cdrskin encounters a known cdrecord

View File

@ -1319,6 +1319,7 @@ int Cdrtrack_seek_isosize(struct CdrtracK *track, int fd, int flag)
bit0=debugging verbosity
bit1=open as source for direct write:
no audio extract, no minimum track size
bit2=permission to use O_DIRECT (if enabled at compile time)
@return <=0 error, 1 success
*/
int Cdrtrack_open_source_path(struct CdrtracK *track, int *fd, int flag)
@ -1408,12 +1409,18 @@ int Cdrtrack_open_source_path(struct CdrtracK *track, int *fd, int flag)
return(-1);
if(is_wav==-3)
return(0);
if(is_wav==0)
if(is_wav==0) {
#ifdef Cdrskin_read_o_direcT
*fd= open64(track->source_path, O_RDONLY | O_DIRECT);
#else
*fd= open(track->source_path, O_RDONLY);
if(flag & 4) {
*fd= open64(track->source_path, O_RDONLY | O_DIRECT);
if(flag & 1)
fprintf(stderr,"cdrskin: DEBUG : opened track inlet O_DIRECT\n");
} else
#endif
{
*fd= open(track->source_path, O_RDONLY);
}
}
if(*fd==-1) {
fprintf(stderr,"cdrskin: failed to open source address '%s'\n",
track->source_path);
@ -1499,7 +1506,8 @@ int Cdrtrack_attach_fifo(struct CdrtracK *track, int *outlet_fd,
*outlet_fd= -1;
if(track->fifo_size<=0)
return(2);
ret= Cdrtrack_open_source_path(track,&source_fd,flag&1);
ret= Cdrtrack_open_source_path(track,&source_fd,
(flag&1) | (4 * (track->fifo_size >= 256 * 1024)));
if(ret<=0)
return(ret);
if(pipe(pipe_fds)==-1)
@ -1516,7 +1524,7 @@ int Cdrtrack_attach_fifo(struct CdrtracK *track, int *outlet_fd,
/* >>> ??? obtain track sector size and use instead of 2048 ? */
ret= Cdrfifo_new(&ff,source_fd,pipe_fds[1],2048,track->fifo_size,0);
ret= Cdrfifo_new(&ff,source_fd,pipe_fds[1],2048,track->fifo_size, flag & 1);
if(ret<=0)
return(ret);
if(previous_fifo!=NULL)
@ -1591,6 +1599,7 @@ int Cdrtrack_add_to_session(struct CdrtracK *track, int trackno,
/*
bit0= debugging verbosity
bit1= apply padding hack (<<< should be unused for now)
bit2= permission to use O_DIRECT (if enabled at compile time)
*/
{
struct burn_track *tr;
@ -1606,7 +1615,7 @@ int Cdrtrack_add_to_session(struct CdrtracK *track, int trackno,
/* Note: track->track_type may get set in here */
if(track->source_fd==-1) {
ret= Cdrtrack_open_source_path(track,&source_fd,(flag&1));
ret= Cdrtrack_open_source_path(track, &source_fd, flag & (4 | 1));
if(ret<=0)
goto ex;
}
@ -5995,8 +6004,10 @@ thank_you_for_patience:;
if(skin->is_writing)
fprintf(stderr,"\n");
pending[0]= 0;
/*
if(bytes_to_write > 0 && skin->verbosity >= Cdrskin_verbose_debuG)
sprintf(pending, " pnd %.f", bytes_to_write - written_total_bytes);
*/
fprintf(stderr,
"\rcdrskin: thank you for being patient for %.f seconds%21.21s",
elapsed_total_time, pending);
@ -6602,7 +6613,8 @@ int Cdrskin_direct_write(struct CdrskiN *skin, int flag)
&source_path,&source_fd,&is_from_stdin,0);
if(source_fd==-1) {
ret= Cdrtrack_open_source_path(skin->tracklist[0],&source_fd,
2|(skin->verbosity>=Cdrskin_verbose_debuG));
2 | (skin->verbosity >= Cdrskin_verbose_debuG) |
(4 * (skin->fifo_size >= 256 * 1024)));
if(ret<=0)
goto ex;
}
@ -6836,6 +6848,8 @@ burn_failed:;
hflag= (skin->verbosity>=Cdrskin_verbose_debuG);
if(i==skin->track_counter-1)
Cdrtrack_ensure_padding(skin->tracklist[i],hflag&1);
if(skin->fifo_size >= 256 * 1024)
hflag|= 4;
ret= Cdrtrack_add_to_session(skin->tracklist[i],i,session,hflag);
if(ret<=0) {
fprintf(stderr,"cdrskin: FATAL : Cannot add track %d to session.\n",i+1);
@ -6972,9 +6986,14 @@ burn_failed:;
burn_write_opts_set_stream_recording(o, skin->stream_recording_is_set);
#endif
#ifdef Cdrskin_libburn_has_fsync_obS
burn_write_opts_set_dvd_obs(o, skin->dvd_obs);
burn_write_opts_set_stdio_fsync(o, skin->stdio_sync);
#ifdef Cdrskin_dvd_obs_default_64K
if(skin->dvd_obs == 0)
burn_write_opts_set_dvd_obs(o, 64 * 1024);
else
#endif
burn_write_opts_set_dvd_obs(o, skin->dvd_obs);
burn_write_opts_set_stdio_fsync(o, skin->stdio_sync);
#endif /* Cdrskin_libburn_has_fsync_obS */
if(skin->dummy_mode) {
fprintf(stderr,

View File

@ -1 +1 @@
#define Cdrskin_timestamP "2009.11.15.165016"
#define Cdrskin_timestamP "2009.11.16.165420"

View File

@ -111,15 +111,15 @@ AC_SUBST(BURN_VERSION)
dnl Libtool versioning
LT_RELEASE=$BURN_MAJOR_VERSION.$BURN_MINOR_VERSION.$BURN_MICRO_VERSION
dnl
dnl ts A91012
dnl ts A91116
dnl ### This is the release version libburn-0.7.2 = libburn.so.4.37.0
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 = 41 - 37 = 4 . Linux library name = libburn.so.4.37.0
LT_CURRENT=41
LT_AGE=37
dnl SONAME = 42 - 38 = 4 . Linux library name = libburn.so.4.38.0
LT_CURRENT=42
LT_AGE=38
LT_REVISION=0
LT_CURRENT_MINUS_AGE=`expr $LT_CURRENT - $LT_AGE`
@ -198,6 +198,32 @@ else
CFLAGS="$CFLAGS -DDEBUG"
fi
# ts A91116
AC_ARG_ENABLE(cdrskin-fifo-odirect,
[ --enable-cdrskin-fifo-odirect Enable use of O_DIRECT with cdrskin fifo inlet, default=no],
, enable_cdrskin_fifo_odirect=no)
if test x$enable_cdrskin_fifo_odirect = xyes; then
CDRSKIN_O_DIRECT_DEF="-DCdrskin_read_o_direcT"
echo "enabled use of O_DIRECT with cdrskin fifo inlet"
else
CDRSKIN_O_DIRECT_DEF=
echo "disabled use of O_DIRECT with cdrskin fifo inlet"
fi
AC_SUBST(CDRSKIN_O_DIRECT_DEF)
# ts A91116
AC_ARG_ENABLE(dvd-obs-64k,
[ --enable-dvd-obs-64k 64 KB default size for DVD/BD writing, default=no],
, enable_fifo_odirect=no)
if test x$enable_dvd_obs_64k = xyes; then
LIBBURN_DVD_OBS_64K="-DLibburn_dvd_obs_default_64K"
echo "enabled write size default 64 KB on DVD and BD"
else
LIBBURN_DVD_OBS_64K=
echo "disabled write size default 64 KB on DVD and BD"
fi
AC_SUBST(LIBBURN_DVD_OBS_64K)
dnl Determine target directory for libburn-*.pc
dnl Important: Must be performed _after_ TARGET_SHIZZLE

View File

@ -1914,6 +1914,9 @@ int burn_dvd_write_sync(struct burn_write_opts *o,
o->obs_pad = 1; /* fill-up track's last 32k buffer */
}
#ifdef Libburn_dvd_obs_default_64K
o->obs = 64 * 1024;
#endif
/* <<< test only : Does this increase effective speed with USB ?
ts A90801 : 64kB: speed with 16x DVD-R is 12 rather than 8
@ -1932,7 +1935,7 @@ int burn_dvd_write_sync(struct burn_write_opts *o,
libdax_msgs_submit(libdax_messenger, d->global_index,
0x00000002, LIBDAX_MSGS_SEV_DEBUG,
LIBDAX_MSGS_PRIO_ZERO, msg, 0, 0);
o->obs = BUFFER_SIZE;
o->obs = 32 * 1024; /* This size is required to work */
}
sprintf(msg, "dvd/bd Profile= %2.2Xh , obs= %d , obs_pad= %d",