From 53d72aa03965b736e3e2353dbd297fbd224a8423 Mon Sep 17 00:00:00 2001 From: Sebastien Vincent Date: Fri, 2 Jul 2010 15:11:04 +0000 Subject: [PATCH] Each screen display has now its own capture device. Note that on Linux, multiple monitors are seen as one screen. JAWTRenderer on Linux will not display image > 2048x2048 due to driver limitation (XvCreateImage), so avoid dropping image if size mismatch and show what we can. --- lib/native/freebsd-64/libscreencapture.so | Bin 10062 -> 10130 bytes lib/native/freebsd/libscreencapture.so | Bin 7795 -> 7799 bytes lib/native/linux-64/libjawtrenderer.so | Bin 11688 -> 16001 bytes lib/native/linux-64/libscreencapture.so | Bin 11238 -> 11290 bytes lib/native/linux/libjawtrenderer.so | Bin 8724 -> 12650 bytes lib/native/linux/libscreencapture.so | Bin 8679 -> 8739 bytes lib/native/mac/libscreencapture.jnilib | Bin 41936 -> 42044 bytes lib/native/windows-64/screencapture.dll | Bin 42212 -> 42608 bytes lib/native/windows/screencapture.dll | Bin 62986 -> 39364 bytes src/native/jawtrenderer/JAWTRenderer_Linux.c | 14 +- ...eomedia_imgstreaming_NativeScreenCapture.c | 135 ++++++++++++++---- ...eomedia_imgstreaming_NativeScreenCapture.h | 6 +- .../neomedia/device/ImageStreamingAuto.java | 90 ++++++++++-- .../imgstreaming/DesktopInteract.java | 12 +- .../imgstreaming/DesktopInteractImpl.java | 20 +-- .../imgstreaming/NativeScreenCapture.java | 6 +- .../protocol/imgstreaming/DataSource.java | 43 +----- .../protocol/imgstreaming/ImageStream.java | 39 ++++- 18 files changed, 266 insertions(+), 99 deletions(-) diff --git a/lib/native/freebsd-64/libscreencapture.so b/lib/native/freebsd-64/libscreencapture.so index 4ee183a46e7139a6b7a1f8ef2e0633a6558bb44d..cf2fabc67837937b5a29da321148ed06dba0166d 100755 GIT binary patch literal 10130 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 diff --git a/lib/native/linux-64/libjawtrenderer.so b/lib/native/linux-64/libjawtrenderer.so index 2e389d7d8e129f627bf2ca5e39db39c1b88eb0c0..b9ad0f7fe83d5cf2eec4e63036c68c5b7f13d165 100755 GIT binary patch literal 16001 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 literal 11688 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 b7=4~;y`=#CP~W|Bvl|umjF*Udq5gjWl>u-X diff --git a/lib/native/linux-64/libscreencapture.so b/lib/native/linux-64/libscreencapture.so index 98bc46aa389d5020ac7e8533b67ac9ddebf5ac0b..a53cc7b54cfb4b23de18def3f3ecf014acb1ec84 100755 GIT binary patch literal 11290 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 P)K%IdCAY_HH`4wMV0xN? literal 11238 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 diff --git a/lib/native/linux/libjawtrenderer.so b/lib/native/linux/libjawtrenderer.so index 1fa4fa01c4d6de7ca8a38899154724e9efa912e6..3fa0bbf0a20038b0381268e10d7a78ce07cb68e1 100755 GIT binary patch literal 12650 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 F{tw337(f63 literal 8724 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 KcJ7wBi~k9vqHzNN diff --git a/lib/native/mac/libscreencapture.jnilib b/lib/native/mac/libscreencapture.jnilib index eef6a1d3eff3813e2573801aaa188e2e8403adc8..196f3ab25e46484bf006ddac9beff0dd550416ef 100755 GIT binary patch literal 42044 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 B7zqFX delta 3995 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 literal 42212 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Ύ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 diff --git a/src/native/jawtrenderer/JAWTRenderer_Linux.c b/src/native/jawtrenderer/JAWTRenderer_Linux.c index 65b158d9a..990d78456 100644 --- a/src/native/jawtrenderer/JAWTRenderer_Linux.c +++ b/src/native/jawtrenderer/JAWTRenderer_Linux.c @@ -293,7 +293,12 @@ _JAWTRenderer_createImage(JAWTRenderer *renderer) image = renderer->image; width = renderer->dataWidth; height = renderer->dataHeight; - if (image && ((image->width != width) || (image->height != height))) + + /* XvCreateImage is limited to 2048x2048 image so do not drop image + * if size exceed the limit + */ + if (image && ((image->width != width) || (image->height != height)) && + width < 2048 && height < 2048) { XFree(image); image = NULL; @@ -307,11 +312,16 @@ _JAWTRenderer_createImage(JAWTRenderer *renderer) renderer->imageFormatID, NULL, width, height); + /* * XvCreateImage is documented to enlarge width and height for some YUV * formats. But I don't know how to handle such a situation. */ - if (image && ((image->width != width) || (image->height != height))) + /* XvCreateImage is limited to 2048x2048 image so do not drop image + * if size exceed this limit + */ + if (image && ((image->width != width) || (image->height != height)) && + width < 2048 && height < 2048) { XFree(image); image = NULL; diff --git a/src/native/screencapture/net_java_sip_communicator_impl_neomedia_imgstreaming_NativeScreenCapture.c b/src/native/screencapture/net_java_sip_communicator_impl_neomedia_imgstreaming_NativeScreenCapture.c index 723f2786d..4d370961e 100644 --- a/src/native/screencapture/net_java_sip_communicator_impl_neomedia_imgstreaming_NativeScreenCapture.c +++ b/src/native/screencapture/net_java_sip_communicator_impl_neomedia_imgstreaming_NativeScreenCapture.c @@ -50,16 +50,83 @@ typedef unsigned __int8 uint8_t; #if defined(_WIN32) || defined (_WIN64) +/** + * \struct monitor_data + * \brief Used with monitorCallback to pass index and receive DC + */ +struct monitor_data +{ + unsigned int monitor_index; /**< Index of the specific monitor */ + unsigned int current_index; /**< Internal index of monitor in callback */ + HDC monitor_dc; /**< DC of the monitor (set by monitorCallback if any) */ +}; + +/** + * \brief Callback when using EnumDisplayMonitors function. + * \param hMonitor monitor object + * \param hdcMonitor DC passed from EnumDisplayMonitors + * \param lpcrMonitor clipping rectangle + * \param dwData additionnal data + * \return true if enumeration have to be stopped, false otherwise + */ +BOOL CALLBACK monitorCallback(HMONITOR hMonitor, HDC hdcMonitor, + LPRECT lprcMonitor, LPARAM dwData) +{ + struct monitor_data* data = (struct monitor_data*)dwData; + MONITORINFOEX info; + + /* avoid warnings */ + hdcMonitor = hdcMonitor; + lprcMonitor = lprcMonitor; + + if(data->current_index == data->monitor_index) + { + info.cbSize = sizeof(MONITORINFOEX); + GetMonitorInfo(hMonitor, (LPMONITORINFO)&info); + + /* create the DC for this monitor */ + data->monitor_dc = CreateDC(info.szDevice, info.szDevice, NULL, NULL); + + /* found the right monitor, breaks */ + return FALSE; + } + + data->current_index++; + return TRUE; +} + +/** + * \brief Get DC pointer for a specific display. + * \param display display index. + * \return DC pointer or NULL if failure + */ +static HDC get_dc(unsigned int index) +{ + HDC hDC = NULL; + struct monitor_data data; + + data.monitor_index = index; + data.current_index = 0; + data.monitor_dc = NULL; + + EnumDisplayMonitors(NULL, NULL, &monitorCallback, (LPARAM)&data); + + hDC = data.monitor_dc; + + return hDC; +} + /** * \brief Grab Windows screen. * \param data array that will contain screen capture + * \param display display index * \param x x position to start capture * \param y y position to start capture * \param w capture width * \param h capture height * \return 0 if success, -1 otherwise */ -static int windows_grab_screen(jbyte* data, int32_t x, int32_t y, int32_t w, int32_t h) +static int windows_grab_screen(jbyte* data, unsigned int display, int x, int y, int w, int h) { static const RGBQUAD redColor = {0x00, 0x00, 0xFF, 0x00}; static const RGBQUAD greenColor = {0x00, 0xFF, 0x00, 0x00}; @@ -79,8 +146,8 @@ static int windows_grab_screen(jbyte* data, int32_t x, int32_t y, int32_t w, int uint32_t test = 1; int little_endian = *((uint8_t*)&test); - /* get handle to the entire screen of Windows */ - desktop = GetDC(NULL); + /* get handle corresponding to the display specified */ + desktop = get_dc(display); if(!desktop) { @@ -107,7 +174,7 @@ static int windows_grab_screen(jbyte* data, int32_t x, int32_t y, int32_t w, int if(!dest) { - fprintf(stderr, "CreateCompatibleDC failed!\n"); + fprintf(stderr, "CreateCompatibleDC failed!\n"); ReleaseDC(NULL, desktop); return -1; } @@ -224,13 +291,14 @@ static int windows_grab_screen(jbyte* data, int32_t x, int32_t y, int32_t w, int /** * \brief Grab Mac OS X screen (with Quartz API). * \param data array that will contain screen capture + * \param display display index * \param x x position to start capture * \param y y position to start capture * \param w capture width * \param h capture height * \return 0 if success, -1 otherwise */ -static int quartz_grab_screen(jbyte* data, int32_t x, int32_t y, int32_t w, int32_t h) +static int quartz_grab_screen(jbyte* data, unsigned int display, int x, int y, int w, int h) { CGImageRef img = NULL; CGDataProviderRef provider = NULL; @@ -242,8 +310,26 @@ static int quartz_grab_screen(jbyte* data, int32_t x, int32_t y, int32_t w, int3 CGRect rect; uint32_t test = 1; int little_endian = *((uint8_t*)&test); + CGDirectDisplayID displayIds[16]; + CGDisplayCount displayNb = 0; - rect = CGRectMake(x, y, w, h); + /* find display */ + if(CGGetActiveDisplayList(display + 1, displayIds, &displayNb) != kCGErrorSuccess) + { + return -1; + } + + if(displayNb < (display + 1)) + { + /* request a non existent display */ + return -1; + } + + rect = CGDisplayBounds(displayIds[display]); + rect.size.width = w; + rect.size.height = h; + rect.origin.x += x; + rect.origin.y += y; img = CGWindowListCreateImage(rect, kCGWindowListOptionOnScreenOnly, kCGNullWindowID, kCGWindowImageDefault); if(img == NULL) @@ -291,13 +377,14 @@ static int quartz_grab_screen(jbyte* data, int32_t x, int32_t y, int32_t w, int3 * \brief Grab X11 screen. * \param x11display display string (i.e. :0.0), if NULL getenv("DISPLAY") is used * \param data array that will contain screen capture + * \param displayIndex display index * \param x x position to start capture * \param y y position to start capture * \param w capture width * \param h capture height * \return 0 if success, -1 otherwise */ -static int x11_grab_screen(const char* x11display, jbyte* data, int32_t x, int32_t y, int32_t w, int32_t h) +static int x11_grab_screen(jbyte* data, unsigned int displayIndex, int x, int y, int w, int h) { const char* display_str; /* display string */ Display* display = NULL; /* X11 display */ @@ -316,14 +403,10 @@ static int x11_grab_screen(const char* x11display, jbyte* data, int32_t x, int32 size_t size = 0; uint32_t test = 1; int little_endian = *((uint8_t*)&test); + char buf[16]; - display_str = x11display ? x11display : getenv("DISPLAY"); - - if(!display_str) - { - /* fprintf(stderr, "No display!\n"); */ - return -1; - } + snprintf(buf, sizeof(buf), ":0.%u", displayIndex); + display_str = buf; /* open current X11 display */ display = XOpenDisplay(display_str); @@ -463,6 +546,7 @@ static int x11_grab_screen(const char* x11display, jbyte* data, int32_t x, int32 * \brief JNI native method to grab desktop screen and retrieve ARGB pixels. * \param env JVM environment * \param clazz NativeScreenCapture Java class + * \param display display index * \param x x position to start capture * \param y y position to start capture * \param width capture width @@ -470,8 +554,8 @@ static int x11_grab_screen(const char* x11display, jbyte* data, int32_t x, int32 * \param output output buffer, screen bytes will be stored in * \return true if success, false otherwise */ -JNIEXPORT jboolean JNICALL Java_net_java_sip_communicator_impl_neomedia_imgstreaming_NativeScreenCapture_grabScreen__IIII_3B - (JNIEnv* env, jclass clazz, jint x, jint y, jint width, jint height, jbyteArray output) +JNIEXPORT jboolean JNICALL Java_net_java_sip_communicator_impl_neomedia_imgstreaming_NativeScreenCapture_grabScreen__IIIII_3B + (JNIEnv* env, jclass clazz, jint display, jint x, jint y, jint width, jint height, jbyteArray output) { jint size = width * height * 4; jbyte* data = NULL; @@ -491,11 +575,11 @@ JNIEXPORT jboolean JNICALL Java_net_java_sip_communicator_impl_neomedia_imgstrea } #if defined (_WIN32) || defined(_WIN64) - if(windows_grab_screen(data, x, y, width, height) == -1) + if(windows_grab_screen(data, display, x, y, width, height) == -1) #elif defined(__APPLE__) - if(quartz_grab_screen(data, x, y, width, height) == -1) + if(quartz_grab_screen(data, display, x, y, width, height) == -1) #else /* Unix */ - if(x11_grab_screen(NULL, data, x, y, width, height) == -1) + if(x11_grab_screen(data, display, x, y, width, height) == -1) #endif { (*env)->ReleasePrimitiveArrayCritical(env, output, data, 0); @@ -510,6 +594,7 @@ JNIEXPORT jboolean JNICALL Java_net_java_sip_communicator_impl_neomedia_imgstrea * \brief JNI native method to grab desktop screen and retrieve ARGB pixels. * \param env JVM environment * \param clazz NativeScreenCapture Java class + * \param display display index * \param x x position to start capture * \param y y position to start capture * \param width capture width @@ -517,8 +602,8 @@ JNIEXPORT jboolean JNICALL Java_net_java_sip_communicator_impl_neomedia_imgstrea * \param output native output buffer * \return true if success, false otherwise */ -JNIEXPORT jboolean JNICALL Java_net_java_sip_communicator_impl_neomedia_imgstreaming_NativeScreenCapture_grabScreen__IIIIJI - (JNIEnv* env, jclass clazz, jint x, jint y, jint width, jint height, jlong output, jint outputLength) +JNIEXPORT jboolean JNICALL Java_net_java_sip_communicator_impl_neomedia_imgstreaming_NativeScreenCapture_grabScreen__IIIIIJI + (JNIEnv* env, jclass clazz, jint display, jint x, jint y, jint width, jint height, jlong output, jint outputLength) { jint size = width * height * 4; jbyte* data = (jbyte*)output; @@ -533,11 +618,11 @@ JNIEXPORT jboolean JNICALL Java_net_java_sip_communicator_impl_neomedia_imgstrea } #if defined (_WIN32) || defined(_WIN64) - if(windows_grab_screen(data, x, y, width, height) == -1) + if(windows_grab_screen(data, display, x, y, width, height) == -1) #elif defined(__APPLE__) - if(quartz_grab_screen(data, x, y, width, height) == -1) + if(quartz_grab_screen(data, display, x, y, width, height) == -1) #else /* Unix */ - if(x11_grab_screen(NULL, data, x, y, width, height) == -1) + if(x11_grab_screen(data, display, x, y, width, height) == -1) #endif { return JNI_FALSE; @@ -545,4 +630,4 @@ JNIEXPORT jboolean JNICALL Java_net_java_sip_communicator_impl_neomedia_imgstrea return JNI_TRUE; } - + diff --git a/src/native/screencapture/net_java_sip_communicator_impl_neomedia_imgstreaming_NativeScreenCapture.h b/src/native/screencapture/net_java_sip_communicator_impl_neomedia_imgstreaming_NativeScreenCapture.h index d1d6581de..e550390b3 100644 --- a/src/native/screencapture/net_java_sip_communicator_impl_neomedia_imgstreaming_NativeScreenCapture.h +++ b/src/native/screencapture/net_java_sip_communicator_impl_neomedia_imgstreaming_NativeScreenCapture.h @@ -10,10 +10,10 @@ extern "C" { /* * Class: net_java_sip_communicator_impl_neomedia_imgstreaming_NativeScreenCapture * Method: grabScreen - * Signature: (IIII[B)Z + * Signature: (IIIII[B)Z */ -JNIEXPORT jboolean JNICALL Java_net_java_sip_communicator_impl_neomedia_imgstreaming_NativeScreenCapture_grabScreen__IIII_3B - (JNIEnv *, jclass, jint, jint, jint, jint, jbyteArray); +JNIEXPORT jboolean JNICALL Java_net_java_sip_communicator_impl_neomedia_imgstreaming_NativeScreenCapture_grabScreen__IIIII_3B + (JNIEnv *, jclass, jint, jint, jint, jint, jint, jbyteArray); /* * Class: net_java_sip_communicator_impl_neomedia_imgstreaming_NativeScreenCapture diff --git a/src/net/java/sip/communicator/impl/neomedia/device/ImageStreamingAuto.java b/src/net/java/sip/communicator/impl/neomedia/device/ImageStreamingAuto.java index 960bef492..0b37306a3 100644 --- a/src/net/java/sip/communicator/impl/neomedia/device/ImageStreamingAuto.java +++ b/src/net/java/sip/communicator/impl/neomedia/device/ImageStreamingAuto.java @@ -6,8 +6,16 @@ */ package net.java.sip.communicator.impl.neomedia.device; +import java.util.List; +import java.awt.*; + import javax.media.*; +import javax.media.format.*; +import net.java.sip.communicator.service.neomedia.device.*; +import net.java.sip.communicator.util.*; +import net.java.sip.communicator.impl.neomedia.codec.video.*; +import net.java.sip.communicator.impl.neomedia.*; import net.java.sip.communicator.impl.neomedia.imgstreaming.*; import net.java.sip.communicator.impl.neomedia.jmfext.media.protocol.imgstreaming.*; @@ -25,16 +33,78 @@ public class ImageStreamingAuto */ public ImageStreamingAuto() throws Exception { - String name = "Desktop Streaming (Experimental)"; - CaptureDeviceInfo devInfo - = new CaptureDeviceInfo( - name, - new MediaLocator( - ImageStreamingUtils.LOCATOR_PROTOCOL + ":" + name), - DataSource.getFormats()); - - /* add to JMF device manager */ - CaptureDeviceManager.addDevice(devInfo); + String name = "Desktop Streaming"; + List screens = NeomediaActivator.getMediaServiceImpl(). + getAvailableScreenDevices(); + int i = 0; + boolean multipleMonitorOneScreen = false; + Dimension screenSize = null; + + /* on Linux, multiple monitors may result in only one + * X display (:0.0) that combine those monitors + */ + if(OSUtils.IS_LINUX) + { + Dimension size = new Dimension(0, 0); + + for(ScreenDevice screen : screens) + { + size.width += screen.getSize().width; + size.height += screen.getSize().height; + } + + try + { + screenSize = Toolkit.getDefaultToolkit().getScreenSize(); + + if(screenSize.width == size.width || + screenSize.height == size.height) + { + multipleMonitorOneScreen = true; + } + } + catch(Exception e) + { + } + } + + for(ScreenDevice screen : screens) + { + Dimension size = screenSize != null ? screenSize : screen.getSize(); + + Format formats[]= new Format[] + { + new AVFrameFormat( + size, + Format.NOT_SPECIFIED, + FFmpeg.PIX_FMT_ARGB, + Format.NOT_SPECIFIED), + new RGBFormat( + size, // size + Format.NOT_SPECIFIED, // maxDataLength + Format.byteArray, // dataType + Format.NOT_SPECIFIED, // frameRate + 32, // bitsPerPixel + 2 /* red */, 3 /* green */, 4 /* blue */) + }; + + CaptureDeviceInfo devInfo + = new CaptureDeviceInfo( + name + " " + i, + new MediaLocator( + ImageStreamingUtils.LOCATOR_PROTOCOL + ":" + i), + formats); + + /* add to JMF device manager */ + CaptureDeviceManager.addDevice(devInfo); + i++; + + if(multipleMonitorOneScreen) + { + break; + } + } + CaptureDeviceManager.commit(); } } diff --git a/src/net/java/sip/communicator/impl/neomedia/imgstreaming/DesktopInteract.java b/src/net/java/sip/communicator/impl/neomedia/imgstreaming/DesktopInteract.java index b271c9758..e3bbd1e07 100644 --- a/src/net/java/sip/communicator/impl/neomedia/imgstreaming/DesktopInteract.java +++ b/src/net/java/sip/communicator/impl/neomedia/imgstreaming/DesktopInteract.java @@ -26,11 +26,12 @@ public interface DesktopInteract * 9 MB of memory for grabbing and another 9 MB array for conversion * operation. * + * @param display index of display * @param output output buffer to store bytes in. * Be sure that output length is sufficient * @return true if success, false if JNI error or output length too short */ - public boolean captureScreen(byte output[]); + public boolean captureScreen(int display, byte output[]); /** * Capture the full desktop screen using native grabber. @@ -42,12 +43,13 @@ public interface DesktopInteract * 9 MB of memory for grabbing and another 9 MB array for conversion * operation. * + * @param display index of display * @param buffer native output buffer to store bytes in. * Be sure that output length is sufficient * @param bufferLength length of native buffer * @return true if success, false if JNI error or output length too short */ - public boolean captureScreen(long buffer, int bufferLength); + public boolean captureScreen(int display, long buffer, int bufferLength); /** * Capture a part of the desktop screen using native grabber. @@ -59,6 +61,7 @@ public interface DesktopInteract * 9 MB of memory for grabbing and another 9 MB array for conversion * operation. * + * @param display index of display * @param x x position to start capture * @param y y position to start capture * @param width capture width @@ -67,7 +70,7 @@ public interface DesktopInteract * Be sure that output length is sufficient * @return true if success, false if JNI error or output length too short */ - public boolean captureScreen(int x, int y, int width, int height, + public boolean captureScreen(int display, int x, int y, int width, int height, byte output[]); /** @@ -80,6 +83,7 @@ public boolean captureScreen(int x, int y, int width, int height, * 9 MB of memory for grabbing and another 9 MB array for conversion * operation. * + * @param display index of display * @param x x position to start capture * @param y y position to start capture * @param width capture width @@ -89,7 +93,7 @@ public boolean captureScreen(int x, int y, int width, int height, * @param bufferLength length of native buffer * @return true if success, false if JNI error or output length too short */ - public boolean captureScreen(int x, int y, int width, int height, + public boolean captureScreen(int display, int x, int y, int width, int height, long buffer, int bufferLength); /** diff --git a/src/net/java/sip/communicator/impl/neomedia/imgstreaming/DesktopInteractImpl.java b/src/net/java/sip/communicator/impl/neomedia/imgstreaming/DesktopInteractImpl.java index 3ee1e8aab..64f9a1ab5 100644 --- a/src/net/java/sip/communicator/impl/neomedia/imgstreaming/DesktopInteractImpl.java +++ b/src/net/java/sip/communicator/impl/neomedia/imgstreaming/DesktopInteractImpl.java @@ -54,15 +54,16 @@ public DesktopInteractImpl() throws AWTException, SecurityException * 9 MB of memory for grabbing and another 9 MB array for conversion * operation. * + * @param display index of display * @param output output buffer to store bytes in. * Be sure that output length is sufficient * @return true if success, false if JNI error or output length too short */ - public boolean captureScreen(byte output[]) + public boolean captureScreen(int display, byte output[]) { Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); - return captureScreen(0, 0, dim.width, dim.height, + return captureScreen(display, 0, 0, dim.width, dim.height, output); } @@ -76,15 +77,16 @@ public boolean captureScreen(byte output[]) * 9 MB of memory for grabbing and another 9 MB array for conversion * operation. * + * @param display index of display * @param buffer native output buffer to store bytes in. * Be sure that output length is sufficient * @param bufferLength length of native buffer * @return true if success, false if JNI error or output length too short */ - public boolean captureScreen(long buffer, int bufferLength) + public boolean captureScreen(int display, long buffer, int bufferLength) { Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); - return captureScreen(0, 0, dim.width, dim.height, buffer, bufferLength); + return captureScreen(display, 0, 0, dim.width, dim.height, buffer, bufferLength); } /** @@ -97,6 +99,7 @@ public boolean captureScreen(long buffer, int bufferLength) * 9 MB of memory for grabbing and another 9 MB array for conversion * operation. * + * @param display index of display * @param x x position to start capture * @param y y position to start capture * @param width capture width @@ -105,14 +108,14 @@ public boolean captureScreen(long buffer, int bufferLength) * Be sure that output length is sufficient * @return true if success, false if JNI error or output length too short */ - public boolean captureScreen(int x, int y, int width, int height, + public boolean captureScreen(int display, int x, int y, int width, int height, byte output[]) { if(OSUtils.IS_LINUX || OSUtils.IS_FREEBSD || OSUtils.IS_WINDOWS || OSUtils.IS_MAC) { return NativeScreenCapture.grabScreen( - x, y, width, height, output); + display, x, y, width, height, output); } return false; @@ -128,6 +131,7 @@ public boolean captureScreen(int x, int y, int width, int height, * 9 MB of memory for grabbing and another 9 MB array for conversion * operation. * + * @param display index of display * @param x x position to start capture * @param y y position to start capture * @param width capture width @@ -137,14 +141,14 @@ public boolean captureScreen(int x, int y, int width, int height, * @param bufferLength length of native buffer * @return true if success, false if JNI error or output length too short */ - public boolean captureScreen(int x, int y, int width, int height, + public boolean captureScreen(int display, int x, int y, int width, int height, long buffer, int bufferLength) { if(OSUtils.IS_LINUX || OSUtils.IS_FREEBSD || OSUtils.IS_WINDOWS || OSUtils.IS_MAC) { return NativeScreenCapture.grabScreen( - x, y, width, height, buffer, bufferLength); + display, x, y, width, height, buffer, bufferLength); } return false; diff --git a/src/net/java/sip/communicator/impl/neomedia/imgstreaming/NativeScreenCapture.java b/src/net/java/sip/communicator/impl/neomedia/imgstreaming/NativeScreenCapture.java index 895600cf1..899fd1f80 100644 --- a/src/net/java/sip/communicator/impl/neomedia/imgstreaming/NativeScreenCapture.java +++ b/src/net/java/sip/communicator/impl/neomedia/imgstreaming/NativeScreenCapture.java @@ -24,6 +24,7 @@ public class NativeScreenCapture /** * Grab desktop screen and get raw bytes. * + * @param display index of display * @param x x position to start capture * @param y y position to start capture * @param width capture width @@ -31,12 +32,13 @@ public class NativeScreenCapture * @param output output buffer to store screen bytes * @return true if grab success, false otherwise */ - public static native boolean grabScreen(int x, int y, int width, int height, + public static native boolean grabScreen(int display, int x, int y, int width, int height, byte output[]); /** * Grab desktop screen and get raw bytes. * + * @param display index of display * @param x x position to start capture * @param y y position to start capture * @param width capture width @@ -45,6 +47,6 @@ public static native boolean grabScreen(int x, int y, int width, int height, * @param outputLength native output length * @return true if grab success, false otherwise */ - public static native boolean grabScreen(int x, int y, int width, int height, + public static native boolean grabScreen(int display, int x, int y, int width, int height, long output, int outputLength); } diff --git a/src/net/java/sip/communicator/impl/neomedia/jmfext/media/protocol/imgstreaming/DataSource.java b/src/net/java/sip/communicator/impl/neomedia/jmfext/media/protocol/imgstreaming/DataSource.java index 00af20d8f..7fc411750 100644 --- a/src/net/java/sip/communicator/impl/neomedia/jmfext/media/protocol/imgstreaming/DataSource.java +++ b/src/net/java/sip/communicator/impl/neomedia/jmfext/media/protocol/imgstreaming/DataSource.java @@ -26,34 +26,6 @@ public class DataSource extends AbstractPullBufferCaptureDevice { - - /** - * The list of supported formats. - */ - private static final Format[] FORMATS; - - static - { - Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); - - FORMATS - = new Format[] - { - new AVFrameFormat( - screenSize, - Format.NOT_SPECIFIED, - FFmpeg.PIX_FMT_ARGB, - Format.NOT_SPECIFIED), - new RGBFormat( - screenSize, // size - Format.NOT_SPECIFIED, // maxDataLength - Format.byteArray, // dataType - Format.NOT_SPECIFIED, // frameRate - 32, // bitsPerPixel - 2 /* red */, 3 /* green */, 4 /* blue */) - }; - } - /** * Initializes a new DataSource instance. */ @@ -92,16 +64,9 @@ protected AbstractPullBufferStream createStream( int streamIndex, FormatControl formatControl) { - return new ImageStream(formatControl); - } - - /** - * Gets the list of supported formats. - * - * @return the list of supported formats - */ - public static Format[] getFormats() - { - return FORMATS; + int index = Integer.parseInt(getLocator().getRemainder()); + ImageStream stream = new ImageStream(formatControl); + stream.setDisplayIndex(index); + return stream; } } diff --git a/src/net/java/sip/communicator/impl/neomedia/jmfext/media/protocol/imgstreaming/ImageStream.java b/src/net/java/sip/communicator/impl/neomedia/jmfext/media/protocol/imgstreaming/ImageStream.java index 32ac000e8..ab431fd73 100644 --- a/src/net/java/sip/communicator/impl/neomedia/jmfext/media/protocol/imgstreaming/ImageStream.java +++ b/src/net/java/sip/communicator/impl/neomedia/jmfext/media/protocol/imgstreaming/ImageStream.java @@ -54,6 +54,11 @@ public class ImageStream */ private boolean reinit = false; + /** + * Index of display that we will capture from. + */ + private int displayIndex = -1; + /** * Initializes a new ImageStream instance which is to have a * specific FormatControl @@ -126,9 +131,15 @@ public void read(Buffer buffer) data.ptr, bufferFrameFormat.getPixFmt(), bufferFrameSize.width, bufferFrameSize.height); + buffer.setData(bufferFrame); + } + else + { + /* this can happen when we disconnect a monitor from computer + * before or during grabbing + */ + throw new IOException("Failed to grab screen"); } - - buffer.setData(bufferFrame); } else { @@ -137,7 +148,8 @@ public void read(Buffer buffer) if((dataByte != null) || (dataLength != 0)) { - byte buf[] = readScreen(dataByte); + Dimension bufferFrameSize = ((VideoFormat)bufferFormat).getSize(); + byte buf[] = readScreen(dataByte, bufferFrameSize); if(buf != dataByte) { @@ -183,6 +195,16 @@ public void read(Buffer buffer) } } + /** + * Set display index. + * + * @param index display index + */ + public void setDisplayIndex(int index) + { + displayIndex = index; + } + /** * Start desktop capture stream. * @@ -202,6 +224,7 @@ public void start() logger.warn("Cannot create DesktopInteract object!"); } } + reinit = true; } @@ -247,17 +270,19 @@ else if(data.capacity < size) } /* get desktop screen via native grabber */ - return desktopInteract.captureScreen(data.ptr, data.getLength()); + return desktopInteract.captureScreen(displayIndex, 0, 0, dim.width, + dim.height, data.ptr, data.getLength()); } /** * Read screen. * * @param output output buffer for screen bytes + * @param dim dimension of the screen * @return raw bytes, it could be equal to output or not. Take care in the * caller to check if output is the returned value. */ - public byte[] readScreen(byte output[]) + public byte[] readScreen(byte output[], Dimension dim) { VideoFormat format = (VideoFormat) getFormat(); Dimension formatSize = format.getSize(); @@ -278,7 +303,8 @@ public byte[] readScreen(byte output[]) } /* get desktop screen via native grabber if available */ - if(desktopInteract.captureScreen(output)) + if(desktopInteract.captureScreen(displayIndex, 0, 0, dim.width, + dim.height, output)) { return output; } @@ -290,6 +316,7 @@ public byte[] readScreen(byte output[]) * * Note that it is very memory consuming since memory are allocated * to capture screen (via Robot) and then for converting to raw bytes + * Moreover support for multiple display has not yet been investigated * * Normally not of our supported platform (Windows (x86, x64), * Linux (x86, x86-64), Mac OS X (i386, x86-64, ppc) and