4 * Copyright (C) 2005-2013 Team XBMC
7 * This Program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2, or (at your option)
12 * This Program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with XBMC; see the file COPYING. If not, see
19 * <http://www.gnu.org/licenses/>.
24 #define DVDNAV_COMPILE
27 #include "dvdnav/dvdnav.h"
37 #include "dvdnav/dvdnav_internal.h"
38 #include "dvdnav/vm.h"
39 #include "dvdnav/dvd_types.h"
41 #ifdef WIN32 // WIN32INCLUDES
45 #include "DynamicDll.h"
47 class DllDvdNavInterface
50 virtual ~DllDvdNavInterface() {}
51 virtual dvdnav_status_t dvdnav_open(dvdnav_t **dest, const char *path)=0;
52 virtual dvdnav_status_t dvdnav_close(dvdnav_t *self)=0;
53 virtual dvdnav_status_t dvdnav_reset(dvdnav_t *self)=0;
54 virtual const char* dvdnav_err_to_string(dvdnav_t *self)=0;
55 virtual dvdnav_status_t dvdnav_set_readahead_flag(dvdnav_t *self, int32_t read_ahead_flag)=0;
56 virtual dvdnav_status_t dvdnav_set_PGC_positioning_flag(dvdnav_t *self, int32_t pgc_based_flag)=0;
57 virtual dvdnav_status_t dvdnav_get_next_cache_block(dvdnav_t *self, uint8_t **buf, int32_t *event, int32_t *len)=0;
58 virtual dvdnav_status_t dvdnav_free_cache_block(dvdnav_t *self, unsigned char *buf)=0;
59 virtual dvdnav_status_t dvdnav_still_skip(dvdnav_t *self)=0;
60 virtual dvdnav_status_t dvdnav_wait_skip(dvdnav_t *self)=0;
61 virtual dvdnav_status_t dvdnav_stop(dvdnav_t *self)=0;
62 virtual dvdnav_status_t dvdnav_button_select(dvdnav_t *self, pci_t *pci, int32_t button)=0;
63 virtual dvdnav_status_t dvdnav_button_activate(dvdnav_t *self, pci_t *pci)=0;
64 virtual dvdnav_status_t dvdnav_upper_button_select(dvdnav_t *self, pci_t *pci)=0;
65 virtual dvdnav_status_t dvdnav_lower_button_select(dvdnav_t *self, pci_t *pci)=0;
66 virtual dvdnav_status_t dvdnav_right_button_select(dvdnav_t *self, pci_t *pci)=0;
67 virtual dvdnav_status_t dvdnav_left_button_select(dvdnav_t *self, pci_t *pci)=0;
68 virtual dvdnav_status_t dvdnav_sector_search(dvdnav_t *self, uint64_t offset, int32_t origin)=0;
69 virtual pci_t* dvdnav_get_current_nav_pci(dvdnav_t *self)=0;
70 virtual dsi_t* dvdnav_get_current_nav_dsi(dvdnav_t *self)=0;
71 virtual dvdnav_status_t dvdnav_get_position(dvdnav_t *self, uint32_t *pos, uint32_t *len)=0;
72 virtual dvdnav_status_t dvdnav_current_title_info(dvdnav_t *self, int32_t *title, int32_t *part)=0;
73 virtual dvdnav_status_t dvdnav_spu_language_select(dvdnav_t *self, char *code)=0;
74 virtual dvdnav_status_t dvdnav_audio_language_select(dvdnav_t *self, char *code)=0;
75 virtual dvdnav_status_t dvdnav_menu_language_select(dvdnav_t *self, char *code)=0;
76 virtual int8_t dvdnav_is_domain_vts(dvdnav_t *self)=0;
77 virtual int8_t dvdnav_get_active_spu_stream(dvdnav_t *self)=0;
78 virtual int8_t dvdnav_get_spu_logical_stream(dvdnav_t *self, uint8_t subp_num)=0;
79 virtual uint16_t dvdnav_spu_stream_to_lang(dvdnav_t *self, uint8_t stream)=0;
80 virtual dvdnav_status_t dvdnav_get_current_highlight(dvdnav_t *self, int32_t *button)=0;
81 virtual dvdnav_status_t dvdnav_menu_call(dvdnav_t *self, DVDMenuID_t menu)=0;
82 virtual dvdnav_status_t dvdnav_prev_pg_search(dvdnav_t *self)=0;
83 virtual dvdnav_status_t dvdnav_next_pg_search(dvdnav_t *self)=0;
84 virtual dvdnav_status_t dvdnav_get_highlight_area(pci_t *nav_pci , int32_t button, int32_t mode, dvdnav_highlight_area_t *highlight)=0;
85 virtual dvdnav_status_t dvdnav_go_up(dvdnav_t *self)=0;
86 virtual int8_t dvdnav_get_active_audio_stream(dvdnav_t *self)=0;
87 virtual uint16_t dvdnav_audio_stream_to_lang(dvdnav_t *self, uint8_t stream)=0;
88 virtual vm_t* dvdnav_get_vm(dvdnav_t *self)=0;
89 virtual int dvdnav_get_nr_of_subtitle_streams(dvdnav_t *self)=0;
90 virtual int dvdnav_get_nr_of_audio_streams(dvdnav_t *self)=0;
91 virtual int dvdnav_get_button_info(dvdnav_t* self, int alpha[2][4], int color[2][4])=0;
92 virtual int8_t dvdnav_get_audio_logical_stream(dvdnav_t *self, uint8_t audio_num)=0;
93 virtual dvdnav_status_t dvdnav_set_region_mask(dvdnav_t *self, int32_t region_mask)=0;
94 virtual uint8_t dvdnav_get_video_aspect(dvdnav_t *self)=0;
95 virtual uint8_t dvdnav_get_video_scale_permission(dvdnav_t *self)=0;
96 virtual dvdnav_status_t dvdnav_get_number_of_titles(dvdnav_t *self, int32_t *titles)=0;
97 virtual dvdnav_status_t dvdnav_get_number_of_parts(dvdnav_t *self, int32_t title, int32_t *parts)=0;
98 virtual dvdnav_status_t dvdnav_title_play(dvdnav_t *self, int32_t title)=0;
99 virtual dvdnav_status_t dvdnav_part_play(dvdnav_t *self, int32_t title, int32_t part)=0;
100 virtual dvdnav_status_t dvdnav_subpicture_change(dvdnav_t *self, int32_t subpicture)=0;
101 virtual dvdnav_status_t dvdnav_audio_change(dvdnav_t *self, int32_t audio)=0;
102 virtual dvdnav_status_t dvdnav_get_audio_info(dvdnav_t * self, int32_t streamid, audio_attr_t* audio_attributes)=0;
103 virtual dvdnav_status_t dvdnav_get_stitle_info(dvdnav_t * self, int32_t streamid, subp_attr_t* stitle_attributes)=0;
104 virtual dvdnav_status_t dvdnav_time_search(dvdnav_t * self, uint64_t timepos)=0;
105 virtual int64_t dvdnav_convert_time(dvd_time_t *time)=0;
106 virtual dvdnav_status_t dvdnav_get_state(dvdnav_t *self, dvd_state_t *save_state)=0;
107 virtual dvdnav_status_t dvdnav_set_state(dvdnav_t *self, dvd_state_t *save_state)=0;
108 virtual dvdnav_status_t dvdnav_get_angle_info(dvdnav_t *self, int32_t *current_angle,int32_t *number_of_angles)=0;
109 virtual dvdnav_status_t dvdnav_mouse_activate(dvdnav_t *self, pci_t *pci, int32_t x, int32_t y)=0;
110 virtual dvdnav_status_t dvdnav_mouse_select(dvdnav_t *self, pci_t *pci, int32_t x, int32_t y)=0;
113 #if (defined USE_STATIC_LIBDVDNAV)
114 #error "Use of static libdvdnav is currently unsupported."
116 class DllDvdNav : public DllDynamic, DllDvdNavInterface
119 virtual ~DllDvdNav() {}
120 virtual dvdnav_status_t dvdnav_open(dvdnav_t **dest, const char *path)
121 { return ::dvdnav_open(dest, path); }
122 virtual dvdnav_status_t dvdnav_close(dvdnav_t *self)
123 { return ::dvdnav_close(self); }
124 virtual dvdnav_status_t dvdnav_reset(dvdnav_t *self)
125 { return ::dvdnav_reset(self); }
126 virtual const char* dvdnav_err_to_string(dvdnav_t *self)
127 { return ::dvdnav_err_to_string(self); }
128 virtual dvdnav_status_t dvdnav_set_readahead_flag(dvdnav_t *self, int32_t read_ahead_flag)
129 { return ::dvdnav_set_readahead_flag(self, read_ahead_flag); }
130 virtual dvdnav_status_t dvdnav_set_PGC_positioning_flag(dvdnav_t *self, int32_t pgc_based_flag)
131 { return ::dvdnav_set_PGC_positioning_flag(self, pgc_based_flag); }
132 virtual dvdnav_status_t dvdnav_get_next_cache_block(dvdnav_t *self, uint8_t **buf, int32_t *event, int32_t *len)
133 { return ::dvdnav_get_next_cache_block(self, buf, event, len); }
134 virtual dvdnav_status_t dvdnav_free_cache_block(dvdnav_t *self, unsigned char *buf)
135 { return ::dvdnav_free_cache_block(self, buf); }
136 virtual dvdnav_status_t dvdnav_still_skip(dvdnav_t *self)
137 { return ::dvdnav_still_skip(self); }
138 virtual dvdnav_status_t dvdnav_wait_skip(dvdnav_t *self)
139 { return ::dvdnav_wait_skip(self); }
140 virtual dvdnav_status_t dvdnav_stop(dvdnav_t *self)
141 { return ::dvdnav_stop(self); }
142 virtual dvdnav_status_t dvdnav_button_select(dvdnav_t *self, pci_t *pci, int32_t button)
143 { return ::dvdnav_button_select(self, pci, button); }
144 virtual dvdnav_status_t dvdnav_button_activate(dvdnav_t *self, pci_t *pci)
145 { return ::dvdnav_button_activate(self, pci); }
146 virtual dvdnav_status_t dvdnav_upper_button_select(dvdnav_t *self, pci_t *pci)
147 { return ::dvdnav_upper_button_select(self, pci); }
148 virtual dvdnav_status_t dvdnav_lower_button_select(dvdnav_t *self, pci_t *pci)
149 { return ::dvdnav_lower_button_select(self, pci); }
150 virtual dvdnav_status_t dvdnav_right_button_select(dvdnav_t *self, pci_t *pci)
151 { return ::dvdnav_right_button_select(self, pci); }
152 virtual dvdnav_status_t dvdnav_left_button_select(dvdnav_t *self, pci_t *pci)
153 { return ::dvdnav_left_button_select(self, pci); }
154 virtual dvdnav_status_t dvdnav_sector_search(dvdnav_t *self, uint64_t offset, int32_t origin)
155 { return ::dvdnav_sector_search(self, offset, origin); }
156 virtual pci_t* dvdnav_get_current_nav_pci(dvdnav_t *self)
157 { return ::dvdnav_get_current_nav_pci(self); }
158 virtual dsi_t* dvdnav_get_current_nav_dsi(dvdnav_t *self)
159 { return ::dvdnav_get_current_nav_dsi(self); }
160 virtual dvdnav_status_t dvdnav_get_position(dvdnav_t *self, uint32_t *pos, uint32_t *len)
161 { return ::dvdnav_get_position(self, pos, len); }
162 virtual dvdnav_status_t dvdnav_current_title_info(dvdnav_t *self, int32_t *title, int32_t *part)
163 { return ::dvdnav_current_title_info(self, title, part); }
164 virtual dvdnav_status_t dvdnav_spu_language_select(dvdnav_t *self, char *code)
165 { return ::dvdnav_spu_language_select(self, code); }
166 virtual dvdnav_status_t dvdnav_audio_language_select(dvdnav_t *self, char *code)
167 { return ::dvdnav_audio_language_select(self, code); }
168 virtual dvdnav_status_t dvdnav_menu_language_select(dvdnav_t *self, char *code)
169 { return ::dvdnav_menu_language_select(self, code); }
170 virtual int8_t dvdnav_is_domain_vts(dvdnav_t *self)
171 { return ::dvdnav_is_domain_vts(self); }
172 virtual int8_t dvdnav_get_active_spu_stream(dvdnav_t *self)
173 { return ::dvdnav_get_active_spu_stream(self); }
174 virtual int8_t dvdnav_get_spu_logical_stream(dvdnav_t *self, uint8_t subp_num)
175 { return ::dvdnav_get_spu_logical_stream(self, subp_num); }
176 virtual uint16_t dvdnav_spu_stream_to_lang(dvdnav_t *self, uint8_t stream)
177 { return ::dvdnav_spu_stream_to_lang(self, stream); }
178 virtual dvdnav_status_t dvdnav_get_current_highlight(dvdnav_t *self, int32_t *button)
179 { return ::dvdnav_get_current_highlight(self, button); }
180 virtual dvdnav_status_t dvdnav_menu_call(dvdnav_t *self, DVDMenuID_t menu)
181 { return ::dvdnav_menu_call(self, menu); }
182 virtual dvdnav_status_t dvdnav_prev_pg_search(dvdnav_t *self)
183 { return ::dvdnav_prev_pg_search(self); }
184 virtual dvdnav_status_t dvdnav_next_pg_search(dvdnav_t *self)
185 { return ::dvdnav_next_pg_search(self); }
186 virtual dvdnav_status_t dvdnav_get_highlight_area(pci_t *nav_pci , int32_t button, int32_t mode, dvdnav_highlight_area_t *highlight)
187 { return ::dvdnav_get_highlight_area(nav_pci, button, mode, highlight); }
188 virtual dvdnav_status_t dvdnav_go_up(dvdnav_t *self)
189 { return ::dvdnav_go_up(self); }
190 virtual int8_t dvdnav_get_active_audio_stream(dvdnav_t *self)
191 { return ::dvdnav_get_active_audio_stream(self); }
192 virtual uint16_t dvdnav_audio_stream_to_lang(dvdnav_t *self, uint8_t stream)
193 { return ::dvdnav_audio_stream_to_lang(self, stream); }
194 virtual vm_t* dvdnav_get_vm(dvdnav_t *self)
195 { return ::dvdnav_get_vm(self); }
196 virtual int dvdnav_get_nr_of_subtitle_streams(dvdnav_t *self)
197 { return ::dvdnav_get_nr_of_subtitle_streams(self); }
198 virtual int dvdnav_get_nr_of_audio_streams(dvdnav_t *self)
199 { return ::dvdnav_get_nr_of_audio_streams(self); }
200 virtual int dvdnav_get_button_info(dvdnav_t* self, int alpha[2][4], int color[2][4])
201 { return ::dvdnav_get_button_info(self, alpha, color); }
202 virtual int8_t dvdnav_get_audio_logical_stream(dvdnav_t *self, uint8_t audio_num)
203 { return ::dvdnav_get_audio_logical_stream(self, audio_num); }
204 virtual dvdnav_status_t dvdnav_set_region_mask(dvdnav_t *self, int32_t region_mask)
205 { return ::dvdnav_set_region_mask(self, region_mask); }
206 virtual uint8_t dvdnav_get_video_aspect(dvdnav_t *self)
207 { return ::dvdnav_get_video_aspect(self); }
208 virtual uint8_t dvdnav_get_video_scale_permission(dvdnav_t *self)
209 { return ::dvdnav_get_video_scale_permission(self); }
210 virtual dvdnav_status_t dvdnav_get_number_of_titles(dvdnav_t *self, int32_t *titles)
211 { return ::dvdnav_get_number_of_titles(self, titles); }
212 virtual dvdnav_status_t dvdnav_get_number_of_parts(dvdnav_t *self, int32_t title, int32_t *parts)
213 { return ::dvdnav_get_number_of_parts(self, title, parts); }
214 virtual dvdnav_status_t dvdnav_title_play(dvdnav_t *self, int32_t title)
215 { return ::dvdnav_title_play(self, title); }
216 virtual dvdnav_status_t dvdnav_part_play(dvdnav_t *self, int32_t title, int32_t part)
217 { return ::dvdnav_part_play(self, title, part); }
218 virtual dvdnav_status_t dvdnav_subpicture_change(dvdnav_t *self, int32_t subpicture)
219 { return ::dvdnav_subpicture_change(self, subpicture); }
220 virtual dvdnav_status_t dvdnav_audio_change(dvdnav_t *self, int32_t audio)
221 { return ::dvdnav_audio_change(self, audio); }
222 virtual dvdnav_status_t dvdnav_get_audio_info(dvdnav_t * self, int32_t streamid, audio_attr_t* audio_attributes)
223 { return ::dvdnav_get_audio_info(self, streamid, audio_attributes); }
224 virtual dvdnav_status_t dvdnav_get_stitle_info(dvdnav_t * self, int32_t streamid, subp_attr_t* stitle_attributes)
225 { return ::dvdnav_get_stitle_info(self, streamid, stitle_attributes); }
226 virtual dvdnav_status_t dvdnav_time_search(dvdnav_t * self, uint64_t timepos)
227 { return ::dvdnav_time_search(self, timepos); }
228 virtual int64_t dvdnav_convert_time(dvd_time_t *time)
229 { return ::dvdnav_convert_time(time); }
230 virtual dvdnav_status_t dvdnav_get_state(dvdnav_t *self, dvd_state_t *save_state)
231 { return ::dvdnav_get_state(self, save_state); }
232 virtual dvdnav_status_t dvdnav_set_state(dvdnav_t *self, dvd_state_t *save_state)
233 { return ::dvdnav_set_state(self, save_state); }
234 virtual dvdnav_status_t dvdnav_get_angle_info(dvdnav_t *self, int32_t *current_angle,int32_t *number_of_angles)
235 { return ::dvdnav_get_angle_info(self, current_angle, number_of_angles); }
236 virtual dvdnav_status_t dvdnav_mouse_activate(dvdnav_t *self, pci_t *pci, int32_t x, int32_t y)
237 { return ::dvdnav_mouse_activate(self, pci, x, y); }
238 virtual dvdnav_status_t dvdnav_mouse_select(dvdnav_t *self, pci_t *pci, int32_t x, int32_t y)
239 { return ::dvdnav_mouse_select(self, pci, x, y); }
242 virtual bool ResolveExports() { return true; }
243 virtual bool Load() { return true; }
244 virtual void Unload() {}
249 class DllDvdNav : public DllDynamic, DllDvdNavInterface
251 DECLARE_DLL_WRAPPER(DllDvdNav, DLL_PATH_LIBDVDNAV)
253 DEFINE_METHOD2(dvdnav_status_t, dvdnav_open, (dvdnav_t **p1, const char *p2))
254 DEFINE_METHOD1(dvdnav_status_t, dvdnav_close, (dvdnav_t *p1))
255 DEFINE_METHOD1(dvdnav_status_t, dvdnav_reset, (dvdnav_t *p1))
256 DEFINE_METHOD1(const char*, dvdnav_err_to_string, (dvdnav_t *p1))
257 DEFINE_METHOD2(dvdnav_status_t, dvdnav_set_readahead_flag, (dvdnav_t *p1, int32_t p2))
258 DEFINE_METHOD2(dvdnav_status_t, dvdnav_set_PGC_positioning_flag, (dvdnav_t *p1, int32_t p2))
259 DEFINE_METHOD4(dvdnav_status_t, dvdnav_get_next_cache_block, (dvdnav_t *p1, uint8_t **p2, int32_t *p3, int32_t *p4))
260 DEFINE_METHOD2(dvdnav_status_t, dvdnav_free_cache_block, (dvdnav_t *p1, unsigned char *p2))
261 DEFINE_METHOD1(dvdnav_status_t, dvdnav_still_skip, (dvdnav_t *p1))
262 DEFINE_METHOD1(dvdnav_status_t, dvdnav_wait_skip, (dvdnav_t *p1))
263 DEFINE_METHOD1(dvdnav_status_t, dvdnav_stop, (dvdnav_t *p1))
264 DEFINE_METHOD3(dvdnav_status_t, dvdnav_button_select, (dvdnav_t *p1, pci_t *p2, int32_t p3))
265 DEFINE_METHOD2(dvdnav_status_t, dvdnav_button_activate,(dvdnav_t *p1, pci_t *p2))
266 DEFINE_METHOD2(dvdnav_status_t, dvdnav_upper_button_select, (dvdnav_t *p1, pci_t *p2))
267 DEFINE_METHOD2(dvdnav_status_t, dvdnav_lower_button_select, (dvdnav_t *p1, pci_t *p2))
268 DEFINE_METHOD2(dvdnav_status_t, dvdnav_right_button_select, (dvdnav_t *p1, pci_t *p2))
269 DEFINE_METHOD2(dvdnav_status_t, dvdnav_left_button_select, (dvdnav_t *p1, pci_t *p2))
270 DEFINE_METHOD3(dvdnav_status_t, dvdnav_sector_search, (dvdnav_t *p1, uint64_t p2, int32_t p3))
271 DEFINE_METHOD1(pci_t*, dvdnav_get_current_nav_pci, (dvdnav_t *p1))
272 DEFINE_METHOD1(dsi_t*, dvdnav_get_current_nav_dsi, (dvdnav_t *p1))
273 DEFINE_METHOD3(dvdnav_status_t, dvdnav_get_position, (dvdnav_t *p1, uint32_t *p2, uint32_t *p3))
274 DEFINE_METHOD3(dvdnav_status_t, dvdnav_current_title_info, (dvdnav_t *p1, int32_t *p2, int32_t *p3))
275 DEFINE_METHOD2(dvdnav_status_t, dvdnav_spu_language_select, (dvdnav_t *p1, char *p2))
276 DEFINE_METHOD2(dvdnav_status_t, dvdnav_audio_language_select, (dvdnav_t *p1, char *p2))
277 DEFINE_METHOD2(dvdnav_status_t, dvdnav_menu_language_select, (dvdnav_t *p1, char *p2))
278 DEFINE_METHOD1(int8_t, dvdnav_is_domain_vts, (dvdnav_t *p1))
279 DEFINE_METHOD1(int8_t, dvdnav_get_active_spu_stream, (dvdnav_t *p1))
280 DEFINE_METHOD2(int8_t, dvdnav_get_spu_logical_stream, (dvdnav_t *p1, uint8_t p2))
281 DEFINE_METHOD2(uint16_t, dvdnav_spu_stream_to_lang, (dvdnav_t *p1, uint8_t p2))
282 DEFINE_METHOD2(dvdnav_status_t, dvdnav_get_current_highlight, (dvdnav_t *p1, int32_t *p2))
283 DEFINE_METHOD2(dvdnav_status_t, dvdnav_menu_call, (dvdnav_t *p1, DVDMenuID_t p2))
284 DEFINE_METHOD1(dvdnav_status_t, dvdnav_prev_pg_search, (dvdnav_t *p1))
285 DEFINE_METHOD1(dvdnav_status_t, dvdnav_next_pg_search, (dvdnav_t *p1))
286 DEFINE_METHOD4(dvdnav_status_t, dvdnav_get_highlight_area, (pci_t *p1, int32_t p2, int32_t p3, dvdnav_highlight_area_t *p4))
287 DEFINE_METHOD1(dvdnav_status_t, dvdnav_go_up, (dvdnav_t *p1))
288 DEFINE_METHOD1(int8_t, dvdnav_get_active_audio_stream, (dvdnav_t *p1))
289 DEFINE_METHOD2(uint16_t, dvdnav_audio_stream_to_lang, (dvdnav_t *p1, uint8_t p2))
290 DEFINE_METHOD1(vm_t*, dvdnav_get_vm, (dvdnav_t *p1))
291 DEFINE_METHOD1(int, dvdnav_get_nr_of_subtitle_streams, (dvdnav_t *p1))
292 DEFINE_METHOD1(int, dvdnav_get_nr_of_audio_streams, (dvdnav_t *p1))
293 DEFINE_METHOD3(int, dvdnav_get_button_info, (dvdnav_t* p1, int p2[2][4], int p3[2][4]))
294 DEFINE_METHOD2(int8_t, dvdnav_get_audio_logical_stream, (dvdnav_t *p1, uint8_t p2))
295 DEFINE_METHOD2(dvdnav_status_t, dvdnav_set_region_mask, (dvdnav_t *p1, int32_t p2))
296 DEFINE_METHOD1(uint8_t, dvdnav_get_video_aspect, (dvdnav_t *p1))
297 DEFINE_METHOD1(uint8_t, dvdnav_get_video_scale_permission, (dvdnav_t *p1))
298 DEFINE_METHOD2(dvdnav_status_t, dvdnav_get_number_of_titles, (dvdnav_t *p1, int32_t *p2))
299 DEFINE_METHOD3(dvdnav_status_t, dvdnav_get_number_of_parts, (dvdnav_t *p1, int32_t p2, int32_t *p3))
300 DEFINE_METHOD2(dvdnav_status_t, dvdnav_title_play, (dvdnav_t *p1, int32_t p2))
301 DEFINE_METHOD3(dvdnav_status_t, dvdnav_part_play, (dvdnav_t *p1, int32_t p2, int32_t p3))
302 DEFINE_METHOD2(dvdnav_status_t, dvdnav_subpicture_change, (dvdnav_t *p1, int32_t p2))
303 DEFINE_METHOD2(dvdnav_status_t, dvdnav_audio_change, (dvdnav_t *p1, int32_t p2))
304 DEFINE_METHOD3(dvdnav_status_t, dvdnav_get_audio_info, (dvdnav_t * p1, int32_t p2, audio_attr_t* p3))
305 DEFINE_METHOD3(dvdnav_status_t, dvdnav_get_stitle_info, (dvdnav_t * p1, int32_t p2, subp_attr_t* p3))
306 DEFINE_METHOD2(dvdnav_status_t, dvdnav_time_search, (dvdnav_t * p1, uint64_t p2))
307 DEFINE_METHOD1(int64_t, dvdnav_convert_time, (dvd_time_t *p1))
308 DEFINE_METHOD2(dvdnav_status_t, dvdnav_get_state, (dvdnav_t *p1, dvd_state_t *p2))
309 DEFINE_METHOD2(dvdnav_status_t, dvdnav_set_state, (dvdnav_t *p1, dvd_state_t *p2))
310 DEFINE_METHOD3(dvdnav_status_t, dvdnav_get_angle_info, (dvdnav_t *p1, int32_t *p2,int32_t *p3))
311 DEFINE_METHOD4(dvdnav_status_t, dvdnav_mouse_activate, (dvdnav_t *p1, pci_t *p2, int32_t p3, int32_t p4))
312 DEFINE_METHOD4(dvdnav_status_t, dvdnav_mouse_select, (dvdnav_t *p1, pci_t *p2, int32_t p3, int32_t p4))
313 BEGIN_METHOD_RESOLVE()
314 RESOLVE_METHOD(dvdnav_open)
315 RESOLVE_METHOD(dvdnav_close)
316 RESOLVE_METHOD(dvdnav_reset)
317 RESOLVE_METHOD(dvdnav_err_to_string)
318 RESOLVE_METHOD(dvdnav_set_readahead_flag)
319 RESOLVE_METHOD(dvdnav_set_PGC_positioning_flag)
320 RESOLVE_METHOD(dvdnav_get_next_cache_block)
321 RESOLVE_METHOD(dvdnav_free_cache_block)
322 RESOLVE_METHOD(dvdnav_still_skip)
323 RESOLVE_METHOD(dvdnav_wait_skip)
324 RESOLVE_METHOD(dvdnav_stop)
325 RESOLVE_METHOD(dvdnav_button_select)
326 RESOLVE_METHOD(dvdnav_button_activate)
327 RESOLVE_METHOD(dvdnav_upper_button_select)
328 RESOLVE_METHOD(dvdnav_lower_button_select)
329 RESOLVE_METHOD(dvdnav_right_button_select)
330 RESOLVE_METHOD(dvdnav_left_button_select)
331 RESOLVE_METHOD(dvdnav_sector_search)
332 RESOLVE_METHOD(dvdnav_get_current_nav_pci)
333 RESOLVE_METHOD(dvdnav_get_current_nav_dsi)
334 RESOLVE_METHOD(dvdnav_get_position)
335 RESOLVE_METHOD(dvdnav_current_title_info)
336 RESOLVE_METHOD(dvdnav_spu_language_select)
337 RESOLVE_METHOD(dvdnav_audio_language_select)
338 RESOLVE_METHOD(dvdnav_menu_language_select)
339 RESOLVE_METHOD(dvdnav_is_domain_vts)
340 RESOLVE_METHOD(dvdnav_get_active_spu_stream)
341 RESOLVE_METHOD(dvdnav_get_spu_logical_stream)
342 RESOLVE_METHOD(dvdnav_spu_stream_to_lang)
343 RESOLVE_METHOD(dvdnav_get_current_highlight)
344 RESOLVE_METHOD(dvdnav_menu_call)
345 RESOLVE_METHOD(dvdnav_prev_pg_search)
346 RESOLVE_METHOD(dvdnav_next_pg_search)
347 RESOLVE_METHOD(dvdnav_get_highlight_area)
348 RESOLVE_METHOD(dvdnav_go_up)
349 RESOLVE_METHOD(dvdnav_get_active_audio_stream)
350 RESOLVE_METHOD(dvdnav_audio_stream_to_lang)
351 RESOLVE_METHOD(dvdnav_get_vm)
352 RESOLVE_METHOD(dvdnav_get_nr_of_subtitle_streams)
353 RESOLVE_METHOD(dvdnav_get_nr_of_audio_streams)
354 RESOLVE_METHOD(dvdnav_get_button_info)
355 RESOLVE_METHOD(dvdnav_get_audio_logical_stream)
356 RESOLVE_METHOD(dvdnav_set_region_mask)
357 RESOLVE_METHOD(dvdnav_get_video_aspect)
358 RESOLVE_METHOD(dvdnav_get_video_scale_permission)
359 RESOLVE_METHOD(dvdnav_get_number_of_titles)
360 RESOLVE_METHOD(dvdnav_get_number_of_parts)
361 RESOLVE_METHOD(dvdnav_title_play)
362 RESOLVE_METHOD(dvdnav_part_play)
363 RESOLVE_METHOD(dvdnav_subpicture_change)
364 RESOLVE_METHOD(dvdnav_audio_change)
365 RESOLVE_METHOD(dvdnav_get_audio_info)
366 RESOLVE_METHOD(dvdnav_get_stitle_info)
367 RESOLVE_METHOD(dvdnav_time_search)
368 RESOLVE_METHOD(dvdnav_convert_time)
369 RESOLVE_METHOD(dvdnav_get_state)
370 RESOLVE_METHOD(dvdnav_set_state)
371 RESOLVE_METHOD(dvdnav_get_angle_info)
372 RESOLVE_METHOD(dvdnav_mouse_activate)
373 RESOLVE_METHOD(dvdnav_mouse_select)