00001 #include "clip.h"
00002 #include "bchash.h"
00003 #include "playbackconfig.h"
00004 #include "videodevice.inc"
00005 #include <string.h>
00006
00007 AudioOutConfig::AudioOutConfig(int duplex)
00008 {
00009 this->duplex = duplex;
00010
00011 fragment_size = 16384;
00012 driver = AUDIO_OSS;
00013
00014 audio_offset = 0.0;
00015
00016 oss_out_bits = 16;
00017 for(int i = 0; i < MAXDEVICES; i++)
00018 {
00019 oss_enable[i] = (i == 0);
00020 sprintf(oss_out_device[i], "/dev/dsp");
00021 }
00022
00023 sprintf(esound_out_server, "");
00024 esound_out_port = 0;
00025
00026 sprintf(alsa_out_device, "default");
00027 alsa_out_bits = 16;
00028 interrupt_workaround = 0;
00029
00030 firewire_channel = 63;
00031 firewire_port = 0;
00032 strcpy(firewire_path, "/dev/video1394");
00033 firewire_syt = 30000;
00034
00035 dv1394_channel = 63;
00036 dv1394_port = 0;
00037 strcpy(dv1394_path, "/dev/dv1394");
00038 dv1394_syt = 30000;
00039
00040 }
00041
00042 AudioOutConfig::~AudioOutConfig()
00043 {
00044 }
00045
00046
00047
00048 int AudioOutConfig::operator!=(AudioOutConfig &that)
00049 {
00050 return !(*this == that);
00051 }
00052
00053 int AudioOutConfig::operator==(AudioOutConfig &that)
00054 {
00055 return
00056 fragment_size == that.fragment_size &&
00057 driver == that.driver &&
00058 EQUIV(audio_offset, that.audio_offset) &&
00059
00060
00061 !strcmp(oss_out_device[0], that.oss_out_device[0]) &&
00062 (oss_out_bits == that.oss_out_bits) &&
00063
00064
00065
00066 !strcmp(esound_out_server, that.esound_out_server) &&
00067 (esound_out_port == that.esound_out_port) &&
00068
00069
00070
00071 !strcmp(alsa_out_device, that.alsa_out_device) &&
00072 (alsa_out_bits == that.alsa_out_bits) &&
00073 (interrupt_workaround == that.interrupt_workaround) &&
00074
00075 firewire_channel == that.firewire_channel &&
00076 firewire_port == that.firewire_port &&
00077 firewire_syt == that.firewire_syt &&
00078 !strcmp(firewire_path, that.firewire_path) &&
00079
00080 dv1394_channel == that.dv1394_channel &&
00081 dv1394_port == that.dv1394_port &&
00082 dv1394_syt == that.dv1394_syt &&
00083 !strcmp(dv1394_path, that.dv1394_path);
00084 }
00085
00086
00087
00088 AudioOutConfig& AudioOutConfig::operator=(AudioOutConfig &that)
00089 {
00090 copy_from(&that);
00091 return *this;
00092 }
00093
00094 void AudioOutConfig::copy_from(AudioOutConfig *src)
00095 {
00096 fragment_size = src->fragment_size;
00097 driver = src->driver;
00098 audio_offset = src->audio_offset;
00099
00100 strcpy(esound_out_server, src->esound_out_server);
00101 esound_out_port = src->esound_out_port;
00102 for(int i = 0; i < MAXDEVICES; i++)
00103 {
00104 oss_enable[i] = src->oss_enable[i];
00105 strcpy(oss_out_device[i], src->oss_out_device[i]);
00106 }
00107 oss_out_bits = src->oss_out_bits;
00108
00109 strcpy(alsa_out_device, src->alsa_out_device);
00110 alsa_out_bits = src->alsa_out_bits;
00111 interrupt_workaround = src->interrupt_workaround;
00112
00113 firewire_channel = src->firewire_channel;
00114 firewire_port = src->firewire_port;
00115 firewire_syt = src->firewire_syt;
00116 strcpy(firewire_path, src->firewire_path);
00117
00118 dv1394_channel = src->dv1394_channel;
00119 dv1394_port = src->dv1394_port;
00120 dv1394_syt = src->dv1394_syt;
00121 strcpy(dv1394_path, src->dv1394_path);
00122
00123 }
00124
00125 int AudioOutConfig::load_defaults(BC_Hash *defaults)
00126 {
00127 char string[BCTEXTLEN];
00128
00129 fragment_size = defaults->get("FRAGMENT_SIZE", fragment_size);
00130 audio_offset = defaults->get("AUDIO_OFFSET", audio_offset);
00131 sprintf(string, "AUDIO_OUT_DRIVER_%d", duplex);
00132 driver = defaults->get(string, driver);
00133
00134 for(int i = 0; i < MAXDEVICES; i++)
00135 {
00136 sprintf(string, "OSS_ENABLE_%d_%d", i, duplex);
00137 oss_enable[i] = defaults->get(string, oss_enable[i]);
00138 sprintf(string, "OSS_OUT_DEVICE_%d_%d", i, duplex);
00139 defaults->get(string, oss_out_device[i]);
00140 }
00141 sprintf(string, "OSS_OUT_BITS_%d", duplex);
00142 oss_out_bits = defaults->get(string, oss_out_bits);
00143
00144 defaults->get("ALSA_OUT_DEVICE", alsa_out_device);
00145 alsa_out_bits = defaults->get("ALSA_OUT_BITS", alsa_out_bits);
00146 interrupt_workaround = defaults->get("ALSA_INTERRUPT_WORKAROUND", interrupt_workaround);
00147
00148 sprintf(string, "ESOUND_OUT_SERVER_%d", duplex);
00149 defaults->get(string, esound_out_server);
00150 sprintf(string, "ESOUND_OUT_PORT_%d", duplex);
00151 esound_out_port = defaults->get(string, esound_out_port);
00152
00153 sprintf(string, "AFIREWIRE_OUT_CHANNEL");
00154 firewire_channel = defaults->get(string, firewire_channel);
00155 sprintf(string, "AFIREWIRE_OUT_PORT");
00156 firewire_port = defaults->get(string, firewire_port);
00157 sprintf(string, "AFIREWIRE_OUT_PATH");
00158 defaults->get(string, firewire_path);
00159 sprintf(string, "AFIREWIRE_OUT_SYT");
00160 firewire_syt = defaults->get(string, firewire_syt);
00161
00162 sprintf(string, "ADV1394_OUT_CHANNEL");
00163 dv1394_channel = defaults->get(string, dv1394_channel);
00164 sprintf(string, "ADV1394_OUT_PORT");
00165 dv1394_port = defaults->get(string, dv1394_port);
00166 sprintf(string, "ADV1394_OUT_PATH");
00167 defaults->get(string, dv1394_path);
00168 sprintf(string, "ADV1394_OUT_SYT");
00169 dv1394_syt = defaults->get(string, dv1394_syt);
00170
00171 return 0;
00172 }
00173
00174 int AudioOutConfig::save_defaults(BC_Hash *defaults)
00175 {
00176 char string[BCTEXTLEN];
00177
00178 defaults->update("FRAGMENT_SIZE", fragment_size);
00179 defaults->update("AUDIO_OFFSET", audio_offset);
00180
00181 sprintf(string, "AUDIO_OUT_DRIVER_%d", duplex);
00182 defaults->update(string, driver);
00183
00184 for(int i = 0; i < MAXDEVICES; i++)
00185 {
00186 sprintf(string, "OSS_ENABLE_%d_%d", i, duplex);
00187 defaults->update(string, oss_enable[i]);
00188 sprintf(string, "OSS_OUT_DEVICE_%d_%d", i, duplex);
00189 defaults->update(string, oss_out_device[i]);
00190 }
00191 sprintf(string, "OSS_OUT_BITS_%d", duplex);
00192 defaults->update(string, oss_out_bits);
00193
00194
00195 defaults->update("ALSA_OUT_DEVICE", alsa_out_device);
00196 defaults->update("ALSA_OUT_BITS", alsa_out_bits);
00197 defaults->update("ALSA_INTERRUPT_WORKAROUND", interrupt_workaround);
00198
00199 sprintf(string, "ESOUND_OUT_SERVER_%d", duplex);
00200 defaults->update(string, esound_out_server);
00201 sprintf(string, "ESOUND_OUT_PORT_%d", duplex);
00202 defaults->update(string, esound_out_port);
00203
00204 sprintf(string, "AFIREWIRE_OUT_CHANNEL");
00205 defaults->update(string, firewire_channel);
00206 sprintf(string, "AFIREWIRE_OUT_PORT");
00207 defaults->update(string, firewire_port);
00208 sprintf(string, "AFIREWIRE_OUT_PATH");
00209 defaults->update(string, firewire_path);
00210 sprintf(string, "AFIREWIRE_OUT_SYT");
00211 defaults->update(string, firewire_syt);
00212
00213
00214 sprintf(string, "ADV1394_OUT_CHANNEL");
00215 defaults->update(string, dv1394_channel);
00216 sprintf(string, "ADV1394_OUT_PORT");
00217 defaults->update(string, dv1394_port);
00218 sprintf(string, "ADV1394_OUT_PATH");
00219 defaults->update(string, dv1394_path);
00220 sprintf(string, "ADV1394_OUT_SYT");
00221 defaults->update(string, dv1394_syt);
00222
00223 return 0;
00224 }
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235 VideoOutConfig::VideoOutConfig()
00236 {
00237 sprintf(lml_out_device, "/dev/mvideo/stream");
00238 sprintf(buz_out_device, "/dev/video0");
00239 driver = PLAYBACK_X11_XV;
00240 buz_out_channel = 0;
00241 buz_swap_fields = 0;
00242 sprintf(x11_host, "");
00243 x11_use_fields = USE_NO_FIELDS;
00244
00245 firewire_channel = 63;
00246 firewire_port = 0;
00247 strcpy(firewire_path, "/dev/video1394");
00248 firewire_syt = 30000;
00249
00250 dv1394_channel = 63;
00251 dv1394_port = 0;
00252 strcpy(dv1394_path, "/dev/dv1394");
00253 dv1394_syt = 30000;
00254
00255 brightness = 32768;
00256 hue = 32768;
00257 color = 32768;
00258 contrast = 32768;
00259 whiteness = 32768;
00260 }
00261
00262 VideoOutConfig::~VideoOutConfig()
00263 {
00264 }
00265
00266
00267 int VideoOutConfig::operator!=(VideoOutConfig &that)
00268 {
00269 return !(*this == that);
00270 }
00271
00272 int VideoOutConfig::operator==(VideoOutConfig &that)
00273 {
00274 return (driver == that.driver) &&
00275 !strcmp(lml_out_device, that.lml_out_device) &&
00276 !strcmp(buz_out_device, that.buz_out_device) &&
00277 (buz_out_channel == that.buz_out_channel) &&
00278 (buz_swap_fields == that.buz_swap_fields) &&
00279 !strcmp(x11_host, that.x11_host) &&
00280 (x11_use_fields == that.x11_use_fields) &&
00281 (brightness == that.brightness) &&
00282 (hue == that.hue) &&
00283 (color == that.color) &&
00284 (contrast == that.contrast) &&
00285 (whiteness == that.whiteness) &&
00286
00287 (firewire_channel == that.firewire_channel) &&
00288 (firewire_port == that.firewire_port) &&
00289 !strcmp(firewire_path, that.firewire_path) &&
00290 (firewire_syt == that.firewire_syt) &&
00291
00292 (dv1394_channel == that.dv1394_channel) &&
00293 (dv1394_port == that.dv1394_port) &&
00294 !strcmp(dv1394_path, that.dv1394_path) &&
00295 (dv1394_syt == that.dv1394_syt);
00296 }
00297
00298
00299
00300
00301
00302
00303 VideoOutConfig& VideoOutConfig::operator=(VideoOutConfig &that)
00304 {
00305 copy_from(&that);
00306 return *this;
00307 }
00308
00309 void VideoOutConfig::copy_from(VideoOutConfig *src)
00310 {
00311 this->driver = src->driver;
00312 strcpy(this->lml_out_device, src->lml_out_device);
00313 strcpy(this->buz_out_device, src->buz_out_device);
00314 this->buz_out_channel = src->buz_out_channel;
00315 this->buz_swap_fields = src->buz_swap_fields;
00316 strcpy(this->x11_host, src->x11_host);
00317 this->x11_use_fields = src->x11_use_fields;
00318
00319 firewire_channel = src->firewire_channel;
00320 firewire_port = src->firewire_port;
00321 strcpy(firewire_path, src->firewire_path);
00322 firewire_syt = src->firewire_syt;
00323
00324 dv1394_channel = src->dv1394_channel;
00325 dv1394_port = src->dv1394_port;
00326 strcpy(dv1394_path, src->dv1394_path);
00327 dv1394_syt = src->dv1394_syt;
00328 }
00329
00330 char* VideoOutConfig::get_path()
00331 {
00332 switch(driver)
00333 {
00334 case PLAYBACK_BUZ:
00335 return buz_out_device;
00336 break;
00337 case PLAYBACK_X11:
00338 case PLAYBACK_X11_XV:
00339 return x11_host;
00340 break;
00341 case PLAYBACK_DV1394:
00342 return dv1394_path;
00343 break;
00344 case PLAYBACK_FIREWIRE:
00345 return firewire_path;
00346 break;
00347 };
00348 return buz_out_device;
00349 }
00350
00351 int VideoOutConfig::load_defaults(BC_Hash *defaults)
00352 {
00353 char string[BCTEXTLEN];
00354 sprintf(string, "VIDEO_OUT_DRIVER");
00355 driver = defaults->get(string, driver);
00356 sprintf(string, "LML_OUT_DEVICE");
00357 defaults->get(string, lml_out_device);
00358 sprintf(string, "BUZ_OUT_DEVICE");
00359 defaults->get(string, buz_out_device);
00360 sprintf(string, "BUZ_OUT_CHANNEL");
00361 buz_out_channel = defaults->get(string, buz_out_channel);
00362 sprintf(string, "BUZ_SWAP_FIELDS");
00363 buz_swap_fields = defaults->get(string, buz_swap_fields);
00364 sprintf(string, "X11_OUT_DEVICE");
00365 defaults->get(string, x11_host);
00366 x11_use_fields = defaults->get("X11_USE_FIELDS", x11_use_fields);
00367
00368
00369
00370 sprintf(string, "VFIREWIRE_OUT_CHANNEL");
00371 firewire_channel = defaults->get(string, firewire_channel);
00372 sprintf(string, "VFIREWIRE_OUT_PORT");
00373 firewire_port = defaults->get(string, firewire_port);
00374 sprintf(string, "VFIREWIRE_OUT_PATH");
00375 defaults->get(string, firewire_path);
00376 sprintf(string, "VFIREWIRE_OUT_SYT");
00377 firewire_syt = defaults->get(string, firewire_syt);
00378
00379 sprintf(string, "VDV1394_OUT_CHANNEL");
00380 dv1394_channel = defaults->get(string, dv1394_channel);
00381 sprintf(string, "VDV1394_OUT_PORT");
00382 dv1394_port = defaults->get(string, dv1394_port);
00383 sprintf(string, "VDV1394_OUT_PATH");
00384 defaults->get(string, dv1394_path);
00385 sprintf(string, "VDV1394_OUT_SYT");
00386 dv1394_syt = defaults->get(string, dv1394_syt);
00387 return 0;
00388 }
00389
00390 int VideoOutConfig::save_defaults(BC_Hash *defaults)
00391 {
00392 char string[BCTEXTLEN];
00393 sprintf(string, "VIDEO_OUT_DRIVER");
00394 defaults->update(string, driver);
00395 sprintf(string, "LML_OUT_DEVICE");
00396 defaults->update(string, lml_out_device);
00397 sprintf(string, "BUZ_OUT_DEVICE");
00398 defaults->update(string, buz_out_device);
00399 sprintf(string, "BUZ_OUT_CHANNEL");
00400 defaults->update(string, buz_out_channel);
00401 sprintf(string, "BUZ_SWAP_FIELDS");
00402 defaults->update(string, buz_swap_fields);
00403 sprintf(string, "X11_OUT_DEVICE");
00404 defaults->update(string, x11_host);
00405 defaults->update("X11_USE_FIELDS", x11_use_fields);
00406
00407 sprintf(string, "VFIREWIRE_OUT_CHANNEL");
00408 defaults->update(string, firewire_channel);
00409 sprintf(string, "VFIREWIRE_OUT_PORT");
00410 defaults->update(string, firewire_port);
00411 sprintf(string, "VFIREWIRE_OUT_PATH");
00412 defaults->update(string, firewire_path);
00413 sprintf(string, "VFIREWIRE_OUT_SYT");
00414 defaults->update(string, firewire_syt);
00415
00416 sprintf(string, "VDV1394_OUT_CHANNEL");
00417 defaults->update(string, dv1394_channel);
00418 sprintf(string, "VDV1394_OUT_PORT");
00419 defaults->update(string, dv1394_port);
00420 sprintf(string, "VDV1394_OUT_PATH");
00421 defaults->update(string, dv1394_path);
00422 sprintf(string, "VDV1394_OUT_SYT");
00423 defaults->update(string, dv1394_syt);
00424 return 0;
00425 }
00426
00427
00428
00429
00430
00431
00432
00433
00434
00435 PlaybackConfig::PlaybackConfig()
00436 {
00437 aconfig = new AudioOutConfig(0);
00438 vconfig = new VideoOutConfig;
00439 sprintf(hostname, "localhost");
00440 port = 23456;
00441 }
00442
00443 PlaybackConfig::~PlaybackConfig()
00444 {
00445 delete aconfig;
00446 delete vconfig;
00447 }
00448
00449 PlaybackConfig& PlaybackConfig::operator=(PlaybackConfig &that)
00450 {
00451 copy_from(&that);
00452 return *this;
00453 }
00454
00455 void PlaybackConfig::copy_from(PlaybackConfig *src)
00456 {
00457 aconfig->copy_from(src->aconfig);
00458 vconfig->copy_from(src->vconfig);
00459 strcpy(hostname, src->hostname);
00460 port = src->port;
00461 }
00462
00463 int PlaybackConfig::load_defaults(BC_Hash *defaults)
00464 {
00465 char string[1024];
00466 sprintf(string, "PLAYBACK_HOSTNAME");
00467 defaults->get(string, hostname);
00468 sprintf(string, "PLAYBACK_PORT");
00469 port = defaults->get(string, port);
00470 aconfig->load_defaults(defaults);
00471 vconfig->load_defaults(defaults);
00472 return 0;
00473 }
00474
00475 int PlaybackConfig::save_defaults(BC_Hash *defaults)
00476 {
00477 char string[1024];
00478 sprintf(string, "PLAYBACK_HOSTNAME");
00479 defaults->update(string, hostname);
00480 sprintf(string, "PLAYBACK_PORT");
00481 defaults->update(string, port);
00482 aconfig->save_defaults(defaults);
00483 vconfig->save_defaults(defaults);
00484 return 0;
00485 }
00486
00487