[Scummvm-git-logs] scummvm-tools master -> ab4b17ed27d9dfc9ebb636729a810a646a718043

sev- noreply at scummvm.org
Thu Jan 30 08:11:32 UTC 2025


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm-tools' repo located at https://github.com/scummvm/scummvm-tools .

Summary:
ab4b17ed27 DIRECTOR: Update ImHex QTVR pattern file


Commit: ab4b17ed27d9dfc9ebb636729a810a646a718043
    https://github.com/scummvm/scummvm-tools/commit/ab4b17ed27d9dfc9ebb636729a810a646a718043
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-01-30T09:11:01+01:00

Commit Message:
DIRECTOR: Update ImHex QTVR pattern file

Changed paths:
    engines/director/patterns/qtvr.hexpat


diff --git a/engines/director/patterns/qtvr.hexpat b/engines/director/patterns/qtvr.hexpat
index 1a0d40cd..b5ecd587 100644
--- a/engines/director/patterns/qtvr.hexpat
+++ b/engines/director/patterns/qtvr.hexpat
@@ -1,3 +1,5 @@
+// inspired by: https://gist.github.com/Zaggy1024/a030cf23069ed62d452161f579ed272f
+
 #pragma endian big
 
 
@@ -94,14 +96,36 @@ struct CTYPAtom : Atom {
     char id[4];
 };
 
