annotate settings.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 c2d0cf87a5ee
children 52877d182e96
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
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
28 #include "dvdnav_internal.h"
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
29
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
30 /* Characteristics/setting API calls */
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
31
218
c2d0cf87a5ee Some fixes to that libdvdnav compiles under cygwin.
jcdutton
parents: 193
diff changeset
32 dvdnav_status_t dvdnav_get_region_mask(dvdnav_t *this, int32_t *region) {
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 93
diff changeset
33 if(!this || !region) {
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 93
diff changeset
34 printerr("Passed a NULL this pointer.");
193
b80dff4bef76 Remove all references to S_OK and S_ERR.
jcdutton
parents: 136
diff changeset
35 return DVDNAV_STATUS_ERR;
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
36 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
37
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 0
diff changeset
38 (*region) = this->vm->state.registers.SPRM[20];
193
b80dff4bef76 Remove all references to S_OK and S_ERR.
jcdutton
parents: 136
diff changeset
39 return DVDNAV_STATUS_OK;
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
40 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
41
218
c2d0cf87a5ee Some fixes to that libdvdnav compiles under cygwin.
jcdutton
parents: 193
diff changeset
42 dvdnav_status_t dvdnav_set_region_mask(dvdnav_t *this, int32_t mask) {
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 93
diff changeset
43 if(!this) {
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 93
diff changeset
44 printerr("Passed a NULL this pointer.");
193
b80dff4bef76 Remove all references to S_OK and S_ERR.
jcdutton
parents: 136
diff changeset
45 return DVDNAV_STATUS_ERR;
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
46 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
47
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 93
diff changeset
48 pthread_mutex_lock(&this->vm_lock);
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 0
diff changeset
49 this->vm->state.registers.SPRM[20] = (mask & 0xff);
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 93
diff changeset
50 pthread_mutex_unlock(&this->vm_lock);
193
b80dff4bef76 Remove all references to S_OK and S_ERR.
jcdutton
parents: 136
diff changeset
51 return DVDNAV_STATUS_OK;
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
52 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
53
218
c2d0cf87a5ee Some fixes to that libdvdnav compiles under cygwin.
jcdutton
parents: 193
diff changeset
54 dvdnav_status_t dvdnav_set_readahead_flag(dvdnav_t *this, int32_t use_readahead) {
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 93
diff changeset
55 if(!this) {
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 93
diff changeset
56 printerr("Passed a NULL this pointer.");
193
b80dff4bef76 Remove all references to S_OK and S_ERR.
jcdutton
parents: 136
diff changeset
57 return DVDNAV_STATUS_ERR;
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 93
diff changeset
58 }
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
59
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 0
diff changeset
60 this->use_read_ahead = use_readahead;
193
b80dff4bef76 Remove all references to S_OK and S_ERR.
jcdutton
parents: 136
diff changeset
61 return DVDNAV_STATUS_OK;
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
62 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
63
218
c2d0cf87a5ee Some fixes to that libdvdnav compiles under cygwin.
jcdutton
parents: 193
diff changeset
64 dvdnav_status_t dvdnav_get_readahead_flag(dvdnav_t *this, int32_t *flag) {
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 93
diff changeset
65 if(!this || !flag) {
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 93
diff changeset
66 printerr("Passed a NULL this pointer.");
193
b80dff4bef76 Remove all references to S_OK and S_ERR.
jcdutton
parents: 136
diff changeset
67 return DVDNAV_STATUS_ERR;
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
68 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
69
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 0
diff changeset
70 (*flag) = this->use_read_ahead;
193
b80dff4bef76 Remove all references to S_OK and S_ERR.
jcdutton
parents: 136
diff changeset
71 return DVDNAV_STATUS_OK;
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
72 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
73
44
c50cb59dbb19 Add dvd menu language selection api.
jcdutton
parents: 22
diff changeset
74 static dvdnav_status_t set_language_register(dvdnav_t *this, char *code, int reg) {
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 93
diff changeset
75 if(!this || !code) {
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 93
diff changeset
76 printerr("Passed a NULL this pointer.");
193
b80dff4bef76 Remove all references to S_OK and S_ERR.
jcdutton
parents: 136
diff changeset
77 return DVDNAV_STATUS_ERR;
93
e74cba5129a6 Small changes to check for invalid parameters.
jcdutton
parents: 44
diff changeset
78 }
44
c50cb59dbb19 Add dvd menu language selection api.
jcdutton
parents: 22
diff changeset
79
c50cb59dbb19 Add dvd menu language selection api.
jcdutton
parents: 22
diff changeset
80 if(!code[0] || !code[1]) {
114
b6834e6359cf big libdvdnav cleanup, quoting the ChangeLog:
mroi
parents: 93
diff changeset
81 printerr("Passed illegal language code.");
193
b80dff4bef76 Remove all references to S_OK and S_ERR.
jcdutton
parents: 136
diff changeset
82 return DVDNAV_STATUS_ERR;
44
c50cb59dbb19 Add dvd menu language selection api.
jcdutton
parents: 22
diff changeset
83 }
c50cb59dbb19 Add dvd menu language selection api.
jcdutton
parents: 22
diff changeset
84
c50cb59dbb19 Add dvd menu language selection api.
jcdutton
parents: 22
diff changeset
85 pthread_mutex_lock(&this->vm_lock);
c50cb59dbb19 Add dvd menu language selection api.
jcdutton
parents: 22
diff changeset
86 this->vm->state.registers.SPRM[reg] = (code[0] << 8) | code[1];
c50cb59dbb19 Add dvd menu language selection api.
jcdutton
parents: 22
diff changeset
87 pthread_mutex_unlock(&this->vm_lock);
193
b80dff4bef76 Remove all references to S_OK and S_ERR.
jcdutton
parents: 136
diff changeset
88 return DVDNAV_STATUS_OK;
44
c50cb59dbb19 Add dvd menu language selection api.
jcdutton
parents: 22
diff changeset
89 }
c50cb59dbb19 Add dvd menu language selection api.
jcdutton
parents: 22
diff changeset
90
c50cb59dbb19 Add dvd menu language selection api.
jcdutton
parents: 22
diff changeset
91 dvdnav_status_t dvdnav_menu_language_select(dvdnav_t *this, char *code) {
c50cb59dbb19 Add dvd menu language selection api.
jcdutton
parents: 22
diff changeset
92 return set_language_register(this, code, 0);
c50cb59dbb19 Add dvd menu language selection api.
jcdutton
parents: 22
diff changeset
93 }
c50cb59dbb19 Add dvd menu language selection api.
jcdutton
parents: 22
diff changeset
94
c50cb59dbb19 Add dvd menu language selection api.
jcdutton
parents: 22
diff changeset
95 dvdnav_status_t dvdnav_audio_language_select(dvdnav_t *this, char *code) {
c50cb59dbb19 Add dvd menu language selection api.
jcdutton
parents: 22
diff changeset
96 return set_language_register(this, code, 16);
c50cb59dbb19 Add dvd menu language selection api.
jcdutton
parents: 22
diff changeset
97 }
c50cb59dbb19 Add dvd menu language selection api.
jcdutton
parents: 22
diff changeset
98
c50cb59dbb19 Add dvd menu language selection api.
jcdutton
parents: 22
diff changeset
99 dvdnav_status_t dvdnav_spu_language_select(dvdnav_t *this, char *code) {
c50cb59dbb19 Add dvd menu language selection api.
jcdutton
parents: 22
diff changeset
100 return set_language_register(this, code, 18);
c50cb59dbb19 Add dvd menu language selection api.
jcdutton
parents: 22
diff changeset
101 }
132
f22458f928b8 PGC based positioning
mroi
parents: 114
diff changeset
102
218
c2d0cf87a5ee Some fixes to that libdvdnav compiles under cygwin.
jcdutton
parents: 193
diff changeset
103 dvdnav_status_t dvdnav_set_PGC_positioning_flag(dvdnav_t *this, int32_t pgc) {
132
f22458f928b8 PGC based positioning
mroi
parents: 114
diff changeset
104 if(!this) {
f22458f928b8 PGC based positioning
mroi
parents: 114
diff changeset
105 printerr("Passed a NULL this pointer.");
193
b80dff4bef76 Remove all references to S_OK and S_ERR.
jcdutton
parents: 136
diff changeset
106 return DVDNAV_STATUS_ERR;
132
f22458f928b8 PGC based positioning
mroi
parents: 114
diff changeset
107 }
f22458f928b8 PGC based positioning
mroi
parents: 114
diff changeset
108
f22458f928b8 PGC based positioning
mroi
parents: 114
diff changeset
109 this->pgc_based = pgc;
193
b80dff4bef76 Remove all references to S_OK and S_ERR.
jcdutton
parents: 136
diff changeset
110 return DVDNAV_STATUS_OK;
132
f22458f928b8 PGC based positioning
mroi
parents: 114
diff changeset
111 }
f22458f928b8 PGC based positioning
mroi
parents: 114
diff changeset
112
218
c2d0cf87a5ee Some fixes to that libdvdnav compiles under cygwin.
jcdutton
parents: 193
diff changeset
113 dvdnav_status_t dvdnav_get_PGC_positioning_flag(dvdnav_t *this, int32_t *flag) {
132
f22458f928b8 PGC based positioning
mroi
parents: 114
diff changeset
114 if(!this || !flag) {
f22458f928b8 PGC based positioning
mroi
parents: 114
diff changeset
115 printerr("Passed a NULL this pointer.");
193
b80dff4bef76 Remove all references to S_OK and S_ERR.
jcdutton
parents: 136
diff changeset
116 return DVDNAV_STATUS_ERR;
132
f22458f928b8 PGC based positioning
mroi
parents: 114
diff changeset
117 }
f22458f928b8 PGC based positioning
mroi
parents: 114
diff changeset
118
f22458f928b8 PGC based positioning
mroi
parents: 114
diff changeset
119 (*flag) = this->pgc_based;
193
b80dff4bef76 Remove all references to S_OK and S_ERR.
jcdutton
parents: 136
diff changeset
120 return DVDNAV_STATUS_OK;
132
f22458f928b8 PGC based positioning
mroi
parents: 114
diff changeset
121 }