fixed a bunch of stuff:

- pairing now exists
- hostnames are resolved
- video rendering is better
- some other stuff I’m forgetting
This commit is contained in:
Diego Waxemberg 2014-01-31 15:50:36 -05:00
parent ef6909da88
commit 45b9f5411e
13 changed files with 420 additions and 104 deletions

View File

@ -7,17 +7,12 @@
objects = {
/* Begin PBXBuildFile section */
FB05E4BE1896D83700E0CAC7 /* ConnectionHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = FB05E4BD1896D83700E0CAC7 /* ConnectionHandler.m */; };
FB05E4C01899730B00E0CAC7 /* AdSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FB05E4BF1899730B00E0CAC7 /* AdSupport.framework */; };
FB05E4C51899EC7F00E0CAC7 /* libxml2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = FB05E4C11899E81500E0CAC7 /* libxml2.dylib */; };
FB4E9460188BB80700CCC583 /* Connection.m in Sources */ = {isa = PBXBuildFile; fileRef = FB4E945F188BB80700CCC583 /* Connection.m */; };
FB4E948B188BCC2900CCC583 /* VideoRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = FB4E948A188BCC2900CCC583 /* VideoRenderer.m */; };
FB4E949D188BF49B00CCC583 /* ByteBuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = FB4E948D188BF49B00CCC583 /* ByteBuffer.c */; };
FB4E949E188BF49B00CCC583 /* Config.c in Sources */ = {isa = PBXBuildFile; fileRef = FB4E948F188BF49B00CCC583 /* Config.c */; };
FB4E949F188BF49B00CCC583 /* ControlStream.c in Sources */ = {isa = PBXBuildFile; fileRef = FB4E9490188BF49B00CCC583 /* ControlStream.c */; };
FB4E94A0188BF49B00CCC583 /* Handshake.c in Sources */ = {isa = PBXBuildFile; fileRef = FB4E9491188BF49B00CCC583 /* Handshake.c */; };
FB4E94A1188BF49B00CCC583 /* LinkedBlockingQueue.c in Sources */ = {isa = PBXBuildFile; fileRef = FB4E9493188BF49B00CCC583 /* LinkedBlockingQueue.c */; };
FB4E94A2188BF49B00CCC583 /* PlatformSockets.c in Sources */ = {isa = PBXBuildFile; fileRef = FB4E9496188BF49B00CCC583 /* PlatformSockets.c */; };
FB4E94A3188BF49B00CCC583 /* PlatformThreads.c in Sources */ = {isa = PBXBuildFile; fileRef = FB4E9498188BF49B00CCC583 /* PlatformThreads.c */; };
FB4E94A4188BF49B00CCC583 /* VideoDepacketizer.c in Sources */ = {isa = PBXBuildFile; fileRef = FB4E949B188BF49B00CCC583 /* VideoDepacketizer.c */; };
FB4E94A5188BF49B00CCC583 /* VideoStream.c in Sources */ = {isa = PBXBuildFile; fileRef = FB4E949C188BF49B00CCC583 /* VideoStream.c */; };
FBBC0240188E13A800CEB8E5 /* liblimelight-common.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FB4E945C188BB6FA00CCC583 /* liblimelight-common.a */; };
FBBC53A5188ACD01004D2BA0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = FBBC53A4188ACD01004D2BA0 /* libz.dylib */; };
FBBC53A8188AD1D3004D2BA0 /* StreamFrameViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FBBC53A7188AD1D3004D2BA0 /* StreamFrameViewController.m */; };
FBBC53AE188AE27D004D2BA0 /* StreamView.m in Sources */ = {isa = PBXBuildFile; fileRef = FBBC53AD188AE27D004D2BA0 /* StreamView.m */; };
@ -38,7 +33,6 @@
FBC18B2B188A3B9100D5D34E /* MainFrameViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FBC18B2A188A3B9100D5D34E /* MainFrameViewController.m */; };
FBC18B2F188A4E0500D5D34E /* VideoDepacketizer.m in Sources */ = {isa = PBXBuildFile; fileRef = FBC18B2E188A4E0500D5D34E /* VideoDepacketizer.m */; };
FBC18B32188A5A1100D5D34E /* VideoDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = FBC18B31188A5A1100D5D34E /* VideoDecoder.m */; };
FBC18B34188A5D6700D5D34E /* notpadded.h264 in Resources */ = {isa = PBXBuildFile; fileRef = FBC18B33188A5D6700D5D34E /* notpadded.h264 */; };
FBF6AE75188A274100B50578 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FBF6AE74188A274100B50578 /* Foundation.framework */; };
FBF6AE77188A274100B50578 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FBF6AE76188A274100B50578 /* CoreGraphics.framework */; };
FBF6AE79188A274100B50578 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FBF6AE78188A274100B50578 /* UIKit.framework */; };
@ -66,6 +60,11 @@
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
FB05E4BC1896D83700E0CAC7 /* ConnectionHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConnectionHandler.h; sourceTree = "<group>"; };
FB05E4BD1896D83700E0CAC7 /* ConnectionHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ConnectionHandler.m; sourceTree = "<group>"; };
FB05E4BF1899730B00E0CAC7 /* AdSupport.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AdSupport.framework; path = System/Library/Frameworks/AdSupport.framework; sourceTree = SDKROOT; };
FB05E4C11899E81500E0CAC7 /* libxml2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libxml2.dylib; path = usr/lib/libxml2.dylib; sourceTree = SDKROOT; };
FB05E4C31899EC4100E0CAC7 /* libxml2.2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libxml2.2.dylib; path = usr/lib/libxml2.2.dylib; sourceTree = SDKROOT; };
FB272728188A8A000093CCC9 /* libavcodec.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libavcodec.a; path = "../ffmpeg-built/universal/lib/libavcodec.a"; sourceTree = "<group>"; };
FB27272A188A8B3C0093CCC9 /* libavcodec.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libavcodec.a; path = "Limelight-iOS/libs/armv7s/lib/libavcodec.a"; sourceTree = "<group>"; };
FB27272B188A8B3C0093CCC9 /* libavdevice.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libavdevice.a; path = "Limelight-iOS/libs/armv7s/lib/libavdevice.a"; sourceTree = "<group>"; };
@ -990,22 +989,6 @@
FB4E9487188BC39600CCC583 /* liblimelight-common.a.dSYM */ = {isa = PBXFileReference; lastKnownFileType = wrapper.dsym; path = "liblimelight-common.a.dSYM"; sourceTree = "<group>"; };
FB4E9489188BCC2900CCC583 /* VideoRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VideoRenderer.h; sourceTree = "<group>"; };
FB4E948A188BCC2900CCC583 /* VideoRenderer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VideoRenderer.m; sourceTree = "<group>"; };
FB4E948D188BF49B00CCC583 /* ByteBuffer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ByteBuffer.c; path = "../limelight-common-c/limelight-common/ByteBuffer.c"; sourceTree = "<group>"; };
FB4E948E188BF49B00CCC583 /* ByteBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ByteBuffer.h; path = "../limelight-common-c/limelight-common/ByteBuffer.h"; sourceTree = "<group>"; };
FB4E948F188BF49B00CCC583 /* Config.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Config.c; path = "../limelight-common-c/limelight-common/Config.c"; sourceTree = "<group>"; };
FB4E9490188BF49B00CCC583 /* ControlStream.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ControlStream.c; path = "../limelight-common-c/limelight-common/ControlStream.c"; sourceTree = "<group>"; };
FB4E9491188BF49B00CCC583 /* Handshake.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Handshake.c; path = "../limelight-common-c/limelight-common/Handshake.c"; sourceTree = "<group>"; };
FB4E9492188BF49B00CCC583 /* Limelight.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Limelight.h; path = "../limelight-common-c/limelight-common/Limelight.h"; sourceTree = "<group>"; };
FB4E9493188BF49B00CCC583 /* LinkedBlockingQueue.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = LinkedBlockingQueue.c; path = "../limelight-common-c/limelight-common/LinkedBlockingQueue.c"; sourceTree = "<group>"; };
FB4E9494188BF49B00CCC583 /* LinkedBlockingQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LinkedBlockingQueue.h; path = "../limelight-common-c/limelight-common/LinkedBlockingQueue.h"; sourceTree = "<group>"; };
FB4E9495188BF49B00CCC583 /* Platform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Platform.h; path = "../limelight-common-c/limelight-common/Platform.h"; sourceTree = "<group>"; };
FB4E9496188BF49B00CCC583 /* PlatformSockets.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = PlatformSockets.c; path = "../limelight-common-c/limelight-common/PlatformSockets.c"; sourceTree = "<group>"; };
FB4E9497188BF49B00CCC583 /* PlatformSockets.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PlatformSockets.h; path = "../limelight-common-c/limelight-common/PlatformSockets.h"; sourceTree = "<group>"; };
FB4E9498188BF49B00CCC583 /* PlatformThreads.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = PlatformThreads.c; path = "../limelight-common-c/limelight-common/PlatformThreads.c"; sourceTree = "<group>"; };
FB4E9499188BF49B00CCC583 /* PlatformThreads.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PlatformThreads.h; path = "../limelight-common-c/limelight-common/PlatformThreads.h"; sourceTree = "<group>"; };
FB4E949A188BF49B00CCC583 /* Video.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Video.h; path = "../limelight-common-c/limelight-common/Video.h"; sourceTree = "<group>"; };
FB4E949B188BF49B00CCC583 /* VideoDepacketizer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = VideoDepacketizer.c; path = "../limelight-common-c/limelight-common/VideoDepacketizer.c"; sourceTree = "<group>"; };
FB4E949C188BF49B00CCC583 /* VideoStream.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = VideoStream.c; path = "../limelight-common-c/limelight-common/VideoStream.c"; sourceTree = "<group>"; };
FBBC52C9188ACA92004D2BA0 /* avcodec.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = avcodec.h; sourceTree = "<group>"; };
FBBC52CA188ACA92004D2BA0 /* avfft.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = avfft.h; sourceTree = "<group>"; };
FBBC52CB188ACA92004D2BA0 /* dxva2.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = dxva2.h; sourceTree = "<group>"; };
@ -1230,7 +1213,6 @@
FBC18B2E188A4E0500D5D34E /* VideoDepacketizer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VideoDepacketizer.m; path = Video/VideoDepacketizer.m; sourceTree = "<group>"; };
FBC18B30188A5A1100D5D34E /* VideoDecoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VideoDecoder.h; sourceTree = "<group>"; };
FBC18B31188A5A1100D5D34E /* VideoDecoder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VideoDecoder.m; sourceTree = "<group>"; };
FBC18B33188A5D6700D5D34E /* notpadded.h264 */ = {isa = PBXFileReference; lastKnownFileType = file; path = notpadded.h264; sourceTree = "<group>"; };
FBF6AE71188A274100B50578 /* Limelight-iOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Limelight-iOS.app"; sourceTree = BUILT_PRODUCTS_DIR; };
FBF6AE74188A274100B50578 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
FBF6AE76188A274100B50578 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
@ -1256,6 +1238,9 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
FB05E4C51899EC7F00E0CAC7 /* libxml2.dylib in Frameworks */,
FB05E4C01899730B00E0CAC7 /* AdSupport.framework in Frameworks */,
FBBC0240188E13A800CEB8E5 /* liblimelight-common.a in Frameworks */,
FBBC53A5188ACD01004D2BA0 /* libz.dylib in Frameworks */,
FBBC53F9188BA82E004D2BA0 /* libopus.a in Frameworks */,
FBBC53F1188BA7FC004D2BA0 /* libavcodec.a in Frameworks */,
@ -3528,29 +3513,6 @@
path = "../../../Library/Developer/Xcode/DerivedData/limelight-common-c-cfonfottpvhxxcgrusjsydwkdaco/Build/Products/Debug-iphoneos";
sourceTree = "<group>";
};
FB4E948C188BF48300CCC583 /* Limelight-Common */ = {
isa = PBXGroup;
children = (
FB4E948D188BF49B00CCC583 /* ByteBuffer.c */,
FB4E948E188BF49B00CCC583 /* ByteBuffer.h */,
FB4E948F188BF49B00CCC583 /* Config.c */,
FB4E9490188BF49B00CCC583 /* ControlStream.c */,
FB4E9491188BF49B00CCC583 /* Handshake.c */,
FB4E9492188BF49B00CCC583 /* Limelight.h */,
FB4E9493188BF49B00CCC583 /* LinkedBlockingQueue.c */,
FB4E9494188BF49B00CCC583 /* LinkedBlockingQueue.h */,
FB4E9495188BF49B00CCC583 /* Platform.h */,
FB4E949B188BF49B00CCC583 /* VideoDepacketizer.c */,
FB4E9496188BF49B00CCC583 /* PlatformSockets.c */,
FB4E9497188BF49B00CCC583 /* PlatformSockets.h */,
FB4E9498188BF49B00CCC583 /* PlatformThreads.c */,
FB4E9499188BF49B00CCC583 /* PlatformThreads.h */,
FB4E949A188BF49B00CCC583 /* Video.h */,
FB4E949C188BF49B00CCC583 /* VideoStream.c */,
);
name = "Limelight-Common";
sourceTree = "<group>";
};
FBBC52C6188ACA92004D2BA0 /* armv7s */ = {
isa = PBXGroup;
children = (
@ -4056,6 +4018,7 @@
FB4E945F188BB80700CCC583 /* Connection.m */,
FB4E9489188BCC2900CCC583 /* VideoRenderer.h */,
FB4E948A188BCC2900CCC583 /* VideoRenderer.m */,
FBF6AE7D188A274100B50578 /* Supporting Files */,
);
name = Video;
sourceTree = "<group>";
@ -4063,7 +4026,6 @@
FBF6AE68188A274100B50578 = {
isa = PBXGroup;
children = (
FB4E948C188BF48300CCC583 /* Limelight-Common */,
FBF6AE7C188A274100B50578 /* Limelight-iOS */,
FBF6AE99188A274100B50578 /* Limelight-iOSTests */,
FBF6AE73188A274100B50578 /* Frameworks */,
@ -4083,6 +4045,9 @@
FBF6AE73188A274100B50578 /* Frameworks */ = {
isa = PBXGroup;
children = (
FB05E4C31899EC4100E0CAC7 /* libxml2.2.dylib */,
FB05E4C11899E81500E0CAC7 /* libxml2.dylib */,
FB05E4BF1899730B00E0CAC7 /* AdSupport.framework */,
FB4E9485188BC39600CCC583 /* Debug-iphoneos */,
FB4E9461188BC09600CCC583 /* liblimelight-common.a */,
FB4E945C188BB6FA00CCC583 /* liblimelight-common.a */,
@ -4126,13 +4091,14 @@
FBF6AE86188A274100B50578 /* AppDelegate.m */,
FBF6AE8B188A274100B50578 /* Images.xcassets */,
FBF6AE88188A274100B50578 /* Limelight_iOS.xcdatamodeld */,
FBF6AE7D188A274100B50578 /* Supporting Files */,
FBC18B29188A3B9100D5D34E /* MainFrameViewController.h */,
FBC18B2A188A3B9100D5D34E /* MainFrameViewController.m */,
FBBC53A6188AD1D3004D2BA0 /* StreamFrameViewController.h */,
FBBC53A7188AD1D3004D2BA0 /* StreamFrameViewController.m */,
FBBC53AC188AE27D004D2BA0 /* StreamView.h */,
FBBC53AD188AE27D004D2BA0 /* StreamView.m */,
FB05E4BC1896D83700E0CAC7 /* ConnectionHandler.h */,
FB05E4BD1896D83700E0CAC7 /* ConnectionHandler.m */,
);
path = "Limelight-iOS";
sourceTree = "<group>";
@ -4140,7 +4106,6 @@
FBF6AE7D188A274100B50578 /* Supporting Files */ = {
isa = PBXGroup;
children = (
FBC18B33188A5D6700D5D34E /* notpadded.h264 */,
FBF6AE7E188A274100B50578 /* Limelight-iOS-Info.plist */,
FBF6AE7F188A274100B50578 /* InfoPlist.strings */,
FBF6AE82188A274100B50578 /* main.m */,
@ -4247,7 +4212,6 @@
files = (
FBC18AE3188A2AB500D5D34E /* MainFrame.storyboard in Resources */,
FBF6AE8C188A274100B50578 /* Images.xcassets in Resources */,
FBC18B34188A5D6700D5D34E /* notpadded.h264 in Resources */,
FBBC53E7188BA7C7004D2BA0 /* libopus.la in Resources */,
FBBC53E5188BA7C7004D2BA0 /* opus.pc in Resources */,
FBBC53E4188BA7C7004D2BA0 /* libopus.la in Resources */,
@ -4270,16 +4234,8 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
FB4E94A4188BF49B00CCC583 /* VideoDepacketizer.c in Sources */,
FB4E94A0188BF49B00CCC583 /* Handshake.c in Sources */,
FB4E94A5188BF49B00CCC583 /* VideoStream.c in Sources */,
FB4E94A2188BF49B00CCC583 /* PlatformSockets.c in Sources */,
FB4E949F188BF49B00CCC583 /* ControlStream.c in Sources */,
FB4E94A1188BF49B00CCC583 /* LinkedBlockingQueue.c in Sources */,
FB4E949D188BF49B00CCC583 /* ByteBuffer.c in Sources */,
FB4E94A3188BF49B00CCC583 /* PlatformThreads.c in Sources */,
FB4E949E188BF49B00CCC583 /* Config.c in Sources */,
FB4E948B188BCC2900CCC583 /* VideoRenderer.m in Sources */,
FB05E4BE1896D83700E0CAC7 /* ConnectionHandler.m in Sources */,
FBC18B2F188A4E0500D5D34E /* VideoDepacketizer.m in Sources */,
FBF6AE87188A274100B50578 /* AppDelegate.m in Sources */,
FBBC53A8188AD1D3004D2BA0 /* StreamFrameViewController.m in Sources */,
@ -4697,6 +4653,7 @@
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
"/Users/diegowaxemberg/Documents/Repositories/Limelight-iOS/Limelight-iOS/libs/ffmpeg/armv7/include/**",
"/Users/diegowaxemberg/Documents/Repositories/limelight-common-c/limelight-common",
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/usr/include/libxml2,
);
INFOPLIST_FILE = "Limelight-iOS/Limelight-iOS-Info.plist";
LIBRARY_SEARCH_PATHS = (
@ -4726,6 +4683,7 @@
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
"/Users/diegowaxemberg/Documents/Repositories/Limelight-iOS/Limelight-iOS/libs/ffmpeg/armv7/include/**",
"/Users/diegowaxemberg/Documents/Repositories/limelight-common-c/limelight-common",
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/usr/include/libxml2,
);
INFOPLIST_FILE = "Limelight-iOS/Limelight-iOS-Info.plist";
LIBRARY_SEARCH_PATHS = (

View File

@ -15,7 +15,7 @@
endingColumnNumber = "9223372036854775807"
startingLineNumber = "23"
endingLineNumber = "23"
landmarkName = "ThreadProc(void* context)"
landmarkName = "ThreadProc()"
landmarkType = "7">
</BreakpointContent>
</BreakpointProxy>
@ -31,7 +31,7 @@
endingColumnNumber = "9223372036854775807"
startingLineNumber = "21"
endingLineNumber = "21"
landmarkName = "ThreadProc(void* context)"
landmarkName = "ThreadProc()"
landmarkType = "7">
</BreakpointContent>
</BreakpointProxy>
@ -47,7 +47,7 @@
endingColumnNumber = "9223372036854775807"
startingLineNumber = "95"
endingLineNumber = "95"
landmarkName = "PltCreateThread(ThreadEntry entry, void* context, PLT_THREAD *thread)"
landmarkName = "PltCloseThread()"
landmarkType = "7">
</BreakpointContent>
</BreakpointProxy>

View File

@ -18,5 +18,6 @@
- (void)saveContext;
- (NSURL *)applicationDocumentsDirectory;
+ (NSOperationQueue*) getMainOpQueue;
@end

View File

@ -14,11 +14,19 @@
@synthesize managedObjectModel = _managedObjectModel;
@synthesize persistentStoreCoordinator = _persistentStoreCoordinator;
static NSOperationQueue* mainQueue;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
mainQueue = [[NSOperationQueue alloc]init];
return YES;
}
+ (NSOperationQueue*) getMainOpQueue
{
return mainQueue;
}
- (void)applicationWillResignActive:(UIApplication *)application
{
// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.

View File

@ -21,21 +21,48 @@
void setup(int width, int height, int fps, void* context, int drFlags)
{
nv_avc_init(width, height, 0, 2);
printf("Setup video\n");
nv_avc_init(width, height, DISABLE_LOOP_FILTER | FAST_DECODE | FAST_BILINEAR_FILTERING, 2);
}
void submitDecodeUnit(PDECODE_UNIT decodeUnit)
{
unsigned char* data = (unsigned char*) malloc(decodeUnit->fullLength + nv_avc_get_input_padding_size());
if (data != NULL) {
int offset = 0;
int err;
PLENTRY entry = decodeUnit->bufferList;
while (entry != NULL) {
memcpy(&data[offset], entry->data, entry->length);
offset += entry->length;
entry = entry->next;
}
err = nv_avc_decode(data, decodeUnit->fullLength);
if (err != 0) {
printf("Decode failed: %d\n", err);
}
free(data);
}
}
void start(void)
{
printf("Start video\n");
[VideoRenderer startRendering];
}
void stop(void)
{
printf("Stop video\n");
[VideoRenderer stopRendering];
}
void release(void)
{
printf("Release video\n");
nv_avc_destroy();
}
@ -52,30 +79,14 @@ void release(void)
callbacks.start = start;
callbacks.stop = stop;
callbacks.release = release;
//callbacks.submitDecodeUnit = submitDecodeUnit;
callbacks.submitDecodeUnit = submitDecodeUnit;
return self;
}
-(void) main
{
int err;
NSLog(@"Starting connection process\n");
err = performHandshake(host);
NSLog(@"Handshake: %d\n", err);
err = initializeControlStream(host, &streamConfig);
NSLog(@"Control stream init: %d\n", err);
initializeVideoStream(host, &streamConfig, &callbacks);
err = startControlStream();
NSLog(@"Control stream start: %d\n", err);
err = startVideoStream(NULL, 0);
NSLog(@"Video stream start: %d\n", err);
LiStartConnection(host, &streamConfig, &callbacks, NULL, 0);
}
@end

View File

@ -0,0 +1,19 @@
//
// ConnectionHandler.h
// Limelight-iOS
//
// Created by Diego Waxemberg on 1/27/14.
// Copyright (c) 2014 Diego Waxemberg. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface ConnectionHandler : NSOperation
@property NSString* hostName;
@property int mode;
+ (void) pairWithHost:(NSString*)host;
+ (void) streamWithHost:(NSString*)host viewController:(UIViewController*)viewCont;
+ (NSString*) resolveHost:(NSString*)host;
@end

View File

@ -0,0 +1,325 @@
//
// ConnectionHandler.m
// Limelight-iOS
//
// Created by Diego Waxemberg on 1/27/14.
// Copyright (c) 2014 Diego Waxemberg. All rights reserved.
//
#import "ConnectionHandler.h"
#import "AppDelegate.h"
#import <AdSupport/ASIdentifierManager.h>
#import "MainFrameViewController.h"
#include <libxml/xmlreader.h>
#include <netdb.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
@implementation ConnectionHandler
static const int PAIR_MODE = 0x1;
static const int STREAM_MODE = 0x2;
static MainFrameViewController* viewCont;
+ (void)streamWithHost:(NSString *)host viewController:(MainFrameViewController *)viewController
{
viewCont = viewController;
ConnectionHandler* streamHandler = [[ConnectionHandler alloc] initForStream:host];
[[AppDelegate getMainOpQueue] addOperation:streamHandler];
}
+ (void)pairWithHost:(NSString *)host
{
ConnectionHandler* pairHandler = [[ConnectionHandler alloc] initForPair:host];
[[AppDelegate getMainOpQueue]addOperation:pairHandler];
}
+ (NSString*) resolveHost:(NSString*)host
{
struct hostent *hostent;
if (inet_addr([host UTF8String]) != INADDR_NONE)
{
// Already an IP address
return host;
}
else
{
hostent = gethostbyname([host UTF8String]);
if (hostent != NULL)
{
char* ipstr = inet_ntoa(*(struct in_addr*)hostent->h_addr_list[0]);
NSLog(@"Resolved %@ -> %s", host, ipstr);
return [NSString stringWithUTF8String:ipstr];
}
else
{
NSLog(@"Failed to resolve host: %d", h_errno);
return nil;
}
}
}
+ (NSString*) getId
{
// we need to generate some unique id
NSUUID* uniqueId = [ASIdentifierManager sharedManager].advertisingIdentifier;
NSString* idString = [NSString stringWithString:[uniqueId UUIDString]];
//use just the last 12 digits because GameStream truncates id's
return [idString substringFromIndex:24];
}
- (id) initForStream:(NSString*)host
{
self = [super init];
self.hostName = host;
self.mode = STREAM_MODE;
return self;
}
- (id) initForPair:(NSString*)host
{
self = [super init];
self.hostName = host;
self.mode = PAIR_MODE;
return self;
}
- (void) main
{
switch (self.mode)
{
case STREAM_MODE:
{
bool pairState;
int err = [self pairState:&pairState];
if (err) {
NSLog(@"ERROR: Pair state error: %d", err);
break;
}
if (!pairState)
{
NSLog(@"WARN: Not paired with host!");
UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Not Paired"
message:@"This device is not paired with the host."
delegate:nil
cancelButtonTitle:@"Okay"
otherButtonTitles:nil, nil];
[self showAlert:alert];
return;
}
//TODO: parse this from http request
unsigned int appId = 67339056;
NSData* applist = [self httpRequest:[NSString stringWithFormat:@"/applist?uniqueid=%@", [ConnectionHandler getId]]];
NSString* streamString = [NSString stringWithFormat:@"http://%@:47989/launch?uniqueid=%@&appid=%u", [ConnectionHandler resolveHost:self.hostName], [ConnectionHandler getId], appId];
NSLog(@"host: %@", self.hostName);
NSURL* url = [[NSURL alloc] initWithString:streamString];
NSMutableURLRequest* request = [[NSMutableURLRequest alloc] initWithURL:url];
[request setHTTPMethod:@"GET"];
NSURLResponse* response = nil;
NSData *response1 = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:NULL];
NSLog(@"url response: %@", response1);
[viewCont performSelector:@selector(segueIntoStream) onThread:[NSThread mainThread] withObject:nil waitUntilDone:NO];
break;
}
case PAIR_MODE:
{
NSLog(@"Trying to pair to %@...", self.hostName);
bool pairState;
int err = [self pairState:&pairState];
if (err) {
NSLog(@"ERROR: Pair state error: %d", err);
break;
}
NSLog(@"Pair state: %i", pairState);
if(pairState)
{
UIAlertView* alert = [[UIAlertView alloc]initWithTitle:@"Pairing"
message:[NSString stringWithFormat:@"Already paired to:\n %@", self.hostName]
delegate:nil
cancelButtonTitle:@"Okay"
otherButtonTitles:nil, nil];
[self showAlert:alert];
NSLog(@"Showing alertview");
break;
}
// this will hang until it pairs successfully or unsuccessfully
NSData* pairResponse = [self httpRequest:[NSString stringWithFormat:@"pair?uniqueid=%@", [ConnectionHandler getId]]];
void* buffer = [self getXMLBufferFromData:pairResponse];
if (buffer == NULL) {
NSLog(@"ERROR: Unable to allocate pair buffer.");
UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Pairing"
message:[NSString stringWithFormat:@"Failed to pair with host:\n %@", self.hostName]
delegate:nil
cancelButtonTitle:@"Okay"
otherButtonTitles:nil, nil];
[self showAlert:alert];
break;
}
xmlDocPtr doc = xmlParseMemory(buffer, [pairResponse length]-1);
if (doc == NULL) {
NSLog(@"ERROR: An error occured trying to parse pair response.");
break;
}
xmlNodePtr node = xmlDocGetRootElement(doc);
node = node->xmlChildrenNode;
while (node != NULL) {
NSLog(@"Node: %s", node->name);
if (!xmlStrcmp(node->name, (const xmlChar*)"sessionid"))
{
xmlChar* sessionid = xmlNodeListGetString(doc, node->xmlChildrenNode, 1);
if (xmlStrcmp(sessionid, (xmlChar*)"0")) {
UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Pairing"
message:[NSString stringWithFormat:@"Successfully paired to host:\n %@", self.hostName]
delegate:nil
cancelButtonTitle:@"Okay"
otherButtonTitles:nil, nil];
[self showAlert:alert];
} else {
UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Pairing"
message:[NSString stringWithFormat:@"Pairing was declined by host:\n %@", self.hostName]
delegate:nil
cancelButtonTitle:@"Okay"
otherButtonTitles:nil, nil];
[self showAlert:alert];
}
xmlFree(sessionid);
goto cleanup;
}
node = node->next;
}
NSLog(@"ERROR: Could not find \"sessionid\" element in XML");
cleanup:
xmlFreeNode(node);
break;
}
default:
{
NSLog(@"Invalid connection mode specified!!!");
}
}
}
- (int) pairState: (bool*)paired
{
int err;
NSData* pairData = [self httpRequest:[NSString stringWithFormat:@"pairstate?uniqueid=%@", [ConnectionHandler getId]]];
void* buffer = [self getXMLBufferFromData:pairData];
if (buffer == NULL) {
NSLog(@"ERROR: Unable to allocate pair state buffer.");
UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Pairing"
message:[NSString stringWithFormat:@"Failed to get pair state with host:\n %@", self.hostName]
delegate:nil
cancelButtonTitle:@"Okay"
otherButtonTitles:nil, nil];
[self showAlert:alert];
return -1;
}
xmlDocPtr doc = xmlParseMemory(buffer, [pairData length]-1);
if (doc == NULL) {
NSLog(@"ERROR: An error occured trying to parse pair state.");
return -1;
}
xmlNodePtr node = xmlDocGetRootElement(doc);
while (node != NULL) {
NSLog(@"Node: %s", node->name);
if (!xmlStrcmp(node->name, (const xmlChar*)"paired"))
{
xmlChar* pairState = xmlNodeListGetString(doc, node->xmlChildrenNode, 1);
*paired = !xmlStrcmp(pairState, (const xmlChar*)"1");
err = 0;
xmlFree(pairState);
goto cleanup;
}
node = node->xmlChildrenNode;
}
NSLog(@"ERROR: Could not find \"paired\" element in XML");
err = -2;
cleanup:
xmlFreeNode(node);
return err;
}
- (NSData*) httpRequest:(NSString*)args
{
NSString* requestString = [NSString stringWithFormat:@"http://%@:47989/%@", [ConnectionHandler resolveHost:self.hostName], args];
NSLog(@"Making HTTP request: %@", requestString);
NSURL* url = [[NSURL alloc] initWithString:requestString];
NSMutableURLRequest* request = [[NSMutableURLRequest alloc] initWithURL:url];
[request setHTTPMethod:@"GET"];
NSURLResponse* response = nil;
NSError* error = nil;
NSData* responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
if (error != nil) {
NSLog(@"An error occured making HTTP request: %@\n Caused by: %@", [error localizedDescription], [error localizedFailureReason]);
}
return responseData;
}
- (void*) getXMLBufferFromData:(NSData*)data
{
if (data == nil) {
NSLog(@"ERROR: No data to get XML from!");
return NULL;
}
void* buffer = malloc([data length]);
if (buffer == NULL) {
NSLog(@"ERROR: Unable to allocate XML buffer.");
return NULL;
}
[data getBytes:buffer length:[data length]];
//#allthejank
void* newBuffer = (void*)[[[NSString stringWithUTF8String:buffer]stringByReplacingOccurrencesOfString:@"utf-16" withString:@"UTF-8" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [data length])] UTF8String];
free(buffer);
return newBuffer;
}
- (void) showAlert:(UIAlertView*) alert
{
[alert performSelector:@selector(show) onThread:[NSThread mainThread] withObject:nil waitUntilDone:NO];
}
@end

