plugindll_cpp.htm

Top  Previous 

// 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=0int nParam2 = 0int nParam3 =0int nParam4 = 0 );

int CALLSCRIPT2(char* sName, int nParam1=0char* chParam2 = NULL, int nParam3 =0int 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,&param1,&param2,&param3,&param4);

    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,&param1,&param2,&param3,&param4);

    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,&param1,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);

}