annotate highlight.c @ 119:bd8601b74c3d src

this is causing more harm than good libdvdread is now considered to be the only "official reference" concerning headers for DVD structures and we should always use them. Problems only arise, if applications do not (this lately was a problem in xine).
author mroi
date Sat, 08 Mar 2003 14:04:20 +0000
parents 48ba92648842
children 5897ff629f7c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
1 /*
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
2 * Copyright (C) 2000 Rich Wareham <richwareham@users.sourceforge.net>
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
3 *
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
4 * This file is part of libdvdnav, a DVD navigation library.
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
5 *
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
6 * libdvdnav is free software; you can redistribute it and/or modify
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
7 * it under the terms of the GNU General Public License as published by
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
9 * (at your option) any later version.
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
10 *
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
11 * libdvdnav is distributed in the hope that it will be useful,
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
14 * GNU General Public License for more details.
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
15 *
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
16 * You should have received a copy of the GNU General Public License
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
17 * along with this program; if not, write to the Free Software
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
18 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
19 *
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
20 * $Id$
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
21 *
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
22 */
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
23
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
24 #ifdef HAVE_CONFIG_H
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
25 #include "config.h"
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
26 #endif
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
27
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
28 #include <assert.h>
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
29
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
30 #include "dvdnav_internal.h"
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
31
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
32 #include "vm.h"
119
bd8601b74c3d this is causing more harm than good
mroi
parents: 118
diff changeset
33 #include <dvdread/nav_types.h>
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
34
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
35 /*
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
36 #define BUTTON_TESTING
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
37 */
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
38
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
39 #ifdef BUTTON_TESTING
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
40
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
41 #include <dvdread/nav_print.h>
86
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
42 #include "vmcmd.h"
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
43
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
44 static void print_time(dvd_time_t *dtime) {
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
45 const char *rate;
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
46
86
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
47 assert((dtime->hour>>4) < 0xa && (dtime->hour&0xf) < 0xa);
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
48 assert((dtime->minute>>4) < 0x7 && (dtime->minute&0xf) < 0xa);
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
49 assert((dtime->second>>4) < 0x7 && (dtime->second&0xf) < 0xa);
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
50 assert((dtime->frame_u&0xf) < 0xa);
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
51
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
52 fprintf(MSG_OUT,"%02x:%02x:%02x.%02x",
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
53 dtime->hour,
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
54 dtime->minute,
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
55 dtime->second,
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
56 dtime->frame_u & 0x3f);
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
57 switch((dtime->frame_u & 0xc0) >> 6) {
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
58 case 1:
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
59 rate = "25.00";
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
60 break;
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
61 case 3:
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
62 rate = "29.97";
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
63 break;
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
64 default:
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
65 rate = "(please send a bug report)";
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
66 break;
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
67 }
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
68 fprintf(MSG_OUT," @ %s fps", rate);
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
69 }
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
70
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
71 static void nav_print_PCI_GI(pci_gi_t *pci_gi) {
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
72 int i;
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
73
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
74 fprintf(MSG_OUT,"libdvdnav: pci_gi:\n");
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
75 fprintf(MSG_OUT,"libdvdnav: nv_pck_lbn 0x%08x\n", pci_gi->nv_pck_lbn);
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
76 fprintf(MSG_OUT,"libdvdnav: vobu_cat 0x%04x\n", pci_gi->vobu_cat);
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
77 fprintf(MSG_OUT,"libdvdnav: vobu_uop_ctl 0x%08x\n", *(uint32_t*)&pci_gi->vobu_uop_ctl);
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
78 fprintf(MSG_OUT,"libdvdnav: vobu_s_ptm 0x%08x\n", pci_gi->vobu_s_ptm);
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
79 fprintf(MSG_OUT,"libdvdnav: vobu_e_ptm 0x%08x\n", pci_gi->vobu_e_ptm);
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
80 fprintf(MSG_OUT,"libdvdnav: vobu_se_e_ptm 0x%08x\n", pci_gi->vobu_se_e_ptm);
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
81 fprintf(MSG_OUT,"libdvdnav: e_eltm ");
86
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
82 print_time(&pci_gi->e_eltm);
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
83 fprintf(MSG_OUT,"\n");
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
84
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
85 fprintf(MSG_OUT,"libdvdnav: vobu_isrc \"");
86
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
86 for(i = 0; i < 32; i++) {
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
87 char c = pci_gi->vobu_isrc[i];
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
88 if((c >= ' ') && (c <= '~'))
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
89 fprintf(MSG_OUT,"%c", c);
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
90 else
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
91 fprintf(MSG_OUT,".");
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
92 }
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
93 fprintf(MSG_OUT,"\"\n");
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
94 }
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
95
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
96 static void nav_print_NSML_AGLI(nsml_agli_t *nsml_agli) {
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
97 int i, j = 0;
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
98
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
99 for(i = 0; i < 9; i++)
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
100 j |= nsml_agli->nsml_agl_dsta[i];
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
101 if(j == 0)
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
102 return;
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
103
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
104 fprintf(MSG_OUT,"libdvdnav: nsml_agli:\n");
86
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
105 for(i = 0; i < 9; i++)
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
106 if(nsml_agli->nsml_agl_dsta[i])
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
107 fprintf(MSG_OUT,"libdvdnav: nsml_agl_c%d_dsta 0x%08x\n", i + 1,
86
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
108 nsml_agli->nsml_agl_dsta[i]);
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
109 }
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
110
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
111 static void nav_print_HL_GI(hl_gi_t *hl_gi, int *btngr_ns, int *btn_ns) {
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
112
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
113 if((hl_gi->hli_ss & 0x03) == 0)
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
114 return;
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
115
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
116 fprintf(MSG_OUT,"libdvdnav: hl_gi:\n");
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
117 fprintf(MSG_OUT,"libdvdnav: hli_ss 0x%01x\n", hl_gi->hli_ss & 0x03);
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
118 fprintf(MSG_OUT,"libdvdnav: hli_s_ptm 0x%08x\n", hl_gi->hli_s_ptm);
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
119 fprintf(MSG_OUT,"libdvdnav: hli_e_ptm 0x%08x\n", hl_gi->hli_e_ptm);
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
120 fprintf(MSG_OUT,"libdvdnav: btn_se_e_ptm 0x%08x\n", hl_gi->btn_se_e_ptm);
86
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
121
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
122 *btngr_ns = hl_gi->btngr_ns;
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
123 fprintf(MSG_OUT,"libdvdnav: btngr_ns %d\n", hl_gi->btngr_ns);
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
124 fprintf(MSG_OUT,"libdvdnav: btngr%d_dsp_ty 0x%02x\n", 1, hl_gi->btngr1_dsp_ty);
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
125 fprintf(MSG_OUT,"libdvdnav: btngr%d_dsp_ty 0x%02x\n", 2, hl_gi->btngr2_dsp_ty);
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
126 fprintf(MSG_OUT,"libdvdnav: btngr%d_dsp_ty 0x%02x\n", 3, hl_gi->btngr3_dsp_ty);
86
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
127
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
128 fprintf(MSG_OUT,"libdvdnav: btn_ofn %d\n", hl_gi->btn_ofn);
86
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
129 *btn_ns = hl_gi->btn_ns;
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
130 fprintf(MSG_OUT,"libdvdnav: btn_ns %d\n", hl_gi->btn_ns);
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
131 fprintf(MSG_OUT,"libdvdnav: nsl_btn_ns %d\n", hl_gi->nsl_btn_ns);
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
132 fprintf(MSG_OUT,"libdvdnav: fosl_btnn %d\n", hl_gi->fosl_btnn);
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
133 fprintf(MSG_OUT,"libdvdnav: foac_btnn %d\n", hl_gi->foac_btnn);
86
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
134 }
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
135
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
136 static void nav_print_BTN_COLIT(btn_colit_t *btn_colit) {
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
137 int i, j;
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
138
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
139 j = 0;
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
140 for(i = 0; i < 6; i++)
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
141 j |= btn_colit->btn_coli[i/2][i&1];
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
142 if(j == 0)
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
143 return;
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
144
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
145 fprintf(MSG_OUT,"libdvdnav: btn_colit:\n");
86
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
146 for(i = 0; i < 3; i++)
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
147 for(j = 0; j < 2; j++)
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
148 fprintf(MSG_OUT,"libdvdnav: btn_cqoli %d %s_coli: %08x\n",
86
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
149 i, (j == 0) ? "sl" : "ac",
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
150 btn_colit->btn_coli[i][j]);
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
151 }
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
152
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
153 static void nav_print_BTNIT(btni_t *btni_table, int btngr_ns, int btn_ns) {
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
154 int i, j, k;
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
155
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
156 fprintf(MSG_OUT,"libdvdnav: btnit:\n");
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
157 fprintf(MSG_OUT,"libdvdnav: btngr_ns: %i\n", btngr_ns);
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
158 fprintf(MSG_OUT,"libdvdnav: btn_ns: %i\n", btn_ns);
86
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
159
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
160 if(btngr_ns == 0)
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
161 return;
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
162
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
163 for(i = 0; i < btngr_ns; i++) {
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
164 for(j = 0; j < (36 / btngr_ns); j++) {
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
165 if(j < btn_ns) {
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
166 btni_t *btni = &btni_table[(36 / btngr_ns) * i + j];
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
167
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
168 fprintf(MSG_OUT,"libdvdnav: group %d btni %d: ", i+1, j+1);
86
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
169 fprintf(MSG_OUT,"btn_coln %d, auto_action_mode %d\n",
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
170 btni->btn_coln, btni->auto_action_mode);
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
171 fprintf(MSG_OUT,"libdvdnav: coords (%d, %d) .. (%d, %d)\n",
86
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
172 btni->x_start, btni->y_start, btni->x_end, btni->y_end);
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
173
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
174 fprintf(MSG_OUT,"libdvdnav: up %d, ", btni->up);
86
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
175 fprintf(MSG_OUT,"down %d, ", btni->down);
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
176 fprintf(MSG_OUT,"left %d, ", btni->left);
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
177 fprintf(MSG_OUT,"right %d\n", btni->right);
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
178 for(k = 0; k < 8; k++) {
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
179 fprintf(MSG_OUT, "libdvdnav: %02x ", btni->cmd.bytes[k]);
86
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
180 }
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
181 fprintf(MSG_OUT, "| ");
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
182 vmPrint_mnemonic(&btni->cmd);
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
183 fprintf(MSG_OUT, "\n");
86
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
184 }
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
185 }
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
186 }
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
187 }
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
188
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
189 static void nav_print_HLI(hli_t *hli) {
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
190 int btngr_ns = 0, btn_ns = 0;
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
191
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
192 fprintf(MSG_OUT,"libdvdnav: hli:\n");
86
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
193 nav_print_HL_GI(&hli->hl_gi, & btngr_ns, & btn_ns);
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
194 nav_print_BTN_COLIT(&hli->btn_colit);
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
195 nav_print_BTNIT(hli->btnit, btngr_ns, btn_ns);
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
196 }
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
197
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
198 void nav_print_PCI(pci_t *pci) {
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
199 fprintf(MSG_OUT,"libdvdnav: pci packet:\n");
86
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
200 nav_print_PCI_GI(&pci->pci_gi);
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
201 nav_print_NSML_AGLI(&pci->nsml_agli);
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
202 nav_print_HLI(&pci->hli);
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
203 }
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
204
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
205 #endif
86
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
206
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
207
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
208 /* Highlighting API calls */
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
209
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
210 dvdnav_status_t dvdnav_get_current_highlight(dvdnav_t *this, int *button) {
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
211
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
212 if(!this) {
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
213 printerr("Passed a NULL pointer.");
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
214 return S_ERR;
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
215 }
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
216
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
217 /* Simply return the appropriate value based on the SPRM */
117
816d82ff7eed return the correct current hightlight
mroi
parents: 116
diff changeset
218 (*button) = this->position_current.button;
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
219
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
220 return S_OK;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
221 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
222
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
223 static btni_t *get_current_button(dvdnav_t *this, pci_t *pci) {
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
224 int button = 0;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
225
117
816d82ff7eed return the correct current hightlight
mroi
parents: 116
diff changeset
226 if(!this) {
816d82ff7eed return the correct current hightlight
mroi
parents: 116
diff changeset
227 printerr("Passed a NULL pointer.");
816d82ff7eed return the correct current hightlight
mroi
parents: 116
diff changeset
228 return S_ERR;
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
229 }
117
816d82ff7eed return the correct current hightlight
mroi
parents: 116
diff changeset
230
816d82ff7eed return the correct current hightlight
mroi
parents: 116
diff changeset
231 button = this->vm->state.HL_BTNN_REG >> 10;
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
232 #ifdef BUTTON_TESTING
86
129ac4af16a4 Improve debugging output to help with debugging button activations.
jcdutton
parents: 76
diff changeset
233 nav_print_PCI(&(this->pci));
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
234 #endif
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
235
98
457f35f43ba6 Improved DVD menu selection.
jcdutton
parents: 91
diff changeset
236 return &(pci->hli.btnit[button-1]);
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
237 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
238
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
239 static dvdnav_status_t button_auto_action(dvdnav_t *this, pci_t *pci) {
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
240 if (get_current_button(this, pci)->auto_action_mode)
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
241 return dvdnav_button_activate(this, pci);
29
c3c8b98d7e95 Enable auto action buttons.
jcdutton
parents: 26
diff changeset
242 }
c3c8b98d7e95 Enable auto action buttons.
jcdutton
parents: 26
diff changeset
243
98
457f35f43ba6 Improved DVD menu selection.
jcdutton
parents: 91
diff changeset
244 dvdnav_status_t dvdnav_upper_button_select(dvdnav_t *this, pci_t *pci) {
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
245 btni_t *button_ptr;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
246
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
247 if(!this) {
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
248 printerr("Passed a NULL pointer.");
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
249 return S_ERR;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
250 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
251
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
252 if(!(button_ptr = get_current_button(this, pci)))
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
253 return S_ERR;
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
254
98
457f35f43ba6 Improved DVD menu selection.
jcdutton
parents: 91
diff changeset
255 dvdnav_button_select(this, pci, button_ptr->up);
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
256 button_auto_action(this, pci);
29
c3c8b98d7e95 Enable auto action buttons.
jcdutton
parents: 26
diff changeset
257
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
258 return S_OK;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
259 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
260
98
457f35f43ba6 Improved DVD menu selection.
jcdutton
parents: 91
diff changeset
261 dvdnav_status_t dvdnav_lower_button_select(dvdnav_t *this, pci_t *pci) {
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
262 btni_t *button_ptr;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
263
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
264 if(!this) {
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
265 printerr("Passed a NULL pointer.");
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
266 return S_ERR;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
267 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
268
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
269 if(!(button_ptr = get_current_button(this, pci)))
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
270 return S_ERR;
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
271
98
457f35f43ba6 Improved DVD menu selection.
jcdutton
parents: 91
diff changeset
272 dvdnav_button_select(this, pci, button_ptr->down);
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
273 button_auto_action(this, pci);
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
274
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
275 return S_OK;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
276 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
277
98
457f35f43ba6 Improved DVD menu selection.
jcdutton
parents: 91
diff changeset
278 dvdnav_status_t dvdnav_right_button_select(dvdnav_t *this, pci_t *pci) {
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
279 btni_t *button_ptr;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
280
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
281 if(!this) {
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
282 printerr("Passed a NULL pointer.");
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
283 return S_ERR;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
284 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
285
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
286 if(!(button_ptr = get_current_button(this, pci)))
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
287 return S_ERR;
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
288
98
457f35f43ba6 Improved DVD menu selection.
jcdutton
parents: 91
diff changeset
289 dvdnav_button_select(this, pci, button_ptr->right);
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
290 button_auto_action(this, pci);
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
291
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
292 return S_OK;
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
293 }
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
294
98
457f35f43ba6 Improved DVD menu selection.
jcdutton
parents: 91
diff changeset
295 dvdnav_status_t dvdnav_left_button_select(dvdnav_t *this, pci_t *pci) {
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
296 btni_t *button_ptr;
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
297
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
298 if(!this) {
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
299 printerr("Passed a NULL pointer.");
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
300 return S_ERR;
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
301 }
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
302
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
303 if(!(button_ptr = get_current_button(this, pci)))
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
304 return S_ERR;
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
305
98
457f35f43ba6 Improved DVD menu selection.
jcdutton
parents: 91
diff changeset
306 dvdnav_button_select(this, pci, button_ptr->left);
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
307 button_auto_action(this, pci);
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
308
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
309 return S_OK;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
310 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
311
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
312 dvdnav_status_t dvdnav_get_highlight_area(pci_t *nav_pci , int32_t button, int32_t mode,
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
313 dvdnav_highlight_area_t *highlight) {
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
314 btni_t *button_ptr;
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
315
31
8b08ee66cbff Quiet please!!!
jcdutton
parents: 30
diff changeset
316 #ifdef BUTTON_TESTING
76
0e2abe7083de more consistent console output
mroi
parents: 69
diff changeset
317 fprintf(MSG_OUT, "libdvdnav: Button get_highlight_area %i\n", button);
31
8b08ee66cbff Quiet please!!!
jcdutton
parents: 30
diff changeset
318 #endif
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
319
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
320 if((button <= 0) || (button > nav_pci->hli.hl_gi.btn_ns))
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
321 return S_ERR;
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
322
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
323 button_ptr = &nav_pci->hli.btnit[button-1];
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
324
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
325 highlight->sx = button_ptr->x_start;
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
326 highlight->sy = button_ptr->y_start;
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
327 highlight->ex = button_ptr->x_end;
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
328 highlight->ey = button_ptr->y_end;
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
329 if(button_ptr->btn_coln != 0) {
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
330 highlight->palette = nav_pci->hli.btn_colit.btn_coli[button_ptr->btn_coln-1][mode];
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
331 } else {
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
332 highlight->palette = 0;
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
333 }
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
334 highlight->pts = nav_pci->hli.hl_gi.hli_s_ptm;
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
335 highlight->buttonN = button;
31
8b08ee66cbff Quiet please!!!
jcdutton
parents: 30
diff changeset
336 #ifdef BUTTON_TESTING
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
337 fprintf(MSG_OUT, "libdvdnav: highlight: Highlight area is (%u,%u)-(%u,%u), display = %i, button = %u\n",
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
338 button_ptr->x_start, button_ptr->y_start,
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
339 button_ptr->x_end, button_ptr->y_end,
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
340 1,
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
341 button);
31
8b08ee66cbff Quiet please!!!
jcdutton
parents: 30
diff changeset
342 #endif
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
343
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
344 return S_OK;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
345 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
346
98
457f35f43ba6 Improved DVD menu selection.
jcdutton
parents: 91
diff changeset
347 dvdnav_status_t dvdnav_button_activate(dvdnav_t *this, pci_t *pci) {
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
348 int button;
26
794d2e16a4d4 Removed un-needed variables.
jcdutton
parents: 22
diff changeset
349 btni_t *button_ptr = NULL;
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
350
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
351 if(!this) {
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
352 printerr("Passed a NULL pointer.");
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
353 return S_ERR;
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
354 }
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
355
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
356 pthread_mutex_lock(&this->vm_lock);
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
357
117
816d82ff7eed return the correct current hightlight
mroi
parents: 116
diff changeset
358 button = this->vm->state.HL_BTNN_REG >> 10;
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
359
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
360 if((button <= 0) || (button > pci->hli.hl_gi.btn_ns)) {
57
e1505b603eb8 Fix problem with Still menus that have NO BUTTONS.
jcdutton
parents: 42
diff changeset
361 /* Special code to handle still menus with no buttons.
e1505b603eb8 Fix problem with Still menus that have NO BUTTONS.
jcdutton
parents: 42
diff changeset
362 * the navigation is expected to report to the appicatino that a STILL is
e1505b603eb8 Fix problem with Still menus that have NO BUTTONS.
jcdutton
parents: 42
diff changeset
363 * underway. In turn, the application is supposed to report to the user
e1505b603eb8 Fix problem with Still menus that have NO BUTTONS.
jcdutton
parents: 42
diff changeset
364 * that the playback is pause. The user is then expected to undo the pause.
e1505b603eb8 Fix problem with Still menus that have NO BUTTONS.
jcdutton
parents: 42
diff changeset
365 * ie: hit play. At that point, the navigation should release the still and
e1505b603eb8 Fix problem with Still menus that have NO BUTTONS.
jcdutton
parents: 42
diff changeset
366 * go to the next Cell.
e1505b603eb8 Fix problem with Still menus that have NO BUTTONS.
jcdutton
parents: 42
diff changeset
367 * Explanation by Mathieu Lavage <mathieu_lacage@realmagic.fr>
e1505b603eb8 Fix problem with Still menus that have NO BUTTONS.
jcdutton
parents: 42
diff changeset
368 * Code added by jcdutton.
e1505b603eb8 Fix problem with Still menus that have NO BUTTONS.
jcdutton
parents: 42
diff changeset
369 */
e1505b603eb8 Fix problem with Still menus that have NO BUTTONS.
jcdutton
parents: 42
diff changeset
370 if (this->position_current.still != 0) {
e1505b603eb8 Fix problem with Still menus that have NO BUTTONS.
jcdutton
parents: 42
diff changeset
371 /* In still, but no buttons. */
e1505b603eb8 Fix problem with Still menus that have NO BUTTONS.
jcdutton
parents: 42
diff changeset
372 vm_get_next_cell(this->vm);
e1505b603eb8 Fix problem with Still menus that have NO BUTTONS.
jcdutton
parents: 42
diff changeset
373 this->position_current.still = 0;
116
4d711d0518e9 new event DVDNAV_WAIT
mroi
parents: 114
diff changeset
374 this->sync_wait = 0;
57
e1505b603eb8 Fix problem with Still menus that have NO BUTTONS.
jcdutton
parents: 42
diff changeset
375 pthread_mutex_unlock(&this->vm_lock);
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
376 /* clear error message */
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
377 printerr("");
57
e1505b603eb8 Fix problem with Still menus that have NO BUTTONS.
jcdutton
parents: 42
diff changeset
378 return S_OK;
e1505b603eb8 Fix problem with Still menus that have NO BUTTONS.
jcdutton
parents: 42
diff changeset
379 }
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
380 pthread_mutex_unlock(&this->vm_lock);
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
381 return S_ERR;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
382 }
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
383
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
384 button_ptr = get_current_button(this, pci);
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
385 /* Finally, make the VM execute the appropriate code and probably
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
386 * scedule a jump */
31
8b08ee66cbff Quiet please!!!
jcdutton
parents: 30
diff changeset
387 #ifdef BUTTON_TESTING
76
0e2abe7083de more consistent console output
mroi
parents: 69
diff changeset
388 fprintf(MSG_OUT, "libdvdnav: Evaluating Button Activation commands.\n");
31
8b08ee66cbff Quiet please!!!
jcdutton
parents: 30
diff changeset
389 #endif
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
390 if(vm_exec_cmd(this->vm, &(button_ptr->cmd)) == 1) {
26
794d2e16a4d4 Removed un-needed variables.
jcdutton
parents: 22
diff changeset
391 /* Command caused a jump */
794d2e16a4d4 Removed un-needed variables.
jcdutton
parents: 22
diff changeset
392 this->vm->hop_channel++;
794d2e16a4d4 Removed un-needed variables.
jcdutton
parents: 22
diff changeset
393 this->position_current.still = 0;
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
394 }
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
395
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
396 pthread_mutex_unlock(&this->vm_lock);
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
397 return S_OK;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
398 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
399
91
df9712507b30 Add a new API function, to allow for more flexible menu button control.
jcdutton
parents: 86
diff changeset
400 dvdnav_status_t dvdnav_button_activate_cmd(dvdnav_t *this, int32_t button, vm_cmd_t *cmd)
df9712507b30 Add a new API function, to allow for more flexible menu button control.
jcdutton
parents: 86
diff changeset
401 {
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
402 if(!this) {
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
403 printerr("Passed a NULL pointer.");
91
df9712507b30 Add a new API function, to allow for more flexible menu button control.
jcdutton
parents: 86
diff changeset
404 return S_ERR;
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
405 }
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
406
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
407 pthread_mutex_lock(&this->vm_lock);
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
408 /* make the VM execute the appropriate code and probably
91
df9712507b30 Add a new API function, to allow for more flexible menu button control.
jcdutton
parents: 86
diff changeset
409 * schedule a jump */
df9712507b30 Add a new API function, to allow for more flexible menu button control.
jcdutton
parents: 86
diff changeset
410 #ifdef BUTTON_TESTING
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
411 fprintf(MSG_OUT, "libdvdnav: dvdnav_button_activate_cmd: Evaluating Button Activation commands.\n");
91
df9712507b30 Add a new API function, to allow for more flexible menu button control.
jcdutton
parents: 86
diff changeset
412 #endif
df9712507b30 Add a new API function, to allow for more flexible menu button control.
jcdutton
parents: 86
diff changeset
413 if(button > 0) {
df9712507b30 Add a new API function, to allow for more flexible menu button control.
jcdutton
parents: 86
diff changeset
414 this->vm->state.HL_BTNN_REG = (button << 10);
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
415 if(vm_exec_cmd(this->vm, cmd) == 1) {
91
df9712507b30 Add a new API function, to allow for more flexible menu button control.
jcdutton
parents: 86
diff changeset
416 /* Command caused a jump */
df9712507b30 Add a new API function, to allow for more flexible menu button control.
jcdutton
parents: 86
diff changeset
417 this->vm->hop_channel++;
df9712507b30 Add a new API function, to allow for more flexible menu button control.
jcdutton
parents: 86
diff changeset
418 }
df9712507b30 Add a new API function, to allow for more flexible menu button control.
jcdutton
parents: 86
diff changeset
419 }
df9712507b30 Add a new API function, to allow for more flexible menu button control.
jcdutton
parents: 86
diff changeset
420 /* Always remove still, because some still menus have no buttons. */
df9712507b30 Add a new API function, to allow for more flexible menu button control.
jcdutton
parents: 86
diff changeset
421 this->position_current.still = 0;
116
4d711d0518e9 new event DVDNAV_WAIT
mroi
parents: 114
diff changeset
422 this->sync_wait = 0;
91
df9712507b30 Add a new API function, to allow for more flexible menu button control.
jcdutton
parents: 86
diff changeset
423 pthread_mutex_unlock(&this->vm_lock);
df9712507b30 Add a new API function, to allow for more flexible menu button control.
jcdutton
parents: 86
diff changeset
424 return S_OK;
df9712507b30 Add a new API function, to allow for more flexible menu button control.
jcdutton
parents: 86
diff changeset
425 }
df9712507b30 Add a new API function, to allow for more flexible menu button control.
jcdutton
parents: 86
diff changeset
426
98
457f35f43ba6 Improved DVD menu selection.
jcdutton
parents: 91
diff changeset
427 dvdnav_status_t dvdnav_button_select(dvdnav_t *this, pci_t *pci, int button) {
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
428
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
429 if(!this) {
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
430 printerr("Passed a NULL pointer.");
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
431 return S_ERR;
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
432 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
433
31
8b08ee66cbff Quiet please!!!
jcdutton
parents: 30
diff changeset
434 #ifdef BUTTON_TESTING
76
0e2abe7083de more consistent console output
mroi
parents: 69
diff changeset
435 fprintf(MSG_OUT, "libdvdnav: Button select %i\n", button);
31
8b08ee66cbff Quiet please!!!
jcdutton
parents: 30
diff changeset
436 #endif
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
437
98
457f35f43ba6 Improved DVD menu selection.
jcdutton
parents: 91
diff changeset
438 if((button <= 0) || (button > pci->hli.hl_gi.btn_ns)) {
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
439 printerr("Button does not exist.");
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
440 return S_ERR;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
441 }
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
442
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
443 this->vm->state.HL_BTNN_REG = (button << 10);
64
2759605b41f6 We need to update the button info when moving around in menus.
mroi
parents: 57
diff changeset
444 this->position_current.button = -1; /* Force Highligh change */
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
445
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
446 return S_OK;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
447 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
448
98
457f35f43ba6 Improved DVD menu selection.
jcdutton
parents: 91
diff changeset
449 dvdnav_status_t dvdnav_button_select_and_activate(dvdnav_t *this, pci_t *pci,
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
450 int button) {
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
451 /* A trivial function */
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
452 if(dvdnav_button_select(this, pci, button) != S_ERR)
98
457f35f43ba6 Improved DVD menu selection.
jcdutton
parents: 91
diff changeset
453 return dvdnav_button_activate(this, pci);
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
454 return S_ERR;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
455 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
456
98
457f35f43ba6 Improved DVD menu selection.
jcdutton
parents: 91
diff changeset
457 dvdnav_status_t dvdnav_mouse_select(dvdnav_t *this, pci_t *pci, int x, int y) {
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
458 int button, cur_button;
69
940b438a9c9f Modified version of button selection patch from
richwareham
parents: 67
diff changeset
459 uint32_t best,dist;
940b438a9c9f Modified version of button selection patch from
richwareham
parents: 67
diff changeset
460 int mx,my,dx,dy,d;
940b438a9c9f Modified version of button selection patch from
richwareham
parents: 67
diff changeset
461
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
462 if(!this) {
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
463 printerr("Passed a NULL pointer.");
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
464 return S_ERR;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
465 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
466
117
816d82ff7eed return the correct current hightlight
mroi
parents: 116
diff changeset
467 cur_button = this->vm->state.HL_BTNN_REG >> 10;
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
468
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
469 best = 0;
69
940b438a9c9f Modified version of button selection patch from
richwareham
parents: 67
diff changeset
470 dist = 0x08000000; /* >> than (720*720)+(567*567); */
940b438a9c9f Modified version of button selection patch from
richwareham
parents: 67
diff changeset
471
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
472 /* Loop through all buttons */
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
473 for(button = 1; button <= pci->hli.hl_gi.btn_ns; button++) {
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
474 btni_t *button_ptr = &(this->pci.hli.btnit[button-1]);
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
475
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
476 if((x >= button_ptr->x_start) && (x <= button_ptr->x_end) &&
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
477 (y >= button_ptr->y_start) && (y <= button_ptr->y_end)) {
69
940b438a9c9f Modified version of button selection patch from
richwareham
parents: 67
diff changeset
478 mx = (button_ptr->x_start + button_ptr->x_end)/2;
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
479 my = (button_ptr->y_start + button_ptr->y_end)/2;
69
940b438a9c9f Modified version of button selection patch from
richwareham
parents: 67
diff changeset
480 dx = mx - x;
940b438a9c9f Modified version of button selection patch from
richwareham
parents: 67
diff changeset
481 dy = my - y;
940b438a9c9f Modified version of button selection patch from
richwareham
parents: 67
diff changeset
482 d = (dx*dx) + (dy*dy);
940b438a9c9f Modified version of button selection patch from
richwareham
parents: 67
diff changeset
483 /* If the mouse is within the button and the mouse is closer
940b438a9c9f Modified version of button selection patch from
richwareham
parents: 67
diff changeset
484 * to the center of this button then it is the best choice. */
940b438a9c9f Modified version of button selection patch from
richwareham
parents: 67
diff changeset
485 if(d < dist) {
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
486 dist = d;
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
487 best = button;
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
488 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
489 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
490 }
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
491
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
492 /* As an efficiency measure, only re-select the button
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
493 * if it is different to the previously selected one. */
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
494 if (best != 0 && best != cur_button)
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
495 dvdnav_button_select(this, pci, best);
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
496
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
497 /* return S_OK only if we actually found a matching button */
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
498 return best ? S_OK : S_ERR;
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
499 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
500
98
457f35f43ba6 Improved DVD menu selection.
jcdutton
parents: 91
diff changeset
501 dvdnav_status_t dvdnav_mouse_activate(dvdnav_t *this, pci_t *pci, int x, int y) {
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
502 /* A trivial function */
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 98
diff changeset
503 if(dvdnav_mouse_select(this, pci, x,y) != S_ERR)
98
457f35f43ba6 Improved DVD menu selection.
jcdutton
parents: 91
diff changeset
504 return dvdnav_button_activate(this, pci);
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
505 return S_ERR;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
506 }