prevent popup deactivation while button_down
[goodguy/history.git] / cinelerra-5.0 / cinelerra / recordconfig.C
1
2 /*
3  * CINELERRA
4  * Copyright (C) 2008 Adam Williams <broadcast at earthling dot net>
5  * 
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.
10  * 
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.
15  * 
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
19  * 
20  */
21
22 #include "audiodevice.inc"
23 #include "bchash.h"
24 #include "playbackconfig.h"
25 #include "recordconfig.h"
26 #include "videodevice.inc"
27 #include <string.h>
28
29
30
31
32
33 AudioInConfig::AudioInConfig()
34 {
35         driver = AUDIO_ALSA;
36         for(int i = 0; i < MAXDEVICES; i++)
37         {
38                 oss_enable[i] = (i == 0);
39                 sprintf(oss_in_device[i], "/dev/dsp");
40         }
41         oss_in_bits = 16;
42         firewire_port = 0;
43         firewire_channel = 63;
44         strcpy(firewire_path, "/dev/raw1394");
45         esound_in_server[0] = 0;
46         esound_in_port = 0;
47
48         sprintf(alsa_in_device, "default");
49         alsa_in_bits = 16;
50         in_samplerate = 48000;
51         strcpy(dvb_in_adapter,"/dev/dvb/adapter0");
52         dvb_in_device = 0;
53         dvb_in_bits = 16;
54         v4l2_in_bits = 16;
55         channels = 2;
56         follow_audio = 0;
57         map51_2 = 0;
58         rec_gain = 1.0;
59 }
60
61 AudioInConfig::~AudioInConfig()
62 {
63 }
64
65 int AudioInConfig::is_duplex(AudioInConfig *in, AudioOutConfig *out)
66 {
67         if(in->driver == out->driver)
68         {
69                 switch(in->driver)
70                 {
71                         case AUDIO_OSS:
72                         case AUDIO_OSS_ENVY24:
73                                 return (!strcmp(in->oss_in_device[0], out->oss_out_device[0]) &&
74                                         in->oss_in_bits == out->oss_out_bits);
75                                 break;
76
77 // ALSA always opens 2 devices
78                         case AUDIO_ALSA:
79                                 return 0;
80                                 break;
81                 }
82         }
83
84         return 0;
85 }
86
87
88 void AudioInConfig::copy_from(AudioInConfig *src)
89 {
90         driver = src->driver;
91
92         firewire_port = src->firewire_port;
93         firewire_channel = src->firewire_channel;
94         strcpy(firewire_path, src->firewire_path);
95
96         strcpy(esound_in_server, src->esound_in_server);
97         esound_in_port = src->esound_in_port;
98
99         for(int i = 0; i < MAXDEVICES; i++)
100         {
101                 oss_enable[i] = src->oss_enable[i];
102                 strcpy(oss_in_device[i], src->oss_in_device[i]);
103                 oss_in_bits = src->oss_in_bits;
104         }
105
106         strcpy(alsa_in_device, src->alsa_in_device);
107         alsa_in_bits = src->alsa_in_bits;
108         in_samplerate = src->in_samplerate;
109         strcpy(dvb_in_adapter, src->dvb_in_adapter);
110         dvb_in_device = src->dvb_in_device;
111         dvb_in_bits = src->dvb_in_bits;
112         v4l2_in_bits = src->v4l2_in_bits;
113         channels = src->channels;
114         follow_audio = src->follow_audio;
115         map51_2 = src->map51_2;
116         rec_gain = src->rec_gain;
117 }
118
119 AudioInConfig& AudioInConfig::operator=(AudioInConfig &that)
120 {
121         copy_from(&that);
122         return *this;
123 }
124
125 int AudioInConfig::load_defaults(BC_Hash *defaults)
126 {
127         driver = defaults->get("R_AUDIOINDRIVER", driver);
128         firewire_port = defaults->get("R_AFIREWIRE_IN_PORT", firewire_port);
129         firewire_channel = defaults->get("R_AFIREWIRE_IN_CHANNEL", firewire_channel);
130         defaults->get("R_AFIREWIRE_IN_PATH", firewire_path);
131         for(int i = 0; i < MAXDEVICES; i++)
132         {
133                 oss_enable[i] = defaults->getf(oss_enable[i], "R_OSS_ENABLE_%d", i);
134                 defaults->getf(oss_in_device[i], "R_OSS_IN_DEVICE_%d", i);
135         }
136         oss_in_bits = defaults->get("R_OSS_IN_BITS", oss_in_bits);
137         defaults->get("R_ESOUND_IN_SERVER", esound_in_server);
138         esound_in_port = defaults->get("R_ESOUND_IN_PORT", esound_in_port);
139
140         defaults->get("R_ALSA_IN_DEVICE", alsa_in_device);
141         alsa_in_bits = defaults->get("R_ALSA_IN_BITS", alsa_in_bits);
142         in_samplerate = defaults->get("R_IN_SAMPLERATE", in_samplerate);
143         defaults->get("R_AUDIO_DVB_IN_ADAPTER", dvb_in_adapter);
144         dvb_in_device = defaults->get("R_AUDIO_DVB_IN_DEVICE", dvb_in_device);
145         dvb_in_bits = defaults->get("R_DVB_IN_BITS", dvb_in_bits);
146         v4l2_in_bits = defaults->get("R_V4L2_IN_BITS", v4l2_in_bits);
147         channels = defaults->get("R_IN_CHANNELS", channels);
148         follow_audio = defaults->get("R_FOLLOW_AUDIO", follow_audio);
149         map51_2 = defaults->get("R_AUDIO_IN_MAP51_2", map51_2);
150         rec_gain = defaults->get("R_AUDIO_IN_GAIN", rec_gain);
151         return 0;
152 }
153
154 int AudioInConfig::save_defaults(BC_Hash *defaults)
155 {
156         defaults->update("R_AUDIOINDRIVER", driver);
157         defaults->update("R_AFIREWIRE_IN_PORT", firewire_port);
158         defaults->update("R_AFIREWIRE_IN_CHANNEL", firewire_channel);
159         defaults->update("R_AFIREWIRE_IN_PATH", firewire_path);
160
161         for(int i = 0; i < MAXDEVICES; i++)
162         {
163                 defaults->updatef(oss_enable[i], "R_OSS_ENABLE_%d", i);
164                 defaults->updatef(oss_in_device[i], "R_OSS_IN_DEVICE_%d", i);
165         }
166
167         defaults->update("R_OSS_IN_BITS", oss_in_bits);
168         defaults->update("R_ESOUND_IN_SERVER", esound_in_server);
169         defaults->update("R_ESOUND_IN_PORT", esound_in_port);
170
171         defaults->update("R_ALSA_IN_DEVICE", alsa_in_device);
172         defaults->update("R_ALSA_IN_BITS", alsa_in_bits);
173         defaults->update("R_IN_SAMPLERATE", in_samplerate);
174         defaults->update("R_AUDIO_DVB_IN_ADAPTER", dvb_in_adapter);
175         defaults->update("R_AUDIO_DVB_IN_DEVICE", dvb_in_device);
176         defaults->update("R_DVB_IN_BITS", dvb_in_bits);
177         defaults->update("R_V4L2_IN_BITS", v4l2_in_bits);
178         defaults->update("R_IN_CHANNELS", channels);
179         defaults->update("R_FOLLOW_AUDIO", follow_audio);
180         defaults->update("R_AUDIO_IN_MAP51_2", map51_2);
181         defaults->update("R_AUDIO_IN_GAIN", rec_gain);
182         return 0;
183 }
184
185
186
187
188
189
190 VideoInConfig::VideoInConfig()
191 {
192         driver = VIDEO4LINUX;
193         sprintf(v4l_in_device, "%s", "/dev/video0");
194         sprintf(v4l2_in_device, "%s", "/dev/video0");
195         sprintf(v4l2jpeg_in_device, "%s", "/dev/video0");
196         v4l2jpeg_in_fields = 2;
197         sprintf(v4l2mpeg_in_device, "%s", "/dev/video0");
198         sprintf(lml_in_device, "%s", "/dev/mvideo/stream");
199         sprintf(buz_in_device, "%s", "/dev/video0");
200         strcpy(dvb_in_adapter, "/dev/dvb/adapter0");
201         dvb_in_device = 0;
202         sprintf(screencapture_display, "%s", "");
203         firewire_port = 0;
204         firewire_channel = 63;
205         sprintf(firewire_path, "/dev/raw1394");
206 // number of frames to read from device during video recording.
207 //      capture_length = 15;   
208         capture_length = 2;   
209         w = 720;
210         h = 480;
211         in_framerate = 29.97;
212         follow_video = 0;
213 }
214
215 VideoInConfig::~VideoInConfig()
216 {
217 }
218
219 char* VideoInConfig::get_path()
220 {
221         switch(driver) {
222         case VIDEO4LINUX: return v4l_in_device;
223         case CAPTURE_JPEG_WEBCAM:
224         case CAPTURE_YUYV_WEBCAM:
225         case VIDEO4LINUX2: return v4l2_in_device;
226         case VIDEO4LINUX2JPEG: return v4l2jpeg_in_device;
227         case VIDEO4LINUX2MPEG: return v4l2mpeg_in_device;
228         case CAPTURE_BUZ: return buz_in_device;
229         case CAPTURE_DVB: return dvb_in_adapter;
230         }
231         return v4l_in_device;
232 }
233
234 void VideoInConfig::copy_from(VideoInConfig *src)
235 {
236         driver = src->driver;
237         strcpy(v4l_in_device, src->v4l_in_device);
238         strcpy(v4l2_in_device, src->v4l2_in_device);
239         v4l2jpeg_in_fields = src->v4l2jpeg_in_fields;
240         strcpy(v4l2jpeg_in_device, src->v4l2jpeg_in_device);
241         strcpy(v4l2mpeg_in_device, src->v4l2mpeg_in_device);
242         strcpy(lml_in_device, src->lml_in_device);
243         strcpy(buz_in_device, src->buz_in_device);
244         strcpy(dvb_in_adapter, src->dvb_in_adapter);
245         dvb_in_device = src->dvb_in_device;
246         strcpy(screencapture_display, src->screencapture_display);
247         firewire_port = src->firewire_port;
248         firewire_channel = src->firewire_channel;
249         strcpy(firewire_path, src->firewire_path);
250         capture_length = src->capture_length;
251         w = src->w;
252         h = src->h;
253         in_framerate = src->in_framerate;
254         follow_video = src->follow_video;
255 }
256
257 VideoInConfig& VideoInConfig::operator=(VideoInConfig &that)
258 {
259         copy_from(&that);
260         return *this;
261 }
262
263 int VideoInConfig::load_defaults(BC_Hash *defaults)
264 {
265         driver = defaults->get("R_VIDEO_IN_DRIVER", driver);
266         defaults->get("R_V4L_IN_DEVICE", v4l_in_device);
267         defaults->get("R_V4L2_IN_DEVICE", v4l2_in_device);
268         defaults->get("R_V4L2JPEG_IN_DEVICE", v4l2jpeg_in_device);
269         v4l2jpeg_in_fields = defaults->get("R_V4L2JPEG_IN_FIELDS", v4l2jpeg_in_fields);
270         defaults->get("R_V4L2MPEG_IN_DEVICE", v4l2mpeg_in_device);
271         defaults->get("R_LML_IN_DEVICE", lml_in_device);
272         defaults->get("R_BUZ_IN_DEVICE", buz_in_device);
273         defaults->get("R_VIDEO_DVB_IN_ADAPTER", dvb_in_adapter);
274         dvb_in_device = defaults->get("R_VIDEO_DVB_IN_DEVICE", dvb_in_device);
275         defaults->get("R_SCREENCAPTURE_DISPLAY", screencapture_display);
276         firewire_port = defaults->get("R_VFIREWIRE_IN_PORT", firewire_port);
277         firewire_channel = defaults->get("R_VFIREWIRE_IN_CHANNEL", firewire_channel);
278         defaults->get("R_VFIREWIRE_IN_PATH", firewire_path);
279         capture_length = defaults->get("R_VIDEO_CAPTURE_LENGTH", capture_length);
280         w = defaults->get("RECORD_W", w);
281         h = defaults->get("RECORD_H", h);
282         in_framerate = defaults->get("R_IN_FRAMERATE", in_framerate);
283         follow_video = defaults->get("R_FOLLOW_VIDEO", follow_video);
284         return 0;
285 }
286
287 int VideoInConfig::save_defaults(BC_Hash *defaults)
288 {
289         defaults->update("R_VIDEO_IN_DRIVER", driver);
290         defaults->update("R_V4L_IN_DEVICE", v4l_in_device);
291         defaults->update("R_V4L2_IN_DEVICE", v4l2_in_device);
292         defaults->update("R_V4L2JPEG_IN_DEVICE", v4l2jpeg_in_device);
293         defaults->update("R_V4L2JPEG_IN_FIELDS", v4l2jpeg_in_fields);
294         defaults->update("R_V4L2MPEG_IN_DEVICE", v4l2mpeg_in_device);
295         defaults->update("R_LML_IN_DEVICE", lml_in_device);
296         defaults->update("R_BUZ_IN_DEVICE", buz_in_device);
297         defaults->update("R_VIDEO_DVB_IN_ADAPTER", dvb_in_adapter);
298         defaults->update("R_VIDEO_DVB_IN_DEVICE", dvb_in_device);
299         defaults->update("R_SCREENCAPTURE_DISPLAY", screencapture_display);
300         defaults->update("R_VFIREWIRE_IN_PORT", firewire_port);
301         defaults->update("R_VFIREWIRE_IN_CHANNEL", firewire_channel);
302         defaults->update("R_VFIREWIRE_IN_PATH", firewire_path);
303         defaults->update("R_VIDEO_CAPTURE_LENGTH", capture_length);
304         defaults->update("RECORD_W", w);
305         defaults->update("RECORD_H", h);
306         defaults->update("R_IN_FRAMERATE", in_framerate);
307         defaults->update("R_FOLLOW_VIDEO", follow_video);
308         return 0;
309 }
310