mirror of
https://github.com/dyne/FreeJ.git
synced 2026-06-16 12:59:33 +02:00
massive cleanup and bugfixes after recent refactoring of cocoa-related internals
This commit is contained in:
@@ -47,7 +47,7 @@ public:
|
||||
char *fjName();
|
||||
|
||||
Context *context() { return freej; };
|
||||
virtual CVTexture *glTexture();
|
||||
virtual CVPixelBufferRef currentFrame();
|
||||
NSDictionary *imageParams();
|
||||
int width();
|
||||
int height();
|
||||
|
||||
@@ -37,8 +37,8 @@ CVCocoaLayer::CVCocoaLayer(Layer *lay, CVLayerController *vin)
|
||||
CVCocoaLayer::~CVCocoaLayer()
|
||||
{
|
||||
deactivate();
|
||||
if (input)
|
||||
[input setLayer:nil];
|
||||
//if (input)
|
||||
//[input setLayer:nil];
|
||||
|
||||
}
|
||||
|
||||
@@ -67,14 +67,12 @@ CVCocoaLayer::deactivate()
|
||||
}
|
||||
|
||||
// accessor to get a texture from the CVLayerController class
|
||||
CVTexture *
|
||||
CVCocoaLayer::glTexture()
|
||||
CVPixelBufferRef
|
||||
CVCocoaLayer::currentFrame()
|
||||
{
|
||||
CVTexture *texture = NULL;
|
||||
if (input)
|
||||
texture = [input getTexture];
|
||||
|
||||
return texture;
|
||||
return [input currentFrame];
|
||||
return NULL;
|
||||
}
|
||||
|
||||
bool CVCocoaLayer::isActive()
|
||||
|
||||
@@ -25,24 +25,18 @@
|
||||
{
|
||||
CVCocoaLayer *toDelete;
|
||||
if (layer) {
|
||||
[self deactivate];
|
||||
[lock lock];
|
||||
//toDelete->stop();
|
||||
[self stop];
|
||||
if (currentFrame) {
|
||||
CVPixelBufferRelease(currentFrame);
|
||||
currentFrame = NULL;
|
||||
}
|
||||
toDelete = (CVCocoaLayer *)layer;
|
||||
layer = NULL;
|
||||
[lock unlock];
|
||||
delete toDelete;
|
||||
}
|
||||
}
|
||||
|
||||
- (void)setLayer:(CVCocoaLayer *)lay
|
||||
{
|
||||
if (layer) // ensure to remove/stop old genf0rlayer if we are setting a new one
|
||||
[self reset];
|
||||
[self stop];
|
||||
[super setLayer:lay];
|
||||
}
|
||||
|
||||
|
||||
@@ -35,8 +35,6 @@ protected:
|
||||
void *feed();
|
||||
|
||||
public:
|
||||
BOOL repeat;
|
||||
|
||||
CVFFmpegLayer(CVLayerController *controller);
|
||||
~CVFFmpegLayer();
|
||||
bool open(const char *movie);
|
||||
|
||||
+52
-43
@@ -20,7 +20,6 @@ CVFFmpegLayer::CVFFmpegLayer(CVLayerController *controller) : CVLayer(controller
|
||||
{
|
||||
ff = NULL;
|
||||
pixelBuffer = NULL;
|
||||
repeat = NO;
|
||||
}
|
||||
|
||||
CVFFmpegLayer::~CVFFmpegLayer()
|
||||
@@ -40,54 +39,60 @@ void *CVFFmpegLayer::feed()
|
||||
if (!ff)
|
||||
{
|
||||
if (strlen(filename)) { // XXX - (argh!, find a better way)
|
||||
|
||||
if (open_movie(&ff, filename) == 0) {
|
||||
init_moviebuffer(ff, geo.w, geo.h, PIX_FMT_ARGB);
|
||||
decode_frame(ff);
|
||||
} else {
|
||||
close_and_free_ff(&ff);
|
||||
if (!repeat)
|
||||
if (![(CVFFmpegLayerController *)input wantsRepeat]) {
|
||||
memset(filename, 0, sizeof(filename)); // XXX
|
||||
[input stop];
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
uint8_t *ffbuffer = get_bufptr(ff);
|
||||
if (!ffbuffer)
|
||||
return NULL;
|
||||
CVReturn err = CVPixelBufferCreateWithBytes (
|
||||
NULL,
|
||||
geo.w,
|
||||
geo.h,
|
||||
k32ARGBPixelFormat,
|
||||
ffbuffer,
|
||||
geo.w*4,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
&pixelBuffer
|
||||
);
|
||||
if (err == kCVReturnSuccess) {
|
||||
// first decode the frame
|
||||
if (!decode_frame(ff)) {
|
||||
close_and_free_ff(&ff);
|
||||
//buffer = NULL;
|
||||
// XXX - find a cleaner way instead of blindly resetting the filename
|
||||
// TODO - allow looping on a stream by reopening it
|
||||
if (!repeat) {
|
||||
memset(filename, 0, sizeof(filename));
|
||||
if (input) {
|
||||
[(CVFFmpegLayerController *)input deactivate];
|
||||
[(CVFFmpegLayerController *)input clearPreview];
|
||||
}
|
||||
}
|
||||
}
|
||||
// and than provide it to our controller
|
||||
[input feedFrame:pixelBuffer];
|
||||
CVPixelBufferRelease(pixelBuffer);
|
||||
|
||||
} else {
|
||||
// TODO - Error messages
|
||||
}
|
||||
}
|
||||
[input stop];
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
uint8_t *ffbuffer = get_bufptr(ff);
|
||||
if (!ffbuffer)
|
||||
return NULL;
|
||||
CVReturn err = CVPixelBufferCreateWithBytes (
|
||||
NULL,
|
||||
geo.w,
|
||||
geo.h,
|
||||
k32ARGBPixelFormat,
|
||||
ffbuffer,
|
||||
geo.w*4,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
&pixelBuffer
|
||||
);
|
||||
if (err == kCVReturnSuccess) {
|
||||
// first decode the frame
|
||||
if (!decode_frame(ff)) {
|
||||
close_and_free_ff(&ff);
|
||||
//buffer = NULL;
|
||||
// XXX - find a cleaner way instead of blindly resetting the filename
|
||||
// TODO - allow looping on a stream by reopening it
|
||||
if (![input wantsRepeat]) {
|
||||
memset(filename, 0, sizeof(filename));
|
||||
if (input) {
|
||||
[(CVFFmpegLayerController *)input deactivate];
|
||||
[(CVFFmpegLayerController *)input clearPreview];
|
||||
}
|
||||
}
|
||||
}
|
||||
// and than provide it to our controller
|
||||
[input feedFrame:pixelBuffer];
|
||||
CVPixelBufferRelease(pixelBuffer);
|
||||
|
||||
} else {
|
||||
// TODO - Error messages
|
||||
}
|
||||
return CVLayer::feed();
|
||||
}
|
||||
|
||||
@@ -100,12 +105,16 @@ bool CVFFmpegLayer::isDecoding()
|
||||
|
||||
int CVFFmpegLayer::scaledWidth()
|
||||
{
|
||||
return get_scaled_width(ff);
|
||||
if (ff)
|
||||
return get_scaled_width(ff);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int CVFFmpegLayer::scaledHeight()
|
||||
{
|
||||
return get_scaled_height(ff);
|
||||
if (ff)
|
||||
return get_scaled_height(ff);
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool CVFFmpegLayer::hasFF()
|
||||
|
||||
@@ -41,7 +41,6 @@ struct ffdec;
|
||||
}
|
||||
|
||||
- (void)setStream:(NSString*)url;
|
||||
- (void)setRepeat:(BOOL)repeat;
|
||||
- (void)reOpen;
|
||||
- (void)clearPreview;
|
||||
@end
|
||||
|
||||
@@ -52,6 +52,7 @@
|
||||
previewImage = nil;
|
||||
timeout=1;
|
||||
currentFrame = nil;
|
||||
wantsRepeat = NO;
|
||||
bufDict = [[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], kCVPixelBufferCGImageCompatibilityKey, [NSNumber numberWithBool:YES], kCVPixelBufferCGBitmapContextCompatibilityKey, [NSNumber numberWithBool:YES], kCVPixelBufferOpenGLCompatibilityKey, nil] retain];
|
||||
|
||||
return [super init];
|
||||
@@ -109,18 +110,8 @@
|
||||
layer = ffLayer;
|
||||
}
|
||||
((CVFFmpegLayer *)layer)->open(movie);
|
||||
layer->activate();
|
||||
[lock unlock];
|
||||
/*
|
||||
if (!currentFrame) {
|
||||
CVPixelBufferCreate(
|
||||
kCFAllocatorDefault,
|
||||
ctx->screen->geo.w,
|
||||
ctx->screen->geo.h,
|
||||
k32ARGBPixelFormat,
|
||||
(CFDictionaryRef)bufDict,
|
||||
¤tFrame);
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
- (void)feedFrame:(CVPixelBufferRef)frame
|
||||
@@ -134,26 +125,11 @@
|
||||
|
||||
CVPixelBufferLockBaseAddress(frame, 0);
|
||||
uint8_t* buf= (uint8_t*) CVPixelBufferGetBaseAddress(frame);
|
||||
/*
|
||||
printf("%dx%d -> %dx%d\n", get_scaled_width(ff), get_scaled_height(ff),
|
||||
ctx->screen->geo.w, ctx->screen->geo.h);
|
||||
*/
|
||||
if (lay->scaledWidth() == ctx->screen->geo.w && lay->scaledHeight() == ctx->screen->geo.h) {
|
||||
uint8_t *ffbuf = (uint8_t *)lay->buffer;
|
||||
if (lay->buffer) {
|
||||
memcpy(buf, ffbuf, 4 * ctx->screen->geo.w * ctx->screen->geo.h *sizeof(uint8_t));
|
||||
/*
|
||||
long blackness=(ctx->screen->geo.w * ctx->screen->geo.h);
|
||||
// histogram
|
||||
blackness=0;
|
||||
int i;
|
||||
for (i=0; i< 4 * ctx->screen->geo.w * ctx->screen->geo.h *sizeof(uint8_t);i+=4) {
|
||||
blackness+=((buf[i+1]>>2) || (buf[i+2]>>2) || (buf[i+3]>>2))?1:0;
|
||||
}
|
||||
*/
|
||||
//if (blackness >= (ctx->screen->geo.w * ctx->screen->geo.h)>>4) {
|
||||
if (skipCount > 50) { // TODO - implement properly
|
||||
|
||||
NSAutoreleasePool *pool;
|
||||
pool = [[NSAutoreleasePool alloc] init];
|
||||
NSBitmapImageRep *imr = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:(unsigned char**)&buf
|
||||
@@ -171,14 +147,12 @@
|
||||
previewImage = [[NSImage alloc] initWithSize:NSZeroSize];
|
||||
[previewImage addRepresentation:imr];
|
||||
[layerView setPosterImage:previewImage];
|
||||
//[previewImage release]; // XXX - this will be released by clearPreview
|
||||
[lock unlock];
|
||||
[imr release];
|
||||
[pool release];
|
||||
} else {
|
||||
skipCount++;
|
||||
}
|
||||
newFrame = YES;
|
||||
}
|
||||
}
|
||||
CVPixelBufferUnlockBaseAddress(frame, 0);
|
||||
@@ -203,11 +177,4 @@
|
||||
}
|
||||
}
|
||||
|
||||
- (void)setRepeat:(BOOL)repeat
|
||||
{
|
||||
CVFFmpegLayer *lay = (CVFFmpegLayer *)layer;
|
||||
if (layer)
|
||||
lay->repeat = repeat;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
|
||||
- (IBAction)open:(id)sender;
|
||||
- (IBAction)close:(id)sender;
|
||||
- (IBAction)toggleRepeat:(id)sender;
|
||||
@end
|
||||
|
||||
#endif
|
||||
|
||||
@@ -55,4 +55,12 @@
|
||||
[super drawRect:theRect];
|
||||
}
|
||||
|
||||
- (IBAction)toggleRepeat:(id)sender
|
||||
{
|
||||
if ([sender state] == NSOnState)
|
||||
[(CVFFmpegLayerController *)layerController setRepeat:YES];
|
||||
else
|
||||
[(CVFFmpegLayerController *)layerController setRepeat:NO];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -43,18 +43,18 @@ CVFilterInstance::CVFilterInstance()
|
||||
}
|
||||
|
||||
CVFilterInstance::CVFilterInstance(Filter *fr)
|
||||
: FilterInstance()
|
||||
{
|
||||
cgContextRef = nil;
|
||||
ciContext = nil;
|
||||
ciFilter = nil;
|
||||
image = nil;
|
||||
func("creating instance for filter %s",fr->name);
|
||||
init(fr);
|
||||
}
|
||||
|
||||
void CVFilterInstance::init(Filter *fr)
|
||||
{
|
||||
FilterInstance::init(fr);
|
||||
FilterInstance::init(fr);
|
||||
ciFilter = [[CIFilter filterWithName:[NSString stringWithFormat:@"CI%s", fr->name]] retain];
|
||||
[ciFilter setDefaults];
|
||||
if (fr->type() == Filter::COREIMAGE) {
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
if(layer) {
|
||||
[layer setPreviewTarget:previewBox];
|
||||
[showButton setState:[layer isVisible]?NSOnState:NSOffState];
|
||||
if ([layer needPreview]) {
|
||||
if ([layer doPreview]) {
|
||||
[previewButton setState:NSOnState];
|
||||
} else {
|
||||
[previewButton setState:NSOffState];
|
||||
@@ -204,7 +204,7 @@
|
||||
NSRect frame = NSMakeRect(0, [container frame].size.height - 25, 0, 20); // XXX
|
||||
while (param) {
|
||||
frame.origin.x = 0;
|
||||
frame.size.width = [container frame].size.width / 2 - 10; // XXX
|
||||
frame.size.width = [container frame].size.width / 2 - 5; // XXX
|
||||
NSTextView *newText = [[NSTextView alloc] initWithFrame:frame];
|
||||
[newText setDrawsBackground:NO];
|
||||
[newText setTextColor:[NSColor colorWithDeviceRed:1.0 green:1.0 blue:1.0 alpha:1.0]];
|
||||
|
||||
+1
-1
@@ -48,7 +48,7 @@
|
||||
[lock unlock];
|
||||
return freejImage;
|
||||
}
|
||||
|
||||
|
||||
- (void)prepareOpenGL
|
||||
{
|
||||
NSAutoreleasePool *pool;
|
||||
|
||||
@@ -31,7 +31,6 @@ public:
|
||||
CVGeoLayer(CVLayerController *vin);
|
||||
|
||||
~CVGeoLayer();
|
||||
int start();
|
||||
void *do_filters(void *buf);
|
||||
protected:
|
||||
int currentIndex;
|
||||
|
||||
+8
-19
@@ -54,13 +54,6 @@ CVGeoLayer::~CVGeoLayer()
|
||||
free(frame);
|
||||
}
|
||||
|
||||
// ensure calling the start method from our CVLayer ancestor
|
||||
// (and not from the GeoLayer one
|
||||
int CVGeoLayer::start()
|
||||
{
|
||||
return GeoLayer::start();
|
||||
}
|
||||
|
||||
void *
|
||||
CVGeoLayer::feed()
|
||||
{
|
||||
@@ -83,25 +76,21 @@ CVGeoLayer::feed()
|
||||
CVPixelBufferRelease(pixelBuffer);
|
||||
}
|
||||
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
|
||||
[input renderFrame];
|
||||
|
||||
CVTexture *tx = [input getTexture];
|
||||
if (tx) {
|
||||
// ensure providing the pixelbuffer to upper cocoa-related layers
|
||||
CVPixelBufferRef pixelBuffer = [tx pixelBuffer];
|
||||
|
||||
CVPixelBufferRef pixelBuffer = [input currentFrame];
|
||||
if (pixelBuffer) {
|
||||
CVPixelBufferLockBaseAddress(pixelBuffer, 0);
|
||||
|
||||
//void *frame = CVPixelBufferGetBaseAddress(pixelBuffer);
|
||||
if (!frame)
|
||||
frame = malloc(CVPixelBufferGetDataSize(pixelBuffer));
|
||||
// TODO - try to avoid this copy!!
|
||||
//lock();
|
||||
memcpy(frame, CVPixelBufferGetBaseAddress(pixelBuffer), CVPixelBufferGetDataSize(pixelBuffer));
|
||||
|
||||
CVPixelBufferUnlockBaseAddress(pixelBuffer, 0);
|
||||
|
||||
//unlock();
|
||||
}
|
||||
CVPixelBufferUnlockBaseAddress(pixelBuffer, 0);
|
||||
CVPixelBufferRelease(pixelBuffer);
|
||||
}
|
||||
[pool release];
|
||||
return frame;
|
||||
}
|
||||
@@ -123,7 +112,7 @@ void *CVGeoLayer::do_filters(void *buf) {
|
||||
filters.unlock();
|
||||
}
|
||||
// now that we have applied filters (if any)
|
||||
// we can render the preview (if needed)
|
||||
[input renderPreview];
|
||||
if ([input respondsToSelector:@selector(frameFiltered:)])
|
||||
[input frameFiltered:(void *)buf];
|
||||
return buf;
|
||||
}
|
||||
|
||||
+1
-2
@@ -54,8 +54,7 @@ protected:
|
||||
virtual void *feed();
|
||||
|
||||
private:
|
||||
CVTexture *texture[2]; // double buffer
|
||||
void *frame;
|
||||
void *frame[2]; // double buffer
|
||||
unsigned int num;
|
||||
};
|
||||
|
||||
|
||||
+20
-30
@@ -23,20 +23,16 @@ CVLayer::CVLayer() : CVCocoaLayer(this), Layer()
|
||||
{
|
||||
type = Layer::GL_COCOA;
|
||||
buffer = NULL;
|
||||
memset(texture, 0, sizeof(CVTexture *) * 2);
|
||||
//texture = NULL;
|
||||
memset(frame, 0, sizeof(void *) * 2);
|
||||
num = 0;
|
||||
frame = NULL;
|
||||
}
|
||||
|
||||
CVLayer::CVLayer(CVLayerController *vin) : Layer(), CVCocoaLayer(this, vin)
|
||||
{
|
||||
type = Layer::GL_COCOA;
|
||||
buffer = NULL;
|
||||
frame = NULL;
|
||||
memset(texture, 0, sizeof(CVTexture *) * 2);
|
||||
memset(frame, 0, sizeof(void *) * 2);
|
||||
num = 0;
|
||||
//texture = (CVTexture **)calloc(1, sizeof(CVTexture *) * 2);
|
||||
set_name([input name]);
|
||||
[input setLayer:this];
|
||||
}
|
||||
@@ -45,14 +41,10 @@ CVLayer::~CVLayer()
|
||||
{
|
||||
stop();
|
||||
close();
|
||||
if (frame)
|
||||
free(frame);
|
||||
// release the double buffer if present
|
||||
for (int i = 0; i < 2; i++) {
|
||||
if (texture[i]) {
|
||||
[texture[i] release];
|
||||
texture[i] = NULL;
|
||||
}
|
||||
if (frame[i])
|
||||
free(frame[i]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -120,34 +112,32 @@ CVLayer::relative_seek(double increment)
|
||||
void *
|
||||
CVLayer::feed()
|
||||
{
|
||||
void *output = NULL;
|
||||
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
|
||||
[input renderFrame];
|
||||
|
||||
CVTexture *tx = [input getTexture];
|
||||
if (tx) {
|
||||
|
||||
CVPixelBufferRef pixelBuffer = [input currentFrame];
|
||||
if (pixelBuffer) {
|
||||
num++;
|
||||
int idx = num % 2;
|
||||
//lock();
|
||||
if (texture[num%2])
|
||||
[(CVTexture *)texture[num%2] release];
|
||||
|
||||
texture[num%2] = [tx retain];
|
||||
// ensure providing the pixelbuffer to upper cocoa-related layers
|
||||
CVPixelBufferRef pixelBuffer = [texture[num%2] pixelBuffer];
|
||||
|
||||
CVPixelBufferLockBaseAddress(pixelBuffer, 0);
|
||||
|
||||
//void *frame = CVPixelBufferGetBaseAddress(pixelBuffer);
|
||||
if (!frame)
|
||||
frame = malloc(CVPixelBufferGetDataSize(pixelBuffer));
|
||||
if (!frame[idx])
|
||||
frame[idx] = malloc(CVPixelBufferGetDataSize(pixelBuffer));
|
||||
// TODO - try to avoid this copy!!
|
||||
memcpy(frame, CVPixelBufferGetBaseAddress(pixelBuffer), CVPixelBufferGetDataSize(pixelBuffer));
|
||||
|
||||
//lock();
|
||||
memcpy(frame[idx], CVPixelBufferGetBaseAddress(pixelBuffer), CVPixelBufferGetDataSize(pixelBuffer));
|
||||
//unlock();
|
||||
CVPixelBufferUnlockBaseAddress(pixelBuffer, 0);
|
||||
|
||||
output = frame[idx];
|
||||
CVPixelBufferRelease(pixelBuffer);
|
||||
//unlock();
|
||||
}
|
||||
[pool release];
|
||||
return frame;
|
||||
return output;
|
||||
}
|
||||
|
||||
void *CVLayer::do_filters(void *buf) {
|
||||
@@ -165,8 +155,8 @@ void *CVLayer::do_filters(void *buf) {
|
||||
}
|
||||
filters.unlock();
|
||||
}
|
||||
// now that we have applied filters (if any)
|
||||
// we can render the preview (if needed)
|
||||
[input renderPreview];
|
||||
if ([input respondsToSelector:@selector(frameFiltered:)])
|
||||
[input frameFiltered:(void *)buf];
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
||||
+24
-19
@@ -35,17 +35,11 @@ class CVCocoaLayer;
|
||||
CFreej *freej;
|
||||
NSRecursiveLock *lock;
|
||||
|
||||
bool newFrame;
|
||||
CVPixelBufferRef currentFrame; // the current frame from the movie
|
||||
CVTexture *cvTexture;
|
||||
CIImage *posterImage;
|
||||
bool doPreview;
|
||||
CVTexture *currentPreviewTexture;
|
||||
CGLContextObj glContext;
|
||||
|
||||
// display link
|
||||
CVDisplayLinkRef displayLink; // the displayLink that runs the show
|
||||
CGDirectDisplayID viewDisplayID;
|
||||
// filters for CI rendering
|
||||
CIFilter *colorCorrectionFilter; // hue saturation brightness control through one CI filter
|
||||
CIFilter *compositeFilter; // composites the timecode over the video
|
||||
@@ -62,32 +56,43 @@ class CVCocoaLayer;
|
||||
CVCocoaLayer *layer;
|
||||
CVPreview *previewTarget;
|
||||
IBOutlet CVLayerView *layerView;
|
||||
bool doFilters;
|
||||
bool filtersInitialized;
|
||||
BOOL doPreview;
|
||||
BOOL doFilters;
|
||||
BOOL wantsRepeat;
|
||||
BOOL filtersInitialized;
|
||||
}
|
||||
|
||||
@property (readwrite, assign) CFreej *freej;
|
||||
@property (readwrite) CVCocoaLayer *layer;
|
||||
@property (readonly) CVLayerView *layerView;
|
||||
// subclass implementation should override this method and update
|
||||
// the currentFrame pointer only within the renderFrame implementation
|
||||
@property (readwrite) BOOL doPreview;
|
||||
@property (readwrite) BOOL doFilters;
|
||||
@property (readwrite) BOOL wantsRepeat;
|
||||
|
||||
// Subclasses can override this method to feed the current frame before returning it
|
||||
// To provide the frame [self feedFrame:] must be called.
|
||||
// The returned CVPixelBufferRef is retained and MUST be released by the caller.
|
||||
// NOTE : usually this is called from the C++ layer implementation , within the feed() method.
|
||||
// But some Cocoa-layers could lack a specific C++ class since the frame is created
|
||||
// directly in the cocoa implementation.
|
||||
// In such cases (for instance QTLayerController and CVTextLayerController) 'currentFrame'
|
||||
// is overridden to provide the new pixel buffer before calling [super currentFrame]
|
||||
- (CVPixelBufferRef)currentFrame;
|
||||
- (char *)name;
|
||||
// applies image parameters (brightness, contrast, exposure, etc) and stores the new frame as 'current' on
|
||||
// (to be later returned by [self currentFrame]
|
||||
- (void)feedFrame:(CVPixelBufferRef)frame;
|
||||
- (CVReturn)renderFrame;
|
||||
- (void)frameFiltered:(void *)buffer;
|
||||
- (id)initWithContext:(CFreej *)context;
|
||||
- (void)startPreview; // enable preview rendering
|
||||
- (void)stopPreview; // disable preview rendering
|
||||
- (void)renderPreview; // render the preview frame
|
||||
- (void)renderPreview:(CVPixelBufferRef)frame; // render the preview frame
|
||||
- (bool)isVisible; // query the layer to check if it's being sent to the Screen or not
|
||||
- (NSString *)blendMode;
|
||||
- (void)activate; /// activate the underlying CVLayer
|
||||
- (void)deactivate; /// deactivate the underlying CVLayer
|
||||
// Retain currentFrame, apply filters and return a CVTexture
|
||||
- (CVTexture *)getTexture;
|
||||
// query the layer to check if it needs to display a preview or not (used by CVPreview)
|
||||
- (bool)needPreview;
|
||||
- (NSDictionary *)imageParams;
|
||||
//- (void)setContext:(CFreej *)ctx;
|
||||
- (void)setPreviewTarget:(CVPreview *)targetView;
|
||||
- (CVPreview *)getPreviewTarget;
|
||||
- (void)lock; /// accessor to the internal mutex
|
||||
@@ -100,13 +105,13 @@ class CVCocoaLayer;
|
||||
- (void)toggleFilters;
|
||||
- (void)toggleVisibility;
|
||||
- (void)togglePreview;
|
||||
- (bool)doPreview;
|
||||
- (BOOL)doPreview;
|
||||
- (BOOL)wantsRepeat;
|
||||
- (void)setRepeat:(BOOL)repeat;
|
||||
- (void)setBlendMode:(NSString *)mode;
|
||||
- (void)initFilters;
|
||||
- (int)width;
|
||||
- (int)height;
|
||||
//- (void)filterFrame:(CIFilter *)filter;
|
||||
//- (void)filterFrame:(FilterInstance *)filter;
|
||||
- (Linklist<FilterInstance> *)activeFilters;
|
||||
- (IBAction)setImageParameter:(id)sender; /// tags from 0 to 10
|
||||
- (IBAction)setValue:(NSNumber *)value forImageParameter:(NSString *)parameter;
|
||||
|
||||
+72
-80
@@ -99,7 +99,8 @@ static OSStatus SetNumberValue(CFMutableDictionaryRef inDict,
|
||||
[scaleFilter release];
|
||||
[translateFilter release];
|
||||
///[timeCodeOverlay release];
|
||||
CVOpenGLTextureRelease(currentFrame);
|
||||
if (currentFrame)
|
||||
CVOpenGLTextureRelease(currentFrame);
|
||||
if (imageParams)
|
||||
[imageParams release];
|
||||
[lock release];
|
||||
@@ -109,23 +110,9 @@ static OSStatus SetNumberValue(CFMutableDictionaryRef inDict,
|
||||
|
||||
- (void)prepareOpenGL
|
||||
{
|
||||
CGOpenGLDisplayMask totalDisplayMask = 0;
|
||||
int virtualScreen;
|
||||
GLint displayMask;
|
||||
NSAutoreleasePool *pool;
|
||||
pool = [[NSAutoreleasePool alloc] init];
|
||||
|
||||
// Create display link
|
||||
if (layerView) {
|
||||
NSOpenGLPixelFormat *openGLPixelFormat = [layerView pixelFormat];
|
||||
viewDisplayID = (CGDirectDisplayID)[[[[[layerView window] screen] deviceDescription] objectForKey:@"NSScreenNumber"] intValue]; // we start with our view on the main display
|
||||
// build up list of displays from OpenGL's pixel format
|
||||
for (virtualScreen = 0; virtualScreen < [openGLPixelFormat numberOfVirtualScreens]; virtualScreen++)
|
||||
{
|
||||
[openGLPixelFormat getValues:&displayMask forAttribute:NSOpenGLPFAScreenMask forVirtualScreen:virtualScreen];
|
||||
totalDisplayMask |= displayMask;
|
||||
}
|
||||
}
|
||||
// Setup the timecode overlay
|
||||
/*
|
||||
NSDictionary *fontAttributes = [[NSDictionary alloc] initWithObjectsAndKeys:[NSFont labelFontOfSize:24.0f], NSFontAttributeName,
|
||||
@@ -146,24 +133,28 @@ static OSStatus SetNumberValue(CFMutableDictionaryRef inDict,
|
||||
Layer *fjLayer = NULL;
|
||||
|
||||
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
|
||||
|
||||
if (!filtersInitialized)
|
||||
[self initFilters]; // initialize on first use
|
||||
|
||||
if (layer)
|
||||
fjLayer = layer->fjLayer();
|
||||
else
|
||||
return;
|
||||
[lock lock];
|
||||
if (!currentFrame) {
|
||||
CVReturn err = CVPixelBufferCreate (
|
||||
NULL,
|
||||
fjLayer->geo.w,
|
||||
fjLayer->geo.h,
|
||||
k32ARGBPixelFormat,
|
||||
NULL,
|
||||
¤tFrame
|
||||
);
|
||||
}
|
||||
if (currentFrame)
|
||||
CVPixelBufferRelease(currentFrame);
|
||||
|
||||
CVReturn err = CVPixelBufferCreate (
|
||||
NULL,
|
||||
fjLayer->geo.w,
|
||||
fjLayer->geo.h,
|
||||
k32ARGBPixelFormat,
|
||||
NULL,
|
||||
¤tFrame
|
||||
);
|
||||
//currentFrame = CVPixelBufferRetain(frame);
|
||||
// TODO - check error code
|
||||
//fjLayer->lock();
|
||||
CIImage *inputImage = [CIImage imageWithCVImageBuffer:frame];
|
||||
|
||||
CGRect bounds = CGRectMake(0, 0, fjLayer->geo.w, fjLayer->geo.h);
|
||||
@@ -185,15 +176,16 @@ static OSStatus SetNumberValue(CFMutableDictionaryRef inDict,
|
||||
);
|
||||
CVPixelBufferUnlockBaseAddress(currentFrame, 0);
|
||||
if (!context) {
|
||||
//fjLayer->unlock();
|
||||
// todo - error messages
|
||||
return;
|
||||
}
|
||||
NSDictionary *ciContextOptions = [NSDictionary dictionaryWithObject:(NSString*)kCGColorSpaceGenericRGB
|
||||
forKey: kCIContextOutputColorSpace];
|
||||
CIContext *ciCtx = [CIContext contextWithCGContext:context options:ciContextOptions];
|
||||
//CGContextRelease(context);
|
||||
CGContextRelease(context);
|
||||
|
||||
// if (doFilters) {
|
||||
if (doFilters) {
|
||||
[colorCorrectionFilter setValue:inputImage forKey:@"inputImage"];
|
||||
[exposureAdjustFilter setValue:[colorCorrectionFilter valueForKey:@"outputImage"] forKey:@"inputImage"];
|
||||
[alphaFilter setValue:[exposureAdjustFilter valueForKey:@"outputImage"]
|
||||
@@ -209,46 +201,15 @@ static OSStatus SetNumberValue(CFMutableDictionaryRef inDict,
|
||||
} else {
|
||||
renderedImage = [rotateFilter valueForKey:@"outputImage"];
|
||||
}
|
||||
// } else {
|
||||
// renderedImage = inputImage;
|
||||
// }
|
||||
} else {
|
||||
renderedImage = inputImage;
|
||||
}
|
||||
|
||||
[ciCtx drawImage:renderedImage inRect:bounds fromRect:bounds];
|
||||
newFrame = YES;
|
||||
[lock unlock];
|
||||
[pool release];
|
||||
//[self renderFrame];
|
||||
}
|
||||
|
||||
- (CVReturn)renderFrame
|
||||
{
|
||||
CIImage *inputImage = nil;
|
||||
CIImage *renderedImage = nil;
|
||||
Layer *fjLayer = NULL;
|
||||
|
||||
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
|
||||
|
||||
if (layer)
|
||||
fjLayer = layer->fjLayer();
|
||||
else
|
||||
return kCVReturnError;
|
||||
|
||||
if (!filtersInitialized)
|
||||
[self initFilters]; // initialize on first use
|
||||
|
||||
if (newFrame) {
|
||||
[lock lock];
|
||||
if (cvTexture)
|
||||
[cvTexture release];
|
||||
cvTexture = [[CVTexture alloc] initWithCIImage:inputImage pixelBuffer:currentFrame];
|
||||
newFrame = NO;
|
||||
[lock unlock];
|
||||
//[self renderPreview];
|
||||
}
|
||||
[pool release];
|
||||
return kCVReturnSuccess;
|
||||
}
|
||||
|
||||
|
||||
- (IBAction)toggleFilters:(id)sender
|
||||
{
|
||||
doFilters = doFilters?false:true;
|
||||
@@ -452,18 +413,13 @@ static OSStatus SetNumberValue(CFMutableDictionaryRef inDict,
|
||||
//[lock unlock];
|
||||
}
|
||||
|
||||
- (void)renderPreview
|
||||
- (void)renderPreview:(CVPixelBufferRef)frame
|
||||
{
|
||||
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
|
||||
if ([self doPreview] && previewTarget) {
|
||||
// scale the frame to fit the preview
|
||||
if (![previewTarget isHiddenOrHasHiddenAncestor]) {
|
||||
Layer *fjLayer = layer->fjLayer();
|
||||
// XXX - it's too dangerous to access layer->buffer directly
|
||||
if (fjLayer && fjLayer->buffer)
|
||||
[previewTarget renderFrame:fjLayer];
|
||||
}
|
||||
|
||||
if (![previewTarget isHiddenOrHasHiddenAncestor])
|
||||
[previewTarget renderFrame:frame];
|
||||
}
|
||||
[pool release];
|
||||
}
|
||||
@@ -519,20 +475,42 @@ static OSStatus SetNumberValue(CFMutableDictionaryRef inDict,
|
||||
filtersInitialized = true;
|
||||
}
|
||||
|
||||
- (CVTexture *)getTexture
|
||||
- (CVPixelBufferRef)currentFrame
|
||||
{
|
||||
CVTexture *texture = nil;
|
||||
CVPixelBufferRef frame;
|
||||
[lock lock];
|
||||
texture = [cvTexture retain];
|
||||
frame = CVPixelBufferRetain(currentFrame);
|
||||
[lock unlock];
|
||||
|
||||
return [texture autorelease];
|
||||
|
||||
return frame;
|
||||
}
|
||||
|
||||
|
||||
- (bool)needPreview
|
||||
- (void)frameFiltered:(void *)buffer
|
||||
{
|
||||
return doPreview;
|
||||
// we have been notified that the frame has been filtered
|
||||
// and 'buffer' holds the data for the filtered image
|
||||
// (it will still have the some pixelformat and dimensions of original image)
|
||||
// XXX - actually we don't store the filtered image, but we use it just for preview
|
||||
if (layer && doPreview) {
|
||||
CVPixelBufferRef pixelBufferFiltered;
|
||||
CVReturn cvRet = CVPixelBufferCreateWithBytes (
|
||||
NULL,
|
||||
layer->width(),
|
||||
layer->height(),
|
||||
k32ARGBPixelFormat,
|
||||
buffer,
|
||||
layer->width()*4,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
&pixelBufferFiltered
|
||||
);
|
||||
// TODO - Error Messages
|
||||
if (cvRet == noErr) {
|
||||
[self renderPreview:pixelBufferFiltered];
|
||||
CVPixelBufferRelease(pixelBufferFiltered);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
- (void)startPreview
|
||||
@@ -665,7 +643,7 @@ static OSStatus SetNumberValue(CFMutableDictionaryRef inDict,
|
||||
doPreview = doPreview?NO:YES;
|
||||
}
|
||||
|
||||
- (bool)doPreview
|
||||
- (BOOL)doPreview
|
||||
{
|
||||
return doPreview;
|
||||
}
|
||||
@@ -712,8 +690,22 @@ static OSStatus SetNumberValue(CFMutableDictionaryRef inDict,
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
- (void)setRepeat:(BOOL)repeat
|
||||
{
|
||||
wantsRepeat = repeat;
|
||||
}
|
||||
|
||||
- (BOOL)wantsRepeat
|
||||
{
|
||||
return wantsRepeat;
|
||||
}
|
||||
|
||||
@synthesize freej;
|
||||
@synthesize layer;
|
||||
@synthesize layerView;
|
||||
@synthesize wantsRepeat;
|
||||
@synthesize doPreview;
|
||||
@synthesize doFilters;
|
||||
|
||||
@end
|
||||
|
||||
@@ -55,7 +55,6 @@ class CVLayer;
|
||||
- (bool)needPreview; // true if we need to provide a preview, else otherwise
|
||||
- (void)startPreview; // enable preview rendering
|
||||
- (void)stopPreview; // disable preview rendering
|
||||
- (void)renderPreview; // render the preview frame
|
||||
- (bool)isVisible; // query the layer to check if it's being sent to the Screen or not
|
||||
- (void)activate; /// activate the underlying CVLayer
|
||||
- (void)deactivate; /// deactivate the underlying CVLayer
|
||||
|
||||
@@ -203,13 +203,6 @@
|
||||
}
|
||||
|
||||
|
||||
- (void)renderPreview
|
||||
{
|
||||
if (layerController)
|
||||
[layerController renderPreview];
|
||||
}
|
||||
|
||||
|
||||
- (void)mouseDown:(NSEvent *)theEvent {
|
||||
[filterPanel setLayer:layerController];
|
||||
[filterPanel show];
|
||||
|
||||
+1
-1
@@ -30,7 +30,7 @@
|
||||
IBOutlet CFreej *freej;
|
||||
}
|
||||
|
||||
- (void)renderFrame:(Layer *)layer;
|
||||
- (void)renderFrame:(CVPixelBufferRef)pixelBufferIn;
|
||||
- (void)clear;
|
||||
|
||||
@end
|
||||
|
||||
+25
-47
@@ -135,72 +135,50 @@
|
||||
[pool release];
|
||||
}
|
||||
|
||||
- (void)renderFrame:(Layer *)layer
|
||||
- (void)renderFrame:(CVPixelBufferRef)pixelBufferIn
|
||||
{
|
||||
NSRect frame = [self frame];
|
||||
NSRect bounds = [self bounds];
|
||||
float scaleFactor;
|
||||
//CVTexture *textureToRelease = nil;
|
||||
Context *ctx = (Context *)[freej getContext];
|
||||
CVPixelBufferRef pixelBufferIn;
|
||||
CIImage *ciImage;
|
||||
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
|
||||
|
||||
|
||||
@synchronized(self) {
|
||||
layer->lock();
|
||||
CVReturn cvRet = CVPixelBufferCreateWithBytes (
|
||||
NULL,
|
||||
layer->geo.w,
|
||||
layer->geo.h,
|
||||
k32ARGBPixelFormat,
|
||||
layer->buffer,
|
||||
layer->geo.w*4,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
&pixelBufferIn
|
||||
);
|
||||
if (cvRet == kCVReturnSuccess) {
|
||||
CIImage *inputImage = [CIImage imageWithCVImageBuffer:pixelBufferIn];
|
||||
CIImage *inputImage = [CIImage imageWithCVImageBuffer:pixelBufferIn];
|
||||
|
||||
NSAffineTransform *scaleTransform = [NSAffineTransform transform];
|
||||
NSAffineTransform *scaleTransform = [NSAffineTransform transform];
|
||||
|
||||
scaleFactor = frame.size.height/ctx->screen->geo.h;
|
||||
[scaleTransform scaleBy:scaleFactor];
|
||||
CIFilter *scaleFilter = [CIFilter filterWithName:@"CIAffineTransform"];
|
||||
[scaleFilter setDefaults]; // set the filter to its default values
|
||||
scaleFactor = frame.size.height/ctx->screen->geo.h;
|
||||
[scaleTransform scaleBy:scaleFactor];
|
||||
CIFilter *scaleFilter = [CIFilter filterWithName:@"CIAffineTransform"];
|
||||
[scaleFilter setDefaults]; // set the filter to its default values
|
||||
|
||||
[scaleFilter setValue:scaleTransform forKey:@"inputTransform"];
|
||||
[scaleFilter setValue:inputImage forKey:@"inputImage"];
|
||||
[scaleFilter setValue:scaleTransform forKey:@"inputTransform"];
|
||||
[scaleFilter setValue:inputImage forKey:@"inputImage"];
|
||||
|
||||
CIImage *previewImage = [scaleFilter valueForKey:@"outputImage"];
|
||||
// output the downscaled frame in the preview window
|
||||
// XXX - I'm not sure we really need locking here
|
||||
CIImage *previewImage = [scaleFilter valueForKey:@"outputImage"];
|
||||
// output the downscaled frame in the preview window
|
||||
// XXX - I'm not sure we really need locking here
|
||||
|
||||
CGRect imageRect = CGRectMake(NSMinX(bounds), NSMinY(bounds),
|
||||
NSWidth(bounds), NSHeight(bounds));
|
||||
if( kCGLNoError != CGLLockContext((CGLContextObj)[[self openGLContext] CGLContextObj]) )
|
||||
return;
|
||||
CGRect imageRect = CGRectMake(NSMinX(bounds), NSMinY(bounds),
|
||||
NSWidth(bounds), NSHeight(bounds));
|
||||
if( kCGLNoError != CGLLockContext((CGLContextObj)[[self openGLContext] CGLContextObj]) )
|
||||
return;
|
||||
|
||||
CGPoint origin;
|
||||
CGPoint origin;
|
||||
|
||||
origin.x = (frame.size.width-(ctx->screen->geo.w * scaleFactor))/2;
|
||||
origin.y = (frame.size.height-(ctx->screen->geo.h * scaleFactor))/2;
|
||||
[ciContext drawImage:previewImage
|
||||
atPoint: origin
|
||||
fromRect: imageRect];
|
||||
//[self drawRect:NSZeroRect];
|
||||
CGLUnlockContext((CGLContextObj)[[self openGLContext] CGLContextObj]);
|
||||
|
||||
[self setNeedsDisplay:YES];
|
||||
//if (textureToRelease)
|
||||
// [textureToRelease release];
|
||||
CVPixelBufferRelease(pixelBufferIn);
|
||||
}
|
||||
layer->unlock();
|
||||
origin.x = (frame.size.width-(ctx->screen->geo.w * scaleFactor))/2;
|
||||
origin.y = (frame.size.height-(ctx->screen->geo.h * scaleFactor))/2;
|
||||
[ciContext drawImage:previewImage
|
||||
atPoint: origin
|
||||
fromRect: imageRect];
|
||||
//[self drawRect:NSZeroRect];
|
||||
CGLUnlockContext((CGLContextObj)[[self openGLContext] CGLContextObj]);
|
||||
[self setNeedsDisplay:YES];
|
||||
}
|
||||
|
||||
[pool release];
|
||||
}
|
||||
|
||||
|
||||
@@ -37,7 +37,6 @@
|
||||
#endif
|
||||
uint64_t lastPTS;
|
||||
bool isPlaying;
|
||||
bool wantsRepeat;
|
||||
}
|
||||
- (BOOL)setQTMovie:(QTMovie *)movie;
|
||||
- (void)unloadMovie;
|
||||
@@ -46,7 +45,6 @@
|
||||
- (void)setTime:(QTTime)inTime;
|
||||
- (BOOL)togglePlay;
|
||||
- (void)task;
|
||||
- (void)setRepeat:(BOOL)repeat;
|
||||
@end
|
||||
|
||||
#endif
|
||||
|
||||
@@ -286,9 +286,7 @@ static OSStatus SetNumberValue(CFMutableDictionaryRef inDict,
|
||||
#endif
|
||||
nil]
|
||||
error:nil];
|
||||
|
||||
// rendering (aka: applying filters) is now done in getTexture()
|
||||
// implemented in CVLayerController (our parent)
|
||||
// provide the frame to lower layers
|
||||
[self feedFrame:newPixelBuffer];
|
||||
rv = YES;
|
||||
#else
|
||||
@@ -301,9 +299,10 @@ static OSStatus SetNumberValue(CFMutableDictionaryRef inDict,
|
||||
|
||||
// rendering (aka: applying filters) is now done in getTexture()
|
||||
// implemented in CVLayerView (our parent)
|
||||
|
||||
[self feedFrame:newPixelBuffer];
|
||||
rv = YES;
|
||||
if (newPixelBuffeR) {
|
||||
[self feedFrame:newPixelBuffer];
|
||||
rv = YES;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
[lock unlock];
|
||||
@@ -316,8 +315,8 @@ static OSStatus SetNumberValue(CFMutableDictionaryRef inDict,
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
||||
- (CVReturn)renderFrame
|
||||
// we fetch the image from QTKit just when asked from upper layers
|
||||
- (CVPixelBufferRef)currentFrame
|
||||
{
|
||||
NSAutoreleasePool *pool = nil;
|
||||
|
||||
@@ -329,7 +328,7 @@ static OSStatus SetNumberValue(CFMutableDictionaryRef inDict,
|
||||
else
|
||||
rv = kCVReturnError;
|
||||
[pool release];
|
||||
return [super renderFrame];
|
||||
return [super currentFrame];
|
||||
}
|
||||
|
||||
- (void)task
|
||||
@@ -349,11 +348,6 @@ static OSStatus SetNumberValue(CFMutableDictionaryRef inDict,
|
||||
return true;
|
||||
}
|
||||
|
||||
- (void)setRepeat:(BOOL)repeat
|
||||
{
|
||||
wantsRepeat = repeat;
|
||||
}
|
||||
|
||||
//@synthesize qtMovie;
|
||||
|
||||
//#endif // no __x86_64
|
||||
|
||||
@@ -96,8 +96,10 @@
|
||||
|
||||
- (IBAction)toggleRepeat:(id)sender
|
||||
{
|
||||
[(CVQtLayerController *)layerController setRepeat:
|
||||
([repeatButton state] == NSOnState)?YES:NO];
|
||||
if ([sender state] == NSOnState)
|
||||
[(CVQtLayerController *)layerController setRepeat:YES];
|
||||
else
|
||||
[(CVQtLayerController *)layerController setRepeat:NO];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
return [super init];
|
||||
}
|
||||
|
||||
- (CVReturn)renderFrame
|
||||
- (CVPixelBufferRef)currentFrame
|
||||
{
|
||||
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
|
||||
Context *ctx = [freej getContext];
|
||||
@@ -62,9 +62,8 @@
|
||||
needsNewFrame = NO;
|
||||
}
|
||||
[lock unlock];
|
||||
//[self renderPreview];
|
||||
[pool release];
|
||||
return [super renderFrame];
|
||||
return [super currentFrame];
|
||||
}
|
||||
|
||||
- (IBAction)setText:(NSString *)theText withAttributes:(NSDictionary *)attributes
|
||||
|
||||
+82
-168
@@ -12,8 +12,8 @@
|
||||
</object>
|
||||
<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<integer value="3082"/>
|
||||
<integer value="2737"/>
|
||||
<integer value="967"/>
|
||||
</object>
|
||||
<object class="NSArray" key="IBDocument.PluginDependencies">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
@@ -4930,48 +4930,6 @@ ARcABAAAAAEAAAACARwAAwAAAAEAAQAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
|
||||
<string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
|
||||
<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
|
||||
</object>
|
||||
<object class="NSSlider" id="1045006764">
|
||||
<nil key="NSNextResponder"/>
|
||||
<int key="NSvFlags">-2147483392</int>
|
||||
<string key="NSFrameSize">{430, 307}</string>
|
||||
<int key="NSViewLayerContentsRedrawPolicy">2</int>
|
||||
<int key="NSTag">103</int>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSSliderCell" key="NSCell" id="936697706">
|
||||
<int key="NSCellFlags">-2079981824</int>
|
||||
<int key="NSCellFlags2">131072</int>
|
||||
<object class="NSMutableString" key="NSContents">
|
||||
<characters key="NS.bytes"/>
|
||||
</object>
|
||||
<reference key="NSSupport" ref="471700364"/>
|
||||
<reference key="NSControlView" ref="1045006764"/>
|
||||
<int key="NSTag">3</int>
|
||||
<double key="NSMaxValue">50</double>
|
||||
<double key="NSMinValue">0.0</double>
|
||||
<double key="NSValue">0.0</double>
|
||||
<double key="NSAltIncValue">0.0</double>
|
||||
<int key="NSNumberOfTickMarks">0</int>
|
||||
<int key="NSTickMarkPosition">1</int>
|
||||
<bool key="NSAllowsTickMarkValuesOnly">NO</bool>
|
||||
<bool key="NSVertical">NO</bool>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSTextField" id="964982557">
|
||||
<nil key="NSNextResponder"/>
|
||||
<int key="NSvFlags">-2147483392</int>
|
||||
<string key="NSFrameSize">{60, 18}</string>
|
||||
<int key="NSViewLayerContentsRedrawPolicy">2</int>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="341576982">
|
||||
<int key="NSCellFlags">67239424</int>
|
||||
<int key="NSCellFlags2">4194304</int>
|
||||
<string key="NSContents">Param4</string>
|
||||
<reference key="NSSupport" ref="570356381"/>
|
||||
<reference key="NSControlView" ref="964982557"/>
|
||||
<reference key="NSBackgroundColor" ref="285277074"/>
|
||||
<reference key="NSTextColor" ref="877010662"/>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBObjectContainer" key="IBDocument.Objects">
|
||||
<object class="NSMutableArray" key="connectionRecords">
|
||||
@@ -6408,22 +6366,6 @@ ARcABAAAAAEAAAACARwAAwAAAAEAAQAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
|
||||
</object>
|
||||
<int key="connectionID">3266</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBOutletConnection" key="connection">
|
||||
<string key="label">nextKeyView</string>
|
||||
<reference key="source" ref="1045006764"/>
|
||||
<reference key="destination" ref="964982557"/>
|
||||
</object>
|
||||
<int key="connectionID">3287</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBActionConnection" key="connection">
|
||||
<string key="label">setFilterParameter:</string>
|
||||
<reference key="source" ref="567669164"/>
|
||||
<reference key="destination" ref="1045006764"/>
|
||||
</object>
|
||||
<int key="connectionID">3291</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBOutletConnection" key="connection">
|
||||
<string key="label">activeFilters</string>
|
||||
@@ -6512,6 +6454,54 @@ ARcABAAAAAEAAAACARwAAwAAAAEAAQAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
|
||||
</object>
|
||||
<int key="connectionID">3307</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBActionConnection" key="connection">
|
||||
<string key="label">toggleRepeat:</string>
|
||||
<reference key="source" ref="1009168175"/>
|
||||
<reference key="destination" ref="111217843"/>
|
||||
</object>
|
||||
<int key="connectionID">3308</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBActionConnection" key="connection">
|
||||
<string key="label">toggleRepeat:</string>
|
||||
<reference key="source" ref="592456995"/>
|
||||
<reference key="destination" ref="603066175"/>
|
||||
</object>
|
||||
<int key="connectionID">3309</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBActionConnection" key="connection">
|
||||
<string key="label">toggleRepeat:</string>
|
||||
<reference key="source" ref="562618855"/>
|
||||
<reference key="destination" ref="698138662"/>
|
||||
</object>
|
||||
<int key="connectionID">3310</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBActionConnection" key="connection">
|
||||
<string key="label">toggleRepeat:</string>
|
||||
<reference key="source" ref="128813733"/>
|
||||
<reference key="destination" ref="581510460"/>
|
||||
</object>
|
||||
<int key="connectionID">3311</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBActionConnection" key="connection">
|
||||
<string key="label">toggleRepeat:</string>
|
||||
<reference key="source" ref="17727717"/>
|
||||
<reference key="destination" ref="209409051"/>
|
||||
</object>
|
||||
<int key="connectionID">3312</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBActionConnection" key="connection">
|
||||
<string key="label">toggleRepeat:</string>
|
||||
<reference key="source" ref="63165657"/>
|
||||
<reference key="destination" ref="804852438"/>
|
||||
</object>
|
||||
<int key="connectionID">3313</int>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBMutableOrderedSet" key="objectRecords">
|
||||
<object class="NSArray" key="orderedObjects">
|
||||
@@ -8360,7 +8350,7 @@ ARcABAAAAAEAAAACARwAAwAAAAEAAQAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
|
||||
<int key="objectID">2824</int>
|
||||
<reference key="object" ref="823826285"/>
|
||||
<reference key="parent" ref="0"/>
|
||||
<string key="objectName">Grabber Controller</string>
|
||||
<string key="objectName">Grabber</string>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">2825</int>
|
||||
@@ -9451,34 +9441,6 @@ ARcABAAAAAEAAAACARwAAwAAAAEAAQAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
|
||||
<reference key="object" ref="83379193"/>
|
||||
<reference key="parent" ref="847797644"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">3269</int>
|
||||
<reference key="object" ref="1045006764"/>
|
||||
<object class="NSMutableArray" key="children">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference ref="936697706"/>
|
||||
</object>
|
||||
<reference key="parent" ref="0"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">3280</int>
|
||||
<reference key="object" ref="936697706"/>
|
||||
<reference key="parent" ref="1045006764"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">3267</int>
|
||||
<reference key="object" ref="964982557"/>
|
||||
<object class="NSMutableArray" key="children">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference ref="341576982"/>
|
||||
</object>
|
||||
<reference key="parent" ref="0"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">3282</int>
|
||||
<reference key="object" ref="341576982"/>
|
||||
<reference key="parent" ref="964982557"/>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="flattenedProperties">
|
||||
@@ -10042,14 +10004,6 @@ ARcABAAAAAEAAAACARwAAwAAAAEAAQAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
|
||||
<string>3231.IBPluginDependency</string>
|
||||
<string>3264.IBPluginDependency</string>
|
||||
<string>3265.IBPluginDependency</string>
|
||||
<string>3267.IBEditorWindowLastContentRect</string>
|
||||
<string>3267.IBPluginDependency</string>
|
||||
<string>3267.ImportedFromIB2</string>
|
||||
<string>3269.IBEditorWindowLastContentRect</string>
|
||||
<string>3269.IBPluginDependency</string>
|
||||
<string>3269.ImportedFromIB2</string>
|
||||
<string>3280.IBPluginDependency</string>
|
||||
<string>3282.IBPluginDependency</string>
|
||||
<string>344.IBPluginDependency</string>
|
||||
<string>345.IBPluginDependency</string>
|
||||
<string>346.IBPluginDependency</string>
|
||||
@@ -10976,14 +10930,6 @@ ARcABAAAAAEAAAACARwAAwAAAAEAAQAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>{{42, 781}, {60, 18}}</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<integer value="1"/>
|
||||
<string>{{63, 469}, {430, 307}}</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<integer value="1"/>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
@@ -11065,7 +11011,7 @@ ARcABAAAAAEAAAACARwAAwAAAAEAAQAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
|
||||
</object>
|
||||
</object>
|
||||
<nil key="sourceID"/>
|
||||
<int key="maxID">3307</int>
|
||||
<int key="maxID">3313</int>
|
||||
</object>
|
||||
<object class="IBClassDescriber" key="IBDocument.Classes">
|
||||
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
|
||||
@@ -11346,11 +11292,13 @@ ARcABAAAAAEAAAACARwAAwAAAAEAAQAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>close:</string>
|
||||
<string>open:</string>
|
||||
<string>toggleRepeat:</string>
|
||||
</object>
|
||||
<object class="NSMutableArray" key="dict.values">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>id</string>
|
||||
<string>id</string>
|
||||
<string>id</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="actionInfosByName">
|
||||
@@ -11359,6 +11307,7 @@ ARcABAAAAAEAAAACARwAAwAAAAEAAQAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>close:</string>
|
||||
<string>open:</string>
|
||||
<string>toggleRepeat:</string>
|
||||
</object>
|
||||
<object class="NSMutableArray" key="dict.values">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
@@ -11370,6 +11319,10 @@ ARcABAAAAAEAAAACARwAAwAAAAEAAQAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
|
||||
<string key="name">open:</string>
|
||||
<string key="candidateClassName">id</string>
|
||||
</object>
|
||||
<object class="IBActionInfo">
|
||||
<string key="name">toggleRepeat:</string>
|
||||
<string key="candidateClassName">id</string>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="outlets">
|
||||
@@ -11423,7 +11376,7 @@ ARcABAAAAAEAAAACARwAAwAAAAEAAQAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
|
||||
<string key="candidateClassName">CVFilterPanel</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="860635088">
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="453600927">
|
||||
<string key="majorKey">IBProjectSource</string>
|
||||
<string key="minorKey">CVFilterPanel.h</string>
|
||||
</object>
|
||||
@@ -11519,51 +11472,12 @@ ARcABAAAAAEAAAACARwAAwAAAAEAAQAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<reference key="sourceIdentifier" ref="860635088"/>
|
||||
<reference key="sourceIdentifier" ref="453600927"/>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">CVGrabber</string>
|
||||
<string key="superclassName">QTCaptureDecompressedVideoOutput</string>
|
||||
<object class="NSMutableDictionary" key="outlets">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="NSArray" key="dict.sortedKeys">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>captureSize</string>
|
||||
<string>freej</string>
|
||||
<string>grabberController</string>
|
||||
</object>
|
||||
<object class="NSMutableArray" key="dict.values">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>NSPopUpButton</string>
|
||||
<string>CFreej</string>
|
||||
<string>CVGrabberController</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="toOneOutletInfosByName">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="NSArray" key="dict.sortedKeys">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>captureSize</string>
|
||||
<string>freej</string>
|
||||
<string>grabberController</string>
|
||||
</object>
|
||||
<object class="NSMutableArray" key="dict.values">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBToOneOutletInfo">
|
||||
<string key="name">captureSize</string>
|
||||
<string key="candidateClassName">NSPopUpButton</string>
|
||||
</object>
|
||||
<object class="IBToOneOutletInfo">
|
||||
<string key="name">freej</string>
|
||||
<string key="candidateClassName">CFreej</string>
|
||||
</object>
|
||||
<object class="IBToOneOutletInfo">
|
||||
<string key="name">grabberController</string>
|
||||
<string key="candidateClassName">CVGrabberController</string>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="160214915">
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="1016339510">
|
||||
<string key="majorKey">IBProjectSource</string>
|
||||
<string key="minorKey">CVGrabber.h</string>
|
||||
</object>
|
||||
@@ -11571,7 +11485,7 @@ ARcABAAAAAEAAAACARwAAwAAAAEAAQAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">CVGrabberController</string>
|
||||
<string key="superclassName">CVLayerController</string>
|
||||
<reference key="sourceIdentifier" ref="160214915"/>
|
||||
<reference key="sourceIdentifier" ref="1016339510"/>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">CVGrabberView</string>
|
||||
@@ -12296,21 +12210,21 @@ ARcABAAAAAEAAAACARwAAwAAAAEAAQAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSApplication</string>
|
||||
<string key="superclassName">NSResponder</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="740336899">
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="485023577">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSApplication.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSApplication</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="903830942">
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="822337866">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSApplicationScripting.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSApplication</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="962455847">
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="497152234">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSColorPanel.h</string>
|
||||
</object>
|
||||
@@ -12379,7 +12293,7 @@ ARcABAAAAAEAAAACARwAAwAAAAEAAQAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSControl</string>
|
||||
<string key="superclassName">NSView</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="711948890">
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="1004694700">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSControl.h</string>
|
||||
</object>
|
||||
@@ -12532,7 +12446,7 @@ ARcABAAAAAEAAAACARwAAwAAAAEAAQAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSMenu</string>
|
||||
<string key="superclassName">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="786915308">
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="841520179">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSMenu.h</string>
|
||||
</object>
|
||||
@@ -12540,7 +12454,7 @@ ARcABAAAAAEAAAACARwAAwAAAAEAAQAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSMenuItem</string>
|
||||
<string key="superclassName">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="94602702">
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="791585965">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSMenuItem.h</string>
|
||||
</object>
|
||||
@@ -12570,19 +12484,19 @@ ARcABAAAAAEAAAACARwAAwAAAAEAAQAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<reference key="sourceIdentifier" ref="740336899"/>
|
||||
<reference key="sourceIdentifier" ref="485023577"/>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<reference key="sourceIdentifier" ref="903830942"/>
|
||||
<reference key="sourceIdentifier" ref="822337866"/>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<reference key="sourceIdentifier" ref="962455847"/>
|
||||
<reference key="sourceIdentifier" ref="497152234"/>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<reference key="sourceIdentifier" ref="711948890"/>
|
||||
<reference key="sourceIdentifier" ref="1004694700"/>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
@@ -12621,7 +12535,7 @@ ARcABAAAAAEAAAACARwAAwAAAAEAAQAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<reference key="sourceIdentifier" ref="786915308"/>
|
||||
<reference key="sourceIdentifier" ref="841520179"/>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
@@ -12653,7 +12567,7 @@ ARcABAAAAAEAAAACARwAAwAAAAEAAQAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="807374565">
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="980009589">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSTableView.h</string>
|
||||
</object>
|
||||
@@ -12667,7 +12581,7 @@ ARcABAAAAAEAAAACARwAAwAAAAEAAQAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="47989481">
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="1001734095">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">AppKit.framework/Headers/NSView.h</string>
|
||||
</object>
|
||||
@@ -12814,7 +12728,7 @@ ARcABAAAAAEAAAACARwAAwAAAAEAAQAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="614557634">
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="646602665">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">QTKit.framework/Headers/QTCaptureDecompressedVideoOutput.h</string>
|
||||
</object>
|
||||
@@ -12849,7 +12763,7 @@ ARcABAAAAAEAAAACARwAAwAAAAEAAQAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSObject</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="607666346">
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="621673085">
|
||||
<string key="majorKey">IBFrameworkSource</string>
|
||||
<string key="minorKey">QTKit.framework/Headers/QTMovieView.h</string>
|
||||
</object>
|
||||
@@ -13005,7 +12919,7 @@ ARcABAAAAAEAAAACARwAAwAAAAEAAQAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSTableView</string>
|
||||
<string key="superclassName">NSControl</string>
|
||||
<reference key="sourceIdentifier" ref="807374565"/>
|
||||
<reference key="sourceIdentifier" ref="980009589"/>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSText</string>
|
||||
@@ -13048,7 +12962,7 @@ ARcABAAAAAEAAAACARwAAwAAAAEAAQAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSView</string>
|
||||
<reference key="sourceIdentifier" ref="94602702"/>
|
||||
<reference key="sourceIdentifier" ref="791585965"/>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSView</string>
|
||||
@@ -13060,7 +12974,7 @@ ARcABAAAAAEAAAACARwAAwAAAAEAAQAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSView</string>
|
||||
<string key="superclassName">NSResponder</string>
|
||||
<reference key="sourceIdentifier" ref="47989481"/>
|
||||
<reference key="sourceIdentifier" ref="1001734095"/>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">NSWindow</string>
|
||||
@@ -13106,7 +13020,7 @@ ARcABAAAAAEAAAACARwAAwAAAAEAAQAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">QTCaptureDecompressedVideoOutput</string>
|
||||
<string key="superclassName">QTCaptureOutput</string>
|
||||
<reference key="sourceIdentifier" ref="614557634"/>
|
||||
<reference key="sourceIdentifier" ref="646602665"/>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">QTCaptureOutput</string>
|
||||
@@ -13270,7 +13184,7 @@ ARcABAAAAAEAAAACARwAAwAAAAEAAQAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<reference key="sourceIdentifier" ref="607666346"/>
|
||||
<reference key="sourceIdentifier" ref="621673085"/>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
|
||||
BIN
Binary file not shown.
Reference in New Issue
Block a user