From 3cb03ee2368b2f3bea11c2235713d70faa892b15 Mon Sep 17 00:00:00 2001 From: Lyubomir Marinov <lyubomir.marinov@jitsi.org> Date: Tue, 24 Jul 2012 11:11:14 +0000 Subject: [PATCH] Fixes a failure to keep the aspect ratio of the video when switching to full screen. Attempts to remedy a multi-video display when switching between camera and desktop streaming. Tries to fix a crash in the QTKit video capture on Mac OS X. Works on addressing a unnecessary remaining of the camera on Mac OS X open. --- lib/fmj.jar | Bin 801568 -> 801706 bytes lib/native/mac/libjnquicktime.jnilib | Bin 98320 -> 60268 bytes src/native/macosx/quicktime/common.h | 16 ++ src/native/macosx/quicktime/common.m | 27 ++ ...si_impl_neomedia_quicktime_CVPixelBuffer.h | 68 +++++ ...si_impl_neomedia_quicktime_CVPixelBuffer.m | 190 +++++++++++++ ...edia_quicktime_CVPixelBufferAttributeKey.h | 44 +++ ...edia_quicktime_CVPixelBufferAttributeKey.m | 32 +++ ...tsi_impl_neomedia_quicktime_NSDictionary.h | 28 ++ ...tsi_impl_neomedia_quicktime_NSDictionary.m | 32 +++ ...l_neomedia_quicktime_NSMutableDictionary.h | 36 +++ ...l_neomedia_quicktime_NSMutableDictionary.m | 43 +++ ...g_jitsi_impl_neomedia_quicktime_NSObject.h | 36 +++ ...g_jitsi_impl_neomedia_quicktime_NSObject.m | 25 ++ ...icktime_QTCaptureDecompressedVideoOutput.h | 69 +++++ ...icktime_QTCaptureDecompressedVideoOutput.m | 262 ++++++++++++++++++ ..._impl_neomedia_quicktime_QTCaptureDevice.h | 76 +++++ ..._impl_neomedia_quicktime_QTCaptureDevice.m | 204 ++++++++++++++ ..._neomedia_quicktime_QTCaptureDeviceInput.h | 28 ++ ..._neomedia_quicktime_QTCaptureDeviceInput.m | 39 +++ ...impl_neomedia_quicktime_QTCaptureSession.h | 60 ++++ ...impl_neomedia_quicktime_QTCaptureSession.m | 86 ++++++ ...l_neomedia_quicktime_QTFormatDescription.h | 36 +++ ...l_neomedia_quicktime_QTFormatDescription.m | 93 +++++++ ...i_impl_neomedia_quicktime_QTSampleBuffer.h | 36 +++ ...i_impl_neomedia_quicktime_QTSampleBuffer.m | 69 +++++ .../media/renderer/video/JAWTRenderer.java | 5 +- .../neomedia/device/DeviceConfiguration.java | 4 +- .../impl/neomedia/device/QuickTimeSystem.java | 1 - .../media/protocol/quicktime/DataSource.java | 3 - .../protocol/quicktime/QuickTimeStream.java | 1 - .../video/JAWTRendererVideoComponent.java | 18 ++ .../neomedia/quicktime/CVImageBuffer.java | 2 +- .../neomedia/quicktime/CVPixelBuffer.java | 4 +- .../quicktime/CVPixelBufferAttributeKey.java | 2 +- .../neomedia/quicktime/CVPixelFormatType.java | 2 +- .../impl/neomedia/quicktime/NSDictionary.java | 4 +- .../impl/neomedia/quicktime/NSError.java | 4 +- .../neomedia/quicktime/NSErrorException.java | 2 +- .../quicktime/NSMutableDictionary.java | 4 +- .../impl/neomedia/quicktime/NSObject.java | 2 +- .../QTCaptureDecompressedVideoOutput.java | 4 +- .../neomedia/quicktime/QTCaptureDevice.java | 6 +- .../quicktime/QTCaptureDeviceInput.java | 6 +- .../neomedia/quicktime/QTCaptureInput.java | 4 +- .../neomedia/quicktime/QTCaptureOutput.java | 4 +- .../neomedia/quicktime/QTCaptureSession.java | 6 +- .../quicktime/QTFormatDescription.java | 4 +- .../impl/neomedia/quicktime/QTMediaType.java | 2 +- .../neomedia/quicktime/QTSampleBuffer.java | 4 +- src/org/jitsi/util/swing/VideoLayout.java | 32 +-- 51 files changed, 1699 insertions(+), 66 deletions(-) create mode 100644 src/native/macosx/quicktime/common.h create mode 100644 src/native/macosx/quicktime/common.m create mode 100644 src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_CVPixelBuffer.h create mode 100644 src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_CVPixelBuffer.m create mode 100644 src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_CVPixelBufferAttributeKey.h create mode 100644 src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_CVPixelBufferAttributeKey.m create mode 100644 src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_NSDictionary.h create mode 100644 src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_NSDictionary.m create mode 100644 src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_NSMutableDictionary.h create mode 100644 src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_NSMutableDictionary.m create mode 100644 src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_NSObject.h create mode 100644 src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_NSObject.m create mode 100644 src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput.h create mode 100644 src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput.m create mode 100644 src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureDevice.h create mode 100644 src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureDevice.m create mode 100644 src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureDeviceInput.h create mode 100644 src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureDeviceInput.m create mode 100644 src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureSession.h create mode 100644 src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureSession.m create mode 100644 src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTFormatDescription.h create mode 100644 src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTFormatDescription.m create mode 100644 src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTSampleBuffer.h create mode 100644 src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTSampleBuffer.m rename src/{net/java/sip/communicator => org/jitsi}/impl/neomedia/quicktime/CVImageBuffer.java (95%) rename src/{net/java/sip/communicator => org/jitsi}/impl/neomedia/quicktime/CVPixelBuffer.java (98%) rename src/{net/java/sip/communicator => org/jitsi}/impl/neomedia/quicktime/CVPixelBufferAttributeKey.java (94%) rename src/{net/java/sip/communicator => org/jitsi}/impl/neomedia/quicktime/NSDictionary.java (92%) rename src/{net/java/sip/communicator => org/jitsi}/impl/neomedia/quicktime/NSMutableDictionary.java (92%) rename src/{net/java/sip/communicator => org/jitsi}/impl/neomedia/quicktime/NSObject.java (97%) rename src/{net/java/sip/communicator => org/jitsi}/impl/neomedia/quicktime/QTCaptureDecompressedVideoOutput.java (98%) rename src/{net/java/sip/communicator => org/jitsi}/impl/neomedia/quicktime/QTCaptureDevice.java (98%) rename src/{net/java/sip/communicator => org/jitsi}/impl/neomedia/quicktime/QTCaptureDeviceInput.java (90%) rename src/{net/java/sip/communicator => org/jitsi}/impl/neomedia/quicktime/QTCaptureSession.java (94%) rename src/{net/java/sip/communicator => org/jitsi}/impl/neomedia/quicktime/QTFormatDescription.java (94%) rename src/{net/java/sip/communicator => org/jitsi}/impl/neomedia/quicktime/QTSampleBuffer.java (92%) diff --git a/lib/fmj.jar b/lib/fmj.jar index 03d23a97d9e397999dab4bdf3ff5619b24a83d4b..2c9c69913dc13e1413f788cdfd4d035f96d9ce22 100644 GIT binary patch delta 41312 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 delta 41098 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 diff --git a/lib/native/mac/libjnquicktime.jnilib b/lib/native/mac/libjnquicktime.jnilib index 72f4d6953df8fa8d0deadc21341169fe326a4642..6ad0945456facae9ea57eba402c5bf106c20f194 100755 GIT binary patch literal 60268 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 BSEK*{ literal 98320 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 diff --git a/src/native/macosx/quicktime/common.h b/src/native/macosx/quicktime/common.h new file mode 100644 index 00000000..a8cecb31 --- /dev/null +++ b/src/native/macosx/quicktime/common.h @@ -0,0 +1,16 @@ +/* + * Jitsi, the OpenSource Java VoIP and Instant Messaging client. + * + * Distributable under LGPL license. + * See terms of license at gnu.org. + */ + +#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 00000000..134f5979 --- /dev/null +++ b/src/native/macosx/quicktime/common.m @@ -0,0 +1,27 @@ +/* + * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client. + * + * Distributable under LGPL license. + * See terms of license at gnu.org. + */ + +#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/org_jitsi_impl_neomedia_quicktime_CVPixelBuffer.h b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_CVPixelBuffer.h new file mode 100644 index 00000000..ccc1614d --- /dev/null +++ b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_CVPixelBuffer.h @@ -0,0 +1,68 @@ +/* + * 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 <jni.h> +/* Header for class org_jitsi_impl_neomedia_quicktime_CVPixelBuffer */ + +#ifndef _Included_org_jitsi_impl_neomedia_quicktime_CVPixelBuffer +#define _Included_org_jitsi_impl_neomedia_quicktime_CVPixelBuffer +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: org_jitsi_impl_neomedia_quicktime_CVPixelBuffer + * Method: getByteCount + * Signature: (J)I + */ +JNIEXPORT jint JNICALL Java_org_jitsi_impl_neomedia_quicktime_CVPixelBuffer_getByteCount + (JNIEnv *, jclass, jlong); + +/* + * Class: org_jitsi_impl_neomedia_quicktime_CVPixelBuffer + * Method: getBytes + * Signature: (J)[B + */ +JNIEXPORT jbyteArray JNICALL Java_org_jitsi_impl_neomedia_quicktime_CVPixelBuffer_getBytes__J + (JNIEnv *, jclass, jlong); + +/* + * Class: org_jitsi_impl_neomedia_quicktime_CVPixelBuffer + * Method: getBytes + * Signature: (JJI)I + */ +JNIEXPORT jint JNICALL Java_org_jitsi_impl_neomedia_quicktime_CVPixelBuffer_getBytes__JJI + (JNIEnv *, jclass, jlong, jlong, jint); + +/* + * Class: org_jitsi_impl_neomedia_quicktime_CVPixelBuffer + * Method: getHeight + * Signature: (J)I + */ +JNIEXPORT jint JNICALL Java_org_jitsi_impl_neomedia_quicktime_CVPixelBuffer_getHeight + (JNIEnv *, jclass, jlong); + +/* + * Class: org_jitsi_impl_neomedia_quicktime_CVPixelBuffer + * Method: getWidth + * Signature: (J)I + */ +JNIEXPORT jint JNICALL Java_org_jitsi_impl_neomedia_quicktime_CVPixelBuffer_getWidth + (JNIEnv *, jclass, jlong); + +/* + * Class: org_jitsi_impl_neomedia_quicktime_CVPixelBuffer + * Method: memcpy + * Signature: ([BIIJ)V + */ +JNIEXPORT void JNICALL Java_org_jitsi_impl_neomedia_quicktime_CVPixelBuffer_memcpy + (JNIEnv *, jclass, jbyteArray, jint, jint, jlong); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_CVPixelBuffer.m b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_CVPixelBuffer.m new file mode 100644 index 00000000..3188277d --- /dev/null +++ b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_CVPixelBuffer.m @@ -0,0 +1,190 @@ +/* + * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client. + * + * Distributable under LGPL license. + * See terms of license at gnu.org. + */ + +#include "org_jitsi_impl_neomedia_quicktime_CVPixelBuffer.h" + +#import <CoreVideo/CVPixelBuffer.h> +#include <stdint.h> +#include <string.h> + +static size_t +CVPixelBuffer_getByteCount(CVPixelBufferRef pixelBuffer, size_t planeCount) +{ + size_t byteCount; + + if (planeCount) + { + size_t planeIndex; + + byteCount = 0; + for (planeIndex = 0; planeIndex < planeCount; planeIndex++) + { + byteCount + += CVPixelBufferGetBytesPerRowOfPlane(pixelBuffer, planeIndex) + * CVPixelBufferGetHeightOfPlane(pixelBuffer, planeIndex); + } + } + else + { + byteCount + = CVPixelBufferGetBytesPerRow(pixelBuffer) + * CVPixelBufferGetHeight(pixelBuffer); + } + return byteCount; +} + +JNIEXPORT jint JNICALL +Java_org_jitsi_impl_neomedia_quicktime_CVPixelBuffer_getByteCount + (JNIEnv *jniEnv, jclass clazz, jlong ptr) +{ + CVPixelBufferRef pixelBuffer; + size_t planeCount; + + pixelBuffer = (CVPixelBufferRef) (intptr_t) ptr; + + planeCount = CVPixelBufferGetPlaneCount(pixelBuffer); + return (jint) CVPixelBuffer_getByteCount(pixelBuffer, planeCount); +} + +JNIEXPORT jbyteArray JNICALL +Java_org_jitsi_impl_neomedia_quicktime_CVPixelBuffer_getBytes__J + (JNIEnv *jniEnv, jclass clazz, jlong ptr) +{ + CVPixelBufferRef pixelBuffer; + size_t planeCount; + size_t byteCount; + jbyteArray bytes; + + pixelBuffer = (CVPixelBufferRef) (intptr_t) ptr; + + planeCount = CVPixelBufferGetPlaneCount(pixelBuffer); + byteCount = CVPixelBuffer_getByteCount(pixelBuffer, planeCount); + bytes = (*jniEnv)->NewByteArray(jniEnv, byteCount); + if (!bytes) + return NULL; + + if (kCVReturnSuccess == CVPixelBufferLockBaseAddress(pixelBuffer, 0)) + { + jbyte *cBytes; + + if (planeCount) + { + size_t byteOffset; + size_t planeIndex; + + byteOffset = 0; + for (planeIndex = 0; planeIndex < planeCount; planeIndex++) + { + cBytes + = CVPixelBufferGetBaseAddressOfPlane( + pixelBuffer, + planeIndex); + byteCount + += CVPixelBufferGetBytesPerRowOfPlane( + pixelBuffer, + planeIndex) + * CVPixelBufferGetHeightOfPlane( + pixelBuffer, + planeIndex); + (*jniEnv) + ->SetByteArrayRegion( + jniEnv, + bytes, + byteOffset, + byteCount, + cBytes); + byteOffset += byteCount; + } + } + else + { + cBytes = CVPixelBufferGetBaseAddress(pixelBuffer); + (*jniEnv)->SetByteArrayRegion(jniEnv, bytes, 0, byteCount, cBytes); + } + CVPixelBufferUnlockBaseAddress(pixelBuffer, 0); + } + return bytes; +} + +JNIEXPORT jint JNICALL +Java_org_jitsi_impl_neomedia_quicktime_CVPixelBuffer_getBytes__JJI + (JNIEnv *jniEnv, jclass clazz, jlong ptr, jlong buf, jint bufLength) +{ + CVPixelBufferRef pixelBuffer; + size_t byteCount; + + pixelBuffer = (CVPixelBufferRef) (intptr_t) ptr; + + if (kCVReturnSuccess == CVPixelBufferLockBaseAddress(pixelBuffer, 0)) + { + size_t planeCount; + jbyte *cBytes; + + planeCount = CVPixelBufferGetPlaneCount(pixelBuffer); + byteCount = CVPixelBuffer_getByteCount(pixelBuffer, planeCount); + + if (planeCount) + { + size_t byteOffset; + size_t planeIndex; + + byteOffset = 0; + for (planeIndex = 0; planeIndex < planeCount; planeIndex++) + { + cBytes + = CVPixelBufferGetBaseAddressOfPlane( + pixelBuffer, + planeIndex); + byteCount + += CVPixelBufferGetBytesPerRowOfPlane( + pixelBuffer, + planeIndex) + * CVPixelBufferGetHeightOfPlane( + pixelBuffer, + planeIndex); + memcpy((void *) (intptr_t) buf, (const void *) cBytes, byteCount); + byteOffset += byteCount; + } + byteCount = byteOffset; + } + else + { + cBytes = CVPixelBufferGetBaseAddress(pixelBuffer); + memcpy((void *) (intptr_t) buf, (const void *) cBytes, byteCount); + } + CVPixelBufferUnlockBaseAddress(pixelBuffer, 0); + } + else + byteCount = 0; + return byteCount; +} + +JNIEXPORT jint JNICALL +Java_org_jitsi_impl_neomedia_quicktime_CVPixelBuffer_getHeight + (JNIEnv *jniEnv, jclass clazz, jlong ptr) +{ + return (jint) CVPixelBufferGetHeight((CVPixelBufferRef) (intptr_t) ptr); +} + +JNIEXPORT jint JNICALL +Java_org_jitsi_impl_neomedia_quicktime_CVPixelBuffer_getWidth + (JNIEnv *jniEnv, jclass clazz, jlong ptr) +{ + return (jint) CVPixelBufferGetWidth((CVPixelBufferRef) (intptr_t) ptr); +} + +JNIEXPORT void JNICALL +Java_org_jitsi_impl_neomedia_quicktime_CVPixelBuffer_memcpy + (JNIEnv *jniEnv, jclass clazz, + jbyteArray dst, jint dstOffset, jint dstLength, + jlong src) +{ + (*jniEnv)->SetByteArrayRegion( + jniEnv, + dst, dstOffset, dstLength, + (jbyte *) (intptr_t) src); +} diff --git a/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_CVPixelBufferAttributeKey.h b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_CVPixelBufferAttributeKey.h new file mode 100644 index 00000000..93028336 --- /dev/null +++ b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_CVPixelBufferAttributeKey.h @@ -0,0 +1,44 @@ +/* + * 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 <jni.h> +/* Header for class org_jitsi_impl_neomedia_quicktime_CVPixelBufferAttributeKey */ + +#ifndef _Included_org_jitsi_impl_neomedia_quicktime_CVPixelBufferAttributeKey +#define _Included_org_jitsi_impl_neomedia_quicktime_CVPixelBufferAttributeKey +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: org_jitsi_impl_neomedia_quicktime_CVPixelBufferAttributeKey + * Method: kCVPixelBufferHeightKey + * Signature: ()J + */ +JNIEXPORT jlong JNICALL Java_org_jitsi_impl_neomedia_quicktime_CVPixelBufferAttributeKey_kCVPixelBufferHeightKey + (JNIEnv *, jclass); + +/* + * Class: org_jitsi_impl_neomedia_quicktime_CVPixelBufferAttributeKey + * Method: kCVPixelBufferPixelFormatTypeKey + * Signature: ()J + */ +JNIEXPORT jlong JNICALL Java_org_jitsi_impl_neomedia_quicktime_CVPixelBufferAttributeKey_kCVPixelBufferPixelFormatTypeKey + (JNIEnv *, jclass); + +/* + * Class: org_jitsi_impl_neomedia_quicktime_CVPixelBufferAttributeKey + * Method: kCVPixelBufferWidthKey + * Signature: ()J + */ +JNIEXPORT jlong JNICALL Java_org_jitsi_impl_neomedia_quicktime_CVPixelBufferAttributeKey_kCVPixelBufferWidthKey + (JNIEnv *, jclass); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_CVPixelBufferAttributeKey.m b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_CVPixelBufferAttributeKey.m new file mode 100644 index 00000000..b1324fd8 --- /dev/null +++ b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_CVPixelBufferAttributeKey.m @@ -0,0 +1,32 @@ +/* + * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client. + * + * Distributable under LGPL license. + * See terms of license at gnu.org. + */ + +#include "org_jitsi_impl_neomedia_quicktime_CVPixelBufferAttributeKey.h" + +#import <CoreVideo/CVPixelBuffer.h> +#include <stdint.h> + +JNIEXPORT jlong JNICALL +Java_org_jitsi_impl_neomedia_quicktime_CVPixelBufferAttributeKey_kCVPixelBufferHeightKey + (JNIEnv *jniEnv, jclass clazz) +{ + return (jlong) (intptr_t) kCVPixelBufferHeightKey; +} + +JNIEXPORT jlong JNICALL +Java_org_jitsi_impl_neomedia_quicktime_CVPixelBufferAttributeKey_kCVPixelBufferPixelFormatTypeKey + (JNIEnv *jniEnv, jclass clazz) +{ + return (jlong) (intptr_t) kCVPixelBufferPixelFormatTypeKey; +} + +JNIEXPORT jlong JNICALL +Java_org_jitsi_impl_neomedia_quicktime_CVPixelBufferAttributeKey_kCVPixelBufferWidthKey + (JNIEnv *jniEnv, jclass clazz) +{ + return (jlong) (intptr_t) kCVPixelBufferWidthKey; +} diff --git a/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_NSDictionary.h b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_NSDictionary.h new file mode 100644 index 00000000..6761c1d4 --- /dev/null +++ b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_NSDictionary.h @@ -0,0 +1,28 @@ +/* + * 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 <jni.h> +/* Header for class org_jitsi_impl_neomedia_quicktime_NSDictionary */ + +#ifndef _Included_org_jitsi_impl_neomedia_quicktime_NSDictionary +#define _Included_org_jitsi_impl_neomedia_quicktime_NSDictionary +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: org_jitsi_impl_neomedia_quicktime_NSDictionary + * Method: intForKey + * Signature: (JJ)I + */ +JNIEXPORT jint JNICALL Java_org_jitsi_impl_neomedia_quicktime_NSDictionary_intForKey + (JNIEnv *, jclass, jlong, jlong); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_NSDictionary.m b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_NSDictionary.m new file mode 100644 index 00000000..162e4358 --- /dev/null +++ b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_NSDictionary.m @@ -0,0 +1,32 @@ +/* + * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client. + * + * Distributable under LGPL license. + * See terms of license at gnu.org. + */ + +#include "org_jitsi_impl_neomedia_quicktime_NSDictionary.h" + +#import <Foundation/NSAutoreleasePool.h> +#import <Foundation/NSDictionary.h> +#import <Foundation/NSValue.h> +#include <stdint.h> + +JNIEXPORT jint JNICALL +Java_org_jitsi_impl_neomedia_quicktime_NSDictionary_intForKey + (JNIEnv *jniEnv, jclass clazz, jlong ptr, jlong key) +{ + NSDictionary *dictionary; + NSAutoreleasePool *autoreleasePool; + NSNumber *value; + jint jvalue; + + dictionary = (NSDictionary *) (intptr_t) ptr; + autoreleasePool = [[NSAutoreleasePool alloc] init]; + + value = [dictionary objectForKey:(id)(intptr_t)key]; + jvalue = value ? [value intValue] : 0; + + [autoreleasePool release]; + return jvalue; +} diff --git a/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_NSMutableDictionary.h b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_NSMutableDictionary.h new file mode 100644 index 00000000..ec8da40c --- /dev/null +++ b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_NSMutableDictionary.h @@ -0,0 +1,36 @@ +/* + * 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 <jni.h> +/* Header for class org_jitsi_impl_neomedia_quicktime_NSMutableDictionary */ + +#ifndef _Included_org_jitsi_impl_neomedia_quicktime_NSMutableDictionary +#define _Included_org_jitsi_impl_neomedia_quicktime_NSMutableDictionary +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: org_jitsi_impl_neomedia_quicktime_NSMutableDictionary + * Method: allocAndInit + * Signature: ()J + */ +JNIEXPORT jlong JNICALL Java_org_jitsi_impl_neomedia_quicktime_NSMutableDictionary_allocAndInit + (JNIEnv *, jclass); + +/* + * Class: org_jitsi_impl_neomedia_quicktime_NSMutableDictionary + * Method: setIntForKey + * Signature: (JIJ)V + */ +JNIEXPORT void JNICALL Java_org_jitsi_impl_neomedia_quicktime_NSMutableDictionary_setIntForKey + (JNIEnv *, jclass, jlong, jint, jlong); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_NSMutableDictionary.m b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_NSMutableDictionary.m new file mode 100644 index 00000000..fc6e9b2c --- /dev/null +++ b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_NSMutableDictionary.m @@ -0,0 +1,43 @@ +/* + * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client. + * + * Distributable under LGPL license. + * See terms of license at gnu.org. + */ + +#include "org_jitsi_impl_neomedia_quicktime_NSMutableDictionary.h" + +#import <Foundation/NSAutoreleasePool.h> +#import <Foundation/NSDictionary.h> +#import <Foundation/NSValue.h> +#include <stdint.h> + +JNIEXPORT jlong JNICALL +Java_org_jitsi_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) (intptr_t) mutableDictionary; +} + +JNIEXPORT void JNICALL +Java_org_jitsi_impl_neomedia_quicktime_NSMutableDictionary_setIntForKey + (JNIEnv *jniEnv, jclass clazz, jlong ptr, jint value, jlong key) +{ + NSMutableDictionary *mutableDictionary; + NSAutoreleasePool *autoreleasePool; + + mutableDictionary = (NSMutableDictionary *) (intptr_t) ptr; + autoreleasePool = [[NSAutoreleasePool alloc] init]; + + [mutableDictionary setObject:[NSNumber numberWithInt:value] forKey:(id)(intptr_t)key]; + + [autoreleasePool release]; +} diff --git a/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_NSObject.h b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_NSObject.h new file mode 100644 index 00000000..1c492078 --- /dev/null +++ b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_NSObject.h @@ -0,0 +1,36 @@ +/* + * 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 <jni.h> +/* Header for class org_jitsi_impl_neomedia_quicktime_NSObject */ + +#ifndef _Included_org_jitsi_impl_neomedia_quicktime_NSObject +#define _Included_org_jitsi_impl_neomedia_quicktime_NSObject +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: org_jitsi_impl_neomedia_quicktime_NSObject + * Method: release + * Signature: (J)V + */ +JNIEXPORT void JNICALL Java_org_jitsi_impl_neomedia_quicktime_NSObject_release + (JNIEnv *, jclass, jlong); + +/* + * Class: org_jitsi_impl_neomedia_quicktime_NSObject + * Method: retain + * Signature: (J)V + */ +JNIEXPORT void JNICALL Java_org_jitsi_impl_neomedia_quicktime_NSObject_retain + (JNIEnv *, jclass, jlong); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_NSObject.m b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_NSObject.m new file mode 100644 index 00000000..7bfce652 --- /dev/null +++ b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_NSObject.m @@ -0,0 +1,25 @@ +/* + * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client. + * + * Distributable under LGPL license. + * See terms of license at gnu.org. + */ + +#include "org_jitsi_impl_neomedia_quicktime_NSObject.h" + +#include "common.h" +#include <stdint.h> + +JNIEXPORT void JNICALL +Java_org_jitsi_impl_neomedia_quicktime_NSObject_release + (JNIEnv *jniEnv, jclass clazz, jlong ptr) +{ + NSObject_performSelector((id) (intptr_t) ptr, @"release"); +} + +JNIEXPORT void JNICALL +Java_org_jitsi_impl_neomedia_quicktime_NSObject_retain + (JNIEnv *jniEnv, jclass clazz, jlong ptr) +{ + NSObject_performSelector((id) (intptr_t) ptr, @"retain"); +} diff --git a/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput.h b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput.h new file mode 100644 index 00000000..6d61b20a --- /dev/null +++ b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput.h @@ -0,0 +1,69 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include <jni.h> +/* Header for class org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput */ + +#ifndef _Included_org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput +#define _Included_org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput + * Method: allocAndInit + * Signature: ()J + */ +JNIEXPORT jlong JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput_allocAndInit + (JNIEnv *, jclass); + +/* + * Class: org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput + * Method: minimumVideoFrameInterval + * Signature: (J)D + */ +JNIEXPORT jdouble JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput_minimumVideoFrameInterval + (JNIEnv *, jclass, jlong); + +/* + * Class: org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput + * Method: pixelBufferAttributes + * Signature: (J)J + */ +JNIEXPORT jlong JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput_pixelBufferAttributes + (JNIEnv *, jclass, jlong); + +/* + * Class: org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput + * Method: setAutomaticallyDropsLateVideoFrames + * Signature: (JZ)Z + */ +JNIEXPORT jboolean JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput_setAutomaticallyDropsLateVideoFrames + (JNIEnv *, jclass, jlong, jboolean); + +/* + * Class: org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput + * Method: setDelegate + * Signature: (JLorg/jitsi/impl/neomedia/quicktime/QTCaptureDecompressedVideoOutput/Delegate;)V + */ +JNIEXPORT void JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput_setDelegate + (JNIEnv *, jclass, jlong, jobject); + +/* + * Class: org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput + * Method: setMinimumVideoFrameInterval + * Signature: (JD)V + */ +JNIEXPORT void JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput_setMinimumVideoFrameInterval + (JNIEnv *, jclass, jlong, jdouble); + +/* + * Class: org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput + * Method: setPixelBufferAttributes + * Signature: (JJ)V + */ +JNIEXPORT void JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput_setPixelBufferAttributes + (JNIEnv *, jclass, jlong, jlong); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput.m b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput.m new file mode 100644 index 00000000..e15f1e07 --- /dev/null +++ b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput.m @@ -0,0 +1,262 @@ +/* + * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client. + * + * Distributable under LGPL license. + * See terms of license at gnu.org. + */ + +#include "org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput.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> +#import <stdint.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_org_jitsi_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) (intptr_t) captureDecompressedVideoOutput; +} + +JNIEXPORT jdouble JNICALL +Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput_minimumVideoFrameInterval + (JNIEnv *jniEnv, jclass clazz, jlong ptr) +{ + QTCaptureDecompressedVideoOutput *captureDecompressedVideoOutput; + NSAutoreleasePool *autoreleasePool; + NSTimeInterval minimumVideoFrameInterval; + + captureDecompressedVideoOutput = (QTCaptureDecompressedVideoOutput *) (intptr_t) ptr; + autoreleasePool = [[NSAutoreleasePool alloc] init]; + + minimumVideoFrameInterval + = [captureDecompressedVideoOutput minimumVideoFrameInterval]; + + [autoreleasePool release]; + return (jdouble) minimumVideoFrameInterval; +} + +JNIEXPORT jlong JNICALL +Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput_pixelBufferAttributes + (JNIEnv *jniEnv, jclass clazz, jlong ptr) +{ + QTCaptureDecompressedVideoOutput *captureDecompressedVideoOutput; + NSAutoreleasePool *autoreleasePool; + NSDictionary *pixelBufferAttributes; + + captureDecompressedVideoOutput = (QTCaptureDecompressedVideoOutput *) (intptr_t) ptr; + autoreleasePool = [[NSAutoreleasePool alloc] init]; + + pixelBufferAttributes + = [captureDecompressedVideoOutput pixelBufferAttributes]; + if (pixelBufferAttributes) + [pixelBufferAttributes retain]; + + [autoreleasePool release]; + return (jlong) (intptr_t) pixelBufferAttributes; +} + +JNIEXPORT jboolean JNICALL +Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput_setAutomaticallyDropsLateVideoFrames + (JNIEnv *jniEnv, jclass clazz, jlong ptr, + jboolean automaticallyDropsLateVideoFrames) +{ + QTCaptureDecompressedVideoOutput *captureDecompressedVideoOutput; + NSAutoreleasePool *autoreleasePool; + + captureDecompressedVideoOutput = (QTCaptureDecompressedVideoOutput *) (intptr_t) ptr; + autoreleasePool = [[NSAutoreleasePool alloc] init]; + + if ([captureDecompressedVideoOutput + respondsToSelector:@selector(setAutomaticallyDropsLateVideoFrames)]) + { + [captureDecompressedVideoOutput + setAutomaticallyDropsLateVideoFrames: + ((JNI_TRUE == automaticallyDropsLateVideoFrames) ? YES : NO)]; + automaticallyDropsLateVideoFrames + = [captureDecompressedVideoOutput automaticallyDropsLateVideoFrames]; + } + else + automaticallyDropsLateVideoFrames = JNI_FALSE; + + [autoreleasePool release]; + return automaticallyDropsLateVideoFrames; +} + +JNIEXPORT void JNICALL +Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput_setDelegate + (JNIEnv *jniEnv, jclass clazz, jlong ptr, jobject delegate) +{ + QTCaptureDecompressedVideoOutput *captureDecompressedVideoOutput; + NSAutoreleasePool *autoreleasePool; + QTCaptureDecompressedVideoOutputDelegate *oDelegate; + id oPrevDelegate; + + captureDecompressedVideoOutput = (QTCaptureDecompressedVideoOutput *) (intptr_t) 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_org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput_setMinimumVideoFrameInterval + (JNIEnv *jniEnv, jclass clazz, jlong ptr, jdouble minimumVideoFrameInterval) +{ + QTCaptureDecompressedVideoOutput *captureDecompressedVideoOutput; + NSAutoreleasePool *autoreleasePool; + + captureDecompressedVideoOutput = (QTCaptureDecompressedVideoOutput *) (intptr_t) ptr; + autoreleasePool = [[NSAutoreleasePool alloc] init]; + + [captureDecompressedVideoOutput + setMinimumVideoFrameInterval:(NSTimeInterval)minimumVideoFrameInterval]; + + [autoreleasePool release]; +} + +JNIEXPORT void JNICALL +Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDecompressedVideoOutput_setPixelBufferAttributes + (JNIEnv *jniEnv, jclass clazz, jlong ptr, jlong pixelBufferAttributesPtr) +{ + QTCaptureDecompressedVideoOutput *captureDecompressedVideoOutput; + NSDictionary *pixelBufferAttributes; + NSAutoreleasePool *autoreleasePool; + + captureDecompressedVideoOutput = (QTCaptureDecompressedVideoOutput *) (intptr_t) ptr; + pixelBufferAttributes = (NSDictionary *) (intptr_t) 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, (void **) &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) (intptr_t) videoFrame, + (jlong) (intptr_t) 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, (void **) &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/org_jitsi_impl_neomedia_quicktime_QTCaptureDevice.h b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureDevice.h new file mode 100644 index 00000000..36d3b012 --- /dev/null +++ b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureDevice.h @@ -0,0 +1,76 @@ +/* + * 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 <jni.h> +/* Header for class org_jitsi_impl_neomedia_quicktime_QTCaptureDevice */ + +#ifndef _Included_org_jitsi_impl_neomedia_quicktime_QTCaptureDevice +#define _Included_org_jitsi_impl_neomedia_quicktime_QTCaptureDevice +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: org_jitsi_impl_neomedia_quicktime_QTCaptureDevice + * Method: close + * Signature: (J)V + */ +JNIEXPORT void JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDevice_close + (JNIEnv *, jclass, jlong); + +/* + * Class: org_jitsi_impl_neomedia_quicktime_QTCaptureDevice + * Method: formatDescriptions + * Signature: (J)[J + */ +JNIEXPORT jlongArray JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDevice_formatDescriptions + (JNIEnv *, jclass, jlong); + +/* + * Class: org_jitsi_impl_neomedia_quicktime_QTCaptureDevice + * Method: inputDevicesWithMediaType + * Signature: (Ljava/lang/String;)[J + */ +JNIEXPORT jlongArray JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDevice_inputDevicesWithMediaType + (JNIEnv *, jclass, jstring); + +/* + * Class: org_jitsi_impl_neomedia_quicktime_QTCaptureDevice + * Method: isConnected + * Signature: (J)Z + */ +JNIEXPORT jboolean JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDevice_isConnected + (JNIEnv *, jclass, jlong); + +/* + * Class: org_jitsi_impl_neomedia_quicktime_QTCaptureDevice + * Method: localizedDisplayName + * Signature: (J)Ljava/lang/String; + */ +JNIEXPORT jstring JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDevice_localizedDisplayName + (JNIEnv *, jclass, jlong); + +/* + * Class: org_jitsi_impl_neomedia_quicktime_QTCaptureDevice + * Method: open + * Signature: (J)Z + */ +JNIEXPORT jboolean JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDevice_open + (JNIEnv *, jclass, jlong); + +/* + * Class: org_jitsi_impl_neomedia_quicktime_QTCaptureDevice + * Method: uniqueID + * Signature: (J)Ljava/lang/String; + */ +JNIEXPORT jstring JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDevice_uniqueID + (JNIEnv *, jclass, jlong); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureDevice.m b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureDevice.m new file mode 100644 index 00000000..255a7738 --- /dev/null +++ b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureDevice.m @@ -0,0 +1,204 @@ +/* + * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client. + * + * Distributable under LGPL license. + * See terms of license at gnu.org. + */ + +#include "org_jitsi_impl_neomedia_quicktime_QTCaptureDevice.h" + +#include "common.h" + +#include <stdint.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_org_jitsi_impl_neomedia_quicktime_QTCaptureDevice_close + (JNIEnv *jniEnv, jclass clazz, jlong ptr) +{ + NSObject_performSelector((id) (intptr_t) ptr, @"close"); +} + +JNIEXPORT jlongArray JNICALL +Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDevice_formatDescriptions + (JNIEnv *jniEnv, jclass clazz, jlong ptr) +{ + QTCaptureDevice *captureDevice; + NSAutoreleasePool *autoreleasePool; + NSArray *formatDescriptions; + jlongArray formatDescriptionPtrs; + + captureDevice = (QTCaptureDevice *) (intptr_t) ptr; + autoreleasePool = [[NSAutoreleasePool alloc] init]; + + formatDescriptions = [captureDevice formatDescriptions]; + formatDescriptionPtrs + = QTCaptureDevice_nsArrayToJlongArray(jniEnv, formatDescriptions); + + [autoreleasePool release]; + return formatDescriptionPtrs; +} + +JNIEXPORT jlongArray JNICALL +Java_org_jitsi_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_org_jitsi_impl_neomedia_quicktime_QTCaptureDevice_isConnected + (JNIEnv *jniEnv, jclass clazz, jlong ptr) +{ + return + (YES == (BOOL) (intptr_t) NSObject_performSelector((id) (intptr_t) ptr, @"isConnected")) + ? JNI_TRUE + : JNI_FALSE; +} + +JNIEXPORT jstring JNICALL +Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDevice_localizedDisplayName + (JNIEnv *jniEnv, jclass clazz, jlong ptr) +{ + return QTCaptureDevice_getString (jniEnv, ptr, @"localizedDisplayName"); +} + +JNIEXPORT jboolean JNICALL +Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDevice_open + (JNIEnv *jniEnv, jclass clazz, jlong ptr) +{ + QTCaptureDevice *captureDevice; + NSAutoreleasePool *autoreleasePool; + BOOL ret; + NSError *error; + + captureDevice = (QTCaptureDevice *) (intptr_t) ptr; + autoreleasePool = [[NSAutoreleasePool alloc] init]; + + ret = [captureDevice open:&error]; + + [autoreleasePool release]; + return (YES == ret) ? JNI_TRUE : JNI_FALSE; +} + +JNIEXPORT jstring JNICALL +Java_org_jitsi_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) (intptr_t) 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) (intptr_t) 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/org_jitsi_impl_neomedia_quicktime_QTCaptureDeviceInput.h b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureDeviceInput.h new file mode 100644 index 00000000..60d6b16f --- /dev/null +++ b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureDeviceInput.h @@ -0,0 +1,28 @@ +/* + * 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 <jni.h> +/* Header for class org_jitsi_impl_neomedia_quicktime_QTCaptureDeviceInput */ + +#ifndef _Included_org_jitsi_impl_neomedia_quicktime_QTCaptureDeviceInput +#define _Included_org_jitsi_impl_neomedia_quicktime_QTCaptureDeviceInput +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: org_jitsi_impl_neomedia_quicktime_QTCaptureDeviceInput + * Method: deviceInputWithDevice + * Signature: (J)J + */ +JNIEXPORT jlong JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDeviceInput_deviceInputWithDevice + (JNIEnv *, jclass, jlong); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureDeviceInput.m b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureDeviceInput.m new file mode 100644 index 00000000..d8253902 --- /dev/null +++ b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureDeviceInput.m @@ -0,0 +1,39 @@ +/* + * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client. + * + * Distributable under LGPL license. + * See terms of license at gnu.org. + */ + +#include "org_jitsi_impl_neomedia_quicktime_QTCaptureDeviceInput.h" + +#import <Foundation/NSException.h> +#import <QTKit/QTCaptureDevice.h> +#import <QTKit/QTCaptureDeviceInput.h> +#include <stdint.h> + +JNIEXPORT jlong JNICALL +Java_org_jitsi_impl_neomedia_quicktime_QTCaptureDeviceInput_deviceInputWithDevice + (JNIEnv *jniEnv, jclass clazz, jlong devicePtr) +{ + QTCaptureDevice *device; + NSAutoreleasePool *autoreleasePool; + id deviceInput; + + device = (QTCaptureDevice *) (intptr_t) devicePtr; + autoreleasePool = [[NSAutoreleasePool alloc] init]; + + @try + { + deviceInput = [QTCaptureDeviceInput deviceInputWithDevice:device]; + } + @catch (NSException *ex) + { + deviceInput = nil; + } + if (deviceInput) + [deviceInput retain]; + + [autoreleasePool release]; + return (jlong) (intptr_t) deviceInput; +} diff --git a/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureSession.h b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureSession.h new file mode 100644 index 00000000..5c83458b --- /dev/null +++ b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureSession.h @@ -0,0 +1,60 @@ +/* + * 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 <jni.h> +/* Header for class org_jitsi_impl_neomedia_quicktime_QTCaptureSession */ + +#ifndef _Included_org_jitsi_impl_neomedia_quicktime_QTCaptureSession +#define _Included_org_jitsi_impl_neomedia_quicktime_QTCaptureSession +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: org_jitsi_impl_neomedia_quicktime_QTCaptureSession + * Method: addInput + * Signature: (JJ)Z + */ +JNIEXPORT jboolean JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTCaptureSession_addInput + (JNIEnv *, jclass, jlong, jlong); + +/* + * Class: org_jitsi_impl_neomedia_quicktime_QTCaptureSession + * Method: addOutput + * Signature: (JJ)Z + */ +JNIEXPORT jboolean JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTCaptureSession_addOutput + (JNIEnv *, jclass, jlong, jlong); + +/* + * Class: org_jitsi_impl_neomedia_quicktime_QTCaptureSession + * Method: allocAndInit + * Signature: ()J + */ +JNIEXPORT jlong JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTCaptureSession_allocAndInit + (JNIEnv *, jclass); + +/* + * Class: org_jitsi_impl_neomedia_quicktime_QTCaptureSession + * Method: startRunning + * Signature: (J)V + */ +JNIEXPORT void JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTCaptureSession_startRunning + (JNIEnv *, jclass, jlong); + +/* + * Class: org_jitsi_impl_neomedia_quicktime_QTCaptureSession + * Method: stopRunning + * Signature: (J)V + */ +JNIEXPORT void JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTCaptureSession_stopRunning + (JNIEnv *, jclass, jlong); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureSession.m b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureSession.m new file mode 100644 index 00000000..052bda8f --- /dev/null +++ b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTCaptureSession.m @@ -0,0 +1,86 @@ +/* + * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client. + * + * Distributable under LGPL license. + * See terms of license at gnu.org. + */ + +#include "org_jitsi_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> +#include <stdint.h> + +JNIEXPORT jboolean JNICALL +Java_org_jitsi_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 *) (intptr_t) ptr; + input = (QTCaptureInput *) (intptr_t) inputPtr; + autoreleasePool = [[NSAutoreleasePool alloc] init]; + + ret = [captureSession addInput:input error:&error]; + + [autoreleasePool release]; + return (YES == ret) ? JNI_TRUE : JNI_FALSE; +} + +JNIEXPORT jboolean JNICALL +Java_org_jitsi_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 *) (intptr_t) ptr; + output = (QTCaptureOutput *) (intptr_t) outputPtr; + autoreleasePool = [[NSAutoreleasePool alloc] init]; + + ret = [captureSession addOutput:output error:&error]; + + [autoreleasePool release]; + return (YES == ret) ? JNI_TRUE : JNI_FALSE; +} + +JNIEXPORT jlong JNICALL +Java_org_jitsi_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) (intptr_t) captureSession; +} + +JNIEXPORT void JNICALL +Java_org_jitsi_impl_neomedia_quicktime_QTCaptureSession_startRunning + (JNIEnv *jniEnv, jclass clazz, jlong ptr) +{ + NSObject_performSelector((id) (intptr_t) ptr, @"startRunning"); +} + +JNIEXPORT void JNICALL +Java_org_jitsi_impl_neomedia_quicktime_QTCaptureSession_stopRunning + (JNIEnv *jniEnv, jclass clazz, jlong ptr) +{ + NSObject_performSelector((id) (intptr_t) ptr, @"stopRunning"); +} diff --git a/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTFormatDescription.h b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTFormatDescription.h new file mode 100644 index 00000000..d590b3a6 --- /dev/null +++ b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTFormatDescription.h @@ -0,0 +1,36 @@ +/* + * 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 <jni.h> +/* Header for class org_jitsi_impl_neomedia_quicktime_QTFormatDescription */ + +#ifndef _Included_org_jitsi_impl_neomedia_quicktime_QTFormatDescription +#define _Included_org_jitsi_impl_neomedia_quicktime_QTFormatDescription +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: org_jitsi_impl_neomedia_quicktime_QTFormatDescription + * Method: sizeForKey + * Signature: (JLjava/lang/String;)Ljava/awt/Dimension; + */ +JNIEXPORT jobject JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTFormatDescription_sizeForKey + (JNIEnv *, jclass, jlong, jstring); + +/* + * Class: org_jitsi_impl_neomedia_quicktime_QTFormatDescription + * Method: VideoEncodedPixelsSizeAttribute + * Signature: ()Ljava/lang/String; + */ +JNIEXPORT jstring JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTFormatDescription_VideoEncodedPixelsSizeAttribute + (JNIEnv *, jclass); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTFormatDescription.m b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTFormatDescription.m new file mode 100644 index 00000000..13d5a786 --- /dev/null +++ b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTFormatDescription.m @@ -0,0 +1,93 @@ +/* + * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client. + * + * Distributable under LGPL license. + * See terms of license at gnu.org. + */ + +#include "org_jitsi_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> +#include <stdint.h> + +JNIEXPORT jobject JNICALL +Java_org_jitsi_impl_neomedia_quicktime_QTFormatDescription_sizeForKey + (JNIEnv *jniEnv, jclass clazz, jlong ptr, jstring key) +{ + const char *cKey; + jobject size = NULL; + + cKey = (const char *) (*jniEnv)->GetStringUTFChars(jniEnv, key, NULL); + if (cKey) + { + QTFormatDescription *formatDescription; + NSAutoreleasePool *autoreleasePool; + NSString *oKey; + NSValue *attribute; + + formatDescription = (QTFormatDescription *) (intptr_t) 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); + } + } + + [autoreleasePool release]; + } + return size; +} + +JNIEXPORT jstring JNICALL +Java_org_jitsi_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/org_jitsi_impl_neomedia_quicktime_QTSampleBuffer.h b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTSampleBuffer.h new file mode 100644 index 00000000..e78a2694 --- /dev/null +++ b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTSampleBuffer.h @@ -0,0 +1,36 @@ +/* + * 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 <jni.h> +/* Header for class org_jitsi_impl_neomedia_quicktime_QTSampleBuffer */ + +#ifndef _Included_org_jitsi_impl_neomedia_quicktime_QTSampleBuffer +#define _Included_org_jitsi_impl_neomedia_quicktime_QTSampleBuffer +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: org_jitsi_impl_neomedia_quicktime_QTSampleBuffer + * Method: bytesForAllSamples + * Signature: (J)[B + */ +JNIEXPORT jbyteArray JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTSampleBuffer_bytesForAllSamples + (JNIEnv *, jclass, jlong); + +/* + * Class: org_jitsi_impl_neomedia_quicktime_QTSampleBuffer + * Method: formatDescription + * Signature: (J)J + */ +JNIEXPORT jlong JNICALL Java_org_jitsi_impl_neomedia_quicktime_QTSampleBuffer_formatDescription + (JNIEnv *, jclass, jlong); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTSampleBuffer.m b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTSampleBuffer.m new file mode 100644 index 00000000..2fe4f786 --- /dev/null +++ b/src/native/macosx/quicktime/org_jitsi_impl_neomedia_quicktime_QTSampleBuffer.m @@ -0,0 +1,69 @@ +/* + * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client. + * + * Distributable under LGPL license. + * See terms of license at gnu.org. + */ + +#include "org_jitsi_impl_neomedia_quicktime_QTSampleBuffer.h" + +#import <Foundation/NSAutoreleasePool.h> +#import <QTKit/QTFormatDescription.h> +#import <QTKit/QTSampleBuffer.h> +#include <stdint.h> + +JNIEXPORT jbyteArray JNICALL +Java_org_jitsi_impl_neomedia_quicktime_QTSampleBuffer_bytesForAllSamples + (JNIEnv *jniEnv, jclass clazz, jlong ptr) +{ + QTSampleBuffer *sampleBuffer; + NSAutoreleasePool *autoreleasePool; + NSUInteger lengthForAllSamples; + jbyteArray jBytesForAllSamples; + + sampleBuffer = (QTSampleBuffer *) (intptr_t) 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_org_jitsi_impl_neomedia_quicktime_QTSampleBuffer_formatDescription + (JNIEnv *jniEnv, jclass clazz, jlong ptr) +{ + QTSampleBuffer *sampleBuffer; + NSAutoreleasePool *autoreleasePool; + QTFormatDescription *formatDescription; + + sampleBuffer = (QTSampleBuffer *) (intptr_t) ptr; + autoreleasePool = [[NSAutoreleasePool alloc] init]; + + formatDescription = [sampleBuffer formatDescription]; + if (formatDescription) + [formatDescription retain]; + + [autoreleasePool release]; + return (jlong) (intptr_t) formatDescription; +} diff --git a/src/net/java/sip/communicator/impl/neomedia/jmfext/media/renderer/video/JAWTRenderer.java b/src/net/java/sip/communicator/impl/neomedia/jmfext/media/renderer/video/JAWTRenderer.java index ba6ab5d0..07b66f37 100644 --- a/src/net/java/sip/communicator/impl/neomedia/jmfext/media/renderer/video/JAWTRenderer.java +++ b/src/net/java/sip/communicator/impl/neomedia/jmfext/media/renderer/video/JAWTRenderer.java @@ -226,7 +226,10 @@ public synchronized Component getComponent() { StringBuilder componentClassName = new StringBuilder(); - componentClassName.append(JAWTRenderer.class.getName()); + componentClassName.append( + "org.jitsi" + + ".impl.neomedia.jmfext.media.renderer.video" + + ".JAWTRenderer"); if (USE_MACOSX_CALAYERS && OSUtils.IS_MAC) componentClassName.append("Swing"); else if (OSUtils.IS_ANDROID) diff --git a/src/org/jitsi/impl/neomedia/device/DeviceConfiguration.java b/src/org/jitsi/impl/neomedia/device/DeviceConfiguration.java index 3c7c4660..8c025e56 100644 --- a/src/org/jitsi/impl/neomedia/device/DeviceConfiguration.java +++ b/src/org/jitsi/impl/neomedia/device/DeviceConfiguration.java @@ -800,14 +800,14 @@ private void registerCustomRenderers() { int pluginCount = plugins.size(); int pluginBeginIndex = 0; - String preferred = "org.jitsi.impl.neomedia."; for (int pluginIndex = pluginCount - 1; pluginIndex >= pluginBeginIndex;) { String plugin = plugins.get(pluginIndex); - if (plugin.startsWith(preferred)) + if (plugin.startsWith("org.jitsi.") + || plugin.startsWith("net.java.sip.communicator.")) { plugins.remove(pluginIndex); plugins.add(0, plugin); diff --git a/src/org/jitsi/impl/neomedia/device/QuickTimeSystem.java b/src/org/jitsi/impl/neomedia/device/QuickTimeSystem.java index c1e9f237..304ad6ad 100644 --- a/src/org/jitsi/impl/neomedia/device/QuickTimeSystem.java +++ b/src/org/jitsi/impl/neomedia/device/QuickTimeSystem.java @@ -10,7 +10,6 @@ import javax.media.format.*; import net.java.sip.communicator.impl.neomedia.codec.*; -import net.java.sip.communicator.impl.neomedia.quicktime.*; import org.jitsi.impl.neomedia.*; import org.jitsi.impl.neomedia.codec.video.*; diff --git a/src/org/jitsi/impl/neomedia/jmfext/media/protocol/quicktime/DataSource.java b/src/org/jitsi/impl/neomedia/jmfext/media/protocol/quicktime/DataSource.java index 18199544..6489cdab 100644 --- a/src/org/jitsi/impl/neomedia/jmfext/media/protocol/quicktime/DataSource.java +++ b/src/org/jitsi/impl/neomedia/jmfext/media/protocol/quicktime/DataSource.java @@ -16,14 +16,11 @@ import javax.media.control.*; import javax.media.format.*; -import net.java.sip.communicator.impl.neomedia.quicktime.*; - import org.jitsi.impl.neomedia.control.*; import org.jitsi.impl.neomedia.device.*; import org.jitsi.impl.neomedia.jmfext.media.protocol.*; import org.jitsi.impl.neomedia.quicktime.*; import org.jitsi.util.*; -// disambiguation /** * Implements a <tt>PushBufferDataSource</tt> and <tt>CaptureDevice</tt> using diff --git a/src/org/jitsi/impl/neomedia/jmfext/media/protocol/quicktime/QuickTimeStream.java b/src/org/jitsi/impl/neomedia/jmfext/media/protocol/quicktime/QuickTimeStream.java index 2e1b6664..f148b873 100644 --- a/src/org/jitsi/impl/neomedia/jmfext/media/protocol/quicktime/QuickTimeStream.java +++ b/src/org/jitsi/impl/neomedia/jmfext/media/protocol/quicktime/QuickTimeStream.java @@ -15,7 +15,6 @@ import javax.media.protocol.*; import net.java.sip.communicator.impl.neomedia.codec.*; -import net.java.sip.communicator.impl.neomedia.quicktime.*; import org.jitsi.impl.neomedia.*; import org.jitsi.impl.neomedia.codec.video.*; diff --git a/src/org/jitsi/impl/neomedia/jmfext/media/renderer/video/JAWTRendererVideoComponent.java b/src/org/jitsi/impl/neomedia/jmfext/media/renderer/video/JAWTRendererVideoComponent.java index 7c3977df..e8b1b089 100644 --- a/src/org/jitsi/impl/neomedia/jmfext/media/renderer/video/JAWTRendererVideoComponent.java +++ b/src/org/jitsi/impl/neomedia/jmfext/media/renderer/video/JAWTRendererVideoComponent.java @@ -57,6 +57,11 @@ public JAWTRendererVideoComponent(JAWTRenderer renderer) this.renderer = renderer; } + /** + * Overrides {@link Component#addNotify()} to reset the indicator which + * determines whether the native counterpart of this <tt>JAWTRenderer</tt> + * wants <tt>paint</tt> calls on its AWT <tt>Component</tt> to be delivered. + */ @Override public void addNotify() { @@ -90,6 +95,10 @@ protected Object getHandleLock() return renderer.getHandleLock(); } + /** + * Overrides {@link Canvas#paint(Graphics)} to paint this <tt>Component</tt> + * in the native counterpart of its associated <tt>JAWTRenderer</tt>. + */ @Override public void paint(Graphics g) { @@ -105,6 +114,11 @@ public void paint(Graphics g) } } + /** + * Overrides {@link Component#removeNotify()} to reset the indicator which + * determines whether the native counterpart of this <tt>JAWTRenderer</tt> + * wants <tt>paint</tt> calls on its AWT <tt>Component</tt> to be delivered. + */ @Override public void removeNotify() { @@ -118,6 +132,10 @@ public void removeNotify() super.removeNotify(); } + /** + * Overrides {@link Canvas#update(Graphics)} to skip the filling with the + * background color in order to prevent flickering. + */ @Override public void update(Graphics g) { diff --git a/src/net/java/sip/communicator/impl/neomedia/quicktime/CVImageBuffer.java b/src/org/jitsi/impl/neomedia/quicktime/CVImageBuffer.java similarity index 95% rename from src/net/java/sip/communicator/impl/neomedia/quicktime/CVImageBuffer.java rename to src/org/jitsi/impl/neomedia/quicktime/CVImageBuffer.java index 21fb32b3..d17a18aa 100644 --- a/src/net/java/sip/communicator/impl/neomedia/quicktime/CVImageBuffer.java +++ b/src/org/jitsi/impl/neomedia/quicktime/CVImageBuffer.java @@ -4,7 +4,7 @@ * Distributable under LGPL license. * See terms of license at gnu.org. */ -package net.java.sip.communicator.impl.neomedia.quicktime; +package org.jitsi.impl.neomedia.quicktime; /** * Represents a CoreVideo <tt>CVImageBufferRef</tt>. diff --git a/src/net/java/sip/communicator/impl/neomedia/quicktime/CVPixelBuffer.java b/src/org/jitsi/impl/neomedia/quicktime/CVPixelBuffer.java similarity index 98% rename from src/net/java/sip/communicator/impl/neomedia/quicktime/CVPixelBuffer.java rename to src/org/jitsi/impl/neomedia/quicktime/CVPixelBuffer.java index ee6fa7cf..cf96fa51 100644 --- a/src/net/java/sip/communicator/impl/neomedia/quicktime/CVPixelBuffer.java +++ b/src/org/jitsi/impl/neomedia/quicktime/CVPixelBuffer.java @@ -4,12 +4,12 @@ * Distributable under LGPL license. * See terms of license at gnu.org. */ -package net.java.sip.communicator.impl.neomedia.quicktime; +package org.jitsi.impl.neomedia.quicktime; /** * Represents a CoreVideo <tt>CVPixelBufferRef</tt>. * - * @author Lubomir Marinov + * @author Lyubomir Marinov */ public class CVPixelBuffer extends CVImageBuffer diff --git a/src/net/java/sip/communicator/impl/neomedia/quicktime/CVPixelBufferAttributeKey.java b/src/org/jitsi/impl/neomedia/quicktime/CVPixelBufferAttributeKey.java similarity index 94% rename from src/net/java/sip/communicator/impl/neomedia/quicktime/CVPixelBufferAttributeKey.java rename to src/org/jitsi/impl/neomedia/quicktime/CVPixelBufferAttributeKey.java index 8ae76e9d..0a90d489 100644 --- a/src/net/java/sip/communicator/impl/neomedia/quicktime/CVPixelBufferAttributeKey.java +++ b/src/org/jitsi/impl/neomedia/quicktime/CVPixelBufferAttributeKey.java @@ -4,7 +4,7 @@ * Distributable under LGPL license. * See terms of license at gnu.org. */ -package net.java.sip.communicator.impl.neomedia.quicktime; +package org.jitsi.impl.neomedia.quicktime; /** * @author Lyubomir Marinov diff --git a/src/org/jitsi/impl/neomedia/quicktime/CVPixelFormatType.java b/src/org/jitsi/impl/neomedia/quicktime/CVPixelFormatType.java index aeba6d60..ed967b6b 100644 --- a/src/org/jitsi/impl/neomedia/quicktime/CVPixelFormatType.java +++ b/src/org/jitsi/impl/neomedia/quicktime/CVPixelFormatType.java @@ -10,7 +10,7 @@ * Defines the types of <tt>CVPixelBuffer</tt>s to be output by * <tt>QTCaptureDecompressedVideoOutput</tt>. * - * @author Lubomir Marinov + * @author Lyubomir Marinov */ public final class CVPixelFormatType { diff --git a/src/net/java/sip/communicator/impl/neomedia/quicktime/NSDictionary.java b/src/org/jitsi/impl/neomedia/quicktime/NSDictionary.java similarity index 92% rename from src/net/java/sip/communicator/impl/neomedia/quicktime/NSDictionary.java rename to src/org/jitsi/impl/neomedia/quicktime/NSDictionary.java index 44749f71..0f3a608b 100644 --- a/src/net/java/sip/communicator/impl/neomedia/quicktime/NSDictionary.java +++ b/src/org/jitsi/impl/neomedia/quicktime/NSDictionary.java @@ -4,12 +4,12 @@ * Distributable under LGPL license. * See terms of license at gnu.org. */ -package net.java.sip.communicator.impl.neomedia.quicktime; +package org.jitsi.impl.neomedia.quicktime; /** * Represents an Objective-C <tt>NSDictionary</tt> object. * - * @author Lubomir Marinov + * @author Lyubomir Marinov */ public class NSDictionary extends NSObject diff --git a/src/org/jitsi/impl/neomedia/quicktime/NSError.java b/src/org/jitsi/impl/neomedia/quicktime/NSError.java index 9bc7761f..ad65eb69 100644 --- a/src/org/jitsi/impl/neomedia/quicktime/NSError.java +++ b/src/org/jitsi/impl/neomedia/quicktime/NSError.java @@ -6,12 +6,10 @@ */ package org.jitsi.impl.neomedia.quicktime; -import net.java.sip.communicator.impl.neomedia.quicktime.*; - /** * Represents an Objective-C <tt>NSError</tt> object. * - * @author Lubomir Marinov + * @author Lyubomir Marinov */ public class NSError extends NSObject diff --git a/src/org/jitsi/impl/neomedia/quicktime/NSErrorException.java b/src/org/jitsi/impl/neomedia/quicktime/NSErrorException.java index 74f30f86..f7bf5cc4 100644 --- a/src/org/jitsi/impl/neomedia/quicktime/NSErrorException.java +++ b/src/org/jitsi/impl/neomedia/quicktime/NSErrorException.java @@ -9,7 +9,7 @@ /** * Defines an <tt>Exception</tt> which reports an <tt>NSError</tt>. * - * @author Lubomir Marinov + * @author Lyubomir Marinov */ public class NSErrorException extends Exception diff --git a/src/net/java/sip/communicator/impl/neomedia/quicktime/NSMutableDictionary.java b/src/org/jitsi/impl/neomedia/quicktime/NSMutableDictionary.java similarity index 92% rename from src/net/java/sip/communicator/impl/neomedia/quicktime/NSMutableDictionary.java rename to src/org/jitsi/impl/neomedia/quicktime/NSMutableDictionary.java index 73f9bbfe..361661d6 100644 --- a/src/net/java/sip/communicator/impl/neomedia/quicktime/NSMutableDictionary.java +++ b/src/org/jitsi/impl/neomedia/quicktime/NSMutableDictionary.java @@ -4,12 +4,12 @@ * Distributable under LGPL license. * See terms of license at gnu.org. */ -package net.java.sip.communicator.impl.neomedia.quicktime; +package org.jitsi.impl.neomedia.quicktime; /** * Represents an Objective-C <tt>NSMutableDictionary</tt> object. * - * @author Lubomir Marinov + * @author Lyubomir Marinov */ public class NSMutableDictionary extends NSDictionary diff --git a/src/net/java/sip/communicator/impl/neomedia/quicktime/NSObject.java b/src/org/jitsi/impl/neomedia/quicktime/NSObject.java similarity index 97% rename from src/net/java/sip/communicator/impl/neomedia/quicktime/NSObject.java rename to src/org/jitsi/impl/neomedia/quicktime/NSObject.java index bcb8513e..0dfac8b5 100644 --- a/src/net/java/sip/communicator/impl/neomedia/quicktime/NSObject.java +++ b/src/org/jitsi/impl/neomedia/quicktime/NSObject.java @@ -4,7 +4,7 @@ * Distributable under LGPL license. * See terms of license at gnu.org. */ -package net.java.sip.communicator.impl.neomedia.quicktime; +package org.jitsi.impl.neomedia.quicktime; /** * Represents the root of most Objective-C class hierarchies which which objects diff --git a/src/net/java/sip/communicator/impl/neomedia/quicktime/QTCaptureDecompressedVideoOutput.java b/src/org/jitsi/impl/neomedia/quicktime/QTCaptureDecompressedVideoOutput.java similarity index 98% rename from src/net/java/sip/communicator/impl/neomedia/quicktime/QTCaptureDecompressedVideoOutput.java rename to src/org/jitsi/impl/neomedia/quicktime/QTCaptureDecompressedVideoOutput.java index 8ee392f0..ec812f4c 100644 --- a/src/net/java/sip/communicator/impl/neomedia/quicktime/QTCaptureDecompressedVideoOutput.java +++ b/src/org/jitsi/impl/neomedia/quicktime/QTCaptureDecompressedVideoOutput.java @@ -4,9 +4,7 @@ * Distributable under LGPL license. * See terms of license at gnu.org. */ -package net.java.sip.communicator.impl.neomedia.quicktime; - -import org.jitsi.impl.neomedia.quicktime.*; +package org.jitsi.impl.neomedia.quicktime; /** * Represents a QTKit <tt>QTCaptureDecompressedVideoOutput</tt> object. diff --git a/src/net/java/sip/communicator/impl/neomedia/quicktime/QTCaptureDevice.java b/src/org/jitsi/impl/neomedia/quicktime/QTCaptureDevice.java similarity index 98% rename from src/net/java/sip/communicator/impl/neomedia/quicktime/QTCaptureDevice.java rename to src/org/jitsi/impl/neomedia/quicktime/QTCaptureDevice.java index 7abae1ba..3a526ba8 100644 --- a/src/net/java/sip/communicator/impl/neomedia/quicktime/QTCaptureDevice.java +++ b/src/org/jitsi/impl/neomedia/quicktime/QTCaptureDevice.java @@ -4,17 +4,15 @@ * Distributable under LGPL license. * See terms of license at gnu.org. */ -package net.java.sip.communicator.impl.neomedia.quicktime; +package org.jitsi.impl.neomedia.quicktime; import java.util.*; -import org.jitsi.impl.neomedia.quicktime.*; - /** * Represents a QTKit capture device which is connected or has been previously * connected to the user's computer during the lifetime of the application. * - * @author Lubomir Marinov + * @author Lyubomir Marinov */ public class QTCaptureDevice extends NSObject diff --git a/src/net/java/sip/communicator/impl/neomedia/quicktime/QTCaptureDeviceInput.java b/src/org/jitsi/impl/neomedia/quicktime/QTCaptureDeviceInput.java similarity index 90% rename from src/net/java/sip/communicator/impl/neomedia/quicktime/QTCaptureDeviceInput.java rename to src/org/jitsi/impl/neomedia/quicktime/QTCaptureDeviceInput.java index 4b683e8d..42d7c9dd 100644 --- a/src/net/java/sip/communicator/impl/neomedia/quicktime/QTCaptureDeviceInput.java +++ b/src/org/jitsi/impl/neomedia/quicktime/QTCaptureDeviceInput.java @@ -4,14 +4,12 @@ * Distributable under LGPL license. * See terms of license at gnu.org. */ -package net.java.sip.communicator.impl.neomedia.quicktime; - -import org.jitsi.impl.neomedia.quicktime.*; +package org.jitsi.impl.neomedia.quicktime; /** * Represents a QTKit <tt>QTCaptureDeviceInput</tt> object. * - * @author Lubomir Marinov + * @author Lyubomir Marinov */ public class QTCaptureDeviceInput extends QTCaptureInput diff --git a/src/org/jitsi/impl/neomedia/quicktime/QTCaptureInput.java b/src/org/jitsi/impl/neomedia/quicktime/QTCaptureInput.java index 20a75fb0..37e05356 100644 --- a/src/org/jitsi/impl/neomedia/quicktime/QTCaptureInput.java +++ b/src/org/jitsi/impl/neomedia/quicktime/QTCaptureInput.java @@ -6,12 +6,10 @@ */ package org.jitsi.impl.neomedia.quicktime; -import net.java.sip.communicator.impl.neomedia.quicktime.*; - /** * Represents a QTKit <tt>QTCaptureInput</tt> object. * - * @author Lubomir Marinov + * @author Lyubomir Marinov */ public class QTCaptureInput extends NSObject diff --git a/src/org/jitsi/impl/neomedia/quicktime/QTCaptureOutput.java b/src/org/jitsi/impl/neomedia/quicktime/QTCaptureOutput.java index b737d4fb..3a6ff656 100644 --- a/src/org/jitsi/impl/neomedia/quicktime/QTCaptureOutput.java +++ b/src/org/jitsi/impl/neomedia/quicktime/QTCaptureOutput.java @@ -6,12 +6,10 @@ */ package org.jitsi.impl.neomedia.quicktime; -import net.java.sip.communicator.impl.neomedia.quicktime.*; - /** * Represents a QTKit <tt>QTCaptureOutput</tt> object. * - * @author Lubomir Marinov + * @author Lyubomir Marinov */ public class QTCaptureOutput extends NSObject diff --git a/src/net/java/sip/communicator/impl/neomedia/quicktime/QTCaptureSession.java b/src/org/jitsi/impl/neomedia/quicktime/QTCaptureSession.java similarity index 94% rename from src/net/java/sip/communicator/impl/neomedia/quicktime/QTCaptureSession.java rename to src/org/jitsi/impl/neomedia/quicktime/QTCaptureSession.java index 1eac56ee..2d61345f 100644 --- a/src/net/java/sip/communicator/impl/neomedia/quicktime/QTCaptureSession.java +++ b/src/org/jitsi/impl/neomedia/quicktime/QTCaptureSession.java @@ -4,14 +4,12 @@ * Distributable under LGPL license. * See terms of license at gnu.org. */ -package net.java.sip.communicator.impl.neomedia.quicktime; - -import org.jitsi.impl.neomedia.quicktime.*; +package org.jitsi.impl.neomedia.quicktime; /** * Represents a QTKit <tt>QTCaptureSession</tt> object. * - * @author Lubomir Marinov + * @author Lyubomir Marinov */ public class QTCaptureSession extends NSObject diff --git a/src/net/java/sip/communicator/impl/neomedia/quicktime/QTFormatDescription.java b/src/org/jitsi/impl/neomedia/quicktime/QTFormatDescription.java similarity index 94% rename from src/net/java/sip/communicator/impl/neomedia/quicktime/QTFormatDescription.java rename to src/org/jitsi/impl/neomedia/quicktime/QTFormatDescription.java index 006d0dfc..056bd41b 100644 --- a/src/net/java/sip/communicator/impl/neomedia/quicktime/QTFormatDescription.java +++ b/src/org/jitsi/impl/neomedia/quicktime/QTFormatDescription.java @@ -4,7 +4,7 @@ * Distributable under LGPL license. * See terms of license at gnu.org. */ -package net.java.sip.communicator.impl.neomedia.quicktime; +package org.jitsi.impl.neomedia.quicktime; import java.awt.*; @@ -14,7 +14,7 @@ * such as media type and format type (or codec type), as well as extended * information specific to each media type. * - * @author Lubomir Marinov + * @author Lyubomir Marinov */ public class QTFormatDescription extends NSObject diff --git a/src/org/jitsi/impl/neomedia/quicktime/QTMediaType.java b/src/org/jitsi/impl/neomedia/quicktime/QTMediaType.java index 3f0d0af3..917ae0f5 100644 --- a/src/org/jitsi/impl/neomedia/quicktime/QTMediaType.java +++ b/src/org/jitsi/impl/neomedia/quicktime/QTMediaType.java @@ -9,7 +9,7 @@ /** * Enumerates the QTKit media types. * - * @author Lubomir Marinov + * @author Lyubomir Marinov */ public enum QTMediaType { diff --git a/src/net/java/sip/communicator/impl/neomedia/quicktime/QTSampleBuffer.java b/src/org/jitsi/impl/neomedia/quicktime/QTSampleBuffer.java similarity index 92% rename from src/net/java/sip/communicator/impl/neomedia/quicktime/QTSampleBuffer.java rename to src/org/jitsi/impl/neomedia/quicktime/QTSampleBuffer.java index 8c7425ac..425d6fe6 100644 --- a/src/net/java/sip/communicator/impl/neomedia/quicktime/QTSampleBuffer.java +++ b/src/org/jitsi/impl/neomedia/quicktime/QTSampleBuffer.java @@ -4,12 +4,12 @@ * Distributable under LGPL license. * See terms of license at gnu.org. */ -package net.java.sip.communicator.impl.neomedia.quicktime; +package org.jitsi.impl.neomedia.quicktime; /** * Represents a QuickTime/QTKit <tt>QTSampleBuffer</tt> object. * - * @author Lubomir Marinov + * @author Lyubomir Marinov */ public class QTSampleBuffer extends NSObject diff --git a/src/org/jitsi/util/swing/VideoLayout.java b/src/org/jitsi/util/swing/VideoLayout.java index 5ee6724c..3ff9c2b7 100644 --- a/src/org/jitsi/util/swing/VideoLayout.java +++ b/src/org/jitsi/util/swing/VideoLayout.java @@ -19,7 +19,8 @@ * @author Lyubomir Marinov * @author Yana Stamcheva */ -public class VideoLayout extends FitLayout +public class VideoLayout + extends FitLayout { /** * The video canvas constraint. @@ -97,8 +98,6 @@ public class VideoLayout extends FitLayout */ public VideoLayout(boolean isConference) { - super(); - this.isConference = isConference; } @@ -149,11 +148,11 @@ else if (name.equals(CANVAS)) */ private int calculateColumnCount(List<Component> remotes) { - int remotesCount = remotes.size(); + int remoteCount = remotes.size(); - if (remotesCount == 1) + if (remoteCount == 1) return 1; - else if (remotesCount == 2 || remotesCount == 4) + else if ((remoteCount == 2) || (remoteCount == 4)) return 2; else return 3; @@ -295,6 +294,7 @@ else if (remoteCount > 0) = Math.round(parentSize.height * LOCAL_TO_REMOTE_RATIO); int width = Math.round(parentSize.width * LOCAL_TO_REMOTE_RATIO); + float alignmentX; /* * XXX The remote Component being a JLabel is meant to signal @@ -303,25 +303,21 @@ else if (remoteCount > 0) */ if ((remotes.size() == 1) && (remote0 instanceof JLabel)) { - localX = parentSize.width/2 - width/2; + localX = (parentSize.width - width) / 2; localY = parentSize.height - height; - super.layoutComponent( - local, - new Rectangle(localX, localY, width, height), - Component.CENTER_ALIGNMENT, - Component.BOTTOM_ALIGNMENT); + alignmentX = Component.CENTER_ALIGNMENT; } else { localX = ((remote0 == null) ? 0 : remote0.getX()) + 5; localY = parentSize.height - height - 5; - - super.layoutComponent( - local, - new Rectangle(localX, localY, width, height), - Component.LEFT_ALIGNMENT, - Component.BOTTOM_ALIGNMENT); + alignmentX = Component.LEFT_ALIGNMENT; } + super.layoutComponent( + local, + new Rectangle(localX, localY, width, height), + alignmentX, + Component.BOTTOM_ALIGNMENT); } if (closeButton != null) -- GitLab