ardour
process_thread.cc
Go to the documentation of this file.
1 /*
2  Copyright (C) 2010 Paul Davis
3 
4  This program is free software; you can redistribute it and/or modify
5  it under the terms of the GNU General Public License as published by
6  the Free Software Foundation; either version 2 of the License, or
7  (at your option) any later version.
8 
9  This program is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  GNU General Public License for more details.
13 
14  You should have received a copy of the GNU General Public License
15  along with this program; if not, write to the Free Software
16  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17 
18 */
19 
20 #include <iostream>
21 
22 #include "ardour/buffer.h"
23 #include "ardour/buffer_manager.h"
24 #include "ardour/buffer_set.h"
25 #include "ardour/process_thread.h"
26 #include "ardour/thread_buffers.h"
27 
28 using namespace ARDOUR;
29 using namespace Glib;
30 using namespace std;
31 
32 static void
34 {
36 }
37 
38 Glib::Threads::Private<ThreadBuffers> ProcessThread::_private_thread_buffers (release_thread_buffer);
39 
40 void
42 {
43 }
44 
46 {
47 }
48 
50 {
51 }
52 
53 void
55 {
57 
58  assert (tb);
59  _private_thread_buffers.set (tb);
60 }
61 
62 void
64 {
65  ThreadBuffers* tb = _private_thread_buffers.get();
66  assert (tb);
68  _private_thread_buffers.set (0);
69 }
70 
71 BufferSet&
73 {
74  ThreadBuffers* tb = _private_thread_buffers.get();
75  assert (tb);
76 
77  BufferSet* sb = tb->silent_buffers;
78  assert (sb);
79 
80  assert(sb->available() >= count);
81  sb->set_count(count);
82 
83  for (DataType::iterator t = DataType::begin(); t != DataType::end(); ++t) {
84  for (size_t i= 0; i < count.get(*t); ++i) {
85  sb->get(*t, i).clear();
86  }
87  }
88 
89  return *sb;
90 }
91 
92 BufferSet&
94 {
95  ThreadBuffers* tb = _private_thread_buffers.get();
96  assert (tb);
97 
98  BufferSet* sb = tb->scratch_buffers;
99  assert (sb);
100 
101  if (count != ChanCount::ZERO) {
102  assert(sb->available() >= count);
103  sb->set_count (count);
104  } else {
105  sb->set_count (sb->available());
106  }
107 
108  if (silence) {
109  for (DataType::iterator t = DataType::begin(); t != DataType::end(); ++t) {
110  for (uint32_t i = 0; i < sb->count().get(*t); ++i) {
111  sb->get(*t, i).clear();
112  }
113  }
114  }
115 
116  return *sb;
117 }
118 
119 BufferSet&
121 {
122  ThreadBuffers* tb = _private_thread_buffers.get();
123  assert (tb);
124 
125  BufferSet* sb = tb->route_buffers;
126  assert (sb);
127 
128  if (count != ChanCount::ZERO) {
129  assert(sb->available() >= count);
130  sb->set_count (count);
131  } else {
132  sb->set_count (sb->available());
133  }
134 
135  if (silence) {
136  for (DataType::iterator t = DataType::begin(); t != DataType::end(); ++t) {
137  for (uint32_t i = 0; i < sb->count().get(*t); ++i) {
138  sb->get(*t, i).clear();
139  }
140  }
141  }
142 
143  return *sb;
144 }
145 
146 BufferSet&
148 {
149  ThreadBuffers* tb = _private_thread_buffers.get();
150  assert (tb);
151 
152  BufferSet* mb = tb->mix_buffers;
153 
154  assert (mb);
155  assert (mb->available() >= count);
156  mb->set_count(count);
157  return *mb;
158 }
159 
160 gain_t*
162 {
163  ThreadBuffers* tb = _private_thread_buffers.get();
164  assert (tb);
165 
167  assert (g);
168  return g;
169 }
170 
171 gain_t*
173 {
174  ThreadBuffers* tb = _private_thread_buffers.get();
175  assert (tb);
176 
178  assert (g);
179  return g;
180 }
181 
182 gain_t*
184 {
185  ThreadBuffers* tb = _private_thread_buffers.get();
186  assert (tb);
187 
189  assert (g);
190  return g;
191 }
192 
193 pan_t**
195 {
196  ThreadBuffers* tb = _private_thread_buffers.get();
197  assert (tb);
198 
199  pan_t** p = tb->pan_automation_buffer;
200  assert (p);
201  return p;
202 }
static BufferSet & get_silent_buffers(ChanCount count=ChanCount::ZERO)
static void release_thread_buffer(void *arg)
void set_count(const ChanCount &count)
Definition: buffer_set.h:93
float pan_t
Definition: types.h:57
BufferSet * route_buffers
Definition: Beats.hpp:239
gain_t * gain_automation_buffer
float gain_t
Definition: types.h:58
static gain_t * send_gain_automation_buffer()
static BufferSet & get_route_buffers(ChanCount count=ChanCount::ZERO, bool silence=false)
Buffer & get(DataType type, size_t i)
Definition: buffer_set.cc:241
static iterator end()
Definition: data_type.h:109
static void put_thread_buffers(ThreadBuffers *)
gain_t * send_gain_automation_buffer
static Glib::Threads::Private< ThreadBuffers > _private_thread_buffers
pan_t ** pan_automation_buffer
Definition: amp.h:29
BufferSet * scratch_buffers
static gain_t * trim_automation_buffer()
gain_t * trim_automation_buffer
uint32_t get(DataType t) const
Definition: chan_count.h:59
static BufferSet & get_mix_buffers(ChanCount count=ChanCount::ZERO)
const ChanCount & count() const
Definition: buffer_set.h:87
virtual void clear()
Definition: buffer.h:70
const ChanCount & available() const
Definition: buffer_set.h:84
static BufferSet & get_scratch_buffers(ChanCount count=ChanCount::ZERO, bool silence=false)
static const ChanCount ZERO
Definition: chan_count.h:149
static ThreadBuffers * get_thread_buffers()
static pan_t ** pan_automation_buffer()
static iterator begin()
Definition: data_type.h:108
static gain_t * gain_automation_buffer()
BufferSet * silent_buffers