X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=futatabi%2Fycbcr_converter.cpp;h=ef402a57d3926a974317db8e3b0bb52faafc1f7a;hb=fcae09355c1a00a68015b3d727339aebd2e52aa4;hp=694ba97eb06531fc4b6d882df93f9aa06d4b4c0f;hpb=eeda8995329601f9f4e35047358400833eeae68e;p=nageru diff --git a/futatabi/ycbcr_converter.cpp b/futatabi/ycbcr_converter.cpp index 694ba97..ef402a5 100644 --- a/futatabi/ycbcr_converter.cpp +++ b/futatabi/ycbcr_converter.cpp @@ -1,5 +1,6 @@ #include "ycbcr_converter.h" +#include "flags.h" #include "jpeg_frame.h" #include @@ -63,15 +64,15 @@ YCbCrConverter::YCbCrConverter(YCbCrConverter::OutputMode output_mode, ResourceP ycbcr_output_format.chroma_subsampling_x = 1; // Planar Y'CbCr decoding chain. - planar_chain.reset(new EffectChain(1280, 720, resource_pool)); - ycbcr_planar_input = (YCbCrInput *)planar_chain->add_input(new YCbCrInput(inout_format, ycbcr_format, 1280, 720, YCBCR_INPUT_PLANAR)); + planar_chain.reset(new EffectChain(global_flags.width, global_flags.height, resource_pool)); + ycbcr_planar_input = (YCbCrInput *)planar_chain->add_input(new YCbCrInput(inout_format, ycbcr_format, global_flags.width, global_flags.height, YCBCR_INPUT_PLANAR)); setup_outputs(output_mode, inout_format, ycbcr_output_format, planar_chain.get()); planar_chain->set_dither_bits(8); planar_chain->finalize(); // Semiplanar Y'CbCr decoding chain (for images coming from VA-API). - semiplanar_chain.reset(new EffectChain(1280, 720, resource_pool)); - ycbcr_semiplanar_input = (YCbCrInput *)semiplanar_chain->add_input(new YCbCrInput(inout_format, ycbcr_format, 1280, 720, YCBCR_INPUT_SPLIT_Y_AND_CBCR)); + semiplanar_chain.reset(new EffectChain(global_flags.width, global_flags.height, resource_pool)); + ycbcr_semiplanar_input = (YCbCrInput *)semiplanar_chain->add_input(new YCbCrInput(inout_format, ycbcr_format, global_flags.width, global_flags.height, YCBCR_INPUT_SPLIT_Y_AND_CBCR)); setup_outputs(output_mode, inout_format, ycbcr_output_format, semiplanar_chain.get()); semiplanar_chain->set_dither_bits(8); semiplanar_chain->finalize(); @@ -80,13 +81,13 @@ YCbCrConverter::YCbCrConverter(YCbCrConverter::OutputMode output_mode, ResourceP for (bool first_input_is_semiplanar : { false, true }) { for (bool second_input_is_semiplanar : { false, true }) { FadeChain &fade_chain = fade_chains[first_input_is_semiplanar][second_input_is_semiplanar]; - fade_chain.chain.reset(new EffectChain(1280, 720, resource_pool)); + fade_chain.chain.reset(new EffectChain(global_flags.width, global_flags.height, resource_pool)); fade_chain.input[0] = (movit::YCbCrInput *)fade_chain.chain->add_input( - new YCbCrInput(inout_format, ycbcr_format, 1280, 720, - first_input_is_semiplanar ? YCBCR_INPUT_SPLIT_Y_AND_CBCR : YCBCR_INPUT_PLANAR)); + new YCbCrInput(inout_format, ycbcr_format, global_flags.width, global_flags.height, + first_input_is_semiplanar ? YCBCR_INPUT_SPLIT_Y_AND_CBCR : YCBCR_INPUT_PLANAR)); fade_chain.input[1] = (movit::YCbCrInput *)fade_chain.chain->add_input( - new YCbCrInput(inout_format, ycbcr_format, 1280, 720, - second_input_is_semiplanar ? YCBCR_INPUT_SPLIT_Y_AND_CBCR : YCBCR_INPUT_PLANAR)); + new YCbCrInput(inout_format, ycbcr_format, global_flags.width, global_flags.height, + second_input_is_semiplanar ? YCBCR_INPUT_SPLIT_Y_AND_CBCR : YCBCR_INPUT_PLANAR)); fade_chain.mix_effect = (movit::MixEffect *)fade_chain.chain->add_effect( new MixEffect, fade_chain.input[0], fade_chain.input[1]); setup_outputs(output_mode, inout_format, ycbcr_output_format, fade_chain.chain.get()); @@ -99,17 +100,17 @@ YCbCrConverter::YCbCrConverter(YCbCrConverter::OutputMode output_mode, ResourceP // directly from the GPU anyway). for (bool second_input_is_semiplanar : { false, true }) { FadeChain &fade_chain = interleaved_fade_chains[second_input_is_semiplanar]; - fade_chain.chain.reset(new EffectChain(1280, 720, resource_pool)); + fade_chain.chain.reset(new EffectChain(global_flags.width, global_flags.height, resource_pool)); ycbcr_format.chroma_subsampling_x = 1; fade_chain.input[0] = (movit::YCbCrInput *)fade_chain.chain->add_input( - new YCbCrInput(inout_format, ycbcr_format, 1280, 720, - YCBCR_INPUT_INTERLEAVED)); + new YCbCrInput(inout_format, ycbcr_format, global_flags.width, global_flags.height, + YCBCR_INPUT_INTERLEAVED)); ycbcr_format.chroma_subsampling_x = 2; fade_chain.input[1] = (movit::YCbCrInput *)fade_chain.chain->add_input( - new YCbCrInput(inout_format, ycbcr_format, 1280, 720, - second_input_is_semiplanar ? YCBCR_INPUT_SPLIT_Y_AND_CBCR : YCBCR_INPUT_PLANAR)); + new YCbCrInput(inout_format, ycbcr_format, global_flags.width, global_flags.height, + second_input_is_semiplanar ? YCBCR_INPUT_SPLIT_Y_AND_CBCR : YCBCR_INPUT_PLANAR)); fade_chain.mix_effect = (movit::MixEffect *)fade_chain.chain->add_effect( new MixEffect, fade_chain.input[0], fade_chain.input[1]); @@ -141,7 +142,7 @@ EffectChain *YCbCrConverter::prepare_chain_for_fade(shared_ptr frame, sha return fade_chain.chain.get(); } -EffectChain *YCbCrConverter::prepare_chain_for_fade_from_texture(GLuint tex, std::shared_ptr secondary_frame, float fade_alpha) +EffectChain *YCbCrConverter::prepare_chain_for_fade_from_texture(GLuint tex, unsigned width, unsigned height, std::shared_ptr secondary_frame, float fade_alpha) { const FadeChain &fade_chain = interleaved_fade_chains[secondary_frame->is_semiplanar]; { @@ -150,8 +151,8 @@ EffectChain *YCbCrConverter::prepare_chain_for_fade_from_texture(GLuint tex, std format_copy.chroma_subsampling_y = 1; fade_chain.input[0]->change_ycbcr_format(format_copy); - fade_chain.input[0]->set_width(1280); // FIXME - fade_chain.input[0]->set_height(720); + fade_chain.input[0]->set_width(width); // Doesn't really matter. + fade_chain.input[0]->set_height(height); fade_chain.input[0]->set_texture_num(0, tex); glTextureParameteri(tex, GL_TEXTURE_MIN_FILTER, GL_LINEAR);