X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;ds=sidebyside;f=cinelerra-5.0%2Fplugins%2Fflip%2Fflip.C;fp=cinelerra-5.0%2Fplugins%2Fflip%2Fflip.C;h=0000000000000000000000000000000000000000;hb=30bdb85eb33a8ee7ba675038a86c6be59c43d7bd;hp=6c27e8ad398d069531c65ed74377a00985b84328;hpb=52fcc46226f9df46f9ce9d0566dc568455a7db0b;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.0/plugins/flip/flip.C b/cinelerra-5.0/plugins/flip/flip.C deleted file mode 100644 index 6c27e8ad..00000000 --- a/cinelerra-5.0/plugins/flip/flip.C +++ /dev/null @@ -1,332 +0,0 @@ - -/* - * CINELERRA - * Copyright (C) 2008 Adam Williams - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ - -#include "clip.h" -#include "bccmodels.h" -#include "bchash.h" -#include "filexml.h" -#include "flip.h" -#include "flipwindow.h" -#include "language.h" - -#include -#include - -REGISTER_PLUGIN(FlipMain) - - - - - - -FlipConfig::FlipConfig() -{ - flip_horizontal = 0; - flip_vertical = 0; -} - -void FlipConfig::copy_from(FlipConfig &that) -{ - flip_horizontal = that.flip_horizontal; - flip_vertical = that.flip_vertical; -} - -int FlipConfig::equivalent(FlipConfig &that) -{ - return flip_horizontal == that.flip_horizontal && - flip_vertical == that.flip_vertical; -} - -void FlipConfig::interpolate(FlipConfig &prev, - FlipConfig &next, - long prev_frame, - long next_frame, - long current_frame) -{ - this->flip_horizontal = prev.flip_horizontal; - this->flip_vertical = prev.flip_vertical; -} - - - - - - - - - - -FlipMain::FlipMain(PluginServer *server) - : PluginVClient(server) -{ - -} - -FlipMain::~FlipMain() -{ - -} - -const char* FlipMain::plugin_title() { return _("Flip"); } -int FlipMain::is_realtime() { return 1; } - - -#define SWAP_PIXELS(type, components, in, out) \ -{ \ - type temp = in[0]; \ - in[0] = out[0]; \ - out[0] = temp; \ - \ - temp = in[1]; \ - in[1] = out[1]; \ - out[1] = temp; \ - \ - temp = in[2]; \ - in[2] = out[2]; \ - out[2] = temp; \ - \ - if(components == 4) \ - { \ - temp = in[3]; \ - in[3] = out[3]; \ - out[3] = temp; \ - } \ -} - -#define FLIP_MACRO(type, components) \ -{ \ - type **input_rows, **output_rows; \ - type *input_row, *output_row; \ - input_rows = ((type**)frame->get_rows()); \ - output_rows = ((type**)frame->get_rows()); \ - \ - if(config.flip_vertical) \ - { \ - for(i = 0, j = h - 1; i < h / 2; i++, j--) \ - { \ - input_row = input_rows[i]; \ - output_row = output_rows[j]; \ - for(k = 0; k < w; k++) \ - { \ - SWAP_PIXELS(type, components, output_row, input_row); \ - output_row += components; \ - input_row += components; \ - } \ - } \ - } \ - \ - if(config.flip_horizontal) \ - { \ - for(i = 0; i < h; i++) \ - { \ - input_row = input_rows[i]; \ - output_row = output_rows[i] + (w - 1) * components; \ - for(k = 0; k < w / 2; k++) \ - { \ - SWAP_PIXELS(type, components, output_row, input_row); \ - input_row += components; \ - output_row -= components; \ - } \ - } \ - } \ -} - -int FlipMain::process_buffer(VFrame *frame, - int64_t start_position, - double frame_rate) -{ - int i, j, k; - int w = frame->get_w(); - int h = frame->get_h(); - int colormodel = frame->get_color_model(); - - load_configuration(); - - read_frame(frame, - 0, - get_source_position(), - get_framerate(), - get_use_opengl()); - - - - if(get_use_opengl()) - { - if(config.flip_vertical || config.flip_horizontal) - return run_opengl(); - else - return 0; - } - - switch(colormodel) - { - case BC_RGB888: - case BC_YUV888: - FLIP_MACRO(unsigned char, 3); - break; - case BC_RGB_FLOAT: - FLIP_MACRO(float, 3); - break; - case BC_RGB161616: - case BC_YUV161616: - FLIP_MACRO(uint16_t, 3); - break; - case BC_RGBA8888: - case BC_YUVA8888: - FLIP_MACRO(unsigned char, 4); - break; - case BC_RGBA_FLOAT: - FLIP_MACRO(float, 4); - break; - case BC_RGBA16161616: - case BC_YUVA16161616: - FLIP_MACRO(uint16_t, 4); - break; - } - return 0; -} - - -NEW_WINDOW_MACRO(FlipMain, FlipWindow) -LOAD_CONFIGURATION_MACRO(FlipMain, FlipConfig) - -void FlipMain::update_gui() -{ - if(thread) - { - load_configuration(); - thread->window->lock_window(); - ((FlipWindow*)thread->window)->flip_vertical->update((int)config.flip_vertical); - ((FlipWindow*)thread->window)->flip_horizontal->update((int)config.flip_horizontal); - thread->window->unlock_window(); - } -} - -void FlipMain::save_data(KeyFrame *keyframe) -{ - FileXML output; - -// cause data to be stored directly in text - output.set_shared_output(keyframe->get_data(), MESSAGESIZE); - output.tag.set_title("FLIP"); - output.append_tag(); - if(config.flip_vertical) - { - output.tag.set_title("VERTICAL"); - output.append_tag(); - output.tag.set_title("/VERTICAL"); - output.append_tag(); - } - - if(config.flip_horizontal) - { - output.tag.set_title("HORIZONTAL"); - output.append_tag(); - output.tag.set_title("/HORIZONTAL"); - output.append_tag(); - } - output.tag.set_title("/FLIP"); - output.append_tag(); - output.append_newline(); - output.terminate_string(); -// data is now in *text -} - -void FlipMain::read_data(KeyFrame *keyframe) -{ - FileXML input; - - input.set_shared_input(keyframe->get_data(), strlen(keyframe->get_data())); - - int result = 0; - config.flip_vertical = config.flip_horizontal = 0; - - while(!result) - { - result = input.read_tag(); - - if(!result) - { - if(input.tag.title_is("VERTICAL")) - { - config.flip_vertical = 1; - } - else - if(input.tag.title_is("HORIZONTAL")) - { - config.flip_horizontal = 1; - } - } - } -} - - -int FlipMain::handle_opengl() -{ -#ifdef HAVE_GL - get_output()->to_texture(); - get_output()->enable_opengl(); - get_output()->init_screen(); - get_output()->bind_texture(0); - - if(config.flip_vertical && !config.flip_horizontal) - { - get_output()->draw_texture(0, - 0, - get_output()->get_w(), - get_output()->get_h(), - 0, - get_output()->get_h(), - get_output()->get_w(), - 0); - } - - if(config.flip_horizontal && !config.flip_vertical) - { - get_output()->draw_texture(0, - 0, - get_output()->get_w(), - get_output()->get_h(), - get_output()->get_w(), - 0, - 0, - get_output()->get_h()); - } - - if(config.flip_vertical && config.flip_horizontal) - { - get_output()->draw_texture(0, - 0, - get_output()->get_w(), - get_output()->get_h(), - get_output()->get_w(), - get_output()->get_h(), - 0, - 0); - } - - get_output()->set_opengl_state(VFrame::SCREEN); -#endif - return 0; -} - - -