[libdvdnav-devel] [Git][videolan/libdvdread][master] 3 commits: ifo_read: don't rely on bitfield layout for the ASVS search pointers
Jean-Baptiste Kempf (@jbk)
gitlab at videolan.org
Fri Aug 7 15:29:43 UTC 2026
Jean-Baptiste Kempf pushed to branch master at VideoLAN / libdvdread
Commits:
95141bfc by Saifelden Mohamed Ismail at 2026-08-06T13:04:15+03:00
ifo_read: don't rely on bitfield layout for the ASVS search pointers
- - - - -
c4c0f239 by Saifelden Mohamed Ismail at 2026-08-06T13:04:15+03:00
ifo_read: don't rely on bitfield layout for the ASVS display list effects
- - - - -
2282d093 by Saifelden Mohamed Ismail at 2026-08-06T13:04:15+03:00
ifo_read: don't rely on bitfield layout for the still picture display mode
- - - - -
1 changed file:
- src/ifo_read.c
Changes:
=====================================
src/ifo_read.c
=====================================
@@ -1102,9 +1102,14 @@ static int ifoRead_ASVS(ifo_handle_t *ifofile){
return 0;
}
- uint16_t *asv_srpt_raw = (uint16_t *)asvs_mat->asv_srpt;
- for(int i = 0; i < total_nr_frames; i++)
- B2N_16(asv_srpt_raw[i]);
+ for(int i = 0; i < total_nr_frames; i++) {
+ uint16_t search_pointer;
+
+ memcpy(&search_pointer, &asvs_mat->asv_srpt[i], ASV_SRPT_SIZE);
+ B2N_16(search_pointer);
+ asvs_mat->asv_srpt[i].offset = search_pointer & 0x3fff;
+ asvs_mat->asv_srpt[i].cci = search_pointer >> 14;
+ }
/* a few discs write zero here */
CHECK_VALUE(asvs_mat->specification_version == 0x0012
@@ -1140,8 +1145,16 @@ static void ifoRead_TT_stillpics(struct ifo_handle_private_s *ifop,
}
for(int j = 0; j < nr_tracks; j++) {
+ uint8_t display_mode;
+
B2N_16(ranges[j].start_value);
B2N_16(ranges[j].end_value);
+
+ memcpy(&display_mode, &ranges[j].dmod, 1);
+ ranges[j].dmod.order = display_mode & 0x03;
+ ranges[j].dmod.timing = (display_mode >> 2) & 0x03;
+ ranges[j].dmod.zero = display_mode >> 4;
+
if(ranges[j].end_value > max_end)
max_end = ranges[j].end_value;
}
@@ -1164,7 +1177,16 @@ static void ifoRead_TT_stillpics(struct ifo_handle_private_s *ifop,
}
for(int j = 0; j < nr_frames; j++) {
+ uint8_t start_effect, end_effect;
+
B2N_32(frames[j].display_timing);
+
+ memcpy(&start_effect, &frames[j].start_effect, 1);
+ memcpy(&end_effect, &frames[j].end_effect, 1);
+ frames[j].start_effect.period = start_effect & 0x0f;
+ frames[j].start_effect.mode = start_effect >> 4;
+ frames[j].end_effect.period = end_effect & 0x0f;
+ frames[j].end_effect.mode = end_effect >> 4;
}
index->dlist = frames;
View it on GitLab: https://code.videolan.org/videolan/libdvdread/-/compare/3a1a072755a121d418359964f27451c28d9853e8...2282d093189306fed19c4f2afc07ae29cd5527fb
--
View it on GitLab: https://code.videolan.org/videolan/libdvdread/-/compare/3a1a072755a121d418359964f27451c28d9853e8...2282d093189306fed19c4f2afc07ae29cd5527fb
You're receiving this email because of your account on code.videolan.org. Manage all notifications: https://code.videolan.org/-/profile/notifications | Help: https://code.videolan.org/help
More information about the libdvdnav-devel
mailing list