/* * WriteOpts.java * * Copyright (c) 2007 Vreixo Formoso * * This library is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * See COPYING file for details. */ package org.pykix.libburnia.libburn; import org.pykix.libburnia.bindings.Proxy; /** * References a set of write parameters. * *

* To get a new WriteOpts object, you have to call * {@link Drive#newWriteOpts()} method. * * @author Vreixo Formoso * @since 0.1 */ public class WriteOpts extends Proxy { /* package protected */ WriteOpts(long ptr) { super(ptr); } /** * Sets the write type for the WriteOpts. * *

* Note: write type {@link WriteType#SAO} is currently not capable of * writing a mix of data and audio tracks. You must use * {@link WriteType#TAO} for such sessions. * * @param writeType * The write type to use. * @param blockType * The block type to use. * @return * true on success, false on failure. */ public boolean setWriteType( WriteType writeType, BlockType blockType ) { int bt = blockType.code; int wt = writeType.ordinal(); return burn_write_opts_set_write_type( pointerOf(this), wt, bt); } /** * As an alternative to {@link #setWriteType(WriteType, BlockType)} * this function tries to find a suitable write type and block type for a * given write job described by this opts and disc. To be used after all * other setups have been made, i.e. immediately before * {@link Drive#write(WriteOpts, Disc)}. * * @param disc * The already composed session and track model. * @param flag * Bitfield for control purposes: * bit0= do not choose type but check the one that is already set * bit1= do not issue error messages via burn_msgs queue * (is automatically set with bit0) * @return * Chosen write type or {@link WriteType#NONE} on failure. */ /* * TODO a C returning field, reasons, is forgeting by this implementation */ public WriteType setAutoWriteType(Disc disc, int flag) { int wt = burn_write_opts_auto_write_type( pointerOf(this), pointerOf(disc), flag); return WriteType.values()[wt]; } /** * Sets the simulate value for the WriteOpts object. * * @param sim * If true, the drive will perform a simulation * instead of a burn * @return * true on success, false on failure. */ public boolean setSimulate(boolean sim) { return burn_write_opts_set_simulate( pointerOf(this), sim ); } /** * Controls buffer underrun prevention. * * @param underrunProof * if true, buffer underrun protection is enabled * @return * true on success, false on failure. */ public boolean setUnderrunProof(boolean underrunProof) { return burn_write_opts_set_underrun_proof( pointerOf(this), underrunProof); } /** * Sets whether to use OPC (Optical Power Calibration) * or not with this WriteOpts object. * * @param opc * if true , OPC will be performed at * start of burn. */ public void setPerformOpc(boolean opc) { burn_write_opts_set_perform_opc( pointerOf(this), opc ); } /** * Sets the multi flag which eventually marks the emerging session as not * being the last one and thus creating a {@link DiscStatus#APPENDABLE} * media. * * @param multi * If true media will be appendable, if * false media will be closed (default) */ public void setMulti(boolean multi) { burn_write_opts_set_multi( pointerOf(this), multi ); } /** * Eventually makes libburn ignore the failure of some conformance checks: * *

* * @param force * if true ignore above checks, otherwise refuse work on * failed check. */ public void setForce(boolean force) { burn_write_opts_set_force( pointerOf(this), force ? 1 : 0 ); } /** * Sets a start address for writing to media and write modes which allow to * choose this address at all (DVD+RW, DVD-RAM, formatted DVD-RW only for * now). The address is given in bytes. If it is not -1 then a write run * will fail if choice of start address is not supported or if the block * alignment of the address is not suitable for media and write mode. * (Alignment to 32 kB blocks is advised with DVD media.) * * @param value * The address in bytes (-1 = start at default address). */ public void setStartByte(long value) { burn_write_opts_set_start_byte( pointerOf(this), value ); } /** * Sets the session format for a disc. * * @param format * The session format to set. */ public void setFormat(SessionFormat format) { burn_write_opts_set_format( pointerOf(this), format.code ); } public void setHasMediaCatalog(boolean hasMediaCatalog) { burn_write_opts_set_has_mediacatalog( pointerOf(this), hasMediaCatalog ); } public void setMediaCatalog(String mediaCatalog) { burn_write_opts_set_mediacatalog( pointerOf(this), mediaCatalog ); } /** * Examines a completed setup for {@link Drive#write(WriteOpts, Disc)} * wether it is permissible with drive and media. * *

* This function is called by {@link Drive#write(WriteOpts, Disc)} but * an application might be interested in this check in advance. * * @param disc * The descrition of the disc to be created * @param silent * true to not issue error messages , false * to report problems * @throws BurnException * on failure, a list of rejection reason statements can be getted * as exception msg. */ public void precheckWrite(Disc disc, boolean silent) throws BurnException { burn_precheck_write(pointerOf(this), pointerOf(disc), silent ? 1 : 0); } /** * Caution: still immature and likely to change. Problems arose with * sequential DVD-RW on one drive. * * Controls wether the whole available space of the media shall be filled * up by the last track of the last session. * * @param fillUpMedia * true to fill up by last track, false to * not fill up */ public void setFillUp(boolean fillUpMedia) { burn_write_opts_set_fillup( pointerOf(this), fillUpMedia); } /** * Supplies toc entries for writing - not normally required for CD * mastering. * * @param entries * Toc entries. */ public void setTocEntries(TocEntry[] entries) { burn_write_opts_set_toc_entries( pointerOf(this), entries.length, entries); } @Override protected void finalize() throws Throwable { super.finalize(); burn_write_opts_free( pointerOf(this) ); } private static native void burn_write_opts_free(long opts); private static native boolean burn_write_opts_set_write_type(long opts, int writeType, int blockType); private static native int burn_write_opts_auto_write_type(long opts, long disc, int flag); private static native boolean burn_write_opts_set_simulate(long opts, boolean sim); private static native boolean burn_write_opts_set_underrun_proof(long opts, boolean underrun_proof); private static native void burn_write_opts_set_perform_opc(long opts, boolean opc); private static native void burn_write_opts_set_multi(long opts, boolean multi); private static native void burn_write_opts_set_force(long opts, int useForce); private static native void burn_write_opts_set_start_byte(long opts, long value); private static native void burn_write_opts_set_format(long opts, int format); private static native void burn_write_opts_set_has_mediacatalog( long opts, boolean has_mediacatalog); private static native void burn_write_opts_set_mediacatalog( long opts, String mediacatalog); private static native void burn_precheck_write(long o, long disc, int silent) throws BurnException; private static native void burn_write_opts_set_fillup(long opts, boolean fill_up_media); //TODO untested and enought complex to have some bugs!! private static native void burn_write_opts_set_toc_entries(long opts, int count, TocEntry[] entries); }