| 1 | = Windows 95/98 Support in PJLIB/PJSIP/PJMEDIA = |
| 2 | |
| 3 | PJLIB supports both the older Windows 95/98/ME family of Microsoft OSes (win95/win98/winme) and the more advanced Windows NT family of OS'es (WinNT/2000/XP/2003/Vista). However, support for Win95/98 is not turned ON by default so it needs a bit of tweaking in both configuration and project settings. |
| 4 | |
| 5 | This short article describes how to enable Win95/98 support in the software. The instructions here have been tested on Windows 98, however it should work on Windows 95 and Windows ME as well. |
| 6 | |
| 7 | Thanks '''Sebastian E. Ovide''' for reporting and testing this. |
| 8 | |
| 9 | |
| 10 | == Undefine WinNT in config_site.h == |
| 11 | |
| 12 | The following configuration is needed in your {{{pj/config_site.h}}} file to activate Win95/98 support: |
| 13 | |
| 14 | {{{ |
| 15 | #undef PJ_WIN32_WINNT |
| 16 | #define PJ_WIN32_WINNT 0x0300 |
| 17 | #undef _WIN32_WINNT |
| 18 | }}} |
| 19 | |
| 20 | These would disable the use of NT features in PJLIB's {{{os_core_win32.c}}} file. |
| 21 | |
| 22 | |
| 23 | == Disable Win32 Native File I/O in pjlib == |
| 24 | |
| 25 | Still in pjlib. Since version 0.5.10, pjlib uses Win32 native {{{CreateFile()/ReadFile()/WriteFile()}}} API for dealing with file I/O, since the ANSI {{{fopen()}}} has a limitation that it can only open a maximum of {{{FOPEN_MAX}}} simultaneous file, and the limit on Windows is about 64. But unfortunately, it looks like {{{CreateFile()}}} doesn't work as expected on Win98, although it doesn't look like it uses any NT specific features. |
| 26 | |
| 27 | So we need to disable Win32 native file I/O and replace it with ANSI stream. To do this: |
| 28 | |
| 29 | 1. Open pjlib project |
| 30 | 1. Exclude {{{file_io_win32.c}}} from pjlib build. |
| 31 | 1. Include (do not exclude) {{{file_io_ansi.c}}} in pjlib build. |
| 32 | |
| 33 | |
| 34 | |
| 35 | == Disable IoCompletionPort in pjlib == |
| 36 | |
| 37 | On '''Debug''' build, the Visual Studio workspace will use socket '''select()''' as the back-end implementation for PJLIB's '''ioqueue'''. This is fine. |
| 38 | |
| 39 | However, on '''Release''' build, the Visual Studio workspace will use WinNT '''IOCompletionPort''' (IOCP) as the '''ioqueue''' backend, and IOCP is not available on Win95/98/ME. |
| 40 | |
| 41 | As a workaround for this, open the '''pjlib''' project settings, and exclude {{{ioqueue_winnt.c}}} from the Release build, and include {{{ioqueue_select.c}}} in the Release build. |
| 42 | |
| 43 | |
| 44 | == Disable DirectSound in pjmedia == |
| 45 | |
| 46 | By default, PJMEDIA uses PortAudio on Windows with DirectSound set as the prefered sound backend. This may not work properly on Win95/98, and it may be better to disable DirectSound support and just use '''waveIn/waveOut''' device. |
| 47 | |
| 48 | To disable DirectSound in PortAudio in PJMEDIA: |
| 49 | 1. Open pjmedia project settings |
| 50 | 1. Add {{{PA_NO_DS}}} macro in the project's '''Preprocessor''' settings. |
| 51 | |
| 52 | |