]> git.sesse.net Git - nageru/blobdiff - futatabi/ycbcr_converter.cpp
Make the MIDI play button blinking when something is ready to play, and solid when...
[nageru] / futatabi / ycbcr_converter.cpp
index 694ba97eb06531fc4b6d882df93f9aa06d4b4c0f..ef402a57d3926a974317db8e3b0bb52faafc1f7a 100644 (file)
@@ -1,5 +1,6 @@
 #include "ycbcr_converter.h"
 
+#include "flags.h"
 #include "jpeg_frame.h"
 
 #include <movit/mix_effect.h>
@@ -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> frame, sha
        return fade_chain.chain.get();
 }
 
-EffectChain *YCbCrConverter::prepare_chain_for_fade_from_texture(GLuint tex, std::shared_ptr<Frame> secondary_frame, float fade_alpha)
+EffectChain *YCbCrConverter::prepare_chain_for_fade_from_texture(GLuint tex, unsigned width, unsigned height, std::shared_ptr<Frame> 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);