View File

@ -16,5 +16,6 @@
@property (strong, nonatomic) NSArray* streamConfigVals;
+ (const char*)getHostAddr;
- (void) segueIntoStream;
@end

View File

@ -8,6 +8,7 @@
#import "MainFrameViewController.h"
#import "VideoDepacketizer.h"
#import "ConnectionHandler.h"
@interface MainFrameViewController ()
@ -24,23 +25,18 @@ static NSString* hostAddr;
- (void)PairButton:(UIButton *)sender
{
NSLog(@"Pair Button Pressed!");
hostAddr = self.HostField.text;
[ConnectionHandler pairWithHost:hostAddr];
}
- (void)StreamButton:(UIButton *)sender
{
NSLog(@"Stream Button Pressed!");
//67339056
hostAddr = self.HostField.text;
NSString* host = [NSString stringWithFormat:@"http://%@:47989/launch?uniqueid=0&appid=67339056", self.HostField.text];
NSLog(@"host: %@", host);
NSURL* url = [[NSURL alloc] initWithString:host];
NSMutableURLRequest* request = [[NSMutableURLRequest alloc] initWithURL:url];
[request setHTTPMethod:@"GET"];
NSURLResponse* response = nil;
NSData *response1 = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:NULL];
NSLog(@"url response: %@", response1);
[ConnectionHandler streamWithHost:hostAddr viewController:self];
}
- (void) segueIntoStream {
[self performSegueWithIdentifier:@"createStreamFrame" sender:self];
}
@ -71,6 +67,7 @@ static NSString* hostAddr;
[super viewDidLoad];
// Do any additional setup after loading the view.
self.streamConfigVals = [[NSArray alloc] initWithObjects:@"1280x720 (30Hz)",@"1280x720 (60Hz)",@"1920x1080 (30Hz)",@"1920x1080 (60Hz)",nil];
self.HostField.text = @"neyer.case.edu";
}
- (void)didReceiveMemoryWarning

