305 lines
8.8 KiB
C
305 lines
8.8 KiB
C
|
/*
|
||
|
* WriteOpts.c
|
||
|
*
|
||
|
* 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.
|
||
|
*/
|
||
|
|
||
|
#include "org_pykix_libburnia_libburn_WriteOpts.h"
|
||
|
#include "BindingsUtil.h"
|
||
|
|
||
|
#include "libburn.h"
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Class: org_pykix_libburnia_libburn_WriteOpts
|
||
|
* Method: burn_write_opts_free
|
||
|
* Signature: (J)V
|
||
|
*/
|
||
|
JNIEXPORT void JNICALL Java_org_pykix_libburnia_libburn_WriteOpts_burn_1write_1opts_1free
|
||
|
(
|
||
|
JNIEnv *env, jclass cls, jlong opts
|
||
|
)
|
||
|
{
|
||
|
burn_write_opts_free( (struct burn_write_opts *) opts);
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* Class: org_pykix_libburnia_libburn_WriteOpts
|
||
|
* Method: burn_write_opts_set_write_type
|
||
|
* Signature: (JII)Z
|
||
|
*/
|
||
|
JNIEXPORT jboolean JNICALL
|
||
|
Java_org_pykix_libburnia_libburn_WriteOpts_burn_1write_1opts_1set_1write_1type
|
||
|
(
|
||
|
JNIEnv *env, jclass cls, jlong opts, jint write_type, jint block_type
|
||
|
)
|
||
|
{
|
||
|
return burn_write_opts_set_write_type( (struct burn_write_opts *) opts,
|
||
|
write_type, block_type);
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* Class: org_pykix_libburnia_libburn_WriteOpts
|
||
|
* Method: burn_write_opts_auto_write_type
|
||
|
* Signature: (JJI)I
|
||
|
*/
|
||
|
JNIEXPORT jint JNICALL
|
||
|
Java_org_pykix_libburnia_libburn_WriteOpts_burn_1write_1opts_1auto_1write_1type
|
||
|
(
|
||
|
JNIEnv *env, jclass cls, jlong opts, jlong disc, jint flag
|
||
|
)
|
||
|
{
|
||
|
char reasons[BURN_REASONS_LEN];
|
||
|
|
||
|
return burn_write_opts_auto_write_type( (struct burn_write_opts *) opts,
|
||
|
(struct burn_disc *) disc, reasons, flag);
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* Class: org_pykix_libburnia_libburn_WriteOpts
|
||
|
* Method: burn_write_opts_set_simulate
|
||
|
* Signature: (JZ)Z
|
||
|
*/
|
||
|
JNIEXPORT jboolean JNICALL
|
||
|
Java_org_pykix_libburnia_libburn_WriteOpts_burn_1write_1opts_1set_1simulate
|
||
|
(
|
||
|
JNIEnv *env, jclass cls, jlong opts, jboolean sim
|
||
|
)
|
||
|
{
|
||
|
return burn_write_opts_set_simulate( (struct burn_write_opts *) opts, sim);
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* Class: org_pykix_libburnia_libburn_WriteOpts
|
||
|
* Method: burn_write_opts_set_underrun_proof
|
||
|
* Signature: (JZ)Z
|
||
|
*/
|
||
|
JNIEXPORT jboolean JNICALL
|
||
|
Java_org_pykix_libburnia_libburn_WriteOpts_burn_1write_1opts_1set_1underrun_1proof
|
||
|
(
|
||
|
JNIEnv *env, jclass cls, jlong opts, jboolean underrun_proof
|
||
|
)
|
||
|
{
|
||
|
return burn_write_opts_set_underrun_proof( (struct burn_write_opts *) opts, underrun_proof);
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* Class: org_pykix_libburnia_libburn_WriteOpts
|
||
|
* Method: burn_write_opts_set_perform_opc
|
||
|
* Signature: (JZ)V
|
||
|
*/
|
||
|
JNIEXPORT void JNICALL
|
||
|
Java_org_pykix_libburnia_libburn_WriteOpts_burn_1write_1opts_1set_1perform_1opc
|
||
|
(
|
||
|
JNIEnv *env, jclass cls, jlong opts, jboolean opc
|
||
|
)
|
||
|
{
|
||
|
burn_write_opts_set_perform_opc( (struct burn_write_opts *) opts, opc);
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* Class: org_pykix_libburnia_libburn_WriteOpts
|
||
|
* Method: burn_write_opts_set_multi
|
||
|
* Signature: (JZ)V
|
||
|
*/
|
||
|
JNIEXPORT void JNICALL
|
||
|
Java_org_pykix_libburnia_libburn_WriteOpts_burn_1write_1opts_1set_1multi
|
||
|
(
|
||
|
JNIEnv *env, jclass cls, jlong opts, jboolean multi
|
||
|
)
|
||
|
{
|
||
|
burn_write_opts_set_multi( (struct burn_write_opts *) opts, multi);
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* Class: org_pykix_libburnia_libburn_WriteOpts
|
||
|
* Method: burn_write_opts_set_force
|
||
|
* Signature: (JI)V
|
||
|
*/
|
||
|
JNIEXPORT void JNICALL
|
||
|
Java_org_pykix_libburnia_libburn_WriteOpts_burn_1write_1opts_1set_1force
|
||
|
(
|
||
|
JNIEnv *env, jclass cls, jlong opts, jint use_force
|
||
|
)
|
||
|
{
|
||
|
burn_write_opts_set_force( (struct burn_write_opts *) opts, use_force);
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* Class: org_pykix_libburnia_libburn_WriteOpts
|
||
|
* Method: burn_write_opts_set_start_byte
|
||
|
* Signature: (JJ)V
|
||
|
*/
|
||
|
JNIEXPORT void JNICALL
|
||
|
Java_org_pykix_libburnia_libburn_WriteOpts_burn_1write_1opts_1set_1start_1byte
|
||
|
(
|
||
|
JNIEnv *env, jclass cls, jlong opts, jlong value
|
||
|
)
|
||
|
{
|
||
|
burn_write_opts_set_start_byte( (struct burn_write_opts *) opts, value);
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* Class: org_pykix_libburnia_libburn_WriteOpts
|
||
|
* Method: burn_write_opts_set_format
|
||
|
* Signature: (JI)V
|
||
|
*/
|
||
|
JNIEXPORT void JNICALL
|
||
|
Java_org_pykix_libburnia_libburn_WriteOpts_burn_1write_1opts_1set_1format
|
||
|
(
|
||
|
JNIEnv *env, jclass cls, jlong opts, jint format
|
||
|
)
|
||
|
{
|
||
|
burn_write_opts_set_format( (struct burn_write_opts *) opts, format);
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* Class: org_pykix_libburnia_libburn_WriteOpts
|
||
|
* Method: burn_write_opts_set_has_mediacatalog
|
||
|
* Signature: (JZ)V
|
||
|
*/
|
||
|
JNIEXPORT void JNICALL
|
||
|
Java_org_pykix_libburnia_libburn_WriteOpts_burn_1write_1opts_1set_1has_1mediacatalog
|
||
|
(
|
||
|
JNIEnv *env, jclass cls, jlong opts, jboolean has_mediacatalog
|
||
|
)
|
||
|
{
|
||
|
burn_write_opts_set_has_mediacatalog( (struct burn_write_opts *)opts, has_mediacatalog);
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* Class: org_pykix_libburnia_libburn_WriteOpts
|
||
|
* Method: burn_write_opts_set_mediacatalog
|
||
|
* Signature: (JLjava/lang/String;)V
|
||
|
*/
|
||
|
JNIEXPORT void JNICALL
|
||
|
Java_org_pykix_libburnia_libburn_WriteOpts_burn_1write_1opts_1set_1mediacatalog
|
||
|
(
|
||
|
JNIEnv *env, jclass cls, jlong opts, jstring mediaCatalog
|
||
|
)
|
||
|
{
|
||
|
const char *mediacatalog;
|
||
|
|
||
|
mediacatalog = (*env)->GetStringUTFChars(env, mediaCatalog, NULL);
|
||
|
if ( mediacatalog == NULL ) {
|
||
|
return; /* OutOfMemoryError already thrown */
|
||
|
}
|
||
|
|
||
|
burn_write_opts_set_mediacatalog( (struct burn_write_opts *) opts, (unsigned char*) mediacatalog);
|
||
|
|
||
|
(*env)->ReleaseStringUTFChars(env, mediaCatalog, mediacatalog);
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* Class: org_pykix_libburnia_libburn_WriteOpts
|
||
|
* Method: burn_precheck_write
|
||
|
* Signature: (JJI)V
|
||
|
*/
|
||
|
JNIEXPORT void JNICALL
|
||
|
Java_org_pykix_libburnia_libburn_WriteOpts_burn_1precheck_1write
|
||
|
(
|
||
|
JNIEnv *env, jclass cls, jlong o, jlong disc, jint silent
|
||
|
)
|
||
|
{
|
||
|
char reasons[BURN_REASONS_LEN];
|
||
|
|
||
|
if ( burn_precheck_write( (struct burn_write_opts *) o, (struct burn_disc *) disc,
|
||
|
reasons, silent) != 1 ) {
|
||
|
|
||
|
java_libburn_throw_burn_exception(env, reasons);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* Class: org_pykix_libburnia_libburn_WriteOpts
|
||
|
* Method: burn_write_opts_set_fillup
|
||
|
* Signature: (JZ)V
|
||
|
*/
|
||
|
JNIEXPORT void JNICALL
|
||
|
Java_org_pykix_libburnia_libburn_WriteOpts_burn_1write_1opts_1set_1fillup
|
||
|
(
|
||
|
JNIEnv *env, jclass cls, jlong o, jboolean fill_up
|
||
|
)
|
||
|
{
|
||
|
burn_write_opts_set_fillup( (struct burn_write_opts *) o, fill_up);
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* Class: org_pykix_libburnia_libburn_WriteOpts
|
||
|
* Method: burn_write_opts_set_toc_entries
|
||
|
* Signature: (JI[Lorg/pykix/libburnia/libburn/TocEntry;)V
|
||
|
*/
|
||
|
JNIEXPORT void JNICALL
|
||
|
Java_org_pykix_libburnia_libburn_WriteOpts_burn_1write_1opts_1set_1toc_1entries
|
||
|
(
|
||
|
JNIEnv *env, jclass cls, jlong o, jint count, jobjectArray ents
|
||
|
)
|
||
|
{
|
||
|
struct burn_toc_entry entries[count];
|
||
|
static jclass tocEntryCls = NULL;
|
||
|
static jfieldID sessionid, adrid, controlid, pointid, minid, secid,
|
||
|
frameid, zeroid, pminid, psecid, pframeid, extvid, smsbid, pmsbid,
|
||
|
slbaid, blocksid;
|
||
|
int i;
|
||
|
|
||
|
if ( tocEntryCls == NULL ) {
|
||
|
tocEntryCls = java_libburn_find_class(env, "org/pykix/libburnia/libburn/TocEntry");
|
||
|
if ( tocEntryCls == NULL ) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
/* TODO: check for NULL?? */
|
||
|
sessionid = (*env)->GetFieldID(env, cls, "session", "B");
|
||
|
adrid = (*env)->GetFieldID(env, cls, "adr", "B");
|
||
|
controlid = (*env)->GetFieldID(env, cls, "control", "B");
|
||
|
pointid = (*env)->GetFieldID(env, cls, "point", "B");
|
||
|
minid = (*env)->GetFieldID(env, cls, "min", "B");
|
||
|
secid = (*env)->GetFieldID(env, cls, "sec", "B");
|
||
|
frameid = (*env)->GetFieldID(env, cls, "frame", "B");
|
||
|
zeroid = (*env)->GetFieldID(env, cls, "zero", "B");
|
||
|
pminid = (*env)->GetFieldID(env, cls, "pmin", "B");
|
||
|
psecid = (*env)->GetFieldID(env, cls, "psec", "B");
|
||
|
pframeid = (*env)->GetFieldID(env, cls, "pframe", "B");
|
||
|
extvid = (*env)->GetFieldID(env, cls, "extensionsValid", "B");
|
||
|
smsbid = (*env)->GetFieldID(env, cls, "sessionMsb", "B");
|
||
|
pmsbid = (*env)->GetFieldID(env, cls, "pointMsb", "B");
|
||
|
slbaid = (*env)->GetFieldID(env, cls, "startLba", "I");
|
||
|
blocksid = (*env)->GetFieldID(env, cls, "trackBlocks", "I");
|
||
|
}
|
||
|
|
||
|
for ( i = 0; i < count; ++i ) {
|
||
|
|
||
|
struct burn_toc_entry entry = entries[i];
|
||
|
jobject obj = (*env)->GetObjectArrayElement(env, ents, i);
|
||
|
|
||
|
entry.session = (*env)->GetByteField(env, obj, sessionid);
|
||
|
entry.adr = (*env)->GetByteField(env, obj, adrid);
|
||
|
entry.control = (*env)->GetByteField(env, obj, controlid);
|
||
|
entry.tno = 0; //tno is always 0
|
||
|
entry.point = (*env)->GetByteField(env, obj, pointid);
|
||
|
entry.min = (*env)->GetByteField(env, obj, minid);
|
||
|
entry.sec = (*env)->GetByteField(env, obj, secid);
|
||
|
entry.frame = (*env)->GetByteField(env, obj, frameid);
|
||
|
entry.zero = (*env)->GetByteField(env, obj, zeroid);
|
||
|
entry.pmin = (*env)->GetByteField(env, obj, pminid);
|
||
|
entry.psec = (*env)->GetByteField(env, obj, psecid);
|
||
|
entry.pframe = (*env)->GetByteField(env, obj, pframeid);
|
||
|
entry.extensions_valid = (*env)->GetByteField(env, obj, extvid);
|
||
|
entry.session_msb = (*env)->GetByteField(env, obj, smsbid);
|
||
|
entry.point_msb = (*env)->GetByteField(env, obj, pmsbid);
|
||
|
entry.start_lba = (*env)->GetIntField(env, obj, slbaid);
|
||
|
entry.track_blocks = (*env)->GetIntField(env, obj, blocksid);
|
||
|
}
|
||
|
|
||
|
burn_write_opts_set_toc_entries( (struct burn_write_opts *) o,
|
||
|
count, entries);
|
||
|
|
||
|
}
|
||
|
|