Mercurial > mplayer.hg
annotate libmpdvdkit2/nav_print.c @ 15721:eec6ace22741
small change to field-matching metrics which hopefully makes a big
improvement to results. inter-field comparison is now counterbalanced
with intra-field total (vertical) variation. this means that areas of
extreme high frequency content, which become aliased within individual
fields, will not interfere with field matching. examples: white noise
effects, small kanji, very small latin text, ...
may still need tweaking. please report regressions. this change will
likely be made optional in the future (right now it's enclosed in
"if (1)"...
author | rfelker |
---|---|
date | Tue, 14 Jun 2005 05:33:34 +0000 |
parents | 25df9508f9a8 |
children | 483e955893b8 |
rev | line source |
---|---|
7029 | 1 /* |
2 * Copyright (C) 2000, 2001, 2002 Håkan Hjort <d95hjort@dtek.chalmers.se> | |
3 * | |
14938
25df9508f9a8
Mark modified files as such to comply more closely with GPL ¡ø2a.
diego
parents:
7033
diff
changeset
|
4 * Modified for use with MPlayer, changes contained in libdvdread_changes.diff. |
25df9508f9a8
Mark modified files as such to comply more closely with GPL ¡ø2a.
diego
parents:
7033
diff
changeset
|
5 * detailed CVS changelog at http://www.mplayerhq.hu/cgi-bin/cvsweb.cgi/main/ |
25df9508f9a8
Mark modified files as such to comply more closely with GPL ¡ø2a.
diego
parents:
7033
diff
changeset
|
6 * $Id$ |
25df9508f9a8
Mark modified files as such to comply more closely with GPL ¡ø2a.
diego
parents:
7033
diff
changeset
|
7 * |
7029 | 8 * Much of the contents in this file is based on VOBDUMP. |
9 * | |
10 * VOBDUMP: a program for examining DVD .VOB filse | |
11 * | |
12 * Copyright 1998, 1999 Eric Smith <eric@brouhaha.com> | |
13 * | |
14 * VOBDUMP is free software; you can redistribute it and/or modify it | |
15 * under the terms of the GNU General Public License version 2 as | |
16 * published by the Free Software Foundation. Note that I am not | |
17 * granting permission to redistribute or modify VOBDUMP under the | |
18 * terms of any later version of the General Public License. | |
19 * | |
20 * This program is distributed in the hope that it will be useful (or | |
21 * at least amusing), but WITHOUT ANY WARRANTY; without even the | |
22 * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR | |
23 * PURPOSE. See the GNU General Public License for more details. | |
24 * | |
25 * You should have received a copy of the GNU General Public License | |
26 * along with this program; if not, write to the Free Software | |
27 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
28 */ | |
29 | |
30 #include <stdio.h> | |
31 #include <inttypes.h> | |
7033 | 32 //#include <assert.h> |
7029 | 33 |
34 #include "config.h" // Needed for WORDS_BIGENDIAN | |
35 #include "nav_types.h" | |
36 #include "nav_print.h" | |
37 | |
38 | |
39 static void print_time(dvd_time_t *dtime) { | |
40 const char *rate; | |
41 assert((dtime->hour>>4) < 0xa && (dtime->hour&0xf) < 0xa); | |
42 assert((dtime->minute>>4) < 0x7 && (dtime->minute&0xf) < 0xa); | |
43 assert((dtime->second>>4) < 0x7 && (dtime->second&0xf) < 0xa); | |
44 assert((dtime->frame_u&0xf) < 0xa); | |
45 | |
46 printf("%02x:%02x:%02x.%02x", | |
47 dtime->hour, | |
48 dtime->minute, | |
49 dtime->second, | |
50 dtime->frame_u & 0x3f); | |
51 switch((dtime->frame_u & 0xc0) >> 6) { | |
52 case 1: | |
53 rate = "25.00"; | |
54 break; | |
55 case 3: | |
56 rate = "29.97"; | |
57 break; | |
58 default: | |
59 rate = "(please send a bug report)"; | |
60 break; | |
61 } | |
62 printf(" @ %s fps", rate); | |
63 } | |
64 | |
65 | |
66 static void navPrint_PCI_GI(pci_gi_t *pci_gi) { | |
67 int i; | |
68 | |
69 printf("pci_gi:\n"); | |
70 printf("nv_pck_lbn 0x%08x\n", pci_gi->nv_pck_lbn); | |
71 printf("vobu_cat 0x%04x\n", pci_gi->vobu_cat); | |
72 printf("vobu_uop_ctl 0x%08x\n", *(uint32_t*)&pci_gi->vobu_uop_ctl); | |
73 printf("vobu_s_ptm 0x%08x\n", pci_gi->vobu_s_ptm); | |
74 printf("vobu_e_ptm 0x%08x\n", pci_gi->vobu_e_ptm); | |
75 printf("vobu_se_e_ptm 0x%08x\n", pci_gi->vobu_se_e_ptm); | |
76 printf("e_eltm "); | |
77 print_time(&pci_gi->e_eltm); | |
78 printf("\n"); | |
79 | |
80 printf("vobu_isrc \""); | |
81 for(i = 0; i < 32; i++) { | |
82 char c = pci_gi->vobu_isrc[i]; | |
83 if((c >= ' ') && (c <= '~')) | |
84 printf("%c", c); | |
85 else | |
86 printf("."); | |
87 } | |
88 printf("\"\n"); | |
89 } | |
90 | |
91 static void navPrint_NSML_AGLI(nsml_agli_t *nsml_agli) { | |
92 int i, j = 0; | |
93 | |
94 for(i = 0; i < 9; i++) | |
95 j |= nsml_agli->nsml_agl_dsta[i]; | |
96 if(j == 0) | |
97 return; | |
98 | |
99 printf("nsml_agli:\n"); | |
100 for(i = 0; i < 9; i++) | |
101 if(nsml_agli->nsml_agl_dsta[i]) | |
102 printf("nsml_agl_c%d_dsta 0x%08x\n", i + 1, | |
103 nsml_agli->nsml_agl_dsta[i]); | |
104 } | |
105 | |
106 static void navPrint_HL_GI(hl_gi_t *hl_gi, int *btngr_ns, int *btn_ns) { | |
107 | |
108 if((hl_gi->hli_ss & 0x03) == 0) | |
109 return; | |
110 | |
111 printf("hl_gi:\n"); | |
112 printf("hli_ss 0x%01x\n", hl_gi->hli_ss & 0x03); | |
113 printf("hli_s_ptm 0x%08x\n", hl_gi->hli_s_ptm); | |
114 printf("hli_e_ptm 0x%08x\n", hl_gi->hli_e_ptm); | |
115 printf("btn_se_e_ptm 0x%08x\n", hl_gi->btn_se_e_ptm); | |
116 | |
117 *btngr_ns = hl_gi->btngr_ns; | |
118 printf("btngr_ns %d\n", hl_gi->btngr_ns); | |
119 printf("btngr%d_dsp_ty 0x%02x\n", 1, hl_gi->btngr1_dsp_ty); | |
120 printf("btngr%d_dsp_ty 0x%02x\n", 2, hl_gi->btngr2_dsp_ty); | |
121 printf("btngr%d_dsp_ty 0x%02x\n", 3, hl_gi->btngr3_dsp_ty); | |
122 | |
123 printf("btn_ofn %d\n", hl_gi->btn_ofn); | |
124 *btn_ns = hl_gi->btn_ns; | |
125 printf("btn_ns %d\n", hl_gi->btn_ns); | |
126 printf("nsl_btn_ns %d\n", hl_gi->nsl_btn_ns); | |
127 printf("fosl_btnn %d\n", hl_gi->fosl_btnn); | |
128 printf("foac_btnn %d\n", hl_gi->foac_btnn); | |
129 } | |
130 | |
131 static void navPrint_BTN_COLIT(btn_colit_t *btn_colit) { | |
132 int i, j; | |
133 | |
134 j = 0; | |
135 for(i = 0; i < 6; i++) | |
136 j |= btn_colit->btn_coli[i/2][i&1]; | |
137 if(j == 0) | |
138 return; | |
139 | |
140 printf("btn_colit:\n"); | |
141 for(i = 0; i < 3; i++) | |
142 for(j = 0; j < 2; j++) | |
143 printf("btn_cqoli %d %s_coli: %08x\n", | |
144 i, (j == 0) ? "sl" : "ac", | |
145 btn_colit->btn_coli[i][j]); | |
146 } | |
147 | |
148 static void navPrint_BTNIT(btni_t *btni_table, int btngr_ns, int btn_ns) { | |
149 int i, j; | |
150 | |
151 printf("btnit:\n"); | |
152 printf("btngr_ns: %i\n", btngr_ns); | |
153 printf("btn_ns: %i\n", btn_ns); | |
154 | |
155 if(btngr_ns == 0) | |
156 return; | |
157 | |
158 for(i = 0; i < btngr_ns; i++) { | |
159 for(j = 0; j < (36 / btngr_ns); j++) { | |
160 if(j < btn_ns) { | |
161 btni_t *btni = &btni_table[(36 / btngr_ns) * i + j]; | |
162 | |
163 printf("group %d btni %d: ", i+1, j+1); | |
164 printf("btn_coln %d, auto_action_mode %d\n", | |
165 btni->btn_coln, btni->auto_action_mode); | |
166 printf("coords (%d, %d) .. (%d, %d)\n", | |
167 btni->x_start, btni->y_start, btni->x_end, btni->y_end); | |
168 | |
169 printf("up %d, ", btni->up); | |
170 printf("down %d, ", btni->down); | |
171 printf("left %d, ", btni->left); | |
172 printf("right %d\n", btni->right); | |
173 | |
174 // ifoPrint_COMMAND(&btni->cmd); | |
175 printf("\n"); | |
176 } | |
177 } | |
178 } | |
179 } | |
180 | |
181 static void navPrint_HLI(hli_t *hli) { | |
182 int btngr_ns = 0, btn_ns = 0; | |
183 | |
184 printf("hli:\n"); | |
185 navPrint_HL_GI(&hli->hl_gi, & btngr_ns, & btn_ns); | |
186 navPrint_BTN_COLIT(&hli->btn_colit); | |
187 navPrint_BTNIT(hli->btnit, btngr_ns, btn_ns); | |
188 } | |
189 | |
190 void navPrint_PCI(pci_t *pci) { | |
191 printf("pci packet:\n"); | |
192 navPrint_PCI_GI(&pci->pci_gi); | |
193 navPrint_NSML_AGLI(&pci->nsml_agli); | |
194 navPrint_HLI(&pci->hli); | |
195 } | |
196 | |
197 static void navPrint_DSI_GI(dsi_gi_t *dsi_gi) { | |
198 printf("dsi_gi:\n"); | |
199 printf("nv_pck_scr 0x%08x\n", dsi_gi->nv_pck_scr); | |
200 printf("nv_pck_lbn 0x%08x\n", dsi_gi->nv_pck_lbn ); | |
201 printf("vobu_ea 0x%08x\n", dsi_gi->vobu_ea); | |
202 printf("vobu_1stref_ea 0x%08x\n", dsi_gi->vobu_1stref_ea); | |
203 printf("vobu_2ndref_ea 0x%08x\n", dsi_gi->vobu_2ndref_ea); | |
204 printf("vobu_3rdref_ea 0x%08x\n", dsi_gi->vobu_3rdref_ea); | |
205 printf("vobu_vob_idn 0x%04x\n", dsi_gi->vobu_vob_idn); | |
206 printf("vobu_c_idn 0x%02x\n", dsi_gi->vobu_c_idn); | |
207 printf("c_eltm "); | |
208 print_time(&dsi_gi->c_eltm); | |
209 printf("\n"); | |
210 } | |
211 | |
212 static void navPrint_SML_PBI(sml_pbi_t *sml_pbi) { | |
213 printf("sml_pbi:\n"); | |
214 printf("category 0x%04x\n", sml_pbi->category); | |
215 if(sml_pbi->category & 0x8000) | |
216 printf("VOBU is in preunit\n"); | |
217 if(sml_pbi->category & 0x4000) | |
218 printf("VOBU is in ILVU\n"); | |
219 if(sml_pbi->category & 0x2000) | |
220 printf("VOBU at the beginning of ILVU\n"); | |
221 if(sml_pbi->category & 0x1000) | |
222 printf("VOBU at end of PREU of ILVU\n"); | |
223 | |
224 printf("ilvu_ea 0x%08x\n", sml_pbi->ilvu_ea); | |
225 printf("nxt_ilvu_sa 0x%08x\n", sml_pbi->ilvu_sa); | |
226 printf("nxt_ilvu_size 0x%04x\n", sml_pbi->size); | |
227 | |
228 printf("vob_v_s_s_ptm 0x%08x\n", sml_pbi->vob_v_s_s_ptm); | |
229 printf("vob_v_e_e_ptm 0x%08x\n", sml_pbi->vob_v_e_e_ptm); | |
230 | |
231 /* $$$ more code needed here */ | |
232 } | |
233 | |
234 static void navPrint_SML_AGLI(sml_agli_t *sml_agli) { | |
235 int i; | |
236 printf("sml_agli:\n"); | |
237 for(i = 0; i < 9; i++) { | |
238 printf("agl_c%d address: 0x%08x size 0x%04x\n", i, | |
239 sml_agli->data[i].address, sml_agli->data[i].size); | |
240 } | |
241 } | |
242 | |
243 static void navPrint_VOBU_SRI(vobu_sri_t *vobu_sri) { | |
244 int i; | |
245 int stime[19] = { 240, 120, 60, 20, 15, 14, 13, 12, 11, | |
246 10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; | |
247 printf("vobu_sri:\n"); | |
248 printf("Next VOBU with Video %08x\n", vobu_sri->next_video); | |
249 for(i = 0; i < 19; i++) { | |
250 printf("%3.1f %08x ", stime[i]/2.0, vobu_sri->fwda[i]); | |
251 } | |
252 printf("\n"); | |
253 printf("Next VOBU %08x\n", vobu_sri->next_vobu); | |
254 printf("--\n"); | |
255 printf("Prev VOBU %08x\n", vobu_sri->prev_vobu); | |
256 for(i = 0; i < 19; i++) { | |
257 printf("%3.1f %08x ", stime[18 - i]/2.0, vobu_sri->bwda[i]); | |
258 } | |
259 printf("\n"); | |
260 printf("Prev VOBU with Video %08x\n", vobu_sri->prev_video); | |
261 } | |
262 | |
263 static void navPrint_SYNCI(synci_t *synci) { | |
264 int i; | |
265 | |
266 printf("synci:\n"); | |
267 /* $$$ more code needed here */ | |
268 for(i = 0; i < 8; i++) | |
269 printf("%04x ", synci->a_synca[i]); | |
270 for(i = 0; i < 32; i++) | |
271 printf("%08x ", synci->sp_synca[i]); | |
272 } | |
273 | |
274 void navPrint_DSI(dsi_t *dsi) { | |
275 printf("dsi packet:\n"); | |
276 navPrint_DSI_GI(&dsi->dsi_gi); | |
277 navPrint_SML_PBI(&dsi->sml_pbi); | |
278 navPrint_SML_AGLI(&dsi->sml_agli); | |
279 navPrint_VOBU_SRI(&dsi->vobu_sri); | |
280 navPrint_SYNCI(&dsi->synci); | |
281 } | |
282 | |
283 |