00001 #include "audiodevice.inc"
00002 #include "bchash.h"
00003 #include "playbackconfig.h"
00004 #include "recordconfig.h"
00005 #include "videodevice.inc"
00006 #include <string.h>
00007
00008
00009
00010
00011
00012 AudioInConfig::AudioInConfig()
00013 {
00014 driver = AUDIO_OSS;
00015 for(int i = 0; i < MAXDEVICES; i++)
00016 {
00017 oss_enable[i] = (i == 0);
00018 sprintf(oss_in_device[i], "/dev/dsp");
00019 }
00020 oss_in_bits = 16;
00021 firewire_port = 0;
00022 firewire_channel = 63;
00023 strcpy(firewire_path, "/dev/dv1394");
00024 sprintf(esound_in_server, "");
00025 esound_in_port = 0;
00026
00027 sprintf(alsa_in_device, "default");
00028 alsa_in_bits = 16;
00029 in_samplerate = 48000;
00030 channels = 2;
00031 }
00032
00033 AudioInConfig::~AudioInConfig()
00034 {
00035 }
00036
00037 int AudioInConfig::is_duplex(AudioInConfig *in, AudioOutConfig *out)
00038 {
00039 if(in->driver == out->driver)
00040 {
00041 switch(in->driver)
00042 {
00043 case AUDIO_OSS:
00044 case AUDIO_OSS_ENVY24:
00045 return (!strcmp(in->oss_in_device[0], out->oss_out_device[0]) &&
00046 in->oss_in_bits == out->oss_out_bits);
00047 break;
00048
00049
00050 case AUDIO_ALSA:
00051 return 0;
00052 break;
00053 }
00054 }
00055
00056 return 0;
00057 }
00058
00059
00060 void AudioInConfig::copy_from(AudioInConfig *src)
00061 {
00062 driver = src->driver;
00063
00064 firewire_port = src->firewire_port;
00065 firewire_channel = src->firewire_channel;
00066 strcpy(firewire_path, src->firewire_path);
00067
00068 strcpy(esound_in_server, src->esound_in_server);
00069 esound_in_port = src->esound_in_port;
00070
00071 for(int i = 0; i < MAXDEVICES; i++)
00072 {
00073 oss_enable[i] = src->oss_enable[i];
00074 strcpy(oss_in_device[i], src->oss_in_device[i]);
00075 oss_in_bits = src->oss_in_bits;
00076 }
00077
00078 strcpy(alsa_in_device, src->alsa_in_device);
00079 alsa_in_bits = src->alsa_in_bits;
00080 in_samplerate = src->in_samplerate;
00081 channels = src->channels;
00082 }
00083
00084 AudioInConfig& AudioInConfig::operator=(AudioInConfig &that)
00085 {
00086 copy_from(&that);
00087 return *this;
00088 }
00089
00090 int AudioInConfig::load_defaults(BC_Hash *defaults)
00091 {
00092 char string[BCTEXTLEN];
00093 driver = defaults->get("AUDIOINDRIVER", driver);
00094 firewire_port = defaults->get("AFIREWIRE_IN_PORT", firewire_port);
00095 firewire_channel = defaults->get("AFIREWIRE_IN_CHANNEL", firewire_channel);
00096 defaults->get("AFIREWIRE_IN_PATH", firewire_path);
00097 for(int i = 0; i < MAXDEVICES; i++)
00098 {
00099 sprintf(string, "OSS_ENABLE_%d", i);
00100 oss_enable[i] = defaults->get(string, oss_enable[i]);
00101 sprintf(string, "OSS_IN_DEVICE_%d", i);
00102 defaults->get(string, oss_in_device[i]);
00103 }
00104 sprintf(string, "OSS_IN_BITS");
00105 oss_in_bits = defaults->get(string, oss_in_bits);
00106 defaults->get("ESOUND_IN_SERVER", esound_in_server);
00107 esound_in_port = defaults->get("ESOUND_IN_PORT", esound_in_port);
00108
00109 defaults->get("ALSA_IN_DEVICE", alsa_in_device);
00110 alsa_in_bits = defaults->get("ALSA_IN_BITS", alsa_in_bits);
00111 in_samplerate = defaults->get("IN_SAMPLERATE", in_samplerate);
00112 channels = defaults->get("IN_CHANNELS", channels);
00113 return 0;
00114 }
00115
00116 int AudioInConfig::save_defaults(BC_Hash *defaults)
00117 {
00118 char string[BCTEXTLEN];
00119 defaults->update("AUDIOINDRIVER", driver);
00120 defaults->update("AFIREWIRE_IN_PORT", firewire_port);
00121 defaults->update("AFIREWIRE_IN_CHANNEL", firewire_channel);
00122 defaults->update("AFIREWIRE_IN_PATH", firewire_path);
00123
00124 for(int i = 0; i < MAXDEVICES; i++)
00125 {
00126 sprintf(string, "OSS_ENABLE_%d", i);
00127 defaults->update(string, oss_enable[i]);
00128 sprintf(string, "OSS_IN_DEVICE_%d", i);
00129 defaults->update(string, oss_in_device[i]);
00130 }
00131
00132 sprintf(string, "OSS_IN_BITS");
00133 defaults->update(string, oss_in_bits);
00134 defaults->update("ESOUND_IN_SERVER", esound_in_server);
00135 defaults->update("ESOUND_IN_PORT", esound_in_port);
00136
00137 defaults->update("ALSA_IN_DEVICE", alsa_in_device);
00138 defaults->update("ALSA_IN_BITS", alsa_in_bits);
00139 defaults->update("IN_SAMPLERATE", in_samplerate);
00140 defaults->update("IN_CHANNELS", channels);
00141 return 0;
00142 }
00143
00144
00145
00146
00147
00148
00149
00150 VideoInConfig::VideoInConfig()
00151 {
00152 driver = VIDEO4LINUX;
00153 sprintf(v4l_in_device, "/dev/video0");
00154 sprintf(v4l2_in_device, "/dev/video0");
00155 sprintf(v4l2jpeg_in_device, "/dev/video0");
00156 sprintf(lml_in_device, "/dev/mvideo/stream");
00157 sprintf(buz_in_device, "/dev/video0");
00158 sprintf(screencapture_display, "");
00159
00160
00161
00162 sprintf(dvb_in_host, "echephyle");
00163 dvb_in_port = 400;
00164 dvb_in_number = 0;
00165
00166
00167
00168
00169
00170 firewire_port = 0;
00171 firewire_channel = 63;
00172 sprintf(firewire_path, "/dev/dv1394");
00173
00174
00175 capture_length = 2;
00176 w = 720;
00177 h = 480;
00178 in_framerate = 29.97;
00179 }
00180
00181 VideoInConfig::~VideoInConfig()
00182 {
00183 }
00184
00185 char* VideoInConfig::get_path()
00186 {
00187 switch(driver)
00188 {
00189 case VIDEO4LINUX:
00190 return v4l_in_device;
00191 break;
00192 case VIDEO4LINUX2:
00193 return v4l2_in_device;
00194 break;
00195 case VIDEO4LINUX2JPEG:
00196 return v4l2jpeg_in_device;
00197 break;
00198 case CAPTURE_BUZ:
00199 return buz_in_device;
00200 break;
00201 case CAPTURE_DVB:
00202 return dvb_in_host;
00203 break;
00204 }
00205 return v4l_in_device;
00206 }
00207
00208 void VideoInConfig::copy_from(VideoInConfig *src)
00209 {
00210 driver = src->driver;
00211 strcpy(v4l_in_device, src->v4l_in_device);
00212 strcpy(v4l2_in_device, src->v4l2_in_device);
00213 strcpy(v4l2jpeg_in_device, src->v4l2jpeg_in_device);
00214 strcpy(lml_in_device, src->lml_in_device);
00215 strcpy(buz_in_device, src->buz_in_device);
00216 strcpy(screencapture_display, src->screencapture_display);
00217
00218
00219
00220
00221
00222 strcpy(dvb_in_host, src->dvb_in_host);
00223 dvb_in_port = src->dvb_in_port;
00224 dvb_in_number = src->dvb_in_number;
00225
00226
00227
00228
00229
00230 firewire_port = src->firewire_port;
00231 firewire_channel = src->firewire_channel;
00232 strcpy(firewire_path, src->firewire_path);
00233 capture_length = src->capture_length;
00234 w = src->w;
00235 h = src->h;
00236 in_framerate = src->in_framerate;
00237 }
00238
00239 VideoInConfig& VideoInConfig::operator=(VideoInConfig &that)
00240 {
00241 copy_from(&that);
00242 return *this;
00243 }
00244
00245 int VideoInConfig::load_defaults(BC_Hash *defaults)
00246 {
00247 driver = defaults->get("VIDEO_IN_DRIVER", driver);
00248 defaults->get("V4L_IN_DEVICE", v4l_in_device);
00249 defaults->get("V4L2_IN_DEVICE", v4l2_in_device);
00250 defaults->get("V4L2JPEG_IN_DEVICE", v4l2jpeg_in_device);
00251 defaults->get("LML_IN_DEVICE", lml_in_device);
00252 defaults->get("BUZ_IN_DEVICE", buz_in_device);
00253 defaults->get("SCREENCAPTURE_DISPLAY", screencapture_display);
00254
00255 defaults->get("DVB_IN_HOST", dvb_in_host);
00256 dvb_in_port = defaults->get("DVB_IN_PORT", dvb_in_port);
00257 dvb_in_number = defaults->get("DVB_IN_NUMBER", dvb_in_number);
00258
00259 firewire_port = defaults->get("VFIREWIRE_IN_PORT", firewire_port);
00260 firewire_channel = defaults->get("VFIREWIRE_IN_CHANNEL", firewire_channel);
00261 defaults->get("VFIREWIRE_IN_PATH", firewire_path);
00262 capture_length = defaults->get("VIDEO_CAPTURE_LENGTH", capture_length);
00263 w = defaults->get("RECORD_W", w);
00264 h = defaults->get("RECORD_H", h);
00265 in_framerate = defaults->get("IN_FRAMERATE", in_framerate);
00266 return 0;
00267 }
00268
00269 int VideoInConfig::save_defaults(BC_Hash *defaults)
00270 {
00271 defaults->update("VIDEO_IN_DRIVER", driver);
00272 defaults->update("V4L_IN_DEVICE", v4l_in_device);
00273 defaults->update("V4L2_IN_DEVICE", v4l2_in_device);
00274 defaults->update("V4L2JPEG_IN_DEVICE", v4l2jpeg_in_device);
00275 defaults->update("LML_IN_DEVICE", lml_in_device);
00276 defaults->update("BUZ_IN_DEVICE", buz_in_device);
00277 defaults->update("SCREENCAPTURE_DISPLAY", screencapture_display);
00278
00279
00280
00281
00282 defaults->update("DVB_IN_HOST", dvb_in_host);
00283 defaults->update("DVB_IN_PORT", dvb_in_port);
00284 defaults->update("DVB_IN_NUMBER", dvb_in_number);
00285
00286
00287
00288
00289
00290 defaults->update("VFIREWIRE_IN_PORT", firewire_port);
00291 defaults->update("VFIREWIRE_IN_CHANNEL", firewire_channel);
00292 defaults->update("VFIREWIRE_IN_PATH", firewire_path);
00293 defaults->update("VIDEO_CAPTURE_LENGTH", capture_length);
00294 defaults->update("RECORD_W", w);
00295 defaults->update("RECORD_H", h);
00296 defaults->update("IN_FRAMERATE", in_framerate);
00297 return 0;
00298 }
00299