//------------------------------------------------------------------------------------------------- // RegisterVisualPlugin //------------------------------------------------------------------------------------------------- // OSStatus RegisterVisualPlugin( PluginMessageInfo * messageInfo ) { PlayerMessageInfo playerMessageInfo; OSStatus status; memset( &playerMessageInfo.u.registerVisualPluginMessage, 0, sizeof(playerMessageInfo.u.registerVisualPluginMessage) ); GetVisualName( playerMessageInfo.u.registerVisualPluginMessage.name ); SetNumVersion( &playerMessageInfo.u.registerVisualPluginMessage.pluginVersion, kTVisualPluginMajorVersion, kTVisualPluginMinorVersion, kTVisualPluginReleaseStage, kTVisualPluginNonFinalRelease ); playerMessageInfo.u.registerVisualPluginMessage.options = GetVisualOptions(); playerMessageInfo.u.registerVisualPluginMessage.handler = (VisualPluginProcPtr)VisualPluginHandler; playerMessageInfo.u.registerVisualPluginMessage.registerRefCon = 0; playerMessageInfo.u.registerVisualPluginMessage.creator = kTVisualPluginCreator; playerMessageInfo.u.registerVisualPluginMessage.pulseRateInHz = kStoppedPulseRateInHz; // update my state N times a second playerMessageInfo.u.registerVisualPluginMessage.numWaveformChannels = 2; playerMessageInfo.u.registerVisualPluginMessage.numSpectrumChannels = 2; playerMessageInfo.u.registerVisualPluginMessage.minWidth = 64; playerMessageInfo.u.registerVisualPluginMessage.minHeight = 64; playerMessageInfo.u.registerVisualPluginMessage.maxWidth = 0; // no max width limit playerMessageInfo.u.registerVisualPluginMessage.maxHeight = 0; // no max height limit status = PlayerRegisterVisualPlugin( messageInfo->u.initMessage.appCookie, messageInfo->u.initMessage.appProc, &playerMessageInfo ); return status; }
static OSStatus RegisterVisualPlugin( PluginMessageInfo *messageInfo ) { OSStatus status; PlayerMessageInfo playerMessageInfo; #if TARGET_OS_WIN32 ClearMemory( &playerMessageInfo.u.registerVisualPluginMessage, sizeof( playerMessageInfo.u.registerVisualPluginMessage ) ); #else memset( &playerMessageInfo.u.registerVisualPluginMessage, 0, sizeof( playerMessageInfo.u.registerVisualPluginMessage ) ); #endif #if TARGET_OS_MAC const char* pluginName = kVisualPluginName; int const n = strlen( pluginName ); playerMessageInfo.u.registerVisualPluginMessage.name[0] = n; memcpy( &playerMessageInfo.u.registerVisualPluginMessage.name[1], &pluginName[0], n ); #else // copy in name length byte first playerMessageInfo.u.registerVisualPluginMessage.name[0] = lstrlenA( kVisualPluginName ); // now copy in actual name memcpy( &playerMessageInfo.u.registerVisualPluginMessage.name[1], kVisualPluginName, lstrlenA(kVisualPluginName)); #endif SetNumVersion( &playerMessageInfo.u.registerVisualPluginMessage.pluginVersion, kVisualPluginMajorVersion, kVisualPluginMinorVersion, kVisualPluginReleaseStage, kVisualPluginNonFinalRelease ); LOG( 3, "Giving iTunes version number: " + GetVersionString() ); #if TARGET_OS_WIN32 //FIXME actually, I doubt we want these playerMessageInfo.u.registerVisualPluginMessage.options = kVisualWantsIdleMessages; #endif playerMessageInfo.u.registerVisualPluginMessage.handler = VisualPluginHandler; playerMessageInfo.u.registerVisualPluginMessage.registerRefCon = 0; playerMessageInfo.u.registerVisualPluginMessage.creator = kVisualPluginCreator; // following sets render to be called every 100ms playerMessageInfo.u.registerVisualPluginMessage.timeBetweenDataInMS = 100; // 16 milliseconds = 1 Tick, 0xFFFFFFFF = Often as possible. playerMessageInfo.u.registerVisualPluginMessage.numWaveformChannels = 2; playerMessageInfo.u.registerVisualPluginMessage.numSpectrumChannels = 2; playerMessageInfo.u.registerVisualPluginMessage.minWidth = 64; playerMessageInfo.u.registerVisualPluginMessage.minHeight = 64; playerMessageInfo.u.registerVisualPluginMessage.maxWidth = 32767; playerMessageInfo.u.registerVisualPluginMessage.maxHeight = 32767; playerMessageInfo.u.registerVisualPluginMessage.minFullScreenBitDepth = 0; playerMessageInfo.u.registerVisualPluginMessage.maxFullScreenBitDepth = 0; playerMessageInfo.u.registerVisualPluginMessage.windowAlignmentInBytes = 0; messageInfo->u.initMessage.options = 0; messageInfo->u.initMessage.refCon = 0; status = PlayerRegisterVisualPlugin( messageInfo->u.initMessage.appCookie, messageInfo->u.initMessage.appProc, &playerMessageInfo ); return status; }