View File

@ -11,6 +11,7 @@
#import "VideoDepacketizer.h"
#import "Connection.h"
#import "VideoRenderer.h"
#import "ConnectionHandler.h"
#include <sys/socket.h>
#include <netinet/in.h>
@ -43,13 +44,7 @@
CGRect contentRect = CGRectMake(0,0, self.view.frame.size.width, self.view.frame.size.height);
streamView.bounds = contentRect;
/* // Do any additional setup after loading the view.
NSString* path = [[NSBundle mainBundle] pathForResource:@"notpadded"
ofType:@"h264"];
NSLog(@"Path: %@", path);
VideoDepacketizer* depacketizer = [[VideoDepacketizer alloc] initWithFile:path renderTarget:streamView];*/
Connection* conn = [[Connection alloc] initWithHost:inet_addr([MainFrameViewController getHostAddr]) width:1280 height:720];
Connection* conn = [[Connection alloc] initWithHost:inet_addr([[ConnectionHandler resolveHost:[NSString stringWithUTF8String:[MainFrameViewController getHostAddr]]] UTF8String]) width:1280 height:720];
NSOperationQueue* opQueue = [[NSOperationQueue alloc] init];
[opQueue addOperation:conn];

View File

@ -59,6 +59,7 @@
CGContextSetBlendMode(context, kCGBlendModeCopy);
CGContextSetInterpolationQuality(context, kCGInterpolationNone);
CGContextSetShouldAntialias(context, false);
CGContextRotateCTM(context, -M_PI_2);
CGContextScaleCTM(context, -(float)self.frame.size.width/self.frame.size.height, (float)self.frame.size.height/self.frame.size.width);
CGContextDrawImage(context, rect, image);

View File

@ -27,7 +27,7 @@ static bool render = false;
if (render)
{
[self.renderTarget performSelectorOnMainThread:@selector(setNeedsDisplay) withObject:NULL waitUntilDone:TRUE];
usleep(25000);
usleep(10000);
} else {
sleep(1);
}

Binary file not shown.