Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion debian/control
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ Build-Depends: debhelper (>= 12),
gettext,
libbz2-dev,
libcam-dev [kfreebsd-any],
libgtk2.0-dev,
libgtk-3-dev,
libglib2.0-dev,
libpng-dev,
pkg-config,
debhelper-compat (= 12)
Expand Down
42 changes: 42 additions & 0 deletions src/dvdisaster.c
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ typedef enum
MODIFIER_IGNORE_ISO_SIZE,
MODIFIER_IGNORE_RS03_HEADER,
MODIFIER_INTERNAL_REREADS,
MODIFIER_MEDIUM_SIZE,
MODIFIER_NO_BDR_DEFECT_MANAGEMENT,
MODIFIER_NO_PROGRESS,
MODIFIER_OLD_DS_MARKER,
Expand Down Expand Up @@ -254,6 +255,7 @@ int main(int argc, char *argv[])
{"jump", 1, 0, 'j'},
{"marked-image", 1, 0, MODE_MARKED_IMAGE },
{"medium-info", 0, 0, MODE_MEDIUM_INFO },
{"medium-size", 1, 0, MODIFIER_MEDIUM_SIZE },
{"merge-images", 1, 0, MODE_MERGE_IMAGES },
{"method", 2, 0, 'm' },
{"no-bdr-defect-management", 0, 0, MODIFIER_NO_BDR_DEFECT_MANAGEMENT },
Expand Down Expand Up @@ -542,6 +544,42 @@ int main(int argc, char *argv[])
}
}
break;
case MODIFIER_MEDIUM_SIZE:
if(optarg)
{ if(!strcasecmp(optarg, "CD"))
Closure->mediumSize = CDR_SIZE;
else if(!strcasecmp(optarg, "DVD"))
Closure->mediumSize = DVD_SL_SIZE;
else if(!strcasecmp(optarg, "DVD9"))
Closure->mediumSize = DVD_DL_SIZE;
else if(!strcasecmp(optarg, "BD"))
Closure->mediumSize = BD_SL_SIZE;
else if(!strcasecmp(optarg, "BD2"))
Closure->mediumSize = BD_DL_SIZE;
else if(!strcasecmp(optarg, "BDXL3"))
Closure->mediumSize = BDXL_TL_SIZE;
else if(!strcasecmp(optarg, "BDXL4"))
Closure->mediumSize = BDXL_QL_SIZE;
else if(!strcasecmp(optarg, "BDNODM"))
Closure->mediumSize = BD_SL_SIZE_NODM;
else if(!strcasecmp(optarg, "BD2NODM"))
Closure->mediumSize = BD_DL_SIZE_NODM;
else if(!strcasecmp(optarg, "BDXL3NODM"))
Closure->mediumSize = BDXL_TL_SIZE_NODM;
else if(!strcasecmp(optarg, "BDXL4NODM"))
Closure->mediumSize = BDXL_QL_SIZE_NODM;
else
{ gint64 val = (gint64)atoll(optarg);
if(val >= GF_FIELDMAX)
Closure->mediumSize = val;
else
Stop(_("Invalid medium size '%s'.\n"
"Valid values: CD, DVD, DVD9, BD, BD2, BDXL3, BDXL4,\n"
"BDNODM, BD2NODM, BDXL3NODM, BDXL4NODM, or a sector count >= %d"),
optarg, GF_FIELDMAX);
}
}
break;
case MODIFIER_NO_BDR_DEFECT_MANAGEMENT:
Closure->noBdrDefectManagement = TRUE;
break;
Expand Down Expand Up @@ -1006,6 +1044,10 @@ int main(int argc, char *argv[])
PrintCLI(_(" --ignore-iso-size - ignore image size from ISO/UDF data (dangerous - see man page!)\n"));
PrintCLI(_(" --internal-rereads n - drive may attempt n rereads before reporting an error\n"));
PrintCLI(_(" --medium-info - print info about medium in drive\n"));
PrintCLI(_(" --medium-size x - set target medium size for RS03 augmented images\n"
" CD, DVD, DVD9, BD, BD2, BDXL3, BDXL4,\n"
" BDNODM, BD2NODM, BDXL3NODM, BDXL4NODM,\n"
" or a raw sector count\n"));
PrintCLI(_(" --no-bdr-defect-management - use bigger RS03 images for BD-R (see man page!)\n"));
PrintCLI(_(" --no-progress - do not print progress information\n"));
PrintCLI(_(" --old-ds-marker - mark missing sectors compatible with dvdisaster <= 0.70\n"));
Expand Down
8 changes: 4 additions & 4 deletions src/dvdisaster.h
Original file line number Diff line number Diff line change
Expand Up @@ -633,10 +633,10 @@ enum

