ffmpeg coco2d-x lua test

wqiaofujiang 2020-07-05

.h

{

#ifndef __LUA_YFFMPEG_H__
#define __LUA_YFFMPEG_H__
#ifdef __cplusplus
extern "C" {
#endif
#include "tolua++.h"
#ifdef __cplusplus
}
#endif


TOLUA_API  int lua_yffmpeg(lua_State* L);
#endif

}

.cpp

{

#include "lua_yffmpeg.h"
#include "yffmpeg.h"
#include "scripting/lua-bindings/manual/LuaBasicConversions.h"
#include "scripting/lua-bindings/manual/CCLuaEngine.h"



int lua_yffmpeg_init(lua_State *tolua_S)
{
    int argc = 0;
    bool ok = true;

#if COCOS2D_DEBUG >= 1
    tolua_Error tolua_err;
#endif

#if COCOS2D_DEBUG >= 1
    if (!tolua_isusertable(tolua_S, 1, "Solution.yffmpeg", 0, &tolua_err)) goto tolua_lerror;
#endif

    argc = lua_gettop(tolua_S) - 1;

    if (argc == 0)
    {
        yffmpeg *ret = new (std::nothrow) yffmpeg();
        if (ret != nullptr)
        {
            ret->setup();
        }
        object_to_luaval<yffmpeg>(tolua_S, "Solution.yffmpeg", (yffmpeg*)ret);
        return 1;
    }
    luaL_error(tolua_S, "%s has wrong number of arguments: %d, was expecting %d\n ", "Solution.yffmpeg:init", argc, 0);
    return 0;
#if COCOS2D_DEBUG >= 1
    tolua_lerror:
                tolua_error(tolua_S, "#ferror in function ‘lua_yffmpeg_init‘.", &tolua_err);
#endif
                return 0;
}
int lua_yffmpeg_getconfigure(lua_State *tolua_S)
{
    int argc = 0;
    yffmpeg* cobj = nullptr;
    bool ok = true;

#if COCOS2D_DEBUG >= 1
    tolua_Error tolua_err;
#endif


#if COCOS2D_DEBUG >= 1
    if (!tolua_isusertype(tolua_S, 1, "Solution.yffmpeg", 0, &tolua_err)) goto tolua_lerror;
#endif

    cobj = (yffmpeg*)tolua_tousertype(tolua_S, 1, 0);

#if COCOS2D_DEBUG >= 1
    if (!cobj)
    {
        tolua_error(tolua_S, "invalid ‘cobj‘ in function ‘lua_yffmpeg_getconfigure‘", nullptr);
        return 0;
    }
#endif

    argc = lua_gettop(tolua_S) - 1;

    if (argc == 0)
    {
        if (cobj != nullptr)
        {
            auto ret = avdevice_configuration();

            lua_pushlstring(tolua_S, ret, strlen(ret));
            log("[C++PRINTF] push string to lua lv ffmpeg info\n");
            return 1;
        }
        return 0;
    }
    luaL_error(tolua_S, "%s has wrong number of arguments: %d, was expecting %d \n", "Solution.yffmpeg:getconfigure", argc, 0);
    return 0;

#if COCOS2D_DEBUG >= 1
    tolua_lerror:
                tolua_error(tolua_S, "#ferror in function ‘lua_yffmpeg_getconfigure‘.", &tolua_err);
#endif

                return 0;
}


int lua_register_yffmpeg(lua_State *tolua_S)
{
    tolua_usertype(tolua_S, "Solution.yffmpeg");
    tolua_cclass(tolua_S, "yffmpeg", "Solution.yffmpeg", "", nullptr);

    tolua_beginmodule(tolua_S, "yffmpeg");
        tolua_function(tolua_S, "init", lua_yffmpeg_init);
        tolua_function(tolua_S, "getconfigure", lua_yffmpeg_getconfigure);
    tolua_endmodule(tolua_S);
    std::string typeName = typeid(yffmpeg).name();
    g_luaType[typeName] = "Solution.yffmpeg";
    g_typeCast["yffmpeg"] = "Solution.yffmpeg";
    return 1;
}

int register_yffmpeg(lua_State *tolua_S)
{
    tolua_open(tolua_S);

    tolua_module(tolua_S, "Solution", 0);
    tolua_beginmodule(tolua_S, "Solution");

    lua_register_yffmpeg(tolua_S);

    tolua_endmodule(tolua_S);
    return 1;
}



int lua_yffmpeg(lua_State* L)
{
    lua_getglobal(L, "_G");
    if (lua_istable(L, -1))
    {
        register_yffmpeg(L);
        if (L)
        {
            lua_pushstring(L, "Solution.yffmpeg");
            lua_rawget(L, LUA_REGISTRYINDEX);
            lua_pop(L, 1);
        }
    }
    lua_pop(L, 1);
    return 0;
}

}

相关推荐