--- /dev/null
+
+/*
+ * CINELERRA
+ * Copyright (C) 2009 Adam Williams <broadcast at earthling dot net>
+ *
+ * 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 <string.h>
+
+
+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;
+}
+
+
+
+
+
+