diff --git a/ExampleApp/ExampleApp.xcodeproj/project.pbxproj b/ExampleApp/ExampleApp.xcodeproj/project.pbxproj index 044fdfc..df0d08c 100644 --- a/ExampleApp/ExampleApp.xcodeproj/project.pbxproj +++ b/ExampleApp/ExampleApp.xcodeproj/project.pbxproj @@ -230,7 +230,7 @@ A1115929188D686000641365 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0500; + LastUpgradeCheck = 0510; ORGANIZATIONNAME = "Thong Nguyen"; TargetAttributes = { A111594B188D686000641365 = { @@ -332,7 +332,6 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; @@ -377,7 +376,6 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; @@ -415,7 +413,6 @@ A111595E188D686000641365 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; GCC_OPTIMIZATION_LEVEL = 0; @@ -433,7 +430,6 @@ A111595F188D686000641365 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -450,7 +446,6 @@ A1115961188D686000641365 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/ExampleApp.app/ExampleApp"; FRAMEWORK_SEARCH_PATHS = ( "$(SDKROOT)/Developer/Library/Frameworks", @@ -473,7 +468,6 @@ A1115962188D686000641365 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/ExampleApp.app/ExampleApp"; FRAMEWORK_SEARCH_PATHS = ( "$(SDKROOT)/Developer/Library/Frameworks", diff --git a/StreamingKit/StreamingKit.xcodeproj/project.pbxproj b/StreamingKit/StreamingKit.xcodeproj/project.pbxproj index d6633db..00bb683 100644 --- a/StreamingKit/StreamingKit.xcodeproj/project.pbxproj +++ b/StreamingKit/StreamingKit.xcodeproj/project.pbxproj @@ -411,7 +411,7 @@ isa = PBXProject; attributes = { CLASSPREFIX = STK; - LastUpgradeCheck = 0500; + LastUpgradeCheck = 0510; ORGANIZATIONNAME = "Thong Nguyen"; }; buildConfigurationList = A1E7C4C3188D57F50010896F /* Build configuration list for PBXProject "StreamingKit" */; @@ -647,7 +647,6 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; @@ -685,7 +684,6 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; @@ -716,7 +714,6 @@ A1E7C4EC188D57F60010896F /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; DSTROOT = /tmp/StreamingKit.dst; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", @@ -733,7 +730,6 @@ A1E7C4ED188D57F60010896F /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; DSTROOT = /tmp/StreamingKit.dst; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", @@ -750,7 +746,6 @@ A1E7C4EF188D57F60010896F /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; FRAMEWORK_SEARCH_PATHS = ( "$(SDKROOT)/Developer/Library/Frameworks", "$(inherited)", @@ -771,7 +766,6 @@ A1E7C4F0188D57F60010896F /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; FRAMEWORK_SEARCH_PATHS = ( "$(SDKROOT)/Developer/Library/Frameworks", "$(inherited)", diff --git a/StreamingKit/StreamingKit/STKAudioPlayer.m b/StreamingKit/StreamingKit/STKAudioPlayer.m index fcce371..62e3c42 100644 --- a/StreamingKit/StreamingKit/STKAudioPlayer.m +++ b/StreamingKit/StreamingKit/STKAudioPlayer.m @@ -2013,7 +2013,7 @@ static BOOL GetHardwareCodecClassDesc(UInt32 formatId, AudioClassDescription* cl AudioComponentInstance convertUnit; CHECK_STATUS_AND_RETURN_VALUE(AUGraphAddNode(audioGraph, &convertUnitDescription, &convertNode), 0); - CHECK_STATUS_AND_RETURN_VALUE(status = AUGraphNodeInfo(audioGraph, convertNode, &mixerDescription, &convertUnit), 0); + CHECK_STATUS_AND_RETURN_VALUE(AUGraphNodeInfo(audioGraph, convertNode, &mixerDescription, &convertUnit), 0); CHECK_STATUS_AND_RETURN_VALUE(AudioUnitSetProperty(convertUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, 0, &srcFormat, sizeof(srcFormat)), 0); CHECK_STATUS_AND_RETURN_VALUE(AudioUnitSetProperty(convertUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output, 0, &desFormat, sizeof(desFormat)), 0); CHECK_STATUS_AND_RETURN_VALUE(AudioUnitSetProperty(convertUnit, kAudioUnitProperty_MaximumFramesPerSlice, kAudioUnitScope_Global, 0, &maxFramesPerSlice, sizeof(maxFramesPerSlice)), 0); diff --git a/StreamingKit/StreamingKit/STKBufferChunk.h b/StreamingKit/StreamingKit/STKBufferChunk.h index 554a0e7..0a2190d 100644 --- a/StreamingKit/StreamingKit/STKBufferChunk.h +++ b/StreamingKit/StreamingKit/STKBufferChunk.h @@ -11,12 +11,15 @@ @interface STKBufferChunk : NSObject { @public - UInt32 key; + UInt32 index; UInt32 size; UInt32 position; UInt8* buffer; } +@property (readonly) UInt32 absoluteStart; +@property (readonly) UInt32 absolutePosition; + -(id) initWithBufferSize:(UInt32)sizeIn; @end diff --git a/StreamingKit/StreamingKit/STKBufferChunk.m b/StreamingKit/StreamingKit/STKBufferChunk.m index 575e351..7f2da5d 100644 --- a/StreamingKit/StreamingKit/STKBufferChunk.m +++ b/StreamingKit/StreamingKit/STKBufferChunk.m @@ -27,4 +27,14 @@ free(self->buffer); } +-(UInt32) absoluteStart +{ + return self->index * self->size; +} + +-(UInt32) absolutePosition +{ + return self.absoluteStart + self->position; +} + @end diff --git a/StreamingKit/StreamingKit/STKBufferingDataSource.m b/StreamingKit/StreamingKit/STKBufferingDataSource.m index c91225a..0b4209f 100644 --- a/StreamingKit/StreamingKit/STKBufferingDataSource.m +++ b/StreamingKit/StreamingKit/STKBufferingDataSource.m @@ -197,6 +197,26 @@ static STKBufferingDataSourceThread* thread; return 0; } +-(void) invokeBlockOnEventsRunLoop:(void(^)())block +{ + if (!runLoop) + { + return; + } + + block = [block copy]; + + CFRunLoopPerformBlock(runLoop.getCFRunLoop, NSRunLoopCommonModes, ^ + { + if ([self hasBytesAvailable]) + { + block(); + } + }); + + CFRunLoopWakeUp(runLoop.getCFRunLoop); +} + -(BOOL) registerForEvents:(NSRunLoop*)runLoopIn { runLoop = runLoopIn; @@ -221,6 +241,28 @@ static STKBufferingDataSourceThread* thread; -(void) seekToNextGap { + int startChunkIndex = (int)(self->position / chunkCount); + + for (int i = 0; i < self->chunkCount; i++) + { + int chunkIndex = (i + startChunkIndex) % self->chunkCount; + + STKBufferChunk* chunk = self->bufferChunks[chunkIndex]; + + if (chunk == nil) + { + chunk = [[STKBufferChunk alloc] initWithBufferSize:STK_BUFFER_CHUNK_SIZE]; + + chunk->index = chunkIndex; + + self->bufferChunks[chunkIndex] = chunk; + } + + if (chunk->position < chunk->size) + { + [dataSource seekToOffset:(self->chunkSize * chunk->index) + chunk->position]; + } + } } -(void) dataSourceDataAvailable:(STKDataSource*)dataSourceIn @@ -250,7 +292,7 @@ static STKBufferingDataSourceThread* thread; int offset = dataSourceIn.position % self->chunkSize; - if (offset > chunk->position) + if (offset >= chunk->position) { [self seekToNextGap]; diff --git a/StreamingKit/StreamingKit/STKHTTPDataSource.m b/StreamingKit/StreamingKit/STKHTTPDataSource.m index e98a5d6..8a5f4d3 100644 --- a/StreamingKit/StreamingKit/STKHTTPDataSource.m +++ b/StreamingKit/StreamingKit/STKHTTPDataSource.m @@ -153,7 +153,7 @@ { httpHeaders = (__bridge_transfer NSDictionary*)CFHTTPMessageCopyAllHeaderFields((CFHTTPMessageRef)response); - self->httpStatusCode = CFHTTPMessageGetResponseStatusCode((CFHTTPMessageRef)response); + self->httpStatusCode = (UInt32)CFHTTPMessageGetResponseStatusCode((CFHTTPMessageRef)response); CFRelease(response); }