+struct NAVGAtom: Atom {
+    u16 version;
+    u16 columns;
+    u16 rows;
+    padding[2];
+    u16 loop_size;
+    u16 frame_duration;
+
+    u16 movie_type;
+    u16 ticks;
+    fixed_s32 field_of_view;
+    fixed_s32 startHPan;
+    fixed_s32 endHPan;
+    fixed_s32 endVPan;
+    fixed_s32 startVPan;
+    fixed_s32 initialHPan;
+    fixed_s32 initialVPan;
+    padding[4];
+
+};
+
 // moov -> udta
 struct UserDataChildAtomSelector {
     Atom atom_header [[hidden]];
-    
+
     $ = addressof(this);
 
-    match(atom_header.box_type) { 
+    match(atom_header.box_type) {
         ("ctyp"): CTYPAtom ctyp;
+        ("NAVG"): NAVGAtom navg;
         (_): UnknownAtom unknown [[name(atom_header.box_type)]];
     }
 } [[inline]];
@@ -188,7 +212,18 @@ struct MovieHeaderAtom : FullAtom {
     u32 next_track_id;
 }[[format("format_mvhd")]];
 
-struct TrackHeaderAtom : FullAtom {
+bitfield TrackHeaderFlags {
+    padding : 4;
+    bool track_in_poster: 1;
+    bool track_in_preview: 1;
+    bool track_in_movie: 1;
+    bool track_enabled : 1;
+};
+
+struct TrackHeaderAtom : Atom {
+    u8 version;
+    padding[2];
+    TrackHeaderFlags;
     u32 creation_time;
     u32 modification_time;
     u32 track_id;
@@ -200,8 +235,8 @@ struct TrackHeaderAtom : FullAtom {
     fixed_s16 volume;
     padding[sizeof(u16)];
     Matrix matrix;
-    fixed_u32 track_width;
-    fixed_u32 track_height;
+    fixed_s32 track_width;
+    fixed_s32 track_height;
 };
 
 using EditListAtom;
@@ -246,7 +281,7 @@ struct ChunkOffsetAtom : FullAtom {
 
 struct UnknownSampleEntryChildSelector {
     Atom box_header [[hidden]];
-    
+
     $ = addressof(this);
     match(atom_header.box_type) {
         (_): UnknownAtom unknown [[name(box_header.box_type)]];
@@ -277,8 +312,8 @@ struct VisualSampleEntry : SampleEntry {
     u32 spatial_quality;
     u16 width;
     u16 height;
-    fixed_u32 horizresolution;
-    fixed_u32 vertresolution;
+    fixed_s32 horizresolution; // in pixels per inch
+    fixed_s32 vertresolution; // in pixels per inch
     padding[sizeof(u32)];
     u16 frame_count_per_sample;
     u8 compressorname_size [[hidden]];
@@ -296,9 +331,9 @@ struct PanoSampleDescription: Atom {
     // https://developer.apple.com/library/archive/technotes/tn/tn1035.html
     std::print("pano located at: 0x{:X}", addressof(this));
     padding[sizeof(u32)];
-    padding[sizeof(u32)];
+    padding[sizeof(u32)]; // must be zero, sometimes it contains a 1
 
-    s16 majorVersion;
+    s16 majorVersion; // must be zero, sometimes it contains a 1
     s16 minorVersion;
     s32 sceneTrackID;
     s32 loResSceneTrackID;
@@ -311,7 +346,7 @@ struct PanoSampleDescription: Atom {
     fixed_s32 vPanBottom; // TODO: number is off...
     fixed_s32 minimumZoom;
     fixed_s32 maximumZoom;
-    
+
     // Info for highest res version of scene track
 
     s32 sceneSizeX;
@@ -321,26 +356,29 @@ struct PanoSampleDescription: Atom {
     s16 sceneNumFramesX;
     s16 sceneNumFramesY;
     s16 sceneColorDepth;
-    
+
     // Info for highest res version of hotSpot track
     s32 hotSpotSizeX;
     s32 hotSpotSizeY;
     padding[sizeof(u16)];
-    s16 hotSponNumFramesX;
+    s16 hotSpotNumFramesX;
     s16 hotSpotNumFrameY;
-    s16 hotsportColorDepth;
+    s16 hotspotColorDepth;
 
     $ += contents_size(addressof(this), box_size);
 };
 
 struct SampleEntrySelector {
     Atom atom_header [[hidden]];
-    
+
     $ = addressof(this);
     match(atom_header.box_type) {
         ("cvid"): VisualSampleEntry cvid;
         ("smc "): VisualSampleEntry smc;
-        ("pano"): PanoSampleDescription  pano;
+        ("rle "): VisualSampleEntry rle;
+        ("pano"): PanoSampleDescription pano;
+        ("SVQ1"): VisualSampleEntry svq;
+        //("qtvr"): QTVRSampleDescription qtvr;
         (_):  UnknownSampleEntry unknown [[name(atom_header.box_type)]];
     }
 
@@ -357,11 +395,11 @@ struct SampleDescriptionAtom : FullAtom {
 // moov -> trak -> mdia -> minf -> stbl -> stts
 struct TimeToSampleEntry {
     u32 sample_count;
-    u32 sample_delta;
+    u32 sample_duration;
 } [[format("format_stts_entry")]];
 
 fn format_stts_entry(auto stts_entry) {
-    return std::format("count = {}, delta = {}", stts_entry.sample_count, stts_entry.sample_delta);
+    return std::format("count = {}, duration = {}", stts_entry.sample_count, stts_entry.sample_duration);
 };
 
 struct TimeToSampleAtom : FullAtom {
@@ -434,7 +472,7 @@ using DataReferenceAtom;
 
 struct DataEntryAtomSelector {
     Atom atom_header [[hidden]];
-    
+
     $ = addressof(this);
     match(atom_header.box_type) {
         ("alis"): FullAtom alis;
@@ -451,7 +489,7 @@ struct DataReferenceAtom : FullAtom {
 
 struct DataInformationChildAtomSelector {
     Atom atom_header [[hidden]];
-    
+
     $ = addressof(this);
     match(atom_header.box_type) {
         ("dref"): DataReferenceAtom dref;
@@ -508,7 +546,7 @@ struct STPanoMediaInfoAtom: Atom {
     STPanoMediaInfoChildAtomSelector children[while (contents_size(addressof(this), box_size) > MIN_BOX_SIZE)];
 };
 
-struct GMHDChildAtomSelector { 
+struct GMHDChildAtomSelector {
     Atom atom_header [[hidden]];
 
     $ = addressof(this);
@@ -530,7 +568,7 @@ struct MediaInformationChildAtomSelector {
     Atom atom_header [[hidden]];
 
     $ = addressof(this);
-    
+
     match(atom_header.box_type) {
         ("stbl"): SampleTableAtom stbl;
         ("hdlr"): HandlerAtom hdlr;
@@ -691,3 +729,117 @@ struct RootAtom {
 } [[inline]];
 
 RootAtom atoms[while(std::mem::size() - $ > MIN_BOX_SIZE)] @ 0x00 [[format("format_box_array")]];
+
+struct HotSpotEntry {
+    u16 hotSpotId;
+    padding[2];
+    char type[4];
+    u32 typeData;
+    fixed_s32 viewHPan;
+    fixed_s32 viewVPan;
+    fixed_s32 viewZoom;
+    u16 rect1;
+    u16 rect2;
+    u16 rect3;
+    u16 rect4;
+    s32 mouseOVerCursorID;
+    s32 mouseDownCursorID;
+    s32 mouseUpCursorID;
+    padding[sizeof(s32)];
+    s32 nameStrOffset;
+    s32 commentStrOffset;
+};
+
+struct pHot: Atom {
+    padding[2];
+    u16 numHotSpots;
+    HotSpotEntry entries[numHotSpots];
+};
+
+struct pHdr: Atom {
+    u32 nodeID;
+    fixed_s32 defHPan;
+    fixed_s32 defVPan;
+    fixed_s32 defZoom;
+    fixed_s32 minHPan;
+    fixed_s32 minVPan;
+    fixed_s32 minZoom;
+    fixed_s32 maxHPan;
+    fixed_s32 maxVPan;
+    fixed_s32 maxZoom;
+    padding[sizeof(u32)];
+    padding[sizeof(u32)];
+    u32 nameStrOffset;
+    u32 commentStrOffset;
+};
+
+struct PanoLink {
+    u16 linkID;
+    padding[sizeof(u16)];
+    padding[sizeof(u32)];
+    padding[sizeof(u32)];
+    u32 toNodeID;
+    padding[sizeof(u32) * 3];
+    fixed_s32 toHPan;
+    fixed_s32 toVPan;
+    fixed_s32 toZoom;
+    padding[sizeof(u32)];
+    padding[sizeof(u32)];
+    u32 nameStrOffset;
+    u32 commentStrOffset;
+};
+
+struct LinkTableAtom : Atom {
+    padding[sizeof(u16)];
+    u16 numLinks;
+    PanoLink entries[numLinks];
+};
+
+struct NavgObject {
+    u16 objID;
+    padding[sizeof(u16)]; // reserved1
+    padding[sizeof(u32)]; // reserved2
+    fixed_s32 navgHPan;
+    fixed_s32 navgVPan;
+    fixed_s32 navgZoom;
+    u16 rect1;
+    u16 rect2;
+    u16 rect3;
+    u16 rect4;
+    padding[sizeof(u32)]; // reserved3
+    u32 nameStrOffset;
+    u32 commentStrOffset;
+};
+
+struct NavgTableAtom : Atom {
+    padding[sizeof(u16)];
+    u16 numObjects;
+    NavgObject entries[numObjects];
+};
+
+struct PascalString {
+    std::string::SizedString<u8> name;
+};
+
+struct StringTableAtom : Atom {
+    PascalString children[while (contents_size(addressof(this), box_size) > MIN_BOX_SIZE)];
+};
+
+struct PanoramaMDAT {
+    Atom atom_header [[hidden]];
+    $ = addressof(this);
+    if ($ + contents_size(addressof(this), atom_header.box_size) <= std::mem::size()) {
+
+        match(atom_header.box_type) {
+            ("pHot"): pHot phot;
+            ("pHdr"): pHdr phdr;
+            ("pLnk"): LinkTableAtom plnk;
+            ("strT"): StringTableAtom strt;
+            ("pNav"): NavgTableAtom pnav;
+            (_): UnknownAtomSelector unknown [[name(atom_header.box_type)]];
+        }
+    } else {
+        $ = std::mem::size();
+    }
+
+} [[inline]];




More information about the Scummvm-git-logs mailing list