annotate remap.c @ 249:5d643668f1e3 src

I added this code myself a long time ago, but now I am quite convinced that it is wrong: Why would we filter out SPU stream change events that switch SPUs off? This breaks watching the trailer on the RC2 of "Girl, interrupted", because you always get unwanted subtitles. When I added this code, it fixed a problem with the RC2 of "Terminator", but I cannot reproduce this problem any more. Back then, the menu highlights would not show up, but they do now. I assume the problem really got fixed with proper support for forced subtitles in xine, so this crappy workaround here can go away. After all, this way it is more symmetric to audio stream change events, because these are not filtered.
author mroi
date Sun, 12 Sep 2004 15:12:43 +0000
parents 6b67914ae021
children 918fe20358cb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 96
diff changeset
1 /*
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 96
diff changeset
2 * This file is part of libdvdnav, a DVD navigation library.
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 96
diff changeset
3 *
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 96
diff changeset
4 * libdvdnav is free software; you can redistribute it and/or modify
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 96
diff changeset
5 * it under the terms of the GNU General Public License as published by
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 96
diff changeset
6 * the Free Software Foundation; either version 2 of the License, or
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 96
diff changeset
7 * (at your option) any later version.
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 96
diff changeset
8 *
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 96
diff changeset
9 * libdvdnav is distributed in the hope that it will be useful,
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 96
diff changeset
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 96
diff changeset
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 96
diff changeset
12 * GNU General Public License for more details.
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 96
diff changeset
13 *
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 96
diff changeset
14 * You should have received a copy of the GNU General Public License
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 96
diff changeset
15 * along with this program; if not, write to the Free Software
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 96
diff changeset
16 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 96
diff changeset
17 *
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 96
diff changeset
18 * $Id$
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 96
diff changeset
19 */
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 96
diff changeset
20
96
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
21 #include <stdlib.h>
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
22 #include <string.h>
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
23 #include <stdio.h>
176
4e099155c968 Helping with the WIN32 port.
jcdutton
parents: 114
diff changeset
24
4e099155c968 Helping with the WIN32 port.
jcdutton
parents: 114
diff changeset
25 #ifndef _MSC_VER
96
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
26 #include <sys/param.h>
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
27 #include <sys/fcntl.h>
176
4e099155c968 Helping with the WIN32 port.
jcdutton
parents: 114
diff changeset
28 #else
4e099155c968 Helping with the WIN32 port.
jcdutton
parents: 114
diff changeset
29 #ifndef MAXPATHLEN
4e099155c968 Helping with the WIN32 port.
jcdutton
parents: 114
diff changeset
30 #define MAXPATHLEN 255
4e099155c968 Helping with the WIN32 port.
jcdutton
parents: 114
diff changeset
31 #endif
4e099155c968 Helping with the WIN32 port.
jcdutton
parents: 114
diff changeset
32 #endif /* _MSC_VER */
4e099155c968 Helping with the WIN32 port.
jcdutton
parents: 114
diff changeset
33
96
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
34 #include <assert.h>
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
35 #include "remap.h"
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 96
diff changeset
36 #include "dvdnav_internal.h"
96
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
37
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
38 struct block_s {
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
39 int domain;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
40 int title;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
41 int program;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
42 unsigned long start_block;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
43 unsigned long end_block;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
44 };
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
45
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
46 struct remap_s {
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
47 char *title;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
48 int maxblocks;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
49 int nblocks;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
50 int debug;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
51 struct block_s *blocks;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
52 };
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
53
212
6b67914ae021 port Daniel's changes to xine-lib cvs to minimize difference
mroi
parents: 176
diff changeset
54 static remap_t* remap_new( char *title) {
96
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
55 remap_t *map = malloc( sizeof(remap_t));
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
56 map->title = strdup(title);
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
57 map->maxblocks = 0;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
58 map->nblocks = 0;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
59 map->blocks = NULL;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
60 map->debug = 0;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
61 return map;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
62 }
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
63
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
64 static int compare_block( block_t *a, block_t *b) {
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
65 /* returns -1 if a precedes b, 1 if a follows b, and 0 if a and b overlap */
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
66 if (a->domain < b->domain) {
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
67 return -1;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
68 } else if (a->domain > b->domain) {
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
69 return 1;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
70 }
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
71
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
72 if (a->title < b->title) {
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
73 return -1;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
74 } else if (a->title > b->title) {
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
75 return 1;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
76 }
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
77
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
78 if (a->program < b->program) {
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
79 return -1;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
80 } else if (a->program > b->program) {
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
81 return 1;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
82 }
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
83
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
84 if (a->end_block < b->start_block) {
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
85 return -1;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
86 } else if (a->start_block > b->end_block) {
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
87 /*
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
88 * if a->start_block == b->end_block then the two regions
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
89 * aren't strictly overlapping, but they should be merged
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
90 * anyway since there are zero blocks between them
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
91 */
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
92 return 1;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
93 }
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
94
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
95 return 0;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
96 }
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
97
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
98 static block_t *findblock( remap_t *map, block_t *key) {
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
99 int lb = 0;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
100 int ub = map->nblocks - 1;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
101 int mid;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
102 int res;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
103
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
104 while (lb <= ub) {
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
105 mid = lb + (ub - lb)/2;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
106 res = compare_block( key, &map->blocks[mid]);
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
107 if (res < 0) {
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
108 ub = mid-1;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
109 } else if (res > 0) {
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
110 lb = mid+1;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
111 } else {
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
112 return &map->blocks[mid];
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
113 }
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
114 }
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
115 return NULL;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
116 }
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
117
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
118 static void mergeblock( block_t *b, block_t tmp) {
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
119 if (tmp.start_block < b->start_block) b->start_block = tmp.start_block;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
120 if (tmp.end_block > b->end_block) b->end_block = tmp.end_block;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
121 }
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
122
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
123 static void remap_add_node( remap_t *map, block_t block) {
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
124 block_t *b;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
125 int n;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
126 b = findblock( map, &block);
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
127 if (b) {
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
128 /* overlaps an existing block */
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
129 mergeblock( b, block);
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
130 } else {
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
131 /* new block */
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
132 if (map->nblocks >= map->maxblocks) {
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
133 map->maxblocks += 20;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
134 map->blocks = realloc( map->blocks, sizeof( block_t)*map->maxblocks);
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
135 }
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
136 n = map->nblocks++;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
137 while (n > 0 && compare_block( &block, &map->blocks[ n-1]) < 0) {
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
138 map->blocks[ n] = map->blocks[ n-1];
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
139 n--;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
140 }
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
141 map->blocks[ n] = block;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
142 }
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
143 }
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
144
212
6b67914ae021 port Daniel's changes to xine-lib cvs to minimize difference
mroi
parents: 176
diff changeset
145 static int parseblock(char *buf, int *dom, int *tt, int *pg,
6b67914ae021 port Daniel's changes to xine-lib cvs to minimize difference
mroi
parents: 176
diff changeset
146 unsigned long *start, unsigned long *end) {
96
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
147 long tmp;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
148 char *tok;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
149 char *epos;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
150 char *marker[]={"domain", "title", "program", "start", "end"};
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
151 int st = 0;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
152 tok = strtok( buf, " ");
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
153 while (st < 5) {
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
154 if (strcmp(tok, marker[st])) return -st-1000;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
155 tok = strtok( NULL, " ");
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
156 if (!tok) return -st-2000;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
157 tmp = strtol( tok, &epos, 0);
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
158 if (*epos != 0 && *epos != ',') return -st-3000;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
159 switch (st) {
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
160 case 0:
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
161 *dom = (int)tmp;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
162 break;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
163 case 1:
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
164 *tt = (int)tmp;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
165 break;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
166 case 2:
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
167 *pg = (int)tmp;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
168 break;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
169 case 3:
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
170 *start = tmp;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
171 break;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
172 case 4:
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
173 *end = tmp;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
174 break;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
175 }
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
176 st++;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
177 tok = strtok( NULL, " ");
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
178 }
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
179 return st;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
180 }
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
181
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
182 remap_t* remap_loadmap( char *title) {
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
183 char buf[160];
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
184 char fname[MAXPATHLEN];
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
185 char *home;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
186 int res;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
187 FILE *fp;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
188 block_t tmp;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
189 remap_t *map;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
190
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
191 /* Build the map filename */
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
192 home = getenv("HOME"); assert(home);
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
193 strncpy(fname, home, sizeof(fname));
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 96
diff changeset
194 strncat(fname, "/.dvdnav/", sizeof(fname));
96
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
195 strncat(fname, title, sizeof(fname));
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
196 strncat(fname, ".map", sizeof(fname));
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
197
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
198 /* Open the map file */
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
199 fp = fopen( fname, "r");
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
200 if (!fp) {
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 96
diff changeset
201 fprintf(MSG_OUT, "libdvdnav: Unable to find map file '%s'\n", fname);
96
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
202 return NULL;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
203 }
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
204
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
205 /* Load the map file */
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
206 map = remap_new( title);
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
207 while (fgets( buf, sizeof(buf), fp) != NULL) {
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
208 if (buf[0] == '\n' || buf[0] == '#' || buf[0] == 0) continue;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
209 if (strncasecmp( buf, "debug", 5) == 0) {
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
210 map->debug = 1;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
211 } else {
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
212 res = parseblock( buf,
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
213 &tmp.domain, &tmp.title, &tmp.program, &tmp.start_block, &tmp.end_block);
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
214 if (res != 5) {
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 96
diff changeset
215 fprintf(MSG_OUT, "libdvdnav: Ignoring map line (%d): %s\n", res, buf);
96
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
216 continue;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
217 }
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
218 remap_add_node( map, tmp);
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
219 }
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
220 }
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
221
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
222 if (map->nblocks == 0 && map->debug == 0) return NULL;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
223 return map;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
224 }
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
225
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
226 unsigned long remap_block(
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
227 remap_t *map, int domain, int title, int program,
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
228 unsigned long cblock, unsigned long offset)
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
229 {
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
230 block_t key;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
231 block_t *b;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
232
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
233 if (map->debug) {
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 96
diff changeset
234 fprintf(MSG_OUT, "libdvdnav: %s: domain %d, title %d, program %d, start %lx, next %lx\n",
96
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
235 map->title, domain, title, program, cblock, cblock+offset);
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
236 }
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
237
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
238 key.domain = domain;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
239 key.title = title;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
240 key.program = program;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
241 key.start_block = key.end_block = cblock + offset;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
242 b = findblock( map, &key);
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
243
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
244 if (b) {
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
245 if (map->debug) {
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 96
diff changeset
246 fprintf(MSG_OUT, "libdvdnav: Redirected to %lx\n", b->end_block);
96
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
247 }
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
248 return b->end_block - cblock;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
249 }
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
250 return offset;
2fcb4f228308 Adding "Personalizing DVD Viewing" files from <kevin_smathers@hp.com>
jcdutton
parents:
diff changeset
251 }