4 * Copyright (C) 2008-2015 Adam Williams <broadcast at earthling dot net>
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
26 #include "autoconf.inc"
27 #include "bcwindowbase.inc"
30 #include "filexml.inc"
31 #include "maxchannels.h"
32 #include "playbackconfig.inc"
33 #include "recordconfig.inc"
36 // Session shared between all clips
45 int load_xml(FileXML *xml, int append_mode, uint32_t load_flags);
46 int save_xml(FileXML *xml);
47 int copy(EDLSession *session);
48 int load_audio_config(FileXML *file, int append_mode, uint32_t load_flags);
49 int save_audio_config(FileXML *xml);
50 int load_video_config(FileXML *file, int append_mode, uint32_t load_flags);
51 int save_video_config(FileXML *xml);
52 int load_defaults(BC_Hash *defaults);
53 int save_defaults(BC_Hash *defaults);
56 // PlaybackConfig* get_playback_config(int strategy, int head);
57 // ArrayList<PlaybackConfig*>* get_playback_config(int strategy);
58 // int get_playback_heads(int strategy);
60 // Called by PreferencesThread to determine if preference changes need to be
62 int need_rerender(EDLSession *ptr);
63 // Called by BRender to determine if any background rendered frames are valid.
64 void equivalent_output(EDLSession *session, double *result);
68 int achannel_positions[MAXCHANNELS];
71 // AWindow column widths
72 int asset_columns[ASSET_COLUMNS];
74 // Aspect ratio for video
79 // automation follows edits during editing
80 int autos_follow_edits;
81 // Generate keyframes for every tweek
83 // use spanning parameter update
85 // Where to do background rendering
88 // Length of clipboard if pasting
89 double clipboard_length;
90 // Colormodel for intermediate frames
92 // Interlace Mode for entire project
94 // Coords for cropping operation
95 int crop_x1, crop_x2, crop_y1, crop_y2;
96 // radius of eyedropper
98 float ruler_x1, ruler_y1;
99 float ruler_x2, ruler_y2;
100 // Ruler points relative to the output frame.
101 // Current folder in resource window
103 // align cursor on frame boundaries
104 int cursor_on_frames;
105 // paste keyframes to any track type
106 int typeless_keyframes;
107 // Destination item for CWindow
109 // Current submask being edited in CWindow
111 // Use the cwindow or not
113 // CWindow tool currently selected
114 int cwindow_operation;
115 // Use scrollbars in the CWindow
116 int cwindow_scrollbars;
117 // Scrollbar positions
121 int cwindow_click2play;
122 // CWindow clear color
123 int cwindow_clear_color;
125 char default_atransition[BCTEXTLEN];
126 char default_vtransition[BCTEXTLEN];
128 double default_transition_length;
129 // Edit mode to use for each mouse button
130 int edit_handle_mode[3];
136 int folderlist_format;
138 float frames_per_foot;
139 // Number of highlighted track
140 int highlighted_track;
141 // Enumeration for how to scale from edl.inc.
142 int interpolation_type;
143 // Whether to interpolate CR2 images
145 // Whether to white balance CR2 images
146 int white_balance_raw;
147 // labels follow edits during editing
148 int labels_follow_edits;
149 int plugins_follow_edits;
150 // For main menu plugin attaching,
151 // // attach 1 standalone on the first track and share it with other tracks
152 int single_standalone;
158 int64_t playback_buffer;
159 int playback_cursor_visible;
160 int64_t playback_preload;
161 int decode_subtitles;
165 int playback_software_position;
166 // current settings are scaled this much from the original settings
168 // original proxy_scale when proxy_enable disables/enables proxy
169 int proxy_disabled_scale;
170 // upscale geom from proxy to session on read in
171 int proxy_use_scaler;
172 // automatically rescale assets when loaded
173 int proxy_auto_scale;
174 // beep gain when proxy/render done
175 float proxy_beep, render_beep;
176 // int playback_strategy;
177 // Play audio in realtime priority
178 int real_time_playback;
179 int real_time_record;
180 // Use record positioning selection
181 int record_positioning;
182 // Record undecoded stream data
183 int record_raw_stream;
184 // Sync the drives during recording
185 int record_sync_drives;
186 // Speed of meters when recording
188 // Samples to read from device at a time
189 int record_fragment_size;
190 // Samples to write to disk at a time
191 int64_t record_write_length;
192 // Realtime TOC generation for DVB mpeg recording
193 int record_realtime_toc;
194 // Show title and action safe regions in CWindow
198 // Load files as a duration
201 // Show assets in track canvas
203 // Show titles in resources
206 // Test for data before rendering a track
207 int test_playback_edits;
208 // Format to display times in
210 // Offset for timecode units
211 double timecode_offset;
212 // Format to display nudge in, either seconds or track units.
214 // Show tool window in CWindow
216 // Location of video outs
217 int vchannel_x[MAXCHANNELS];
218 int vchannel_y[MAXCHANNELS];
221 VideoInConfig *vconfig_in;
222 AudioInConfig *aconfig_in;
223 Asset *recording_format;
225 int video_every_frame;
226 // decode video asynchronously
227 // int video_asynchronous;
229 // number of frames to write to disk at a time during video recording.
230 int video_write_length;
231 int view_follows_playback;
232 // Use the vwindow meter or not
235 int vwindow_click2play;
238 static int current_id;
239 PlaybackConfig* playback_config;
242 // Global playback. This is loaded from defaults but not from XML probably
243 // because it was discovered to be the most convenient.
244 // It is part of the EDL probably because the playback setting was
245 // going to be bound to the EDL.
246 // ArrayList<PlaybackConfig*> playback_config[PLAYBACK_STRATEGIES];