in FBControlCore/Utility/FBVideoStream.m [155:187]
BOOL WriteJPEGDataToMJPEGStream(CMBlockBufferRef jpegDataBuffer, id<FBDataConsumer> consumer, id<FBControlCoreLogger> logger, NSError **error)
{
// Enumerate the data buffer
size_t dataLength = CMBlockBufferGetDataLength(jpegDataBuffer);
size_t offset = 0;
while (offset < dataLength) {
char *dataPointer;
size_t lengthAtOffset;
OSStatus status = CMBlockBufferGetDataPointer(
jpegDataBuffer,
offset,
&lengthAtOffset,
NULL,
&dataPointer
);
if (status != noErr) {
return [[FBControlCoreError
describeFormat:@"Failed to get Data Pointer %d", status]
failBool:error];
}
if ([consumer conformsToProtocol:@protocol(FBDataConsumerSync)]) {
NSData *data = [NSData dataWithBytesNoCopy:dataPointer length:lengthAtOffset freeWhenDone:NO];
[consumer consumeData:data];
} else {
NSData *data = [NSData dataWithBytes:dataPointer length:lengthAtOffset];
[consumer consumeData:data];
}
// Increment the offset for the next iteration.
offset += lengthAtOffset;
}
return YES;
}