diff options
author | Lyubomir Marinov <lyubomir.marinov@jitsi.org> | 2010-01-13 17:57:36 +0000 |
---|---|---|
committer | Lyubomir Marinov <lyubomir.marinov@jitsi.org> | 2010-01-13 17:57:36 +0000 |
commit | 23faa28981bb78cc2aece0418284100c017acd6e (patch) | |
tree | d355f70fed47a9c2e068cb81967a1d5f72dbc1af /src/native/macosx | |
parent | 7f86c6aee0bee38f96eb9b6671b5cec1d4c0d56e (diff) | |
download | jitsi-23faa28981bb78cc2aece0418284100c017acd6e.zip jitsi-23faa28981bb78cc2aece0418284100c017acd6e.tar.gz jitsi-23faa28981bb78cc2aece0418284100c017acd6e.tar.bz2 |
Implements a video CaptureDevice which uses QuickTime/QTKit on Mac OS X to provide video capture on Mac OS X Snow Leopard, Java 1.6 on Mac OS X and when CIVIL fails.
Diffstat (limited to 'src/native/macosx')
24 files changed, 1220 insertions, 0 deletions
diff --git a/src/native/macosx/quicktime/common.h b/src/native/macosx/quicktime/common.h new file mode 100644 index 0000000..a0b947c --- /dev/null +++ b/src/native/macosx/quicktime/common.h @@ -0,0 +1,9 @@ +#ifndef _IMPL_NEOMEDIA_QUICKTIME_COMMON_H_ +#define _IMPL_NEOMEDIA_QUICKTIME_COMMON_H_ + +#import <Foundation/NSObject.h> +#import <Foundation/NSString.h> + +id NSObject_performSelector(id obj, NSString *selectorName); + +#endif /* _IMPL_NEOMEDIA_QUICKTIME_COMMON_H_ */ diff --git a/src/native/macosx/quicktime/common.m b/src/native/macosx/quicktime/common.m new file mode 100644 index 0000000..205beb1 --- /dev/null +++ b/src/native/macosx/quicktime/common.m @@ -0,0 +1,20 @@ +#include "common.h" + +#import <Foundation/NSAutoreleasePool.h> +#import <Foundation/NSObject.h> /* NSSelectorFromString */ +#import <Foundation/NSString.h> + +id NSObject_performSelector(id obj, NSString *selectorName) +{ + NSAutoreleasePool *autoreleasePool; + SEL selector; + id ret; + + autoreleasePool = [[NSAutoreleasePool alloc] init]; + + selector = NSSelectorFromString(selectorName); + ret = [obj performSelector:selector]; + + [autoreleasePool release]; + return ret; +} diff --git a/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_CVPixelBuffer.h b/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_CVPixelBuffer.h new file mode 100644 index 0000000..434bc32 --- /dev/null +++ b/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_CVPixelBuffer.h @@ -0,0 +1,21 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include <jni.h> +/* Header for class net_java_sip_communicator_impl_neomedia_quicktime_CVPixelBuffer */ + +#ifndef _Included_net_java_sip_communicator_impl_neomedia_quicktime_CVPixelBuffer +#define _Included_net_java_sip_communicator_impl_neomedia_quicktime_CVPixelBuffer +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: net_java_sip_communicator_impl_neomedia_quicktime_CVPixelBuffer + * Method: getBytes + * Signature: (J)[B + */ +JNIEXPORT jbyteArray JNICALL Java_net_java_sip_communicator_impl_neomedia_quicktime_CVPixelBuffer_getBytes + (JNIEnv *, jclass, jlong); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_CVPixelBuffer.m b/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_CVPixelBuffer.m new file mode 100644 index 0000000..4d27bca --- /dev/null +++ b/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_CVPixelBuffer.m @@ -0,0 +1,31 @@ +#include "net_java_sip_communicator_impl_neomedia_quicktime_CVPixelBuffer.h" + +#import <CoreVideo/CVPixelBuffer.h> + +JNIEXPORT jbyteArray JNICALL +Java_net_java_sip_communicator_impl_neomedia_quicktime_CVPixelBuffer_getBytes + (JNIEnv *jniEnv, jclass clazz, jlong ptr) +{ + CVPixelBufferRef pixelBuffer; + size_t byteCount; + jbyteArray bytes; + + pixelBuffer = (CVPixelBufferRef) ptr; + + byteCount + = CVPixelBufferGetBytesPerRow(pixelBuffer) + * CVPixelBufferGetHeight(pixelBuffer); + bytes = (*jniEnv)->NewByteArray(jniEnv, byteCount); + if (!bytes) + return NULL; + + if (kCVReturnSuccess == CVPixelBufferLockBaseAddress(pixelBuffer, 0)) + { + jbyte *cBytes; + + cBytes = CVPixelBufferGetBaseAddress(pixelBuffer); + (*jniEnv)->SetByteArrayRegion(jniEnv, bytes, 0, byteCount, cBytes); + CVPixelBufferUnlockBaseAddress(pixelBuffer, 0); + } + return bytes; +} diff --git a/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_CVPixelBufferAttributeKey.h b/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_CVPixelBufferAttributeKey.h new file mode 100644 index 0000000..73e69fe --- /dev/null +++ b/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_CVPixelBufferAttributeKey.h @@ -0,0 +1,37 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include <jni.h> +/* Header for class net_java_sip_communicator_impl_neomedia_quicktime_CVPixelBufferAttributeKey */ + +#ifndef _Included_net_java_sip_communicator_impl_neomedia_quicktime_CVPixelBufferAttributeKey +#define _Included_net_java_sip_communicator_impl_neomedia_quicktime_CVPixelBufferAttributeKey +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: net_java_sip_communicator_impl_neomedia_quicktime_CVPixelBufferAttributeKey + * Method: kCVPixelBufferHeightKey + * Signature: ()J + */ +JNIEXPORT jlong JNICALL Java_net_java_sip_communicator_impl_neomedia_quicktime_CVPixelBufferAttributeKey_kCVPixelBufferHeightKey + (JNIEnv *, jclass); + +/* + * Class: net_java_sip_communicator_impl_neomedia_quicktime_CVPixelBufferAttributeKey + * Method: kCVPixelBufferPixelFormatTypeKey + * Signature: ()J + */ +JNIEXPORT jlong JNICALL Java_net_java_sip_communicator_impl_neomedia_quicktime_CVPixelBufferAttributeKey_kCVPixelBufferPixelFormatTypeKey + (JNIEnv *, jclass); + +/* + * Class: net_java_sip_communicator_impl_neomedia_quicktime_CVPixelBufferAttributeKey + * Method: kCVPixelBufferWidthKey + * Signature: ()J + */ +JNIEXPORT jlong JNICALL Java_net_java_sip_communicator_impl_neomedia_quicktime_CVPixelBufferAttributeKey_kCVPixelBufferWidthKey + (JNIEnv *, jclass); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_CVPixelBufferAttributeKey.m b/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_CVPixelBufferAttributeKey.m new file mode 100644 index 0000000..687416c --- /dev/null +++ b/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_CVPixelBufferAttributeKey.m @@ -0,0 +1,24 @@ +#include "net_java_sip_communicator_impl_neomedia_quicktime_CVPixelBufferAttributeKey.h" + +#import <CoreVideo/CVPixelBuffer.h> + +JNIEXPORT jlong JNICALL +Java_net_java_sip_communicator_impl_neomedia_quicktime_CVPixelBufferAttributeKey_kCVPixelBufferHeightKey + (JNIEnv *jniEnv, jclass clazz) +{ + return (jlong) kCVPixelBufferHeightKey; +} + +JNIEXPORT jlong JNICALL +Java_net_java_sip_communicator_impl_neomedia_quicktime_CVPixelBufferAttributeKey_kCVPixelBufferPixelFormatTypeKey + (JNIEnv *jniEnv, jclass clazz) +{ + return (jlong) kCVPixelBufferPixelFormatTypeKey; +} + +JNIEXPORT jlong JNICALL +Java_net_java_sip_communicator_impl_neomedia_quicktime_CVPixelBufferAttributeKey_kCVPixelBufferWidthKey + (JNIEnv *jniEnv, jclass clazz) +{ + return (jlong) kCVPixelBufferWidthKey; +} diff --git a/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_NSDictionary.h b/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_NSDictionary.h new file mode 100644 index 0000000..8698e47 --- /dev/null +++ b/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_NSDictionary.h @@ -0,0 +1,21 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include <jni.h> +/* Header for class net_java_sip_communicator_impl_neomedia_quicktime_NSDictionary */ + +#ifndef _Included_net_java_sip_communicator_impl_neomedia_quicktime_NSDictionary +#define _Included_net_java_sip_communicator_impl_neomedia_quicktime_NSDictionary +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: net_java_sip_communicator_impl_neomedia_quicktime_NSDictionary + * Method: intForKey + * Signature: (JJ)I + */ +JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_quicktime_NSDictionary_intForKey + (JNIEnv *, jclass, jlong, jlong); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_NSDictionary.m b/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_NSDictionary.m new file mode 100644 index 0000000..c81d081 --- /dev/null +++ b/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_NSDictionary.m @@ -0,0 +1,24 @@ +#include "net_java_sip_communicator_impl_neomedia_quicktime_NSDictionary.h" + +#import <Foundation/NSAutoreleasePool.h> +#import <Foundation/NSDictionary.h> +#import <Foundation/NSValue.h> + +JNIEXPORT jint JNICALL +Java_net_java_sip_communicator_impl_neomedia_quicktime_NSDictionary_intForKey + (JNIEnv *jniEnv, jclass clazz, jlong ptr, jlong key) +{ + NSDictionary *dictionary; + NSAutoreleasePool *autoreleasePool; + NSNumber *value; + jint jvalue; + + dictionary = (NSDictionary *) ptr; + autoreleasePool = [[NSAutoreleasePool alloc] init]; + + value = [dictionary objectForKey:(id)key]; + jvalue = value ? [value intValue] : 0; + + [autoreleasePool release]; + return jvalue; +} diff --git a/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_NSMutableDictionary.h b/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_NSMutableDictionary.h new file mode 100644 index 0000000..08038c7 --- /dev/null +++ b/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_NSMutableDictionary.h @@ -0,0 +1,29 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include <jni.h> +/* Header for class net_java_sip_communicator_impl_neomedia_quicktime_NSMutableDictionary */ + +#ifndef _Included_net_java_sip_communicator_impl_neomedia_quicktime_NSMutableDictionary +#define _Included_net_java_sip_communicator_impl_neomedia_quicktime_NSMutableDictionary +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: net_java_sip_communicator_impl_neomedia_quicktime_NSMutableDictionary + * Method: allocAndInit + * Signature: ()J + */ +JNIEXPORT jlong JNICALL Java_net_java_sip_communicator_impl_neomedia_quicktime_NSMutableDictionary_allocAndInit + (JNIEnv *, jclass); + +/* + * Class: net_java_sip_communicator_impl_neomedia_quicktime_NSMutableDictionary + * Method: setIntForKey + * Signature: (JIJ)V + */ +JNIEXPORT void JNICALL Java_net_java_sip_communicator_impl_neomedia_quicktime_NSMutableDictionary_setIntForKey + (JNIEnv *, jclass, jlong, jint, jlong); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_NSMutableDictionary.m b/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_NSMutableDictionary.m new file mode 100644 index 0000000..6276c30 --- /dev/null +++ b/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_NSMutableDictionary.m @@ -0,0 +1,35 @@ +#include "net_java_sip_communicator_impl_neomedia_quicktime_NSMutableDictionary.h" + +#import <Foundation/NSAutoreleasePool.h> +#import <Foundation/NSDictionary.h> +#import <Foundation/NSValue.h> + +JNIEXPORT jlong JNICALL +Java_net_java_sip_communicator_impl_neomedia_quicktime_NSMutableDictionary_allocAndInit + (JNIEnv *jniEnv, jclass clazz) +{ + NSAutoreleasePool *autoreleasePool; + NSMutableDictionary *mutableDictionary; + + autoreleasePool = [[NSAutoreleasePool alloc] init]; + + mutableDictionary = [[NSMutableDictionary alloc] init]; + + [autoreleasePool release]; + return (jlong) mutableDictionary; +} + +JNIEXPORT void JNICALL +Java_net_java_sip_communicator_impl_neomedia_quicktime_NSMutableDictionary_setIntForKey + (JNIEnv *jniEnv, jclass clazz, jlong ptr, jint value, jlong key) +{ + NSMutableDictionary *mutableDictionary; + NSAutoreleasePool *autoreleasePool; + + mutableDictionary = (NSMutableDictionary *) ptr; + autoreleasePool = [[NSAutoreleasePool alloc] init]; + + [mutableDictionary setObject:[NSNumber numberWithInt:value] forKey:(id)key]; + + [autoreleasePool release]; +} diff --git a/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_NSObject.h b/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_NSObject.h new file mode 100644 index 0000000..19a0fb5 --- /dev/null +++ b/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_NSObject.h @@ -0,0 +1,29 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include <jni.h> +/* Header for class net_java_sip_communicator_impl_neomedia_quicktime_NSObject */ + +#ifndef _Included_net_java_sip_communicator_impl_neomedia_quicktime_NSObject +#define _Included_net_java_sip_communicator_impl_neomedia_quicktime_NSObject +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: net_java_sip_communicator_impl_neomedia_quicktime_NSObject + * Method: release + * Signature: (J)V + */ +JNIEXPORT void JNICALL Java_net_java_sip_communicator_impl_neomedia_quicktime_NSObject_release + (JNIEnv *, jclass, jlong); + +/* + * Class: net_java_sip_communicator_impl_neomedia_quicktime_NSObject + * Method: retain + * Signature: (J)V + */ +JNIEXPORT void JNICALL Java_net_java_sip_communicator_impl_neomedia_quicktime_NSObject_retain + (JNIEnv *, jclass, jlong); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_NSObject.m b/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_NSObject.m new file mode 100644 index 0000000..fda1d3d --- /dev/null +++ b/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_NSObject.m @@ -0,0 +1,17 @@ +#include "net_java_sip_communicator_impl_neomedia_quicktime_NSObject.h" + +#include "common.h" + +JNIEXPORT void JNICALL +Java_net_java_sip_communicator_impl_neomedia_quicktime_NSObject_release + (JNIEnv *jniEnv, jclass clazz, jlong ptr) +{ + NSObject_performSelector((id) ptr, @"release"); +} + +JNIEXPORT void JNICALL +Java_net_java_sip_communicator_impl_neomedia_quicktime_NSObject_retain + (JNIEnv *jniEnv, jclass clazz, jlong ptr) +{ + NSObject_performSelector((id) ptr, @"retain"); +} diff --git a/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput.h b/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput.h new file mode 100644 index 0000000..23006f3 --- /dev/null +++ b/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput.h @@ -0,0 +1,53 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include <jni.h> +/* Header for class net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput */ + +#ifndef _Included_net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput +#define _Included_net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput + * Method: allocAndInit + * Signature: ()J + */ +JNIEXPORT jlong JNICALL Java_net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput_allocAndInit + (JNIEnv *, jclass); + +/* + * Class: net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput + * Method: pixelBufferAttributes + * Signature: (J)J + */ +JNIEXPORT jlong JNICALL Java_net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput_pixelBufferAttributes + (JNIEnv *, jclass, jlong); + +/* + * Class: net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput + * Method: setAutomaticallyDropsLateVideoFrames + * Signature: (JZ)V + */ +JNIEXPORT void JNICALL Java_net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput_setAutomaticallyDropsLateVideoFrames + (JNIEnv *, jclass, jlong, jboolean); + +/* + * Class: net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput + * Method: setDelegate + * Signature: (JLnet/java/sip/communicator/impl/neomedia/quicktime/QTCaptureDecompressedVideoOutput/Delegate;)V + */ +JNIEXPORT void JNICALL Java_net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput_setDelegate + (JNIEnv *, jclass, jlong, jobject); + +/* + * Class: net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput + * Method: setPixelBufferAttributes + * Signature: (JJ)V + */ +JNIEXPORT void JNICALL Java_net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput_setPixelBufferAttributes + (JNIEnv *, jclass, jlong, jlong); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput.m b/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput.m new file mode 100644 index 0000000..6f7f66e --- /dev/null +++ b/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput.m @@ -0,0 +1,214 @@ +#include "net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput.h" + +#include <stdio.h> + +#import <CoreVideo/CVImageBuffer.h> +#import <Foundation/NSAutoreleasePool.h> +#import <Foundation/NSDictionary.h> +#import <Foundation/NSObject.h> +#import <QTKit/QTCaptureDecompressedVideoOutput.h> +#import <QTKit/QTCaptureConnection.h> +#import <QTKit/QTCaptureOutput.h> +#import <QTKit/QTSampleBuffer.h> + +@interface QTCaptureDecompressedVideoOutputDelegate : NSObject +{ +@private + jobject delegate; + JavaVM *vm; +} + +- (void)captureOutput:(QTCaptureOutput *)captureOutput + didOutputVideoFrame:(CVImageBufferRef *)videoFrame + withSampleBuffer:(QTSampleBuffer *)sampleBuffer + fromConnection:(QTCaptureConnection *)connection; +- (void)dealloc; +- (id)init; +- (void)setDelegate:(jobject)delegate inJNIEnv:(JNIEnv *)jniEnv; + +@end + +JNIEXPORT jlong JNICALL +Java_net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput_allocAndInit + (JNIEnv *jniEnv, jclass clazz) +{ + NSAutoreleasePool *autoreleasePool; + QTCaptureDecompressedVideoOutput *captureDecompressedVideoOutput; + + autoreleasePool = [[NSAutoreleasePool alloc] init]; + + captureDecompressedVideoOutput + = [[QTCaptureDecompressedVideoOutput alloc] init]; + + [autoreleasePool release]; + return (jlong) captureDecompressedVideoOutput; +} + +JNIEXPORT jlong JNICALL +Java_net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput_pixelBufferAttributes + (JNIEnv *jniEnv, jclass clazz, jlong ptr) +{ + QTCaptureDecompressedVideoOutput *captureDecompressedVideoOutput; + NSAutoreleasePool *autoreleasePool; + NSDictionary *pixelBufferAttributes; + + captureDecompressedVideoOutput = (QTCaptureDecompressedVideoOutput *) ptr; + autoreleasePool = [[NSAutoreleasePool alloc] init]; + + pixelBufferAttributes + = [captureDecompressedVideoOutput pixelBufferAttributes]; + if (pixelBufferAttributes) + [pixelBufferAttributes retain]; + + [autoreleasePool release]; + return (jlong) pixelBufferAttributes; +} + +JNIEXPORT void JNICALL +Java_net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput_setAutomaticallyDropsLateVideoFrames + (JNIEnv *jniEnv, jclass clazz, jlong ptr, + jboolean automaticallyDropsLateVideoFrames) +{ + QTCaptureDecompressedVideoOutput *captureDecompressedVideoOutput; + NSAutoreleasePool *autoreleasePool; + + captureDecompressedVideoOutput = (QTCaptureDecompressedVideoOutput *) ptr; + autoreleasePool = [[NSAutoreleasePool alloc] init]; + + [captureDecompressedVideoOutput + setAutomaticallyDropsLateVideoFrames: + ((JNI_TRUE == automaticallyDropsLateVideoFrames) ? YES : NO)]; + + [autoreleasePool release]; +} + +JNIEXPORT void JNICALL +Java_net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput_setDelegate + (JNIEnv *jniEnv, jclass clazz, jlong ptr, jobject delegate) +{ + QTCaptureDecompressedVideoOutput *captureDecompressedVideoOutput; + NSAutoreleasePool *autoreleasePool; + QTCaptureDecompressedVideoOutputDelegate *oDelegate; + id oPrevDelegate; + + captureDecompressedVideoOutput = (QTCaptureDecompressedVideoOutput *) ptr; + autoreleasePool = [[NSAutoreleasePool alloc] init]; + + if (delegate) + { + oDelegate = [[QTCaptureDecompressedVideoOutputDelegate alloc] init]; + [oDelegate setDelegate:delegate inJNIEnv:jniEnv]; + } + else + oDelegate = nil; + oPrevDelegate = [captureDecompressedVideoOutput delegate]; + if (oDelegate != oPrevDelegate) + { + [captureDecompressedVideoOutput setDelegate:oDelegate]; + if (oPrevDelegate) + [oPrevDelegate release]; + } + + [autoreleasePool release]; +} + +JNIEXPORT void JNICALL +Java_net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput_setPixelBufferAttributes + (JNIEnv *jniEnv, jclass clazz, jlong ptr, jlong pixelBufferAttributesPtr) +{ + QTCaptureDecompressedVideoOutput *captureDecompressedVideoOutput; + NSDictionary *pixelBufferAttributes; + NSAutoreleasePool *autoreleasePool; + + captureDecompressedVideoOutput = (QTCaptureDecompressedVideoOutput *) ptr; + pixelBufferAttributes = (NSDictionary *) pixelBufferAttributesPtr; + autoreleasePool = [[NSAutoreleasePool alloc] init]; + + [captureDecompressedVideoOutput + setPixelBufferAttributes:pixelBufferAttributes]; + + [autoreleasePool release]; +} + +@implementation QTCaptureDecompressedVideoOutputDelegate + +- (void)captureOutput:(QTCaptureOutput *)captureOutput + didOutputVideoFrame:(CVImageBufferRef *)videoFrame + withSampleBuffer:(QTSampleBuffer *)sampleBuffer + fromConnection:(QTCaptureConnection *)connection; +{ + jobject delegate; + JavaVM *vm; + JNIEnv *jniEnv; + jclass delegateClass; + + delegate = self->delegate; + if (!delegate) + return; + + vm = self->vm; + if (0 != (*vm)->AttachCurrentThreadAsDaemon(vm, &jniEnv, NULL)) + return; + + delegateClass = (*jniEnv)->GetObjectClass(jniEnv, delegate); + if (delegateClass) + { + jmethodID didOutputVideoFrameWithSampleBufferMethodID; + + didOutputVideoFrameWithSampleBufferMethodID + = (*jniEnv) + ->GetMethodID( + jniEnv, + delegateClass, + "outputVideoFrameWithSampleBuffer", + "(JJ)V"); + if (didOutputVideoFrameWithSampleBufferMethodID) + (*jniEnv) + ->CallVoidMethod( + jniEnv, + delegate, + didOutputVideoFrameWithSampleBufferMethodID, + (jlong) videoFrame, + (jlong) sampleBuffer); + } + (*jniEnv)->ExceptionClear(jniEnv); +} + +- (void)dealloc +{ + [self setDelegate:NULL inJNIEnv:NULL]; + [super dealloc]; +} + +- (id)init +{ + if ((self = [super init])) + { + self->delegate = NULL; + self->vm = NULL; + } + return self; +} + +- (void)setDelegate:(jobject) delegate inJNIEnv:(JNIEnv *)jniEnv +{ + if (self->delegate) + { + if (!jniEnv) + (*(self->vm))->AttachCurrentThread(self->vm, &jniEnv, NULL); + (*jniEnv)->DeleteGlobalRef(jniEnv, self->delegate); + self->delegate = NULL; + self->vm = NULL; + } + if (delegate) + { + delegate = (*jniEnv)->NewGlobalRef(jniEnv, delegate); + if (delegate) + { + (*jniEnv)->GetJavaVM(jniEnv, &(self->vm)); + self->delegate = delegate; + } + } +} + +@end diff --git a/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDevice.h b/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDevice.h new file mode 100644 index 0000000..ff47d37 --- /dev/null +++ b/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDevice.h @@ -0,0 +1,69 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include <jni.h> +/* Header for class net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDevice */ + +#ifndef _Included_net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDevice +#define _Included_net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDevice +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDevice + * Method: close + * Signature: (J)V + */ +JNIEXPORT void JNICALL Java_net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDevice_close + (JNIEnv *, jclass, jlong); + +/* + * Class: net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDevice + * Method: formatDescriptions + * Signature: (J)[J + */ +JNIEXPORT jlongArray JNICALL Java_net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDevice_formatDescriptions + (JNIEnv *, jclass, jlong); + +/* + * Class: net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDevice + * Method: inputDevicesWithMediaType + * Signature: (Ljava/lang/String;)[J + */ +JNIEXPORT jlongArray JNICALL Java_net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDevice_inputDevicesWithMediaType + (JNIEnv *, jclass, jstring); + +/* + * Class: net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDevice + * Method: isConnected + * Signature: (J)Z + */ +JNIEXPORT jboolean JNICALL Java_net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDevice_isConnected + (JNIEnv *, jclass, jlong); + +/* + * Class: net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDevice + * Method: localizedDisplayName + * Signature: (J)Ljava/lang/String; + */ +JNIEXPORT jstring JNICALL Java_net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDevice_localizedDisplayName + (JNIEnv *, jclass, jlong); + +/* + * Class: net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDevice + * Method: open + * Signature: (J)Z + */ +JNIEXPORT jboolean JNICALL Java_net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDevice_open + (JNIEnv *, jclass, jlong); + +/* + * Class: net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDevice + * Method: uniqueID + * Signature: (J)Ljava/lang/String; + */ +JNIEXPORT jstring JNICALL Java_net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDevice_uniqueID + (JNIEnv *, jclass, jlong); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDevice.m b/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDevice.m new file mode 100644 index 0000000..bf070e0 --- /dev/null +++ b/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDevice.m @@ -0,0 +1,196 @@ +#include "net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDevice.h" + +#include "common.h" + +#include <string.h> + +#import <Foundation/NSArray.h> +#import <Foundation/NSAutoreleasePool.h> +#import <Foundation/NSError.h> +#import <Foundation/NSObject.h> /* NSSelectorFromString */ +#import <Foundation/NSString.h> +#import <QTKit/QTCaptureDevice.h> +#import <QTKit/QTFormatDescription.h> +#import <QTKit/QTMedia.h> + +jstring QTCaptureDevice_getString(JNIEnv *, jlong, NSString *); +NSString * QTCaptureDevice_jstringToMediaType(JNIEnv *, jobject); +jlongArray QTCaptureDevice_nsArrayToJlongArray(JNIEnv *, NSArray *); + +JNIEXPORT void JNICALL +Java_net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDevice_close + (JNIEnv *jniEnv, jclass clazz, jlong ptr) +{ + NSObject_performSelector((id) ptr, @"close"); +} + +JNIEXPORT jlongArray JNICALL +Java_net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDevice_formatDescriptions + (JNIEnv *jniEnv, jclass clazz, jlong ptr) +{ + QTCaptureDevice *captureDevice; + NSAutoreleasePool *autoreleasePool; + NSArray *formatDescriptions; + jlongArray formatDescriptionPtrs; + + captureDevice = (QTCaptureDevice *) ptr; + autoreleasePool = [[NSAutoreleasePool alloc] init]; + + formatDescriptions = [captureDevice formatDescriptions]; + formatDescriptionPtrs + = QTCaptureDevice_nsArrayToJlongArray(jniEnv, formatDescriptions); + + [autoreleasePool release]; + return formatDescriptionPtrs; +} + +JNIEXPORT jlongArray JNICALL +Java_net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDevice_inputDevicesWithMediaType + (JNIEnv *jniEnv, jclass clazz, jstring mediaType) +{ + NSAutoreleasePool *autoreleasePool; + NSArray *inputDevices; + jlongArray inputDevicePtrs; + + autoreleasePool = [[NSAutoreleasePool alloc] init]; + + inputDevices + = [QTCaptureDevice + inputDevicesWithMediaType: + QTCaptureDevice_jstringToMediaType(jniEnv, mediaType)]; + inputDevicePtrs = QTCaptureDevice_nsArrayToJlongArray(jniEnv, inputDevices); + + [autoreleasePool release]; + return inputDevicePtrs; +} + +JNIEXPORT jboolean JNICALL +Java_net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDevice_isConnected + (JNIEnv *jniEnv, jclass clazz, jlong ptr) +{ + return + (YES == (BOOL) NSObject_performSelector((id) ptr, @"isConnected")) + ? JNI_TRUE + : JNI_FALSE; +} + +JNIEXPORT jstring JNICALL +Java_net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDevice_localizedDisplayName + (JNIEnv *jniEnv, jclass clazz, jlong ptr) +{ + return QTCaptureDevice_getString (jniEnv, ptr, @"localizedDisplayName"); +} + +JNIEXPORT jboolean JNICALL +Java_net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDevice_open + (JNIEnv *jniEnv, jclass clazz, jlong ptr) +{ + QTCaptureDevice *captureDevice; + NSAutoreleasePool *autoreleasePool; + BOOL ret; + NSError *error; + + captureDevice = (QTCaptureDevice *) ptr; + autoreleasePool = [[NSAutoreleasePool alloc] init]; + + ret = [captureDevice open:&error]; + + [autoreleasePool release]; + return (YES == ret) ? JNI_TRUE : JNI_FALSE; +} + +JNIEXPORT jstring JNICALL +Java_net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDevice_uniqueID + (JNIEnv *jniEnv, jclass clazz, jlong ptr) +{ + return QTCaptureDevice_getString (jniEnv, ptr, @"uniqueID"); +} + +jstring +QTCaptureDevice_getString(JNIEnv *jniEnv, jlong ptr, NSString *selectorName) +{ + id obj; + NSAutoreleasePool *autoreleasePool; + SEL selector; + NSString *str; + jstring jstr; + + obj = (id) ptr; + autoreleasePool = [[NSAutoreleasePool alloc] init]; + + selector = NSSelectorFromString(selectorName); + if (selector) + { + str = [obj performSelector:selector]; + jstr = str ? (*jniEnv)->NewStringUTF(jniEnv, [str UTF8String]) : NULL; + } + else + jstr = NULL; + + [autoreleasePool release]; + return jstr; +} + +NSString * +QTCaptureDevice_jstringToMediaType(JNIEnv *jniEnv, jstring str) +{ + const char *cstr; + NSString *mediaType; + + cstr = (const char *) (*jniEnv)->GetStringUTFChars (jniEnv, str, NULL); + if (cstr) + { + if (0 == strcmp ("Muxed", cstr)) + mediaType = QTMediaTypeMuxed; + else if (0 == strcmp ("Sound", cstr)) + mediaType = QTMediaTypeSound; + else if (0 == strcmp ("Video", cstr)) + mediaType = QTMediaTypeVideo; + else + mediaType = nil; + (*jniEnv)->ReleaseStringUTFChars (jniEnv, str, cstr); + } + else + mediaType = nil; + return mediaType; +} + +jlongArray +QTCaptureDevice_nsArrayToJlongArray(JNIEnv *jniEnv, NSArray *oArray) +{ + jlongArray jArray; + + if (oArray) + { + NSUInteger count; + + count = [oArray count]; + jArray = (*jniEnv)->NewLongArray(jniEnv, count); + if (jArray) + { + NSUInteger i; + + for (i = 0; i < count; i++) + { + id obj; + jlong ptr; + + obj = [oArray objectAtIndex:i]; + ptr = (jlong) obj; + (*jniEnv)->SetLongArrayRegion(jniEnv, jArray, i, 1, &ptr); + [obj retain]; + if ((*jniEnv)->ExceptionCheck(jniEnv)) + { + NSUInteger j; + + for (j = 0; j < i; j++) + [[oArray objectAtIndex:j] release]; + break; + } + } + } + } + else + jArray = NULL; + return jArray; +} diff --git a/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDeviceInput.h b/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDeviceInput.h new file mode 100644 index 0000000..c20b878 --- /dev/null +++ b/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDeviceInput.h @@ -0,0 +1,21 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include <jni.h> +/* Header for class net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDeviceInput */ + +#ifndef _Included_net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDeviceInput +#define _Included_net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDeviceInput +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDeviceInput + * Method: deviceInputWithDevice + * Signature: (J)J + */ +JNIEXPORT jlong JNICALL Java_net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDeviceInput_deviceInputWithDevice + (JNIEnv *, jclass, jlong); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDeviceInput.m b/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDeviceInput.m new file mode 100644 index 0000000..596171f --- /dev/null +++ b/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDeviceInput.m @@ -0,0 +1,31 @@ +#include "net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDeviceInput.h" + +#import <Foundation/NSException.h> +#import <QTKit/QTCaptureDevice.h> +#import <QTKit/QTCaptureDeviceInput.h> + +JNIEXPORT jlong JNICALL +Java_net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureDeviceInput_deviceInputWithDevice + (JNIEnv *jniEnv, jclass clazz, jlong devicePtr) +{ + QTCaptureDevice *device; + NSAutoreleasePool *autoreleasePool; + id deviceInput; + + device = (QTCaptureDevice *) devicePtr; + autoreleasePool = [[NSAutoreleasePool alloc] init]; + + @try + { + deviceInput = [QTCaptureDeviceInput deviceInputWithDevice:device]; + } + @catch (NSException *ex) + { + deviceInput = nil; + } + if (deviceInput) + [deviceInput retain]; + + [autoreleasePool release]; + return (jlong) deviceInput; +} diff --git a/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureSession.h b/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureSession.h new file mode 100644 index 0000000..34c1a6d --- /dev/null +++ b/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureSession.h @@ -0,0 +1,53 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include <jni.h> +/* Header for class net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureSession */ + +#ifndef _Included_net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureSession +#define _Included_net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureSession +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureSession + * Method: addInput + * Signature: (JJ)Z + */ +JNIEXPORT jboolean JNICALL Java_net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureSession_addInput + (JNIEnv *, jclass, jlong, jlong); + +/* + * Class: net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureSession + * Method: addOutput + * Signature: (JJ)Z + */ +JNIEXPORT jboolean JNICALL Java_net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureSession_addOutput + (JNIEnv *, jclass, jlong, jlong); + +/* + * Class: net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureSession + * Method: allocAndInit + * Signature: ()J + */ +JNIEXPORT jlong JNICALL Java_net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureSession_allocAndInit + (JNIEnv *, jclass); + +/* + * Class: net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureSession + * Method: startRunning + * Signature: (J)V + */ +JNIEXPORT void JNICALL Java_net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureSession_startRunning + (JNIEnv *, jclass, jlong); + +/* + * Class: net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureSession + * Method: stopRunning + * Signature: (J)V + */ +JNIEXPORT void JNICALL Java_net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureSession_stopRunning + (JNIEnv *, jclass, jlong); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureSession.m b/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureSession.m new file mode 100644 index 0000000..6719d68 --- /dev/null +++ b/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureSession.m @@ -0,0 +1,78 @@ +#include "net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureSession.h" + +#include "common.h" + +#import <Foundation/NSAutoreleasePool.h> +#import <Foundation/NSError.h> +#import <QTKit/QTCaptureInput.h> +#import <QTKit/QTCaptureOutput.h> +#import <QTKit/QTCaptureSession.h> + +JNIEXPORT jboolean JNICALL +Java_net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureSession_addInput + (JNIEnv *jniEnv, jclass clazz, jlong ptr, jlong inputPtr) +{ + QTCaptureSession *captureSession; + QTCaptureInput *input; + NSAutoreleasePool *autoreleasePool; + BOOL ret; + NSError *error; + + captureSession = (QTCaptureSession *) ptr; + input = (QTCaptureInput *) inputPtr; + autoreleasePool = [[NSAutoreleasePool alloc] init]; + + ret = [captureSession addInput:input error:&error]; + + [autoreleasePool release]; + return (YES == ret) ? JNI_TRUE : JNI_FALSE; +} + +JNIEXPORT jboolean JNICALL +Java_net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureSession_addOutput + (JNIEnv *jniEnv, jclass clazz, jlong ptr, jlong outputPtr) +{ + QTCaptureSession *captureSession; + QTCaptureOutput *output; + NSAutoreleasePool *autoreleasePool; + BOOL ret; + NSError *error; + + captureSession = (QTCaptureSession *) ptr; + output = (QTCaptureOutput *) outputPtr; + autoreleasePool = [[NSAutoreleasePool alloc] init]; + + ret = [captureSession addOutput:output error:&error]; + + [autoreleasePool release]; + return (YES == ret) ? JNI_TRUE : JNI_FALSE; +} + +JNIEXPORT jlong JNICALL +Java_net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureSession_allocAndInit + (JNIEnv *jniEnv, jclass clazz) +{ + NSAutoreleasePool *autoreleasePool; + QTCaptureSession *captureSession; + + autoreleasePool = [[NSAutoreleasePool alloc] init]; + + captureSession = [[QTCaptureSession alloc] init]; + + [autoreleasePool release]; + return (jlong) captureSession; +} + +JNIEXPORT void JNICALL +Java_net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureSession_startRunning + (JNIEnv *jniEnv, jclass clazz, jlong ptr) +{ + NSObject_performSelector((id) ptr, @"startRunning"); +} + +JNIEXPORT void JNICALL +Java_net_java_sip_communicator_impl_neomedia_quicktime_QTCaptureSession_stopRunning + (JNIEnv *jniEnv, jclass clazz, jlong ptr) +{ + NSObject_performSelector((id) ptr, @"stopRunning"); +} diff --git a/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_QTFormatDescription.h b/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_QTFormatDescription.h new file mode 100644 index 0000000..e7fd08d --- /dev/null +++ b/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_QTFormatDescription.h @@ -0,0 +1,29 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include <jni.h> +/* Header for class net_java_sip_communicator_impl_neomedia_quicktime_QTFormatDescription */ + +#ifndef _Included_net_java_sip_communicator_impl_neomedia_quicktime_QTFormatDescription +#define _Included_net_java_sip_communicator_impl_neomedia_quicktime_QTFormatDescription +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: net_java_sip_communicator_impl_neomedia_quicktime_QTFormatDescription + * Method: sizeForKey + * Signature: (JLjava/lang/String;)Ljava/awt/Dimension; + */ +JNIEXPORT jobject JNICALL Java_net_java_sip_communicator_impl_neomedia_quicktime_QTFormatDescription_sizeForKey + (JNIEnv *, jclass, jlong, jstring); + +/* + * Class: net_java_sip_communicator_impl_neomedia_quicktime_QTFormatDescription + * Method: VideoEncodedPixelsSizeAttribute + * Signature: ()Ljava/lang/String; + */ +JNIEXPORT jstring JNICALL Java_net_java_sip_communicator_impl_neomedia_quicktime_QTFormatDescription_VideoEncodedPixelsSizeAttribute + (JNIEnv *, jclass); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_QTFormatDescription.m b/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_QTFormatDescription.m new file mode 100644 index 0000000..4140681 --- /dev/null +++ b/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_QTFormatDescription.m @@ -0,0 +1,89 @@ +#include "net_java_sip_communicator_impl_neomedia_quicktime_QTFormatDescription.h" + +#import <Foundation/NSAutoreleasePool.h> +#import <Foundation/NSGeometry.h> +#import <Foundation/NSString.h> +#import <Foundation/NSValue.h> +#import <QTKit/QTFormatDescription.h> + +JNIEXPORT jobject JNICALL +Java_net_java_sip_communicator_impl_neomedia_quicktime_QTFormatDescription_sizeForKey + (JNIEnv *jniEnv, jclass clazz, jlong ptr, jstring key) +{ + const char *cKey; + jobject size; + + cKey = (const char *) (*jniEnv)->GetStringUTFChars(jniEnv, key, NULL); + if (cKey) + { + QTFormatDescription *formatDescription; + NSAutoreleasePool *autoreleasePool; + NSString *oKey; + NSValue *attribute; + + formatDescription = (QTFormatDescription *) ptr; + autoreleasePool = [[NSAutoreleasePool alloc] init]; + + oKey = [NSString stringWithUTF8String:cKey]; + (*jniEnv)->ReleaseStringUTFChars(jniEnv, key, cKey); + + attribute = [formatDescription attributeForKey:oKey]; + if (attribute) + { + NSSize oSize; + jclass dimensionClass; + + oSize = [attribute sizeValue]; + + dimensionClass = (*jniEnv)->FindClass(jniEnv, "java/awt/Dimension"); + if (dimensionClass) + { + jmethodID dimensionCtorMethodID; + + dimensionCtorMethodID + = (*jniEnv) + ->GetMethodID( + jniEnv, + dimensionClass, + "<init>", + "(II)V"); + if (dimensionCtorMethodID) + size + = (*jniEnv) + ->NewObject( + jniEnv, + dimensionClass, + dimensionCtorMethodID, + (jint) oSize.width, + (jint) oSize.height); + } + } + else + size = NULL; + + [autoreleasePool release]; + } + else + size = NULL; + return size; +} + +JNIEXPORT jstring JNICALL +Java_net_java_sip_communicator_impl_neomedia_quicktime_QTFormatDescription_VideoEncodedPixelsSizeAttribute + (JNIEnv *jniEnv, jclass clazz) +{ + NSAutoreleasePool *autoreleasePool; + jstring jstr; + + autoreleasePool = [[NSAutoreleasePool alloc] init]; + + jstr + = (*jniEnv) + ->NewStringUTF( + jniEnv, + [QTFormatDescriptionVideoEncodedPixelsSizeAttribute + UTF8String]); + + [autoreleasePool release]; + return jstr; +} diff --git a/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_QTSampleBuffer.h b/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_QTSampleBuffer.h new file mode 100644 index 0000000..67a30fe --- /dev/null +++ b/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_QTSampleBuffer.h @@ -0,0 +1,29 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include <jni.h> +/* Header for class net_java_sip_communicator_impl_neomedia_quicktime_QTSampleBuffer */ + +#ifndef _Included_net_java_sip_communicator_impl_neomedia_quicktime_QTSampleBuffer +#define _Included_net_java_sip_communicator_impl_neomedia_quicktime_QTSampleBuffer +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: net_java_sip_communicator_impl_neomedia_quicktime_QTSampleBuffer + * Method: bytesForAllSamples + * Signature: (J)[B + */ +JNIEXPORT jbyteArray JNICALL Java_net_java_sip_communicator_impl_neomedia_quicktime_QTSampleBuffer_bytesForAllSamples + (JNIEnv *, jclass, jlong); + +/* + * Class: net_java_sip_communicator_impl_neomedia_quicktime_QTSampleBuffer + * Method: formatDescription + * Signature: (J)J + */ +JNIEXPORT jlong JNICALL Java_net_java_sip_communicator_impl_neomedia_quicktime_QTSampleBuffer_formatDescription + (JNIEnv *, jclass, jlong); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_QTSampleBuffer.m b/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_QTSampleBuffer.m new file mode 100644 index 0000000..0c51334 --- /dev/null +++ b/src/native/macosx/quicktime/net_java_sip_communicator_impl_neomedia_quicktime_QTSampleBuffer.m @@ -0,0 +1,61 @@ +#include "net_java_sip_communicator_impl_neomedia_quicktime_QTSampleBuffer.h" + +#import <Foundation/NSAutoreleasePool.h> +#import <QTKit/QTFormatDescription.h> +#import <QTKit/QTSampleBuffer.h> + +JNIEXPORT jbyteArray JNICALL +Java_net_java_sip_communicator_impl_neomedia_quicktime_QTSampleBuffer_bytesForAllSamples + (JNIEnv *jniEnv, jclass clazz, jlong ptr) +{ + QTSampleBuffer *sampleBuffer; + NSAutoreleasePool *autoreleasePool; + NSUInteger lengthForAllSamples; + jbyteArray jBytesForAllSamples; + + sampleBuffer = (QTSampleBuffer *) ptr; + autoreleasePool = [[NSAutoreleasePool alloc] init]; + + lengthForAllSamples = [sampleBuffer lengthForAllSamples]; + if (lengthForAllSamples) + { + jBytesForAllSamples + = (*jniEnv)->NewByteArray(jniEnv, lengthForAllSamples); + if (jBytesForAllSamples) + { + jbyte *bytesForAllSamples = [sampleBuffer bytesForAllSamples]; + + (*jniEnv) + ->SetByteArrayRegion( + jniEnv, + jBytesForAllSamples, + 0, + lengthForAllSamples, + bytesForAllSamples); + } + } + else + jBytesForAllSamples = NULL; + + [autoreleasePool release]; + return jBytesForAllSamples; +} + +JNIEXPORT jlong JNICALL +Java_net_java_sip_communicator_impl_neomedia_quicktime_QTSampleBuffer_formatDescription + (JNIEnv *jniEnv, jclass clazz, jlong ptr) +{ + QTSampleBuffer *sampleBuffer; + NSAutoreleasePool *autoreleasePool; + QTFormatDescription *formatDescription; + + sampleBuffer = (QTSampleBuffer *) ptr; + autoreleasePool = [[NSAutoreleasePool alloc] init]; + + formatDescription = [sampleBuffer formatDescription]; + if (formatDescription) + [formatDescription retain]; + + [autoreleasePool release]; + return (jlong) formatDescription; +} |