From 18a8d5069a022a1bd6c60c46cc8af761588040cd Mon Sep 17 00:00:00 2001 From: Lyubomir Marinov Date: Thu, 5 Jul 2012 16:12:59 +0000 Subject: [PATCH] Adds examples to libjitsi. Fixes a failure to detect the video capture devices on Windows. --- lib/installer-exclude/libjitsi.jar | Bin 938355 -> 945225 bytes ...communicator_impl_neomedia_pulseaudio_PA.c | 1150 ----------------- ...communicator_impl_neomedia_pulseaudio_PA.h | 565 -------- src/native/linux/video4linux2/Makefile | 16 - ...media_protocol_video4linux2_Video4Linux2.c | 369 ------ ...media_protocol_video4linux2_Video4Linux2.h | 364 ------ 6 files changed, 2464 deletions(-) delete mode 100644 src/native/linux/pulseaudio/net_java_sip_communicator_impl_neomedia_pulseaudio_PA.c delete mode 100644 src/native/linux/pulseaudio/net_java_sip_communicator_impl_neomedia_pulseaudio_PA.h delete mode 100644 src/native/linux/video4linux2/Makefile delete mode 100644 src/native/linux/video4linux2/net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2.c delete mode 100644 src/native/linux/video4linux2/net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2.h diff --git a/lib/installer-exclude/libjitsi.jar b/lib/installer-exclude/libjitsi.jar index 41e092932b05a8632abfce964f6e8fba152e01fa..d8ed427fb87f9c312969c8c1d9fd74103e49b689 100644 GIT binary patch delta 68565 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 delta 61526 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 H(#8HC{E0FJ diff --git a/src/native/linux/pulseaudio/net_java_sip_communicator_impl_neomedia_pulseaudio_PA.c b/src/native/linux/pulseaudio/net_java_sip_communicator_impl_neomedia_pulseaudio_PA.c deleted file mode 100644 index 186210187..000000000 --- a/src/native/linux/pulseaudio/net_java_sip_communicator_impl_neomedia_pulseaudio_PA.c +++ /dev/null @@ -1,1150 +0,0 @@ -/* - * Jitsi, the OpenSource Java VoIP and Instant Messaging client. - * - * Distributable under LGPL license. - * See terms of license at gnu.org. - */ - -#define _GNU_SOURCE - -#include "net_java_sip_communicator_impl_neomedia_pulseaudio_PA.h" - -#include -#include -#include - -typedef pa_operation * (*pa_context_set_source_output_volume_t)(pa_context *c, uint32_t idx, const pa_cvolume *volume, pa_context_success_cb_t cb, void *userdata); - -static void PulseAudio_contextStateCallback(pa_context *c, void *userdata); -#if (PA_MAJOR >= 1) -static jlongArray PulseAudio_getFormatInfos(JNIEnv *env, jclass clazz, jsize length, pa_format_info **formats); -#endif /* #if (PA_MAJOR >= 1) */ -static void PulseAudio_infoCallback(pa_context *c, jlong i, int eol, void *userdata, jmethodID methodID); -static void PulseAudio_sinkInfoCallback(pa_context *c, const pa_sink_info *i, int eol, void *userdata); -static void PulseAudio_sourceInfoCallback(pa_context *c, const pa_source_info *i, int eol, void *userdata); -static void PulseAudio_stateCallback(void *userdata); -static void PulseAudio_streamRequestCallback(pa_stream *s, size_t nbytes, void *userdata); -static void PulseAudio_streamStateCallback(pa_stream *s, void *userdata); - -static pa_context_set_source_output_volume_t PulseAudio_contextSetSourceOutputVolume = NULL; -static jclass PulseAudio_runnableClass = NULL; -static jmethodID PulseAudio_runnableMethodID = 0; -static jclass PulseAudio_sinkInfoCbClass = NULL; -static jmethodID PulseAudio_sinkInfoCbMethodID = 0; -static jclass PulseAudio_sourceInfoCbClass = NULL; -static jmethodID PulseAudio_sourceInfoCbMethodID = 0; -static jclass PulseAudio_streamRequestCbClass = NULL; -static jmethodID PulseAudio_streamRequestCbMethodID = 0; -static JavaVM *PulseAudio_vm = NULL; - -JNIEXPORT void JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_buffer_1attr_1free - (JNIEnv *env, jclass clazz, jlong attr) -{ - pa_xfree((void *) (intptr_t) attr); -} - -JNIEXPORT jlong JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_buffer_1attr_1new - (JNIEnv *env, jclass clazz, jint maxlength, jint tlength, jint prebuf, jint minreq, jint fragsize) -{ - pa_buffer_attr *attr = pa_xmalloc(sizeof(pa_buffer_attr)); - - if (attr) - { - attr->maxlength = (uint32_t) maxlength; - attr->tlength = (uint32_t) tlength; - attr->prebuf = (uint32_t) prebuf; - attr->minreq = (uint32_t) minreq; - attr->fragsize = (uint32_t) fragsize; - } - return (intptr_t) attr; -} - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_context_1connect - (JNIEnv *env, jclass clazz, jlong c, jstring server, jint flags, jlong api) -{ - const char *serverChars - = server - ? (*env)->GetStringUTFChars(env, server, NULL) - : NULL; - int ret; - - if ((*env)->ExceptionCheck(env)) - ret = -1; - else - { - ret - = pa_context_connect( - (pa_context *) (intptr_t) c, - serverChars, - (pa_context_flags_t) flags, - (pa_spawn_api *) (intptr_t) api); - if (serverChars) - (*env)->ReleaseStringUTFChars(env, server, serverChars); - } - return ret; -} - -JNIEXPORT void JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_context_1disconnect - (JNIEnv *env, jclass clazz, jlong c) -{ - pa_context_disconnect((pa_context *) (intptr_t) c); -} - -JNIEXPORT jlong JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_context_1get_1sink_1info_1list - (JNIEnv *env, jclass clazz, jlong c, jobject cb) -{ - jweak weakCb = cb ? (*env)->NewWeakGlobalRef(env, cb) : NULL; - pa_operation *o; - - if ((*env)->ExceptionCheck(env)) - o = NULL; - else - { - o - = pa_context_get_sink_info_list( - (pa_context *) (intptr_t) c, - weakCb ? PulseAudio_sinkInfoCallback : NULL, - (void *) weakCb); - } - - return (intptr_t) o; -} - -JNIEXPORT jlong JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_context_1get_1source_1info_1list - (JNIEnv *env, jclass clazz, jlong c, jobject cb) -{ - jweak weakCb = cb ? (*env)->NewWeakGlobalRef(env, cb) : NULL; - pa_operation *o; - - if ((*env)->ExceptionCheck(env)) - o = NULL; - else - { - o - = pa_context_get_source_info_list( - (pa_context *) (intptr_t) c, - weakCb ? PulseAudio_sourceInfoCallback : NULL, - (void *) weakCb); - } - - return (intptr_t) o; -} - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_context_1get_1state - (JNIEnv *env, jclass clazz, jlong c) -{ - return pa_context_get_state((pa_context *) (intptr_t) c); -} - -JNIEXPORT jlong JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_context_1new_1with_1proplist - (JNIEnv *env, jclass clazz, jlong mainloop, jstring name, jlong proplist) -{ - const char *nameChars - = name - ? (*env)->GetStringUTFChars(env, name, NULL) - : NULL; - pa_context *ret; - - if ((*env)->ExceptionCheck(env)) - ret = NULL; - else - { - ret - = pa_context_new_with_proplist( - (pa_mainloop_api *) (intptr_t) mainloop, - nameChars, - (pa_proplist *) (intptr_t) proplist); - if (nameChars) - (*env)->ReleaseStringUTFChars(env, name, nameChars); - } - return (intptr_t) ret; -} - -JNIEXPORT jlong JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_context_1set_1sink_1input_1volume - (JNIEnv *env, jclass clazz, jlong c, jint idx, jlong volume, jobject cb) -{ - return - (intptr_t) - pa_context_set_sink_input_volume( - (pa_context *) (intptr_t) c, - (uint32_t) idx, - (const pa_cvolume *) (intptr_t) volume, - NULL, - NULL); -} - -JNIEXPORT jlong JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_context_1set_1source_1output_1volume - (JNIEnv *env, jclass clazz, jlong c, jint idx, jlong volume, jobject cb) -{ - pa_operation *o; - - if (PulseAudio_contextSetSourceOutputVolume) - { - o - = PulseAudio_contextSetSourceOutputVolume( - (pa_context *) (intptr_t) c, - (uint32_t) idx, - (const pa_cvolume *) (intptr_t) volume, - NULL, - NULL); - } - else - o = NULL; - return (intptr_t) o; -} - -JNIEXPORT void JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_context_1set_1state_1callback - (JNIEnv *env, jclass clazz, jlong c, jobject cb) -{ - jweak weakCb = cb ? (*env)->NewWeakGlobalRef(env, cb) : NULL; - - pa_context_set_state_callback( - (pa_context *) (intptr_t) c, - weakCb ? PulseAudio_contextStateCallback : NULL, - (void *) weakCb); -} - -JNIEXPORT void JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_context_1unref - (JNIEnv *env, jclass clazz, jlong c) -{ - pa_context_unref((pa_context *) (intptr_t) c); -} - -JNIEXPORT void JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_cvolume_1free - (JNIEnv *env, jclass clazz, jlong cv) -{ - pa_xfree((void *) (intptr_t) cv); -} - -JNIEXPORT jlong JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_cvolume_1new - (JNIEnv *env, jclass clazz) -{ - pa_cvolume *cv = pa_xmalloc(sizeof(pa_cvolume)); - - if (cv) - cv = pa_cvolume_init(cv); - return (intptr_t) cv; -} - -JNIEXPORT jlong JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_cvolume_1set - (JNIEnv *env, jclass clazz, jlong cv, jint channels, jint v) -{ - return - (intptr_t) - pa_cvolume_set( - (pa_cvolume *) (intptr_t) cv, - (unsigned) channels, - (pa_volume_t) v); -} - -#if (PA_MAJOR >= 1) -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_format_1info_1get_1encoding - (JNIEnv *env, jclass clazz, jlong f) -{ - return ((pa_format_info *) (intptr_t) f)->encoding; -} - -JNIEXPORT jlong JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_format_1info_1get_1plist - (JNIEnv *env, jclass clazz, jlong f) -{ - return (intptr_t) (((pa_format_info *) (intptr_t) f)->plist); -} - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_format_1info_1get_1prop_1int - (JNIEnv *env, jclass clazz, jlong f, jstring key) -{ - const char *keyChars - = key ? (*env)->GetStringUTFChars(env, key, NULL) : NULL; - int ret; - - if ((*env)->ExceptionCheck(env)) - ret = 0; - else - { - pa_proplist *plist = ((pa_format_info *) (intptr_t) f)->plist; - - if (plist) - { - const void *data = NULL; - size_t nbytes = 0; - - pa_proplist_get(plist, keyChars, &data, &nbytes); - ret = (data && (nbytes == sizeof(int))) ? *((const int *) data) : 0; - } - else - ret = 0; - if (keyChars) - (*env)->ReleaseStringUTFChars(env, key, keyChars); - } - return ret; -} -#endif /* #if (PA_MAJOR >= 1) */ - -JNIEXPORT jstring JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_get_1library_1version - (JNIEnv *env, jclass clazz) -{ - const char *chars = pa_get_library_version(); - - return chars ? (*env)->NewStringUTF(env, chars) : NULL; -} - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_operation_1get_1state - (JNIEnv *env, jclass clazz, jlong o) -{ - return pa_operation_get_state((pa_operation *) (intptr_t) o); -} - -JNIEXPORT void JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_operation_1unref - (JNIEnv *env, jclass clazz, jlong o) -{ - pa_operation_unref((pa_operation *) (intptr_t) o); -} - -JNIEXPORT void JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_proplist_1free - (JNIEnv *env, jclass clazz, jlong p) -{ - pa_proplist_free((pa_proplist *) (intptr_t) p); -} - -JNIEXPORT jlong JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_proplist_1new - (JNIEnv *env, jclass clazz) -{ - return (intptr_t) pa_proplist_new(); -} - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_proplist_1sets - (JNIEnv *env, jclass clazz, jlong p, jstring key, jstring value) -{ - const char *keyChars - = key - ? (*env)->GetStringUTFChars(env, key, NULL) - : NULL; - int ret; - - if ((*env)->ExceptionCheck(env)) - ret = -1; - else - { - const char *valueChars - = value - ? (*env)->GetStringUTFChars(env, value, NULL) - : NULL; - - if ((*env)->ExceptionCheck(env)) - ret = -1; - else - { - ret - = pa_proplist_sets( - (pa_proplist *) (intptr_t) p, - keyChars, - valueChars); - if (valueChars) - (*env)->ReleaseStringUTFChars(env, value, valueChars); - } - if (keyChars) - (*env)->ReleaseStringUTFChars(env, key, keyChars); - } - return ret; -} - -JNIEXPORT void JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_sample_1spec_1free - (JNIEnv *env, jclass clazz, jlong ss) -{ - pa_xfree((void *) (intptr_t) ss); -} - -JNIEXPORT jlong JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_sample_1spec_1new - (JNIEnv *env, jclass clazz, jint format, jint rate, jint channels) -{ - pa_sample_spec *ss = pa_xmalloc(sizeof(pa_sample_spec)); - - if (ss) - { - ss->format = (pa_sample_format_t) format; - ss->rate = (uint32_t) rate; - ss->channels = (uint8_t) channels; - } - return (intptr_t) ss; -} - -JNIEXPORT jstring JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_sink_1info_1get_1description - (JNIEnv *env, jclass clazz, jlong i) -{ - const char *chars = ((pa_sink_info *) (intptr_t) i)->description; - - return chars ? (*env)->NewStringUTF(env, chars) : NULL; -} - -#if (PA_MAJOR >= 1) -JNIEXPORT jlongArray JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_sink_1info_1get_1formats - (JNIEnv *env, jclass clazz, jlong i) -{ - pa_sink_info *sinkInfo = (pa_sink_info *) (intptr_t) i; - - return - PulseAudio_getFormatInfos( - env, clazz, - sinkInfo->n_formats, sinkInfo->formats); -} -#endif /* #if (PA_MAJOR >= 1) */ - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_sink_1info_1get_1index - (JNIEnv *env, jclass clazz, jlong i) -{ - return ((pa_sink_info *) (intptr_t) i)->index; -} - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_sink_1info_1get_1monitor_1source - (JNIEnv *env, jclass clazz, jlong i) -{ - return ((pa_sink_info *) (intptr_t) i)->monitor_source; -} - -JNIEXPORT jstring JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_sink_1info_1get_1monitor_1source_1name - (JNIEnv *env, jclass clazz, jlong i) -{ - const char *chars = ((pa_sink_info *) (intptr_t) i)->monitor_source_name; - - return chars ? (*env)->NewStringUTF(env, chars) : NULL; -} - -JNIEXPORT jstring JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_sink_1info_1get_1name - (JNIEnv *env, jclass clazz, jlong i) -{ - const char *chars = ((pa_sink_info *) (intptr_t) i)->name; - - return chars ? (*env)->NewStringUTF(env, chars) : NULL; -} - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_sink_1info_1get_1sample_1spec_1channels - (JNIEnv *env, jclass clazz, jlong i) -{ - return ((pa_sink_info *) (intptr_t) i)->sample_spec.channels; -} - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_sink_1info_1get_1sample_1spec_1format - (JNIEnv *env, jclass clazz, jlong i) -{ - return ((pa_sink_info *) (intptr_t) i)->sample_spec.format; -} - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_sink_1info_1get_1sample_1spec_1rate - (JNIEnv *env, jclass clazz, jlong i) -{ - return ((pa_sink_info *) (intptr_t) i)->sample_spec.rate; -} - -JNIEXPORT jstring JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_source_1info_1get_1description - (JNIEnv *env, jclass clazz, jlong i) -{ - const char *chars = ((pa_source_info *) (intptr_t) i)->description; - - return chars ? (*env)->NewStringUTF(env, chars) : NULL; -} - -#if (PA_MAJOR >= 1) -JNIEXPORT jlongArray JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_source_1info_1get_1formats - (JNIEnv *env, jclass clazz, jlong i) -{ - pa_source_info *sourceInfo = (pa_source_info *) (intptr_t) i; - - return - PulseAudio_getFormatInfos( - env, clazz, - sourceInfo->n_formats, sourceInfo->formats); -} -#endif /* #if (PA_MAJOR >= 1) */ - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_source_1info_1get_1index - (JNIEnv *env, jclass clazz, jlong i) -{ - return ((pa_source_info *) (intptr_t) i)->index; -} - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_source_1info_1get_1monitor_1of_1sink - (JNIEnv *env, jclass clazz, jlong i) -{ - return ((pa_source_info *) (intptr_t) i)->monitor_of_sink; -} - -JNIEXPORT jstring JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_source_1info_1get_1name - (JNIEnv *env, jclass clazz, jlong i) -{ - const char *chars = ((pa_source_info *) (intptr_t) i)->name; - - return chars ? (*env)->NewStringUTF(env, chars) : NULL; -} - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_source_1info_1get_1sample_1spec_1channels - (JNIEnv *env, jclass clazz, jlong i) -{ - return ((pa_source_info *) (intptr_t) i)->sample_spec.channels; -} - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_source_1info_1get_1sample_1spec_1format - (JNIEnv *env, jclass clazz, jlong i) -{ - return ((pa_source_info *) (intptr_t) i)->sample_spec.format; -} - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_source_1info_1get_1sample_1spec_1rate - (JNIEnv *env, jclass clazz, jlong i) -{ - return ((pa_source_info *) (intptr_t) i)->sample_spec.rate; -} - -JNIEXPORT jint -JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_stream_1connect_1playback - (JNIEnv *env, jclass clazz, jlong s, jstring dev, jlong attr, jint flags, jlong volume, jlong syncStream) -{ - const char *devChars - = dev ? (*env)->GetStringUTFChars(env, dev, NULL) : NULL; - jint ret; - - if ((*env)->ExceptionCheck(env)) - ret = -1; - else - { - ret - = pa_stream_connect_playback( - (pa_stream *) (intptr_t) s, - devChars, - (const pa_buffer_attr *) (intptr_t) attr, - (pa_stream_flags_t) flags, - (const pa_cvolume *) (intptr_t) volume, - (pa_stream *) (intptr_t) syncStream); - (*env)->ReleaseStringUTFChars(env, dev, devChars); - } - return ret; -} - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_stream_1connect_1record - (JNIEnv *env, jclass clazz, jlong s, jstring dev, jlong attr, jint flags) -{ - const char *devChars - = dev ? (*env)->GetStringUTFChars(env, dev, NULL) : NULL; - jint ret; - - if ((*env)->ExceptionCheck(env)) - ret = -1; - else - { - ret - = pa_stream_connect_record( - (pa_stream *) (intptr_t) s, - devChars, - (const pa_buffer_attr *) (intptr_t) attr, - (pa_stream_flags_t) flags); - (*env)->ReleaseStringUTFChars(env, dev, devChars); - } - return ret; -} - -JNIEXPORT jlong JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_stream_1cork - (JNIEnv *env, jclass clazz, jlong s, jboolean b, jobject cb) -{ - return (intptr_t) pa_stream_cork((pa_stream *) (intptr_t) s, b, NULL, NULL); -} - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_stream_1disconnect - (JNIEnv *env, jclass clazz, jlong s) -{ - return pa_stream_disconnect((pa_stream *) (intptr_t) s); -} - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_stream_1drop - (JNIEnv *env, jclass clazz, jlong s) -{ - return pa_stream_drop((pa_stream *) (intptr_t) s); -} - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_stream_1get_1index - (JNIEnv *env, jclass clazz, jlong s) -{ - return pa_stream_get_index((pa_stream *) (intptr_t) s); -} - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_stream_1get_1state - (JNIEnv *env, jclass clazz, jlong s) -{ - return pa_stream_get_state((pa_stream *) (intptr_t) s); -} - -JNIEXPORT jlong JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_stream_1new_1with_1proplist - (JNIEnv *env, jclass clazz, jlong c, jstring name, jlong ss, jlong map, jlong p) -{ - const char *nameChars - = name ? (*env)->GetStringUTFChars(env, name, NULL) : NULL; - pa_stream *stream; - - if ((*env)->ExceptionCheck(env)) - stream = NULL; - else - { - stream - = pa_stream_new_with_proplist( - (pa_context *) (intptr_t) c, - nameChars, - (const pa_sample_spec *) (intptr_t) ss, - (const pa_channel_map *) (intptr_t) map, - (pa_proplist *) (intptr_t) p); - (*env)->ReleaseStringUTFChars(env, name, nameChars); - } - return (intptr_t) stream; -} - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_stream_1peek - (JNIEnv *env, jclass clazz, jlong s, jbyteArray data, jint dataOffset) -{ - const void *bytes = NULL; - size_t nbytes = 0; - jsize length; - - pa_stream_peek((pa_stream *) (intptr_t) s, &bytes, &nbytes); - if (bytes && nbytes) - { - length = (*env)->GetArrayLength(env, data) - dataOffset; - if (nbytes < length) - length = nbytes; - (*env)->SetByteArrayRegion( - env, - data, dataOffset, length, (jbyte *) bytes); - } - else - length = 0; - return length; -} - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_stream_1readable_1size - (JNIEnv *env, jclass clazz, jlong s) -{ - return pa_stream_readable_size((pa_stream *) (intptr_t) s); -} - -JNIEXPORT void JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_stream_1set_1read_1callback - (JNIEnv *env, jclass clazz, jlong s, jobject cb) -{ - jweak weakCb = cb ? (*env)->NewWeakGlobalRef(env, cb) : NULL; - - pa_stream_set_read_callback( - (pa_stream *) (intptr_t) s, - weakCb ? PulseAudio_streamRequestCallback : NULL, - (void *) weakCb); -} - -JNIEXPORT void JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_stream_1set_1state_1callback - (JNIEnv *env, jclass clazz, jlong s, jobject cb) -{ - jweak weakCb = cb ? (*env)->NewWeakGlobalRef(env, cb) : NULL; - - pa_stream_set_state_callback( - (pa_stream *) (intptr_t) s, - weakCb ? PulseAudio_streamStateCallback : NULL, - (void *) weakCb); -} - -JNIEXPORT void -JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_stream_1set_1write_1callback - (JNIEnv *env, jclass clazz, jlong s, jobject cb) -{ - jweak weakCb = cb ? (*env)->NewWeakGlobalRef(env, cb) : NULL; - - pa_stream_set_write_callback( - (pa_stream *) (intptr_t) s, - weakCb ? PulseAudio_streamRequestCallback : NULL, - (void *) weakCb); -} - -JNIEXPORT void JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_stream_1unref - (JNIEnv *env, jclass clazz, jlong s) -{ - pa_stream_unref((pa_stream *) (intptr_t) s); -} - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_stream_1writable_1size - (JNIEnv *env, jclass clazz, jlong s) -{ - return pa_stream_writable_size((pa_stream *) (intptr_t) s); -} - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_stream_1write - (JNIEnv *env, jclass clazz, jlong s, jbyteArray data, jint dataOffset, jint dataLength, jobject freeCb, jlong offset, jint seek) -{ - pa_stream *stream = (pa_stream *) (intptr_t) s; - jbyte *bytes = NULL; - size_t nbytes = dataLength; - int ret; - - pa_stream_begin_write(stream, (void **) &bytes, &nbytes); - if (bytes && nbytes) - { - if (nbytes < dataLength) - dataLength = nbytes; - (*env)->GetByteArrayRegion(env, data, dataOffset, dataLength, bytes); - if ((*env)->ExceptionCheck(env)) - ret = 0; - else - { - pa_stream_write( - stream, - bytes, - (size_t) dataLength, - NULL, - (int64_t) offset, - (pa_seek_mode_t) seek); - ret = dataLength; - } - } - else - { - bytes = (*env)->GetByteArrayElements(env, data, NULL); - if ((*env)->ExceptionCheck(env)) - ret = 0; - else - { - pa_stream_write( - stream, - bytes + dataOffset, - (size_t) dataLength, - NULL, - (int64_t) offset, - (pa_seek_mode_t) seek); - (*env)->ReleaseByteArrayElements(env, data, bytes, JNI_ABORT); - ret = dataLength; - } - } - return ret; -} - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_sw_1volume_1from_1linear - (JNIEnv *env, jclass clazz, jdouble v) -{ - return pa_sw_volume_from_linear(v); -} - -JNIEXPORT void JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_threaded_1mainloop_1free - (JNIEnv *env, jclass clazz, jlong m) -{ - pa_threaded_mainloop_free((pa_threaded_mainloop *) (intptr_t) m); -} - -JNIEXPORT jlong JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_threaded_1mainloop_1get_1api - (JNIEnv *env, jclass clazz, jlong m) -{ - return - (intptr_t) - pa_threaded_mainloop_get_api((pa_threaded_mainloop *) (intptr_t) m); -} - -JNIEXPORT void JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_threaded_1mainloop_1lock - (JNIEnv *env, jclass clazz, jlong m) -{ - pa_threaded_mainloop_lock((pa_threaded_mainloop *) (intptr_t) m); -} - -JNIEXPORT jlong JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_threaded_1mainloop_1new - (JNIEnv *env, jclass clazz) -{ - return (intptr_t) pa_threaded_mainloop_new(); -} - -JNIEXPORT void JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_threaded_1mainloop_1signal - (JNIEnv *env, jclass clazz, jlong m, jboolean waitForAccept) -{ - pa_threaded_mainloop_signal( - (pa_threaded_mainloop *) (intptr_t) m, - (int) waitForAccept); -} - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_threaded_1mainloop_1start - (JNIEnv *env, jclass clazz, jlong m) -{ - return pa_threaded_mainloop_start((pa_threaded_mainloop *) (intptr_t) m); -} - -JNIEXPORT void JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_threaded_1mainloop_1stop - (JNIEnv *env, jclass clazz, jlong m) -{ - pa_threaded_mainloop_stop((pa_threaded_mainloop *) (intptr_t) m); -} - -JNIEXPORT void JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_threaded_1mainloop_1unlock - (JNIEnv *env, jclass clazz, jlong m) -{ - pa_threaded_mainloop_unlock((pa_threaded_mainloop *) (intptr_t) m); -} - -JNIEXPORT void JNICALL -Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_threaded_1mainloop_1wait - (JNIEnv *env, jclass clazz, jlong m) -{ - pa_threaded_mainloop_wait((pa_threaded_mainloop *) (intptr_t) m); -} - -JNIEXPORT jint JNICALL -JNI_OnLoad(JavaVM *vm, void *reserved) -{ - JNIEnv *env; - jint version = JNI_VERSION_1_4; - - PulseAudio_vm = vm; - if (JNI_OK == (*vm)->GetEnv(vm, (void **) &env, version)) - { - jclass clazz = (*env)->FindClass(env, "java/lang/Runnable"); - - if (clazz) - { - jmethodID methodID = (*env)->GetMethodID(env, clazz, "run", "()V"); - - if (methodID) - { - clazz = (*env)->NewGlobalRef(env, clazz); - if (clazz) - { - PulseAudio_runnableClass = clazz; - PulseAudio_runnableMethodID = methodID; - } - } - } - if (PulseAudio_runnableMethodID) - { - clazz - = (*env)->FindClass( - env, - "net/java/sip/communicator/impl/neomedia/pulseaudio/PA$sink_info_cb_t"); - - if (clazz) - { - jmethodID methodID - = (*env)->GetMethodID(env, clazz, "callback", "(JJI)V"); - - if (methodID) - { - clazz = (*env)->NewGlobalRef(env, clazz); - if (clazz) - { - PulseAudio_sinkInfoCbClass = clazz; - PulseAudio_sinkInfoCbMethodID = methodID; - } - } - } - } - if (PulseAudio_sinkInfoCbMethodID) - { - clazz - = (*env)->FindClass( - env, - "net/java/sip/communicator/impl/neomedia/pulseaudio/PA$source_info_cb_t"); - - if (clazz) - { - jmethodID methodID - = (*env)->GetMethodID(env, clazz, "callback", "(JJI)V"); - - if (methodID) - { - clazz = (*env)->NewGlobalRef(env, clazz); - if (clazz) - { - PulseAudio_sourceInfoCbClass = clazz; - PulseAudio_sourceInfoCbMethodID = methodID; - } - } - } - } - if (PulseAudio_sourceInfoCbMethodID) - { - clazz - = (*env)->FindClass( - env, - "net/java/sip/communicator/impl/neomedia/pulseaudio/PA$stream_request_cb_t"); - - if (clazz) - { - jmethodID methodID - = (*env)->GetMethodID(env, clazz, "callback", "(JI)V"); - - if (methodID) - { - clazz = (*env)->NewGlobalRef(env, clazz); - if (clazz) - { - PulseAudio_streamRequestCbClass = clazz; - PulseAudio_streamRequestCbMethodID = methodID; - } - } - } - } - } - if (PulseAudio_streamRequestCbMethodID) - { - PulseAudio_contextSetSourceOutputVolume - = dlsym(RTLD_DEFAULT, "pa_context_set_source_output_volume"); - } - else - version = JNI_ERR; - return version; -} - -JNIEXPORT void JNICALL -JNI_OnUnload(JavaVM *vm, void *reserved) -{ - jclass runnableClass = PulseAudio_runnableClass; - jclass sinkInfoCbClass = PulseAudio_sinkInfoCbClass; - jclass sourceInfoCbClass = PulseAudio_sourceInfoCbClass; - jclass streamRequestCbClass = PulseAudio_streamRequestCbClass; - - PulseAudio_runnableClass = NULL; - PulseAudio_runnableMethodID = 0; - PulseAudio_sinkInfoCbClass = NULL; - PulseAudio_sinkInfoCbMethodID = 0; - PulseAudio_sourceInfoCbClass = NULL; - PulseAudio_sourceInfoCbMethodID = 0; - PulseAudio_streamRequestCbClass = NULL; - PulseAudio_streamRequestCbMethodID = 0; - PulseAudio_vm = NULL; - if (runnableClass - || sinkInfoCbClass - || sourceInfoCbClass - || streamRequestCbClass) - { - JNIEnv *env; - jint version = JNI_VERSION_1_4; - - if (JNI_OK == (*vm)->GetEnv(vm, (void **) &env, version)) - { - if (runnableClass) - (*env)->DeleteGlobalRef(env, runnableClass); - if (sinkInfoCbClass) - (*env)->DeleteGlobalRef(env, sinkInfoCbClass); - if (sourceInfoCbClass) - (*env)->DeleteGlobalRef(env, sourceInfoCbClass); - if (streamRequestCbClass) - (*env)->DeleteGlobalRef(env, streamRequestCbClass); - } - } -} - -static void -PulseAudio_contextStateCallback(pa_context *c, void *userdata) -{ - PulseAudio_stateCallback(userdata); -} - -#if (PA_MAJOR >= 1) -static jlongArray -PulseAudio_getFormatInfos - (JNIEnv *env, jclass clazz, jsize length, pa_format_info **formats) -{ - jlongArray ret = (*env)->NewLongArray(env, length); - - if (ret) - { - jsize i; - - for (i = 0; i < length; i++, formats++) - { - jlong format = (intptr_t) (*formats); - - (*env)->SetLongArrayRegion(env, ret, i, 1, &format); - } - } - return ret; -} -#endif /* #if (PA_MAJOR >= 1) */ - -static void -PulseAudio_infoCallback - (pa_context *c, jlong i, int eol, void *userdata, jmethodID methodID) -{ - jweak weakCb = (jweak) userdata; - - if (weakCb) - { - JavaVM *vm = PulseAudio_vm; - - if (vm) - { - JNIEnv *env; - - if ((*vm)->AttachCurrentThreadAsDaemon(vm, (void **) &env, NULL) - == 0) - { - jobject cb = (*env)->NewLocalRef(env, weakCb); - - if (cb) - { - (*env)->CallVoidMethod( - env, - cb, - methodID, - (jlong) (intptr_t) c, - i, - (jint) eol); - (*env)->DeleteLocalRef(env, cb); - } - } - } - } -} - -static void -PulseAudio_sinkInfoCallback - (pa_context *c, const pa_sink_info *i, int eol, void *userdata) -{ - PulseAudio_infoCallback( - c, - (intptr_t) i, - eol, - userdata, - PulseAudio_sinkInfoCbMethodID); -} - -static void -PulseAudio_sourceInfoCallback - (pa_context *c, const pa_source_info *i, int eol, void *userdata) -{ - PulseAudio_infoCallback( - c, - (intptr_t) i, - eol, - userdata, - PulseAudio_sourceInfoCbMethodID); -} - -static void -PulseAudio_stateCallback(void *userdata) -{ - jweak weakCb = (jobject) userdata; - - if (weakCb) - { - JavaVM *vm = PulseAudio_vm; - - if (vm) - { - JNIEnv *env; - - if ((*vm)->AttachCurrentThreadAsDaemon(vm, (void **) &env, NULL) - == 0) - { - jobject cb = (*env)->NewLocalRef(env, weakCb); - - if (cb) - { - (*env)->CallVoidMethod( - env, - cb, - PulseAudio_runnableMethodID); - (*env)->DeleteLocalRef(env, cb); - } - } - } - } -} - -static void -PulseAudio_streamRequestCallback(pa_stream *s, size_t nbytes, void *userdata) -{ - jweak weakCb = (jweak) userdata; - - if (weakCb) - { - JavaVM *vm = PulseAudio_vm; - - if (vm) - { - JNIEnv *env; - - if ((*vm)->AttachCurrentThreadAsDaemon(vm, (void **) &env, NULL) - == 0) - { - jobject cb = (*env)->NewLocalRef(env, weakCb); - - if (cb) - { - (*env)->CallVoidMethod( - env, - cb, - PulseAudio_streamRequestCbMethodID, - (jlong) (intptr_t) s, - (jint) nbytes); - (*env)->DeleteLocalRef(env, cb); - } - } - } - } -} - -static void -PulseAudio_streamStateCallback(pa_stream *s, void *userdata) -{ - PulseAudio_stateCallback(userdata); -} diff --git a/src/native/linux/pulseaudio/net_java_sip_communicator_impl_neomedia_pulseaudio_PA.h b/src/native/linux/pulseaudio/net_java_sip_communicator_impl_neomedia_pulseaudio_PA.h deleted file mode 100644 index 8624de6b0..000000000 --- a/src/native/linux/pulseaudio/net_java_sip_communicator_impl_neomedia_pulseaudio_PA.h +++ /dev/null @@ -1,565 +0,0 @@ -/* DO NOT EDIT THIS FILE - it is machine generated */ -#include -/* Header for class net_java_sip_communicator_impl_neomedia_pulseaudio_PA */ - -#ifndef _Included_net_java_sip_communicator_impl_neomedia_pulseaudio_PA -#define _Included_net_java_sip_communicator_impl_neomedia_pulseaudio_PA -#ifdef __cplusplus -extern "C" { -#endif -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: buffer_attr_free - * Signature: (J)V - */ -JNIEXPORT void JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_buffer_1attr_1free - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: buffer_attr_new - * Signature: (IIIII)J - */ -JNIEXPORT jlong JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_buffer_1attr_1new - (JNIEnv *, jclass, jint, jint, jint, jint, jint); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: context_connect - * Signature: (JLjava/lang/String;IJ)I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_context_1connect - (JNIEnv *, jclass, jlong, jstring, jint, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: context_disconnect - * Signature: (J)V - */ -JNIEXPORT void JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_context_1disconnect - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: context_get_sink_info_list - * Signature: (JLnet/java/sip/communicator/impl/neomedia/pulseaudio/PA/sink_info_cb_t;)J - */ -JNIEXPORT jlong JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_context_1get_1sink_1info_1list - (JNIEnv *, jclass, jlong, jobject); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: context_get_source_info_list - * Signature: (JLnet/java/sip/communicator/impl/neomedia/pulseaudio/PA/source_info_cb_t;)J - */ -JNIEXPORT jlong JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_context_1get_1source_1info_1list - (JNIEnv *, jclass, jlong, jobject); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: context_get_state - * Signature: (J)I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_context_1get_1state - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: context_new_with_proplist - * Signature: (JLjava/lang/String;J)J - */ -JNIEXPORT jlong JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_context_1new_1with_1proplist - (JNIEnv *, jclass, jlong, jstring, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: context_set_sink_input_volume - * Signature: (JIJLnet/java/sip/communicator/impl/neomedia/pulseaudio/PA/context_success_cb_t;)J - */ -JNIEXPORT jlong JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_context_1set_1sink_1input_1volume - (JNIEnv *, jclass, jlong, jint, jlong, jobject); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: context_set_source_output_volume - * Signature: (JIJLnet/java/sip/communicator/impl/neomedia/pulseaudio/PA/context_success_cb_t;)J - */ -JNIEXPORT jlong JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_context_1set_1source_1output_1volume - (JNIEnv *, jclass, jlong, jint, jlong, jobject); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: context_set_state_callback - * Signature: (JLjava/lang/Runnable;)V - */ -JNIEXPORT void JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_context_1set_1state_1callback - (JNIEnv *, jclass, jlong, jobject); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: context_unref - * Signature: (J)V - */ -JNIEXPORT void JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_context_1unref - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: cvolume_free - * Signature: (J)V - */ -JNIEXPORT void JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_cvolume_1free - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: cvolume_new - * Signature: ()J - */ -JNIEXPORT jlong JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_cvolume_1new - (JNIEnv *, jclass); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: cvolume_set - * Signature: (JII)J - */ -JNIEXPORT jlong JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_cvolume_1set - (JNIEnv *, jclass, jlong, jint, jint); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: format_info_get_encoding - * Signature: (J)I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_format_1info_1get_1encoding - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: format_info_get_plist - * Signature: (J)J - */ -JNIEXPORT jlong JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_format_1info_1get_1plist - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: format_info_get_prop_int - * Signature: (JLjava/lang/String;)I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_format_1info_1get_1prop_1int - (JNIEnv *, jclass, jlong, jstring); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: get_library_version - * Signature: ()Ljava/lang/String; - */ -JNIEXPORT jstring JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_get_1library_1version - (JNIEnv *, jclass); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: operation_get_state - * Signature: (J)I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_operation_1get_1state - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: operation_unref - * Signature: (J)V - */ -JNIEXPORT void JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_operation_1unref - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: proplist_free - * Signature: (J)V - */ -JNIEXPORT void JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_proplist_1free - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: proplist_new - * Signature: ()J - */ -JNIEXPORT jlong JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_proplist_1new - (JNIEnv *, jclass); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: proplist_sets - * Signature: (JLjava/lang/String;Ljava/lang/String;)I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_proplist_1sets - (JNIEnv *, jclass, jlong, jstring, jstring); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: sample_spec_free - * Signature: (J)V - */ -JNIEXPORT void JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_sample_1spec_1free - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: sample_spec_new - * Signature: (III)J - */ -JNIEXPORT jlong JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_sample_1spec_1new - (JNIEnv *, jclass, jint, jint, jint); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: sink_info_get_description - * Signature: (J)Ljava/lang/String; - */ -JNIEXPORT jstring JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_sink_1info_1get_1description - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: sink_info_get_formats - * Signature: (J)[J - */ -JNIEXPORT jlongArray JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_sink_1info_1get_1formats - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: sink_info_get_index - * Signature: (J)I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_sink_1info_1get_1index - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: sink_info_get_monitor_source - * Signature: (J)I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_sink_1info_1get_1monitor_1source - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: sink_info_get_monitor_source_name - * Signature: (J)Ljava/lang/String; - */ -JNIEXPORT jstring JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_sink_1info_1get_1monitor_1source_1name - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: sink_info_get_name - * Signature: (J)Ljava/lang/String; - */ -JNIEXPORT jstring JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_sink_1info_1get_1name - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: sink_info_get_sample_spec_channels - * Signature: (J)I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_sink_1info_1get_1sample_1spec_1channels - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: sink_info_get_sample_spec_format - * Signature: (J)I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_sink_1info_1get_1sample_1spec_1format - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: sink_info_get_sample_spec_rate - * Signature: (J)I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_sink_1info_1get_1sample_1spec_1rate - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: source_info_get_description - * Signature: (J)Ljava/lang/String; - */ -JNIEXPORT jstring JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_source_1info_1get_1description - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: source_info_get_formats - * Signature: (J)[J - */ -JNIEXPORT jlongArray JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_source_1info_1get_1formats - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: source_info_get_index - * Signature: (J)I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_source_1info_1get_1index - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: source_info_get_monitor_of_sink - * Signature: (J)I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_source_1info_1get_1monitor_1of_1sink - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: source_info_get_name - * Signature: (J)Ljava/lang/String; - */ -JNIEXPORT jstring JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_source_1info_1get_1name - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: source_info_get_sample_spec_channels - * Signature: (J)I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_source_1info_1get_1sample_1spec_1channels - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: source_info_get_sample_spec_format - * Signature: (J)I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_source_1info_1get_1sample_1spec_1format - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: source_info_get_sample_spec_rate - * Signature: (J)I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_source_1info_1get_1sample_1spec_1rate - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: stream_connect_playback - * Signature: (JLjava/lang/String;JIJJ)I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_stream_1connect_1playback - (JNIEnv *, jclass, jlong, jstring, jlong, jint, jlong, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: stream_connect_record - * Signature: (JLjava/lang/String;JI)I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_stream_1connect_1record - (JNIEnv *, jclass, jlong, jstring, jlong, jint); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: stream_cork - * Signature: (JZLnet/java/sip/communicator/impl/neomedia/pulseaudio/PA/stream_success_cb_t;)J - */ -JNIEXPORT jlong JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_stream_1cork - (JNIEnv *, jclass, jlong, jboolean, jobject); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: stream_disconnect - * Signature: (J)I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_stream_1disconnect - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: stream_drop - * Signature: (J)I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_stream_1drop - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: stream_get_index - * Signature: (J)I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_stream_1get_1index - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: stream_get_state - * Signature: (J)I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_stream_1get_1state - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: stream_new_with_proplist - * Signature: (JLjava/lang/String;JJJ)J - */ -JNIEXPORT jlong JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_stream_1new_1with_1proplist - (JNIEnv *, jclass, jlong, jstring, jlong, jlong, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: stream_peek - * Signature: (J[BI)I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_stream_1peek - (JNIEnv *, jclass, jlong, jbyteArray, jint); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: stream_readable_size - * Signature: (J)I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_stream_1readable_1size - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: stream_set_read_callback - * Signature: (JLnet/java/sip/communicator/impl/neomedia/pulseaudio/PA/stream_request_cb_t;)V - */ -JNIEXPORT void JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_stream_1set_1read_1callback - (JNIEnv *, jclass, jlong, jobject); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: stream_set_state_callback - * Signature: (JLjava/lang/Runnable;)V - */ -JNIEXPORT void JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_stream_1set_1state_1callback - (JNIEnv *, jclass, jlong, jobject); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: stream_set_write_callback - * Signature: (JLnet/java/sip/communicator/impl/neomedia/pulseaudio/PA/stream_request_cb_t;)V - */ -JNIEXPORT void JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_stream_1set_1write_1callback - (JNIEnv *, jclass, jlong, jobject); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: stream_unref - * Signature: (J)V - */ -JNIEXPORT void JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_stream_1unref - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: stream_writable_size - * Signature: (J)I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_stream_1writable_1size - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: stream_write - * Signature: (J[BIILjava/lang/Runnable;JI)I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_stream_1write - (JNIEnv *, jclass, jlong, jbyteArray, jint, jint, jobject, jlong, jint); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: sw_volume_from_linear - * Signature: (D)I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_sw_1volume_1from_1linear - (JNIEnv *, jclass, jdouble); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: threaded_mainloop_free - * Signature: (J)V - */ -JNIEXPORT void JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_threaded_1mainloop_1free - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: threaded_mainloop_get_api - * Signature: (J)J - */ -JNIEXPORT jlong JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_threaded_1mainloop_1get_1api - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: threaded_mainloop_lock - * Signature: (J)V - */ -JNIEXPORT void JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_threaded_1mainloop_1lock - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: threaded_mainloop_new - * Signature: ()J - */ -JNIEXPORT jlong JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_threaded_1mainloop_1new - (JNIEnv *, jclass); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: threaded_mainloop_signal - * Signature: (JZ)V - */ -JNIEXPORT void JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_threaded_1mainloop_1signal - (JNIEnv *, jclass, jlong, jboolean); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: threaded_mainloop_start - * Signature: (J)I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_threaded_1mainloop_1start - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: threaded_mainloop_stop - * Signature: (J)V - */ -JNIEXPORT void JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_threaded_1mainloop_1stop - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: threaded_mainloop_unlock - * Signature: (J)V - */ -JNIEXPORT void JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_threaded_1mainloop_1unlock - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_pulseaudio_PA - * Method: threaded_mainloop_wait - * Signature: (J)V - */ -JNIEXPORT void JNICALL Java_net_java_sip_communicator_impl_neomedia_pulseaudio_PA_threaded_1mainloop_1wait - (JNIEnv *, jclass, jlong); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/src/native/linux/video4linux2/Makefile b/src/native/linux/video4linux2/Makefile deleted file mode 100644 index 818174e9a..000000000 --- a/src/native/linux/video4linux2/Makefile +++ /dev/null @@ -1,16 +0,0 @@ -JAVA_HOME?=/usr/lib/jvm/java-6-sun - -ARCH=$(shell uname -m | sed -e s/x86_64/-64/ -e s/i.86//) -TARGET=../../../../lib/native/linux$(ARCH)/libjvideo4linux2.so - -CC=gcc -CPPFLAGS=-D_JNI_IMPLEMENTATION_ \ - -fPIC \ - -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux \ - -O2 \ - -Wall -LDFLAGS=-shared -LIBS= - -$(TARGET): net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2.c net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2.h - $(CC) $(CPPFLAGS) $< $(LDFLAGS) -o $@ $(LIBS) diff --git a/src/native/linux/video4linux2/net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2.c b/src/native/linux/video4linux2/net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2.c deleted file mode 100644 index 246623665..000000000 --- a/src/native/linux/video4linux2/net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2.c +++ /dev/null @@ -1,369 +0,0 @@ -/* - * Jitsi, the OpenSource Java VoIP and Instant Messaging client. - * - * Distributable under LGPL license. - * See terms of license at gnu.org. - */ - -#include "net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2.h" - -#include -#include -#include -#include -#include -#include -#include - -#include - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_close - (JNIEnv *jniEnv, jclass clazz, jint fd) -{ - return close(fd); -} - -JNIEXPORT void JNICALL -Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_free - (JNIEnv *jniEnv, jclass clazz, jlong ptr) -{ - free((void *) ptr); -} - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_ioctl - (JNIEnv *jniEnv, jclass clazz, jint fd, jint request, jlong argp) -{ - return ioctl(fd, request, (void *) argp); -} - -JNIEXPORT jlong JNICALL -Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_memcpy - (JNIEnv *jniEnv, jclass clazz, jlong dest, jlong src, jint n) -{ - return (jlong) memcpy((void *) dest, (const void *) src, n); -} - -JNIEXPORT jlong JNICALL -Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_mmap - (JNIEnv *jniEnv, jclass clazz, jlong start, jint length, jint prot, - jint flags, jint fd, jlong offset) -{ - return (jlong) mmap((void *) start, length, prot, flags, fd, offset); -} - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_munmap - (JNIEnv *jniEnv, jclass clazz, jlong start, jint length) -{ - return munmap((void *) start, length); -} - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_open - (JNIEnv *jniEnv, jclass clazz, jstring deviceName, jint flags) -{ - const char *deviceNameChars; - jint fd; - - deviceNameChars - = (const char *) (*jniEnv)->GetStringUTFChars(jniEnv, deviceName, NULL); - if (deviceNameChars) - { - fd = open(deviceNameChars, flags); - (*jniEnv)->ReleaseStringUTFChars(jniEnv, deviceName, deviceNameChars); - } - else - fd = -1; - return fd; -} - -JNIEXPORT jlong JNICALL -Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1buffer_1alloc - (JNIEnv *jniEnv, jclass clazz, jint type) -{ - struct v4l2_buffer *v4l2_buffer; - - v4l2_buffer = malloc(sizeof(struct v4l2_buffer)); - if (v4l2_buffer) - v4l2_buffer->type = type; - return (jlong) v4l2_buffer; -} - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1buffer_1getBytesused - (JNIEnv *jniEnv, jclass clazz, jlong v4l2_buffer) -{ - return ((struct v4l2_buffer *) v4l2_buffer)->bytesused; -} - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1buffer_1getIndex - (JNIEnv *jniEnv, jclass clazz, jlong v4l2_buffer) -{ - return ((struct v4l2_buffer *) v4l2_buffer)->index; -} - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1buffer_1getLength - (JNIEnv *jniEnv, jclass clazz, jlong v4l2_buffer) -{ - return ((struct v4l2_buffer *) v4l2_buffer)->length; -} - -JNIEXPORT jlong JNICALL -Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1buffer_1getMOffset - (JNIEnv *jniEnv, jclass clazz, jlong v4l2_buffer) -{ - return ((struct v4l2_buffer *) v4l2_buffer)->m.offset; -} - -JNIEXPORT void JNICALL -Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1buffer_1setIndex - (JNIEnv *jniEnv, jclass clazz, jlong v4l2_buffer, jint index) -{ - ((struct v4l2_buffer *) v4l2_buffer)->index = index; -} - -JNIEXPORT void JNICALL -Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1buffer_1setMemory - (JNIEnv *jniEnv, jclass clazz, jlong v4l2_buffer, jint memory) -{ - ((struct v4l2_buffer *) v4l2_buffer)->memory = memory; -} - -JNIEXPORT jlong JNICALL -Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1buf_1type_1alloc - (JNIEnv *jniEnv, jclass clazz, jint type) -{ - enum v4l2_buf_type *v4l2_buf_type; - - v4l2_buf_type = malloc(sizeof(enum v4l2_buf_type)); - if (v4l2_buf_type) - (*v4l2_buf_type) = type; - return (jlong) v4l2_buf_type; -} - -JNIEXPORT jlong JNICALL -Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1capability_1alloc - (JNIEnv *jniEnv, jclass clazz) -{ - return (jlong) malloc(sizeof(struct v4l2_capability)); -} - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1capability_1getCapabilities - (JNIEnv *jniEnv, jclass clazz, jlong v4l2_capability) -{ - return ((struct v4l2_capability *) v4l2_capability)->capabilities; -} - -JNIEXPORT jstring JNICALL -Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1capability_1getCard - (JNIEnv *jniEnv, jclass clazz, jlong v4l2_capability) -{ - return - (*jniEnv)->NewStringUTF( - jniEnv, - (const char *) - (((struct v4l2_capability *) v4l2_capability)->card)); -} - -JNIEXPORT jlong JNICALL -Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1format_1alloc - (JNIEnv *jniEnv, jclass clazz, jint type) -{ - struct v4l2_format *v4l2_format; - - v4l2_format = malloc(sizeof(struct v4l2_format)); - if (v4l2_format) - { - v4l2_format->type = type; - if (V4L2_BUF_TYPE_VIDEO_CAPTURE == type) - v4l2_format->fmt.pix.priv = 0; - } - return (jlong) v4l2_format; -} - -JNIEXPORT jlong JNICALL -Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1format_1getFmtPix - (JNIEnv *jniEnv, jclass clazz, jlong v4l2_format) -{ - return (jlong) &(((struct v4l2_format *) v4l2_format)->fmt.pix); -} - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1pix_1format_1getHeight - (JNIEnv *jniEnv, jclass clazz, jlong v4l2_pix_format) -{ - return ((struct v4l2_pix_format *) v4l2_pix_format)->height; -} - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1pix_1format_1getPixelformat - (JNIEnv *jniEnv, jclass clazz, jlong v4l2_pix_format) -{ - return ((struct v4l2_pix_format *) v4l2_pix_format)->pixelformat; -} - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1pix_1format_1getWidth - (JNIEnv *jniEnv, jclass clazz, jlong v4l2_pix_format) -{ - return ((struct v4l2_pix_format *) v4l2_pix_format)->width; -} - -JNIEXPORT void JNICALL -Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1pix_1format_1setBytesperline - (JNIEnv *jniEnv, jclass clazz, jlong v4l2_pix_format, jint bytesperline) -{ - ((struct v4l2_pix_format *) v4l2_pix_format)->bytesperline = bytesperline; -} - -JNIEXPORT void JNICALL -Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1pix_1format_1setField - (JNIEnv *jniEnv, jclass clazz, jlong v4l2_pix_format, jint field) -{ - ((struct v4l2_pix_format *) v4l2_pix_format)->field = field; -} - -JNIEXPORT void JNICALL -Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1pix_1format_1setPixelformat - (JNIEnv *jniEnv, jclass clazz, jlong v4l2_pix_format, jint pixelformat) -{ - ((struct v4l2_pix_format *) v4l2_pix_format)->pixelformat = pixelformat; -} - -JNIEXPORT void JNICALL -Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1pix_1format_1setWidthAndHeight - (JNIEnv *jniEnv, jclass clazz, - jlong v4l2_pix_format, - jint width, jint height) -{ - struct v4l2_pix_format *ptr; - - ptr = (struct v4l2_pix_format *) v4l2_pix_format; - ptr->width = width; - ptr->height = height; -} - -JNIEXPORT jlong JNICALL -Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1requestbuffers_1alloc - (JNIEnv *jniEnv, jclass clazz, jint type) -{ - struct v4l2_requestbuffers *v4l2_requestbuffers; - - v4l2_requestbuffers = malloc(sizeof(struct v4l2_requestbuffers)); - if (v4l2_requestbuffers) - v4l2_requestbuffers->type = type; - return (jlong) v4l2_requestbuffers; -} - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1requestbuffers_1getCount - (JNIEnv *jniEnv, jclass clazz, jlong v4l2_requestbuffers) -{ - return ((struct v4l2_requestbuffers *) v4l2_requestbuffers)->count; -} - -JNIEXPORT void JNICALL -Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1requestbuffers_1setCount - (JNIEnv *jniEnv, jclass clazz, jlong v4l2_requestbuffers, jint count) -{ - ((struct v4l2_requestbuffers *) v4l2_requestbuffers)->count = count; -} - -JNIEXPORT void JNICALL -Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1requestbuffers_1setMemory - (JNIEnv *jniEnv, jclass clazz, jlong v4l2_requestbuffers, jint memory) -{ - ((struct v4l2_requestbuffers *) v4l2_requestbuffers)->memory = memory; -} - -JNIEXPORT jlong JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1streamparm_1alloc - (JNIEnv *jniEnv, jclass clazz, jint type) -{ - struct v4l2_streamparm* v4l2_streamparm = (struct v4l2_streamparm *)malloc(sizeof(struct v4l2_streamparm)); - - if(v4l2_streamparm) - v4l2_streamparm->type = type; - - return (jlong)v4l2_streamparm; -} - -JNIEXPORT void JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1streamparm_1setFps - (JNIEnv *jniEnv, jclass clazz, jlong v4l2_streamparm, jint fps) -{ - ((struct v4l2_streamparm*)v4l2_streamparm)->parm.capture.timeperframe.numerator = 1; - ((struct v4l2_streamparm*)v4l2_streamparm)->parm.capture.timeperframe.denominator = fps; -} - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_VIDIOC_1DQBUF - (JNIEnv *jniEnv, jclass clazz) -{ - return VIDIOC_DQBUF; -} - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_VIDIOC_1G_1FMT - (JNIEnv *jniEnv, jclass clazz) -{ - return VIDIOC_G_FMT; -} - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_VIDIOC_1QBUF - (JNIEnv *jniEnv, jclass clazz) -{ - return VIDIOC_QBUF; -} - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_VIDIOC_1QUERYBUF - (JNIEnv *jniEnv, jclass clazz) -{ - return VIDIOC_QUERYBUF; -} - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_VIDIOC_1QUERYCAP - (JNIEnv *jniEnv, jclass clazz) -{ - return VIDIOC_QUERYCAP; -} - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_VIDIOC_1REQBUFS - (JNIEnv *jniEnv, jclass clazz) -{ - return VIDIOC_REQBUFS; -} - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_VIDIOC_1S_1FMT - (JNIEnv *jniEnv, jclass clazz) -{ - return VIDIOC_S_FMT; -} - -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_VIDIOC_1S_1PARM - (JNIEnv *jniEnv, jclass clazz) -{ - return VIDIOC_S_PARM; -} - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_VIDIOC_1STREAMOFF - (JNIEnv *jniEnv, jclass clazz) -{ - return VIDIOC_STREAMOFF; -} - -JNIEXPORT jint JNICALL -Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_VIDIOC_1STREAMON - (JNIEnv *jniEnv, jclass clazz) -{ - return VIDIOC_STREAMON; -} diff --git a/src/native/linux/video4linux2/net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2.h b/src/native/linux/video4linux2/net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2.h deleted file mode 100644 index 7377b5ce8..000000000 --- a/src/native/linux/video4linux2/net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2.h +++ /dev/null @@ -1,364 +0,0 @@ -/* - * Jitsi, the OpenSource Java VoIP and Instant Messaging client. - * - * Distributable under LGPL license. - * See terms of license at gnu.org. - */ - -/* DO NOT EDIT THIS FILE - it is machine generated */ -#include -/* Header for class net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 */ - -#ifndef _Included_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 -#define _Included_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 -#ifdef __cplusplus -extern "C" { -#endif -/* - * Class: net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 - * Method: close - * Signature: (I)I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_close - (JNIEnv *, jclass, jint); - -/* - * Class: net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 - * Method: free - * Signature: (J)V - */ -JNIEXPORT void JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_free - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 - * Method: ioctl - * Signature: (IIJ)I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_ioctl - (JNIEnv *, jclass, jint, jint, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 - * Method: memcpy - * Signature: (JJI)J - */ -JNIEXPORT jlong JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_memcpy - (JNIEnv *, jclass, jlong, jlong, jint); - -/* - * Class: net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 - * Method: mmap - * Signature: (JIIIIJ)J - */ -JNIEXPORT jlong JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_mmap - (JNIEnv *, jclass, jlong, jint, jint, jint, jint, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 - * Method: munmap - * Signature: (JI)I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_munmap - (JNIEnv *, jclass, jlong, jint); - -/* - * Class: net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 - * Method: open - * Signature: (Ljava/lang/String;I)I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_open - (JNIEnv *, jclass, jstring, jint); - -/* - * Class: net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 - * Method: v4l2_buffer_alloc - * Signature: (I)J - */ -JNIEXPORT jlong JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1buffer_1alloc - (JNIEnv *, jclass, jint); - -/* - * Class: net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 - * Method: v4l2_buffer_getBytesused - * Signature: (J)I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1buffer_1getBytesused - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 - * Method: v4l2_buffer_getIndex - * Signature: (J)I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1buffer_1getIndex - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 - * Method: v4l2_buffer_getLength - * Signature: (J)I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1buffer_1getLength - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 - * Method: v4l2_buffer_getMOffset - * Signature: (J)J - */ -JNIEXPORT jlong JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1buffer_1getMOffset - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 - * Method: v4l2_buffer_setIndex - * Signature: (JI)V - */ -JNIEXPORT void JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1buffer_1setIndex - (JNIEnv *, jclass, jlong, jint); - -/* - * Class: net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 - * Method: v4l2_buffer_setMemory - * Signature: (JI)V - */ -JNIEXPORT void JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1buffer_1setMemory - (JNIEnv *, jclass, jlong, jint); - -/* - * Class: net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 - * Method: v4l2_buf_type_alloc - * Signature: (I)J - */ -JNIEXPORT jlong JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1buf_1type_1alloc - (JNIEnv *, jclass, jint); - -/* - * Class: net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 - * Method: v4l2_capability_alloc - * Signature: ()J - */ -JNIEXPORT jlong JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1capability_1alloc - (JNIEnv *, jclass); - -/* - * Class: net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 - * Method: v4l2_capability_getCapabilities - * Signature: (J)I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1capability_1getCapabilities - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 - * Method: v4l2_capability_getCard - * Signature: (J)Ljava/lang/String; - */ -JNIEXPORT jstring JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1capability_1getCard - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 - * Method: v4l2_format_alloc - * Signature: (I)J - */ -JNIEXPORT jlong JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1format_1alloc - (JNIEnv *, jclass, jint); - -/* - * Class: net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 - * Method: v4l2_format_getFmtPix - * Signature: (J)J - */ -JNIEXPORT jlong JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1format_1getFmtPix - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 - * Method: v4l2_pix_format_getHeight - * Signature: (J)I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1pix_1format_1getHeight - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 - * Method: v4l2_pix_format_getPixelformat - * Signature: (J)I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1pix_1format_1getPixelformat - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 - * Method: v4l2_pix_format_getWidth - * Signature: (J)I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1pix_1format_1getWidth - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 - * Method: v4l2_pix_format_setBytesperline - * Signature: (JI)V - */ -JNIEXPORT void JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1pix_1format_1setBytesperline - (JNIEnv *, jclass, jlong, jint); - -/* - * Class: net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 - * Method: v4l2_pix_format_setField - * Signature: (JI)V - */ -JNIEXPORT void JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1pix_1format_1setField - (JNIEnv *, jclass, jlong, jint); - -/* - * Class: net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 - * Method: v4l2_pix_format_setPixelformat - * Signature: (JI)V - */ -JNIEXPORT void JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1pix_1format_1setPixelformat - (JNIEnv *, jclass, jlong, jint); - -/* - * Class: net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 - * Method: v4l2_pix_format_setWidthAndHeight - * Signature: (JII)V - */ -JNIEXPORT void JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1pix_1format_1setWidthAndHeight - (JNIEnv *, jclass, jlong, jint, jint); - -/* - * Class: net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 - * Method: v4l2_requestbuffers_alloc - * Signature: (I)J - */ -JNIEXPORT jlong JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1requestbuffers_1alloc - (JNIEnv *, jclass, jint); - -/* - * Class: net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 - * Method: v4l2_requestbuffers_getCount - * Signature: (J)I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1requestbuffers_1getCount - (JNIEnv *, jclass, jlong); - -/* - * Class: net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 - * Method: v4l2_requestbuffers_setCount - * Signature: (JI)V - */ -JNIEXPORT void JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1requestbuffers_1setCount - (JNIEnv *, jclass, jlong, jint); - -/* - * Class: net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 - * Method: v4l2_requestbuffers_setMemory - * Signature: (JI)V - */ -JNIEXPORT void JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1requestbuffers_1setMemory - (JNIEnv *, jclass, jlong, jint); - -/* - * Class: net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 - * Method: v4l2_streamparm_alloc - * Signature: (I)J - */ -JNIEXPORT jlong JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1streamparm_1alloc - (JNIEnv *, jclass, jint); - -/* - * Class: net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 - * Method: v4l2_streamparm_setFps - * Signature: (JI)V - */ -JNIEXPORT void JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_v4l2_1streamparm_1setFps - (JNIEnv *, jclass, jlong, jint); - -/* - * Class: net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 - * Method: VIDIOC_DQBUF - * Signature: ()I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_VIDIOC_1DQBUF - (JNIEnv *, jclass); - -/* - * Class: net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 - * Method: VIDIOC_G_FMT - * Signature: ()I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_VIDIOC_1G_1FMT - (JNIEnv *, jclass); - -/* - * Class: net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 - * Method: VIDIOC_QBUF - * Signature: ()I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_VIDIOC_1QBUF - (JNIEnv *, jclass); - -/* - * Class: net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 - * Method: VIDIOC_QUERYBUF - * Signature: ()I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_VIDIOC_1QUERYBUF - (JNIEnv *, jclass); - -/* - * Class: net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 - * Method: VIDIOC_QUERYCAP - * Signature: ()I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_VIDIOC_1QUERYCAP - (JNIEnv *, jclass); - -/* - * Class: net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 - * Method: VIDIOC_REQBUFS - * Signature: ()I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_VIDIOC_1REQBUFS - (JNIEnv *, jclass); - -/* - * Class: net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 - * Method: VIDIOC_S_FMT - * Signature: ()I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_VIDIOC_1S_1FMT - (JNIEnv *, jclass); - -/* - * Class: net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 - * Method: VIDIOC_S_PARM - * Signature: ()I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_VIDIOC_1S_1PARM - (JNIEnv *, jclass); - -/* - * Class: net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 - * Method: VIDIOC_STREAMOFF - * Signature: ()I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_VIDIOC_1STREAMOFF - (JNIEnv *, jclass); - -/* - * Class: net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2 - * Method: VIDIOC_STREAMON - * Signature: ()I - */ -JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_jmfext_media_protocol_video4linux2_Video4Linux2_VIDIOC_1STREAMON - (JNIEnv *, jclass); - -#ifdef __cplusplus -} -#endif -#endif