Commit Graph
107 Commits
Author SHA1 Message Date
Malhar 2af98018a9 VIDEO: QTVR: Memory Optimization for Upscaled Panorama
Previous approach used two Surface Objects to store the 1D and 2D
upscaled panorama used while projecting the panorama in higher
quailty respectively causing higher memory usage

Instead use only one Surface object to store the upscaled panorama
which stores both 1D and 2D upscaled panorama as and if needed.

Minor fixes and formatting
2025-04-26 19:36:15 +08:00
Malhar 8615695c7c VIDEO: QTVR: Minor Fixes and Formatting
Fix a minor logical error in swing transition function
Remove Unnecessary whitespace and formatting
2025-04-26 19:36:15 +08:00
Malhar 770feb4a23 VIDEO: QTVR: Implement the Swing Transition functionality
Add the swing Transition functionality using the transitionMode
variable as described in the original QTVR Xtra documentation
provided by Apple.

In the swing transition mode, make the video decoder internally
handle the animation of "swinging" panorama video from the
current position (described by _fov, _tiltAngle, _panAngle)
to the new position while taking the shortest path
2025-04-26 19:36:15 +08:00
Malhar 28257c7ae5 VIDEO: QTVR: Implement the higher quality modes
Add the quality mode stubbed functionality using the
as described in the original QTVR Xtra documentation
provided by Apple.

Add two new functions:
upscalePanorama(): Upscales the original panorama movie
to 2x width or 2x width and 2x height, these upscaled
panorama are named (_1D/_2D)UpscaledConstructedPano and
used for projecting in quality mode 2.0f and 4.0f

boxAverage(): The panorama is rendered with 2x or 3x the
target size and then averaged to target size by averaging
in 2x2 or 3x3 box to apply anti-aliasing

Set three quality modes in the QTVR decoder
- Mode 1.0f: No quality upscaling, already present,
  low quality

- Mode 2.0f: 1 dimensional upscaling and 2 times scaled
  rendering followed by 2x2 box average, medium quality

- Mode 4.0f: 2 dimensinoal upscaling and 3 times scaled
  rendering followed by 3x3 box average, high quality

- Mode 0: Dynamic quality mode, change between low
  quality and high quality based on whether the user is
  actively interacting with the panorama
2025-04-26 19:36:15 +08:00
Malhar b6df3118b9 VIDEO: QTVR: Implement the warping functionality
Add the warping functionality using the warpMode variable
as described in the original QTVR Xtra documentation
provided by Apple.

Set three modes of warping in the qtvr decoder
- Mode 2: Already there, applies both planar projection as
  well as perspective correction for perspectively correct
  image

- Mode 1: Only apply planar projection, image becomes more
  distorted as we move up or down from the midpoint

- Mode 0: No projection, blit the image as it is, exact
  copy of the original QTVR movie
