// plugindll.cpp : Defines the entry point for the DLL application.
//
#include "stdafx.h"
#include "plugindll.h"
#include <stdlib.h>
PLCallBack m_pCallback = NULL;
HWND m_hWnd = NULL;
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
// we don't care about this one
return TRUE;
}
// make calling the script simpler by defining HELPER functions using the m_pCallback
int CALLSCRIPT(char* sName, int nParam1=0, int nParam2 = 0, int nParam3 =0, int nParam4 = 0 );
int CALLSCRIPT2(char* sName, int nParam1=0, char* chParam2 = NULL, int nParam3 =0, int nParam4 = 0 );
// the most common case all params are integers, return integer
int CALLSCRIPT(char* sName, int nParam1, int nParam2, int nParam3, int nParam4 )
{
_PLVariable param1;
param1.m_nVariableType = typeVariableInt;
param1.m_nValue = nParam1;
param1.m_sValue = NULL;
_PLVariable param2;
param2.m_nVariableType = typeVariableInt;
param2.m_nValue = nParam2;
param2.m_sValue = NULL;
_PLVariable param3;
param3.m_nVariableType = typeVariableInt;
param3.m_nValue = nParam3;
param3.m_sValue = NULL;
_PLVariable param4;
param4.m_nVariableType = typeVariableInt;
param4.m_nValue = nParam4;
param4.m_sValue = NULL;
_PLVariable ParamResult;
m_pCallback(sName,&ParamResult,¶m1,¶m2,¶m3,¶m4);
return ParamResult.m_nValue;
}
// another version, second param is char
int CALLSCRIPT2(char* sName, int nParam1, char* chParam2, int nParam3, int nParam4 )
{
_PLVariable param1;
param1.m_nVariableType = typeVariableInt;
param1.m_nValue = nParam1;
param1.m_sValue = NULL;
_PLVariable param2;
param2.m_nVariableType = typeVariableString;
param2.m_nValue = 0;
strcpy(param2.m_sValue,chParam2);
_PLVariable param3;
param3.m_nVariableType = typeVariableInt;
param3.m_nValue = nParam3;
param3.m_sValue = NULL;
_PLVariable param4;
param4.m_nVariableType = typeVariableInt;
param4.m_nValue = nParam4;
param4.m_sValue = NULL;
_PLVariable ParamResult;
m_pCallback(sName,&ParamResult,¶m1,¶m2,¶m3,¶m4);
return ParamResult.m_nValue;
}
// ********************************* Description of the plugin ABOUT box **************************
PLUGINDLL_API char* PL_GetAbout(void)
{
// let the DVD-lab display the about box
return "Test plugin, it will make colors negative";
// or display your own About box and then return ""
/*
*
MessageBox(NULL,"Hey, this is nice plug-in","About my Plug-in",MB_OK);
return "";
*/
}
// **************************************************************************************************
// this is the entry point
// we call all functions in DVD-lab with the PLCallBack which uses the same syntax as lab-TALK script.
// this simplify the SDK and yes, it is brilliant
PLUGINDLL_API void PL_RunScript(PLCallBack pCallback,HWND hWnd)
{
// parameters passed from the DVD-lab
m_hWnd = hWnd;
m_pCallback = pCallback;
// this one is a must!
if (m_pCallback==NULL)
return;
RunScript();
}
void RunScript()
{
int menu = MenuGetCurSel();
// VTS menu 1..255, VMG menu 10001..10255
// show the current menu on top of all others
MenuActivate(menu);
int object= ObjectGetCurSel(menu);
// Example: call the same function directly
// ****************************************************
_PLVariable param1;
param1.m_nVariableType = typeVariableInt;
param1.m_nValue = menu;
param1.m_sValue = NULL;
_PLVariable ParamResult;
m_pCallback("ObjectGetCurSel",&ParamResult,¶m1,NULL,NULL,NULL);
int object2 = ParamResult.m_nValue;
// *******************************************************
if (object==0)
{
MessageBox(m_hWnd,"No object Selected","Plug-in",MB_OK);
return;
}
//get the image buffer from object and store it in buffer 1
ImgGrabObject(1,menu,object); // imgNum = temporary image buffer 1,2 or 3
int imgW = ImgGetWidth(1) ;
int imgH = ImgGetHeight(1);
BYTE* pBuffer = (BYTE*)ImgGetRGBABuffer(1);
if (pBuffer==NULL)
return;
int y = 0;
int x = 0;
for (y=0; y<imgH;y++)
{
for (x=0;x<imgW;x++)
{
// get rgb values from buffer
BYTE r = pBuffer[y*imgW*4+x*4];
BYTE g = pBuffer[y*imgW*4+x*4+1];
BYTE b = pBuffer[y*imgW*4+x*4+2];
// we don't need alpha here, but anyway:
BYTE alpha = pBuffer[y*imgW*4+x*4+3];
// make negative
r = 255-r;
g = 255-g;
b = 255-b;
// put the value back to buffer
pBuffer[y*imgW*4+x*4] = r;
pBuffer[y*imgW*4+x*4+1] = g;
pBuffer[y*imgW*4+x*4+2] = b;
}
}
// put this all to the object
ImgSetToObject(1,menu,object);
}