+++ /dev/null
-#import <CoreFoundation/CFData.h>
-#import <CoreGraphics/CGBitmapContext.h>
-
-#include <stdint.h>
-#include <stdlib.h>
-#include <rfb/rfb.h>
-
-extern "C" CGImageRef UIGetScreenImage();
-
-static const size_t Width = 320;
-static const size_t Height = 480;
-static const size_t BytesPerPixel = 4;
-static const size_t BitsPerComponent = 8;
-
-static const size_t Stride = Width * BytesPerPixel;
-static const size_t Size32 = Width * Height;
-static const size_t Size8 = Size32 * BytesPerPixel;
-
-extern "C" void *NSPushAutoreleasePool(void *);
-extern "C" void NSPopAutoreleasePool(void *);
-
-CGContextRef CreateContext() {
- uint8_t *buffer = (uint8_t *) malloc(Size8);
- if (buffer == NULL)
- return NULL;
-
- CGColorSpaceRef space = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);
-
- CGContextRef context = CGBitmapContextCreate(buffer, Width, Height, BitsPerComponent, Stride, space, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
- if (context == NULL)
- free(buffer);
-
- CGColorSpaceRelease(space);
- return context;
-}
-
-int main(int argc, char *argv[]) {
- CGContextRef context0 = CreateContext();
- CGContextRef context1 = CreateContext();
-
- CGRect rect = CGRectMake(0, 0, Width, Height);
-
- rfbScreenInfoPtr screen = rfbGetScreen(&argc, argv, Width, Height, BitsPerComponent, 3, BytesPerPixel);
-
- screen->desktopName = "iPhone";
- screen->alwaysShared = TRUE;
-
- rfbInitServer(screen);
-
- for (;;) {
- CGContextRef context = context1;
- context1 = context0;
- context0 = context;
-
- uint8_t *buffer0 = (uint8_t *) CGBitmapContextGetData(context0);
- uint8_t *buffer1 = (uint8_t *) CGBitmapContextGetData(context1);
- screen->frameBuffer = (char *) buffer0;
-
- void *pool = NSPushAutoreleasePool(0);
-
- CGImageRef image = UIGetScreenImage();
- CGContextDrawImage(context0, rect, image);
- CFRelease(image);
-
- NSPopAutoreleasePool(pool);
-
- if (memcmp(buffer0, buffer1, Size8) != 0)
- rfbMarkRectAsModified(screen, 0, 0, Width, Height);
- rfbProcessEvents(screen, 100000);
- }
-
-
- rfbScreenCleanup(screen);
-
- return 0;
-}