BOOL WriteJPEGDataToMJPEGStream()

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;
}