kinect-viewer / KVDepthPlayer.m

 * Copyright 2010 Cliff L. Biffle.  All Rights Reserved.
 * Use of this source code is governed by the Apache License 2.0,
 * which can be found in the LICENSE file.

#import "KVDepthPlayer.h"

@interface KVDepthPlayer ()

@property NSFileHandle *fileHandle;
@property (assign) NSData *latestDepthSamples;
@property BOOL running;

- (void) replayThread;


@implementation KVDepthPlayer

@synthesize fileHandle;
@synthesize latestDepthSamples;
@synthesize running;

- (void) open: (NSString *) path {
  fileHandle = [NSFileHandle fileHandleForReadingAtPath: path];
  [NSThread detachNewThreadSelector: @selector(replayThread) toTarget: self withObject: nil];

- (void) close {
  self.running = NO;
  NSFileHandle *h = fileHandle;
  self.fileHandle = nil;
  [h closeFile];

- (void) replayThread {
  NSUInteger frameSize = (640 * 480 * sizeof(uint16_t));
  while (YES) {  // Repeat file
    [fileHandle seekToFileOffset: 0];
    while (YES) {  // Play each frame
      NSData *frame = [fileHandle readDataOfLength: frameSize];
      if ([frame length] < frameSize) break;
      self.latestDepthSamples = frame;
      usleep(1000000 / 30);

Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.