summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorSND\ckain_cp <SND\ckain_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2014-01-21 12:42:41 +0000
committerSND\ckain_cp <SND\ckain_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2014-01-21 12:42:41 +0000
commitfd5421e7c297666a3df6165dc421bd72f5c7f68b (patch)
tree35d90fe1094001c99f5d815bdfaca3f2de4deaeb /plugins
parent5c4f85b8aef9c03c8396edffa0b4c1e59d49f57a (diff)
downloadpcsxr-fd5421e7c297666a3df6165dc421bd72f5c7f68b.tar.gz
Xvideo: Use YUV mode from primary Xv adapter rather than RGB mode from non-primary adapter. Fixes Intel adapter black screen. Also Xv's sync on vblank is now cfg param and disabled by default.
git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@88391 e17a0e51-4ae3-4d35-97c3-1a29b211df97
Diffstat (limited to 'plugins')
-rwxr-xr-xplugins/dfxvideo/draw.c236
-rwxr-xr-xplugins/dfxvideo/gpu.c4
-rwxr-xr-xplugins/dfxvideo/gpucfg-0.1df/dfxvideo.ui21
-rwxr-xr-xplugins/dfxvideo/gpucfg-0.1df/main.c240
4 files changed, 278 insertions, 223 deletions
diff --git a/plugins/dfxvideo/draw.c b/plugins/dfxvideo/draw.c
index 8cdaa624..2215a699 100755
--- a/plugins/dfxvideo/draw.c
+++ b/plugins/dfxvideo/draw.c
@@ -44,6 +44,10 @@ int iFVDisplay = 0;
PSXPoint_t ptCursorPoint[8];
unsigned short usCursorActive = 0;
+// This could be used to select specific mode known to work.
+// TODO implement as a cfg param if needed for wider compatibility among GPU cards
+unsigned int uOverrideMode = 0x59565955U;
+
//unsigned int LUT16to32[65536];
//unsigned int RGBtoYUV[65536];
@@ -53,16 +57,15 @@ unsigned short usCursorActive = 0;
#include <X11/extensions/XShm.h>
int xv_port = -1;
int xv_id = -1;
-int xv_depth = 0;
-int yuv_port = -1;
-int yuv_id = -1;
-int use_yuv = 0;
-int xv_vsync = 0;
+int use_yuv = False;
+int xv_vsync = False;
XShmSegmentInfo shminfo;
int finalw,finalh;
-extern XvImage *XvShmCreateImage(Display*, XvPortID, int, char*, int, int, XShmSegmentInfo*);
+
+Screen* screen;
+//extern XvImage *XvShmCreateImage(Display*, XvPortID, int, char*, int, int, XShmSegmentInfo*);
#include <time.h>
@@ -982,7 +985,6 @@ void CreateDisplay(void)
{
XSetWindowAttributes winattr;
int myscreen;
- Screen * screen;
XEvent event;
XSizeHints hints;
XWMHints wm_hints;
@@ -1003,6 +1005,10 @@ void CreateDisplay(void)
XClassHint* classHint;
+ int yuv_port = -1, yuv_id = -1;
+ int rgb_port = -1, rgb_id = -1;
+ int xv_depth = 0;
+
// Open display
display = XOpenDisplay(NULL);
@@ -1013,109 +1019,139 @@ void CreateDisplay(void)
return;
}
- myscreen=DefaultScreen(display);
// desktop fullscreen switch
if (!iWindowMode) fx = 1;
screen=DefaultScreenOfDisplay(display);
+ myscreen=DefaultScreen(display);
+ root_window_id=RootWindow(display, myscreen);
+
+ //Look for an Xvideo RGB port
+ ret = XvQueryAdaptors(display, root_window_id, &p_num_adaptors, &ai);
+ if (ret != Success) {
+ if (ret == XvBadExtension)
+ printf("XvBadExtension returned at XvQueryExtension.\n");
+ else
+ if (ret == XvBadAlloc)
+ printf("XvBadAlloc returned at XvQueryExtension.\n");
+ else
+ printf("other error happaned at XvQueryAdaptors.\n");
+
+ exit(-1);
+ }
- root_window_id=RootWindow(display,DefaultScreen(display));
-
- //Look for an Xvideo RGB port
- ret = XvQueryAdaptors(display, root_window_id, &p_num_adaptors, &ai);
- if (ret != Success) {
- if (ret == XvBadExtension)
- printf("XvBadExtension returned at XvQueryExtension.\n");
- else
- if (ret == XvBadAlloc)
- printf("XvBadAlloc returned at XvQueryExtension.\n");
- else
- printf("other error happaned at XvQueryAdaptors.\n");
-
- exit(-1);
- }
-
- depth = DefaultDepth(display, myscreen);
+ depth = DefaultDepth(display, myscreen);
- for (i = 0; i < p_num_adaptors; i++) {
- p_num_ports = ai[i].base_id + ai[i].num_ports;
- for (p = ai[i].base_id; p < p_num_ports; p++) {
- fo = XvListImageFormats(display, p, &formats);
- for (j = 0; j < formats; j++) {
- //backup YUV mode
- //hmm, should I bother check guid == 55595659-0000-0010-8000-00aa00389b71?
- //and check byte order? fo[j].byte_order == LSBFirst
+ for (i = 0; i < p_num_adaptors; i++) {
+ p_num_ports = ai[i].base_id + ai[i].num_ports;
+ for (p = ai[i].base_id; p < p_num_ports; p++) {
+ fo = XvListImageFormats(display, p, &formats);
+ for (j = 0; j < formats; j++) {
+ //Check for compatible YUV modes for backup
+ //hmm, should I bother check guid == 55595659-0000-0010-8000-00aa00389b71?
+ //and check byte order? fo[j].byte_order == LSBFirst
#ifdef __BIG_ENDIAN__
- if ( fo[j].type == XvYUV && fo[j].bits_per_pixel == 16 && fo[j].format == XvPacked && strncmp("YUYV", fo[j].component_order, 5) == 0 )
+ if ( fo[j].type == XvYUV && fo[j].bits_per_pixel == 16 && fo[j].format == XvPacked && strncmp("YUYV", fo[j].component_order, 5) == 0 )
#else
- if ( fo[j].type == XvYUV && fo[j].bits_per_pixel == 16 && fo[j].format == XvPacked && strncmp("UYVY", fo[j].component_order, 5) == 0 )
+ if ( fo[j].type == XvYUV && fo[j].bits_per_pixel == 16 && fo[j].format == XvPacked && strncmp("UYVY", fo[j].component_order, 5) == 0 )
#endif
- {
- yuv_port = p;
- yuv_id = fo[j].id;
- }
- if (fo[j].type == XvRGB && fo[j].bits_per_pixel == 32)
- {
- xv_port = p;
- xv_id = fo[j].id;
- xv_depth = fo[j].depth;
- printf("RGB mode found. id: %x, depth: %d\n", xv_id, xv_depth);
-
- if (xv_depth != depth) {
- printf("Warning: Depth does not match screen depth (%d)\n", depth);
- }
- else {
- //break out of loops
- j = formats;
- p = p_num_ports;
- i = p_num_adaptors;
- }
- }
- }
- if (fo)
- XFree(fo);
- }
- }
- if (p_num_adaptors > 0)
- XvFreeAdaptorInfo(ai);
- if (xv_port == -1 && yuv_port == -1)
- {
- printf("RGB & YUV not found. Quitting.\n");
- exit(-1);
- }
- else if (xv_port == -1 && yuv_port != -1)
- {
- use_yuv = 1;
- printf("RGB not found. Using YUV.\n");
- xv_port = yuv_port;
- xv_id = yuv_id;
- }
- else if (xv_depth && xv_depth != depth && yuv_port != -1)
- {
- use_yuv = 1;
- printf("Acceptable RGB mode not found. Using YUV.\n");
- xv_port = yuv_port;
- xv_id = yuv_id;
- }
+ {
+ yuv_port = p;
+ yuv_id = fo[j].id;
+ }
+ if (fo[j].type == XvRGB && fo[j].bits_per_pixel == 32)
+ {
+ rgb_port = p;
+ rgb_id = fo[j].id;
+ xv_depth = fo[j].depth;
+ printf("RGB mode found. id: %x, depth: %d\n", xv_id, xv_depth);
+
+ if (xv_depth != depth) {
+ printf("Warning: Depth does not match screen depth (%d)\n", depth);
+ }
+ else {
+ //break out of loops
+ j = formats;
+ p = p_num_ports;
+ i = p_num_adaptors;
+ }
+ }
+
+ // Are we searching for a specific mode?
+ /*
+ if ( fo[j].id == uOverrideMode) {
+ if (fo[j].type == XvYUV) {
+ xv_id = yuv_id = fo[j].id;
+ xv_port = yuv_port = p;
+ use_yuv = True;
+ } else if (fo[j].type == XvRGB) {
+ xv_id = rgb_id = fo[j].id;
+ xv_port = rgb_port = p;
+ //xv_depth = fo[j].depth;
+ use_yuv = False;
+ }
+ // Get out
+ j = formats;
+ p = p_num_ports;
+ i = p_num_adaptors;
+ //break;
+ }*/
+ }
+ if (fo)
+ XFree(fo);
+ }
+ if (yuv_port != -1) i = p_num_adaptors; // TODO: at least intel adapters >0 just display black image
+ }
+ if (p_num_adaptors > 0)
+ XvFreeAdaptorInfo(ai);
+ if (xv_port == -1 && rgb_port == -1 && yuv_port == -1)
+ {
+ printf("RGB or YUV not available for this adapter. See xvinfo. Quitting.\n");
+ exit(-1);
+ }
+ else if (xv_port != -1) {
+ printf("Using explicit mode id = %x.\n", uOverrideMode);
+ }
+ else if (rgb_port == -1 && yuv_port != -1)
+ {
+ use_yuv = True;
+ printf("RGB not found. Using YUV.\n");
+ xv_port = yuv_port;
+ xv_id = yuv_id;
+ }
+ else if (xv_depth && xv_depth != depth && yuv_port != -1)
+ {
+ use_yuv = True;
+ printf("Acceptable RGB mode not found. Using YUV.\n");
+ xv_port = yuv_port;
+ xv_id = yuv_id;
+ }
+ else if (rgb_port != -1) {
+ xv_port = rgb_port;
+ xv_id = rgb_id;
+ }
- Atom atom_vsync = xv_intern_atom_if_exists(display, "XV_SYNC_TO_VBLANK");
- if (atom_vsync != None) {
- XvGetPortAttribute(display, xv_port, atom_vsync, &xv_vsync);
- XvSetPortAttribute(display, xv_port, atom_vsync, 0);
- }
+ if ((dwActFixes&0x800)) { // Try to use Xv's sync
+ printf("Jebac\n");
+ Atom atom_vsync = xv_intern_atom_if_exists(display, "XV_SYNC_TO_VBLANK");
+ if (atom_vsync != None) {
+ XvGetPortAttribute(display, xv_port, atom_vsync, &xv_vsync);
+ XvSetPortAttribute(display, xv_port, atom_vsync, 0);
+ }
+ }
-myvisual = 0;
+ myvisual = 0;
-if(XMatchVisualInfo(display,myscreen, depth, TrueColor, &vi))
- myvisual = &vi;
+ if(XMatchVisualInfo(display,myscreen, depth, TrueColor, &vi))
+ myvisual = &vi;
-if (!myvisual)
-{
- fprintf(stderr,"Failed to obtain visual!\n");
- DestroyDisplay();
- return;
-}
+ if (!myvisual)
+ {
+ fprintf(stderr,"Failed to obtain visual!\n");
+ DestroyDisplay();
+ return;
+ }
if(myvisual->red_mask==0x00007c00 &&
myvisual->green_mask==0x000003e0 &&
@@ -1576,7 +1612,6 @@ __inline void MaintainAspect(uint32_t * dx, uint32_t * dy, uint32_t * dw, uint32
void DoBufferSwap(void)
{
- Screen *screen;
Window _dw;
XvImage *xvi;
unsigned int dstx, dsty;
@@ -1607,14 +1642,11 @@ void DoBufferSwap(void)
}
XGetGeometry(display, window, &_dw, (int *)&_d, (int *)&_d, &_w, &_h, &_d, &_d);
- if (use_yuv) {
- xvi = XvShmCreateImage(display, yuv_port, yuv_id, 0, finalw, finalh, &shminfo);
- } else
- xvi = XvShmCreateImage(display, xv_port, xv_id, 0, finalw, finalh, &shminfo);
+ xvi = XvShmCreateImage(display, xv_port, xv_id, 0, finalw, finalh, &shminfo);
xvi->data = shminfo.shmaddr;
- screen=DefaultScreenOfDisplay(display);
+ if (!screen) screen=DefaultScreenOfDisplay(display);
//screennum = DefaultScreen(display);
if (!iWindowMode) {
diff --git a/plugins/dfxvideo/gpu.c b/plugins/dfxvideo/gpu.c
index 10baf531..a477a411 100755
--- a/plugins/dfxvideo/gpu.c
+++ b/plugins/dfxvideo/gpu.c
@@ -819,10 +819,10 @@ void ChangeWindowMode(void) // TOGGLE FULLSCREEN - WI
void ChangeWindowMode(void) // TOGGLE FULLSCREEN - WINDOW
{
- extern Display *display;
+ extern Display *display;
extern Window window;
extern int root_window_id;
- Screen *screen;
+ extern Screen *screen;
XSizeHints hints;
MotifWmHints mwmhints;
Atom mwmatom;
diff --git a/plugins/dfxvideo/gpucfg-0.1df/dfxvideo.ui b/plugins/dfxvideo/gpucfg-0.1df/dfxvideo.ui
index 2530f076..6acee0d6 100755
--- a/plugins/dfxvideo/gpucfg-0.1df/dfxvideo.ui
+++ b/plugins/dfxvideo/gpucfg-0.1df/dfxvideo.ui
@@ -597,6 +597,27 @@
<property name="y_options"></property>
</packing>
</child>
+ <child>
+ <object class="GtkCheckButton" id="checkFix12">
+ <property name="label" translatable="yes">Use Xv VSync on vblank</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="has_tooltip">True</property>
+ <property name="tooltip_text" translatable="yes">Try to use Xv's vsyncing if available (warning: may be unstable)</property>
+ <property name="use_underline">True</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">5</property>
+ <property name="bottom_attach">6</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
</object>
</child>
</object>
diff --git a/plugins/dfxvideo/gpucfg-0.1df/main.c b/plugins/dfxvideo/gpucfg-0.1df/main.c
index fdf02d24..805495e6 100755
--- a/plugins/dfxvideo/gpucfg-0.1df/main.c
+++ b/plugins/dfxvideo/gpucfg-0.1df/main.c
@@ -41,14 +41,14 @@ int set_limit (char *p, int len, int lower, int upper)
int val = 0;
if (p)
- val = atoi(p + len);
+ val = atoi(p + len);
/* printf("Checking for val %d greater than %d and lower than %d, ", val, lower, upper);*/
if (val < lower)
- val = lower;
+ val = lower;
if (val > upper)
- val = upper;
+ val = upper;
/* printf ("val is now %d\n", val);*/
- return val;
+ return val;
}
void on_about_clicked(GtkWidget *widget, gpointer user_data)
@@ -59,62 +59,64 @@ void on_about_clicked(GtkWidget *widget, gpointer user_data)
void on_fullscreen_toggled(GtkWidget *widget, gpointer user_data)
{
- GtkWidget *check, *resCombo2;
+ GtkToggleButton *check;
+ GtkComboBox *resCombo2;
- check = gtk_builder_get_object(builder, "checkFullscreen");
- resCombo2 = gtk_builder_get_object(builder, "resCombo2");
+ check = GTK_TOGGLE_BUTTON(gtk_builder_get_object(builder, "checkFullscreen"));
+ resCombo2 = GTK_COMBO_BOX(gtk_builder_get_object(builder, "resCombo2"));
- gtk_widget_set_sensitive(resCombo2, !gtk_toggle_button_get_active(check));
+ gtk_widget_set_sensitive(GTK_WIDGET(resCombo2), !gtk_toggle_button_get_active(check));
}
void on_use_fixes_toggled(GtkWidget *widget, gpointer user_data)
{
- GtkWidget *check, *table_fixes;
- check = gtk_builder_get_object(builder,"checkUseFixes");
+ GtkWidget *table_fixes;
+ GtkToggleButton* check;
+ check = GTK_TOGGLE_BUTTON(gtk_builder_get_object(builder,"checkUseFixes"));
- table_fixes = gtk_builder_get_object(builder,"table_fixes");
+ table_fixes = GTK_WIDGET(gtk_builder_get_object(builder,"table_fixes"));
/* Set the state of each of the fixes to the value of the use fixes toggle */
gtk_container_foreach (GTK_CONTAINER (table_fixes), (GtkCallback) gtk_widget_set_sensitive,
- (gpointer)gtk_toggle_button_get_active (check));
+ GINT_TO_POINTER(gtk_toggle_button_get_active (check)));
}
void on_fps_toggled(GtkWidget *widget, gpointer user_data)
{
GtkWidget *checkSetFPS, *checkAutoFPSLimit, *entryFPS;
- checkSetFPS = gtk_builder_get_object(builder, "checkSetFPS");
- checkAutoFPSLimit = gtk_builder_get_object(builder, "checkAutoFPSLimit");
- entryFPS = gtk_builder_get_object(builder, "entryFPS");
+ checkSetFPS = GTK_WIDGET(gtk_builder_get_object(builder, "checkSetFPS"));
+ checkAutoFPSLimit = GTK_WIDGET(gtk_builder_get_object(builder, "checkAutoFPSLimit"));
+ entryFPS = GTK_WIDGET(gtk_builder_get_object(builder, "entryFPS"));
gtk_widget_set_sensitive(entryFPS,
- gtk_toggle_button_get_active(checkSetFPS) &&
- !gtk_toggle_button_get_active(checkAutoFPSLimit));
- gtk_widget_set_sensitive(checkAutoFPSLimit, gtk_toggle_button_get_active(checkSetFPS));
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkSetFPS)) &&
+ !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkAutoFPSLimit)));
+ gtk_widget_set_sensitive(checkAutoFPSLimit, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkSetFPS)));
}
void OnConfigClose(GtkWidget *widget, gpointer user_data)
{
- gtk_widget_destroy(gtk_builder_get_object(builder, "CfgWnd"));
+ gtk_widget_destroy(GTK_WIDGET(gtk_builder_get_object(builder, "CfgWnd")));
exit(0);
}
int
main (int argc, char *argv[])
{
- GtkWidget *CfgWnd, *widget;
- FILE *in;char t[256];int len,val;
- float valf;
- char * pB, * p;
- char cfg[255];
- int i;
- char tempstr[50];
+ GtkWidget *CfgWnd, *widget;
+ FILE *in;char t[256];int len,val;
+ float valf;
+ char * pB, * p;
+ char cfg[255];
+ int i;
+ char tempstr[50];
#ifdef ENABLE_NLS
- setlocale (LC_ALL, "");
- bindtextdomain (GETTEXT_PACKAGE, LOCALE_DIR);
- bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
- textdomain (GETTEXT_PACKAGE);
+ setlocale (LC_ALL, "");
+ bindtextdomain (GETTEXT_PACKAGE, LOCALE_DIR);
+ bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+ textdomain (GETTEXT_PACKAGE);
#endif
if (argc < 2) {
@@ -145,7 +147,7 @@ main (int argc, char *argv[])
gtk_main();
return 0;
- }
+ }
else {
builder = gtk_builder_new();
@@ -272,7 +274,7 @@ main (int argc, char *argv[])
if(valf>500) valf=500;
}
sprintf(tempstr,"%.1f",valf);
- gtk_entry_set_text(gtk_builder_get_object(builder, "entryFPS"),tempstr);
+ gtk_entry_set_text(GTK_ENTRY(gtk_builder_get_object(builder, "entryFPS")), tempstr);
val=0;
if(pB)
@@ -291,7 +293,7 @@ main (int argc, char *argv[])
val = atoi(p + len);
}
- for (i=0; i<11; i++)
+ for (i=0; i<12; i++)
{
sprintf(tempstr, "checkFix%d", i+1);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (gtk_builder_get_object(builder,tempstr)), (val>>i)&1 );
@@ -300,27 +302,27 @@ main (int argc, char *argv[])
if(pB) free(pB);
- widget = gtk_builder_get_object(builder, "CfgWnd");
+ widget = GTK_WIDGET(gtk_builder_get_object(builder, "CfgWnd"));
g_signal_connect_data(G_OBJECT(widget), "destroy",
G_CALLBACK(SaveConfig), NULL, NULL, 0);
- widget = gtk_builder_get_object(builder, "btn_close");
+ widget = GTK_WIDGET(gtk_builder_get_object(builder, "btn_close"));
g_signal_connect_data(G_OBJECT(widget), "clicked",
G_CALLBACK(OnConfigClose), NULL, NULL, G_CONNECT_AFTER);
- widget = gtk_builder_get_object(builder, "checkFullscreen");
+ widget = GTK_WIDGET(gtk_builder_get_object(builder, "checkFullscreen"));
g_signal_connect_data(G_OBJECT(widget), "clicked",
G_CALLBACK(on_fullscreen_toggled), NULL, NULL, G_CONNECT_AFTER);
- widget = gtk_builder_get_object(builder, "checkUseFixes");
+ widget = GTK_WIDGET(gtk_builder_get_object(builder, "checkUseFixes"));
g_signal_connect_data(G_OBJECT(widget), "clicked",
G_CALLBACK(on_use_fixes_toggled), NULL, NULL, G_CONNECT_AFTER);
- widget = gtk_builder_get_object(builder, "checkSetFPS");
+ widget = GTK_WIDGET(gtk_builder_get_object(builder, "checkSetFPS"));
g_signal_connect_data(G_OBJECT(widget), "clicked",
G_CALLBACK(on_fps_toggled), NULL, NULL, G_CONNECT_AFTER);
- widget = gtk_builder_get_object(builder, "checkAutoFPSLimit");
+ widget = GTK_WIDGET(gtk_builder_get_object(builder, "checkAutoFPSLimit"));
g_signal_connect_data(G_OBJECT(widget), "clicked",
G_CALLBACK(on_fps_toggled), NULL, NULL, G_CONNECT_AFTER);
@@ -331,106 +333,106 @@ main (int argc, char *argv[])
gtk_main ();
}
- return 0;
+ return 0;
}
void SetCfgVal(char * pB,char * pE,int val)
{
- char * p, *ps, *pC;char t[32];
-
- sprintf(t,"%d",val);
-
- p=strstr(pB,pE);
- if(p)
- {
- p=strstr(p,"=");
- if(!p) return;
- p++;
- while(*p && *p!='\n' && (*p<'0' || *p>'9')) p++;
- if(*p==0 || *p=='\n') return;
- ps=p;
- while(*p>='0' && *p<='9') p++;
- pC=(char *)malloc(32767);
- strcpy(pC,p);
- strcpy(ps,t);
- strcat(pB,pC);
- free(pC);
- }
- else
- {
- strcat(pB,pE);
- strcat(pB," = ");
- strcat(pB,t);
- strcat(pB,"\n");
- }
+ char * p, *ps, *pC;char t[32];
+
+ sprintf(t,"%d",val);
+
+ p=strstr(pB,pE);
+ if(p)
+ {
+ p=strstr(p,"=");
+ if(!p) return;
+ p++;
+ while(*p && *p!='\n' && (*p<'0' || *p>'9')) p++;
+ if(*p==0 || *p=='\n') return;
+ ps=p;
+ while(*p>='0' && *p<='9') p++;
+ pC=(char *)malloc(32767);
+ strcpy(pC,p);
+ strcpy(ps,t);
+ strcat(pB,pC);
+ free(pC);
+ }
+ else
+ {
+ strcat(pB,pE);
+ strcat(pB," = ");
+ strcat(pB,t);
+ strcat(pB,"\n");
+ }
}
void SaveConfig(GtkWidget *widget, gpointer user_data)
{
- FILE *in;int len,val;char * pB;
- char cfg[255];
- char tempstr[50];
- int i;
- struct stat buf;
+ FILE *in;int len,val;char * pB;
+ char cfg[255];
+ char tempstr[50];
+ int i;
+ struct stat buf;
- pB=(char *)malloc(32767);
- memset(pB,0,32767);
+ pB=(char *)malloc(32767);
+ memset(pB,0,32767);
- strcpy(cfg, CONFIG_FILENAME);
+ strcpy(cfg, CONFIG_FILENAME);
- /* ADB TODO Why do we read this in just to replace it again? */
- in = fopen(cfg,READBINARY);
- if(in)
- {
- len = fread(pB, 1, 32767, in);
- fclose(in);
- }
+ /* ADB TODO Why do we read this in just to replace it again? */
+ in = fopen(cfg,READBINARY);
+ if(in)
+ {
+ len = fread(pB, 1, 32767, in);
+ fclose(in);
+ }
- val = gtk_combo_box_get_active (GTK_COMBO_BOX (gtk_builder_get_object(builder,"resCombo2")));
+ val = gtk_combo_box_get_active (GTK_COMBO_BOX (gtk_builder_get_object(builder,"resCombo2")));
- if (val == VIDMODE_320x200) { SetCfgVal(pB,"\nResX",320); SetCfgVal(pB,"\nResY",240); }
- else if (val == VIDMODE_640x480) { SetCfgVal(pB,"\nResX",640); SetCfgVal(pB,"\nResY",480); }
- else if (val == VIDMODE_800x600) { SetCfgVal(pB,"\nResX",800); SetCfgVal(pB,"\nResY",600); }
- else if (val == VIDMODE_1024x768) { SetCfgVal(pB,"\nResX",1024); SetCfgVal(pB,"\nResY",768); }
- else if (val == VIDMODE_1152x864) { SetCfgVal(pB,"\nResX",1152); SetCfgVal(pB,"\nResY",864); }
- else if (val == VIDMODE_1280x1024) { SetCfgVal(pB,"\nResX",1280); SetCfgVal(pB,"\nResY",1024); }
- else if (val == VIDMODE_1600x1200) { SetCfgVal(pB,"\nResX",1600); SetCfgVal(pB,"\nResY",1200); }
+ if (val == VIDMODE_320x200) { SetCfgVal(pB,"\nResX",320); SetCfgVal(pB,"\nResY",240); }
+ else if (val == VIDMODE_640x480) { SetCfgVal(pB,"\nResX",640); SetCfgVal(pB,"\nResY",480); }
+ else if (val == VIDMODE_800x600) { SetCfgVal(pB,"\nResX",800); SetCfgVal(pB,"\nResY",600); }
+ else if (val == VIDMODE_1024x768) { SetCfgVal(pB,"\nResX",1024); SetCfgVal(pB,"\nResY",768); }
+ else if (val == VIDMODE_1152x864) { SetCfgVal(pB,"\nResX",1152); SetCfgVal(pB,"\nResY",864); }
+ else if (val == VIDMODE_1280x1024) { SetCfgVal(pB,"\nResX",1280); SetCfgVal(pB,"\nResY",1024); }
+ else if (val == VIDMODE_1600x1200) { SetCfgVal(pB,"\nResX",1600); SetCfgVal(pB,"\nResY",1200); }
- val = gtk_combo_box_get_active (GTK_COMBO_BOX (gtk_builder_get_object(builder,"stretchCombo2")));
- SetCfgVal(pB,"\nNoStretch",val);
+ val = gtk_combo_box_get_active (GTK_COMBO_BOX (gtk_builder_get_object(builder,"stretchCombo2")));
+ SetCfgVal(pB,"\nNoStretch",val);
- val = gtk_combo_box_get_active (GTK_COMBO_BOX (gtk_builder_get_object(builder,"ditherCombo2")));
- SetCfgVal(pB,"\nDithering",val);
+ val = gtk_combo_box_get_active (GTK_COMBO_BOX (gtk_builder_get_object(builder,"ditherCombo2")));
+ SetCfgVal(pB,"\nDithering",val);
- val = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (gtk_builder_get_object(builder,"maintain43")));
- SetCfgVal(pB,"\nMaintain43",val);
+ val = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (gtk_builder_get_object(builder,"maintain43")));
+ SetCfgVal(pB,"\nMaintain43",val);
- val = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (gtk_builder_get_object(builder,"checkFullscreen")));
- SetCfgVal(pB,"\nFullScreen",val);
+ val = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (gtk_builder_get_object(builder,"checkFullscreen")));
+ SetCfgVal(pB,"\nFullScreen",val);
- val = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (gtk_builder_get_object(builder,"checkShowFPS")));
- SetCfgVal(pB,"\nShowFPS",val);
+ val = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (gtk_builder_get_object(builder,"checkShowFPS")));
+ SetCfgVal(pB,"\nShowFPS",val);
- val = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (gtk_builder_get_object(builder,"checkSetFPS")));
- SetCfgVal(pB,"\nUseFrameLimit",val);
+ val = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (gtk_builder_get_object(builder,"checkSetFPS")));
+ SetCfgVal(pB,"\nUseFrameLimit",val);
- val = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (gtk_builder_get_object(builder,"checkAutoFPSLimit")));
- SetCfgVal(pB,"\nFPSDetection",val+1);
+ val = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (gtk_builder_get_object(builder,"checkAutoFPSLimit")));
+ SetCfgVal(pB,"\nFPSDetection",val+1);
- val = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (gtk_builder_get_object(builder,"checkFrameSkip")));
- SetCfgVal(pB,"\nUseFrameSkip",val);
+ val = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (gtk_builder_get_object(builder,"checkFrameSkip")));
+ SetCfgVal(pB,"\nUseFrameSkip",val);
- //Framerate stored *10
- val = atof(gtk_entry_get_text(gtk_builder_get_object(builder, "entryFPS"))) * 10;
- SetCfgVal(pB,"\nFrameRate",val);
+ //Framerate stored *10
+ val = atof(gtk_entry_get_text(GTK_ENTRY(gtk_builder_get_object(builder, "entryFPS")))) * 10;
+ SetCfgVal(pB,"\nFrameRate",val);
- val = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (gtk_builder_get_object(builder,"checkUseFixes")));
- SetCfgVal(pB,"\nUseFixes",val);
+ val = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (gtk_builder_get_object(builder,"checkUseFixes")));
+ SetCfgVal(pB,"\nUseFixes",val);
val = 0;
- for (i=0; i<11; i++)
+ for (i=0; i<12; i++)
{
sprintf(tempstr, "checkFix%d", i+1);
if( gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (gtk_builder_get_object(builder,tempstr))) )
@@ -441,14 +443,14 @@ void SaveConfig(GtkWidget *widget, gpointer user_data)
- if((in=fopen(cfg, WRITEBINARY))!=NULL)
- {
- fwrite(pB,strlen(pB),1,in);
- fclose(in);
- }
+ if((in=fopen(cfg, WRITEBINARY))!=NULL)
+ {
+ fwrite(pB,strlen(pB),1,in);
+ fclose(in);
+ }
+
+ free(pB);
- free(pB);
-
// Close the window and exit control from the plugin
exit (0);
}