2002-08-16 22:37:48 +00:00
|
|
|
|
#ifndef NAV_TYPES_H_INCLUDED
|
|
|
|
|
#define NAV_TYPES_H_INCLUDED
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Copyright (C) 2000, 2001 H<EFBFBD>kan Hjort <d95hjort@dtek.chalmers.se>
|
|
|
|
|
*
|
2005-03-11 02:40:28 +00:00
|
|
|
|
* Modified for use with MPlayer, changes contained in libdvdread_changes.diff.
|
|
|
|
|
* detailed CVS changelog at http://www.mplayerhq.hu/cgi-bin/cvsweb.cgi/main/
|
|
|
|
|
* $Id$
|
|
|
|
|
*
|
2002-08-16 22:37:48 +00:00
|
|
|
|
* The data structures in this file should represent the layout of the
|
|
|
|
|
* pci and dsi packets as they are stored in the stream. Information
|
|
|
|
|
* found by reading the source to VOBDUMP is the base for the structure
|
|
|
|
|
* and names of these data types.
|
|
|
|
|
*
|
|
|
|
|
* VOBDUMP: a program for examining DVD .VOB files.
|
|
|
|
|
* Copyright 1998, 1999 Eric Smith <eric@brouhaha.com>
|
|
|
|
|
*
|
|
|
|
|
* VOBDUMP is free software; you can redistribute it and/or modify it
|
|
|
|
|
* under the terms of the GNU General Public License version 2 as
|
|
|
|
|
* published by the Free Software Foundation. Note that I am not
|
|
|
|
|
* granting permission to redistribute or modify VOBDUMP under the terms
|
|
|
|
|
* of any later version of the General Public License.
|
|
|
|
|
*
|
|
|
|
|
* This program is distributed in the hope that it will be useful (or at
|
|
|
|
|
* least amusing), 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>
|
2002-08-16 22:50:22 +00:00
|
|
|
|
#include "ifo_types.h" // only dvd_time_t, vm_cmd_t and user_ops_t
|
2002-08-16 22:37:48 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* The length including the substream id byte. */
|
|
|
|
|
#define PCI_BYTES 0x3d4
|
|
|
|
|
#define DSI_BYTES 0x3fa
|
|
|
|
|
|
|
|
|
|
#define PS2_PCI_SUBSTREAM_ID 0x00
|
|
|
|
|
#define PS2_DSI_SUBSTREAM_ID 0x01
|
|
|
|
|
|
|
|
|
|
/* Remove this */
|
|
|
|
|
#define DSI_START_BYTE 1031
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if PRAGMA_PACK
|
|
|
|
|
#pragma pack(1)
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* PCI General Information
|
|
|
|
|
*/
|
|
|
|
|
typedef struct {
|
|
|
|
|
uint32_t nv_pck_lbn;
|
|
|
|
|
uint16_t vobu_cat;
|
|
|
|
|
uint16_t zero1;
|
|
|
|
|
user_ops_t vobu_uop_ctl;
|
|
|
|
|
uint32_t vobu_s_ptm;
|
|
|
|
|
uint32_t vobu_e_ptm;
|
|
|
|
|
uint32_t vobu_se_e_ptm;
|
|
|
|
|
dvd_time_t e_eltm;
|
|
|
|
|
char vobu_isrc[32];
|
|
|
|
|
} ATTRIBUTE_PACKED pci_gi_t;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Non Seamless Angle Information
|
|
|
|
|
*/
|
|
|
|
|
typedef struct {
|
|
|
|
|
uint32_t nsml_agl_dsta[9];
|
|
|
|
|
} ATTRIBUTE_PACKED nsml_agli_t;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Highlight General Information
|
|
|
|
|
*/
|
|
|
|
|
typedef struct {
|
|
|
|
|
uint16_t hli_ss; ///< only low 2 bits
|
|
|
|
|
uint32_t hli_s_ptm;
|
|
|
|
|
uint32_t hli_e_ptm;
|
|
|
|
|
uint32_t btn_se_e_ptm;
|
|
|
|
|
#ifdef WORDS_BIGENDIAN
|
|
|
|
|
unsigned int zero1 : 2;
|
|
|
|
|
unsigned int btngr_ns : 2;
|
|
|
|
|
unsigned int zero2 : 1;
|
|
|
|
|
unsigned int btngr1_dsp_ty : 3;
|
|
|
|
|
unsigned int zero3 : 1;
|
|
|
|
|
unsigned int btngr2_dsp_ty : 3;
|
|
|
|
|
unsigned int zero4 : 1;
|
|
|
|
|
unsigned int btngr3_dsp_ty : 3;
|
|
|
|
|
#else
|
|
|
|
|
unsigned int btngr1_dsp_ty : 3;
|
|
|
|
|
unsigned int zero2 : 1;
|
|
|
|
|
unsigned int btngr_ns : 2;
|
|
|
|
|
unsigned int zero1 : 2;
|
|
|
|
|
unsigned int btngr3_dsp_ty : 3;
|
|
|
|
|
unsigned int zero4 : 1;
|
|
|
|
|
unsigned int btngr2_dsp_ty : 3;
|
|
|
|
|
unsigned int zero3 : 1;
|
|
|
|
|
#endif
|
|
|
|
|
uint8_t btn_ofn;
|
|
|
|
|
uint8_t btn_ns; ///< only low 6 bits
|
|
|
|
|
uint8_t nsl_btn_ns; ///< only low 6 bits
|
|
|
|
|
uint8_t zero5;
|
|
|
|
|
uint8_t fosl_btnn; ///< only low 6 bits
|
|
|
|
|
uint8_t foac_btnn; ///< only low 6 bits
|
|
|
|
|
} ATTRIBUTE_PACKED hl_gi_t;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Button Color Information Table
|
|
|
|
|
*/
|
|
|
|
|
typedef struct {
|
|
|
|
|
uint32_t btn_coli[3][2];
|
|
|
|
|
} ATTRIBUTE_PACKED btn_colit_t;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Button Information
|
|
|
|
|
*/
|
|
|
|
|
typedef struct {
|
|
|
|
|
#ifdef WORDS_BIGENDIAN
|
|
|
|
|
unsigned int btn_coln : 2;
|
|
|
|
|
unsigned int x_start : 10;
|
|
|
|
|
unsigned int zero1 : 2;
|
|
|
|
|
unsigned int x_end : 10;
|
|
|
|
|
unsigned int auto_action_mode : 2;
|
|
|
|
|
unsigned int y_start : 10;
|
|
|
|
|
unsigned int zero2 : 2;
|
|
|
|
|
unsigned int y_end : 10;
|
|
|
|
|
|
|
|
|
|
unsigned int zero3 : 2;
|
|
|
|
|
unsigned int up : 6;
|
|
|
|
|
unsigned int zero4 : 2;
|
|
|
|
|
unsigned int down : 6;
|
|
|
|
|
unsigned int zero5 : 2;
|
|
|
|
|
unsigned int left : 6;
|
|
|
|
|
unsigned int zero6 : 2;
|
|
|
|
|
unsigned int right : 6;
|
|
|
|
|
#else
|
|
|
|
|
unsigned int x_end : 10;
|
|
|
|
|
unsigned int zero1 : 2;
|
|
|
|
|
unsigned int x_start : 10;
|
|
|
|
|
unsigned int btn_coln : 2;
|
|
|
|
|
unsigned int y_end : 10;
|
|
|
|
|
unsigned int zero2 : 2;
|
|
|
|
|
unsigned int y_start : 10;
|
|
|
|
|
unsigned int auto_action_mode : 2;
|
|
|
|
|
|
|
|
|
|
unsigned int up : 6;
|
|
|
|
|
unsigned int zero3 : 2;
|
|
|
|
|
unsigned int down : 6;
|
|
|
|
|
unsigned int zero4 : 2;
|
|
|
|
|
unsigned int left : 6;
|
|
|
|
|
unsigned int zero5 : 2;
|
|
|
|
|
unsigned int right : 6;
|
|
|
|
|
unsigned int zero6 : 2;
|
|
|
|
|
#endif
|
|
|
|
|
vm_cmd_t cmd;
|
|
|
|
|
} ATTRIBUTE_PACKED btni_t;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Highlight Information
|
|
|
|
|
*/
|
|
|
|
|
typedef struct {
|
|
|
|
|
hl_gi_t hl_gi;
|
|
|
|
|
btn_colit_t btn_colit;
|
|
|
|
|
btni_t btnit[36];
|
|
|
|
|
} ATTRIBUTE_PACKED hli_t;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* PCI packet
|
|
|
|
|
*/
|
|
|
|
|
typedef struct {
|
|
|
|
|
pci_gi_t pci_gi;
|
|
|
|
|
nsml_agli_t nsml_agli;
|
|
|
|
|
hli_t hli;
|
|
|
|
|
uint8_t zero1[189];
|
|
|
|
|
} ATTRIBUTE_PACKED pci_t;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* DSI General Information
|
|
|
|
|
*/
|
|
|
|
|
typedef struct {
|
|
|
|
|
uint32_t nv_pck_scr;
|
|
|
|
|
uint32_t nv_pck_lbn;
|
|
|
|
|
uint32_t vobu_ea;
|
|
|
|
|
uint32_t vobu_1stref_ea;
|
|
|
|
|
uint32_t vobu_2ndref_ea;
|
|
|
|
|
uint32_t vobu_3rdref_ea;
|
|
|
|
|
uint16_t vobu_vob_idn;
|
|
|
|
|
uint8_t zero1;
|
|
|
|
|
uint8_t vobu_c_idn;
|
|
|
|
|
dvd_time_t c_eltm;
|
|
|
|
|
} ATTRIBUTE_PACKED dsi_gi_t;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Seamless Playback Information
|
|
|
|
|
*/
|
|
|
|
|
typedef struct {
|
|
|
|
|
uint16_t category; ///< category of seamless VOBU
|
|
|
|
|
uint32_t ilvu_ea; ///< end address of interleaved Unit (sectors)
|
|
|
|
|
uint32_t ilvu_sa; ///< start address of next interleaved unit (sectors)
|
|
|
|
|
uint16_t size; ///< size of next interleaved unit (sectors)
|
|
|
|
|
uint32_t vob_v_s_s_ptm; ///< video start ptm in vob
|
|
|
|
|
uint32_t vob_v_e_e_ptm; ///< video end ptm in vob
|
|
|
|
|
struct {
|
|
|
|
|
uint32_t stp_ptm1;
|
|
|
|
|
uint32_t stp_ptm2;
|
|
|
|
|
uint32_t gap_len1;
|
|
|
|
|
uint32_t gap_len2;
|
|
|
|
|
} vob_a[8];
|
|
|
|
|
} ATTRIBUTE_PACKED sml_pbi_t;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Seamless Angle Infromation for one angle
|
|
|
|
|
*/
|
|
|
|
|
typedef struct {
|
|
|
|
|
uint32_t address; ///< Sector offset to next ILVU, high bit is before/after
|
|
|
|
|
uint16_t size; ///< Byte size of the ILVU poited to by address.
|
|
|
|
|
} ATTRIBUTE_PACKED sml_agl_data_t;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Seamless Angle Infromation
|
|
|
|
|
*/
|
|
|
|
|
typedef struct {
|
|
|
|
|
sml_agl_data_t data[9];
|
|
|
|
|
} ATTRIBUTE_PACKED sml_agli_t;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* VOBU Search Information
|
|
|
|
|
*/
|
|
|
|
|
typedef struct {
|
|
|
|
|
uint32_t next_video; ///< Next vobu that contains video
|
|
|
|
|
uint32_t fwda[19]; ///< Forwards, time
|
|
|
|
|
uint32_t next_vobu;
|
|
|
|
|
uint32_t prev_vobu;
|
|
|
|
|
uint32_t bwda[19]; ///< Backwards, time
|
|
|
|
|
uint32_t prev_video;
|
|
|
|
|
} ATTRIBUTE_PACKED vobu_sri_t;
|
|
|
|
|
|
|
|
|
|
#define SRI_END_OF_CELL 0x3fffffff
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Synchronous Information
|
|
|
|
|
*/
|
|
|
|
|
typedef struct {
|
|
|
|
|
uint16_t a_synca[8]; ///< Sector offset to first audio packet for this VOBU
|
|
|
|
|
uint32_t sp_synca[32]; ///< Sector offset to first subpicture packet
|
|
|
|
|
} ATTRIBUTE_PACKED synci_t;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* DSI packet
|
|
|
|
|
*/
|
|
|
|
|
typedef struct {
|
|
|
|
|
dsi_gi_t dsi_gi;
|
|
|
|
|
sml_pbi_t sml_pbi;
|
|
|
|
|
sml_agli_t sml_agli;
|
|
|
|
|
vobu_sri_t vobu_sri;
|
|
|
|
|
synci_t synci;
|
|
|
|
|
uint8_t zero1[471];
|
|
|
|
|
} ATTRIBUTE_PACKED dsi_t;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if PRAGMA_PACK
|
|
|
|
|
#pragma pack()
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#endif /* NAV_TYPES_H_INCLUDED */
|