summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron Plattner <aplattner@nvidia.com>2008-06-17 23:14:16 -0700
committerAaron Plattner <aplattner@nvidia.com>2008-06-17 23:14:16 -0700
commitb09f48e801893b864af2b866829bc9ee35555418 (patch)
tree47fd2479db68eb5ac8320600a7387d8d3bb5d39a
parent89e149a1c5f497b6a841e334ccc90755e6a721b4 (diff)
173.14.09173.14.09
-rw-r--r--src/gtk+-2.x/ctkdisplayconfig-utils.c7
-rw-r--r--src/gtk+-2.x/ctkdisplayconfig.c12
-rw-r--r--src/gtk+-2.x/ctkgvo-sync.c76
-rw-r--r--src/libXNVCtrl/NVCtrl.h7
4 files changed, 82 insertions, 20 deletions
diff --git a/src/gtk+-2.x/ctkdisplayconfig-utils.c b/src/gtk+-2.x/ctkdisplayconfig-utils.c
index 8b41571..6b5f823 100644
--- a/src/gtk+-2.x/ctkdisplayconfig-utils.c
+++ b/src/gtk+-2.x/ctkdisplayconfig-utils.c
@@ -282,12 +282,10 @@ static nvModeLinePtr modeline_parse(const char *modeline_str,
if (!str) goto fail;
/* Read dot clock */
-
str = parse_read_name(str, &(modeline->data.clock), 0);
if (!str) goto fail;
/* Read the mode timings */
-
str = parse_read_integer(str, &(modeline->data.hdisplay));
str = parse_read_integer(str, &(modeline->data.hsyncstart));
str = parse_read_integer(str, &(modeline->data.hsyncend));
@@ -765,8 +763,11 @@ static void display_remove_modelines(nvDisplayPtr display)
if (display) {
while (display->modelines) {
modeline = display->modelines;
- free(modeline->data.clock);
display->modelines = display->modelines->next;
+ free(modeline->xconfig_name);
+ free(modeline->data.identifier);
+ free(modeline->data.comment);
+ free(modeline->data.clock);
free(modeline);
}
display->num_modelines = 0;
diff --git a/src/gtk+-2.x/ctkdisplayconfig.c b/src/gtk+-2.x/ctkdisplayconfig.c
index ee4c133..2061434 100644
--- a/src/gtk+-2.x/ctkdisplayconfig.c
+++ b/src/gtk+-2.x/ctkdisplayconfig.c
@@ -6547,13 +6547,19 @@ static XConfigModeLinePtr makeXConfigModeline(nvModeLinePtr modeline)
*xconf_modeline = modeline->data;
if (modeline->xconfig_name) {
- xconf_modeline->identifier = strdup(modeline->xconfig_name);
+ xconf_modeline->identifier = xconfigStrdup(modeline->xconfig_name);
+
} else if (modeline->data.identifier) {
- xconf_modeline->identifier = strdup(modeline->data.identifier);
+ xconf_modeline->identifier = xconfigStrdup(modeline->data.identifier);
+
+ }
+
+ if (modeline->data.clock) {
+ xconf_modeline->clock = xconfigStrdup(modeline->data.clock);
}
if (modeline->data.comment) {
- xconf_modeline->comment = strdup(modeline->data.comment);
+ xconf_modeline->comment = xconfigStrdup(modeline->data.comment);
}
return xconf_modeline;
diff --git a/src/gtk+-2.x/ctkgvo-sync.c b/src/gtk+-2.x/ctkgvo-sync.c
index 3aeb4be..d7b108f 100644
--- a/src/gtk+-2.x/ctkgvo-sync.c
+++ b/src/gtk+-2.x/ctkgvo-sync.c
@@ -135,10 +135,19 @@ static const char * __hsync_delay_help =
"The HSync Delay entry allows you to specify the horizontal delay between the "
"input signal and the output signal generated by the SDI device.";
+static const char * __hsync_advance_help =
+"The HSync Advance entry allows you to specify the horizontal advance between "
+"the input signal and the output signal generated by the SDI device.";
+
static const char * __vsync_delay_help =
"The VSync Delay entry allows you to specify the vertical delay between the "
"input signal and the output signal generated by the SDI device.";
+static const char * __vsync_advance_help =
+"The VSync Advance entry allows you to specify the vertical advance between "
+"the input signal and the output signal generated by the SDI device.";
+
+
/**** Utility Functions ******************************************************/
@@ -329,6 +338,8 @@ GtkWidget* ctk_gvo_sync_new(NvCtrlAttributeHandle *handle,
gint val, i, width, height;
ReturnStatus ret;
gint row;
+
+ const char *help_text;
/* make sure we have a handle */
@@ -540,7 +551,7 @@ GtkWidget* ctk_gvo_sync_new(NvCtrlAttributeHandle *handle,
/*
- * Synchronization Delay
+ * Synchronization Delay/Advance
*/
ctk_gvo_get_video_format_resolution(ctk_gvo_sync->input_video_format,
@@ -548,7 +559,12 @@ GtkWidget* ctk_gvo_sync_new(NvCtrlAttributeHandle *handle,
/* NV_CTRL_GVO_SYNC_DELAY_PIXELS */
- label = gtk_label_new("HSync Delay:");
+ if ( ctk_gvo_sync->caps && NV_CTRL_GVO_CAPABILITIES_ADVANCE_SYNC_SKEW ) {
+ label = gtk_label_new("HSync Advance:");
+ } else {
+ label = gtk_label_new("HSync Delay:");
+ }
+
gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
gtk_table_attach(GTK_TABLE(table), label, 0, 1, row, row+1,
GTK_FILL, GTK_FILL, TABLE_PADDING, TABLE_PADDING);
@@ -558,11 +574,19 @@ GtkWidget* ctk_gvo_sync_new(NvCtrlAttributeHandle *handle,
if (width < 1) width = 1;
+ if ( ctk_gvo_sync->caps && NV_CTRL_GVO_CAPABILITIES_ADVANCE_SYNC_SKEW ) {
+ width = INT_MAX;
+ help_text = __hsync_advance_help;
+ } else {
+ help_text = __hsync_delay_help;
+ }
+
ctk_gvo_sync->hsync_delay_spin_button =
gtk_spin_button_new_with_range(0.0, width, 1);
- ctk_config_set_tooltip(ctk_config, ctk_gvo_sync->hsync_delay_spin_button,
- __hsync_delay_help);
+ ctk_config_set_tooltip(ctk_config,
+ ctk_gvo_sync->hsync_delay_spin_button,
+ help_text);
gtk_spin_button_set_value
(GTK_SPIN_BUTTON(ctk_gvo_sync->hsync_delay_spin_button), val);
@@ -588,7 +612,11 @@ GtkWidget* ctk_gvo_sync_new(NvCtrlAttributeHandle *handle,
/* NV_CTRL_GVO_SYNC_DELAY_LINES */
- label = gtk_label_new("VSync Delay:");
+ if ( ctk_gvo_sync->caps && NV_CTRL_GVO_CAPABILITIES_ADVANCE_SYNC_SKEW ) {
+ label = gtk_label_new("VSync Advance:");
+ } else {
+ label = gtk_label_new("VSync Delay:");
+ }
gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
gtk_table_attach(GTK_TABLE(table), label, 0, 1, row, row+1,
GTK_FILL, GTK_FILL, TABLE_PADDING, TABLE_PADDING);
@@ -598,12 +626,19 @@ GtkWidget* ctk_gvo_sync_new(NvCtrlAttributeHandle *handle,
if (height < 1) height = 1;
+ if ( ctk_gvo_sync->caps && NV_CTRL_GVO_CAPABILITIES_ADVANCE_SYNC_SKEW ) {
+ height = INT_MAX;
+ help_text = __vsync_advance_help;
+ } else {
+ help_text = __vsync_delay_help;
+ }
+
ctk_gvo_sync->vsync_delay_spin_button =
gtk_spin_button_new_with_range(0.0, height, 1);
-
- ctk_config_set_tooltip(ctk_config, ctk_gvo_sync->vsync_delay_spin_button,
- __vsync_delay_help);
-
+
+ ctk_config_set_tooltip(ctk_config,
+ ctk_gvo_sync->vsync_delay_spin_button,
+ help_text);
gtk_spin_button_set_value
(GTK_SPIN_BUTTON(ctk_gvo_sync->vsync_delay_spin_button), val);
@@ -1014,6 +1049,11 @@ static void update_delay_spin_buttons_range(CtkGvoSync *ctk_gvo_sync)
{
gint w, h;
+ if ( ctk_gvo_sync->caps && NV_CTRL_GVO_CAPABILITIES_ADVANCE_SYNC_SKEW ) {
+ // No need to reset max values
+ return;
+ }
+
ctk_gvo_get_video_format_resolution(ctk_gvo_sync->input_video_format,
&w, &h);
@@ -1021,7 +1061,7 @@ static void update_delay_spin_buttons_range(CtkGvoSync *ctk_gvo_sync)
(GTK_SPIN_BUTTON(ctk_gvo_sync->hsync_delay_spin_button), 0, w);
gtk_spin_button_set_range
(GTK_SPIN_BUTTON(ctk_gvo_sync->vsync_delay_spin_button), 0, h);
-
+
} /* update_delay_spin_buttons_range() */
@@ -1498,10 +1538,18 @@ GtkTextBuffer* ctk_gvo_sync_create_help(GtkTextTagTable *table,
ctk_help_para(b, &i, __sync_format_help);
ctk_help_heading(b, &i, "Sync Status");
ctk_help_para(b, &i, __sync_status_help);
- ctk_help_heading(b, &i, "HSync Delay");
- ctk_help_para(b, &i, __hsync_delay_help);
- ctk_help_heading(b, &i, "VSync Delay");
- ctk_help_para(b, &i, __vsync_delay_help);
+
+ if ( ctk_gvo_sync->caps && NV_CTRL_GVO_CAPABILITIES_ADVANCE_SYNC_SKEW ) {
+ ctk_help_heading(b, &i, "HSync Advance");
+ ctk_help_para(b, &i, __hsync_advance_help);
+ ctk_help_heading(b, &i, "VSync Advance");
+ ctk_help_para(b, &i, __vsync_advance_help);
+ } else {
+ ctk_help_heading(b, &i, "HSync Delay");
+ ctk_help_para(b, &i, __hsync_delay_help);
+ ctk_help_heading(b, &i, "VSync Delay");
+ ctk_help_para(b, &i, __vsync_delay_help);
+ }
ctk_help_finish(b);
diff --git a/src/libXNVCtrl/NVCtrl.h b/src/libXNVCtrl/NVCtrl.h
index 96e073d..d231372 100644
--- a/src/libXNVCtrl/NVCtrl.h
+++ b/src/libXNVCtrl/NVCtrl.h
@@ -1130,6 +1130,9 @@
* NV_CTRL_GVO_SYNC_DELAY_PIXELS - controls the delay between the
* input sync and the output sync in numbers of pixels from hsync;
* this is a 12 bit value.
+ *
+ * If the NV_CTRL_GVO_CAPABILITIES_ADVANCE_SYNC_SKEW bit is set,
+ * then setting this value will set an advance instead of a delay.
*/
#define NV_CTRL_GVO_SYNC_DELAY_PIXELS 79 /* RW- */
@@ -1139,6 +1142,9 @@
* NV_CTRL_GVO_SYNC_DELAY_LINES - controls the delay between the input
* sync and the output sync in numbers of lines from vsync; this is a
* 12 bit value.
+ *
+ * If the NV_CTRL_GVO_CAPABILITIES_ADVANCE_SYNC_SKEW bit is set,
+ * then setting this value will set an advance instead of a delay.
*/
#define NV_CTRL_GVO_SYNC_DELAY_LINES 80 /* RW- */
@@ -2716,6 +2722,7 @@
#define NV_CTRL_GVO_CAPABILITIES_COMPOSITE_TERMINATION 0x00000004
#define NV_CTRL_GVO_CAPABILITIES_SHARED_SYNC_BNC 0x00000008
#define NV_CTRL_GVO_CAPABILITIES_MULTIRATE_SYNC 0x00000010
+#define NV_CTRL_GVO_CAPABILITIES_ADVANCE_SYNC_SKEW 0x00000020
/*