508 Commits

Author SHA1 Message Date
Le Philousophe
399e02e2a5 CRYOMNI3D: Add HNM6 image and video codec
This also adds a Cryo APC decoder in shared code.
2022-08-30 11:02:32 +02:00
Cameron Cawley
47755b4b38 COMMON: Make better use of inlining in BitStream functions 2022-08-28 00:05:31 +03:00
sluicebox
69662ee9a4 VIDEO: Fix QuickTime regression with mediaTime and dithering
Fixes an error when playing a QuickTime video that has a mediaTime set
on its first edit. This was caused by mediaTime changes in:
ef184a6cef98a1756c0669a03fa9b6fa2386b6e7

Those changes buffered frames during initialization so that the keyframe
and other frames don't play instead of the intended start frame that
mediaTime specifies. My mistake was that decoding isn't allowed during
VideoDecoder::loadStream(); VideoDecoder::setDitheringPalette() requires
that no frames have been decoded yet, and at least Director and Mohawk
call that.

Now the initial mediaTime buffering is delayed until the first decode.

Fixes bug #13479 where certain Myst videos error.
Fixes the opening movie in the Director game Chop Suey.
2022-08-04 15:49:30 -04:00
Cameron Cawley
e934ddeed5 VIDEO: Fix playing HNM videos without sound 2022-06-26 15:29:11 +02:00
D G Turner
3192daf0a7 VIDEO: Fix Signed vs. Unsigned Warnings in MTROPOLIS changes to QT Decoder 2022-06-16 21:58:09 +02:00
elasota
a4c8fb1b85 MTROPOLIS: Add support for QuickTime ranges, fix Obsidian Bureau light carousel triggering without interaction. 2022-06-16 21:58:09 +02:00
Cameron Cawley
b852af46c2 VIDEO: Add generic support for Smacker videos with custom signatures 2022-06-05 21:30:06 +02:00
Donovan Watteau
5b1ec56f96 JANITORIAL: Fix some lost or outdated URLs in comments 2022-05-19 07:57:31 +03:00
Roland van Laar
80f4f670f9 VIDEO: PACo decoder: skip lines in ouput
The amount of lines to skip is in `len`. This wasn't taken into account
when decoding the endcurrentline opcode.

Thanks to Kostya for resolving the issue.
2022-03-07 18:56:00 +01:00
Orgad Shaneh
6edd4656fb VIDEO: Fix compiler warnings on Windows 2022-03-06 18:34:52 +02:00
Misty De Meo
d4117f3887 VIDEO: mark PACo method as override 2022-03-06 09:48:52 +02:00
Roland van Laar
54240bdac6 VIDEO: PACo decoder: Add audio support
PACo audio is single channel 8 bit unsigned pcm.
The first sound packet is read to determine the sampling rate.
2022-03-05 22:11:40 +01:00
Roland van Laar
e931a1a985 VIDEO: PACo decoder: refactor for audio track
A PACo 'frame' has both the audio and video part of the frame. Where decodeNextFrame only handles video, readNextPacket enables the option to read a PACo frame and decode and queue both audio and video.
2022-03-05 22:11:40 +01:00
Eugene Sandulenko
fa9f8850bf
VIDEO: Added override keywords 2022-03-02 20:18:09 +01:00
Roland van Laar
f89084dd39 VIDEO: PACo decoder up debug level
PACo decoder for frames work aside from some artifacts.
Always outputting debug info is no longer needed.
2022-03-01 17:09:01 +01:00
Roland van Laar
810792195a VIDEO: PACo decoder: support custom palettes
Custom palettes inside PACo files are now parsed and imported.
2022-03-01 17:09:01 +01:00
Roland van Laar
d9222bed62 VIDEO: PACo decoder: fix dirty rect handler
Rects are left, top, right, bottom. Not left, top, width, height.
2022-03-01 17:09:01 +01:00
Roland van Laar
6a3b192ead VIDEO: PACo decoder framerate and palette
Move the VideoTrack to FixedRateVideoTrack. It handles frame duration
internally and removes the need to use nextFrameStartTime accounting.

Add getPalette function.
2022-02-28 19:33:37 +01:00
neuromancer
ce7886ab67 VIDEO: improved how forceSeekToFrame handles videos when frame to seek is close to the start of the video 2022-02-23 20:30:24 +01:00
Eugene Sandulenko
9a1aff9cf4
JANITORIAL: Fix indentation 2022-02-21 22:19:37 +01:00
Roland van Laar
24b7267b8b VIDEO: Implement decoder for PACo files
The code decodes PACo video frames.
Other features, such as audio and palette changes are detected
but not handled.

