X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=nageru%2Fscene.cpp;h=74d0e9e1b271e15b3b3aae5899f997c9e004ebd1;hb=f81ae3be1aae619fe4ad022f55d95a4a83ace076;hp=a44c9a856316d2cf1f3296365b69862498a4e188;hpb=5225e714d1c55d2afde256acaf607d53ea21723b;p=nageru diff --git a/nageru/scene.cpp b/nageru/scene.cpp index a44c9a8..74d0e9e 100644 --- a/nageru/scene.cpp +++ b/nageru/scene.cpp @@ -1,8 +1,22 @@ +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include extern "C" { #include -#include } +#include #ifdef HAVE_CEF #include "cef_capture.h" @@ -209,6 +223,11 @@ int Scene::add_input(lua_State* L) if (lua_isnumber(L, 2)) { block->alternatives.emplace_back(new EffectBlueprint(LIVE_INPUT_YCBCR)); block->alternatives.emplace_back(new EffectBlueprint(LIVE_INPUT_YCBCR_WITH_DEINTERLACE)); +#ifdef HAVE_SRT + if (global_flags.srt_port >= 0) { + block->alternatives.emplace_back(new EffectBlueprint(LIVE_INPUT_YCBCR_PLANAR)); + } +#endif #ifdef HAVE_CEF } else if (luaL_testudata(L, 2, "HTMLInput")) { block->alternatives.emplace_back(new EffectBlueprint(LIVE_INPUT_BGRA)); @@ -417,7 +436,7 @@ Effect *Scene::instantiate_effects(const Block *block, size_t chain_idx, Scene:: pixel_format = bmusb::PixelFormat_8BitBGRA; } else if (chosen_type == LIVE_INPUT_YCBCR_PLANAR) { pixel_format = bmusb::PixelFormat_8BitYCbCrPlanar; - } else if (global_flags.ten_bit_input) { + } else if (global_flags.bit_depth > 8) { pixel_format = bmusb::PixelFormat_10BitYCbCr; } else { pixel_format = bmusb::PixelFormat_8BitYCbCr; @@ -470,7 +489,7 @@ int Scene::finalize(lua_State* L) } } const size_t total_cardinality = real_cardinality * (only_one_mode ? 1 : 2); - if (total_cardinality > 200) { + if (total_cardinality > 400) { print_warning(L, "The given Scene will instantiate %zu different versions. This will take a lot of time and RAM to compile; see if you could limit some options by e.g. locking the input type in some cases (by giving a fixed input to add_input()).\n", total_cardinality); } @@ -521,14 +540,22 @@ Scene::get_chain(Theme *theme, lua_State *L, unsigned num, const InputState &inp InputStateInfo info(input_state); for (Block *block : blocks) { if (block->is_input && block->signal_type_to_connect == Block::CONNECT_SIGNAL) { - EffectType chosen_type = current_type(block); - assert(chosen_type == LIVE_INPUT_YCBCR || chosen_type == LIVE_INPUT_YCBCR_WITH_DEINTERLACE); int card_index = theme->map_signal_to_card(block->signal_to_connect); if (info.last_interlaced[card_index]) { + assert(info.last_pixel_format[card_index] == bmusb::PixelFormat_8BitYCbCr || + info.last_pixel_format[card_index] == bmusb::PixelFormat_10BitYCbCr); block->currently_chosen_alternative = find_index_of(block, LIVE_INPUT_YCBCR_WITH_DEINTERLACE); + } else if (info.last_pixel_format[card_index] == bmusb::PixelFormat_8BitYCbCrPlanar) { + block->currently_chosen_alternative = find_index_of(block, LIVE_INPUT_YCBCR_PLANAR); + } else if (info.last_pixel_format[card_index] == bmusb::PixelFormat_8BitBGRA) { + block->currently_chosen_alternative = find_index_of(block, LIVE_INPUT_BGRA); } else { block->currently_chosen_alternative = find_index_of(block, LIVE_INPUT_YCBCR); } + if (block->currently_chosen_alternative == -1) { + fprintf(stderr, "ERROR: Input connected to a video card pixel format that it was not ready for.\n"); + abort(); + } } }