repair default keyframe load, tweak init default histogram threshold
[goodguy/history.git] / cinelerra-5.1 / cinelerra / vdeviceprefs.C
index ac396dc04774e35c0d8be9c88366a9781206f484..d20c0587b02098513e0cf222fe0b03750dd6e9a7 100644 (file)
@@ -22,6 +22,7 @@
 #include "bcsignals.h"
 #include "channeldb.h"
 #include "channelpicker.h"
+#include "clip.h"
 #include "edl.h"
 #include "edlsession.h"
 #include "formattools.h"
@@ -37,6 +38,7 @@
 #include "preferencesthread.h"
 #include "recordconfig.h"
 #include "recordprefs.h"
+#include "theme.h"
 #include <string.h>
 
 
@@ -50,7 +52,7 @@ VDevicePrefs::VDevicePrefs(int x,
 {
        this->pwindow = pwindow;
        this->dialog = dialog;
-       this->driver = -1;
+       this->driver = DEV_UNKNOWN;
        this->mode = mode;
        this->out_config = out_config;
        this->in_config = in_config;
@@ -72,7 +74,6 @@ VDevicePrefs::~VDevicePrefs()
        }
        if( config >= 0 )
                pwindow->mwindow->session->save_x11_host(config, out_config->x11_host);
-       pwindow->mwindow->channeldb_buz->save("channeldb_buz");
 }
 
 
@@ -95,8 +96,8 @@ void VDevicePrefs::reset_objects()
        firewire_path = 0;
        fields_title = 0;
        device_fields = 0;
+       use_direct_x11 = 0;
 
-       buz_swap_channels = 0;
        channel_picker = 0;
 }
 
