<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>