4 * Copyright (C) 2002 Bertrand Baudet <bertrand_baudet@yahoo.com>
6 * This file is part of MPlayer.
8 * MPlayer is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * MPlayer is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License along
19 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
20 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
32 /*******************************************************************************************************************
34 * xmcd parser, cd info list
36 *******************************************************************************************************************/
40 cd_info_t
*cd_info
= NULL
;
42 cd_info
= malloc(sizeof(cd_info_t
));
44 mp_msg(MSGT_DEMUX
, MSGL_ERR
, MSGTR_MemAllocFailed
);
48 memset(cd_info
, 0, sizeof(cd_info_t
));
54 cd_info_free(cd_info_t
*cd_info
) {
55 cd_track_t
*cd_track
, *cd_track_next
;
56 if( cd_info
==NULL
) return;
57 if( cd_info
->artist
!=NULL
) free(cd_info
->artist
);
58 if( cd_info
->album
!=NULL
) free(cd_info
->album
);
59 if( cd_info
->genre
!=NULL
) free(cd_info
->genre
);
61 cd_track_next
= cd_info
->first
;
62 while( cd_track_next
!=NULL
) {
63 cd_track
= cd_track_next
;
64 cd_track_next
= cd_track
->next
;
65 if( cd_track
->name
!=NULL
) free(cd_track
->name
);
71 cd_info_add_track(cd_info_t
*cd_info
, char *track_name
, unsigned int track_nb
, unsigned int min
, unsigned int sec
, unsigned int msec
, unsigned long frame_begin
, unsigned long frame_length
) {
74 if( cd_info
==NULL
|| track_name
==NULL
) return NULL
;
76 cd_track
= malloc(sizeof(cd_track_t
));
77 if( cd_track
==NULL
) {
78 mp_msg(MSGT_DEMUX
, MSGL_ERR
, MSGTR_MemAllocFailed
);
81 memset(cd_track
, 0, sizeof(cd_track_t
));
83 cd_track
->name
= malloc(strlen(track_name
)+1);
84 if( cd_track
->name
==NULL
) {
85 mp_msg(MSGT_DEMUX
, MSGL_ERR
, MSGTR_MemAllocFailed
);
89 strcpy(cd_track
->name
, track_name
);
90 cd_track
->track_nb
= track_nb
;
93 cd_track
->msec
= msec
;
94 cd_track
->frame_begin
= frame_begin
;
95 cd_track
->frame_length
= frame_length
;
97 if( cd_info
->first
==NULL
) {
98 cd_info
->first
= cd_track
;
100 if( cd_info
->last
!=NULL
) {
101 cd_info
->last
->next
= cd_track
;
104 cd_track
->prev
= cd_info
->last
;
106 cd_info
->last
= cd_track
;
107 cd_info
->current
= cd_track
;
109 cd_info
->nb_tracks
++;
115 cd_info_get_track(cd_info_t
*cd_info
, unsigned int track_nb
) {
116 cd_track_t
*cd_track
=NULL
;
118 if( cd_info
==NULL
) return NULL
;
120 cd_track
= cd_info
->first
;
121 while( cd_track
!=NULL
) {
122 if( cd_track
->track_nb
==track_nb
) {
125 cd_track
= cd_track
->next
;
131 cd_info_debug(cd_info_t
*cd_info
) {
132 cd_track_t
*current_track
;
133 mp_msg(MSGT_DEMUX
, MSGL_INFO
, "================ CD INFO === start =========\n");
134 if( cd_info
==NULL
) {
135 mp_msg(MSGT_DEMUX
, MSGL_INFO
, "cd_info is NULL\n");
138 mp_msg(MSGT_DEMUX
, MSGL_INFO
, " artist=[%s]\n", cd_info
->artist
);
139 mp_msg(MSGT_DEMUX
, MSGL_INFO
, " album=[%s]\n", cd_info
->album
);
140 mp_msg(MSGT_DEMUX
, MSGL_INFO
, " genre=[%s]\n", cd_info
->genre
);
141 mp_msg(MSGT_DEMUX
, MSGL_INFO
, " nb_tracks=%d\n", cd_info
->nb_tracks
);
142 mp_msg(MSGT_DEMUX
, MSGL_INFO
, " length= %2d:%02d.%02d\n", cd_info
->min
, cd_info
->sec
, cd_info
->msec
);
144 mp_msg(MSGT_IDENTIFY
, MSGL_INFO
, "ID_CDDB_INFO_ARTIST=%s\n", cd_info
->artist
);
145 mp_msg(MSGT_IDENTIFY
, MSGL_INFO
, "ID_CDDB_INFO_ALBUM=%s\n", cd_info
->album
);
146 mp_msg(MSGT_IDENTIFY
, MSGL_INFO
, "ID_CDDB_INFO_GENRE=%s\n", cd_info
->genre
);
147 mp_msg(MSGT_IDENTIFY
, MSGL_INFO
, "ID_CDDB_INFO_LENGTH_MSF=%02d:%02d.%02d\n", cd_info
->min
, cd_info
->sec
, cd_info
->msec
);
148 mp_msg(MSGT_IDENTIFY
, MSGL_INFO
, "ID_CDDB_INFO_TRACKS=%d\n", cd_info
->nb_tracks
);
150 current_track
= cd_info
->first
;
151 while( current_track
!=NULL
) {
152 mp_msg(MSGT_DEMUX
, MSGL_INFO
, " #%2d %2d:%02d.%02d @ %7ld\t[%s] \n", current_track
->track_nb
, current_track
->min
, current_track
->sec
, current_track
->msec
, current_track
->frame_begin
, current_track
->name
);
153 mp_msg(MSGT_IDENTIFY
, MSGL_INFO
, "ID_CDDB_INFO_TRACK_%d_NAME=%s\n", current_track
->track_nb
, current_track
->name
);
154 mp_msg(MSGT_IDENTIFY
, MSGL_INFO
, "ID_CDDB_INFO_TRACK_%d_MSF=%02d:%02d.%02d\n", current_track
->track_nb
, current_track
->min
, current_track
->sec
, current_track
->msec
);
155 current_track
= current_track
->next
;
157 mp_msg(MSGT_DEMUX
, MSGL_INFO
, "================ CD INFO === end =========\n");