Format documentation: https://wiki.multimedia.cx/index.php?title=PACo
Thanks to Kostya for reverse engineering the format and the original C
code.
2022-02-21 19:11:28 +01:00
neuromancer
67ed302224 VIDEO: rewind when forceSeekToFrame is called with a frame near the start of the video 2022-02-13 18:28:36 +01:00
Filippos Karapetis
9088873baf VIDEO: Make getNextDirtyRect() in the Smacker decoder overridable
This is needed for the trecision Amiga video player, which currently
inherits from SmackerDecoder
2022-01-25 18:00:15 +02:00
Le Philousophe
0c178b00f4 VIDEO: Make unsigned -1 looking better 2022-01-12 09:10:40 +01:00
Le Philousophe
dec0427eda VIDEO: Fix HNM audio desynchronization 2022-01-12 09:10:40 +01:00
Filippos Karapetis
e843e6447f VIDEO: Add one more missing initializer in HNMDecoder's constructor 2022-01-09 18:53:26 +02:00
Filippos Karapetis
a848dc0d26 VIDEO: Add missing initializer in the HMN decoder 2022-01-09 18:50:16 +02:00
Le Philousophe
7c03cf5c50 VIDEO: Optimize HNM5 copies slightly 2022-01-09 13:57:00 +01:00
Le Philousophe
b6a1d3cf37 VIDEO: Small optimization on HNM4A decoder 2022-01-09 13:24:50 +01:00
Le Philousophe
bcd0e6f354 VIDEO: Don't make use of Stream classes
This slows down everything because we do a lot of small reads.
Read the whole frame once and read in the buffer.
2022-01-09 11:53:51 +01:00
Le Philousophe
6352de724a VIDEO: Implement UBB2 (aka HNM5) decoding 2022-01-08 22:24:14 +01:00
Le Philousophe
3f01f8301c VIDEO: Fix audio stereo decoding.
The differential PCM is applied for each channel independently
2022-01-08 22:24:14 +01:00
Le Philousophe
97b474e78a VIDEO: Fix uint usage
unisgned int is guaranteed to be at least 16 bits not more
2022-01-08 22:24:14 +01:00
Le Philousophe
c6383c472e VIDEO: Rework HNM decoder to make it handle different versions of format
For now nothing new: HNM4(A) format is supported and HNM5 has a
placeholder.
2022-01-08 22:24:14 +01:00
Paweł Kołodziejski
e3fc9b8226 VIDEO: Silence Sanitizer runtime error 2022-01-06 00:07:14 +01:00
Eugene Sandulenko
abea37c9bb
ALL: Update ScummVM project license to GPLv3+ 2021-12-26 18:48:43 +01:00
Paweł Kołodziejski
e6b5661725
VIDEO: Fixed compiler warning about dead code 2021-12-05 16:18:28 +01:00
Orgad Shaneh
2e68b4ffdc JANITORIAL: Use override
Using clang-tidy modernize-use-override
2021-11-14 02:59:23 +02:00
sluicebox
d5f6d2543f VIDEO: Fix QuickTime decoding when color depth is 32
Color depths greater than 32 have grayscale bit 0x20 set, but the
decoder incorrectly treats 32 as grayscale and and clears the bit,
leaving the color depth as zero and causing codecs to fail.

Confirmed correct behavior in the ffmpeg code that the decoder was
based off. The decoder was introduced with the Mohawk engine in
2009,so presumably no Mohawk movies had color depth 32.

Fixes videos in the Director game Virtual Cocktail Bar
2021-11-13 04:09:26 -06:00
sluicebox
dcd537337b VIDEO: Fix QuickTime decoding of edits with mediaTime
QuickTimeDecoder has a bug which causes the mediaTime offset to be
ignored when a track begins with an empty edit and is followed by an
edit with a non-zero mediaTime. This causes the KQ6 Mac opening movie
to start several tracks at unintended frames (they're never supposed to
be displayed) and the intended frames at the end of the edit to never
be displayed. (Bug #11085)
2021-11-12 18:47:22 +02:00
sluicebox
6e3403464b VIDEO: Limit QuickTime workaround to Riven
QuickTimeDecoder has a workaround for a video in a Spanish version of
Riven, but this workaround breaks valid QuickTime videos such as the
KQ6 Macintosh opening movie. (Bug #11085)

Until the original Riven video bug can be debugged to improve the
workaround, it is now disabled unless an engine enables it.

Workaround added in: b8abe400850a23d12fe5cdc24d7106820d0f13fd
2021-11-12 18:47:22 +02:00
sluicebox
946bb818ea VIDEO: QuickTime comments, mild cleanup 2021-11-12 18:47:22 +02:00
Orgad Shaneh
7a4e5612de JANITORIAL: Replace new[]/memset with new[]()
Mostly done using the following Ruby script:

(Dir.glob('**/*.cpp') + Dir.glob('**/*.h')).each do |file|
  s = File.read(file, encoding: 'iso8859-1')
  t = s.gsub(/(([\w_.\[\]]+)\s*=\s*new\s+\S+?\[[^\]]+?\](?!\())([^\{\}]*?)\n\s+memset\(\s*\2\s*,\s*0\s*,[^;]*;/m, '\1()\3')
  if t != s
    File.open(file, 'w') { |io| io.write(t) }
  end
end
2021-11-10 19:53:15 +01:00
neuromancer
aa6e7d4fc8 COMMON: added SmackerDecoder::forceSeekToFrame function 2021-10-31 19:15:06 +01:00
Cameron Cawley
8744e2300b VIDEO: Initial support for UBB2 videos
Currently only handles the audio track.
2021-10-04 18:37:25 +02:00
Paul Gilbert
f73034d55b AGS: Skip videos with unsupported video tracks rather than erroring 2021-09-25 10:28:47 -07:00
Martin Gerhardy
4b512d64b8 TWINE: added lba2 intro support 2021-09-10 19:20:56 +02:00
djsrv
2eca1126c5 VIDEO: Use Path type in VideoDecoder functions 2021-08-07 10:44:37 +02:00
Le Philousophe
d77074490f VIDEO: Fix int/int32 build failures
All of this is because Rect and Surface have moved to int32
2021-07-05 23:19:47 +02:00
djsrv
d0bca26bf7 VIDEO: Add default QuickTime palettes
This is used in L-Zone.
2021-06-29 22:48:14 -04:00