@@ -129,8 +130,7 @@ int VDevicePrefs::initialize(int creation)
 
        switch(this->driver)
        {
-               case VIDEO4LINUX:
-                       create_v4l_objs();
+               case DEV_UNKNOWN:
                        break;
                case VIDEO4LINUX2:
                case CAPTURE_JPEG_WEBCAM:
@@ -146,13 +146,6 @@ int VDevicePrefs::initialize(int creation)
                case SCREENCAPTURE:
                        create_screencap_objs();
                        break;
-               case CAPTURE_LML:
-                       create_lml_objs();
-                       break;
-               case CAPTURE_BUZ:
-               case PLAYBACK_BUZ:
-                       create_buz_objs();
-                       break;
                case PLAYBACK_X11:
                case PLAYBACK_X11_XV:
                case PLAYBACK_X11_GL:
@@ -186,12 +179,12 @@ int VDevicePrefs::delete_objects()
 {
        delete output_title;
        delete channel_picker;
-       delete buz_swap_channels;
        delete device_title;
        delete device_text;
        delete dvb_adapter_device;
        delete follow_video_config;
        delete dvb_adapter_title;
+       delete use_direct_x11;
 
        delete port_title;
 
@@ -209,6 +202,13 @@ int VDevicePrefs::delete_objects()
        return 0;
 }
 
+int VDevicePrefs::get_h()
+{
+       int margin = pwindow->mwindow->theme->widget_border;
+       return BC_Title::calculate_h(dialog, "X", MEDIUMFONT) + margin +
+               BC_TextBox::calculate_h(dialog, MEDIUMFONT, 1, 1);
+}
+
 void VDevicePrefs::create_dvb_objs()
 {
        int x1 = x + menu->get_w() + 30;
@@ -233,74 +233,6 @@ void VDevicePrefs::create_dvb_objs()
        dialog->add_subwindow(follow_video_config);
 }
 
-int VDevicePrefs::create_lml_objs()
-{
-       char *output_char = 0;
-       int x1 = x + menu->get_w() + 5;
-       BC_Resources *resources = BC_WindowBase::get_resources();
-
-       switch(mode)
-       {
-               case MODEPLAY:
-                       output_char = out_config->lml_out_device;
-                       break;
-               case MODERECORD:
-                       output_char = in_config->lml_in_device;
-                       break;
-       }
-       dialog->add_subwindow(device_title = new BC_Title(x1, y, _("Device path:"), MEDIUMFONT, resources->text_default));
-       x1 += device_title->get_w() + 10;
-       dialog->add_subwindow(device_text = new VDeviceTextBox(x1, y + 20, output_char));
-       return 0;
-}
-
-int VDevicePrefs::create_buz_objs()
-{
-#ifdef HAVE_VIDEO4LINUX
-
-
-       char *output_char = 0;
-       int x1 = x + menu->get_w() + 5;
-       int x2 = x1 + 210;
-       int y1 = y;
-       BC_Resources *resources = BC_WindowBase::get_resources();
-
-       switch(mode)
-       {
-               case MODEPLAY:
-                       output_char = out_config->buz_out_device;
-                       break;
-               case MODERECORD:
-                       output_char = in_config->buz_in_device;
-                       break;
-       }
-       dialog->add_subwindow(device_title = new BC_Title(x1, y1, _("Device path:"), MEDIUMFONT, resources->text_default));
-
-       y1 += 20;
-       dialog->add_subwindow(device_text = new VDeviceTextBox(x1, y1, output_char));
-
-       if(driver == PLAYBACK_BUZ)
-       {
-               dialog->add_subwindow(buz_swap_channels =
-                       new VDeviceCheckBox(x2, y1, &out_config->buz_swap_fields, _("Swap fields")));
-       }
-       y1 += 30;
-       if(driver == PLAYBACK_BUZ)
-       {
-               dialog->add_subwindow(output_title = new BC_Title(x1, y1, _("Output channel:")));
-               y1 += 20;
-               channel_picker = new PrefsChannelPicker(pwindow->mwindow,
-                       this,
-                       pwindow->mwindow->channeldb_buz,
-                       x1,
-                       y1);
-               channel_picker->create_objects();
-       }
-#endif // HAVE_VIDEO4LINUX
-
-       return 0;
-}
-
 int VDevicePrefs::create_firewire_objs()
 {
        int *output_int = 0;
@@ -392,23 +324,6 @@ int VDevicePrefs::create_firewire_objs()
        return 0;
 }
 
-int VDevicePrefs::create_v4l_objs()
-{
-#ifdef HAVE_VIDEO4LINUX
-
-
-       char *output_char;
-       BC_Resources *resources = BC_WindowBase::get_resources();
-       int x1 = x + menu->get_w() + 5;
-       output_char = pwindow->thread->edl->session->vconfig_in->v4l_in_device;
-       dialog->add_subwindow(device_title = new BC_Title(x1, y, _("Device path:"), MEDIUMFONT, resources->text_default));
-       dialog->add_subwindow(device_text = new VDeviceTextBox(x1, y + 20, output_char));
-
-
-#endif // HAVE_VIDEO4LINUX
-       return 0;
-}
-
 int VDevicePrefs::create_v4l2_objs()
 {
        char *output_char;
@@ -428,7 +343,7 @@ int VDevicePrefs::create_v4l2jpeg_objs()
        char *output_char = &pwindow->thread->edl->session->vconfig_in->v4l2jpeg_in_device[0];
        dialog->add_subwindow(device_title = new BC_Title(x1, y, _("Device path:"), MEDIUMFONT, resources->text_default));
        dialog->add_subwindow(device_text = new VDeviceTextBox(x1, y + 20, output_char));
-       x1 += max(device_title->get_w(),device_text->get_w()) + 5;
+       x1 += bmax(device_title->get_w(),device_text->get_w()) + 5;
        int *output_int = &pwindow->thread->edl->session->vconfig_in->v4l2jpeg_in_fields;
        fields_title = new BC_Title(x1, y, _("Fields:"), MEDIUMFONT, resources->text_default);
        dialog->add_subwindow(fields_title);
@@ -469,7 +384,6 @@ int VDevicePrefs::create_x11_objs()
 {
        char *output_char;
        BC_Resources *resources = BC_WindowBase::get_resources();
-       int x1 = x + menu->get_w() + 5;
        output_char = out_config->x11_host;
        const char *x11_display;
        switch( pwindow->thread->current_dialog ) {
@@ -481,9 +395,21 @@ int VDevicePrefs::create_x11_objs()
                x11_display = _("Default B Display:");  break;
                break;
        }
-       dialog->add_subwindow(device_title = new BC_Title(x1, y, x11_display,
+       int x1 = menu->get_x() + menu->get_w() + 10;
+       int y1 = menu->get_y();
+       if( driver == PLAYBACK_X11 ) y1 -= 10;
+       dialog->add_subwindow(device_title = new BC_Title(x1, y1+4, x11_display,
                        MEDIUMFONT, resources->text_default));
-       dialog->add_subwindow(device_text = new VDeviceTextBox(x1, y + 20, output_char));
+       int x2 = x1 + device_title->get_w() + 10, dy = device_title->get_h();
+       dialog->add_subwindow(device_text = new VDeviceTextBox(x2, y1, output_char));
+       if( driver == PLAYBACK_X11 ) {
+               int y2 = device_text->get_h();
+               if( dy < y2 ) dy = y2;
+               y1 += dy + 5;
+               use_direct_x11 = new BC_CheckBox(x1, y1,
+                       &out_config->use_direct_x11, _("use direct x11 render if possible"));
+               dialog->add_subwindow(use_direct_x11);
+       }
        return 0;
 }
 
@@ -510,8 +436,8 @@ char* VDriverMenu::driver_to_string(int driver)
 {
        switch(driver)
        {
-               case VIDEO4LINUX:
-                       sprintf(string, VIDEO4LINUX_TITLE);
+               case DEV_UNKNOWN:
+                       sprintf(string, DEV_UNKNOWN_TITLE);
                        break;
                case VIDEO4LINUX2:
                        sprintf(string, VIDEO4LINUX2_TITLE);
@@ -531,12 +457,6 @@ char* VDriverMenu::driver_to_string(int driver)
                case SCREENCAPTURE:
                        sprintf(string, SCREENCAPTURE_TITLE);
                        break;
-               case CAPTURE_BUZ:
-                       sprintf(string, CAPTURE_BUZ_TITLE);
-                       break;
-               case CAPTURE_LML:
-                       sprintf(string, CAPTURE_LML_TITLE);
-                       break;
 #ifdef HAVE_FIREWIRE
                case CAPTURE_FIREWIRE:
                        sprintf(string, CAPTURE_FIREWIRE_TITLE);
@@ -557,12 +477,6 @@ char* VDriverMenu::driver_to_string(int driver)
                case PLAYBACK_X11_GL:
                        sprintf(string, PLAYBACK_X11_GL_TITLE);
                        break;
-               case PLAYBACK_LML:
-                       sprintf(string, PLAYBACK_LML_TITLE);
-                       break;
-               case PLAYBACK_BUZ:
-                       sprintf(string, PLAYBACK_BUZ_TITLE);
-                       break;
 #ifdef HAVE_FIREWIRE
                case PLAYBACK_FIREWIRE:
                        sprintf(string, PLAYBACK_FIREWIRE_TITLE);
@@ -584,10 +498,6 @@ void VDriverMenu::create_objects()
 {
        if(do_input)
        {
-#ifdef HAVE_VIDEO4LINUX
-               add_item(new VDriverItem(this, VIDEO4LINUX_TITLE, VIDEO4LINUX));
-#endif
-
 #ifdef HAVE_VIDEO4LINUX2
                add_item(new VDriverItem(this, VIDEO4LINUX2_TITLE, VIDEO4LINUX2));
                add_item(new VDriverItem(this, CAPTURE_JPEG_WEBCAM_TITLE, CAPTURE_JPEG_WEBCAM));
@@ -597,14 +507,13 @@ void VDriverMenu::create_objects()
 #endif
 
                add_item(new VDriverItem(this, SCREENCAPTURE_TITLE, SCREENCAPTURE));
-#ifdef HAVE_VIDEO4LINUX
-               add_item(new VDriverItem(this, CAPTURE_BUZ_TITLE, CAPTURE_BUZ));
-#endif
 #ifdef HAVE_FIREWIRE
                add_item(new VDriverItem(this, CAPTURE_FIREWIRE_TITLE, CAPTURE_FIREWIRE));
                add_item(new VDriverItem(this, CAPTURE_IEC61883_TITLE, CAPTURE_IEC61883));
 #endif
+#ifdef HAVE_DVB
                add_item(new VDriverItem(this, CAPTURE_DVB_TITLE, CAPTURE_DVB));
+#endif
        }
        else
        {
@@ -615,7 +524,6 @@ void VDriverMenu::create_objects()
                if(get_opengl_server_version() >= 103)
                        add_item(new VDriverItem(this, PLAYBACK_X11_GL_TITLE, PLAYBACK_X11_GL));
 #endif
-               add_item(new VDriverItem(this, PLAYBACK_BUZ_TITLE, PLAYBACK_BUZ));
 #ifdef HAVE_FIREWIRE
                add_item(new VDriverItem(this, PLAYBACK_FIREWIRE_TITLE, PLAYBACK_FIREWIRE));
                add_item(new VDriverItem(this, PLAYBACK_DV1394_TITLE, PLAYBACK_DV1394));
@@ -731,7 +639,7 @@ int VScalingItem::handle_event()
 
 
 VScalingEquation::VScalingEquation(int x, int y, int *output)
- : BC_PopupMenu(x, y, 175, interpolation_to_string(*output))
+ : BC_PopupMenu(x, y, 240, interpolation_to_string(*output))
 {
        this->output = output;
 }