This is MPEGView.m in view mode; [Download] [Up]
/*
* Copyright 1994, Black Adder Research, Inc. This source code may be
* redistributed and modified with one restriction - do not claim that
* you wrote it.
*
* Black Adder Research, Inc.
* 730 Norell Ave. North
* Stillwater, MN 55082
*
*/
#import "Controller.h"
#import "MPEGView.h"
#import <appkit/appkit.h>
@implementation MPEGView : View
- initSize: (const NXSize *) aSize
{
NXRect imageRect;
id retVal = nil;
NXSetRect(&imageRect, 0.0, 0.0, aSize->width, aSize->height);
[super initFrame:&imageRect];
strcpy(mpgFile, "");
if((theData = (unsigned char *)malloc(3 * (int) (aSize->width * aSize->height))) != NULL) {
if((theBitmap = [[NXBitmapImageRep alloc] initData:theData
pixelsWide: (int) aSize->width
pixelsHigh: (int) aSize->height
bitsPerSample: 8
samplesPerPixel:3
hasAlpha:NO
isPlanar:NO
colorSpace: NX_RGBColorSpace
bytesPerRow:0
bitsPerPixel:0]) != nil) {
retVal = self;
}
}
return(retVal);
}
- runFromFile: (char *) mpegFile
{
strcpy(mpgFile, mpegFile);
[self runAgain];
return(self);
}
- runAgain
{
char command[256];
int numPix, numFrPix;
BOOL shouldLoop = YES;
FILE *ifp;
if (strcmp(mpgFile, "") != 0) {
numPix = 3 * [theBitmap pixelsWide] * [theBitmap pixelsHigh];
numFrPix = numPix + 3 * sizeof(int); /* for frame number, width, and height */
sprintf(command, "%s/mpegDecode %s", [[NXBundle mainBundle] directory], mpgFile);
if ((ifp = popen(command, "r")) != NULL) {
[self lockFocus];
while(shouldLoop) {
if(NXUserAborted()) {
NXResetUserAbort();
if(NX_ALERTDEFAULT == NXRunAlertPanel("MPEGStream",
"Stop Playback?", "Yes", "No", NULL) ) {
shouldLoop = NO;
break;
}
}
fread(theData, 1, 3*sizeof(int), ifp); /* skip frame #, width, height */
if(fread(theData, 1, numPix, ifp) != numPix) {
shouldLoop = NO;
break;
}
else {
[theBitmap draw];
NXPing();
}
}
[self unlockFocus];
pclose(ifp);
}
}
return(self);
}
- drawSelf:(const NXRect *)rects :(int)rectCount
{
[theBitmap draw];
return self;
}
- free
{
free(theData);
[theBitmap free];
return [super free];
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.