void MainWindow::cut()
{
- static int i = 0;
- global_mixer->cut(Mixer::Source((++i) % 3));
+ global_mixer->transition_clicked(0, 0.0f); // FIXME: real values
}
while (!should_quit) {
++frame;
+#if 0
//int width0 = lrintf(848 * (1.0 + 0.2 * sin(frame * 0.02)));
int width0 = 848;
int height0 = lrintf(width0 * 9.0 / 16.0);
right1 = right1 * scale0 + tx0;
}
-#if 0
place_rectangle(resample_effect, padding_effect, left0, top0, right0, bottom0);
place_rectangle(resample2_effect, padding2_effect, left1, top1, right1, bottom1);
#endif
mixer_thread.join();
}
-void Mixer::cut(Source source)
+void Mixer::transition_clicked(int transition_num, float t)
{
- current_source = source;
+ theme->transition_clicked(transition_num, t);
}
void Mixer::OutputChannel::output_frame(DisplayFrame frame)
void start();
void quit();
- enum Source {
- SOURCE_INPUT1,
- SOURCE_INPUT2,
- SOURCE_SBS,
- };
- void cut(Source source);
+ void transition_clicked(int transition_num, float t);
enum Output {
OUTPUT_LIVE = 0,
// Effects part of <display_chain>. Owned by <display_chain>.
movit::FlatInput *display_input;
- Source current_source = SOURCE_INPUT1;
int frame = 0;
std::mutex bmusb_mutex;
input->set_texture_num(0, input_textures[signal_num].tex_y);
input->set_texture_num(1, input_textures[signal_num].tex_cbcr);
}
+
+void Theme::transition_clicked(int transition_num, float t)
+{
+ unique_lock<mutex> lock(m);
+ lua_getglobal(L, "transition_clicked");
+ lua_pushnumber(L, transition_num);
+ lua_pushnumber(L, t);
+
+ if (lua_pcall(L, 2, 0, 0) != 0) {
+ fprintf(stderr, "error running function `transition_clicked': %s", lua_tostring(L, -1));
+ exit(1);
+ }
+}
}
void connect_signal(movit::YCbCrInput *input, int signal_num);
+ void transition_clicked(int transition_num, float t);
private:
std::mutex m;
-- C++ side and you generally just build chains.
io.write("hello from lua\n");
+local live_signal_num = 0;
+local preview_signal_num = 1;
+
-- The main live chain. Currently just about input 0 with some color correction.
local main_chain = EffectChain.new(16, 9);
local input0 = main_chain:add_live_input();
input0:connect_signal(0);
local wb_effect = main_chain:add_effect(WhiteBalanceEffect.new(), input0);
-wb_effect:set_float("output_color_temperature", 1234.0);
main_chain:finalize(true);
-- local input1 = main_chain.add_input(Inputs.create(1));
-- local resample_effect = main_chain.add_effect(ResampleEffect.new(), input0);
end
function transition_clicked(num, t)
- -- Presumably do some sort of transition here.
- io.write("STUB: transition_clicked\n");
+ -- Only a cut for now.
+ local temp = live_signal_num;
+ live_signal_num = preview_signal_num;
+ preview_signal_num = temp;
end
function channel_clicked(num, t)
function get_chain(num, t, width, height)
if num == 0 then -- Live.
prepare = function()
- input0:connect_signal(1);
+ input0:connect_signal(live_signal_num);
wb_effect:set_float("output_color_temperature", 3500.0 + t * 100.0);
end
return main_chain, prepare;
end
if num == 1 then -- Preview.
prepare = function()
- simple_chain_input:connect_signal(0);
+ simple_chain_input:connect_signal(preview_signal_num);
end
return simple_chain, prepare;
end