<div dir="ltr"><div><div><div>Hi,<br><br></div>This is a patch that fixes a bug I encountered working on an application (k9copy)  that updates the Ifo files to create a modified version of the original DVD. <br><br></div>Thanks.<br></div>pauline123<br><div><div><div><div><br>--- a/src/dvdread/ifo_types.h    2014-01-02 10:38:07.000000000 -0500<br>+++ b/dvdread/ifo_types.h    2014-09-30 07:58:24.225452605 -0400<br>@@ -77,6 +77,7 @@<br>  * Video Attributes.<br>  */<br> typedef struct {<br>+#ifdef WORDS_BIGENDIAN <br>   unsigned char mpeg_version         : 2;<br>   unsigned char video_format         : 2;<br>   unsigned char display_aspect_ratio : 2;<br>@@ -90,12 +92,28 @@<br>   unsigned char picture_size         : 2;<br>   unsigned char letterboxed          : 1;<br>   unsigned char film_mode            : 1;<br>+#else<br>+  unsigned char permitted_df         : 2;<br>+  unsigned char display_aspect_ratio : 2;<br>+  unsigned char video_format         : 2;<br>+  unsigned char mpeg_version         : 2;<br>+  <br>+  unsigned char film_mode            : 1;<br>+  unsigned char letterboxed          : 1;<br>+  unsigned char picture_size         : 2;<br>+  <br>+  unsigned char bit_rate             : 1;<br>+  unsigned char unknown1             : 1;<br>+  unsigned char line21_cc_2          : 1;<br>+  unsigned char line21_cc_1          : 1;<br>+#endif<br><br> } ATTRIBUTE_PACKED video_attr_t;<br> <br> /**<br>  * Audio Attributes.<br>  */<br> typedef struct {<br>+#ifdef WORDS_BIGENDIAN <br>   unsigned char audio_format           : 3;<br>   unsigned char multichannel_extension : 1;<br>   unsigned char lang_type              : 2;<br>@@ -105,22 +126,48 @@<br>   unsigned char sample_frequency       : 2;<br>   unsigned char unknown1               : 1;<br>   unsigned char channels               : 3;<br>+#else <br>+  unsigned char application_mode       : 2;<br>+  unsigned char lang_type              : 2;<br>+  unsigned char multichannel_extension : 1;<br>+  unsigned char audio_format           : 3;<br>+  <br>+  unsigned char channels               : 3;<br>+  unsigned char unknown1               : 1;<br>+  unsigned char sample_frequency       : 2;<br>+  unsigned char quantization           : 2;<br>+#endif<br>+<br>   uint16_t lang_code;<br>   uint8_t  lang_extension;<br>   uint8_t  code_extension;<br>   uint8_t unknown3;<br>   union {<br>     struct ATTRIBUTE_PACKED {<br>+#ifdef WORDS_BIGENDIAN  <br>       unsigned char unknown4           : 1;<br>       unsigned char channel_assignment : 3;<br>       unsigned char version            : 2;<br>       unsigned char mc_intro           : 1; /* probably 0: true, 1:false */<br>       unsigned char mode               : 1; /* Karaoke mode 0: solo 1: duet */<br>+#else<br>+      unsigned char mode               : 1;<br>+      unsigned char mc_intro           : 1;<br>+      unsigned char version            : 2;<br>+      unsigned char channel_assignment : 3;<br>+      unsigned char unknown4           : 1;<br>+#endif<br>     } karaoke;<br>     struct ATTRIBUTE_PACKED {<br>+#ifdef WORDS_BIGENDIAN <br>       unsigned char unknown5           : 4;<br>       unsigned char dolby_encoded      : 1; /* suitable for surround decoding */<br>       unsigned char unknown6           : 3;<br>+#else<br>+      unsigned char unknown6           : 3;<br>+      unsigned char dolby_encoded      : 1;<br>+      unsigned char unknown5           : 4;<br>+#endif<br>     } surround;<br>   } ATTRIBUTE_PACKED app_info;<br> } ATTRIBUTE_PACKED audio_attr_t;<br>@@ -130,6 +177,7 @@<br>  * MultiChannel Extension<br>  */<br> typedef struct {<br>+#ifdef WORDS_BIGENDIAN <br>   unsigned int zero1      : 7;<br>   unsigned int ach0_gme   : 1;<br> <br>@@ -153,6 +201,32 @@<br>   unsigned int ach4_gv2e  : 1;<br>   unsigned int ach4_gmBe  : 1;<br>   unsigned int ach4_seBe  : 1;<br>+#else<br>+  unsigned int ach0_gme   : 1;<br>+  unsigned int zero1      : 7;<br>+<br>+  unsigned int ach1_gme   : 1;<br>+  unsigned int zero2      : 7;<br>+<br>+  unsigned int ach2_gm2e  : 1;<br>+  unsigned int ach2_gm1e  : 1;<br>+  unsigned int ach2_gv2e  : 1;<br>+  unsigned int ach2_gv1e  : 1;<br>+  unsigned int zero3      : 4;<br>+<br>+  unsigned int ach3_se2e  : 1;<br>+  unsigned int ach3_gmAe  : 1;<br>+  unsigned int ach3_gv2e  : 1;<br>+  unsigned int ach3_gv1e  : 1;<br>+  unsigned int zero4      : 4;<br>+<br>+  unsigned int ach4_seBe  : 1;<br>+  unsigned int ach4_gmBe  : 1;<br>+  unsigned int ach4_gv2e  : 1;<br>+  unsigned int ach4_gv1e  : 1;<br>+  unsigned int zero5      : 4;<br>+#endif<br>+<br>   uint8_t zero6[19];<br> } ATTRIBUTE_PACKED multichannel_ext_t;<br> <br>@@ -171,9 +245,15 @@<br>    * language: indicates language if type == 1<br>    * lang extension: if type == 1 contains the lang extension<br>    */<br>+#ifdef WORDS_BIGENDIAN<br>   unsigned char code_mode : 3;<br>   unsigned char zero1     : 3;<br>   unsigned char type      : 2;<br>+#else<br>+  unsigned char type      : 2;<br>+  unsigned char zero1     : 3;<br>+  unsigned char code_mode : 3;<br>+#endif<br>   uint8_t  zero2;<br>   uint16_t lang_code;<br>   uint8_t  lang_extension;<br>@@ -205,6 +285,7 @@<br>  * Cell Playback Information.<br>  */<br> typedef struct {<br>+#ifdef WORDS_BIGENDIAN<br>   unsigned int block_mode       : 2;<br>   unsigned int block_type       : 2;<br>   unsigned int seamless_play    : 1;<br>@@ -215,6 +297,18 @@<br>   unsigned int playback_mode    : 1;  /**< When set, enter StillMode after each VOBU */<br>   unsigned int restricted       : 1;  /**< ?? drop out of fastforward? */<br>   unsigned int unknown2         : 6;<br>+#else<br>+  unsigned int seamless_angle   : 1;<br>+  unsigned int stc_discontinuity: 1;<br>+  unsigned int interleaved      : 1;<br>+  unsigned int seamless_play    : 1;<br>+  unsigned int block_type       : 2;<br>+  unsigned int block_mode       : 2;<br>+  <br>+  unsigned int unknown2         : 6;<br>+  unsigned int restricted       : 1;<br>+  unsigned int playback_mode    : 1;<br>+#endif<br>   uint8_t still_time;<br>   uint8_t cell_cmd_nr;<br>   dvd_time_t playback_time;<br>@@ -245,6 +339,7 @@<br>  * User Operations.<br>  */<br> typedef struct {<br>+#ifdef WORDS_BIGENDIAN<br>   unsigned int zero                           : 7; /* 25-31 */<br>   unsigned int video_pres_mode_change         : 1; /* 24 */<br> <br>@@ -274,6 +369,38 @@<br>   unsigned int title_play                     : 1;<br>   unsigned int chapter_search_or_play         : 1;<br>   unsigned int title_or_time_play             : 1; /* 0 */<br>+#else<br>+  unsigned int video_pres_mode_change         : 1; /* 24 */<br>+  unsigned int zero                           : 7; /* 25-31 */<br>+  <br>+  unsigned int resume                         : 1; /* 16 */<br>+  unsigned int button_select_or_activate      : 1;<br>+  unsigned int still_off                      : 1;<br>+  unsigned int pause_on                       : 1;<br>+  unsigned int audio_stream_change            : 1;<br>+  unsigned int subpic_stream_change           : 1;<br>+  unsigned int angle_change                   : 1;<br>+  unsigned int karaoke_audio_pres_mode_change : 1; /* 23 */<br>+  <br>+  unsigned int forward_scan                   : 1; /* 8 */<br>+  unsigned int backward_scan                  : 1;<br>+  unsigned int title_menu_call                : 1;<br>+  unsigned int root_menu_call                 : 1;<br>+  unsigned int subpic_menu_call               : 1;<br>+  unsigned int audio_menu_call                : 1;<br>+  unsigned int angle_menu_call                : 1;<br>+  unsigned int chapter_menu_call              : 1; /* 15 */<br>+  <br>+  unsigned int title_or_time_play             : 1; /* 0 */<br>+  unsigned int chapter_search_or_play         : 1;<br>+  unsigned int title_play                     : 1;<br>+  unsigned int stop                           : 1;<br>+  unsigned int go_up                          : 1;<br>+  unsigned int time_or_chapter_search         : 1;<br>+  unsigned int prev_or_top_pg_search          : 1;<br>+  unsigned int next_pg_search                 : 1; /* 7 */<br>+<br>+#endif<br> } ATTRIBUTE_PACKED user_ops_t;<br> <br> /**<br>@@ -310,9 +437,15 @@<br>  */<br> typedef struct {<br>   uint8_t  entry_id;<br>+#ifdef WORDS_BIGENDIAN<br>   unsigned int block_mode : 2;<br>   unsigned int block_type : 2;<br>   unsigned int unknown1   : 4;<br>+#else<br>+  unsigned int unknown1   : 4;<br>+  unsigned int block_type : 2;<br>+  unsigned int block_mode : 2;<br>+#endif<br>   uint16_t ptl_id_mask;<br>   uint32_t pgc_start_byte;<br>   pgc_t *pgc;<br>@@ -438,6 +571,7 @@<br> } ATTRIBUTE_PACKED vmgi_mat_t;<br> <br> typedef struct {<br>+#ifdef WORDS_BIGENDIAN<br>   unsigned int zero_1                    : 1;<br>   unsigned int multi_or_random_pgc_title : 1; /* 0: one sequential pgc title */<br>   unsigned int jlc_exists_in_cell_cmd    : 1;<br>@@ -446,6 +580,16 @@<br>   unsigned int jlc_exists_in_tt_dom      : 1;<br>   unsigned int chapter_search_or_play    : 1; /* UOP 1 */<br>   unsigned int title_or_time_play        : 1; /* UOP 0 */<br>+#else<br>+  unsigned int title_or_time_play        : 1;<br>+  unsigned int chapter_search_or_play    : 1;<br>+  unsigned int jlc_exists_in_tt_dom      : 1;<br>+  unsigned int jlc_exists_in_button_cmd  : 1;<br>+  unsigned int jlc_exists_in_prepost_cmd : 1;<br>+  unsigned int jlc_exists_in_cell_cmd    : 1;<br>+  unsigned int multi_or_random_pgc_title : 1;<br>+  unsigned int zero_1                    : 1;<br>+#endif<br> } ATTRIBUTE_PACKED playback_type_t;<br> <br> /**<br></div></div></div></div></div>