⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ifo_types.h

📁 有关mpeg2的deocde代码
💻 H
📖 第 1 页 / 共 2 页
字号:
#ifndef IFO_TYPES_H_INCLUDED#define IFO_TYPES_H_INCLUDED/* * Copyright (C) 2000, 2001 Bj鰎n Englund <d4bjorn@dtek.chalmers.se>, *                          H錵an Hjort <d95hjort@dtek.chalmers.se> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */#include <inttypes.h>#include <dvdread/dvd_reader.h>#undef ATTRIBUTE_PACKED#undef PRAGMA_PACK_BEGIN #undef PRAGMA_PACK_END#if defined(__GNUC__)#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)#define ATTRIBUTE_PACKED __attribute__ ((packed))#define PRAGMA_PACK 0#endif#endif#if !defined(ATTRIBUTE_PACKED)#define ATTRIBUTE_PACKED#define PRAGMA_PACK 1#endif#if PRAGMA_PACK#pragma pack(1)#endif/** * Common * * The following structures are used in both the VMGI and VTSI. *//** * DVD Time Information. */typedef struct {  uint8_t hour;  uint8_t minute;  uint8_t second;  uint8_t frame_u; /* The two high bits are the frame rate. */} ATTRIBUTE_PACKED dvd_time_t;/** * Type to store per-command data. */typedef struct {  uint8_t bytes[8];} ATTRIBUTE_PACKED vm_cmd_t;#define COMMAND_DATA_SIZE 8/** * Video Attributes. */typedef struct {#ifdef WORDS_BIGENDIAN  unsigned int mpeg_version         : 2;  unsigned int video_format         : 2;  unsigned int display_aspect_ratio : 2;  unsigned int permitted_df         : 2;    unsigned int line21_cc_1          : 1;  unsigned int line21_cc_2          : 1;  unsigned int unknown1             : 1;  unsigned int bit_rate             : 1;    unsigned int picture_size         : 2;  unsigned int letterboxed          : 1;  unsigned int film_mode            : 1;#else  unsigned int permitted_df         : 2;  unsigned int display_aspect_ratio : 2;  unsigned int video_format         : 2;  unsigned int mpeg_version         : 2;    unsigned int film_mode            : 1;  unsigned int letterboxed          : 1;  unsigned int picture_size         : 2;    unsigned int bit_rate             : 1;  unsigned int unknown1             : 1;  unsigned int line21_cc_2          : 1;  unsigned int line21_cc_1          : 1;#endif} ATTRIBUTE_PACKED video_attr_t;/** * Audio Attributes. */typedef struct {#ifdef WORDS_BIGENDIAN  unsigned int audio_format           : 3;  unsigned int multichannel_extension : 1;  unsigned int lang_type              : 2;  unsigned int application_mode       : 2;    unsigned int quantization           : 2;  unsigned int sample_frequency       : 2;  unsigned int unknown1               : 1;  unsigned int channels               : 3;#else  unsigned int application_mode       : 2;  unsigned int lang_type              : 2;  unsigned int multichannel_extension : 1;  unsigned int audio_format           : 3;    unsigned int channels               : 3;  unsigned int unknown1               : 1;  unsigned int sample_frequency       : 2;  unsigned int quantization           : 2;#endif  uint16_t lang_code;  uint8_t  lang_extension;  uint8_t  code_extension;  uint8_t unknown3;  union {    struct ATTRIBUTE_PACKED {#ifdef WORDS_BIGENDIAN      unsigned int unknown4           : 1;      unsigned int channel_assignment : 3;      unsigned int version            : 2;      unsigned int mc_intro           : 1; /* probably 0: true, 1:false */      unsigned int mode               : 1; /* Karaoke mode 0: solo 1: duet */#else      unsigned int mode               : 1;      unsigned int mc_intro           : 1;      unsigned int version            : 2;      unsigned int channel_assignment : 3;      unsigned int unknown4           : 1;#endif    } karaoke;    struct ATTRIBUTE_PACKED {#ifdef WORDS_BIGENDIAN      unsigned int unknown5           : 4;      unsigned int dolby_encoded      : 1; /* suitable for surround decoding */      unsigned int unknown6           : 3;#else      unsigned int unknown6           : 3;      unsigned int dolby_encoded      : 1;      unsigned int unknown5           : 4;#endif    } surround;  } app_info;} ATTRIBUTE_PACKED audio_attr_t;/** * MultiChannel Extension */typedef struct {#ifdef WORDS_BIGENDIAN  unsigned int zero1      : 7;  unsigned int ach0_gme   : 1;  unsigned int zero2      : 7;  unsigned int ach1_gme   : 1;  unsigned int zero3      : 4;  unsigned int ach2_gv1e  : 1;  unsigned int ach2_gv2e  : 1;  unsigned int ach2_gm1e  : 1;  unsigned int ach2_gm2e  : 1;  unsigned int zero4      : 4;  unsigned int ach3_gv1e  : 1;  unsigned int ach3_gv2e  : 1;  unsigned int ach3_gmAe  : 1;  unsigned int ach3_se2e  : 1;  unsigned int zero5      : 4;  unsigned int ach4_gv1e  : 1;  unsigned int ach4_gv2e  : 1;  unsigned int ach4_gmBe  : 1;  unsigned int ach4_seBe  : 1;#else  unsigned int ach0_gme   : 1;  unsigned int zero1      : 7;  unsigned int ach1_gme   : 1;  unsigned int zero2      : 7;  unsigned int ach2_gm2e  : 1;  unsigned int ach2_gm1e  : 1;  unsigned int ach2_gv2e  : 1;  unsigned int ach2_gv1e  : 1;  unsigned int zero3      : 4;  unsigned int ach3_se2e  : 1;  unsigned int ach3_gmAe  : 1;  unsigned int ach3_gv2e  : 1;  unsigned int ach3_gv1e  : 1;  unsigned int zero4      : 4;  unsigned int ach4_seBe  : 1;  unsigned int ach4_gmBe  : 1;  unsigned int ach4_gv2e  : 1;  unsigned int ach4_gv1e  : 1;  unsigned int zero5      : 4;#endif  uint8_t zero6[19];} ATTRIBUTE_PACKED multichannel_ext_t;/** * Subpicture Attributes. */typedef struct {  /*   * type: 0 not specified   *       1 language   *       2 other   * coding mode: 0 run length   *              1 extended   *              2 other   * language: indicates language if type == 1   * lang extension: if type == 1 contains the lang extension   */#ifdef WORDS_BIGENDIAN  unsigned int code_mode : 3;  unsigned int zero1     : 3;  unsigned int type      : 2;#else  unsigned int type      : 2;  unsigned int zero1     : 3;  unsigned int code_mode : 3;#endif  uint8_t  zero2;  uint16_t lang_code;  uint8_t  lang_extension;  uint8_t  code_extension;} ATTRIBUTE_PACKED subp_attr_t;/** * PGC Command Table. */ typedef struct {  uint16_t nr_of_pre;  uint16_t nr_of_post;  uint16_t nr_of_cell;  uint16_t zero_1;  vm_cmd_t *pre_cmds;  vm_cmd_t *post_cmds;  vm_cmd_t *cell_cmds;} ATTRIBUTE_PACKED pgc_command_tbl_t;#define PGC_COMMAND_TBL_SIZE 8/** * PGC Program Map */typedef uint8_t pgc_program_map_t; /** * Cell Playback Information. */typedef struct {#ifdef WORDS_BIGENDIAN  unsigned int block_mode       : 2;  unsigned int block_type       : 2;  unsigned int seamless_play    : 1;  unsigned int interleaved      : 1;  unsigned int stc_discontinuity: 1;  unsigned int seamless_angle   : 1;    unsigned int playback_mode    : 1;  /**< When set, enter StillMode after each VOBU */  unsigned int restricted       : 1;  /**< ?? drop out of fastforward? */  unsigned int unknown2         : 6;#else  unsigned int seamless_angle   : 1;  unsigned int stc_discontinuity: 1;  unsigned int interleaved      : 1;  unsigned int seamless_play    : 1;  unsigned int block_type       : 2;  unsigned int block_mode       : 2;    unsigned int unknown2         : 6;  unsigned int restricted       : 1;  unsigned int playback_mode    : 1;#endif  uint8_t still_time;  uint8_t cell_cmd_nr;  dvd_time_t playback_time;  uint32_t first_sector;  uint32_t first_ilvu_end_sector;  uint32_t last_vobu_start_sector;  uint32_t last_sector;} ATTRIBUTE_PACKED cell_playback_t;#define BLOCK_TYPE_NONE         0x0#define BLOCK_TYPE_ANGLE_BLOCK  0x1#define BLOCK_MODE_NOT_IN_BLOCK 0x0#define BLOCK_MODE_FIRST_CELL   0x1#define BLOCK_MODE_IN_BLOCK     0x2#define BLOCK_MODE_LAST_CELL    0x3/** * Cell Position Information. */typedef struct {  uint16_t vob_id_nr;  uint8_t  zero_1;  uint8_t  cell_nr;} ATTRIBUTE_PACKED cell_position_t;/** * User Operations. */typedef struct {#ifdef WORDS_BIGENDIAN  unsigned int zero                           : 7; /* 25-31 */  unsigned int video_pres_mode_change         : 1; /* 24 */    unsigned int karaoke_audio_pres_mode_change : 1; /* 23 */  unsigned int angle_change                   : 1;  unsigned int subpic_stream_change           : 1;  unsigned int audio_stream_change            : 1;  unsigned int pause_on                       : 1;  unsigned int still_off                      : 1;  unsigned int button_select_or_activate      : 1;  unsigned int resume                         : 1; /* 16 */    unsigned int chapter_menu_call              : 1; /* 15 */  unsigned int angle_menu_call                : 1;  unsigned int audio_menu_call                : 1;  unsigned int subpic_menu_call               : 1;  unsigned int root_menu_call                 : 1;  unsigned int title_menu_call                : 1;  unsigned int backward_scan                  : 1;  unsigned int forward_scan                   : 1; /* 8 */    unsigned int next_pg_search                 : 1; /* 7 */  unsigned int prev_or_top_pg_search          : 1;  unsigned int time_or_chapter_search         : 1;  unsigned int go_up                          : 1;  unsigned int stop                           : 1;  unsigned int title_play                     : 1;  unsigned int chapter_search_or_play         : 1;  unsigned int title_or_time_play             : 1; /* 0 */#else  unsigned int video_pres_mode_change         : 1; /* 24 */  unsigned int zero                           : 7; /* 25-31 */    unsigned int resume                         : 1; /* 16 */  unsigned int button_select_or_activate      : 1;  unsigned int still_off                      : 1;  unsigned int pause_on                       : 1;  unsigned int audio_stream_change            : 1;  unsigned int subpic_stream_change           : 1;  unsigned int angle_change                   : 1;  unsigned int karaoke_audio_pres_mode_change : 1; /* 23 */    unsigned int forward_scan                   : 1; /* 8 */  unsigned int backward_scan                  : 1;  unsigned int title_menu_call                : 1;  unsigned int root_menu_call                 : 1;  unsigned int subpic_menu_call               : 1;  unsigned int audio_menu_call                : 1;  unsigned int angle_menu_call                : 1;  unsigned int chapter_menu_call              : 1; /* 15 */    unsigned int title_or_time_play             : 1; /* 0 */  unsigned int chapter_search_or_play         : 1;  unsigned int title_play                     : 1;  unsigned int stop                           : 1;  unsigned int go_up                          : 1;  unsigned int time_or_chapter_search         : 1;  unsigned int prev_or_top_pg_search          : 1;  unsigned int next_pg_search                 : 1; /* 7 */#endif} ATTRIBUTE_PACKED user_ops_t;/** * Program Chain Information. */typedef struct {  uint16_t zero_1;  uint8_t  nr_of_programs;  uint8_t  nr_of_cells;  dvd_time_t playback_time;  user_ops_t prohibited_ops;  uint16_t audio_control[8]; /* New type? */  uint32_t subp_control[32]; /* New type? */  uint16_t next_pgc_nr;  uint16_t prev_pgc_nr;  uint16_t goup_pgc_nr;  uint8_t  still_time;  uint8_t  pg_playback_mode;  uint32_t palette[16]; /* New type struct {zero_1, Y, Cr, Cb} ? */  uint16_t command_tbl_offset;  uint16_t program_map_offset;  uint16_t cell_playback_offset;  uint16_t cell_position_offset;  pgc_command_tbl_t *command_tbl;  pgc_program_map_t  *program_map;  cell_playback_t *cell_playback;  cell_position_t *cell_position;} ATTRIBUTE_PACKED pgc_t;#define PGC_SIZE 236/** * Program Chain Information Search Pointer. */typedef struct {  uint8_t  entry_id;#ifdef WORDS_BIGENDIAN  unsigned int block_mode : 2;  unsigned int block_type : 2;  unsigned int unknown1   : 4;#else  unsigned int unknown1   : 4;  unsigned int block_type : 2;  unsigned int block_mode : 2;#endif    uint16_t ptl_id_mask;  uint32_t pgc_start_byte;  pgc_t *pgc;} ATTRIBUTE_PACKED pgci_srp_t;#define PGCI_SRP_SIZE 8

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -