X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fpluginaclient.C;fp=cinelerra-5.1%2Fcinelerra%2Fpluginaclient.C;h=4e6c5556975375d1be6c1b351b33399210947b87;hb=30bdb85eb33a8ee7ba675038a86c6be59c43d7bd;hp=0000000000000000000000000000000000000000;hpb=52fcc46226f9df46f9ce9d0566dc568455a7db0b;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/pluginaclient.C b/cinelerra-5.1/cinelerra/pluginaclient.C new file mode 100644 index 00000000..4e6c5556 --- /dev/null +++ b/cinelerra-5.1/cinelerra/pluginaclient.C @@ -0,0 +1,231 @@ + +/* + * CINELERRA + * Copyright (C) 2009 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 "edl.h" +#include "edlsession.h" +#include "pluginaclient.h" +#include "pluginserver.h" +#include "samples.h" + +#include + + +PluginAClient::PluginAClient(PluginServer *server) + : PluginClient(server) +{ + sample_rate = 0; + if(server && + server->edl && + server->edl->session) + { + project_sample_rate = server->edl->session->sample_rate; + sample_rate = project_sample_rate; + } + else + { + project_sample_rate = 1; + sample_rate = 1; + } +} + +PluginAClient::~PluginAClient() +{ +} + +int PluginAClient::is_audio() +{ + return 1; +} + + +int PluginAClient::get_render_ptrs() +{ + int i, double_buffer, fragment_position; + + for(i = 0; i < total_in_buffers; i++) + { + double_buffer = double_buffer_in_render.values[i]; + fragment_position = offset_in_render.values[i]; + input_ptr_render[i] = &input_ptr_master.values[i][double_buffer][fragment_position]; +//printf("PluginAClient::get_render_ptrs %x\n", input_ptr_master.values[i][double_buffer]); + } + + for(i = 0; i < total_out_buffers; i++) + { + double_buffer = double_buffer_out_render.values[i]; + fragment_position = offset_out_render.values[i]; + output_ptr_render[i] = &output_ptr_master.values[i][double_buffer][fragment_position]; + } +//printf("PluginAClient::get_render_ptrs %x %x\n", input_ptr_render[0], output_ptr_render[0]); + return 0; +} + +int PluginAClient::init_realtime_parameters() +{ + project_sample_rate = server->edl->session->sample_rate; + return 0; +} + +int PluginAClient::process_realtime(int64_t size, + Samples **input_ptr, + Samples **output_ptr) +{ + return 0; +} + +int PluginAClient::process_realtime(int64_t size, + Samples *input_ptr, + Samples *output_ptr) +{ + return 0; +} + +int PluginAClient::process_buffer(int64_t size, + Samples **buffer, + int64_t start_position, + int sample_rate) +{ + for(int i = 0; i < PluginClient::total_in_buffers; i++) + read_samples(buffer[i], + i, + sample_rate, + source_position, + size); + process_realtime(size, buffer, buffer); + return 0; +} + +int PluginAClient::process_buffer(int64_t size, + Samples *buffer, + int64_t start_position, + int sample_rate) +{ + read_samples(buffer, + 0, + sample_rate, + source_position, + size); + process_realtime(size, buffer, buffer); + return 0; +} + + + + +int PluginAClient::plugin_start_loop(int64_t start, + int64_t end, + int64_t buffer_size, + int total_buffers) +{ + sample_rate = get_project_samplerate(); + return PluginClient::plugin_start_loop(start, + end, + buffer_size, + total_buffers); +} + +int PluginAClient::plugin_get_parameters() +{ + sample_rate = get_project_samplerate(); + return PluginClient::plugin_get_parameters(); +} + + +int64_t PluginAClient::local_to_edl(int64_t position) +{ + if(position < 0) return position; + return (int64_t)(position * + get_project_samplerate() / + sample_rate); + return 0; +} + +int64_t PluginAClient::edl_to_local(int64_t position) +{ + if(position < 0) return position; + return (int64_t)(position * + sample_rate / + get_project_samplerate()); +} + + +int PluginAClient::plugin_process_loop(Samples **buffers, int64_t &write_length) +{ + write_length = 0; + + if(is_multichannel()) + return process_loop(buffers, write_length); + else + return process_loop(buffers[0], write_length); +} + +int PluginAClient::read_samples(Samples *buffer, + int channel, + int64_t start_position, + int64_t total_samples) +{ + return server->read_samples(buffer, + channel, + start_position, + total_samples); +} + +int PluginAClient::read_samples(Samples *buffer, + int64_t start_position, + int64_t total_samples) +{ + return server->read_samples(buffer, + 0, + start_position, + total_samples); +} + +int PluginAClient::read_samples(Samples *buffer, + int channel, + int sample_rate, + int64_t start_position, + int64_t len) +{ + return server->read_samples(buffer, + channel, + sample_rate, + start_position, + len); +} + + + + +int PluginAClient::get_project_samplerate() +{ + return project_sample_rate; +} + +int PluginAClient::get_samplerate() +{ + return sample_rate; +} + + + + + +