changeset 25122:870e5564d0f7

replaced audio_mapping_t and sub_mapping_t with uint16_t and uint32_t respectively: conditional bitfields don't have the slightest chance to be cross-platform, thus they are definitively broken. Fixed the other files to use bitmasks instead of accessing the previous bitfield members
author nicodvb
date Fri, 23 Nov 2007 21:09:06 +0000
parents 786b99c1ff94
children 2caa21647239
files dvdread/ifo_print.c dvdread/ifo_read.c dvdread/ifo_types.h
diffstat 3 files changed, 6 insertions(+), 55 deletions(-) [+]
line wrap: on
line diff
--- a/dvdread/ifo_print.c	Fri Nov 23 13:46:38 2007 +0000
+++ b/dvdread/ifo_print.c	Fri Nov 23 21:09:06 2007 +0000
@@ -797,14 +797,14 @@
   ifoPrint_USER_OPS(&pgc->prohibited_ops);
   
   for(i = 0; i < 8; i++) {
-    if(pgc->audio_control[i].present) { /* The 'is present' bit */
+    if(pgc->audio_control[i] & 0x8000) { /* The 'is present' bit */
       printf("Audio stream %i control: %04x\n", 
              i, pgc->audio_control[i]);
     }
   }
   
   for(i = 0; i < 32; i++) {
-    if(pgc->subp_control[i].present) { /* The 'is present' bit */
+    if(pgc->subp_control[i] & 0x80000000) { /* The 'is present' bit */
       printf("Subpicture stream %2i control: %08x\n", 
              i, pgc->subp_control[i]);
     }
--- a/dvdread/ifo_read.c	Fri Nov 23 13:46:38 2007 +0000
+++ b/dvdread/ifo_read.c	Fri Nov 23 21:09:06 2007 +0000
@@ -763,10 +763,10 @@
 
   /* verify time (look at print_time) */
   for(i = 0; i < 8; i++)
-    if(!pgc->audio_control[i].present)
+    if(!pgc->audio_control[i] & 0x8000)
       CHECK_ZERO(pgc->audio_control[i]);
   for(i = 0; i < 32; i++)
-    if(!pgc->subp_control[i].present)
+    if(!pgc->subp_control[i] & 0x80000000)
       CHECK_ZERO(pgc->subp_control[i]);
   
   /* Check that time is 0:0:0:0 also if nr_of_programs == 0 */
--- a/dvdread/ifo_types.h	Fri Nov 23 13:46:38 2007 +0000
+++ b/dvdread/ifo_types.h	Fri Nov 23 21:09:06 2007 +0000
@@ -407,55 +407,6 @@
 } ATTRIBUTE_PACKED user_ops_t;
 
 /**
- * Subpicture stream mapping for a subtitle
- */
-typedef struct {
-#ifdef WORDS_BIGENDIAN
-  unsigned int present   : 1;
-  unsigned int zero1     : 2;
-  unsigned int s_4p3     : 5; /* stream for 4:3 on any display */
-
-  unsigned int zero2     : 3;
-  unsigned int s_wide    : 5; /* stream for 16:9 on widescreen display */
-
-  unsigned int zero3     : 3;
-  unsigned int s_lbox    : 5; /* stream for 16:9 on letterboxed 4:3 display */
-
-  unsigned int zero4     : 3;
-  unsigned int s_panscan : 5; /* stream for 16:9 with pan&scan data on 4:3 display */
-#else
-  unsigned int s_4p3     : 5; /* stream for 4:3 on any display */
-  unsigned int zero1     : 2;
-  unsigned int present   : 1;
-
-  unsigned int s_wide    : 5; /* stream for 16:9 on widescreen display */
-  unsigned int zero2     : 3;
-
-  unsigned int s_lbox    : 5; /* stream for 16:9 on letterboxed 4:3 display */
-  unsigned int zero3     : 3;
-
-  unsigned int s_panscan : 5; /* stream for 16:9 with pan&scan data on 4:3 display */
-  unsigned int zero4     : 3;
-#endif
-} ATTRIBUTE_PACKED subp_mapping_t;
-
-/**
- * Audio stream mapping for a soundtrack
- */
-typedef struct {
-#ifdef WORDS_BIGENDIAN
-  unsigned int present : 1;
-  unsigned int zero1   : 4;
-  unsigned int s_audio : 3;
-#else
-  unsigned int s_audio : 3;
-  unsigned int zero1   : 4;
-  unsigned int present : 1;
-#endif
-  uint8_t zero2;
-} ATTRIBUTE_PACKED audio_mapping_t;
-
-/**
  * Program Chain Information.
  */
 typedef struct {
@@ -464,8 +415,8 @@
   uint8_t  nr_of_cells;
   dvd_time_t playback_time;
   user_ops_t prohibited_ops;
-  audio_mapping_t audio_control[8];
-  subp_mapping_t subp_control[32];
+  uint16_t audio_control[8];
+  uint32_t subp_control[32];
   uint16_t next_pgc_nr;
   uint16_t prev_pgc_nr;
   uint16_t goup_pgc_nr;