/* * Class: org_tritonus_lowlevel_alsa_AlsaMixerElement * Method: getCaptureVolumeRange * Signature: ([I)V */ JNIEXPORT void JNICALL Java_org_tritonus_lowlevel_alsa_AlsaMixerElement_getCaptureVolumeRange (JNIEnv* env, jobject obj, jintArray anValues) { snd_mixer_elem_t* handle; jint values[2]; if (debug_flag) { (void) fprintf(debug_file, "Java_org_tritonus_lowlevel_alsa_AlsaMixerElement_getCaptureVolumeRange(): begin\n"); } handle = getHandle(env, obj); snd_mixer_selem_get_capture_volume_range(handle, (long*) values, (long*) values + 1); checkArrayLength(env, anValues, 2); (*env)->SetIntArrayRegion(env, anValues, 0, 2, values); if (debug_flag) { (void) fprintf(debug_file, "Java_org_tritonus_lowlevel_alsa_AlsaMixerElement_getCaptureVolumeRange(): end\n"); } }
/* * Class: org_tritonus_lowlevel_cdda_cdparanoia_Cdparanoia * Method: readNextFrame * Signature: (I[B)I */ JNIEXPORT jint JNICALL Java_org_tritonus_lowlevel_cdda_cdparanoia_Cdparanoia_readNextFrame (JNIEnv *env, jobject obj, jint nCount, jbyteArray abData) { handle_t* handle; cdrom_drive* cdrom; cdrom_paranoia* paranoia; int16_t* psBuffer; jbyte* pbData; if (debug_flag) { fprintf(debug_file, "Java_org_tritonus_lowlevel_cdda_cdparanoia_Cdparanoia_readNextFrame(): begin\n"); } handle = getHandle(env, obj); cdrom = handle->drive; paranoia = handle->paranoia; checkArrayLength(env, abData, CD_FRAMESIZE_RAW * nCount); pbData = (*env)->GetByteArrayElements(env, abData, NULL); if (pbData == NULL) { throwRuntimeException(env, "GetByteArrayElements failed"); } // TODO: verify that NULL is allowed for callback; common values for maxretries // TODO: repeat for multiple sectors psBuffer = paranoia_read_limited(paranoia, NULL, MAX_RETRIES); if (psBuffer == NULL) { throwRuntimeException(env, "cdparanoia_Cdparanoia: read failed"); } #if __BYTE_ORDER == __LITTLE_ENDIAN (void) memcpy(pbData, psBuffer, CD_FRAMESIZE_RAW); #else swab(psBuffer, pbData, CD_FRAMESIZE_RAW); #endif (*env)->ReleaseByteArrayElements(env, abData, pbData, 0); if (debug_flag) { fprintf(debug_file, "Java_org_tritonus_lowlevel_cdda_cdparanoia_Cdparanoia_readNextFrame(): end\n"); } return 0; }
/* * Class: org_tritonus_lowlevel_cdda_cdparanoia_Cdparanoia * Method: readTOC * Signature: ([I[I[I[I[Z[Z[Z[I)I */ JNIEXPORT jint JNICALL Java_org_tritonus_lowlevel_cdda_cdparanoia_Cdparanoia_readTOC (JNIEnv* env, jobject obj, jintArray anValues, jintArray anStartFrame, jintArray anLength, jintArray anType, jbooleanArray abAudio, jbooleanArray abCopy, jbooleanArray abPre, jintArray anChannels) { handle_t* handle; cdrom_drive* cdrom; int nFirstTrack; int nLastTrack; jint* pnValues; jint* pnStartFrame; jint* pnLength; jint* pnType; jboolean* pbAudio; jboolean* pbCopy; jboolean* pbPre; jint* pnChannels; int nTrack; if (debug_flag) { fprintf(debug_file, "Java_org_tritonus_lowlevel_cdda_cdparanoia_Cdparanoia_readTOC(): begin\n"); } handle = getHandle(env, obj); cdrom = handle->drive; checkArrayLength(env, anValues, 2); pnValues = (*env)->GetIntArrayElements(env, anValues, NULL); if (pnValues == NULL) { throwRuntimeException(env, "GetIntArrayElements failed"); } // TODO: check if first track is guaranteed to be 1 pnValues[0] = 1; pnValues[1] = cdda_tracks(cdrom); nFirstTrack = 1; nLastTrack = cdda_tracks(cdrom); (*env)->ReleaseIntArrayElements(env, anValues, pnValues, 0); checkArrayLength(env, anStartFrame, 100); pnStartFrame = (*env)->GetIntArrayElements(env, anStartFrame, NULL); if (pnStartFrame == NULL) { throwRuntimeException(env, "GetIntArrayElements failed"); } checkArrayLength(env, anLength, 100); pnLength = (*env)->GetIntArrayElements(env, anLength, NULL); if (pnLength == NULL) { throwRuntimeException(env, "GetIntArrayElements failed"); } checkArrayLength(env, anType, 100); pnType = (*env)->GetIntArrayElements(env, anType, NULL); if (pnType == NULL) { throwRuntimeException(env, "GetIntArrayElements failed"); } checkArrayLength(env, abAudio, 100); pbAudio = (*env)->GetBooleanArrayElements(env, abAudio, NULL); if (pbAudio == NULL) { throwRuntimeException(env, "GetBooleanArrayElements failed"); } checkArrayLength(env, abCopy, 100); pbCopy = (*env)->GetBooleanArrayElements(env, abCopy, NULL); if (pbCopy == NULL) { throwRuntimeException(env, "GetBooleanArrayElements failed"); } checkArrayLength(env, abPre, 100); pbPre = (*env)->GetBooleanArrayElements(env, abPre, NULL); if (pbPre == NULL) { throwRuntimeException(env, "GetBooleanArrayElements failed"); } checkArrayLength(env, anChannels, 100); pnChannels = (*env)->GetIntArrayElements(env, anChannels, NULL); if (pnChannels == NULL) { throwRuntimeException(env, "GetIntArrayElements failed"); } for (nTrack = nFirstTrack; nTrack <= nLastTrack; nTrack++) { pnStartFrame[nTrack - nFirstTrack] = cdda_track_firstsector(cdrom, nTrack); pnLength[nTrack - nFirstTrack] = cdda_track_lastsector(cdrom, nTrack) - cdda_track_firstsector(cdrom, nTrack) + 1; pnType[nTrack - nFirstTrack] = 0; // TODO: toc_entry.cdte_ctrl & CDROM_DATA_TRACK; pbAudio[nTrack - nFirstTrack] = cdda_track_audiop(cdrom, nTrack); pbCopy[nTrack - nFirstTrack] = cdda_track_copyp(cdrom, nTrack); pbPre[nTrack - nFirstTrack] = cdda_track_preemp(cdrom, nTrack); pnChannels[nTrack - nFirstTrack] = cdda_track_channels(cdrom, nTrack); if (debug_flag) { fprintf(debug_file, "Java_org_tritonus_lowlevel_cdda_cdparanoia_Cdparanoia_readTOC(): %d: %d %ld %ld\n", nTrack - nFirstTrack, nTrack, (long) pnStartFrame[nTrack - nFirstTrack], (long) pnLength[nTrack - nFirstTrack]); } } (*env)->ReleaseIntArrayElements(env, anStartFrame, pnStartFrame, 0); (*env)->ReleaseIntArrayElements(env, anLength, pnLength, 0); (*env)->ReleaseIntArrayElements(env, anType, pnType, 0); (*env)->ReleaseBooleanArrayElements(env, abAudio, pbAudio, 0); (*env)->ReleaseBooleanArrayElements(env, abCopy, pbCopy, 0); (*env)->ReleaseBooleanArrayElements(env, abPre, pbPre, 0); (*env)->ReleaseIntArrayElements(env, anChannels, pnChannels, 0); if (debug_flag) { fprintf(debug_file, "Java_org_tritonus_lowlevel_cdda_cdparanoia_Cdparanoia_readTOC(): end\n"); } return 0; }