annotate stream/stream_cue.c @ 30769:ac65c60efd86

Set stream->pos correctly after seeking to a VCD title.
author reimar
date Mon, 01 Mar 2010 20:22:18 +0000
parents 6032dd934340
children 6b3b83e99aeb
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: 29920
diff changeset
1 /*
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29920
diff changeset
2 * VideoCD BinCue
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29920
diff changeset
3 *
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29920
diff changeset
4 * This file is part of MPlayer.
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29920
diff changeset
5 *
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29920
diff changeset
6 * 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: 29920
diff changeset
7 * 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: 29920
diff changeset
8 * 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: 29920
diff changeset
9 * (at your option) any later version.
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29920
diff changeset
10 *
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29920
diff changeset
11 * 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: 29920
diff changeset
12 * 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: 29920
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29920
diff changeset
14 * GNU General Public License for more details.
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29920
diff changeset
15 *
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29920
diff changeset
16 * 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: 29920
diff changeset
17 * 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: 29920
diff changeset
18 * 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: 29920
diff changeset
19 */
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
20
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
21 #include <stdio.h>
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
22 #include <stdlib.h>
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
23 #include <string.h>
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
24
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
25 #include <sys/types.h>
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
26 #include <sys/stat.h>
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
27 #include <unistd.h>
8812
f6456b177fdc vcd_read_cue.h -> cue_read.c+h
arpi
parents: 8782
diff changeset
28 #include <fcntl.h>
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
29
8812
f6456b177fdc vcd_read_cue.h -> cue_read.c+h
arpi
parents: 8782
diff changeset
30 #include "config.h"
f6456b177fdc vcd_read_cue.h -> cue_read.c+h
arpi
parents: 8782
diff changeset
31 #include "mp_msg.h"
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 15482
diff changeset
32 #include "help_mp.h"
8812
f6456b177fdc vcd_read_cue.h -> cue_read.c+h
arpi
parents: 8782
diff changeset
33
f6456b177fdc vcd_read_cue.h -> cue_read.c+h
arpi
parents: 8782
diff changeset
34 #include "stream.h"
f6456b177fdc vcd_read_cue.h -> cue_read.c+h
arpi
parents: 8782
diff changeset
35
15476
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
36 #include "help_mp.h"
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16967
diff changeset
37 #include "m_option.h"
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16967
diff changeset
38 #include "m_struct.h"
23703
9fb716ab06a3 Avoid code duplication and ugly config.h hack by using av_strlcat/av_strlcpy
reimar
parents: 19298
diff changeset
39 #include "libavutil/avstring.h"
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
40
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
41 #define byte unsigned char
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
42 #define SIZERAW 2352
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
43 #define SIZEISO_MODE1 2048
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
44 #define SIZEISO_MODE2_RAW 2352
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
45 #define SIZEISO_MODE2_FORM1 2048
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
46 #define SIZEISO_MODE2_FORM2 2336
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
47 #define AUDIO 0
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
48 #define MODE1 1
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
49 #define MODE2 2
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
50 #define MODE1_2352 10
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
51 #define MODE2_2352 20
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
52 #define MODE1_2048 30
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
53 #define MODE2_2336 40
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
54 #define UNKNOWN -1
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
55
15476
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
56 static struct stream_priv_s {
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
57 char* filename;
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
58 } stream_priv_dflts = {
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
59 NULL
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
60 };
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
61
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
62 #define ST_OFF(f) M_ST_OFF(struct stream_priv_s,f)
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
63 /// URL definition
25242
371a40dcc1cc stream_opts arrays should be const
reimar
parents: 25211
diff changeset
64 static const m_option_t stream_opts_fields[] = {
15476
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
65 { "string", ST_OFF(filename), CONF_TYPE_STRING, 0, 0 ,0, NULL},
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
66 { NULL, NULL, 0, 0, 0, 0, NULL }
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
67 };
25691
68015115f63a stream_opts should be const
reimar
parents: 25242
diff changeset
68 static const struct m_struct_st stream_opts = {
15476
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
69 "cue",
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
70 sizeof(struct stream_priv_s),
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
71 &stream_priv_dflts,
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
72 stream_opts_fields
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
73 };
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
74
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
75 static char cue_filename[256];
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
76 static char bincue_path[256];
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
77
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
78
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
79 typedef struct track
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
80 {
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
81 unsigned short mode;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
82 unsigned short minute;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
83 unsigned short second;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
84 unsigned short frame;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
85
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
86 /* (min*60 + sec) * 75 + fps */
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
87
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
88 unsigned long start_sector;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
89
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
90 /* = the sizes in bytes off all tracks bevor this one */
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
91 /* its needed if there are mode1 tracks befor the mpeg tracks */
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
92 unsigned long start_offset;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
93
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
94 /* unsigned char num[3]; */
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
95 } tTrack;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
96
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
97 /* max 99 tracks on a cd */
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
98 static tTrack tracks[100];
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
99
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
100 static struct cue_track_pos {
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
101 int track;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
102 unsigned short mode;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
103 unsigned short minute;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
104 unsigned short second;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
105 unsigned short frame;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
106 } cue_current_pos;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
107
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
108 /* number of tracks on the cd */
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
109 static int nTracks = 0;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
110
25704
1977ed7f06d4 Simplify cue-parsing
reimar
parents: 25703
diff changeset
111 static int digits2int(char s[2], int errval) {
1977ed7f06d4 Simplify cue-parsing
reimar
parents: 25703
diff changeset
112 uint8_t a = s[0] - '0';
1977ed7f06d4 Simplify cue-parsing
reimar
parents: 25703
diff changeset
113 uint8_t b = s[1] - '0';
1977ed7f06d4 Simplify cue-parsing
reimar
parents: 25703
diff changeset
114 if (a > 9 || b > 9)
1977ed7f06d4 Simplify cue-parsing
reimar
parents: 25703
diff changeset
115 return errval;
1977ed7f06d4 Simplify cue-parsing
reimar
parents: 25703
diff changeset
116 return a * 10 + b;
1977ed7f06d4 Simplify cue-parsing
reimar
parents: 25703
diff changeset
117 }
1977ed7f06d4 Simplify cue-parsing
reimar
parents: 25703
diff changeset
118
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
119 /* presumes Line is preloaded with the "current" line of the file */
30763
08a3814981a2 Avoid fd_bin and fd_cue global variables.
reimar
parents: 30762
diff changeset
120 static int cue_getTrackinfo(FILE *fd_cue, char *Line, tTrack *track)
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
121 {
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
122 int already_set = 0;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
123
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
124 /* Get the 'mode' */
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
125 if (strncmp(&Line[2], "TRACK ", 6)==0)
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
126 {
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
127 /* strncpy(track->num, &Line[8], 2); track->num[2] = '\0'; */
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
128
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
129 track->mode = UNKNOWN;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
130 if(strncmp(&Line[11], "AUDIO", 5)==0) track->mode = AUDIO;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
131 if(strncmp(&Line[11], "MODE1/2352", 10)==0) track->mode = MODE1_2352;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
132 if(strncmp(&Line[11], "MODE1/2048", 10)==0) track->mode = MODE1_2048;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
133 if(strncmp(&Line[11], "MODE2/2352", 10)==0) track->mode = MODE2_2352;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
134 if(strncmp(&Line[11], "MODE2/2336", 10)==0) track->mode = MODE2_2336;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
135 }
26756
c43ce7268677 cosmetics: Remove useless parentheses from return statements.
diego
parents: 25704
diff changeset
136 else return 1;
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
137
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
138 /* Get the track indexes */
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
139 while(1) {
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
140 if(! fgets( Line, 256, fd_cue ) ) { break;}
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
141
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
142 if (strncmp(&Line[2], "TRACK ", 6)==0)
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
143 {
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
144 /* next track starting */
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
145 break;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
146 }
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
147
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
148 /* Track 0 or 1, take the first an get fill the values*/
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
149 if (strncmp(&Line[4], "INDEX ", 6)==0)
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
150 {
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
151 /* check stuff here so if the answer is false the else stuff below won't be executed */
25704
1977ed7f06d4 Simplify cue-parsing
reimar
parents: 25703
diff changeset
152 if ((already_set == 0) && digits2int(Line + 10, 100) <= 1)
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
153 {
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
154 already_set = 1;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
155
25704
1977ed7f06d4 Simplify cue-parsing
reimar
parents: 25703
diff changeset
156 track->minute = digits2int(Line + 13, 0);
1977ed7f06d4 Simplify cue-parsing
reimar
parents: 25703
diff changeset
157 track->second = digits2int(Line + 16, 0);
1977ed7f06d4 Simplify cue-parsing
reimar
parents: 25703
diff changeset
158 track->frame = digits2int(Line + 19, 0);
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
159 }
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
160 }
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
161 else if (strncmp(&Line[4], "PREGAP ", 7)==0) { ; /* ignore */ }
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
162 else if (strncmp(&Line[4], "FLAGS ", 6)==0) { ; /* ignore */ }
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
163 else mp_msg (MSGT_OPEN,MSGL_INFO,
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 15482
diff changeset
164 MSGTR_MPDEMUX_CUEREAD_UnexpectedCuefileLine, Line);
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
165 }
26756
c43ce7268677 cosmetics: Remove useless parentheses from return statements.
diego
parents: 25704
diff changeset
166 return 0;
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
167 }
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
168
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
169
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
170
12646
9a495bdc3a1e string handling security fixes
diego
parents: 11000
diff changeset
171 /* FIXME: the string operations ( strcpy,strcat ) below depend
9a495bdc3a1e string handling security fixes
diego
parents: 11000
diff changeset
172 * on the arrays to have the same size, thus we need to make
9a495bdc3a1e string handling security fixes
diego
parents: 11000
diff changeset
173 * sure the sizes are in sync.
9a495bdc3a1e string handling security fixes
diego
parents: 11000
diff changeset
174 */
15476
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
175 static int cue_find_bin (char *firstline) {
30760
937621eaa290 Avoid code duplication and excessively deep nesting in cue_find_bin
reimar
parents: 30759
diff changeset
176 const char *cur_name;
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
177 int i,j;
30762
e5c32d429e3a Avoid a global variable and a strcpy.
reimar
parents: 30761
diff changeset
178 char bin_filename[256];
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
179 char s[256];
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
180 char t[256];
30763
08a3814981a2 Avoid fd_bin and fd_cue global variables.
reimar
parents: 30762
diff changeset
181 int fd_bin;
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
182
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
183 /* get the filename out of that */
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
184 /* 12345 6 */
15482
c4af653727eb better implementation of read()
nicodvb
parents: 15477
diff changeset
185 mp_msg (MSGT_OPEN,MSGL_INFO, "[bincue] cue_find_bin(%s)\n", firstline);
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
186 if (strncmp(firstline, "FILE \"",6)==0)
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
187 {
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
188 i = 0;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
189 j = 0;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
190 while ( firstline[6 + i] != '"')
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
191 {
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
192 bin_filename[j] = firstline[6 + i];
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
193
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
194 /* if I found a path info, than delete all bevor it */
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
195 switch (bin_filename[j])
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
196 {
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
197 case '\\':
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
198 j = 0;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
199 break;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
200
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
201 case '/':
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
202 j = 0;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
203 break;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
204
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
205 default:
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
206 j++;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
207 }
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
208 i++;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
209 }
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
210 bin_filename[j+1] = '\0';
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
211
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
212 }
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
213
30760
937621eaa290 Avoid code duplication and excessively deep nesting in cue_find_bin
reimar
parents: 30759
diff changeset
214 fd_bin = -1;
937621eaa290 Avoid code duplication and excessively deep nesting in cue_find_bin
reimar
parents: 30759
diff changeset
215 for (i = 0; fd_bin == -1 && i < 6; i++) {
937621eaa290 Avoid code duplication and excessively deep nesting in cue_find_bin
reimar
parents: 30759
diff changeset
216 switch (i) {
937621eaa290 Avoid code duplication and excessively deep nesting in cue_find_bin
reimar
parents: 30759
diff changeset
217 case 0:
30761
b41ac9f6e26f Reindent.
reimar
parents: 30760
diff changeset
218 /* now try to open that file, without path */
30760
937621eaa290 Avoid code duplication and excessively deep nesting in cue_find_bin
reimar
parents: 30759
diff changeset
219 cur_name = bin_filename;
937621eaa290 Avoid code duplication and excessively deep nesting in cue_find_bin
reimar
parents: 30759
diff changeset
220 break;
937621eaa290 Avoid code duplication and excessively deep nesting in cue_find_bin
reimar
parents: 30759
diff changeset
221 case 1:
30761
b41ac9f6e26f Reindent.
reimar
parents: 30760
diff changeset
222 /* now try to find it with the path of the cue file */
b41ac9f6e26f Reindent.
reimar
parents: 30760
diff changeset
223 snprintf(s,sizeof( s ),"%s/%s",bincue_path,bin_filename);
30760
937621eaa290 Avoid code duplication and excessively deep nesting in cue_find_bin
reimar
parents: 30759
diff changeset
224 cur_name = s;
937621eaa290 Avoid code duplication and excessively deep nesting in cue_find_bin
reimar
parents: 30759
diff changeset
225 break;
937621eaa290 Avoid code duplication and excessively deep nesting in cue_find_bin
reimar
parents: 30759
diff changeset
226 case 2:
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
227 /* now I would say the whole filename is shit, build our own */
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
228 strncpy(s, cue_filename, strlen(cue_filename) - 3 );
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
229 s[strlen(cue_filename) - 3] = '\0';
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
230 strcat(s, "bin");
30760
937621eaa290 Avoid code duplication and excessively deep nesting in cue_find_bin
reimar
parents: 30759
diff changeset
231 cur_name = s;
937621eaa290 Avoid code duplication and excessively deep nesting in cue_find_bin
reimar
parents: 30759
diff changeset
232 break;
937621eaa290 Avoid code duplication and excessively deep nesting in cue_find_bin
reimar
parents: 30759
diff changeset
233 case 3:
30761
b41ac9f6e26f Reindent.
reimar
parents: 30760
diff changeset
234 /* ok try it with path */
b41ac9f6e26f Reindent.
reimar
parents: 30760
diff changeset
235 snprintf(t, sizeof( t ), "%s/%s", bincue_path, s);
b41ac9f6e26f Reindent.
reimar
parents: 30760
diff changeset
236 fd_bin = open (t, O_RDONLY);
30760
937621eaa290 Avoid code duplication and excessively deep nesting in cue_find_bin
reimar
parents: 30759
diff changeset
237 cur_name = t;
937621eaa290 Avoid code duplication and excessively deep nesting in cue_find_bin
reimar
parents: 30759
diff changeset
238 break;
937621eaa290 Avoid code duplication and excessively deep nesting in cue_find_bin
reimar
parents: 30759
diff changeset
239 case 4:
30761
b41ac9f6e26f Reindent.
reimar
parents: 30760
diff changeset
240 /* now I would say the whole filename is shit, build our own */
b41ac9f6e26f Reindent.
reimar
parents: 30760
diff changeset
241 strncpy(s, cue_filename, strlen(cue_filename) - 3 );
b41ac9f6e26f Reindent.
reimar
parents: 30760
diff changeset
242 s[strlen(cue_filename) - 3] = '\0';
b41ac9f6e26f Reindent.
reimar
parents: 30760
diff changeset
243 strcat(s, "img");
30760
937621eaa290 Avoid code duplication and excessively deep nesting in cue_find_bin
reimar
parents: 30759
diff changeset
244 cur_name = s;
937621eaa290 Avoid code duplication and excessively deep nesting in cue_find_bin
reimar
parents: 30759
diff changeset
245 break;
937621eaa290 Avoid code duplication and excessively deep nesting in cue_find_bin
reimar
parents: 30759
diff changeset
246 case 5:
30761
b41ac9f6e26f Reindent.
reimar
parents: 30760
diff changeset
247 /* ok try it with path */
b41ac9f6e26f Reindent.
reimar
parents: 30760
diff changeset
248 snprintf(t, sizeof( t ), "%s/%s", bincue_path, s);
30760
937621eaa290 Avoid code duplication and excessively deep nesting in cue_find_bin
reimar
parents: 30759
diff changeset
249 cur_name = t;
937621eaa290 Avoid code duplication and excessively deep nesting in cue_find_bin
reimar
parents: 30759
diff changeset
250 break;
937621eaa290 Avoid code duplication and excessively deep nesting in cue_find_bin
reimar
parents: 30759
diff changeset
251 }
937621eaa290 Avoid code duplication and excessively deep nesting in cue_find_bin
reimar
parents: 30759
diff changeset
252 fd_bin = open(cur_name, O_RDONLY);
937621eaa290 Avoid code duplication and excessively deep nesting in cue_find_bin
reimar
parents: 30759
diff changeset
253 if (fd_bin == -1) {
937621eaa290 Avoid code duplication and excessively deep nesting in cue_find_bin
reimar
parents: 30759
diff changeset
254 mp_msg(MSGT_OPEN,MSGL_STATUS, MSGTR_MPDEMUX_CUEREAD_BinFilenameTested,
937621eaa290 Avoid code duplication and excessively deep nesting in cue_find_bin
reimar
parents: 30759
diff changeset
255 cur_name);
937621eaa290 Avoid code duplication and excessively deep nesting in cue_find_bin
reimar
parents: 30759
diff changeset
256 }
937621eaa290 Avoid code duplication and excessively deep nesting in cue_find_bin
reimar
parents: 30759
diff changeset
257 }
937621eaa290 Avoid code duplication and excessively deep nesting in cue_find_bin
reimar
parents: 30759
diff changeset
258
30761
b41ac9f6e26f Reindent.
reimar
parents: 30760
diff changeset
259 if (fd_bin == -1)
b41ac9f6e26f Reindent.
reimar
parents: 30760
diff changeset
260 {
b41ac9f6e26f Reindent.
reimar
parents: 30760
diff changeset
261 /* I'll give up */
b41ac9f6e26f Reindent.
reimar
parents: 30760
diff changeset
262 mp_msg(MSGT_OPEN,MSGL_ERR,
b41ac9f6e26f Reindent.
reimar
parents: 30760
diff changeset
263 MSGTR_MPDEMUX_CUEREAD_CannotFindBinFile);
b41ac9f6e26f Reindent.
reimar
parents: 30760
diff changeset
264 return -1;
b41ac9f6e26f Reindent.
reimar
parents: 30760
diff changeset
265 }
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
266
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
267 mp_msg(MSGT_OPEN,MSGL_INFO,
30762
e5c32d429e3a Avoid a global variable and a strcpy.
reimar
parents: 30761
diff changeset
268 MSGTR_MPDEMUX_CUEREAD_UsingBinFile, cur_name);
30763
08a3814981a2 Avoid fd_bin and fd_cue global variables.
reimar
parents: 30762
diff changeset
269 return fd_bin;
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
270 }
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
271
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
272 static inline int cue_msf_2_sector(int minute, int second, int frame) {
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
273 return frame + (second + minute * 60 ) * 75;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
274 }
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
275
17566
f580a7755ac5 Patch by Stefan Huehner / stefan % huehner ! org \
rathann
parents: 17012
diff changeset
276 static inline int cue_get_msf(void) {
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
277 return cue_msf_2_sector (cue_current_pos.minute,
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
278 cue_current_pos.second,
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
279 cue_current_pos.frame);
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
280 }
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
281
15476
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
282 static inline void cue_set_msf(unsigned int sect){
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
283 cue_current_pos.frame=sect%75;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
284 sect=sect/75;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
285 cue_current_pos.second=sect%60;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
286 sect=sect/60;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
287 cue_current_pos.minute=sect;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
288 }
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
289
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
290 static inline int cue_mode_2_sector_size(int mode)
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
291 {
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
292 switch (mode)
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
293 {
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
294 case AUDIO: return AUDIO;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
295 case MODE1_2352: return SIZERAW;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
296 case MODE1_2048: return SIZEISO_MODE1;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
297 case MODE2_2352: return SIZEISO_MODE2_RAW;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
298 case MODE2_2336: return SIZEISO_MODE2_FORM2;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
299
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
300 default:
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
301 mp_msg(MSGT_OPEN,MSGL_FATAL,
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 15482
diff changeset
302 MSGTR_MPDEMUX_CUEREAD_UnknownModeForBinfile);
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
303 abort();
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
304 }
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
305
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
306 }
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
307
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
308
15476
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
309 static int cue_read_cue (char *in_cue_filename)
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
310 {
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
311 struct stat filestat;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
312 char sLine[256];
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
313 unsigned int sect;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
314 char *s,*t;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
315 int i;
30763
08a3814981a2 Avoid fd_bin and fd_cue global variables.
reimar
parents: 30762
diff changeset
316 int fd_bin;
08a3814981a2 Avoid fd_bin and fd_cue global variables.
reimar
parents: 30762
diff changeset
317 FILE *fd_cue;
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
318
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
319 /* we have no tracks at the beginning */
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
320 nTracks = 0;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
321
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
322 /* split the filename into a path and filename part */
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
323 s = strdup(in_cue_filename);
8815
74dd9b5cc7f6 dirname() (from libgen) dependency removed
arpi
parents: 8813
diff changeset
324 t = strrchr(s, '/');
74dd9b5cc7f6 dirname() (from libgen) dependency removed
arpi
parents: 8813
diff changeset
325 if (t == (char *)NULL)
74dd9b5cc7f6 dirname() (from libgen) dependency removed
arpi
parents: 8813
diff changeset
326 t = ".";
74dd9b5cc7f6 dirname() (from libgen) dependency removed
arpi
parents: 8813
diff changeset
327 else {
74dd9b5cc7f6 dirname() (from libgen) dependency removed
arpi
parents: 8813
diff changeset
328 *t = '\0';
74dd9b5cc7f6 dirname() (from libgen) dependency removed
arpi
parents: 8813
diff changeset
329 t = s;
8817
84522accebc0 10l, hopefully correct fix, before path was always overwritten to '/'
atmos4
parents: 8815
diff changeset
330 if (*t == '\0')
8815
74dd9b5cc7f6 dirname() (from libgen) dependency removed
arpi
parents: 8813
diff changeset
331 strcpy(t, "/");
74dd9b5cc7f6 dirname() (from libgen) dependency removed
arpi
parents: 8813
diff changeset
332 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26756
diff changeset
333
23703
9fb716ab06a3 Avoid code duplication and ugly config.h hack by using av_strlcat/av_strlcpy
reimar
parents: 19298
diff changeset
334 av_strlcpy(bincue_path,t,sizeof( bincue_path ));
15482
c4af653727eb better implementation of read()
nicodvb
parents: 15477
diff changeset
335 mp_msg(MSGT_OPEN,MSGL_V,"dirname: %s, cuepath: %s\n", t, bincue_path);
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
336
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
337 /* no path at all? */
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
338 if (strcmp(bincue_path, ".") == 0) {
15477
15f012150986 more efficient read() without memcpy()
nicodvb
parents: 15476
diff changeset
339 mp_msg(MSGT_OPEN,MSGL_V,"bincue_path: %s\n", bincue_path);
23703
9fb716ab06a3 Avoid code duplication and ugly config.h hack by using av_strlcat/av_strlcpy
reimar
parents: 19298
diff changeset
340 av_strlcpy(cue_filename,in_cue_filename,sizeof( cue_filename ));
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
341 } else {
23703
9fb716ab06a3 Avoid code duplication and ugly config.h hack by using av_strlcat/av_strlcpy
reimar
parents: 19298
diff changeset
342 av_strlcpy(cue_filename,in_cue_filename + strlen(bincue_path) + 1,
12646
9a495bdc3a1e string handling security fixes
diego
parents: 11000
diff changeset
343 sizeof( cue_filename ));
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
344 }
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
345
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
346
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
347
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
348 /* open the cue file */
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
349 fd_cue = fopen (in_cue_filename, "r");
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
350 if (fd_cue == NULL)
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
351 {
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
352 mp_msg(MSGT_OPEN,MSGL_ERR,
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 15482
diff changeset
353 MSGTR_MPDEMUX_CUEREAD_CannotOpenCueFile, in_cue_filename);
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
354 return -1;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
355 }
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
356
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
357 /* read the first line and hand it to find_bin, which will
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
358 test more than one possible name of the file */
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
359
30759
76a6338e5e71 Use sizeof instead of hardcoded size.
reimar
parents: 30633
diff changeset
360 if(! fgets( sLine, sizeof(sLine), fd_cue ) )
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
361 {
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
362 mp_msg(MSGT_OPEN,MSGL_ERR,
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 15482
diff changeset
363 MSGTR_MPDEMUX_CUEREAD_ErrReadingFromCueFile, in_cue_filename);
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
364 fclose (fd_cue);
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
365 return -1;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
366 }
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
367
30763
08a3814981a2 Avoid fd_bin and fd_cue global variables.
reimar
parents: 30762
diff changeset
368 fd_bin = cue_find_bin(sLine);
08a3814981a2 Avoid fd_bin and fd_cue global variables.
reimar
parents: 30762
diff changeset
369 if (fd_bin == -1) {
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
370 fclose (fd_cue);
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
371 return -1;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
372 }
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
373
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
374
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
375 /* now build the track list */
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
376 /* red the next line and call our track finder */
30759
76a6338e5e71 Use sizeof instead of hardcoded size.
reimar
parents: 30633
diff changeset
377 if(! fgets( sLine, sizeof(sLine), fd_cue ) )
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
378 {
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
379 mp_msg(MSGT_OPEN,MSGL_ERR,
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 15482
diff changeset
380 MSGTR_MPDEMUX_CUEREAD_ErrReadingFromCueFile, in_cue_filename);
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
381 fclose (fd_cue);
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
382 return -1;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
383 }
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
384
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
385 while(!feof(fd_cue))
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
386 {
30763
08a3814981a2 Avoid fd_bin and fd_cue global variables.
reimar
parents: 30762
diff changeset
387 if (cue_getTrackinfo(fd_cue, sLine, &tracks[nTracks++]) != 0)
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
388 {
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
389 mp_msg(MSGT_OPEN,MSGL_ERR,
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 15482
diff changeset
390 MSGTR_MPDEMUX_CUEREAD_ErrReadingFromCueFile, in_cue_filename);
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
391 fclose (fd_cue);
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
392 return -1;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
393 }
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
394 }
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
395
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
396 /* make a fake track with stands for the Lead out */
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
397 if (fstat (fd_bin, &filestat) == -1) {
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
398 mp_msg(MSGT_OPEN,MSGL_ERR,
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 15482
diff changeset
399 MSGTR_MPDEMUX_CUEREAD_ErrGettingBinFileSize);
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
400 fclose (fd_cue);
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
401 return -1;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
402 }
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
403
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
404 sect = filestat.st_size / 2352;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
405
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
406 tracks[nTracks].frame = sect%75;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
407 sect=sect/75;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
408 tracks[nTracks].second = sect%60;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
409 sect=sect/60;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
410 tracks[nTracks].minute = sect;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
411
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
412
11000
6e35326c742f many small typo and grammar fixes
gabucino
parents: 8817
diff changeset
413 /* let's calculate the start sectors and offsets */
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
414 for(i = 0; i <= nTracks; i++)
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
415 {
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
416 tracks[i].start_sector = cue_msf_2_sector(tracks[i].minute,
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
417 tracks[nTracks].second,
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
418 tracks[nTracks].frame);
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
419
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
420 /* if we're the first track we don't need to offset of the one befor */
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
421 if (i == 0)
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
422 {
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
423 /* was always 0 on my svcds, but who knows */
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
424 tracks[0].start_offset = tracks[0].start_sector *
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
425 cue_mode_2_sector_size(tracks[0].mode);
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
426 } else
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
427 {
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
428 tracks[i].start_offset = tracks[i-1].start_offset +
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
429 (tracks[i].start_sector - tracks[i-1].start_sector) *
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
430 cue_mode_2_sector_size(tracks[i-1].mode);
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
431 }
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
432 }
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
433
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
434 fclose (fd_cue);
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
435
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
436 return fd_bin;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
437 }
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
438
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
439
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
440
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
441
30768
6032dd934340 Ensure that cue_current_pos.track is not set to an invalid value after
reimar
parents: 30767
diff changeset
442 static int cue_read_toc_entry(int track) {
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
443 /* check if its a valid track, if not return -1 */
30768
6032dd934340 Ensure that cue_current_pos.track is not set to an invalid value after
reimar
parents: 30767
diff changeset
444 if (track <= 0 || track > nTracks)
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
445 return -1;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
446
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
447
30768
6032dd934340 Ensure that cue_current_pos.track is not set to an invalid value after
reimar
parents: 30767
diff changeset
448 cue_current_pos.track = track;
6032dd934340 Ensure that cue_current_pos.track is not set to an invalid value after
reimar
parents: 30767
diff changeset
449 track--;
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
450 switch (tracks[track].mode)
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
451 {
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
452 case AUDIO:
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
453 cue_current_pos.mode = AUDIO;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
454 break;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
455 case MODE1_2352:
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
456 cue_current_pos.mode = MODE1;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
457 break;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
458 case MODE1_2048:
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
459 cue_current_pos.mode = MODE1;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
460 break;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
461 default: /* MODE2_2352 and MODE2_2336 */
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
462 cue_current_pos.mode = MODE2;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
463 }
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
464 cue_current_pos.minute = tracks[track].minute;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
465 cue_current_pos.second = tracks[track].second;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
466 cue_current_pos.frame = tracks[track].frame;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
467
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
468 return 0;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
469 }
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
470
15476
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
471 static int cue_vcd_seek_to_track (int track){
30768
6032dd934340 Ensure that cue_current_pos.track is not set to an invalid value after
reimar
parents: 30767
diff changeset
472 if (cue_read_toc_entry (track))
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
473 return -1;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
474
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
475 return VCD_SECTOR_DATA * cue_get_msf();
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
476 }
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
477
15476
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
478 static int cue_vcd_get_track_end (int track){
30764
0987402cd276 Fix cue_vcd_get_track_end to not change the current position.
reimar
parents: 30763
diff changeset
479 int sector = cue_msf_2_sector(tracks[track].minute, tracks[track].second,
0987402cd276 Fix cue_vcd_get_track_end to not change the current position.
reimar
parents: 30763
diff changeset
480 tracks[track].frame);
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
481
30764
0987402cd276 Fix cue_vcd_get_track_end to not change the current position.
reimar
parents: 30763
diff changeset
482 return VCD_SECTOR_DATA * sector;
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
483 }
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
484
17566
f580a7755ac5 Patch by Stefan Huehner / stefan % huehner ! org \
rathann
parents: 17012
diff changeset
485 static void cue_vcd_read_toc(void){
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
486 int i;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
487 for (i = 0; i < nTracks; ++i) {
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
488
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
489 mp_msg(MSGT_OPEN,MSGL_INFO,
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 15482
diff changeset
490 MSGTR_MPDEMUX_CUEREAD_InfoTrackFormat,
15476
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
491 i+1,
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
492 tracks[i].mode,
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
493 tracks[i].minute,
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
494 tracks[i].second,
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
495 tracks[i].frame
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
496 );
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
497 }
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
498 }
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
499
15477
15f012150986 more efficient read() without memcpy()
nicodvb
parents: 15476
diff changeset
500 static int cue_vcd_read(stream_t *stream, char *mem, int size) {
15f012150986 more efficient read() without memcpy()
nicodvb
parents: 15476
diff changeset
501 unsigned long position;
30763
08a3814981a2 Avoid fd_bin and fd_cue global variables.
reimar
parents: 30762
diff changeset
502 int fd_bin = stream->fd;
15477
15f012150986 more efficient read() without memcpy()
nicodvb
parents: 15476
diff changeset
503 int track = cue_current_pos.track - 1;
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
504
15477
15f012150986 more efficient read() without memcpy()
nicodvb
parents: 15476
diff changeset
505 position = tracks[track].start_offset +
15f012150986 more efficient read() without memcpy()
nicodvb
parents: 15476
diff changeset
506 (cue_msf_2_sector(cue_current_pos.minute,
15f012150986 more efficient read() without memcpy()
nicodvb
parents: 15476
diff changeset
507 cue_current_pos.second,
15f012150986 more efficient read() without memcpy()
nicodvb
parents: 15476
diff changeset
508 cue_current_pos.frame) -
15f012150986 more efficient read() without memcpy()
nicodvb
parents: 15476
diff changeset
509 tracks[track].start_sector)
15f012150986 more efficient read() without memcpy()
nicodvb
parents: 15476
diff changeset
510 * cue_mode_2_sector_size(tracks[track].mode);
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
511
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26756
diff changeset
512
15477
15f012150986 more efficient read() without memcpy()
nicodvb
parents: 15476
diff changeset
513 if(position >= tracks[track+1].start_offset)
15f012150986 more efficient read() without memcpy()
nicodvb
parents: 15476
diff changeset
514 return 0;
15f012150986 more efficient read() without memcpy()
nicodvb
parents: 15476
diff changeset
515
15482
c4af653727eb better implementation of read()
nicodvb
parents: 15477
diff changeset
516 if(lseek(fd_bin, position+VCD_SECTOR_OFFS, SEEK_SET) == -1) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 15482
diff changeset
517 mp_msg(MSGT_OPEN,MSGL_ERR, MSGTR_MPDEMUX_CUEREAD_UnexpectedBinFileEOF);
15477
15f012150986 more efficient read() without memcpy()
nicodvb
parents: 15476
diff changeset
518 return 0;
15f012150986 more efficient read() without memcpy()
nicodvb
parents: 15476
diff changeset
519 }
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
520
15477
15f012150986 more efficient read() without memcpy()
nicodvb
parents: 15476
diff changeset
521 if(read(fd_bin, mem, VCD_SECTOR_DATA) != VCD_SECTOR_DATA) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 15482
diff changeset
522 mp_msg(MSGT_OPEN,MSGL_ERR, MSGTR_MPDEMUX_CUEREAD_CannotReadNBytesOfPayload, VCD_SECTOR_DATA);
15477
15f012150986 more efficient read() without memcpy()
nicodvb
parents: 15476
diff changeset
523 return 0;
15f012150986 more efficient read() without memcpy()
nicodvb
parents: 15476
diff changeset
524 }
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
525
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
526 cue_current_pos.frame++;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
527 if (cue_current_pos.frame==75){
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
528 cue_current_pos.frame=0;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
529 cue_current_pos.second++;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
530 if (cue_current_pos.second==60){
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
531 cue_current_pos.second=0;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
532 cue_current_pos.minute++;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
533 }
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
534 }
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
535
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
536 return VCD_SECTOR_DATA;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents:
diff changeset
537 }
15476
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
538
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
539 static int seek(stream_t *s,off_t newpos) {
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
540 s->pos=newpos;
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
541 cue_set_msf(s->pos/VCD_SECTOR_DATA);
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
542 return 1;
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
543 }
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
544
30765
3e230b384997 Implement cue:// track switching via chapter forward/backward like for audio CDs.
reimar
parents: 30764
diff changeset
545 static int control(stream_t *stream, int cmd, void *arg) {
3e230b384997 Implement cue:// track switching via chapter forward/backward like for audio CDs.
reimar
parents: 30764
diff changeset
546 switch(cmd) {
3e230b384997 Implement cue:// track switching via chapter forward/backward like for audio CDs.
reimar
parents: 30764
diff changeset
547 case STREAM_CTRL_GET_NUM_CHAPTERS:
3e230b384997 Implement cue:// track switching via chapter forward/backward like for audio CDs.
reimar
parents: 30764
diff changeset
548 {
3e230b384997 Implement cue:// track switching via chapter forward/backward like for audio CDs.
reimar
parents: 30764
diff changeset
549 *(unsigned int *)arg = nTracks;
3e230b384997 Implement cue:// track switching via chapter forward/backward like for audio CDs.
reimar
parents: 30764
diff changeset
550 return STREAM_OK;
3e230b384997 Implement cue:// track switching via chapter forward/backward like for audio CDs.
reimar
parents: 30764
diff changeset
551 }
3e230b384997 Implement cue:// track switching via chapter forward/backward like for audio CDs.
reimar
parents: 30764
diff changeset
552 case STREAM_CTRL_SEEK_TO_CHAPTER:
3e230b384997 Implement cue:// track switching via chapter forward/backward like for audio CDs.
reimar
parents: 30764
diff changeset
553 {
3e230b384997 Implement cue:// track switching via chapter forward/backward like for audio CDs.
reimar
parents: 30764
diff changeset
554 int r;
30767
29588c0eafd3 Fix off-by-one error in chapter<->VCD track conversion.
reimar
parents: 30766
diff changeset
555 unsigned int track = *(unsigned int *)arg + 1;
30765
3e230b384997 Implement cue:// track switching via chapter forward/backward like for audio CDs.
reimar
parents: 30764
diff changeset
556 r = cue_vcd_seek_to_track(track);
3e230b384997 Implement cue:// track switching via chapter forward/backward like for audio CDs.
reimar
parents: 30764
diff changeset
557 if (r >= 0) {
3e230b384997 Implement cue:// track switching via chapter forward/backward like for audio CDs.
reimar
parents: 30764
diff changeset
558 stream->start_pos = r;
30769
ac65c60efd86 Set stream->pos correctly after seeking to a VCD title.
reimar
parents: 30768
diff changeset
559 stream->pos = r;
30765
3e230b384997 Implement cue:// track switching via chapter forward/backward like for audio CDs.
reimar
parents: 30764
diff changeset
560 stream->end_pos = cue_vcd_get_track_end(track);
3e230b384997 Implement cue:// track switching via chapter forward/backward like for audio CDs.
reimar
parents: 30764
diff changeset
561 return STREAM_OK;
3e230b384997 Implement cue:// track switching via chapter forward/backward like for audio CDs.
reimar
parents: 30764
diff changeset
562 }
3e230b384997 Implement cue:// track switching via chapter forward/backward like for audio CDs.
reimar
parents: 30764
diff changeset
563 break;
3e230b384997 Implement cue:// track switching via chapter forward/backward like for audio CDs.
reimar
parents: 30764
diff changeset
564 }
3e230b384997 Implement cue:// track switching via chapter forward/backward like for audio CDs.
reimar
parents: 30764
diff changeset
565 case STREAM_CTRL_GET_CURRENT_CHAPTER:
3e230b384997 Implement cue:// track switching via chapter forward/backward like for audio CDs.
reimar
parents: 30764
diff changeset
566 {
30767
29588c0eafd3 Fix off-by-one error in chapter<->VCD track conversion.
reimar
parents: 30766
diff changeset
567 *(unsigned int *)arg = cue_current_pos.track - 1;
30765
3e230b384997 Implement cue:// track switching via chapter forward/backward like for audio CDs.
reimar
parents: 30764
diff changeset
568 return STREAM_OK;
3e230b384997 Implement cue:// track switching via chapter forward/backward like for audio CDs.
reimar
parents: 30764
diff changeset
569 }
3e230b384997 Implement cue:// track switching via chapter forward/backward like for audio CDs.
reimar
parents: 30764
diff changeset
570 }
3e230b384997 Implement cue:// track switching via chapter forward/backward like for audio CDs.
reimar
parents: 30764
diff changeset
571 return STREAM_UNSUPPORTED;
3e230b384997 Implement cue:// track switching via chapter forward/backward like for audio CDs.
reimar
parents: 30764
diff changeset
572 }
15476
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
573
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
574 static int open_s(stream_t *stream,int mode, void* opts, int* file_format) {
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
575 struct stream_priv_s* p = (struct stream_priv_s*)opts;
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
576 int ret,ret2,f,track = 0;
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
577 char *filename = NULL, *colon = NULL;
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
578
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
579 if(mode != STREAM_READ || !p->filename) {
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
580 m_struct_free(&stream_opts,opts);
24257
d261f5109660 cosmetics: typo fix UNSUPORTED --> UNSUPPORTED
diego
parents: 23703
diff changeset
581 return STREAM_UNSUPPORTED;
15476
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
582 }
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
583 filename = strdup(p->filename);
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
584 if(!filename) {
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
585 m_struct_free(&stream_opts,opts);
24257
d261f5109660 cosmetics: typo fix UNSUPORTED --> UNSUPPORTED
diego
parents: 23703
diff changeset
586 return STREAM_UNSUPPORTED;
15476
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
587 }
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
588 colon = strstr(filename, ":");
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
589 if(colon) {
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
590 if(strlen(colon)>1)
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
591 track = atoi(colon+1);
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
592 *colon = 0;
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
593 }
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
594 if(!track)
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
595 track = 1;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26756
diff changeset
596
15476
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
597 f = cue_read_cue(filename);
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
598 if(f < 0) {
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
599 m_struct_free(&stream_opts,opts);
24257
d261f5109660 cosmetics: typo fix UNSUPORTED --> UNSUPPORTED
diego
parents: 23703
diff changeset
600 return STREAM_UNSUPPORTED;
15476
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
601 }
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
602 cue_vcd_read_toc();
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
603 ret2=cue_vcd_get_track_end(track);
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
604 ret=cue_vcd_seek_to_track(track);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 26756
diff changeset
605 if(ret<0){
15476
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
606 mp_msg(MSGT_OPEN,MSGL_ERR,MSGTR_ErrTrackSelect " (seek)\n");
24257
d261f5109660 cosmetics: typo fix UNSUPORTED --> UNSUPPORTED
diego
parents: 23703
diff changeset
607 return STREAM_UNSUPPORTED;
15476
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
608 }
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 15482
diff changeset
609 mp_msg(MSGT_OPEN,MSGL_INFO,MSGTR_MPDEMUX_CUEREAD_CueStreamInfo_FilenameTrackTracksavail, filename, track, ret, ret2);
15476
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
610
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
611 stream->fd = f;
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
612 stream->type = STREAMTYPE_VCDBINCUE;
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
613 stream->sector_size = VCD_SECTOR_DATA;
29920
4f740437ed2b Finally rename the STREAM_SEEK define to MP_STREAM_SEEK, there are just too many
reimar
parents: 29263
diff changeset
614 stream->flags = STREAM_READ | MP_STREAM_SEEK_FW;
15476
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
615 stream->start_pos = ret;
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
616 stream->end_pos = ret2;
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
617 stream->fill_buffer = cue_vcd_read;
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
618 stream->seek = seek;
30765
3e230b384997 Implement cue:// track switching via chapter forward/backward like for audio CDs.
reimar
parents: 30764
diff changeset
619 stream->control = control;
15476
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
620
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
621 free(filename);
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
622 m_struct_free(&stream_opts,opts);
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
623 return STREAM_OK;
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
624 }
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
625
25211
c1d17bd6683c Mark all stream_info_t as const
reimar
parents: 24257
diff changeset
626 const stream_info_t stream_info_cue = {
15476
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
627 "CUE track",
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
628 "cue",
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
629 "Albeu",
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
630 "based on the code from ???",
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
631 open_s,
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
632 { "cue", NULL },
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
633 &stream_opts,
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
634 1 // Urls are an option string
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 12646
diff changeset
635 };