1
0
Fork 0
Commit graph

4952 commits

Author SHA1 Message Date
krcroft
37a1610f1c Bump the MP3 fast-seek-table's version identifier
The hashest generated by xxHash have changed between v0.7.2 and v0.7.3,
therefore the hashes in prior-genreated lookup tables will no longer
be valid. By bumping the file's identifier, the fast-seek code will
reject these older files and regenerate new ones.
2020-03-07 01:46:55 +01:00
krcroft
27538eeb2e Update the existing PVS false-positives for xxHash v0.7.3 2020-03-07 01:46:55 +01:00
Yann Collet
355b6faba7 Sync xxHash with upstream (v0.7.3) 2020-03-07 01:46:55 +01:00
Joshua Fern
f2029d71d8 Update copyright dates to 2020 2020-03-07 00:18:01 +01:00
krcroft
46044b6387 Use static assert feedback instead of convoluted template failure messages 2020-03-06 19:21:44 +01:00
krcroft
16dbd1cec6 Whitespace cleanup 2020-03-06 19:21:44 +01:00
krcroft
08c6fc10c1 Add a signed integer ceiling divide function 2020-03-06 19:21:44 +01:00
krcroft
be643d66b1 Cleanup file size and header length check 2020-03-06 19:21:44 +01:00
krcroft
51284a6d42 Simplify conditional logic 2020-03-06 19:21:44 +01:00
krcroft
0227fae934 Use auto when type is explicitly cast 2020-03-06 19:21:44 +01:00
krcroft
96a9723df5 Drop "[bug]" postfix in assets 2020-03-06 19:21:44 +01:00
krcroft
1e65bb2cdc Curtail an excessively noisy DEBUG output case
Some games repeatedly query for the first track's position during
playback, perhaps as a dual-purpose "CDROM health/heart-beat"
check.

This excessive console output in DEBUG mode tends to add far more
noise than signal, and prevents the maintainer from seeing the
overall flow of the CDROM calls.
2020-03-06 19:21:44 +01:00
krcroft
818e923296 Let the code describe the functionality when reading sectors
Moves to using a member vector to provide a persistent buffer,
instead of repeatedly allocating and deleting memory on every
invocation (during DAE, this can be called hundreds of times
per second, with requsts of up 24 sectors or ~56KB of memory
per call).

The buffer is only resized upward, which avoids 'zig-zag'
re-allocations when switching between raw (2352-byte) and cooked
(2048-byte) sectors.

Only writes as much data was was successfully read into
the DOS program's buffer, avoiding (potential) garbage-fill.
2020-03-06 19:21:44 +01:00
krcroft
c76cc09d97 Add support for mono tracks when performing DAE (digital-audio-extraction)
This commit:
- Adds more sanity checks and comments
- Lets the seek() function to take care of monitoring the track's
  post-seek decode position, instead of managing it in read(..).
- Adds in-place conversion from mono-to-stereo
- Adds micro-second-level DEBUG timing around the mono converter
- Makes use of the more intuitive ceil_divide() support function
  to avoid excessive casting and floating-point conversion.
2020-03-06 19:21:44 +01:00
krcroft
cff1ded8e9 Improve seeking for audio tracks
This commit:
- Comments why we convert from byte-to-time offset.
- Checks for underlying stream validity before seeking.
- Tracks the new as-seeked decode position.
- Skips seeking if it's unecessary.
- Adds DEBUG messaging and a warning if the seek took
  longer than that of an average physical CDROM.
2020-03-06 19:21:44 +01:00
krcroft
e8e9e0ef4f Replace code with existing support function 2020-03-06 19:21:44 +01:00
krcroft
c7eebacde9 Allow the code to describe the return value 2020-03-06 19:21:44 +01:00
krcroft
9bebfdabd3 Make more logic assertions and cleanup multi-line comments 2020-03-06 19:21:44 +01:00
krcroft
1393c1316c Refine types and eliminate implicit-casting and magic-numbers
The commit refines several types to their logical use-cases.
For example, a CDROM will at-most contain 400,000 sectors and be
less than 1B bytes in size. Likewise, both are 'physical'
quantities and this should always be zero-or-greater
(therefore, uint32_t is used).

