From facb512971c93890595744ac27526365727258a1 Mon Sep 17 00:00:00 2001 From: Michael Liebmann Date: Sun, 17 Jan 2016 06:12:27 +0100 Subject: [PATCH 1/2] More replace __FILE__ with __file__ Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/c7b6026ac20a3ef59444f410865fc4fd1712c2d1 Author: Michael Liebmann Date: 2016-01-17 (Sun, 17 Jan 2016) --- src/gui/screensaver.cpp | 6 +++--- src/zapit/src/femanager.cpp | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/gui/screensaver.cpp b/src/gui/screensaver.cpp index c6fe0d0f2..0235a9358 100644 --- a/src/gui/screensaver.cpp +++ b/src/gui/screensaver.cpp @@ -111,7 +111,7 @@ void CScreenSaver::Start() if(!thrScreenSaver) { - //printf("[%s] %s: starting thread\n", __FILE__, __FUNCTION__); + //printf("[%s] %s: starting thread\n", __file__, __FUNCTION__); pthread_create(&thrScreenSaver, NULL, ScreenSaverPrg, (void*) this); pthread_detach(thrScreenSaver); } @@ -290,12 +290,12 @@ void CScreenSaver::paint() do { clr.i_color = rand(); brightness = (unsigned int)clr.uc_color.r * 19595 + (unsigned int)clr.uc_color.g * 38469 + (unsigned int)clr.uc_color.b * 7471; - //printf("[%s] %s: brightness: %d\n", __FILE__, __FUNCTION__, brightness>> 16); + //printf("[%s] %s: brightness: %d\n", __file__, __FUNCTION__, brightness>> 16); } while(brightness >> 16 < 80); clr.i_color &= 0x00FFFFFF; - //printf("[%s] %s: clr.i_color: r %02x g %02x b %02x a %02x\n", __FILE__, __FUNCTION__, clr.uc_color.r, clr.uc_color.g, clr.uc_color.b, clr.uc_color.a); + //printf("[%s] %s: clr.i_color: r %02x g %02x b %02x a %02x\n", __file__, __FUNCTION__, clr.uc_color.r, clr.uc_color.g, clr.uc_color.b, clr.uc_color.a); } else clr.i_color = COL_DARK_GRAY; diff --git a/src/zapit/src/femanager.cpp b/src/zapit/src/femanager.cpp index 77dbad73e..19ce3e70a 100644 --- a/src/zapit/src/femanager.cpp +++ b/src/zapit/src/femanager.cpp @@ -48,7 +48,7 @@ static int unused_demux; do { \ if (fedebug) \ fprintf(stdout, "[%s:%s:%d] " fmt "\n", \ - __FILE__, __FUNCTION__, \ + __file__, __func__, \ __LINE__ , ## args); \ } while (0) From 38488e642c7a99e354c2b013af6b953a77516625 Mon Sep 17 00:00:00 2001 From: Michael Liebmann Date: Sun, 17 Jan 2016 06:12:37 +0100 Subject: [PATCH 2/2] CLuaInstVideo: Add script function 'setInfoFunc()'... ...for displaying information in the movieplayer - Set Lua api version to 1.36 Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/644ab188442ac3aef93a5127f6fb98a9205a42ff Author: Michael Liebmann Date: 2016-01-17 (Sun, 17 Jan 2016) --- src/gui/lua/lua_video.cpp | 45 +++++++++++++++++++++++++++++++++++++++ src/gui/lua/lua_video.h | 5 ++++- src/gui/lua/luainstance.h | 2 +- src/gui/movieplayer.cpp | 18 ++++++++++++++-- src/gui/movieplayer.h | 9 ++++++++ 5 files changed, 75 insertions(+), 4 deletions(-) diff --git a/src/gui/lua/lua_video.cpp b/src/gui/lua/lua_video.cpp index 5dc3e26cf..b0e604847 100644 --- a/src/gui/lua/lua_video.cpp +++ b/src/gui/lua/lua_video.cpp @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -58,6 +59,7 @@ void CLuaInstVideo::LuaVideoRegister(lua_State *L) { "ShowPicture", CLuaInstVideo::ShowPicture }, { "StopPicture", CLuaInstVideo::StopPicture }, { "PlayFile", CLuaInstVideo::PlayFile }, + { "setInfoFunc", CLuaInstVideo::setInfoFunc }, { "zapitStopPlayBack", CLuaInstVideo::zapitStopPlayBack }, { "channelRezap", CLuaInstVideo::channelRezap }, { "createChannelIDfromUrl", CLuaInstVideo::createChannelIDfromUrl }, @@ -170,13 +172,56 @@ int CLuaInstVideo::PlayFile(lua_State *L) std::string si1(info1); std::string si2(info2); std::string sf(fname); + if (D != NULL && !D->infoFunc.empty()) + CMoviePlayerGui::getInstance().setLuaInfoFunc(L, true); CMoviePlayerGui::getInstance().SetFile(st, sf, si1, si2); CMoviePlayerGui::getInstance().exec(NULL, "http_lua"); + CMoviePlayerGui::getInstance().setLuaInfoFunc(L, false); int ret = CMoviePlayerGui::getInstance().getKeyPressed(); lua_pushinteger(L, ret); return 1; } +int CLuaInstVideo::setInfoFunc(lua_State *L) +{ + CLuaVideo *D = VideoCheckData(L, 1); + if (!D) return 0; + + int numargs = lua_gettop(L); + if (numargs < 2) { + printf("CLuaInstVideo::%s: not enough arguments (%d, expected 1)\n", __func__, numargs-1); + return 0; + } + + D->infoFunc = luaL_checkstring(L, 2); + return 0; +} + +bool CLuaInstVideo::execLuaInfoFunc(lua_State *L, int xres, int yres, int aspectRatio, int framerate) +{ + CLuaVideo *D = VideoCheckData(L, 1); + if (!D) return false; + + lua_getglobal(L, D->infoFunc.c_str()); + lua_pushinteger(L, (lua_Integer)xres); + lua_pushinteger(L, (lua_Integer)yres); + lua_pushinteger(L, (lua_Integer)aspectRatio); + lua_pushinteger(L, (lua_Integer)framerate); + int status = lua_pcall(L, 4, 0, 0); + if (status) { + char msg[1024]; + lua_Debug ar; + lua_getstack(L, 1, &ar); + lua_getinfo(L, "Sl", &ar); + memset(msg, '\0', sizeof(msg)); + snprintf(msg, sizeof(msg)-1, "[%s:%d] error running function '%s': %s", ar.short_src, ar.currentline, D->infoFunc.c_str(), lua_tostring(L, -1)); + fprintf(stderr, "[CLuaInstVideo::%s:%d] %s\n", __func__, __LINE__, msg); + DisplayErrorMessage(msg); + return false; + } + return true; +} + int CLuaInstVideo::zapitStopPlayBack(lua_State *L) { /* workaround for deprecated functions */ diff --git a/src/gui/lua/lua_video.h b/src/gui/lua/lua_video.h index 6668f3a5b..da0128950 100644 --- a/src/gui/lua/lua_video.h +++ b/src/gui/lua/lua_video.h @@ -24,7 +24,8 @@ class CLuaVideo { public: bool singlePlay; - CLuaVideo() { singlePlay=false; }; + std::string infoFunc; + CLuaVideo() { singlePlay=false; infoFunc=""; }; ~CLuaVideo() {}; }; @@ -36,6 +37,7 @@ class CLuaInstVideo static CLuaInstVideo* getInstance(); static void LuaVideoRegister(lua_State *L); static int channelRezap(lua_State *L); + static bool execLuaInfoFunc(lua_State *L, int xres, int yres, int aspectRatio, int framerate); /* deprecated functions */ static int setBlank_old(lua_State *L); @@ -53,6 +55,7 @@ class CLuaInstVideo static int ShowPicture(lua_State *L); static int StopPicture(lua_State *L); static int PlayFile(lua_State *L); + static int setInfoFunc(lua_State *L); static int zapitStopPlayBack(lua_State *L); static int createChannelIDfromUrl(lua_State *L); static int getNeutrinoMode(lua_State *L); diff --git a/src/gui/lua/luainstance.h b/src/gui/lua/luainstance.h index 3a0a0ff71..f3aa9ad70 100644 --- a/src/gui/lua/luainstance.h +++ b/src/gui/lua/luainstance.h @@ -32,7 +32,7 @@ extern "C" { #if 0 #define LUA_API_VERSION_MAJOR 1 -#define LUA_API_VERSION_MINOR 35 +#define LUA_API_VERSION_MINOR 36 #endif void LuaInstRegisterFunctions(lua_State *L, bool fromThreads=false); diff --git a/src/gui/movieplayer.cpp b/src/gui/movieplayer.cpp index d54dded4a..a438bc3d2 100644 --- a/src/gui/movieplayer.cpp +++ b/src/gui/movieplayer.cpp @@ -44,6 +44,7 @@ #include #include #include +#include #include #include #include @@ -190,6 +191,7 @@ void CMoviePlayerGui::Init(void) filelist_it = filelist.end(); keyPressed = CMoviePlayerGui::PLUGIN_PLAYSTATE_NORMAL; isLuaPlay = false; + haveLuaInfoFunc = false; blockedFromPlugin = false; m_screensaver = false; m_idletime = time(NULL); @@ -309,6 +311,7 @@ int CMoviePlayerGui::exec(CMenuTarget * parent, const std::string & actionKey) isLuaPlay = true; is_file_player = true; PlayFile(); + haveLuaInfoFunc = false; } else { return menu_return::RETURN_REPAINT; @@ -1725,14 +1728,25 @@ void CMoviePlayerGui::handleMovieBrowser(neutrino_msg_t msg, int /*position*/) cMovieInfo.saveMovieInfo(*p_movie_info); /* save immediately in xml file */ } } - } else if (msg == NeutrinoMessages::SHOW_EPG && p_movie_info) { + } else if (msg == NeutrinoMessages::SHOW_EPG && (p_movie_info || (isLuaPlay && haveLuaInfoFunc))) { CTimeOSD::mode m_mode = FileTime.getMode(); bool restore = FileTime.IsVisible(); if (restore) FileTime.kill(); InfoClock->enableInfoClock(false); - cMovieInfo.showMovieInfo(*p_movie_info); + if (isLuaPlay && haveLuaInfoFunc) { + int xres = 0, yres = 0, aspectRatio = 0, framerate = -1; + if (!videoDecoder->getBlank()) { + videoDecoder->getPictureInfo(xres, yres, framerate); + if (yres == 1088) + yres = 1080; + aspectRatio = videoDecoder->getAspectRatio(); + } + CLuaInstVideo::getInstance()->execLuaInfoFunc(luaState, xres, yres, aspectRatio, framerate); + } + else if (p_movie_info) + cMovieInfo.showMovieInfo(*p_movie_info); InfoClock->enableInfoClock(true); if (restore) { diff --git a/src/gui/movieplayer.h b/src/gui/movieplayer.h index fcef1ea6f..aa558cc24 100644 --- a/src/gui/movieplayer.h +++ b/src/gui/movieplayer.h @@ -53,6 +53,12 @@ #include #include +extern "C" { +#include +#include +#include +} + class CMoviePlayerGui : public CMenuTarget { public: @@ -91,6 +97,8 @@ class CMoviePlayerGui : public CMenuTarget CMoviePlayerGui::state playstate; int keyPressed; bool isLuaPlay; + bool haveLuaInfoFunc; + lua_State* luaState; bool blockedFromPlugin; int speed; int startposition; @@ -230,6 +238,7 @@ class CMoviePlayerGui : public CMenuTarget void restoreNeutrino(); void setBlockedFromPlugin(bool b) { blockedFromPlugin = b; }; bool getBlockedFromPlugin() { return blockedFromPlugin; }; + void setLuaInfoFunc(lua_State* L, bool func) { luaState = L; haveLuaInfoFunc = func; }; }; #endif