X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;ds=sidebyside;f=cinelerra-5.1%2Fcinelerra%2Frecordconfig.C;fp=cinelerra-5.1%2Fcinelerra%2Frecordconfig.C;h=2e18dd59f24daae19988898233b3f6d039f81ce0;hb=30bdb85eb33a8ee7ba675038a86c6be59c43d7bd;hp=0000000000000000000000000000000000000000;hpb=52fcc46226f9df46f9ce9d0566dc568455a7db0b;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/recordconfig.C b/cinelerra-5.1/cinelerra/recordconfig.C new file mode 100644 index 00000000..2e18dd59 --- /dev/null +++ b/cinelerra-5.1/cinelerra/recordconfig.C @@ -0,0 +1,314 @@ + +/* + * CINELERRA + * Copyright (C) 2008 Adam Williams + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include "audiodevice.inc" +#include "bchash.h" +#include "playbackconfig.h" +#include "recordconfig.h" +#include "videodevice.inc" +#include + + + + + +AudioInConfig::AudioInConfig() +{ +#ifdef HAVE_ALSA + driver = AUDIO_ALSA; +#else + driver = AUDIO_OSS; +#endif + for(int i = 0; i < MAXDEVICES; i++) + { + oss_enable[i] = (i == 0); + sprintf(oss_in_device[i], "/dev/dsp"); + } + oss_in_bits = 16; + firewire_port = 0; + firewire_channel = 63; + strcpy(firewire_path, "/dev/raw1394"); + esound_in_server[0] = 0; + esound_in_port = 0; + + sprintf(alsa_in_device, "default"); + alsa_in_bits = 16; + in_samplerate = 48000; + strcpy(dvb_in_adapter,"/dev/dvb/adapter0"); + dvb_in_device = 0; + dvb_in_bits = 16; + v4l2_in_bits = 16; + channels = 2; + follow_audio = 1; + map51_2 = 1; + rec_gain = 1.0; +} + +AudioInConfig::~AudioInConfig() +{ +} + +int AudioInConfig::is_duplex(AudioInConfig *in, AudioOutConfig *out) +{ + if(in->driver == out->driver) + { + switch(in->driver) + { + case AUDIO_OSS: + case AUDIO_OSS_ENVY24: + return (!strcmp(in->oss_in_device[0], out->oss_out_device[0]) && + in->oss_in_bits == out->oss_out_bits); + break; + +// ALSA always opens 2 devices + case AUDIO_ALSA: + return 0; + break; + } + } + + return 0; +} + + +void AudioInConfig::copy_from(AudioInConfig *src) +{ + driver = src->driver; + + firewire_port = src->firewire_port; + firewire_channel = src->firewire_channel; + strcpy(firewire_path, src->firewire_path); + + strcpy(esound_in_server, src->esound_in_server); + esound_in_port = src->esound_in_port; + + for(int i = 0; i < MAXDEVICES; i++) + { + oss_enable[i] = src->oss_enable[i]; + strcpy(oss_in_device[i], src->oss_in_device[i]); + oss_in_bits = src->oss_in_bits; + } + + strcpy(alsa_in_device, src->alsa_in_device); + alsa_in_bits = src->alsa_in_bits; + in_samplerate = src->in_samplerate; + strcpy(dvb_in_adapter, src->dvb_in_adapter); + dvb_in_device = src->dvb_in_device; + dvb_in_bits = src->dvb_in_bits; + v4l2_in_bits = src->v4l2_in_bits; + channels = src->channels; + follow_audio = src->follow_audio; + map51_2 = src->map51_2; + rec_gain = src->rec_gain; +} + +AudioInConfig& AudioInConfig::operator=(AudioInConfig &that) +{ + copy_from(&that); + return *this; +} + +int AudioInConfig::load_defaults(BC_Hash *defaults) +{ + driver = defaults->get("R_AUDIOINDRIVER", driver); + firewire_port = defaults->get("R_AFIREWIRE_IN_PORT", firewire_port); + firewire_channel = defaults->get("R_AFIREWIRE_IN_CHANNEL", firewire_channel); + defaults->get("R_AFIREWIRE_IN_PATH", firewire_path); + for(int i = 0; i < MAXDEVICES; i++) + { + oss_enable[i] = defaults->getf(oss_enable[i], "R_OSS_ENABLE_%d", i); + defaults->getf(oss_in_device[i], "R_OSS_IN_DEVICE_%d", i); + } + oss_in_bits = defaults->get("R_OSS_IN_BITS", oss_in_bits); + defaults->get("R_ESOUND_IN_SERVER", esound_in_server); + esound_in_port = defaults->get("R_ESOUND_IN_PORT", esound_in_port); + + defaults->get("R_ALSA_IN_DEVICE", alsa_in_device); + alsa_in_bits = defaults->get("R_ALSA_IN_BITS", alsa_in_bits); + in_samplerate = defaults->get("R_IN_SAMPLERATE", in_samplerate); + defaults->get("R_AUDIO_DVB_IN_ADAPTER", dvb_in_adapter); + dvb_in_device = defaults->get("R_AUDIO_DVB_IN_DEVICE", dvb_in_device); + dvb_in_bits = defaults->get("R_DVB_IN_BITS", dvb_in_bits); + v4l2_in_bits = defaults->get("R_V4L2_IN_BITS", v4l2_in_bits); + channels = defaults->get("R_IN_CHANNELS", channels); + follow_audio = defaults->get("R_FOLLOW_AUDIO", follow_audio); + map51_2 = defaults->get("R_AUDIO_IN_MAP51_2", map51_2); + rec_gain = defaults->get("R_AUDIO_IN_GAIN", rec_gain); + return 0; +} + +int AudioInConfig::save_defaults(BC_Hash *defaults) +{ + defaults->update("R_AUDIOINDRIVER", driver); + defaults->update("R_AFIREWIRE_IN_PORT", firewire_port); + defaults->update("R_AFIREWIRE_IN_CHANNEL", firewire_channel); + defaults->update("R_AFIREWIRE_IN_PATH", firewire_path); + + for(int i = 0; i < MAXDEVICES; i++) + { + defaults->updatef(oss_enable[i], "R_OSS_ENABLE_%d", i); + defaults->updatef(oss_in_device[i], "R_OSS_IN_DEVICE_%d", i); + } + + defaults->update("R_OSS_IN_BITS", oss_in_bits); + defaults->update("R_ESOUND_IN_SERVER", esound_in_server); + defaults->update("R_ESOUND_IN_PORT", esound_in_port); + + defaults->update("R_ALSA_IN_DEVICE", alsa_in_device); + defaults->update("R_ALSA_IN_BITS", alsa_in_bits); + defaults->update("R_IN_SAMPLERATE", in_samplerate); + defaults->update("R_AUDIO_DVB_IN_ADAPTER", dvb_in_adapter); + defaults->update("R_AUDIO_DVB_IN_DEVICE", dvb_in_device); + defaults->update("R_DVB_IN_BITS", dvb_in_bits); + defaults->update("R_V4L2_IN_BITS", v4l2_in_bits); + defaults->update("R_IN_CHANNELS", channels); + defaults->update("R_FOLLOW_AUDIO", follow_audio); + defaults->update("R_AUDIO_IN_MAP51_2", map51_2); + defaults->update("R_AUDIO_IN_GAIN", rec_gain); + return 0; +} + + + + + + +VideoInConfig::VideoInConfig() +{ + driver = VIDEO4LINUX; + sprintf(v4l_in_device, "%s", "/dev/video0"); + sprintf(v4l2_in_device, "%s", "/dev/video0"); + sprintf(v4l2jpeg_in_device, "%s", "/dev/video0"); + v4l2jpeg_in_fields = 2; + sprintf(v4l2mpeg_in_device, "%s", "/dev/video0"); + sprintf(lml_in_device, "%s", "/dev/mvideo/stream"); + sprintf(buz_in_device, "%s", "/dev/video0"); + strcpy(dvb_in_adapter, "/dev/dvb/adapter0"); + dvb_in_device = 0; + sprintf(screencapture_display, "%s", ""); + firewire_port = 0; + firewire_channel = 63; + sprintf(firewire_path, "/dev/raw1394"); +// number of frames to read from device during video recording. +// capture_length = 15; + capture_length = 2; + w = 720; + h = 480; + in_framerate = 29.97; + follow_video = 1; +} + +VideoInConfig::~VideoInConfig() +{ +} + +char* VideoInConfig::get_path() +{ + switch(driver) { + case VIDEO4LINUX: return v4l_in_device; + case CAPTURE_JPEG_WEBCAM: + case CAPTURE_YUYV_WEBCAM: + case VIDEO4LINUX2: return v4l2_in_device; + case VIDEO4LINUX2JPEG: return v4l2jpeg_in_device; + case VIDEO4LINUX2MPEG: return v4l2mpeg_in_device; + case CAPTURE_BUZ: return buz_in_device; + case CAPTURE_DVB: return dvb_in_adapter; + } + return v4l_in_device; +} + +void VideoInConfig::copy_from(VideoInConfig *src) +{ + driver = src->driver; + strcpy(v4l_in_device, src->v4l_in_device); + strcpy(v4l2_in_device, src->v4l2_in_device); + v4l2jpeg_in_fields = src->v4l2jpeg_in_fields; + strcpy(v4l2jpeg_in_device, src->v4l2jpeg_in_device); + strcpy(v4l2mpeg_in_device, src->v4l2mpeg_in_device); + strcpy(lml_in_device, src->lml_in_device); + strcpy(buz_in_device, src->buz_in_device); + strcpy(dvb_in_adapter, src->dvb_in_adapter); + dvb_in_device = src->dvb_in_device; + strcpy(screencapture_display, src->screencapture_display); + firewire_port = src->firewire_port; + firewire_channel = src->firewire_channel; + strcpy(firewire_path, src->firewire_path); + capture_length = src->capture_length; + w = src->w; + h = src->h; + in_framerate = src->in_framerate; + follow_video = src->follow_video; +} + +VideoInConfig& VideoInConfig::operator=(VideoInConfig &that) +{ + copy_from(&that); + return *this; +} + +int VideoInConfig::load_defaults(BC_Hash *defaults) +{ + driver = defaults->get("R_VIDEO_IN_DRIVER", driver); + defaults->get("R_V4L_IN_DEVICE", v4l_in_device); + defaults->get("R_V4L2_IN_DEVICE", v4l2_in_device); + defaults->get("R_V4L2JPEG_IN_DEVICE", v4l2jpeg_in_device); + v4l2jpeg_in_fields = defaults->get("R_V4L2JPEG_IN_FIELDS", v4l2jpeg_in_fields); + defaults->get("R_V4L2MPEG_IN_DEVICE", v4l2mpeg_in_device); + defaults->get("R_LML_IN_DEVICE", lml_in_device); + defaults->get("R_BUZ_IN_DEVICE", buz_in_device); + defaults->get("R_VIDEO_DVB_IN_ADAPTER", dvb_in_adapter); + dvb_in_device = defaults->get("R_VIDEO_DVB_IN_DEVICE", dvb_in_device); + defaults->get("R_SCREENCAPTURE_DISPLAY", screencapture_display); + firewire_port = defaults->get("R_VFIREWIRE_IN_PORT", firewire_port); + firewire_channel = defaults->get("R_VFIREWIRE_IN_CHANNEL", firewire_channel); + defaults->get("R_VFIREWIRE_IN_PATH", firewire_path); + capture_length = defaults->get("R_VIDEO_CAPTURE_LENGTH", capture_length); + w = defaults->get("RECORD_W", w); + h = defaults->get("RECORD_H", h); + in_framerate = defaults->get("R_IN_FRAMERATE", in_framerate); + follow_video = defaults->get("R_FOLLOW_VIDEO", follow_video); + return 0; +} + +int VideoInConfig::save_defaults(BC_Hash *defaults) +{ + defaults->update("R_VIDEO_IN_DRIVER", driver); + defaults->update("R_V4L_IN_DEVICE", v4l_in_device); + defaults->update("R_V4L2_IN_DEVICE", v4l2_in_device); + defaults->update("R_V4L2JPEG_IN_DEVICE", v4l2jpeg_in_device); + defaults->update("R_V4L2JPEG_IN_FIELDS", v4l2jpeg_in_fields); + defaults->update("R_V4L2MPEG_IN_DEVICE", v4l2mpeg_in_device); + defaults->update("R_LML_IN_DEVICE", lml_in_device); + defaults->update("R_BUZ_IN_DEVICE", buz_in_device); + defaults->update("R_VIDEO_DVB_IN_ADAPTER", dvb_in_adapter); + defaults->update("R_VIDEO_DVB_IN_DEVICE", dvb_in_device); + defaults->update("R_SCREENCAPTURE_DISPLAY", screencapture_display); + defaults->update("R_VFIREWIRE_IN_PORT", firewire_port); + defaults->update("R_VFIREWIRE_IN_CHANNEL", firewire_channel); + defaults->update("R_VFIREWIRE_IN_PATH", firewire_path); + defaults->update("R_VIDEO_CAPTURE_LENGTH", capture_length); + defaults->update("RECORD_W", w); + defaults->update("RECORD_H", h); + defaults->update("R_IN_FRAMERATE", in_framerate); + defaults->update("R_FOLLOW_VIDEO", follow_video); + return 0; +} +