annotate dvdnav_internal.h @ 409:9b8bfc56a7fe src

Add dvdnav_program_play & dvdnav_current_title_program Using title parts w/ dvdnav_part_play and dvdnav_current_title_info is not reliable for use as chapter marks in files made from transcoding. The start of a part does not necessarily fall strictly inside the main title. Parts can have an intro sequence before getting into the title. So we use program boundaries instead of part markers to test when we have reached a chapter point during encoding of the title. The same would apply to displaying the current chapter during playback. The program boundaries should be checked instead of looking for a part. Patch from John Stebbins. Thanks!
author erik
date Fri, 30 Jul 2010 23:34:16 +0000
parents 0d2d897a6558
children 8c87207b73ac
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
388
90ca650854e0 Remove all trailing whitespace,
rathann
parents: 370
diff changeset
1 /*
250
12cdd1369f77 patch from FrantiĄŻek to avoid symbol name clashes
mroi
parents: 239
diff changeset
2 * Copyright (C) 2001-2004 Rich Wareham <richwareham@users.sourceforge.net>
388
90ca650854e0 Remove all trailing whitespace,
rathann
parents: 370
diff changeset
3 *
201
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
4 * This file is part of libdvdnav, a DVD navigation library.
388
90ca650854e0 Remove all trailing whitespace,
rathann
parents: 370
diff changeset
5 *
201
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
6 * libdvdnav is free software; you can redistribute it and/or modify
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
7 * it under the terms of the GNU General Public License as published by
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
9 * (at your option) any later version.
388
90ca650854e0 Remove all trailing whitespace,
rathann
parents: 370
diff changeset
10 *
201
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
11 * libdvdnav is distributed in the hope that it will be useful,
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
14 * GNU General Public License for more details.
388
90ca650854e0 Remove all trailing whitespace,
rathann
parents: 370
diff changeset
15 *
389
d3c273ced49c Use consistent license headers everywhere: Fix wrong FSF address.
diego
parents: 388
diff changeset
16 * You should have received a copy of the GNU General Public License along
d3c273ced49c Use consistent license headers everywhere: Fix wrong FSF address.
diego
parents: 388
diff changeset
17 * with libdvdnav; if not, write to the Free Software Foundation, Inc.,
d3c273ced49c Use consistent license headers everywhere: Fix wrong FSF address.
diego
parents: 388
diff changeset
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
201
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
19 */
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
20
391
d232a96ac231 Use consistent multiple inclusion guards everywhere:
diego
parents: 389
diff changeset
21 #ifndef LIBDVDNAV_DVDNAV_INTERNAL_H
d232a96ac231 Use consistent multiple inclusion guards everywhere:
diego
parents: 389
diff changeset
22 #define LIBDVDNAV_DVDNAV_INTERNAL_H
201
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
23
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
24 #ifdef HAVE_CONFIG_H
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
25 #include "config.h"
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
26 #endif
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
27
230
065a2835ba90 Patch to compile with mingw32 from: -
jcdutton
parents: 217
diff changeset
28 #ifdef WIN32
239
eaa775ba1306 merge the two #ifdef blocks that both check for WIN32 to improve readability
mroi
parents: 230
diff changeset
29
230
065a2835ba90 Patch to compile with mingw32 from: -
jcdutton
parents: 217
diff changeset
30 /* pthread_mutex_* wrapper for win32 */
065a2835ba90 Patch to compile with mingw32 from: -
jcdutton
parents: 217
diff changeset
31 #include <windows.h>
065a2835ba90 Patch to compile with mingw32 from: -
jcdutton
parents: 217
diff changeset
32 #include <process.h>
065a2835ba90 Patch to compile with mingw32 from: -
jcdutton
parents: 217
diff changeset
33 typedef CRITICAL_SECTION pthread_mutex_t;
065a2835ba90 Patch to compile with mingw32 from: -
jcdutton
parents: 217
diff changeset
34 #define pthread_mutex_init(a, b) InitializeCriticalSection(a)
065a2835ba90 Patch to compile with mingw32 from: -
jcdutton
parents: 217
diff changeset
35 #define pthread_mutex_lock(a) EnterCriticalSection(a)
065a2835ba90 Patch to compile with mingw32 from: -
jcdutton
parents: 217
diff changeset
36 #define pthread_mutex_unlock(a) LeaveCriticalSection(a)
402
3776e1559236 Fix pthread_mutex_destroy macro for Win32
erik
parents: 392
diff changeset
37 #define pthread_mutex_destroy(a) DeleteCriticalSection(a)
201
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
38
370
d80a041928be gettimeofday() doesn't exist on windows, but recent mingw32 runtime
nicodvb
parents: 288
diff changeset
39 #ifndef HAVE_GETTIMEOFDAY
230
065a2835ba90 Patch to compile with mingw32 from: -
jcdutton
parents: 217
diff changeset
40 /* replacement gettimeofday implementation */
065a2835ba90 Patch to compile with mingw32 from: -
jcdutton
parents: 217
diff changeset
41 #include <sys/timeb.h>
250
12cdd1369f77 patch from FrantiĄŻek to avoid symbol name clashes
mroi
parents: 239
diff changeset
42 static inline int _private_gettimeofday( struct timeval *tv, void *tz )
230
065a2835ba90 Patch to compile with mingw32 from: -
jcdutton
parents: 217
diff changeset
43 {
065a2835ba90 Patch to compile with mingw32 from: -
jcdutton
parents: 217
diff changeset
44 struct timeb t;
065a2835ba90 Patch to compile with mingw32 from: -
jcdutton
parents: 217
diff changeset
45 ftime( &t );
065a2835ba90 Patch to compile with mingw32 from: -
jcdutton
parents: 217
diff changeset
46 tv->tv_sec = t.time;
065a2835ba90 Patch to compile with mingw32 from: -
jcdutton
parents: 217
diff changeset
47 tv->tv_usec = t.millitm * 1000;
065a2835ba90 Patch to compile with mingw32 from: -
jcdutton
parents: 217
diff changeset
48 return 0;
065a2835ba90 Patch to compile with mingw32 from: -
jcdutton
parents: 217
diff changeset
49 }
250
12cdd1369f77 patch from FrantiĄŻek to avoid symbol name clashes
mroi
parents: 239
diff changeset
50 #define gettimeofday(TV, TZ) _private_gettimeofday((TV), (TZ))
370
d80a041928be gettimeofday() doesn't exist on windows, but recent mingw32 runtime
nicodvb
parents: 288
diff changeset
51 #endif
d80a041928be gettimeofday() doesn't exist on windows, but recent mingw32 runtime
nicodvb
parents: 288
diff changeset
52
230
065a2835ba90 Patch to compile with mingw32 from: -
jcdutton
parents: 217
diff changeset
53 #include <io.h> /* read() */
065a2835ba90 Patch to compile with mingw32 from: -
jcdutton
parents: 217
diff changeset
54 #define lseek64 _lseeki64
239
eaa775ba1306 merge the two #ifdef blocks that both check for WIN32 to improve readability
mroi
parents: 230
diff changeset
55
eaa775ba1306 merge the two #ifdef blocks that both check for WIN32 to improve readability
mroi
parents: 230
diff changeset
56 #else
eaa775ba1306 merge the two #ifdef blocks that both check for WIN32 to improve readability
mroi
parents: 230
diff changeset
57
eaa775ba1306 merge the two #ifdef blocks that both check for WIN32 to improve readability
mroi
parents: 230
diff changeset
58 #include <pthread.h>
eaa775ba1306 merge the two #ifdef blocks that both check for WIN32 to improve readability
mroi
parents: 230
diff changeset
59
eaa775ba1306 merge the two #ifdef blocks that both check for WIN32 to improve readability
mroi
parents: 230
diff changeset
60 #endif /* WIN32 */
201
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
61
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
62 /* where should libdvdnav write its messages (stdout/stderr) */
405
0d2d897a6558 logs belong to stderr, not stdout; patch by John Stebbins
nicodvb
parents: 402
diff changeset
63 #define MSG_OUT stderr
201
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
64
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
65 /* Maximum length of an error string */
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
66 #define MAX_ERR_LEN 255
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
67
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
68 /* Use the POSIX PATH_MAX if available */
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
69 #ifdef PATH_MAX
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
70 #define MAX_PATH_LEN PATH_MAX
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
71 #else
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
72 #define MAX_PATH_LEN 255 /* Arbitrary */
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
73 #endif
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
74
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
75 #ifndef DVD_VIDEO_LB_LEN
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
76 #define DVD_VIDEO_LB_LEN 2048
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
77 #endif
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
78
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
79 typedef struct read_cache_s read_cache_t;
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
80
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
81 /*
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
82 * These are defined here because they are
388
90ca650854e0 Remove all trailing whitespace,
rathann
parents: 370
diff changeset
83 * not in ifo_types.h, they maybe one day
201
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
84 */
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
85
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
86 #ifndef audio_status_t
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
87 typedef struct {
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
88 #ifdef WORDS_BIGENDIAN
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
89 unsigned int available : 1;
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
90 unsigned int zero1 : 4;
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
91 unsigned int stream_number : 3;
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
92 uint8_t zero2;
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
93 #else
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
94 uint8_t zero2;
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
95 unsigned int stream_number : 3;
388
90ca650854e0 Remove all trailing whitespace,
rathann
parents: 370
diff changeset
96 unsigned int zero1 : 4;
201
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
97 unsigned int available : 1;
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
98 #endif
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
99 } ATTRIBUTE_PACKED audio_status_t;
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
100 #endif
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
101
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
102 #ifndef spu_status_t
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
103 typedef struct {
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
104 #ifdef WORDS_BIGENDIAN
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
105 unsigned int available : 1;
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
106 unsigned int zero1 : 2;
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
107 unsigned int stream_number_4_3 : 5;
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
108 unsigned int zero2 : 3;
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
109 unsigned int stream_number_wide : 5;
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
110 unsigned int zero3 : 3;
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
111 unsigned int stream_number_letterbox : 5;
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
112 unsigned int zero4 : 3;
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
113 unsigned int stream_number_pan_scan : 5;
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
114 #else
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
115 unsigned int stream_number_pan_scan : 5;
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
116 unsigned int zero4 : 3;
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
117 unsigned int stream_number_letterbox : 5;
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
118 unsigned int zero3 : 3;
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
119 unsigned int stream_number_wide : 5;
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
120 unsigned int zero2 : 3;
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
121 unsigned int stream_number_4_3 : 5;
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
122 unsigned int zero1 : 2;
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
123 unsigned int available : 1;
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
124 #endif
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
125 } ATTRIBUTE_PACKED spu_status_t;
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
126 #endif
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
127
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
128 typedef struct dvdnav_vobu_s {
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
129 int32_t vobu_start; /* Logical Absolute. MAX needed is 0x300000 */
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
130 int32_t vobu_length;
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
131 int32_t blockN; /* Relative offset */
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
132 int32_t vobu_next; /* Relative offset */
388
90ca650854e0 Remove all trailing whitespace,
rathann
parents: 370
diff changeset
133 } dvdnav_vobu_t;
90ca650854e0 Remove all trailing whitespace,
rathann
parents: 370
diff changeset
134
201
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
135 /** The main DVDNAV type **/
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
136
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
137 struct dvdnav_s {
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
138 /* General data */
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
139 char path[MAX_PATH_LEN]; /* Path to DVD device/dir */
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
140 dvd_file_t *file; /* Currently opened file */
388
90ca650854e0 Remove all trailing whitespace,
rathann
parents: 370
diff changeset
141
201
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
142 /* Position data */
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
143 vm_position_t position_next;
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
144 vm_position_t position_current;
388
90ca650854e0 Remove all trailing whitespace,
rathann
parents: 370
diff changeset
145 dvdnav_vobu_t vobu;
201
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
146
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
147 /* NAV data */
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
148 pci_t pci;
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
149 dsi_t dsi;
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
150 uint32_t last_cmd_nav_lbn; /* detects when a command is issued on an already left NAV */
388
90ca650854e0 Remove all trailing whitespace,
rathann
parents: 370
diff changeset
151
201
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
152 /* Flags */
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
153 int skip_still; /* Set when skipping a still */
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
154 int sync_wait; /* applications should wait till they are in sync with us */
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
155 int sync_wait_skip; /* Set when skipping wait state */
388
90ca650854e0 Remove all trailing whitespace,
rathann
parents: 370
diff changeset
156 int spu_clut_changed; /* The SPU CLUT changed */
201
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
157 int started; /* vm_start has been called? */
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
158 int use_read_ahead; /* 1 - use read-ahead cache, 0 - don't */
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
159 int pgc_based; /* positioning works PGC based instead of PG based */
269
77e472cef5f8 implemented dvdnav_get_current_time() with obvious meaning
nicodvb
parents: 265
diff changeset
160 int cur_cell_time; /* time expired since the beginning of the current cell, read from the dsi */
388
90ca650854e0 Remove all trailing whitespace,
rathann
parents: 370
diff changeset
161
201
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
162 /* VM */
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
163 vm_t *vm;
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
164 pthread_mutex_t vm_lock;
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
165
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
166 /* Read-ahead cache */
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
167 read_cache_t *cache;
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
168
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
169 /* Errors */
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
170 char err_str[MAX_ERR_LEN];
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
171 };
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
172
265
99d33725395d commit Miguel's approach on the time search function
mroi
parents: 259
diff changeset
173 /** HELPER FUNCTIONS **/
99d33725395d commit Miguel's approach on the time search function
mroi
parents: 259
diff changeset
174
99d33725395d commit Miguel's approach on the time search function
mroi
parents: 259
diff changeset
175 /* converts a dvd_time_t to PTS ticks */
99d33725395d commit Miguel's approach on the time search function
mroi
parents: 259
diff changeset
176 int64_t dvdnav_convert_time(dvd_time_t *time);
99d33725395d commit Miguel's approach on the time search function
mroi
parents: 259
diff changeset
177
201
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
178 /** USEFUL MACROS **/
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
179
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
180 #ifdef __GNUC__
258
0f055e94eb9c * fix the printerr() macros
mroi
parents: 250
diff changeset
181 #define printerrf(format, args...) \
0f055e94eb9c * fix the printerr() macros
mroi
parents: 250
diff changeset
182 do { if (this) snprintf(this->err_str, MAX_ERR_LEN, format, ## args); } while (0)
201
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
183 #else
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
184 #ifdef _MSC_VER
258
0f055e94eb9c * fix the printerr() macros
mroi
parents: 250
diff changeset
185 #define printerrf(str) \
0f055e94eb9c * fix the printerr() macros
mroi
parents: 250
diff changeset
186 do { if (this) snprintf(this->err_str, MAX_ERR_LEN, str); } while (0)
201
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
187 #else
258
0f055e94eb9c * fix the printerr() macros
mroi
parents: 250
diff changeset
188 #define printerrf(...) \
0f055e94eb9c * fix the printerr() macros
mroi
parents: 250
diff changeset
189 do { if (this) snprintf(this->err_str, MAX_ERR_LEN, __VA_ARGS__); } while (0)
201
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
190 #endif /* WIN32 */
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
191 #endif
258
0f055e94eb9c * fix the printerr() macros
mroi
parents: 250
diff changeset
192 #define printerr(str) \
259
39d2fc310eb9 fix the printerr macro again to have \0-terminated strings
mroi
parents: 258
diff changeset
193 do { if (this) strncpy(this->err_str, str, MAX_ERR_LEN - 1); } while (0)
201
534f17c79e4a dvdnav_internal.h is an internal header, only used at compile time;
mroi
parents:
diff changeset
194
391
d232a96ac231 Use consistent multiple inclusion guards everywhere:
diego
parents: 389
diff changeset
195 #endif /* LIBDVDNAV_DVDNAV_INTERNAL_H */