Re: [GnomeMeeting-devel-list] WIN32 report
- From: Alejandro Blanco Martín <alexb tid es>
- To: GnomeMeeting development mailing list <gnomemeeting-devel-list gnome org>
- Subject: Re: [GnomeMeeting-devel-list] WIN32 report
- Date: Thu, 04 May 2006 19:33:44 +0200
Hello Michael,
I have downloaded your Ekiga-win32 from your web page and it works
perfectly!
I would like to prepare in my computer an enviroment in order to compile
ekiga´s sources and get the executable binaries, I would like to see how
to integrate audio/video recording. I have read in ekiga web page that
opal and pwlib libraries are needed, so I have looked for information
about these two libraries and I have found the next web page to compile
them (http://www.voxgratia.org/docs/pwlib_windows.html and
http://www.voxgratia.org/docs/opal_windows.html). I am trying to compile
it using Ms Visual C++ .net.
I have seen that your scritps to build the windows release include
makefile for opal and pwlib, do you think it would be better to use
another enviroment instead of MS Visual C++ .net and use the makefile
you provide? is it possible to use that makefiles and MS Visual C++? My
question may be are nonsense, I`m sorry, I´m newbie with C++ enviroments..
Thanks in adavance,
Alex.
Michael Rickmann escribió:
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
[Date Prev][
Date Next] [Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]