r793: Small API addon, so plugins can 'see' camera and projector automation
[cinelerra_cv/mob.git] / cinelerra / playbackconfig.C
blob7a4906f740c6718900a4c6dce6e1a6d54133786e
1 #include "clip.h"
2 #include "defaults.h"
3 #include "playbackconfig.h"
4 #include "videodevice.inc"
5 #include <string.h>
7 AudioOutConfig::AudioOutConfig(int duplex)
9         this->duplex = duplex;
11         fragment_size = 16384;
12         driver = AUDIO_OSS;
14         audio_offset = 0.0;
16         oss_out_bits = 16;
17         for(int i = 0; i < MAXDEVICES; i++)
18         {
19                 oss_enable[i] = (i == 0);
20                 sprintf(oss_out_device[i], "/dev/dsp");
21                 oss_out_channels[i] = 2;
22         }
24         sprintf(esound_out_server, "");
25         esound_out_port = 0;
27         sprintf(alsa_out_device, "default");
28         alsa_out_channels = 2;
29         alsa_out_bits = 16;
30         interrupt_workaround = 0;
32         firewire_channels = 2;
33         firewire_channel = 63;
34         firewire_port = 0;
35         strcpy(firewire_path, "/dev/video1394");
36         firewire_syt = 30000;
38         dv1394_channels = 2;
39         dv1394_channel = 63;
40         dv1394_port = 0;
41         strcpy(dv1394_path, "/dev/dv1394");
42         dv1394_syt = 30000;
44         bzero(do_channel, sizeof(int) * MAX_CHANNELS);
47 AudioOutConfig::~AudioOutConfig()
53 int AudioOutConfig::operator!=(AudioOutConfig &that)
55         return !(*this == that);
58 int AudioOutConfig::operator==(AudioOutConfig &that)
60         return 
61                 fragment_size == that.fragment_size &&
62                 driver == that.driver &&
63                 EQUIV(audio_offset, that.audio_offset) &&
66                 !strcmp(oss_out_device[0], that.oss_out_device[0]) && 
67                 (oss_out_channels[0] == that.oss_out_channels[0]) && 
68                 (oss_out_bits == that.oss_out_bits) && 
72                 !strcmp(esound_out_server, that.esound_out_server) && 
73                 (esound_out_port == that.esound_out_port) && 
77                 !strcmp(alsa_out_device, that.alsa_out_device) &&
78                 (alsa_out_channels == that.alsa_out_channels) &&
79                 (alsa_out_bits == that.alsa_out_bits) &&
80                 (interrupt_workaround == that.interrupt_workaround) &&
82                 firewire_channels == that.firewire_channels &&
83                 firewire_channel == that.firewire_channel &&
84                 firewire_port == that.firewire_port &&
85                 firewire_syt == that.firewire_syt &&
86                 !strcmp(firewire_path, that.firewire_path) &&
88                 dv1394_channels == that.dv1394_channels &&
89                 dv1394_channel == that.dv1394_channel &&
90                 dv1394_port == that.dv1394_port &&
91                 dv1394_syt == that.dv1394_syt &&
92                 !strcmp(dv1394_path, that.dv1394_path);
97 AudioOutConfig& AudioOutConfig::operator=(AudioOutConfig &that)
99         copy_from(&that);
100         return *this;
103 void AudioOutConfig::copy_from(AudioOutConfig *src)
105         fragment_size = src->fragment_size;
106         driver = src->driver;
107         audio_offset = src->audio_offset;
109         strcpy(esound_out_server, src->esound_out_server);
110         esound_out_port = src->esound_out_port;
111         for(int i = 0; i < MAXDEVICES; i++)
112         {
113                 oss_enable[i] = src->oss_enable[i];
114                 strcpy(oss_out_device[i], src->oss_out_device[i]);
115                 oss_out_channels[i] = src->oss_out_channels[i];
116         }
117         oss_out_bits = src->oss_out_bits;
119         strcpy(alsa_out_device, src->alsa_out_device);
120         alsa_out_channels = src->alsa_out_channels;
121         alsa_out_bits = src->alsa_out_bits;
122         interrupt_workaround = src->interrupt_workaround;
124         firewire_channels = src->firewire_channels;
125         firewire_channel = src->firewire_channel;
126         firewire_port = src->firewire_port;
127         firewire_syt = src->firewire_syt;
128         strcpy(firewire_path, src->firewire_path);
130         dv1394_channels = src->dv1394_channels;
131         dv1394_channel = src->dv1394_channel;
132         dv1394_port = src->dv1394_port;
133         dv1394_syt = src->dv1394_syt;
134         strcpy(dv1394_path, src->dv1394_path);
136         for(int i = 0; i < MAXCHANNELS; i++)
137                 do_channel[i] = src->do_channel[i];
140 int AudioOutConfig::load_defaults(Defaults *defaults)
142         char string[BCTEXTLEN];
144         fragment_size = defaults->get("FRAGMENT_SIZE", fragment_size);
145         audio_offset = defaults->get("AUDIO_OFFSET", audio_offset);
146         sprintf(string, "AUDIO_OUT_DRIVER_%d", duplex);
147         driver = defaults->get(string, driver);
149         for(int i = 0; i < MAXDEVICES; i++)
150         {
151                 sprintf(string, "OSS_ENABLE_%d_%d", i, duplex);
152                 oss_enable[i] = defaults->get(string, oss_enable[i]);
153                 sprintf(string, "OSS_OUT_DEVICE_%d_%d", i, duplex);
154                 defaults->get(string, oss_out_device[i]);
155                 sprintf(string, "OSS_OUT_CHANNELS_%d_%d", i, duplex);
156                 oss_out_channels[i] = defaults->get(string, oss_out_channels[i]);
157         }
158         sprintf(string, "OSS_OUT_BITS_%d", duplex);
159         oss_out_bits = defaults->get(string, oss_out_bits);
161         defaults->get("ALSA_OUT_DEVICE", alsa_out_device);
162         alsa_out_channels = defaults->get("ALSA_OUT_CHANNELS", alsa_out_channels);
163         alsa_out_bits = defaults->get("ALSA_OUT_BITS", alsa_out_bits);
164         interrupt_workaround = defaults->get("ALSA_INTERRUPT_WORKAROUND", interrupt_workaround);
166         sprintf(string, "ESOUND_OUT_SERVER_%d", duplex);
167         defaults->get(string, esound_out_server);
168         sprintf(string, "ESOUND_OUT_PORT_%d", duplex);
169         esound_out_port =             defaults->get(string, esound_out_port);
171         sprintf(string, "AFIREWIRE_OUT_CHANNELS");
172         firewire_channels = defaults->get(string, firewire_channels);
173         sprintf(string, "AFIREWIRE_OUT_CHANNEL");
174         firewire_channel = defaults->get(string, firewire_channel);
175         sprintf(string, "AFIREWIRE_OUT_PORT");
176         firewire_port = defaults->get(string, firewire_port);
177         sprintf(string, "AFIREWIRE_OUT_PATH");
178         defaults->get(string, firewire_path);
179         sprintf(string, "AFIREWIRE_OUT_SYT");
180         firewire_syt = defaults->get(string, firewire_syt);
182         sprintf(string, "ADV1394_OUT_CHANNELS");
183         dv1394_channels = defaults->get(string, dv1394_channels);
184         sprintf(string, "ADV1394_OUT_CHANNEL");
185         dv1394_channel = defaults->get(string, dv1394_channel);
186         sprintf(string, "ADV1394_OUT_PORT");
187         dv1394_port = defaults->get(string, dv1394_port);
188         sprintf(string, "ADV1394_OUT_PATH");
189         defaults->get(string, dv1394_path);
190         sprintf(string, "ADV1394_OUT_SYT");
191         dv1394_syt = defaults->get(string, dv1394_syt);
193         return 0;
196 int AudioOutConfig::save_defaults(Defaults *defaults)
198         char string[BCTEXTLEN];
200         defaults->update("FRAGMENT_SIZE", fragment_size);
201         defaults->update("AUDIO_OFFSET", audio_offset);
203         sprintf(string, "AUDIO_OUT_DRIVER_%d", duplex);
204         defaults->update(string, driver);
206         for(int i = 0; i < MAXDEVICES; i++)
207         {
208                 sprintf(string, "OSS_ENABLE_%d_%d", i, duplex);
209                 defaults->update(string, oss_enable[i]);
210                 sprintf(string, "OSS_OUT_DEVICE_%d_%d", i, duplex);
211                 defaults->update(string, oss_out_device[i]);
212                 sprintf(string, "OSS_OUT_CHANNELS_%d_%d", i, duplex);
213                 defaults->update(string, oss_out_channels[i]);
214         }
215         sprintf(string, "OSS_OUT_BITS_%d", duplex);
216         defaults->update(string, oss_out_bits);
219         defaults->update("ALSA_OUT_DEVICE", alsa_out_device);
220         defaults->update("ALSA_OUT_CHANNELS", alsa_out_channels);
221         defaults->update("ALSA_OUT_BITS", alsa_out_bits);
222         defaults->update("ALSA_INTERRUPT_WORKAROUND", interrupt_workaround);
224         sprintf(string, "ESOUND_OUT_SERVER_%d", duplex);
225         defaults->update(string, esound_out_server);
226         sprintf(string, "ESOUND_OUT_PORT_%d", duplex);
227         defaults->update(string, esound_out_port);
229         sprintf(string, "AFIREWIRE_OUT_CHANNELS");
230         defaults->update(string, firewire_channels);
231         sprintf(string, "AFIREWIRE_OUT_CHANNEL");
232         defaults->update(string, firewire_channel);
233         sprintf(string, "AFIREWIRE_OUT_PORT");
234         defaults->update(string, firewire_port);
235         sprintf(string, "AFIREWIRE_OUT_PATH");
236         defaults->update(string, firewire_path);
237         sprintf(string, "AFIREWIRE_OUT_SYT");
238         defaults->update(string, firewire_syt);
241         sprintf(string, "ADV1394_OUT_CHANNELS");
242         defaults->update(string, dv1394_channels);
243         sprintf(string, "ADV1394_OUT_CHANNEL");
244         defaults->update(string, dv1394_channel);
245         sprintf(string, "ADV1394_OUT_PORT");
246         defaults->update(string, dv1394_port);
247         sprintf(string, "ADV1394_OUT_PATH");
248         defaults->update(string, dv1394_path);
249         sprintf(string, "ADV1394_OUT_SYT");
250         defaults->update(string, dv1394_syt);
252         return 0;
255 int AudioOutConfig::total_output_channels()
257         switch(driver)
258         {
259                 case AUDIO_OSS:
260                 case AUDIO_OSS_ENVY24:
261                 {
262                         int total = 0;
263                         for(int i = 0; i < MAXDEVICES; i++)
264                         {
265                                 if(oss_enable[i]) total += oss_out_channels[i];
266                         }
267                         return total;
268                         break;
269                 }
271                 case AUDIO_ALSA:
272                         return alsa_out_channels;
273                         break;
276                 case AUDIO_1394:
277                 case AUDIO_IEC61883:
278                         return firewire_channels;
279                         break;
281                 case AUDIO_DV1394:
282                         return dv1394_channels;
283                         break;
285                 case AUDIO_ESOUND:
286                         return 2;
287                         break;
289                 default:
290                         return 0;
291                         break;
292         }
293         return 0;
296 int AudioOutConfig::total_playable_channels()
298         int result = 0;
299         for(int i = 0; i < MAXCHANNELS; i++)
300                 if(do_channel[i]) result++;
301         return result;
304 int AudioOutConfig::playable_channel_number(int number)
306         for(int i = 0; i < MAXCHANNELS; i++)
307         {
308                 if(do_channel[i])
309                 {
310                         number--;
311                         if(number < 0) return i;
312                 }
313         }
314         return 0;
325 VideoOutConfig::VideoOutConfig()
327         sprintf(lml_out_device, "/dev/mvideo/stream");
328         sprintf(buz_out_device, "/dev/video0");
329         driver = PLAYBACK_X11_XV;
330         for(int i = 0; i < MAX_CHANNELS; i++) do_channel[i] = 0;
331         buz_out_channel = 0;
332         buz_swap_fields = 0;
333         sprintf(x11_host, "");
334         x11_use_fields = USE_NO_FIELDS;
336         firewire_channel = 63;
337         firewire_port = 0;
338         strcpy(firewire_path, "/dev/video1394");
339         firewire_syt = 30000;
341         dv1394_channel = 63;
342         dv1394_port = 0;
343         strcpy(dv1394_path, "/dev/dv1394");
344         dv1394_syt = 30000;
346         brightness = 32768;
347         hue = 32768;
348         color = 32768;
349         contrast = 32768;
350         whiteness = 32768;
353 VideoOutConfig::~VideoOutConfig()
358 int VideoOutConfig::operator!=(VideoOutConfig &that)
360         return !(*this == that);
363 int VideoOutConfig::operator==(VideoOutConfig &that)
365         return (driver == that.driver) &&
366                 !strcmp(lml_out_device, that.lml_out_device) && 
367                 !strcmp(buz_out_device, that.buz_out_device) && 
368                 (buz_out_channel == that.buz_out_channel) && 
369                 (buz_swap_fields == that.buz_swap_fields) &&
370                 !strcmp(x11_host, that.x11_host) && 
371                 (x11_use_fields == that.x11_use_fields) &&
372                 (brightness == that.brightness) && 
373                 (hue == that.hue) && 
374                 (color == that.color) && 
375                 (contrast == that.contrast) && 
376                 (whiteness == that.whiteness) &&
378                 (firewire_channel == that.firewire_channel) &&
379                 (firewire_port == that.firewire_port) &&
380                 !strcmp(firewire_path, that.firewire_path) &&
381                 (firewire_syt == that.firewire_syt) &&
383                 (dv1394_channel == that.dv1394_channel) &&
384                 (dv1394_port == that.dv1394_port) &&
385                 !strcmp(dv1394_path, that.dv1394_path) &&
386                 (dv1394_syt == that.dv1394_syt);
394 VideoOutConfig& VideoOutConfig::operator=(VideoOutConfig &that)
396         copy_from(&that);
397         return *this;
400 void VideoOutConfig::copy_from(VideoOutConfig *src)
402         this->driver = src->driver;
403         strcpy(this->lml_out_device, src->lml_out_device);
404         strcpy(this->buz_out_device, src->buz_out_device);
405         this->buz_out_channel = src->buz_out_channel;
406         this->buz_swap_fields = src->buz_swap_fields;
407         strcpy(this->x11_host, src->x11_host);
408         this->x11_use_fields = src->x11_use_fields;
409         for(int i = 0; i < MAX_CHANNELS; i++) 
410                 this->do_channel[i] = src->do_channel[i];
412         firewire_channel = src->firewire_channel;
413         firewire_port = src->firewire_port;
414         strcpy(firewire_path, src->firewire_path);
415         firewire_syt = src->firewire_syt;
417         dv1394_channel = src->dv1394_channel;
418         dv1394_port = src->dv1394_port;
419         strcpy(dv1394_path, src->dv1394_path);
420         dv1394_syt = src->dv1394_syt;
423 char* VideoOutConfig::get_path()
425         switch(driver)
426         {
427                 case PLAYBACK_BUZ:
428                         return buz_out_device;
429                         break;
430                 case PLAYBACK_X11:
431                 case PLAYBACK_X11_XV:
432                         return x11_host;
433                         break;
434                 case PLAYBACK_DV1394:
435                         return dv1394_path;
436                         break;
437                 case PLAYBACK_FIREWIRE:
438                         return firewire_path;
439                         break;
440         };
441         return buz_out_device;
444 int VideoOutConfig::load_defaults(Defaults *defaults)
446         char string[BCTEXTLEN];
447         sprintf(string, "VIDEO_OUT_DRIVER");
448         driver = defaults->get(string, driver);
449         sprintf(string, "LML_OUT_DEVICE");
450         defaults->get(string, lml_out_device);
451         sprintf(string, "BUZ_OUT_DEVICE");
452         defaults->get(string, buz_out_device);
453         sprintf(string, "BUZ_OUT_CHANNEL");
454         buz_out_channel = defaults->get(string, buz_out_channel);
455         sprintf(string, "BUZ_SWAP_FIELDS");
456         buz_swap_fields = defaults->get(string, buz_swap_fields);
457         sprintf(string, "X11_OUT_DEVICE");
458         defaults->get(string, x11_host);
459         x11_use_fields = defaults->get("X11_USE_FIELDS", x11_use_fields);
463         sprintf(string, "VFIREWIRE_OUT_CHANNEL");
464         firewire_channel = defaults->get(string, firewire_channel);
465         sprintf(string, "VFIREWIRE_OUT_PORT");
466         firewire_port = defaults->get(string, firewire_port);
467         sprintf(string, "VFIREWIRE_OUT_PATH");
468         defaults->get(string, firewire_path);
469         sprintf(string, "VFIREWIRE_OUT_SYT");
470         firewire_syt = defaults->get(string, firewire_syt);
472         sprintf(string, "VDV1394_OUT_CHANNEL");
473         dv1394_channel = defaults->get(string, dv1394_channel);
474         sprintf(string, "VDV1394_OUT_PORT");
475         dv1394_port = defaults->get(string, dv1394_port);
476         sprintf(string, "VDV1394_OUT_PATH");
477         defaults->get(string, dv1394_path);
478         sprintf(string, "VDV1394_OUT_SYT");
479         dv1394_syt = defaults->get(string, dv1394_syt);
480         return 0;
483 int VideoOutConfig::save_defaults(Defaults *defaults)
485         char string[BCTEXTLEN];
486         sprintf(string, "VIDEO_OUT_DRIVER");
487         defaults->update(string, driver);
488         sprintf(string, "LML_OUT_DEVICE");
489         defaults->update(string, lml_out_device);
490         sprintf(string, "BUZ_OUT_DEVICE");
491         defaults->update(string, buz_out_device);
492         sprintf(string, "BUZ_OUT_CHANNEL");
493         defaults->update(string, buz_out_channel);
494         sprintf(string, "BUZ_SWAP_FIELDS");
495         defaults->update(string, buz_swap_fields);
496         sprintf(string, "X11_OUT_DEVICE");
497         defaults->update(string, x11_host);
498         defaults->update("X11_USE_FIELDS", x11_use_fields);
500         sprintf(string, "VFIREWIRE_OUT_CHANNEL");
501         defaults->update(string, firewire_channel);
502         sprintf(string, "VFIREWIRE_OUT_PORT");
503         defaults->update(string, firewire_port);
504         sprintf(string, "VFIREWIRE_OUT_PATH");
505         defaults->update(string, firewire_path);
506         sprintf(string, "VFIREWIRE_OUT_SYT");
507         defaults->update(string, firewire_syt);
509         sprintf(string, "VDV1394_OUT_CHANNEL");
510         defaults->update(string, dv1394_channel);
511         sprintf(string, "VDV1394_OUT_PORT");
512         defaults->update(string, dv1394_port);
513         sprintf(string, "VDV1394_OUT_PATH");
514         defaults->update(string, dv1394_path);
515         sprintf(string, "VDV1394_OUT_SYT");
516         defaults->update(string, dv1394_syt);
517         return 0;
520 int VideoOutConfig::total_playable_channels()
522         int result = 0;
523         for(int i = 0; i < MAXCHANNELS; i++)
524                 if(do_channel[i]) result++;
525         return result;
536 PlaybackConfig::PlaybackConfig()
538         aconfig = new AudioOutConfig(0);
539         vconfig = new VideoOutConfig;
540         sprintf(hostname, "localhost");
541         port = 23456;
544 PlaybackConfig::~PlaybackConfig()
546         delete aconfig;
547         delete vconfig;
550 PlaybackConfig& PlaybackConfig::operator=(PlaybackConfig &that)
552         copy_from(&that);
553         return *this;
556 void PlaybackConfig::copy_from(PlaybackConfig *src)
558         aconfig->copy_from(src->aconfig);
559         vconfig->copy_from(src->vconfig);
560         strcpy(hostname, src->hostname);
561         port = src->port;
564 int PlaybackConfig::load_defaults(Defaults *defaults)
566         char string[1024];
567         sprintf(string, "PLAYBACK_HOSTNAME");
568         defaults->get(string, hostname);
569         sprintf(string, "PLAYBACK_PORT");
570         port = defaults->get(string, port);
571         aconfig->load_defaults(defaults);
572         vconfig->load_defaults(defaults);
573         return 0;
576 int PlaybackConfig::save_defaults(Defaults *defaults)
578         char string[1024];
579         sprintf(string, "PLAYBACK_HOSTNAME");
580         defaults->update(string, hostname);
581         sprintf(string, "PLAYBACK_PORT");
582         defaults->update(string, port);
583         aconfig->save_defaults(defaults);
584         vconfig->save_defaults(defaults);
585         return 0;