Mercurial > mplayer.hg
annotate dvdread/nav_read.c @ 23978:ef6e50c3c172
Revert setting audio output channel count for FFmpeg
The FFmpeg API needs to be fixed before this can be done sanely.
ffdca wants the desired output channel count to be set in
avctx->channels. Unfortunately it also completely fails if the requested
number of channels is not available rather than returning a different
amount (if 6 channels are requested we'd probably rather use stereo than
fail completely).
ffvorbis ignores caller-set values in avctx->channels. It writes the
channel count there once during init. This means the caller can only
set the count before init because later there would be no indication
whether the channel count in avctx reflects real output.
ffwma requires the caller to supply the encoded channel count
in avctx->channels during init or it fails. So it is not possible to
set a different number of desired output channels there before init
either.
author | uau |
---|---|
date | Thu, 02 Aug 2007 21:54:14 +0000 |
parents | 22cb9d5f1e21 |
children | de28f9e8cb00 |
rev | line source |
---|---|
7029 | 1 /* |
15874 | 2 * Copyright (C) 2000, 2001, 2002, 2003 Håkan Hjort <d95hjort@dtek.chalmers.se> |
14938
25df9508f9a8
Mark modified files as such to comply more closely with GPL ¡ø2a.
diego
parents:
8257
diff
changeset
|
3 * |
7029 | 4 * This program is free software; you can redistribute it and/or modify |
5 * it under the terms of the GNU General Public License as published by | |
6 * the Free Software Foundation; either version 2 of the License, or | |
7 * (at your option) any later version. | |
8 * | |
9 * This program is distributed in the hope that it will be useful, | |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 * GNU General Public License for more details. | |
13 * | |
14 * You should have received a copy of the GNU General Public License | |
15 * along with this program; if not, write to the Free Software | |
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
17 */ | |
18 | |
15874 | 19 #include "config.h" |
20 | |
7029 | 21 #include <stdio.h> |
22 #include <string.h> | |
23 #include <inttypes.h> | |
24 | |
25 #include "bswap.h" | |
26 #include "nav_types.h" | |
27 #include "nav_read.h" | |
15874 | 28 #include "dvdread_internal.h" |
7029 | 29 |
30 void navRead_PCI(pci_t *pci, unsigned char *buffer) { | |
15874 | 31 int i, j; |
7029 | 32 |
15874 | 33 CHECK_VALUE(sizeof(pci_t) == PCI_BYTES - 1); // -1 for substream id |
7029 | 34 |
35 memcpy(pci, buffer, sizeof(pci_t)); | |
36 | |
37 /* Endian conversions */ | |
38 | |
39 /* pci pci_gi */ | |
40 B2N_32(pci->pci_gi.nv_pck_lbn); | |
41 B2N_16(pci->pci_gi.vobu_cat); | |
42 B2N_32(pci->pci_gi.vobu_s_ptm); | |
43 B2N_32(pci->pci_gi.vobu_e_ptm); | |
44 B2N_32(pci->pci_gi.vobu_se_e_ptm); | |
45 | |
46 /* pci nsml_agli */ | |
47 for(i = 0; i < 9; i++) | |
48 B2N_32(pci->nsml_agli.nsml_agl_dsta[i]); | |
49 | |
50 /* pci hli hli_gi */ | |
51 B2N_16(pci->hli.hl_gi.hli_ss); | |
52 B2N_32(pci->hli.hl_gi.hli_s_ptm); | |
53 B2N_32(pci->hli.hl_gi.hli_e_ptm); | |
54 B2N_32(pci->hli.hl_gi.btn_se_e_ptm); | |
55 | |
56 /* pci hli btn_colit */ | |
57 for(i = 0; i < 3; i++) | |
58 for(j = 0; j < 2; j++) | |
59 B2N_32(pci->hli.btn_colit.btn_coli[i][j]); | |
60 | |
15874 | 61 /* NOTE: I've had to change the structure from the disk layout to get |
62 * the packing to work with Sun's Forte C compiler. */ | |
63 | |
7029 | 64 /* pci hli btni */ |
65 for(i = 0; i < 36; i++) { | |
15874 | 66 char tmp[sizeof(pci->hli.btnit[i])], swap; |
67 memcpy(tmp, &(pci->hli.btnit[i]), sizeof(pci->hli.btnit[i])); | |
68 /* Byte 4 to 7 are 'rotated' was: ABCD EFGH IJ is: ABCG DEFH IJ */ | |
69 swap = tmp[6]; | |
70 tmp[6] = tmp[5]; | |
71 tmp[5] = tmp[4]; | |
72 tmp[4] = tmp[3]; | |
73 tmp[3] = swap; | |
74 | |
75 /* Then there are the two B2N_24(..) calls */ | |
76 #ifndef WORDS_BIGENDIAN | |
77 swap = tmp[0]; | |
78 tmp[0] = tmp[2]; | |
79 tmp[2] = swap; | |
80 | |
81 swap = tmp[4]; | |
82 tmp[4] = tmp[6]; | |
83 tmp[6] = swap; | |
84 #endif | |
85 memcpy(&(pci->hli.btnit[i]), tmp, sizeof(pci->hli.btnit[i])); | |
7029 | 86 } |
87 | |
88 | |
15874 | 89 #ifndef NDEBUG |
7029 | 90 /* Asserts */ |
91 | |
92 /* pci pci gi */ | |
15874 | 93 CHECK_VALUE(pci->pci_gi.zero1 == 0); |
7029 | 94 |
95 /* pci hli hli_gi */ | |
15874 | 96 CHECK_VALUE(pci->hli.hl_gi.zero1 == 0); |
97 CHECK_VALUE(pci->hli.hl_gi.zero2 == 0); | |
98 CHECK_VALUE(pci->hli.hl_gi.zero3 == 0); | |
99 CHECK_VALUE(pci->hli.hl_gi.zero4 == 0); | |
100 CHECK_VALUE(pci->hli.hl_gi.zero5 == 0); | |
7029 | 101 |
102 /* Are there buttons defined here? */ | |
103 if((pci->hli.hl_gi.hli_ss & 0x03) != 0) { | |
15874 | 104 CHECK_VALUE(pci->hli.hl_gi.btn_ns != 0); |
105 CHECK_VALUE(pci->hli.hl_gi.btngr_ns != 0); | |
7029 | 106 } else { |
15874 | 107 CHECK_VALUE((pci->hli.hl_gi.btn_ns != 0 && pci->hli.hl_gi.btngr_ns != 0) |
7029 | 108 || (pci->hli.hl_gi.btn_ns == 0 && pci->hli.hl_gi.btngr_ns == 0)); |
109 } | |
110 | |
111 /* pci hli btnit */ | |
112 for(i = 0; i < pci->hli.hl_gi.btngr_ns; i++) { | |
113 for(j = 0; j < (36 / pci->hli.hl_gi.btngr_ns); j++) { | |
8257
635df9d22d38
100l patch by (Dominik Mierzejewski <dominik at rangers dot eu dot org>)
michael
parents:
8254
diff
changeset
|
114 int n = (36 / pci->hli.hl_gi.btngr_ns) * i + j; |
15874 | 115 CHECK_VALUE(pci->hli.btnit[n].zero1 == 0); |
116 CHECK_VALUE(pci->hli.btnit[n].zero2 == 0); | |
117 CHECK_VALUE(pci->hli.btnit[n].zero3 == 0); | |
118 CHECK_VALUE(pci->hli.btnit[n].zero4 == 0); | |
119 CHECK_VALUE(pci->hli.btnit[n].zero5 == 0); | |
120 CHECK_VALUE(pci->hli.btnit[n].zero6 == 0); | |
7029 | 121 |
122 if (j < pci->hli.hl_gi.btn_ns) { | |
15874 | 123 CHECK_VALUE(pci->hli.btnit[n].x_start <= pci->hli.btnit[n].x_end); |
124 CHECK_VALUE(pci->hli.btnit[n].y_start <= pci->hli.btnit[n].y_end); | |
125 CHECK_VALUE(pci->hli.btnit[n].up <= pci->hli.hl_gi.btn_ns); | |
126 CHECK_VALUE(pci->hli.btnit[n].down <= pci->hli.hl_gi.btn_ns); | |
127 CHECK_VALUE(pci->hli.btnit[n].left <= pci->hli.hl_gi.btn_ns); | |
128 CHECK_VALUE(pci->hli.btnit[n].right <= pci->hli.hl_gi.btn_ns); | |
7029 | 129 //vmcmd_verify(pci->hli.btnit[n].cmd); |
130 } else { | |
15874 | 131 int k; |
132 CHECK_VALUE(pci->hli.btnit[n].btn_coln == 0); | |
133 CHECK_VALUE(pci->hli.btnit[n].auto_action_mode == 0); | |
134 CHECK_VALUE(pci->hli.btnit[n].x_start == 0); | |
135 CHECK_VALUE(pci->hli.btnit[n].y_start == 0); | |
136 CHECK_VALUE(pci->hli.btnit[n].x_end == 0); | |
137 CHECK_VALUE(pci->hli.btnit[n].y_end == 0); | |
138 CHECK_VALUE(pci->hli.btnit[n].up == 0); | |
139 CHECK_VALUE(pci->hli.btnit[n].down == 0); | |
140 CHECK_VALUE(pci->hli.btnit[n].left == 0); | |
141 CHECK_VALUE(pci->hli.btnit[n].right == 0); | |
7029 | 142 for (k = 0; k < 8; k++) |
15874 | 143 CHECK_VALUE(pci->hli.btnit[n].cmd.bytes[k] == 0); //CHECK_ZERO? |
7029 | 144 } |
145 } | |
146 } | |
15874 | 147 #endif /* !NDEBUG */ |
7029 | 148 } |
149 | |
150 void navRead_DSI(dsi_t *dsi, unsigned char *buffer) { | |
151 int i; | |
152 | |
15874 | 153 CHECK_VALUE(sizeof(dsi_t) == DSI_BYTES - 1); // -1 for substream id |
7029 | 154 |
155 memcpy(dsi, buffer, sizeof(dsi_t)); | |
156 | |
157 /* Endian conversions */ | |
158 | |
159 /* dsi dsi gi */ | |
160 B2N_32(dsi->dsi_gi.nv_pck_scr); | |
161 B2N_32(dsi->dsi_gi.nv_pck_lbn); | |
162 B2N_32(dsi->dsi_gi.vobu_ea); | |
163 B2N_32(dsi->dsi_gi.vobu_1stref_ea); | |
164 B2N_32(dsi->dsi_gi.vobu_2ndref_ea); | |
165 B2N_32(dsi->dsi_gi.vobu_3rdref_ea); | |
166 B2N_16(dsi->dsi_gi.vobu_vob_idn); | |
167 | |
168 /* dsi sml pbi */ | |
169 B2N_16(dsi->sml_pbi.category); | |
170 B2N_32(dsi->sml_pbi.ilvu_ea); | |
171 B2N_32(dsi->sml_pbi.ilvu_sa); | |
172 B2N_16(dsi->sml_pbi.size); | |
173 B2N_32(dsi->sml_pbi.vob_v_s_s_ptm); | |
174 B2N_32(dsi->sml_pbi.vob_v_e_e_ptm); | |
175 | |
176 /* dsi sml agli */ | |
177 for(i = 0; i < 9; i++) { | |
178 B2N_32(dsi->sml_agli.data[ i ].address); | |
179 B2N_16(dsi->sml_agli.data[ i ].size); | |
180 } | |
181 | |
182 /* dsi vobu sri */ | |
183 B2N_32(dsi->vobu_sri.next_video); | |
184 for(i = 0; i < 19; i++) | |
185 B2N_32(dsi->vobu_sri.fwda[i]); | |
186 B2N_32(dsi->vobu_sri.next_vobu); | |
187 B2N_32(dsi->vobu_sri.prev_vobu); | |
188 for(i = 0; i < 19; i++) | |
189 B2N_32(dsi->vobu_sri.bwda[i]); | |
190 B2N_32(dsi->vobu_sri.prev_video); | |
191 | |
192 /* dsi synci */ | |
193 for(i = 0; i < 8; i++) | |
194 B2N_16(dsi->synci.a_synca[i]); | |
195 for(i = 0; i < 32; i++) | |
196 B2N_32(dsi->synci.sp_synca[i]); | |
197 | |
198 | |
199 /* Asserts */ | |
200 | |
201 /* dsi dsi gi */ | |
15874 | 202 CHECK_VALUE(dsi->dsi_gi.zero1 == 0); |
7029 | 203 } |
204 |