--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gtk/plugins/crazychat/camdata.c Sat Dec 16 04:59:55 2006 +0000 @@ -0,0 +1,213 @@ +/* + * camdata.c + * basecame + * + * Created by CS194 on Mon Apr 26 2004. + * Copyright (c) 2004 __MyCompanyName__. All rights reserved. + * + */ + +#include "camdata.h" +//#include "AppBlit_Component.h" +#include "QTUtilities.h" +#include "Utilities.h" + + +#define BailNULL(n) if (!n) goto bail; +#define BailError(n) if (n) goto bail; +#define BailNil(n) if (!n) goto bail; +#define BailErr(x) {if (x != noErr) goto bail;} +#define bitdepth 32 + +mungDataPtr myMungData = NULL; +long mWorlds[20]; +UInt32 mRedCount[256], mGreenCound[256], mBlueCount[256]; + +static void DecompressSequencePreflight(GWorldPtr srcGWorld, + ImageSequence *imageSeq, + GWorldPtr destGWorld, + Rect *srcRect); +//static void DrawRGBHistogram(mungDataRecord *theMungData); +//static void CreateEffectDescription(mungDataRecord *theMungData); +//static void CreateEffectDecompSequence(mungDataRecord *theMungData); +//static void AddGWorldDataSourceToEffectDecompSeq(mungDataRecord *theMungData); +//static void MakeEffectTimeBaseForEffect(mungDataRecord *theMungData); +//static void DrawUsingEffect(mungDataRecord *theMungData); + + +OSErr InitializeMungData(Rect bounds) +{ + OSErr err = noErr; + + if(myMungData) + { + DisposeMungData(); + } + + myMungData = (mungDataPtr)NewPtrClear(sizeof(mungDataRecord)); + if (myMungData == nil) + { + err = MemError(); + goto bail; + } + + myMungData->effect = 0; // always + + + BailErr(QTNewGWorld(&(myMungData->gw),bitdepth,&bounds,0,0,0)); + LockPixels(GetGWorldPixMap(myMungData->gw)); + + SetMungDataColorDefaults(); + + + + myMungData->selectedIndex = 0; + myMungData->overlay = NULL; + + SetCurrentClamp(-1); + + + + myMungData->bounds = bounds; + + SetRect(&bounds, 0, 0, 256*2+4, 128*3 + 20); + BailErr(QTNewGWorld(&(myMungData->histoWorld),bitdepth,&bounds,0,0,0)); + LockPixels(GetGWorldPixMap(myMungData->histoWorld)); + +bail: + return err; +} + +OSErr DisposeMungData(void) +{ // check this out + OSErr err = noErr; + + if(myMungData) + { + //if(myMungData->drawSeq) + //{ + // CDSequenceEnd(myMungData->drawSeq); + //} + + if(myMungData->gw) + { + DisposeGWorld(myMungData->gw); + myMungData->gw = nil; + } + + if(myMungData->overlay) + { + DisposeGWorld(myMungData->overlay); + myMungData->overlay = nil; + } + + if(myMungData->histoWorld) + { + DisposeGWorld(myMungData->histoWorld); + myMungData->histoWorld = nil; + } + + if (myMungData->effectTimeBase) + { + DisposeTimeBase(myMungData->effectTimeBase); + } + if (myMungData->effectParams) + { + QTDisposeAtomContainer(myMungData->effectParams); + } + if (myMungData->effectDesc) + { + DisposeHandle((Handle)myMungData->effectDesc); + } + + DisposePtr((Ptr)myMungData); + myMungData = nil; + } + return err; +} + +static void DecompressSequencePreflight(GWorldPtr srcGWorld, + ImageSequence *imageSeq, + GWorldPtr destGWorld, + Rect *srcRect) +// might not need this one + +{ + ImageDescriptionHandle imageDesc = nil; + + BailErr(MakeImageDescriptionForPixMap (GetGWorldPixMap(srcGWorld), &imageDesc)); + + // use our built-in decompressor to draw + // (**imageDesc).cType = kCustomDecompressorType; + +// *********** MIGHT BE MAKING A BIG MISTAKE ****************** + // pass a compressed sample so a codec can perform preflighting before the first DecompressSequenceFrameWhen call + + BailErr(DecompressSequenceBegin(imageSeq, + imageDesc, + destGWorld, + 0, + srcRect, + nil, + srcCopy, + nil, + 0, + codecNormalQuality, + bestSpeedCodec)); + +bail: + if (imageDesc) + { + DisposeHandle((Handle)imageDesc); + } +} + +ImageSequence GetMungDataDrawSeq() +{ + return myMungData->drawSeq; +} + +void SetMungDataColorDefaults() +{ + if(myMungData) + { + myMungData->redMin = 2; + myMungData->redMax = 254; + myMungData->greenMin = 2; + myMungData->greenMax = 254; + myMungData->blueMin = 2; + myMungData->blueMax = 254; + } +} + +void GetMungDataBoundsRect(Rect *boundsRect) +// might not need this one +{ + MacSetRect (boundsRect, + myMungData->bounds.left, + myMungData->bounds.top, + myMungData->bounds.right, + myMungData->bounds.bottom + ); +} + +void SetCurrentClamp(short index) // :crazy:20040426 +{ + myMungData->selectedIndex = index; +} + +GWorldPtr GetMungDataOffscreen() +{ + return (myMungData->gw); +} + +void SetMungDataDrawSeq(ImageSequence theDrawSeq) +{ + myMungData->drawSeq = theDrawSeq; +} + + +CGrafPtr GetMungDataWindowPort() +{ + return GetWindowPort(myMungData->window); +}