/* Modes for AddSectorToCrcBuffer */

#define CRCBUF_UPDATE_CRC 1<<0
#define CRCBUF_UPDATE_MD5 1<<1
#define CRCBUF_UPDATE_ALL 3
#define CRCBUF_UPDATE_CRC_AFTER_DATA 1<<2
#define CRCBUF_UPDATE_CRC (1<<0)
#define CRCBUF_UPDATE_MD5 (1<<1)
#define CRCBUF_UPDATE_ALL (CRCBUF_UPDATE_CRC | CRCBUF_UPDATE_MD5)
#define CRCBUF_UPDATE_CRC_AFTER_DATA (1<<2)

/* Modes for CtcBufValid */

Expand Down
31 changes: 31 additions & 0 deletions src/rs03-common.c
Original file line number Diff line number Diff line change
Expand Up @@ -376,6 +376,21 @@ gint64 RS03SectorIndex(RS03Layout *lay, gint64 layer, gint64 n)
*** Calculation of the image layout
***/

static const char* medium_name(gint64 capacity)
{ if(capacity == CDR_SIZE) return "CD";
if(capacity == DVD_SL_SIZE) return "DVD";
if(capacity == DVD_DL_SIZE) return "DVD9";
if(capacity == BD_SL_SIZE) return "BD";
if(capacity == BD_DL_SIZE) return "BD2";
if(capacity == BDXL_TL_SIZE) return "BDXL3";
if(capacity == BDXL_QL_SIZE) return "BDXL4";
if(capacity == BD_SL_SIZE_NODM) return "BDNODM";
if(capacity == BD_DL_SIZE_NODM) return "BD2NODM";
if(capacity == BDXL_TL_SIZE_NODM) return "BDXL3NODM";
if(capacity == BDXL_QL_SIZE_NODM) return "BDXL4NODM";
return NULL;
}

static int get_roots(gint64 data_sectors, gint64 medium_capacity)
{ gint64 sectors_per_layer = medium_capacity/GF_FIELDMAX;
int ndata = (data_sectors + 2 +sectors_per_layer - 1) / sectors_per_layer;
Expand Down Expand Up @@ -484,6 +499,9 @@ RS03Layout *CalcRS03Layout(Image *image, int target)
default:
if(!Closure->redundancy || !strcmp(Closure->redundancy, "normal")) n_roots = 32;
else if(!strcmp(Closure->redundancy, "high")) n_roots = 64;
/* Medium size aliases (e.g. -n BD) set Closure->mediumSize but
are not valid redundancy specs — use default redundancy */
else if(Closure->mediumSize) n_roots = 32;
else Stop(_("Invalid redundancy specification '%s'.\n"
"Valid formats: normal, high, <number>%%, <number>r, <number>m"),
Closure->redundancy);
Expand Down Expand Up @@ -569,6 +587,19 @@ RS03Layout *CalcRS03Layout(Image *image, int target)
lay->mediumCapacity = BDXL_QL_SIZE_NODM;
else
lay->mediumCapacity = BDXL_QL_SIZE;

/* Inform user about auto-detected medium and how to override */
{ const char *name = medium_name(lay->mediumCapacity);
if(name)
Verbose("Auto-selected medium: %s (%" PRId64 " sectors).\n"
" Use --medium-size to override "
"(e.g., --medium-size BD for Blu-ray 25GB).\n",
name, lay->mediumCapacity);
else
Verbose("Auto-selected medium: %" PRId64 " sectors.\n"
" Use --medium-size to override.\n",
lay->mediumCapacity);
}
}
}

Expand Down