annotate stream/stream_cdda.c @ 33771:6e774a02d00c

Remove gtkClearStruct code from mplayer() in interface.c. Move it as static function guiInfoMediumClear() where it is used and rename the symbolic constants used with this code.
author ib
date Sat, 09 Jul 2011 11:48:13 +0000
parents 17519ae1f249
children a958ea863ee1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
30426
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29401
diff changeset
1 /*
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29401
diff changeset
2 * This file is part of MPlayer.
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29401
diff changeset
3 *
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29401
diff changeset
4 * MPlayer is free software; you can redistribute it and/or modify
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29401
diff changeset
5 * it under the terms of the GNU General Public License as published by
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29401
diff changeset
6 * the Free Software Foundation; either version 2 of the License, or
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29401
diff changeset
7 * (at your option) any later version.
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29401
diff changeset
8 *
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29401
diff changeset
9 * MPlayer is distributed in the hope that it will be useful,
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29401
diff changeset
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29401
diff changeset
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29401
diff changeset
12 * GNU General Public License for more details.
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29401
diff changeset
13 *
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29401
diff changeset
14 * You should have received a copy of the GNU General Public License along
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29401
diff changeset
15 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29401
diff changeset
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29401
diff changeset
17 */
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29401
diff changeset
18
6384
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
19 #include "config.h"
31440
01340407202e Move cdda_priv structure to the only place it is used.
diego
parents: 31433
diff changeset
20 #ifndef CONFIG_LIBCDIO
01340407202e Move cdda_priv structure to the only place it is used.
diego
parents: 31433
diff changeset
21 #include <cdda_interface.h>
01340407202e Move cdda_priv structure to the only place it is used.
diego
parents: 31433
diff changeset
22 #include <cdda_paranoia.h>
01340407202e Move cdda_priv structure to the only place it is used.
diego
parents: 31433
diff changeset
23 #else
01340407202e Move cdda_priv structure to the only place it is used.
diego
parents: 31433
diff changeset
24 #include <cdio/cdda.h>
01340407202e Move cdda_priv structure to the only place it is used.
diego
parents: 31433
diff changeset
25 #include <cdio/paranoia.h>
01340407202e Move cdda_priv structure to the only place it is used.
diego
parents: 31433
diff changeset
26 #endif
21418
cc5b0c53b263 Move system headers before libavutil headers to work around build issues on
diego
parents: 21372
diff changeset
27 #include <stdio.h>
cc5b0c53b263 Move system headers before libavutil headers to work around build issues on
diego
parents: 21372
diff changeset
28 #include <stdlib.h>
cc5b0c53b263 Move system headers before libavutil headers to work around build issues on
diego
parents: 21372
diff changeset
29
6384
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
30 #include "stream.h"
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16967
diff changeset
31 #include "m_option.h"
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16967
diff changeset
32 #include "m_struct.h"
21372
1767c271d710 Remove bswap.h, use libavutil/bswap.h instead.
diego
parents: 20195
diff changeset
33 #include "libavutil/common.h"
21507
fa99b3d31d13 Hack around libavutil/bswap.h compilation problems due to always_inline undefined.
reimar
parents: 21479
diff changeset
34 #include "mpbswap.h"
19312
ab8d6b6deb63 proper inclusion of demuxer.h (including libmpdemux in Makefile only was to make previous split easier)
ben
parents: 19272
diff changeset
35 #include "libmpdemux/demuxer.h"
6384
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
36
6696
030e3fa9cf4a Build a fake list of track name.
bertrand
parents: 6384
diff changeset
37 #include "cdd.h"
6384
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
38
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16940
diff changeset
39 #include "mp_msg.h"
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16940
diff changeset
40 #include "help_mp.h"
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16940
diff changeset
41
16940
7eb9b500dd7f save us from #ifndef hell
faust3
parents: 16935
diff changeset
42 #ifndef CD_FRAMESIZE_RAW
7eb9b500dd7f save us from #ifndef hell
faust3
parents: 16935
diff changeset
43 #define CD_FRAMESIZE_RAW CDIO_CD_FRAMESIZE_RAW
7eb9b500dd7f save us from #ifndef hell
faust3
parents: 16935
diff changeset
44 #endif
7eb9b500dd7f save us from #ifndef hell
faust3
parents: 16935
diff changeset
45
7eb9b500dd7f save us from #ifndef hell
faust3
parents: 16935
diff changeset
46
31440
01340407202e Move cdda_priv structure to the only place it is used.
diego
parents: 31433
diff changeset
47 typedef struct {
01340407202e Move cdda_priv structure to the only place it is used.
diego
parents: 31433
diff changeset
48 #ifndef CONFIG_LIBCDIO
01340407202e Move cdda_priv structure to the only place it is used.
diego
parents: 31433
diff changeset
49 cdrom_drive* cd;
01340407202e Move cdda_priv structure to the only place it is used.
diego
parents: 31433
diff changeset
50 cdrom_paranoia* cdp;
01340407202e Move cdda_priv structure to the only place it is used.
diego
parents: 31433
diff changeset
51 #else
01340407202e Move cdda_priv structure to the only place it is used.
diego
parents: 31433
diff changeset
52 cdrom_drive_t* cd;
01340407202e Move cdda_priv structure to the only place it is used.
diego
parents: 31433
diff changeset
53 cdrom_paranoia_t* cdp;
01340407202e Move cdda_priv structure to the only place it is used.
diego
parents: 31433
diff changeset
54 #endif
01340407202e Move cdda_priv structure to the only place it is used.
diego
parents: 31433
diff changeset
55 int sector;
01340407202e Move cdda_priv structure to the only place it is used.
diego
parents: 31433
diff changeset
56 int start_sector;
01340407202e Move cdda_priv structure to the only place it is used.
diego
parents: 31433
diff changeset
57 int end_sector;
01340407202e Move cdda_priv structure to the only place it is used.
diego
parents: 31433
diff changeset
58 cd_info_t *cd_info;
01340407202e Move cdda_priv structure to the only place it is used.
diego
parents: 31433
diff changeset
59 } cdda_priv;
01340407202e Move cdda_priv structure to the only place it is used.
diego
parents: 31433
diff changeset
60
9801
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
61 static struct cdda_params {
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
62 int speed;
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
63 int paranoia_mode;
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
64 char* generic_dev;
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
65 int sector_size;
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
66 int search_overlap;
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
67 int toc_bias;
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
68 int toc_offset;
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
69 int no_skip;
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
70 char* device;
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
71 m_span_t span;
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
72 } cdda_dflts = {
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
73 -1,
16914
701af802aee7 set cdda paranoia default to 0 since e.g. cdda://2 breaks otherwise.
reimar
parents: 16635
diff changeset
74 0,
9801
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
75 NULL,
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
76 0,
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
77 -1,
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
78 0,
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
79 0,
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
80 0,
10591
0d381b648b51 Fix -cdrom-device to work again with cdda and vcd.
albeu
parents: 10121
diff changeset
81 NULL,
9801
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
82 { 0, 0 }
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
83 };
6384
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
84
9801
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
85 #define ST_OFF(f) M_ST_OFF(struct cdda_params,f)
25242
371a40dcc1cc stream_opts arrays should be const
reimar
parents: 25241
diff changeset
86 static const m_option_t cdda_params_fields[] = {
9801
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
87 { "speed", ST_OFF(speed), CONF_TYPE_INT, M_OPT_RANGE,1,100, NULL },
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
88 { "paranoia", ST_OFF(paranoia_mode), CONF_TYPE_INT,M_OPT_RANGE, 0, 2, NULL },
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
89 { "generic-dev", ST_OFF(generic_dev), CONF_TYPE_STRING, 0, 0, 0, NULL },
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
90 { "sector-size", ST_OFF(sector_size), CONF_TYPE_INT, M_OPT_RANGE,1,100, NULL },
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
91 { "overlap", ST_OFF(search_overlap), CONF_TYPE_INT, M_OPT_RANGE,0,75, NULL },
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
92 { "toc-bias", ST_OFF(toc_bias), CONF_TYPE_INT, 0, 0, 0, NULL },
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
93 { "toc-offset", ST_OFF(toc_offset), CONF_TYPE_INT, 0, 0, 0, NULL },
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
94 { "noskip", ST_OFF(no_skip), CONF_TYPE_FLAG, 0 , 0, 1, NULL },
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
95 { "skip", ST_OFF(no_skip), CONF_TYPE_FLAG, 0 , 1, 0, NULL },
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
96 { "device", ST_OFF(device), CONF_TYPE_STRING, 0, 0, 0, NULL },
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
97 { "span", ST_OFF(span), CONF_TYPE_OBJ_PARAMS, 0, 0, 0, &m_span_params_def },
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
98 /// For url parsing
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
99 { "hostname", ST_OFF(span), CONF_TYPE_OBJ_PARAMS, 0, 0, 0, &m_span_params_def },
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
100 { "port", ST_OFF(speed), CONF_TYPE_INT, M_OPT_RANGE,1,100, NULL },
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
101 { "filename", ST_OFF(device), CONF_TYPE_STRING, 0, 0, 0, NULL },
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
102 {NULL, NULL, 0, 0, 0, 0, NULL}
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
103 };
25691
68015115f63a stream_opts should be const
reimar
parents: 25410
diff changeset
104 static const struct m_struct_st stream_opts = {
9801
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
105 "cdda",
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
106 sizeof(struct cdda_params),
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
107 &cdda_dflts,
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
108 cdda_params_fields
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
109 };
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
110
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
111 /// We keep these options but now they set the defaults
25241
bb7c65f2a289 Make m_option_t arrays referenced by cfg-common.h const
reimar
parents: 25211
diff changeset
112 const m_option_t cdda_opts[] = {
9801
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
113 { "speed", &cdda_dflts.speed, CONF_TYPE_INT, M_OPT_RANGE,1,100, NULL },
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
114 { "paranoia", &cdda_dflts.paranoia_mode, CONF_TYPE_INT,M_OPT_RANGE, 0, 2, NULL },
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
115 { "generic-dev", &cdda_dflts.generic_dev, CONF_TYPE_STRING, 0, 0, 0, NULL },
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
116 { "sector-size", &cdda_dflts.sector_size, CONF_TYPE_INT, M_OPT_RANGE,1,100, NULL },
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
117 { "overlap", &cdda_dflts.search_overlap, CONF_TYPE_INT, M_OPT_RANGE,0,75, NULL },
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
118 { "toc-bias", &cdda_dflts.toc_bias, CONF_TYPE_INT, 0, 0, 0, NULL },
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
119 { "toc-offset", &cdda_dflts.toc_offset, CONF_TYPE_INT, 0, 0, 0, NULL },
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
120 { "noskip", &cdda_dflts.no_skip, CONF_TYPE_FLAG, 0 , 0, 1, NULL },
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
121 { "skip", &cdda_dflts.no_skip, CONF_TYPE_FLAG, 0 , 1, 0, NULL },
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
122 { "device", &cdda_dflts.device, CONF_TYPE_STRING, 0, 0, 0, NULL },
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
123 { "span", &cdda_dflts.span, CONF_TYPE_OBJ_PARAMS, 0, 0, 0, &m_span_params_def },
6384
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
124 {NULL, NULL, 0, 0, 0, 0, NULL}
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
125 };
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
126
31445
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
127 #ifndef CONFIG_LIBCDIO
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
128 static void cdparanoia_callback(long inpos, int function) {
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
129 #else
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
130 static void cdparanoia_callback(long int inpos, paranoia_cb_mode_t function) {
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
131 #endif
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
132 }
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
133
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
134 static int fill_buffer(stream_t* s, char* buffer, int max_len) {
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
135 cdda_priv* p = (cdda_priv*)s->priv;
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
136 cd_track_t *cd_track;
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
137 int16_t * buf;
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
138 int i;
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
139
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
140 if((p->sector < p->start_sector) || (p->sector > p->end_sector)) {
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
141 s->eof = 1;
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
142 return 0;
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
143 }
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
144
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
145 buf = paranoia_read(p->cdp,cdparanoia_callback);
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
146 if (!buf)
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
147 return 0;
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
148
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
149 #if HAVE_BIGENDIAN
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
150 for(i=0;i<CD_FRAMESIZE_RAW/2;i++)
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
151 buf[i]=le2me_16(buf[i]);
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
152 #endif
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
153
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
154 p->sector++;
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
155 memcpy(buffer,buf,CD_FRAMESIZE_RAW);
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
156
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
157 for(i=0;i<p->cd->tracks;i++){
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
158 if(p->cd->disc_toc[i].dwStartSector==p->sector-1) {
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
159 cd_track = cd_info_get_track(p->cd_info, i+1);
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
160 //printf("Track %d, sector=%d\n", i, p->sector-1);
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
161 if( cd_track!=NULL ) {
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
162 mp_msg(MSGT_SEEK, MSGL_INFO, "\n%s\n", cd_track->name);
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
163 mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_CDDA_TRACK=%d\n", cd_track->track_nb);
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
164 }
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
165 break;
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
166 }
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
167 }
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
168
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
169
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
170 return CD_FRAMESIZE_RAW;
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
171 }
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
172
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
173 static int seek(stream_t* s,off_t newpos) {
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
174 cdda_priv* p = (cdda_priv*)s->priv;
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
175 cd_track_t *cd_track;
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
176 int sec;
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
177 int current_track=0, seeked_track=0;
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
178 int seek_to_track = 0;
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
179 int i;
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
180
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
181 s->pos = newpos;
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
182 sec = s->pos/CD_FRAMESIZE_RAW;
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
183 if (s->pos < 0 || sec > p->end_sector) {
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
184 s->eof = 1;
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
185 return 0;
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
186 }
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
187
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
188 //printf("pos: %d, sec: %d ## %d\n", (int)s->pos, (int)sec, CD_FRAMESIZE_RAW);
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
189 //printf("sector: %d new: %d\n", p->sector, sec );
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
190
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
191 for(i=0;i<p->cd->tracks;i++){
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
192 // printf("trk #%d: %d .. %d\n",i,p->cd->disc_toc[i].dwStartSector,p->cd->disc_toc[i+1].dwStartSector);
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
193 if( p->sector>=p->cd->disc_toc[i].dwStartSector && p->sector<p->cd->disc_toc[i+1].dwStartSector ) {
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
194 current_track = i;
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
195 }
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
196 if( sec>=p->cd->disc_toc[i].dwStartSector && sec<p->cd->disc_toc[i+1].dwStartSector ) {
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
197 seeked_track = i;
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
198 seek_to_track = sec == p->cd->disc_toc[i].dwStartSector;
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
199 }
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
200 }
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
201 //printf("current: %d, seeked: %d\n", current_track, seeked_track);
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
202 if (current_track != seeked_track && !seek_to_track) {
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
203 //printf("Track %d, sector=%d\n", seeked_track, sec);
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
204 cd_track = cd_info_get_track(p->cd_info, seeked_track+1);
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
205 if( cd_track!=NULL ) {
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
206 mp_msg(MSGT_SEEK, MSGL_INFO, "\n%s\n", cd_track->name);
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
207 mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_CDDA_TRACK=%d\n", cd_track->track_nb);
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
208 }
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
209
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
210 }
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
211 #if 0
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
212 if(sec < p->start_sector)
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
213 sec = p->start_sector;
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
214 else if(sec > p->end_sector)
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
215 sec = p->end_sector;
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
216 #endif
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
217
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
218 p->sector = sec;
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
219 // s->pos = sec*CD_FRAMESIZE_RAW;
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
220
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
221 //printf("seek: %d, sec: %d\n", (int)s->pos, sec);
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
222 paranoia_seek(p->cdp,sec,SEEK_SET);
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
223 return 1;
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
224 }
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
225
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
226 static void close_cdda(stream_t* s) {
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
227 cdda_priv* p = (cdda_priv*)s->priv;
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
228 paranoia_free(p->cdp);
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
229 cdda_close(p->cd);
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
230 cd_info_free(p->cd_info);
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
231 free(p);
872a1ef8b43b cosmetics: Reorder functions to avoid forward declarations.
diego
parents: 31443
diff changeset
232 }
9801
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
233
25410
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
234 static int get_track_by_sector(cdda_priv *p, unsigned int sector) {
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
235 int i;
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
236 for (i = p->cd->tracks; i >= 0 ; --i)
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
237 if (p->cd->disc_toc[i].dwStartSector <= sector)
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
238 break;
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
239 return i;
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
240 }
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
241
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
242 static int control(stream_t *stream, int cmd, void *arg) {
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
243 cdda_priv* p = stream->priv;
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
244 switch(cmd) {
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
245 case STREAM_CTRL_GET_NUM_CHAPTERS:
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
246 {
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
247 int start_track = get_track_by_sector(p, p->start_sector);
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
248 int end_track = get_track_by_sector(p, p->end_sector);
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
249 *(unsigned int *)arg = end_track + 1 - start_track;
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
250 return STREAM_OK;
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
251 }
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
252 case STREAM_CTRL_SEEK_TO_CHAPTER:
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
253 {
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
254 int r;
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
255 unsigned int track = *(unsigned int *)arg;
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
256 int start_track = get_track_by_sector(p, p->start_sector);
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
257 int seek_sector;
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
258 track += start_track;
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
259 if (track >= p->cd->tracks) {
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
260 stream->eof = 1;
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
261 return STREAM_ERROR;
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
262 }
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
263 seek_sector = track <= 0 ? p->start_sector
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
264 : p->cd->disc_toc[track].dwStartSector;
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
265 r = seek(stream, seek_sector * CD_FRAMESIZE_RAW);
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
266 if (r)
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
267 return STREAM_OK;
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
268 break;
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
269 }
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
270 case STREAM_CTRL_GET_CURRENT_CHAPTER:
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
271 {
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
272 int start_track = get_track_by_sector(p, p->start_sector);
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
273 int cur_track = get_track_by_sector(p, p->sector);
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
274 *(unsigned int *)arg = cur_track - start_track;
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
275 return STREAM_OK;
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
276 }
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
277 }
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
278 return STREAM_UNSUPPORTED;
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
279 }
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
280
9801
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
281 static int open_cdda(stream_t *st,int m, void* opts, int* file_format) {
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
282 struct cdda_params* p = (struct cdda_params*)opts;
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
283 int mode = p->paranoia_mode;
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
284 int offset = p->toc_offset;
27391
1d2faa1020fb Rename a bunch of miscellaneous preprocessor directives.
diego
parents: 25691
diff changeset
285 #ifndef CONFIG_LIBCDIO
6384
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
286 cdrom_drive* cdd = NULL;
16935
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16926
diff changeset
287 #else
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16926
diff changeset
288 cdrom_drive_t* cdd = NULL;
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16926
diff changeset
289 #endif
6384
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
290 cdda_priv* priv;
9801
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
291 cd_info_t *cd_info,*cddb_info = NULL;
6696
030e3fa9cf4a Build a fake list of track name.
bertrand
parents: 6384
diff changeset
292 unsigned int audiolen=0;
16926
24c52f2c3aa9 fix cdda://n syntax: do not hang when n > nr_tracks and play only track n,
reimar
parents: 16914
diff changeset
293 int last_track;
6696
030e3fa9cf4a Build a fake list of track name.
bertrand
parents: 6384
diff changeset
294 int i;
9801
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
295 char *xmcd_file = NULL;
6384
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
296
9801
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
297 if(m != STREAM_READ) {
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
298 m_struct_free(&stream_opts,opts);
24257
d261f5109660 cosmetics: typo fix UNSUPORTED --> UNSUPPORTED
diego
parents: 21507
diff changeset
299 return STREAM_UNSUPPORTED;
9801
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
300 }
6384
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
301
10591
0d381b648b51 Fix -cdrom-device to work again with cdda and vcd.
albeu
parents: 10121
diff changeset
302 if(!p->device) {
0d381b648b51 Fix -cdrom-device to work again with cdda and vcd.
albeu
parents: 10121
diff changeset
303 if (cdrom_device)
0d381b648b51 Fix -cdrom-device to work again with cdda and vcd.
albeu
parents: 10121
diff changeset
304 p->device = strdup(cdrom_device);
0d381b648b51 Fix -cdrom-device to work again with cdda and vcd.
albeu
parents: 10121
diff changeset
305 else
0d381b648b51 Fix -cdrom-device to work again with cdda and vcd.
albeu
parents: 10121
diff changeset
306 p->device = strdup(DEFAULT_CDROM_DEVICE);
0d381b648b51 Fix -cdrom-device to work again with cdda and vcd.
albeu
parents: 10121
diff changeset
307 }
0d381b648b51 Fix -cdrom-device to work again with cdda and vcd.
albeu
parents: 10121
diff changeset
308
27391
1d2faa1020fb Rename a bunch of miscellaneous preprocessor directives.
diego
parents: 25691
diff changeset
309 #ifdef CONFIG_CDDB
16524
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 11652
diff changeset
310 // cdd_identify returns -1 if it cannot read the TOC,
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 11652
diff changeset
311 // in which case there is no point in calling cddb_resolve
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 11652
diff changeset
312 if(cdd_identify(p->device) >= 0 && strncmp(st->url,"cddb",4) == 0) {
9801
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
313 i = cddb_resolve(p->device, &xmcd_file);
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
314 if(i == 0) {
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
315 cddb_info = cddb_parse_xmcd(xmcd_file);
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
316 free(xmcd_file);
6384
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
317 }
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
318 }
9801
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
319 #endif
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28051
diff changeset
320
27391
1d2faa1020fb Rename a bunch of miscellaneous preprocessor directives.
diego
parents: 25691
diff changeset
321 #ifndef CONFIG_LIBCDIO
9801
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
322 if(p->generic_dev)
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
323 cdd = cdda_identify_scsi(p->generic_dev,p->device,0,NULL);
6384
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
324 else
16935
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16926
diff changeset
325 #endif
8958
56bf90cefb10 Removed the hardcoded /dev/cdrom for NetBSD and added an work around
bertrand
parents: 8609
diff changeset
326 #if defined(__NetBSD__)
9801
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
327 cdd = cdda_identify_scsi(p->device,p->device,0,NULL);
8958
56bf90cefb10 Removed the hardcoded /dev/cdrom for NetBSD and added an work around
bertrand
parents: 8609
diff changeset
328 #else
9801
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
329 cdd = cdda_identify(p->device,0,NULL);
8958
56bf90cefb10 Removed the hardcoded /dev/cdrom for NetBSD and added an work around
bertrand
parents: 8609
diff changeset
330 #endif
6384
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
331
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
332 if(!cdd) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16940
diff changeset
333 mp_msg(MSGT_OPEN,MSGL_ERR,MSGTR_MPDEMUX_CDDA_CantOpenCDDADevice);
9801
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
334 m_struct_free(&stream_opts,opts);
18225
1e1398e6bdf9 resource leak fix.
gpoirier
parents: 17012
diff changeset
335 free(cddb_info);
9801
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
336 return STREAM_ERROR;
6384
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
337 }
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
338
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
339 cdda_verbose_set(cdd, CDDA_MESSAGE_FORGETIT, CDDA_MESSAGE_FORGETIT);
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
340
9801
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
341 if(p->sector_size) {
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
342 cdd->nsectors = p->sector_size;
27391
1d2faa1020fb Rename a bunch of miscellaneous preprocessor directives.
diego
parents: 25691
diff changeset
343 #ifndef CONFIG_LIBCDIO
9801
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
344 cdd->bigbuff = p->sector_size * CD_FRAMESIZE_RAW;
16935
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16926
diff changeset
345 #endif
6384
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
346 }
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
347
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
348 if(cdda_open(cdd) != 0) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16940
diff changeset
349 mp_msg(MSGT_OPEN,MSGL_ERR,MSGTR_MPDEMUX_CDDA_CantOpenDisc);
6384
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
350 cdda_close(cdd);
9801
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
351 m_struct_free(&stream_opts,opts);
18225
1e1398e6bdf9 resource leak fix.
gpoirier
parents: 17012
diff changeset
352 free(cddb_info);
9801
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
353 return STREAM_ERROR;
6384
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
354 }
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
355
6696
030e3fa9cf4a Build a fake list of track name.
bertrand
parents: 6384
diff changeset
356 cd_info = cd_info_new();
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16940
diff changeset
357 mp_msg(MSGT_OPEN,MSGL_INFO,MSGTR_MPDEMUX_CDDA_AudioCDFoundWithNTracks,cdda_tracks(cdd));
6696
030e3fa9cf4a Build a fake list of track name.
bertrand
parents: 6384
diff changeset
358 for(i=0;i<cdd->tracks;i++) {
030e3fa9cf4a Build a fake list of track name.
bertrand
parents: 6384
diff changeset
359 char track_name[80];
030e3fa9cf4a Build a fake list of track name.
bertrand
parents: 6384
diff changeset
360 long sec=cdda_track_firstsector(cdd,i+1);
030e3fa9cf4a Build a fake list of track name.
bertrand
parents: 6384
diff changeset
361 long off=cdda_track_lastsector(cdd,i+1)-sec+1;
030e3fa9cf4a Build a fake list of track name.
bertrand
parents: 6384
diff changeset
362
030e3fa9cf4a Build a fake list of track name.
bertrand
parents: 6384
diff changeset
363 sprintf(track_name, "Track %d", i+1);
030e3fa9cf4a Build a fake list of track name.
bertrand
parents: 6384
diff changeset
364 cd_info_add_track(cd_info, track_name, i+1, (unsigned int)(off/(60*75)), (unsigned int)((off/75)%60), (unsigned int)(off%75), sec, off );
030e3fa9cf4a Build a fake list of track name.
bertrand
parents: 6384
diff changeset
365 audiolen += off;
030e3fa9cf4a Build a fake list of track name.
bertrand
parents: 6384
diff changeset
366 }
030e3fa9cf4a Build a fake list of track name.
bertrand
parents: 6384
diff changeset
367 cd_info->min = (unsigned int)(audiolen/(60*75));
030e3fa9cf4a Build a fake list of track name.
bertrand
parents: 6384
diff changeset
368 cd_info->sec = (unsigned int)((audiolen/75)%60);
030e3fa9cf4a Build a fake list of track name.
bertrand
parents: 6384
diff changeset
369 cd_info->msec = (unsigned int)(audiolen%75);
030e3fa9cf4a Build a fake list of track name.
bertrand
parents: 6384
diff changeset
370
19062
83c3afeab35d drops casts from void * on malloc/calloc from libmpdemux code
reynaldo
parents: 18922
diff changeset
371 priv = malloc(sizeof(cdda_priv));
6696
030e3fa9cf4a Build a fake list of track name.
bertrand
parents: 6384
diff changeset
372 memset(priv, 0, sizeof(cdda_priv));
6384
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
373 priv->cd = cdd;
6696
030e3fa9cf4a Build a fake list of track name.
bertrand
parents: 6384
diff changeset
374 priv->cd_info = cd_info;
6384
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
375
9801
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
376 if(p->toc_bias)
6384
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
377 offset -= cdda_track_firstsector(cdd,1);
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
378
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
379 if(offset) {
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
380 int i;
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
381 for(i = 0 ; i < cdd->tracks + 1 ; i++)
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
382 cdd->disc_toc[i].dwStartSector += offset;
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
383 }
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
384
9801
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
385 if(p->speed)
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
386 cdda_speed_set(cdd,p->speed);
6384
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
387
16926
24c52f2c3aa9 fix cdda://n syntax: do not hang when n > nr_tracks and play only track n,
reimar
parents: 16914
diff changeset
388 last_track = cdda_tracks(cdd);
24c52f2c3aa9 fix cdda://n syntax: do not hang when n > nr_tracks and play only track n,
reimar
parents: 16914
diff changeset
389 if (p->span.start > last_track) p->span.start = last_track;
24c52f2c3aa9 fix cdda://n syntax: do not hang when n > nr_tracks and play only track n,
reimar
parents: 16914
diff changeset
390 if (p->span.end < p->span.start) p->span.end = p->span.start;
24c52f2c3aa9 fix cdda://n syntax: do not hang when n > nr_tracks and play only track n,
reimar
parents: 16914
diff changeset
391 if (p->span.end > last_track) p->span.end = last_track;
9801
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
392 if(p->span.start)
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
393 priv->start_sector = cdda_track_firstsector(cdd,p->span.start);
6384
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
394 else
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
395 priv->start_sector = cdda_disc_firstsector(cdd);
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
396
9801
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
397 if(p->span.end) {
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
398 priv->end_sector = cdda_track_lastsector(cdd,p->span.end);
6384
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
399 } else
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
400 priv->end_sector = cdda_disc_lastsector(cdd);
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
401
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
402 priv->cdp = paranoia_init(cdd);
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
403 if(priv->cdp == NULL) {
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
404 cdda_close(cdd);
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
405 free(priv);
9801
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
406 cd_info_free(cd_info);
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
407 m_struct_free(&stream_opts,opts);
18225
1e1398e6bdf9 resource leak fix.
gpoirier
parents: 17012
diff changeset
408 free(cddb_info);
9801
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
409 return STREAM_ERROR;
6384
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
410 }
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
411
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
412 if(mode == 0)
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
413 mode = PARANOIA_MODE_DISABLE;
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
414 else if(mode == 1)
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
415 mode = PARANOIA_MODE_OVERLAP;
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
416 else
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
417 mode = PARANOIA_MODE_FULL;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28051
diff changeset
418
9801
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
419 if(p->no_skip)
6384
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
420 mode |= PARANOIA_MODE_NEVERSKIP;
27391
1d2faa1020fb Rename a bunch of miscellaneous preprocessor directives.
diego
parents: 25691
diff changeset
421 #ifndef CONFIG_LIBCDIO
33469
17519ae1f249 Constrain libcdparanoia's caching which badly breaks playback with -nocache.
reimar
parents: 31445
diff changeset
422 // HACK against libcdparanoia's stupid caching model that
17519ae1f249 Constrain libcdparanoia's caching which badly breaks playback with -nocache.
reimar
parents: 31445
diff changeset
423 // queues up a huge number of requests leading to stuttering
17519ae1f249 Constrain libcdparanoia's caching which badly breaks playback with -nocache.
reimar
parents: 31445
diff changeset
424 paranoia_cachemodel_size(priv->cdp, 24);
16635
8fd80915d2a2 10l, forgotten call to paranoia_modeset to actually set the desired mode.
reimar
parents: 16524
diff changeset
425 paranoia_modeset(cdd, mode);
6384
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
426
9801
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
427 if(p->search_overlap >= 0)
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
428 paranoia_overlapset(cdd,p->search_overlap);
16935
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16926
diff changeset
429 #else
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16926
diff changeset
430 paranoia_modeset(priv->cdp, mode);
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16926
diff changeset
431
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16926
diff changeset
432 if(p->search_overlap >= 0)
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16926
diff changeset
433 paranoia_overlapset(priv->cdp,p->search_overlap);
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16926
diff changeset
434 #endif
6384
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
435
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
436 paranoia_seek(priv->cdp,priv->start_sector,SEEK_SET);
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
437 priv->sector = priv->start_sector;
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
438
27391
1d2faa1020fb Rename a bunch of miscellaneous preprocessor directives.
diego
parents: 25691
diff changeset
439 #ifdef CONFIG_CDDB
9801
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
440 if(cddb_info) {
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
441 cd_info_free(cd_info);
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
442 priv->cd_info = cddb_info;
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
443 cd_info_debug( cddb_info );
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
444 }
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
445 #endif
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
446
6384
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
447 st->priv = priv;
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
448 st->start_pos = priv->start_sector*CD_FRAMESIZE_RAW;
25382
25b27cf5bbeb Make the end_sector accessable (it should be).
ulion
parents: 25365
diff changeset
449 st->end_pos = (priv->end_sector + 1) * CD_FRAMESIZE_RAW;
9801
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
450 st->type = STREAMTYPE_CDDA;
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
451 st->sector_size = CD_FRAMESIZE_RAW;
6384
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
452
9801
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
453 st->fill_buffer = fill_buffer;
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
454 st->seek = seek;
25410
38ef388859a9 Add cdda stream control for chapter commmands.
ulion
parents: 25396
diff changeset
455 st->control = control;
16935
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16926
diff changeset
456 st->close = close_cdda;
9801
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
457
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
458 *file_format = DEMUXER_TYPE_RAWAUDIO;
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
459
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
460 m_struct_free(&stream_opts,opts);
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
461
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
462 return STREAM_OK;
6384
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
463 }
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff changeset
464
25211
c1d17bd6683c Mark all stream_info_t as const
reimar
parents: 24257
diff changeset
465 const stream_info_t stream_info_cdda = {
9801
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
466 "CDDA",
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
467 "cdda",
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
468 "Albeu",
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
469 "",
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
470 open_cdda,
21479
edfd292bbf9e Add full support for en-/disabling cddb support
reimar
parents: 21418
diff changeset
471 { "cdda",
27391
1d2faa1020fb Rename a bunch of miscellaneous preprocessor directives.
diego
parents: 25691
diff changeset
472 #ifdef CONFIG_CDDB
21479
edfd292bbf9e Add full support for en-/disabling cddb support
reimar
parents: 21418
diff changeset
473 "cddb",
edfd292bbf9e Add full support for en-/disabling cddb support
reimar
parents: 21418
diff changeset
474 #endif
edfd292bbf9e Add full support for en-/disabling cddb support
reimar
parents: 21418
diff changeset
475 NULL },
9801
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
476 &stream_opts,
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
477 1 // Urls are an option string
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9656
diff changeset
478 };