]> git.sesse.net Git - nageru/blobdiff - theme.cpp
Expose the video input signals to the theme, so that they can ask for connection...
[nageru] / theme.cpp
index 56e7ce2de3285733707c425b7d61f076eda6266b..9cfcc87b7c10783c87cc36755fc6899e3a023d61 100644 (file)
--- a/theme.cpp
+++ b/theme.cpp
@@ -369,6 +369,14 @@ int VideoInput_change_rate(lua_State* L)
        return 0;
 }
 
+int VideoInput_get_signal_num(lua_State* L)
+{
+       assert(lua_gettop(L) == 1);
+       FFmpegCapture **video_input = (FFmpegCapture **)luaL_checkudata(L, 1, "VideoInput");
+       lua_pushnumber(L, -1 - (*video_input)->get_card_index());
+       return 1;
+}
+
 int WhiteBalanceEffect_new(lua_State* L)
 {
        assert(lua_gettop(L) == 0);
@@ -572,6 +580,7 @@ const luaL_Reg VideoInput_funcs[] = {
        { "new", VideoInput_new },
        { "rewind", VideoInput_rewind },
        { "change_rate", VideoInput_change_rate },
+       { "get_signal_num", VideoInput_get_signal_num },
        { NULL, NULL }
 };
 
@@ -792,18 +801,18 @@ void LiveInputWrapper::connect_signal_raw(int signal_num)
                case bmusb::PixelFormat_8BitYCbCr:
                        ycbcr_inputs[i]->set_texture_num(0, userdata->tex_y[frame.field_number]);
                        ycbcr_inputs[i]->set_texture_num(1, userdata->tex_cbcr[frame.field_number]);
-                       ycbcr_inputs[i]->set_width(this_width);
-                       ycbcr_inputs[i]->set_height(this_height);
+                       ycbcr_inputs[i]->set_width(width);
+                       ycbcr_inputs[i]->set_height(height);
                        break;
                case bmusb::PixelFormat_10BitYCbCr:
                        ycbcr_inputs[i]->set_texture_num(0, userdata->tex_444[frame.field_number]);
-                       ycbcr_inputs[i]->set_width(this_width);
-                       ycbcr_inputs[i]->set_height(this_height);
+                       ycbcr_inputs[i]->set_width(width);
+                       ycbcr_inputs[i]->set_height(height);
                        break;
                case bmusb::PixelFormat_8BitBGRA:
                        rgba_inputs[i]->set_texture_num(userdata->tex_rgba[frame.field_number]);
-                       rgba_inputs[i]->set_width(this_width);
-                       rgba_inputs[i]->set_height(this_height);
+                       rgba_inputs[i]->set_width(width);
+                       rgba_inputs[i]->set_height(height);
                        break;
                default:
                        assert(false);
@@ -1084,6 +1093,11 @@ vector<string> Theme::get_transition_names(float t)
 
 int Theme::map_signal(int signal_num)
 {
+       // Negative numbers map to raw signals.
+       if (signal_num < 0) {
+               return -1 - signal_num;
+       }
+
        unique_lock<mutex> lock(map_m);
        if (signal_to_card_mapping.count(signal_num)) {
                return signal_to_card_mapping[signal_num];