summaryrefslogtreecommitdiff
path: root/libs/ardour/ardour/process_thread.h
blob: d6bbbfc6fc76a6b8bb46f824d8e3718c1b6aecde (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#ifndef __libardour_process_thread__
#define __libardour_process_thread__

#include <glibmm/thread.h>

#include "ardour/chan_count.h"
#include "ardour/types.h"

namespace ARDOUR {

class ThreadBuffers;

class ProcessThread
{
  public:
    ProcessThread ();
    ~ProcessThread ();

    static void init();

    void get_buffers ();
    void drop_buffers ();

    /* these MUST be called by a process thread's thread, nothing else
     */

    static BufferSet& get_silent_buffers (ChanCount count = ChanCount::ZERO);
    static BufferSet& get_scratch_buffers (ChanCount count = ChanCount::ZERO);
    static BufferSet& get_mix_buffers (ChanCount count = ChanCount::ZERO);
    static gain_t* gain_automation_buffer ();
    static pan_t** pan_automation_buffer ();

  protected:
    void session_going_away ();

  private:
    Glib::Thread* _thread;

    static Glib::Private<ThreadBuffers>* _private_thread_buffers;
};

} // namespace

#endif /* __libardour_process_thread__ */