4 * Copyright (C) 2008 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
22 #include "audiodevice.inc"
24 #include "playbackconfig.h"
25 #include "recordconfig.h"
26 #include "videodevice.inc"
33 AudioInConfig::AudioInConfig()
36 for(int i = 0; i < MAXDEVICES; i++)
38 oss_enable[i] = (i == 0);
39 sprintf(oss_in_device[i], "/dev/dsp");
43 firewire_channel = 63;
44 strcpy(firewire_path, "/dev/raw1394");
45 esound_in_server[0] = 0;
48 sprintf(alsa_in_device, "default");
50 in_samplerate = 48000;
51 strcpy(dvb_in_adapter,"/dev/dvb/adapter0");
61 AudioInConfig::~AudioInConfig()
65 int AudioInConfig::is_duplex(AudioInConfig *in, AudioOutConfig *out)
67 if(in->driver == out->driver)
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);
77 // ALSA always opens 2 devices
88 void AudioInConfig::copy_from(AudioInConfig *src)
92 firewire_port = src->firewire_port;
93 firewire_channel = src->firewire_channel;
94 strcpy(firewire_path, src->firewire_path);
96 strcpy(esound_in_server, src->esound_in_server);
97 esound_in_port = src->esound_in_port;
99 for(int i = 0; i < MAXDEVICES; i++)
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;
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;
119 AudioInConfig& AudioInConfig::operator=(AudioInConfig &that)
125 int AudioInConfig::load_defaults(BC_Hash *defaults)
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++)
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);
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);
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);
154 int AudioInConfig::save_defaults(BC_Hash *defaults)
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);
161 for(int i = 0; i < MAXDEVICES; i++)
163 defaults->updatef(oss_enable[i], "R_OSS_ENABLE_%d", i);
164 defaults->updatef(oss_in_device[i], "R_OSS_IN_DEVICE_%d", i);
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);
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);
190 VideoInConfig::VideoInConfig()
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");
202 sprintf(screencapture_display, "%s", "");
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;
211 in_framerate = 29.97;
215 VideoInConfig::~VideoInConfig()
219 char* VideoInConfig::get_path()
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;
231 return v4l_in_device;
234 void VideoInConfig::copy_from(VideoInConfig *src)
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;
253 in_framerate = src->in_framerate;
254 follow_video = src->follow_video;
257 VideoInConfig& VideoInConfig::operator=(VideoInConfig &that)
263 int VideoInConfig::load_defaults(BC_Hash *defaults)
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);
287 int VideoInConfig::save_defaults(BC_Hash *defaults)
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);