Re: [GnomeMeeting-devel-list] WIN32 report
- From: Damien Sandras <dsandras seconix com>
- To: GnomeMeeting development mailing list <gnomemeeting-devel-list gnome org>
- Subject: Re: [GnomeMeeting-devel-list] WIN32 report
- Date: Tue, 11 Apr 2006 19:15:35 +0200
Hi Michael,
I have followed your work through Bugzilla, and pfiuu, I'm impressed.
Thanks a lot, and thanks to Julien and Jan who are keeping things alive
when I'm away!
Le dimanche 09 avril 2006 à 13:01 +0200, Michael Rickmann a écrit :
> Hello everybody,
> here a short report on my work to bring Ekiga-Win32 to beta. Currently, I have
> six patches on stock and I have a first version of an installer. Patches and
> my Makefile you find attached to this mail, the rest at
> http://wwwuser.gwdg.de/~mrickma/ekiga .
> As to the patches, 1 and 6 fix bugs, 2 to 4 add missing features. I really
> made shure that there are no unbalanced #ifdef s this time.
>
> 1) adresses the hung SDL-Window. On Windows a window can only be destroyed by
> the thread that created it. SDL-Video switching is done from
> gm_main_window_update_video in src/gui/main.cpp which, however, is used by
> two threads. So Julien suggested to append the video switching to the Glib
> main loop using g_idle_add and to provide wrapper functions for the WIN32
> case. I have named these functions when_idle_init_SDL_video and
> when_idle_quit_SDL_video, they are idle-added from
> gm_mw_init_fullscreen_video_window and gm_mw_destroy_fullscreen_video_window.
> So video switching is done somewhen and gm_main_window_update_video has to
> know when it may send output to the SDL screen. I used mv->screen for that
> purpuse. It is set after the screen has been obtained in
> when_idle_init_SDL_video, and it is cleared before the SDL video is shutdown
> in when_idle_quit_SDL_video.
> How is this handled in gm_main_window_update_video? The local helper variable
> fs_active becomes set from mv->screen in WIN32 and indicates a usable SDL
> window, whereas display_type, an argument to the function, is used to
> initiate switching if necessary. So there is a delay between display_type and
> fs_active. On fullscreen init this is handled nicely if all SDL drawing
> depends on fs_active / mv-screen - I had to add only one more if() to the
> code. In case of shutdown, however, a high magnification frame appeared in
> Ekiga`s Gtk window, which may not be safe. So I omit video output completely
> for the case (display_type != FULLSCREEN) && fs_active.
> Three more points: SDL_WM_ToggleFullScreen is not available for WIN32. You
> have to supply SDL_FULLSCREEN with the flags to SDL_SetVideoMode to get a
> real hardware fullscreen. In my patch this can be enabled if you compile with
> -DWIN32_FULLSCREEN. Since we are still in the debugging phase this is not so
> desirable.
> For WIN32 the SDL-event queue is emptied completely during
> gm_mw_poll_fullscreen_video_window. This makes the sluggish switching a bit
> more responsive.
> I had to stick with SDL_InitSubSystem / SDL_QuitSubSystem. Freeing the surface
> only was insufficient to remove that SDL_app window.
>
> 2) Because of readability this patch which only changes the WinMain function
> is at second position. It adds a system wide mutex showing that Ekiga is
> running. A second instance of Ekiga also tries to create this mutex and will
> decide to shutdown when that mutex already exists. In addition, the installer
> can query this mutex and ask the user to shutdown Ekiga before installing a
> new version.
>
> 3) Adding more SDL initialisation and shutdown code from the WIN32 SDL sources
> to WinMain. On Windows XP Ekiga runs without this. But it seems required for
> a more generally usable minimal Win32 SDL app.
>
> 4) Add command line parsing and stdout/stderr redirection: We need the command
> line to enable debug output and to have Ekiga open a sip: URL from a
> different program. I have tried several approaches to get arguments into
> **argv which are compatible with GOption and gtk_init. There seem to be two
> requirements, UTF-8 and let Windows pathname backslashes pass. Currently, a
> proper commandline is obtained by GetCommandLine () and parsed in a selfmade
> routine which is actually a short form of that contained in the SDL sources.
> Output redirection works if Ekiga is started from a directory for which the
> user has write access.
>
> 5) Enable Ekiga's help for the WIN32 case of DISABLE_GNOME. The contents entry
> in the help popup had to be reenabled in src/gui/main.cpp. And in
> src/gui/callbacks.cpp, function help_cb proper handling has to be supplied.
> My patch assumes that the help can be found in
> DATADIR\help\locale\index.xhtml. The routine tries to guess under which
> locale Ekiga is running ( g_win32_getlocale () is supplied by Glib ), tries
> to open DATADIR\help\en\index.xhtml e.g., fails and falls back to opening
> DATADIR\help\C\index.xhtml. For for French it would have succeded
> immediately. Opening is done with the Windows shell api function ShellExecute
> which tries to open the index.xhtml with the program associated with the
> xhtml extension. Internet Explorer refuses to decode XHTML if the file
> doesn't have an html extension and its XHTML decoding seems buggy. So we have
> to advise users to install Firefox which does a perfect job. How I create
> Ekiga's help in xhtml format you can see in the attached Makefile. In brief,
> make in ekiga/help and run the index.xml files through xsltproc using
> db2html.xsl.
>
> 6) Stuttering audio in the audio test of the setup druid, i.e in
> src/devices/audio.cpp: For the time being, and on the two XP Home machines I
> have tried, Windows cannot cope with the 16000 Hz CreateOpenedChannel request
> in function GMAudioRP::Main (). Changing this to 8000 fixes the stuttering
> and increasing the buffers to 3 (Opal does that for WIN32 too) fixes the
> clicks which otherwise become audible without stuttering.
> Perhaps this patch is a bit premature, since I have seen in pwlib-cvs and
> opal-cvs ChangeLog that Craig Southeren is working on "media format changes",
> whatever that means.
> By the way, there is some inconsistency in the code of src/devices/audio.cpp
> for Linux too. GMAudioRP::Main () operates on 16000 Hz sampling frequency but
> GMAudioTester::Main () allocates a buffer for 8000 Hz only. And - sorry for
> this one, I dislike mutexes - the tester.buffer_ring_access_mutex.Wait ()
> and .Signal () are not necessary as only one thread writes to the
> tester.buffer_ring and each holds its private buffer.
>
> Finally a Windows setup.exe for Ekiga: There seems to be only one free
> installer available, Inno Setup at http://www.jrsoftware.org/isinfo.php. It
> seems very good, is an open source Delphi program and runs flawlessly under
> Linux Wine (requires X though). In my Windows registry I discovered that even
> Skype uses Inno.
> The Gimp for Windows also uses Inno Setup for its installer
> ( http://gimp-win.sourceforge.net/ ) and Jernej Simoncic has made the sources
> for his Gimp and Gtk+ install scripts freely available.
> Importantly, the Gtk+ installer sets the Windows environment path for the Gtk+
> 2 dlls. I checked it on a Gtk+ free XP Home system - cleaned by hand. During
> my earlier trials I came across a machine where that did not work. So our
> milage may vary.
> I could adapt large parts of the Gimp installer script for Ekiga, i.e. all the
> Gtk, CPU and stray DLL checks. Thanks to Jernej Simoncic work for The Gimp
> the first version of Ekiga's Win32 installer is already fairly advanced. You
> find it in the "iss" directory of
> http://wwwuser.gwdg.de/~mrickma/ekiga/ekiga_build.tgz. As Julien suggested,
> the [Registry] section of ekiga.iss tries to make sip: URLs known to Windows
> and to associate Ekiga with them. I do not know yet whether it works.
>
> As to my build process and to the principle differences to Kilian's current
> Makefile:
> 1) I have created a rc subdirectory wich holds the program icon and a ekiga.rc
> which includes versioning and copyright information for the executable and is
> run through windres
> 2) for ekiga/src/ekiga.exe:
> SDL is linked in dynamically
> .... cd ekiga/help; $(MAKE)
> 3) for dist/zips: ...
> install -m 755 bin/SDL.dll dist/Ekiga
> ... generation of manuals ...
> cd $$manu ; $(XSLTPROC) $(BUILDROOT)/ekiga/help/$$manu/ekiga.xml > index.
> $(MANUAL_EXT) ; \
> ... generation of the setup executable ...
> wine "c:\Programme/Inno Setup 5\Compil32.exe" /cc iss/ekiga.iss
>
> Still anybody reading ??
> Regards
> Michael
> _______________________________________________
> Gnomemeeting-devel-list mailing list
> Gnomemeeting-devel-list gnome org
> http://mail.gnome.org/mailman/listinfo/gnomemeeting-devel-list
--
_ Damien Sandras
(o-
//\ Ekiga Softphone: http://www.ekiga.org/
v_/_ FOSDEM 2006 : http://www.fosdem.org/
SIP Phone : sip:dsandras ekiga net
sip:600000 ekiga net
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]