r602: Fix baver's code... don't insert timecode when show_tc is not set
[cinelerra_cv/mob.git] / cinelerra / commonrender.h
blobbea8fef7ba8f51d725e52582a71803542a347695
1 #ifndef COMMONRENDER_H
2 #define COMMONRENDER_H
4 #include "cache.inc"
5 #include "condition.inc"
6 #include "virtualconsole.inc"
7 #include "module.inc"
8 #include "mwindow.inc"
9 #include "renderengine.inc"
10 #include "thread.h"
11 #include "track.inc"
13 #include <stdint.h>
15 class CommonRender : public Thread
17 public:
18 CommonRender(RenderEngine *renderengine);
19 virtual ~CommonRender();
21 virtual void arm_command();
22 virtual int get_total_tracks() { return 0; };
23 virtual Module* new_module(Track *track) { return 0; };
24 void delete_vconsole();
25 void create_modules();
26 void reset_parameters();
27 // Build the virtual console at the current position
28 virtual void build_virtual_console();
29 virtual VirtualConsole* new_vconsole_object() { return 0; };
30 virtual void init_output_buffers() {};
31 void start_plugins();
32 int test_reconfigure(int64_t position, int64_t &length);
34 void evaluate_current_position();
35 void start_command();
36 virtual int restart_playback();
37 virtual void run();
39 RenderEngine *renderengine;
40 // Virtual console
41 VirtualConsole *vconsole;
42 // Native units position in project used for all functions
43 int64_t current_position;
44 Condition *start_lock;
45 // flag for normally completed playback
46 int done;
47 // Flag for interrupted playback
48 int interrupt;
49 // flag for last buffer to be played back
50 int last_playback;
51 // if this media type is being rendered asynchronously by threads
52 int asynchronous;
53 // Module for every track to dispatch plugins in whether the track is
54 // playable or not.
55 // Maintain module structures here instead of reusing the EDL so
56 // plugins persist if the EDL is replaced.
57 // Modules can persist after vconsole is restarted.
58 int total_modules;
59 Module **modules;
60 int data_type;
61 // If a VirtualConsole was created need to start plugins
62 int restart_plugins;
71 CommonRender(MWindow *mwindow, RenderEngine *renderengine);
73 // clean up rendering
74 int virtual stop_rendering() {};
75 int wait_for_completion();
76 virtual int wait_device_completion() {};
77 // renders to a device when there's a device
78 virtual int process_buffer(int64_t input_len, int64_t input_position) {};
80 virtual int get_datatype() {};
81 // test region against loop boundaries
82 int get_boundaries(int64_t &current_render_length);
83 // test region for playback automation changes
84 int get_automation(int64_t &current_render_length, int data_type);
85 // advance the buffer position depending on the loop status
86 int advance_position(int64_t current_render_length);
88 // convert to and from the native units of the render engine
89 virtual int64_t tounits(double position, int round);
90 virtual double fromunits(int64_t position);
91 virtual int64_t get_render_length(int64_t current_render_length) {};
93 MWindow *mwindow;
95 int64_t input_length; // frames/samples to read from disk at a time
97 protected:
98 // make sure automation agrees with playable tracks
99 // automatically tests direction of playback
100 // return 1 if it doesn't
101 int test_automation_before(int64_t &current_render_length, int data_type);
102 int test_automation_after(int64_t &current_render_length, int data_type);
106 #endif