⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 org_tritonus_lowlevel_alsa_alsamixer.c

📁 linux下建立JAVA虚拟机的源码KAFFE
💻 C
字号:
/* *	org_tritonus_lowlevel_alsa_AlsaMixer.c *//* *  Copyright (c) 1999 - 2001 by Matthias Pfisterer <Matthias.Pfisterer@gmx.de> * *   This program is free software; you can redistribute it and/or modify *   it under the terms of the GNU Library General Public License as published *   by the Free Software Foundation; either version 2 of the License, or *   (at your option) any later version. * *   This program is distributed in the hope that it will be useful, *   but WITHOUT ANY WARRANTY; without even the implied warranty of *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *   GNU Library General Public License for more details. * *   You should have received a copy of the GNU Library General Public *   License along with this program; if not, write to the Free Software *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */#include	"common.h"#include	"org_tritonus_lowlevel_alsa_AlsaMixer.h"#define checkExceptionSpecial()	if ((*env)->ExceptionOccurred(env)) { (*env)->ExceptionClear(env); return -1; }HandleFieldHandler(snd_mixer_t*)snd_mixer_t*getMixerNativeHandle(JNIEnv *env, jobject obj){	return getHandle(env, obj);}/* * Class:     org_tritonus_lowlevel_alsa_AlsaMixer * Method:    open * Signature: (I)I */JNIEXPORT jint JNICALLJava_org_tritonus_lowlevel_alsa_AlsaMixer_open(JNIEnv *env, jobject obj, jint nMode){	snd_mixer_t*	handle;	int		nReturn;	if (debug_flag) { (void) fprintf(debug_file, "Java_org_tritonus_lowlevel_alsa_AlsaMixer_open(): begin\n"); }	nReturn = snd_mixer_open(&handle, nMode);	setHandle(env, obj, handle);	if (debug_flag) { (void) fprintf(debug_file, "Java_org_tritonus_lowlevel_alsa_AlsaMixer_open(): end\n"); }	return nReturn;}/* * Class:     org_tritonus_lowlevel_alsa_AlsaMixer * Method:    attach * Signature: (Ljava/lang/String;)I */JNIEXPORT jint JNICALLJava_org_tritonus_lowlevel_alsa_AlsaMixer_attach(JNIEnv *env, jobject obj, jstring strCardName){	snd_mixer_t*	handle;	int		nReturn;	const char*	cardName;	if (debug_flag) { (void) fprintf(debug_file, "Java_org_tritonus_lowlevel_alsa_AlsaMixer_attach(): begin\n"); }	handle = getHandle(env, obj);	cardName = (*env)->GetStringUTFChars(env, strCardName, NULL);	if (cardName == NULL)	{		throwRuntimeException(env, "cannot retrieve chars from card name string");		return -1;	}	nReturn = snd_mixer_attach(handle, cardName);	(*env)->ReleaseStringUTFChars(env, strCardName, cardName);	if (debug_flag) { (void) fprintf(debug_file, "Java_org_tritonus_lowlevel_alsa_AlsaMixer_attach(): end\n"); }	return nReturn;}/* * Class:     org_tritonus_lowlevel_alsa_AlsaMixer * Method:    register * Signature: ()I */JNIEXPORT jint JNICALLJava_org_tritonus_lowlevel_alsa_AlsaMixer_register(JNIEnv *env, jobject obj){	snd_mixer_t*	handle;	int		nReturn;	if (debug_flag) { (void) fprintf(debug_file, "Java_org_tritonus_lowlevel_alsa_AlsaMixer_register(): begin\n"); }	handle = getHandle(env, obj);	nReturn = snd_mixer_selem_register(handle, NULL, NULL);	if (debug_flag) { (void) fprintf(debug_file, "Java_org_tritonus_lowlevel_alsa_AlsaMixer_register(): end\n"); }	return nReturn;}/* * Class:     org_tritonus_lowlevel_alsa_AlsaMixer * Method:    load * Signature: ()I */JNIEXPORT jint JNICALLJava_org_tritonus_lowlevel_alsa_AlsaMixer_load(JNIEnv *env, jobject obj){	snd_mixer_t*	handle;	int		nReturn;	if (debug_flag) { (void) fprintf(debug_file, "Java_org_tritonus_lowlevel_alsa_AlsaMixer_load(): begin\n"); }	handle = getHandle(env, obj);	nReturn = snd_mixer_load(handle);	if (debug_flag) { (void) fprintf(debug_file, "Java_org_tritonus_lowlevel_alsa_AlsaMixer_load(): end\n"); }	return nReturn;}/* * Class:     org_tritonus_lowlevel_alsa_AlsaMixer * Method:    close * Signature: ()I */JNIEXPORT jint JNICALLJava_org_tritonus_lowlevel_alsa_AlsaMixer_close(JNIEnv *env, jobject obj){	snd_mixer_t*	handle;	int		nReturn;	if (debug_flag) { (void) fprintf(debug_file, "Java_org_tritonus_lowlevel_alsa_AlsaMixer_close(): begin\n"); }	handle = getHandle(env, obj);	nReturn = snd_mixer_close(handle);	if (debug_flag) { (void) fprintf(debug_file, "Java_org_tritonus_lowlevel_alsa_AlsaMixer_close(): end\n"); }	return nReturn;}/* * Class:     org_tritonus_lowlevel_alsa_AlsaMixer * Method:    findElement * Signature: (Ljava/lang/String;I)Lorg/tritonus/lowlevel/alsa/AlsaMixerElement; */JNIEXPORT jobject JNICALLJava_org_tritonus_lowlevel_alsa_AlsaMixer_findElement(JNIEnv *env, jobject obj, jstring strName, jint nIndex){	jobject			element;	snd_mixer_t*		handle;	snd_mixer_elem_t*	elem;	snd_mixer_selem_id_t*	sid;	const char*		name;	jclass			element_class;	jmethodID		constructorID;	jfieldID		handleFieldID;	if (debug_flag)	{		(void) fprintf(debug_file, "Java_org_tritonus_lowlevel_alsa_AlsaMixer_findElement(): begin\n");	}	handle = getHandle(env, obj);	snd_mixer_selem_id_alloca(&sid);	snd_mixer_selem_id_set_index(sid, nIndex);	name = (*env)->GetStringUTFChars(env, strName, NULL);	if (name == NULL)	{		throwRuntimeException(env, "cannot retrieve chars from mixer name string");		return NULL;	}	snd_mixer_selem_id_set_name(sid, name);	(*env)->ReleaseStringUTFChars(env, strName, name);	elem = snd_mixer_find_selem(handle, sid);	if (elem == NULL)	{		return NULL;	}	element_class = (*env)->FindClass(env, "org/tritonus/lowlevel/alsa/AlsaMixerElement");	if (element_class == NULL)	{		throwRuntimeException(env, "cannot get class object for AlsaMixerElement");	}	constructorID = (*env)->GetMethodID(env, element_class, "<init>", "(Lorg/tritonus/lowlevel/alsa/AlsaMixer;ILjava/lang/String;)V");	if (constructorID == NULL)	{		throwRuntimeException(env, "cannot get method ID for constructor");	}	element = (*env)->NewObject(env, element_class, constructorID, NULL, 0, NULL);	if (element == NULL)	{		throwRuntimeException(env, "object creation failed");	}	// TODO: set the handle)	handleFieldID = (*env)->GetFieldID(env, element_class, "m_lNativeHandle", "J");	if (handleFieldID == NULL)	{		throwRuntimeException(env, "cannot get field ID for m_lNativeHandle");	}	(*env)->SetLongField(env, element, handleFieldID, (jlong) (long) elem);	if (debug_flag) { (void) fprintf(debug_file, "Java_org_tritonus_lowlevel_alsa_AlsaMixer_findElement(): end\n"); }	return element;}/* * Class:     org_tritonus_lowlevel_alsa_AlsaMixer * Method:    readControlList * Signature: ([I[Ljava/lang/String;)I */JNIEXPORT jint JNICALLJava_org_tritonus_lowlevel_alsa_AlsaMixer_readControlList(JNIEnv *env, jobject obj, jintArray anIndices, jobjectArray astrNames){	snd_mixer_t*		handle;	int			nReturn;	int			nIndex;	snd_mixer_elem_t*	element;	jint*			indices = NULL;	if (debug_flag) { (void) fprintf(debug_file, "Java_org_tritonus_lowlevel_alsa_AlsaMixer_readControlList(): begin\n"); }	handle = getHandle(env, obj);	if (debug_flag) { (void) fprintf(debug_file, "Java_org_tritonus_lowlevel_alsa_AlsaMixer_readControlList(): handle: %p\n", handle); }	indices = (*env)->GetIntArrayElements(env, anIndices, NULL);	if (indices == NULL)	{		throwRuntimeException(env, "GetIntArrayElements() failed");		return -999;	}	nIndex = 0;	element = snd_mixer_first_elem(handle);	if (debug_flag) { (void) fprintf(debug_file, "Java_org_tritonus_lowlevel_alsa_AlsaMixer_readControlList(): first element: %p\n", element); }	// printf("before loop");	while (element != NULL)	{		// TODO: should not throw exception, but return -1 (and clean the array)		// printf("1");		checkArrayLength(env, anIndices, nIndex + 1);		// printf("2");		checkExceptionSpecial();		// printf("3");		checkArrayLength(env, astrNames, nIndex + 1);		// printf("4");		checkExceptionSpecial();		// printf("5");		indices[nIndex] = snd_mixer_selem_get_index(element);		// printf("6");		setStringArrayElement(env, astrNames, nIndex,				      snd_mixer_selem_get_name(element));		// printf("7");		nIndex++;		// printf("8");		element = snd_mixer_elem_next(element);		// printf("9\n");		if (debug_flag) { (void) fprintf(debug_file, "Java_org_tritonus_lowlevel_alsa_AlsaMixer_readControlList(): next element: %p\n", element); }	}	// printf("after loop\n");	nReturn = nIndex;	(*env)->ReleaseIntArrayElements(env, anIndices, indices, 0);	if (debug_flag) { (void) fprintf(debug_file, "Java_org_tritonus_lowlevel_alsa_AlsaMixer_readControlList(): end\n"); }	return nReturn;}/* * Class:     org_tritonus_lowlevel_alsa_AlsaMixer * Method:    setTrace * Signature: (Z)V */JNIEXPORT void JNICALLJava_org_tritonus_lowlevel_alsa_AlsaMixer_setTrace(JNIEnv* env UNUSED, jclass cls UNUSED, jboolean bTrace){	debug_flag = bTrace;	debug_file = stderr;}/*** org_tritonus_lowlevel_alsa_AlsaMixer.c ***/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -