From [via email@example.com]" <@21:1/5 to All on Mon Jan 2 20:51:56 2023
This is a port of FFmpeg 5.1.2 to MSDOS/DJGPP.
FFmpeg is the leading multimedia framework, able to decode, encode,
transcode, mux, demux, stream, filter and play pretty much anything
that humans and machines have created. It supports the most obscure
ancient formats up to the cutting edge. No matter if they were
designed by some standards committee, the community or a corporation.
FFmpeg Libraries for developers
libavutil is a library containing functions for simplifying programming,
including random number generators, data structures, mathematics routines,
core multimedia utilities, and much more.
libavcodec is a library containing decoders and encoders for audio/video
libavformat is a library containing demuxers and muxers for multimedia
libavdevice is a library containing input and output devices for grabbing
from and rendering to many common multimedia input/output software frameworks,
including Video4Linux, Video4Linux2, VfW, and ALSA.
libavfilter is a library containing media filters.
libswscale is a library performing highly optimized image scaling and color
space/pixel format conversion operations.
libswresample is a library performing highly optimized audio resampling,
rematrixing and sample format conversion operations.
DJGPP specific changes.
- The port has been configured and compiled with all assembler optimizations
disabled. This also includes the disableling of the run-time cpu detection
code. The goal is to have a library that only requires a i386 cpu. If
someone wants a specialized version of this library, he will have to build
his own version.
- The configure script has been modified to get the library configured and
compiled with DJGPP. A new target called "djgpp-dos" has been created to
control the DJGPP build. This is important because else the GNU default
target is used and this defaults some parameters for a 64 bit system
instead as for 32 a bit system. The diffs file documents the DJGPP specific
changes and is stored in the "djgpp" directory.
- There are no user visible changes.
- The port has been configured and compiled using the small djmake.sh script
stored in the "djgpp" directory. An inspection of the scripts shows the
configuration parameters that have been used.
- Except for one or two test programs that cannot be build all other test
programs can be compiled and their checks pass flawlessly.
- Network support may be possible using the latest DJGPP port of the Watt-32
library (aka wat3211b.zip) but will require some more porting effort that
I have not done.
- The port has been configured and compiled on WinXP SP3 and Win98SE.
It has not been possible to compile it on MSDOS 6.22 with DOSLFN v0.41f.
Due to the use of long file names it will not be possible to configure
and compile without LFN support. To compile the port, gcc1210, gpp1210
and bnu2351b are required. It was not possible to compile it using
gcc1030 and gpp1030.
- Compiling and running the test suite on Win98SE installed on a virtual
machine takes approximately 60 min.
- The html formatted documentation has been created on a Linux system
because the port of makeinfo is to old and does not provide the required
- Due to the size of the binaries and libraries, the port has been splited
into a binary archive and a library archive.
The binary archive contains the programs ffmpeg, a command line toolbox
to manipulate, convert and stream multimedia content and ffprobe,a simple
analysis tool to inspect multimedia content. ffplay, a minimalistic
multimedia player is not provided because it requires a port of the sdl2
library that is not available. May be it is possible to replace the sdl2
library by the last working DJGPP port of the Allegro library but I will
certainly not intend to port ffplay to Allegro.
- The library archive is not SFN clean. There is a major number of header
files that do not match the 8.3 file name rule of DOS. This will not be
fixed. Inventing new DOS conforming SFN that will never find their way
upstream is a waiste of time. If some one wants to use this library on
plain DOS, he will have to install and use a LFN driver.
- This port shall be a "prove of work", in the sense that it is still
possible to use DJGPP on Win98 or WinXP to "natively" configure and
compile a software package of the complexity like this one. It is
clear that the porter will need enough skills and insight in DJGPP,
MSDOS/FreeDOS and Posix. In general, modern software packages like
this one can no longer be compiled on plain DOS no matter if a LFN
driver is installed or not. The inherent limitation of plain DOS is
not only the SFN but also that the maximal path name length is limited
to 64 characters. This length gets some times exceeded by Posix tools
used to configure and compile the sources, when these tools create
temporary directories and files during the build process. Apart from
this inconvenience the time to configure and compile the sources is
dramaticaly longer on a plain DOS system than on a Windows system.
It is also clear that it may become necessary to port a lot of auxiliary
libraries and tools to be able to build a product like this one. E.g.:
the configure script requires pkg-config to check for the existence of
the different auxiliary libraries. Either the configuration script must
be adjusted for DJGPP or pkg-config must be ported. Or the alternative
of cross-compiling can be chosen.
Last but not least, I am not an user of FFmpeg neither on Linux nor on
DOS/Windows. I am also not lobbying for using it on plain DOS. In my
opinion, it makes no sense at all doing multi-media stuff on plain DOS
nowadays. I even do not know if this port performs well at all. This
means that if this port does not work as you expect, you are alone.
You can report issues and I may try to fix them or may not. But in
general I am not interested in this topic anymore and the only purpose
of this exercise was to demonstrate that software like this can still
be build using DJGPP as native building environment. For the people
interested in the output of the build process, the following output
files have been stored in the "djgpp" directory of the source archive:
_c_log.txt: console output of the configuration step.
_m_log.txt: console output of the compilation step.
_mc_log.txt: console output of the check step.
As usual, all djgpp specific files (diffs, README files, etc.) are stored
in the "djgpp" directory. The sources will be configured to be build in
the "0build" directory under the top src directory using the djmake.sh
Please read the docs to become familiar with this product.
Here is an extract of the CHANGES file showing the user visible changes
from the last port (FFmpeg 0.0.0) to this one: