X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=theme.cpp;h=9e04740d60b3636a636bf1460a4bfd4afb9e3a0a;hb=ba2dc655c098912b8860676596fe89c1305affe9;hp=0cc498e8ba0a4297be74bb320440f6c75cba2f7f;hpb=960b096ad2763e4296b9392e634bb6ab4896032f;p=nageru diff --git a/theme.cpp b/theme.cpp index 0cc498e..9e04740 100644 --- a/theme.cpp +++ b/theme.cpp @@ -202,7 +202,8 @@ int EffectChain_add_live_input(lua_State* L) EffectChain *chain = (EffectChain *)luaL_checkudata(L, 1, "EffectChain"); bool override_bounce = checkbool(L, 2); bool deinterlace = checkbool(L, 3); - return wrap_lua_object(L, "LiveInputWrapper", theme, chain, override_bounce, deinterlace); + bmusb::PixelFormat pixel_format = global_flags.ten_bit_input ? bmusb::PixelFormat_10BitYCbCr : bmusb::PixelFormat_8BitYCbCr; + return wrap_lua_object(L, "LiveInputWrapper", theme, chain, pixel_format, override_bounce, deinterlace); } int EffectChain_add_effect(lua_State* L) @@ -595,8 +596,9 @@ const luaL_Reg InputStateInfo_funcs[] = { } // namespace -LiveInputWrapper::LiveInputWrapper(Theme *theme, EffectChain *chain, bool override_bounce, bool deinterlace) +LiveInputWrapper::LiveInputWrapper(Theme *theme, EffectChain *chain, bmusb::PixelFormat pixel_format, bool override_bounce, bool deinterlace) : theme(theme), + pixel_format(pixel_format), deinterlace(deinterlace) { ImageFormat inout_format; @@ -616,9 +618,9 @@ LiveInputWrapper::LiveInputWrapper(Theme *theme, EffectChain *chain, bool overri // Perhaps 601 was only to indicate the subsampling positions, not the // colorspace itself? Tested with a Lenovo X1 gen 3 as input. YCbCrFormat input_ycbcr_format; - input_ycbcr_format.chroma_subsampling_x = global_flags.ten_bit_input ? 1 : 2; + input_ycbcr_format.chroma_subsampling_x = (pixel_format == bmusb::PixelFormat_10BitYCbCr) ? 1 : 2; input_ycbcr_format.chroma_subsampling_y = 1; - input_ycbcr_format.num_levels = global_flags.ten_bit_input ? 1024 : 256; + input_ycbcr_format.num_levels = (pixel_format == bmusb::PixelFormat_10BitYCbCr) ? 1024 : 256; input_ycbcr_format.cb_x_position = 0.0; input_ycbcr_format.cr_x_position = 0.0; input_ycbcr_format.cb_y_position = 0.5; @@ -643,7 +645,7 @@ LiveInputWrapper::LiveInputWrapper(Theme *theme, EffectChain *chain, bool overri } for (unsigned i = 0; i < num_inputs; ++i) { // When using 10-bit input, we're converting to interleaved through v210Converter. - YCbCrInputSplitting splitting = global_flags.ten_bit_input ? YCBCR_INPUT_INTERLEAVED : YCBCR_INPUT_SPLIT_Y_AND_CBCR; + YCbCrInputSplitting splitting = (pixel_format == bmusb::PixelFormat_10BitYCbCr) ? YCBCR_INPUT_INTERLEAVED : YCBCR_INPUT_SPLIT_Y_AND_CBCR; if (override_bounce) { inputs.push_back(new NonBouncingYCbCrInput(inout_format, input_ycbcr_format, global_flags.width, global_flags.height, splitting)); } else { @@ -696,7 +698,8 @@ void LiveInputWrapper::connect_signal(int signal_num) userdata = (const PBOFrameAllocator::Userdata *)frame.frame->userdata; } - if (global_flags.ten_bit_input) { + assert(userdata->pixel_format == pixel_format); + if (pixel_format == bmusb::PixelFormat_10BitYCbCr) { inputs[i]->set_texture_num(0, userdata->tex_444[frame.field_number]); } else { inputs[i]->set_texture_num(0, userdata->tex_y[frame.field_number]);