Fortunately, there are almost no cases where these values are
overloaded to mean something else (ie: negative return codes to
indicate failure).

Besides eliminating many implicit cast warnings, differing-signed
comparison warnings, and overflowable type-cast warnings, the
more correct use of types helps logically bound expectations of the
values they contain, which should improve maintainability.
2020-03-06 19:21:44 +01:00
krcroft
459f7d32f9 Define more CD-DA magic numbers 2020-03-06 19:21:44 +01:00
krcroft
a757f41ead Add an integer division and ceiling helper function
Many parts of the code (especially audio) deal with discrete integer
(and always-positive) values that need to be scaled up or down by
some divisor. This functions provides a fast and an easy way to
divide and round up, while avoiding the CPU burden and excessive
wordiness associated with casting to and from floating point and
back to integer again.
2020-03-06 19:21:44 +01:00
krcroft
619b21425a Handle and fix small-block reads from decoder interfaces
Context: The codecs implement a read-write callback function
(RWops) used to read N bytes from the underlying binary stream
into a buffer. In some cases, a codec might only return a
subset of the requested bytes and requires subsequent read()
requests to get the remaining bytes. Internally, the codec
might have to reposition or run second decode sequence to get
the bytes.

The RWops callbacks for the various codecs were inconsistently
implemented: some performed the above mentioned subsequent
re-read attempts while others simply accepted whatever we got
after the first read attempt. This commit makes them the same
by attempting to re-read ("get the requested bytes at all
costs") until the underly stream goes EOF.

Some of these RWops functions also contained a book-keeping
bug from upstream that resulted in over-reading after
under-delivering on the first read attempt. The concequence
being that too much data would be written to the buffer
(writing past its end) and leaving the underlying stream's
file position too-far-forward.
2020-03-06 19:21:44 +01:00
krcroft
d2979db2fe Cleanup debug and on-error handling 2020-03-06 19:21:44 +01:00
krcroft
9828f2d912 Perform some minor house-keeping in the mp3 and seek handler
- Cleanup some types where precision is lost.
- Explicitly cast between types (fixes all effc++ warnings)
- Simplify lossy and cast-heavy floating-point coversions with ceil_divide
2020-03-06 19:21:44 +01:00
krcroft
fc9711c932 Use C++ typing in Opus decoding interface
Also add more assert checks.
2020-03-06 19:21:44 +01:00
krcroft
c484ef7e21 Migrate Opus decoding interface to C++ 2020-03-06 19:21:44 +01:00
Patryk Obara
89af984362 Set default display units as px in svg icons
Also, remove Gnome template layer from small icons and fill the license
field.
2020-03-05 22:12:28 +01:00
Patryk Obara
c9d5f51142 Remove .ico LFS artifact from repo
Storing it as LFS artifact causes more problems than it's worth.
2020-03-05 22:12:28 +01:00
Patryk Obara
a68b44ee3f Document icons rendering for all OSes 2020-03-05 22:12:28 +01:00
Patryk Obara
efd5ca6ad4 Use rsvg-convert to render icons in all sizes
Remove pre-rendered icons, we don't need them any more. Vector designs
for small icons are grouped in small-svg directory - these are slightly
less detailed and adjusted to render more clearly in specific sizes.
2020-03-05 22:12:28 +01:00
Patryk Obara
e508702e4d Remove .icns file from repo
MacOS release builds should rebuild these icons during build instead.
2020-03-05 22:12:28 +01:00
krcroft
a6251d7e9f Fix iterator-past-end-of-container Coverity warning 2020-03-04 16:03:40 +01:00
krcroft
eef8c51419 Address code-review comments (squash-me) 2020-03-04 05:11:40 +01:00
krcroft
908ddafb5f Reserve the trackFile shared_ptr prior to its test 2020-03-04 05:11:40 +01:00
krcroft
5bbf876f0c Expand trackFile's shared_ptr life 2020-03-04 05:11:40 +01:00
krcroft
1d123367a5 Use MixerObject's singleton-pattern to manage the channel 2020-03-04 05:11:40 +01:00
krcroft
91cd907c4e Migrate some members of the Player class to smart pointers
1. Moves the mutex and mixer channel members to unique pointers
2. Moves the trackFile to a weak pointer
3. Move member initialization to the class definition

This class still retains a raw *cd member, however fixing this
ripples up to the array of [26] CD images, and across more
code that generically deals with mount points; so this work
remains to do.
2020-03-04 05:11:40 +01:00
krcroft
2d76132a8b Constrain the Gravis UltraSound's playback frequency selection
The Gravis UltraSound emulator generates undistorted stereo output
at playback frequency of 11025 Hz and powers-of-two multiples greater,
such 22050 Hz and 44100 Hz.

At frequencies that are not multiples of 11025 Hz; such as
49716, 48000, 32000, 16000, and 8000 Hz; playback is distorted by
the addition of ringing and stereo separation is lost.

This commit constrains the configurable GUS playback frequencies
to 44100, 22050, and 11025 Hz.

It also corrects the spelling of "UltraSound", which was previously
spelled "Ultrasound".
2020-03-03 07:16:03 +01:00
Patryk Obara
f7745adf92 Update allowed warnings limits 2020-03-01 21:23:04 +01:00
Patryk Obara
e9d18387b7 Fix format warnings in cpu (dyn_fpu_esc3) 2020-03-01 21:23:04 +01:00
Patryk Obara
7f0d07fd1b Fix format warnings in cpu (dh_fpu_esc3) 2020-03-01 21:23:04 +01:00
Patryk Obara
716acd09e8 Prevent null pointer dereference when checking program args
First parameter to function 'strchr' is marked a nonnull. If null is
passed as args there's no point in looking for flags.  This function is
always used in the beginning of all internal macros through HELP macro
to detect /? flag.
2020-03-01 21:23:04 +01:00
Patryk Obara
2bbe181ccb Avoid integer overflow in bios_disk
Coverity warns about potential integer overflow on 32-bit value before
widening the calculation result to 64-bit.
2020-03-01 21:23:04 +01:00
Patryk Obara
19d1caa483 Avoid division by zero when initializing pcspeaker
Coverity detects possible division by zero in calculation of spkr.min_tr
few lines below; this is a false-positive issue detected by Coverity,
but only bacause int value passed by user has a set of pre-determined
values.  We can as well make sure that value is never going to be
smaller than the minimum allowed.
2020-03-01 21:23:04 +01:00
Patryk Obara
d47450c6d7 Fix memory leak in dos_execute 2020-03-01 21:23:04 +01:00
Patryk Obara
8b1603c5f2 Avoid counting duplicate warnings
Prevents inflation of effc++ warnings number.
2020-03-01 21:23:04 +01:00
Anton Shepelev
9ae663ca12 Include <ctype.h> to declare toupper() 2020-03-01 21:13:19 +01:00
Patryk Obara
c155400979 Use _fileno only with MSVC compiler
Function fileno is available in POSIX environment out of the box. On
non-POSIX platforms, it might be missing in some cases when compiling
with -std=c++11, as it's outside of strict ANSI compatibility.
2020-03-01 21:13:19 +01:00
Patryk Obara
9fc21dc294 Allow GNU extensions for GCC to avoid MinGW bugs
Most MinGW versions work correctly with and without _POSIX_C_SOURCE
or XOPEN macros [1] and don't need any special handling, but some
installations refuse to work correctly.

To be more precise: *some* MinGW installations turn off POSIX support
after turning on -std=c++11 WITHOUT -ansi -Wpedantic, -pedantic-errors
and similar.  This behaviour is inconsistent between various Windows
versions and MinGW distributions and manifests itself only when using
GCC (Clang behaves correctly).

[1] https://www.gnu.org/software/libc/manual/html_node/Feature-Test-Macros.html
2020-03-01 21:13:19 +01:00
numberZero
a37664872c Use sh-compatible syntax in configure.ac 2020-03-01 19:12:56 +01:00