2025-04-26 19:36:15 +08:00
Eugene Sandulenko 3416a5aea1 VIDEO: QTVR: Process Quit event
We want to stop timers here, so the potential cursor update is not
referring to a freed object. Prevents crashing when quitting
Director movies with QTVR panoramas
2025-04-18 23:21:27 +02:00
Matthew Jimenez 22c34f1f72 VIDEO: Use palette class in QuickTIme decoder 2025-03-09 17:29:24 +02:00
Eugene Sandulenko 10b7804675 VIDEO: QTVR: Expose hotspotid as is 2025-02-24 01:11:41 +01:00
Eugene Sandulenko 90cceae302 VIDEO: QTVR: Added API for configuring QTVR player 2025-02-19 14:25:56 +01:00
Eugene Sandulenko b947d5c92a VIDEO: QTVR: Expose navigation details via API 2025-02-19 01:51:15 +01:00
Eugene Sandulenko 67e1b00869 VIDEO: QTVR: Expose panorama transformations via API 2025-02-19 01:51:15 +01:00
Eugene Sandulenko d821c4c5a3 VIDEO: QTVR: Expose last mouse click 2025-02-18 10:39:24 +01:00
Eugene Sandulenko 3e0202855c VIDEO: QTVR: Expose hotspots via API 2025-02-17 23:59:48 +01:00
Eugene Sandulenko aca60a8427 VIDEO: QTVR: Exposed hotspot name via API 2025-02-17 23:59:48 +01:00
Eugene Sandulenko fefa5f0de1 VIDEO: QTVR: Fixing setting pan/tilt programmatically 2025-02-17 00:03:25 +01:00
Eugene Sandulenko fa5ea18fcb VIDEO: QTVR: Expose zoom state 2025-02-16 23:00:21 +01:00
Eugene Sandulenko c3b3dfecaf VIDEO: QTVR: Cleanup obsolete method 2025-02-16 18:09:17 +01:00
Eugene Sandulenko 10ee20b3e6 VIDEO: QTVR: Distinguish between clicked and roll over hotspot 2025-02-16 18:09:17 +01:00
Eugene Sandulenko f217ece80c VIDEO: QTVR: Expose current hotspot via API 2025-02-15 20:08:26 +01:00
Eugene Sandulenko 01a8a4ddf3 VIDEO: QTVR: Implement getCurrentNodeID() method 2025-02-15 20:08:26 +01:00
Eugene Sandulenko 8ef6f981fb VIDEO: QTVR: Implement possibility switching to hotspot rendering 2025-02-14 23:51:07 +01:00
Eugene Sandulenko 2ad25492fd VIDEO: Put mouse coordinates in Common::Point 2025-02-14 23:09:02 +01:00
Eugene Sandulenko 7438aedd99 VIDEO: QTVR: Implement hotspot cursors override 2025-02-14 23:09:02 +01:00
Eugene Sandulenko 2cb37eaea4 VIDEO: QTVR: Simplified hotspot lookup code 2025-02-14 23:09:02 +01:00
Eugene Sandulenko 82b77cd1e2 VIDEO: QTVR: Properly set link hotspot cursor 2025-02-14 01:17:32 +01:00
Eugene Sandulenko e87b541e5d VIDEO: QTVR: Implement gotoNodeID() method, remove hardcoded nodeid 2025-02-13 00:57:29 +01:00
Eugene Sandulenko 5f0fd4d149 VIDEO: QTVR: Initial code for hotspot coordinate computations for panoramas 2025-02-10 00:23:01 +01:00
Eugene Sandulenko ffa0e30695 VIDEO: QTVR: Reflect zoom limits on cursors for panoramas 2025-02-07 13:43:05 +01:00
Eugene Sandulenko eb88aad4d7 VIDEO: QTVR: Implement panorama zoom in/zoom out 2025-02-07 13:34:30 +01:00
Eugene Sandulenko c47912d327 VIDEO: QTVR: Optimize surface creation when rendering 2025-02-07 13:04:24 +01:00
Eugene Sandulenko 50c5869f52 VIDEO: QTVR: Cleanup unused methods 2025-02-07 13:04:24 +01:00
Eugene Sandulenko 5e1a8301d5 VIDEO: QTVR: Implement directional panorama dragging 2025-02-07 01:42:04 +01:00
Eugene Sandulenko 47dd29e443 VIDEO: QTVR: Implement directional cursors for panoramas 2025-02-07 01:20:39 +01:00
Eugene Sandulenko 3cc1297970 VIDEO: QTVR: Implement keyboard/mouse repeater 2025-02-06 23:54:33 +01:00
Eugene Sandulenko d8070ff919 VIDEO: QTVR: Implement plain and zoom cursors for Panoramas 2025-02-06 23:54:33 +01:00
Eugene Sandulenko c4ac202659 VIDEO: QTVR: Initial code for proper panorama projection 2025-02-06 16:48:14 +01:00
Eugene Sandulenko f464564f99 VIDEO: QTVR: Capture tilt changes for panoramas 2025-02-05 12:25:13 +01:00
Eugene Sandulenko 7d9f376020 VIDEO: QTVR: Implemented horizontal scrolling for panoramas 2025-02-05 01:41:21 +01:00
Eugene Sandulenko 55f3ec876f VIDEO: QTVR: Split mouse handling code between objects and panoramas 2025-02-05 00:13:28 +01:00
Eugene Sandulenko f8d3ad96e2 VIDEO: QTVR: Add method to set target video size 2025-02-05 00:03:07 +01:00
Eugene Sandulenko 81bbf1cf4b VIDEO: QTVR: Construct Panorama Hotspot mosaic 2025-02-04 23:28:04 +01:00
Eugene Sandulenko e70bfa4d45 VIDEO: QTVR: Correctly construct panorama image 2025-02-04 23:28:04 +01:00
Eugene Sandulenko d627668529 VIDEO: QTVR: Encapsulated panorama construction into PanoTrackHandler 2025-02-04 23:28:04 +01:00
Eugene Sandulenko afda417473 VIDEO: Fix reading of 'pano' chunk from QTVR and initial panorama construction preps 2025-02-04 01:58:59 +01:00
Eugene Sandulenko 717bfa5702 VIDEO: QTVR: Plugged in PanoTrackHandler 2025-01-31 16:49:02 +01:00
Eugene Sandulenko 7c277a49cb VIDEO: QTVR: Documented PanoSampleDesc 2025-01-29 22:01:05 +01:00
Eugene Sandulenko 06e6f95c92 VIDEO: Initial code for reading 'pano' description chunk in QTVR 2025-01-28 02:08:20 +01:00
Eugene Sandulenko fb6df4560d VIDEO: Split out QTVR code into a separate file
Initial code on implementing Panorama tracks
2025-01-27 00:20:34 +01:00
Eugene Sandulenko 5123119dbd VIDEO: Move QTVR-related variables to QuickTimeDecoder class 2025-01-25 17:46:58 +01:00
Eugene Sandulenko b22892b71d VIDEO: Update object cursors depending on the action 2025-01-25 17:46:58 +01:00