summaryrefslogtreecommitdiffstats
path: root/libmpdvdkit2/nav_types.h
diff options
context:
space:
mode:
Diffstat (limited to 'libmpdvdkit2/nav_types.h')
-rw-r--r--libmpdvdkit2/nav_types.h288
1 files changed, 288 insertions, 0 deletions
diff --git a/libmpdvdkit2/nav_types.h b/libmpdvdkit2/nav_types.h
new file mode 100644
index 0000000000..bb74e29ede
--- /dev/null
+++ b/libmpdvdkit2/nav_types.h
@@ -0,0 +1,288 @@
+#ifndef NAV_TYPES_H_INCLUDED
+#define NAV_TYPES_H_INCLUDED
+
+/*
+ * Copyright (C) 2000, 2001 Håkan Hjort <d95hjort@dtek.chalmers.se>
+ *
+ * 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>
+#include <dvdread/ifo_types.h> // only dvd_time_t, vm_cmd_t and user_ops_t
+
+
+#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 */