extras-legacy/java/trunk/src/jni/libburn/WriteOpts.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);
}