2002-09-17 19:49:57 +00:00
|
|
|
/*
|
2009-07-06 23:26:13 +00:00
|
|
|
* CD Info
|
2010-01-30 22:26:47 +00:00
|
|
|
*
|
|
|
|
* Copyright (C) 2002 Bertrand Baudet <bertrand_baudet@yahoo.com>
|
|
|
|
*
|
|
|
|
* This file is part of MPlayer.
|
|
|
|
*
|
|
|
|
* MPlayer is free software; you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
|
|
|
* MPlayer is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License along
|
|
|
|
* with MPlayer; if not, write to the Free Software Foundation, Inc.,
|
|
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
|
|
*/
|
2002-09-17 19:49:57 +00:00
|
|
|
|
|
|
|
#include "config.h"
|
|
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <string.h>
|
2005-11-10 21:33:12 +00:00
|
|
|
#include "mp_msg.h"
|
2002-09-17 19:49:57 +00:00
|
|
|
#include "cdd.h"
|
|
|
|
|
|
|
|
/*******************************************************************************************************************
|
|
|
|
*
|
|
|
|
* xmcd parser, cd info list
|
|
|
|
*
|
|
|
|
*******************************************************************************************************************/
|
|
|
|
|
|
|
|
cd_info_t*
|
2009-01-05 14:48:03 +00:00
|
|
|
cd_info_new(void) {
|
2002-09-17 19:49:57 +00:00
|
|
|
cd_info_t *cd_info = NULL;
|
2009-07-06 23:26:13 +00:00
|
|
|
|
2006-07-13 16:41:13 +00:00
|
|
|
cd_info = malloc(sizeof(cd_info_t));
|
2002-09-17 19:49:57 +00:00
|
|
|
if( cd_info==NULL ) {
|
2009-07-06 22:15:02 +00:00
|
|
|
mp_tmsg(MSGT_DEMUX, MSGL_ERR, "Memory allocation failed.\n");
|
2002-09-17 19:49:57 +00:00
|
|
|
return NULL;
|
|
|
|
}
|
2009-07-06 23:26:13 +00:00
|
|
|
|
2002-09-17 19:49:57 +00:00
|
|
|
memset(cd_info, 0, sizeof(cd_info_t));
|
2009-07-06 23:26:13 +00:00
|
|
|
|
2002-09-17 19:49:57 +00:00
|
|
|
return cd_info;
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
cd_info_free(cd_info_t *cd_info) {
|
|
|
|
cd_track_t *cd_track, *cd_track_next;
|
|
|
|
if( cd_info==NULL ) return;
|
|
|
|
if( cd_info->artist!=NULL ) free(cd_info->artist);
|
|
|
|
if( cd_info->album!=NULL ) free(cd_info->album);
|
|
|
|
if( cd_info->genre!=NULL ) free(cd_info->genre);
|
|
|
|
|
|
|
|
cd_track_next = cd_info->first;
|
|
|
|
while( cd_track_next!=NULL ) {
|
|
|
|
cd_track = cd_track_next;
|
|
|
|
cd_track_next = cd_track->next;
|
|
|
|
if( cd_track->name!=NULL ) free(cd_track->name);
|
|
|
|
free(cd_track);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
cd_track_t*
|
|
|
|
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) {
|
|
|
|
cd_track_t *cd_track;
|
2009-07-06 23:26:13 +00:00
|
|
|
|
2002-09-17 19:49:57 +00:00
|
|
|
if( cd_info==NULL || track_name==NULL ) return NULL;
|
2009-07-06 23:26:13 +00:00
|
|
|
|
2006-07-13 16:41:13 +00:00
|
|
|
cd_track = malloc(sizeof(cd_track_t));
|
2002-09-17 19:49:57 +00:00
|
|
|
if( cd_track==NULL ) {
|
2009-07-06 22:15:02 +00:00
|
|
|
mp_tmsg(MSGT_DEMUX, MSGL_ERR, "Memory allocation failed.\n");
|
2002-09-17 19:49:57 +00:00
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
memset(cd_track, 0, sizeof(cd_track_t));
|
2009-07-06 23:26:13 +00:00
|
|
|
|
2006-07-13 16:41:13 +00:00
|
|
|
cd_track->name = malloc(strlen(track_name)+1);
|
2002-09-17 19:49:57 +00:00
|
|
|
if( cd_track->name==NULL ) {
|
2009-07-06 22:15:02 +00:00
|
|
|
mp_tmsg(MSGT_DEMUX, MSGL_ERR, "Memory allocation failed.\n");
|
2002-09-17 19:49:57 +00:00
|
|
|
free(cd_track);
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
strcpy(cd_track->name, track_name);
|
|
|
|
cd_track->track_nb = track_nb;
|
|
|
|
cd_track->min = min;
|
|
|
|
cd_track->sec = sec;
|
|
|
|
cd_track->msec = msec;
|
|
|
|
cd_track->frame_begin = frame_begin;
|
|
|
|
cd_track->frame_length = frame_length;
|
|
|
|
|
|
|
|
if( cd_info->first==NULL ) {
|
|
|
|
cd_info->first = cd_track;
|
|
|
|
}
|
|
|
|
if( cd_info->last!=NULL ) {
|
|
|
|
cd_info->last->next = cd_track;
|
|
|
|
}
|
|
|
|
|
|
|
|
cd_track->prev = cd_info->last;
|
2009-07-06 23:26:13 +00:00
|
|
|
|
2002-09-17 19:49:57 +00:00
|
|
|
cd_info->last = cd_track;
|
|
|
|
cd_info->current = cd_track;
|
|
|
|
|
|
|
|
cd_info->nb_tracks++;
|
2009-07-06 23:26:13 +00:00
|
|
|
|
2002-09-17 19:49:57 +00:00
|
|
|
return cd_track;
|
|
|
|
}
|
|
|
|
|
|
|
|
cd_track_t*
|
|
|
|
cd_info_get_track(cd_info_t *cd_info, unsigned int track_nb) {
|
|
|
|
cd_track_t *cd_track=NULL;
|
|
|
|
|
|
|
|
if( cd_info==NULL ) return NULL;
|
|
|
|
|
|
|
|
cd_track = cd_info->first;
|
|
|
|
while( cd_track!=NULL ) {
|
|
|
|
if( cd_track->track_nb==track_nb ) {
|
|
|
|
return cd_track;
|
|
|
|
}
|
|
|
|
cd_track = cd_track->next;
|
|
|
|
}
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
cd_info_debug(cd_info_t *cd_info) {
|
|
|
|
cd_track_t *current_track;
|
2007-12-15 01:12:44 +00:00
|
|
|
mp_msg(MSGT_DEMUX, MSGL_INFO, "================ CD INFO === start =========\n");
|
2002-09-17 19:49:57 +00:00
|
|
|
if( cd_info==NULL ) {
|
2007-12-15 01:12:44 +00:00
|
|
|
mp_msg(MSGT_DEMUX, MSGL_INFO, "cd_info is NULL\n");
|
2002-09-17 19:49:57 +00:00
|
|
|
return;
|
|
|
|
}
|
2007-12-15 01:12:44 +00:00
|
|
|
mp_msg(MSGT_DEMUX, MSGL_INFO, " artist=[%s]\n", cd_info->artist);
|
|
|
|
mp_msg(MSGT_DEMUX, MSGL_INFO, " album=[%s]\n", cd_info->album);
|
|
|
|
mp_msg(MSGT_DEMUX, MSGL_INFO, " genre=[%s]\n", cd_info->genre);
|
|
|
|
mp_msg(MSGT_DEMUX, MSGL_INFO, " nb_tracks=%d\n", cd_info->nb_tracks);
|
|
|
|
mp_msg(MSGT_DEMUX, MSGL_INFO, " length= %2d:%02d.%02d\n", cd_info->min, cd_info->sec, cd_info->msec);
|
2008-07-05 11:44:13 +00:00
|
|
|
|
|
|
|
mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_CDDB_INFO_ARTIST=%s\n", cd_info->artist);
|
|
|
|
mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_CDDB_INFO_ALBUM=%s\n", cd_info->album);
|
|
|
|
mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_CDDB_INFO_GENRE=%s\n", cd_info->genre);
|
|
|
|
mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_CDDB_INFO_LENGTH_MSF=%02d:%02d.%02d\n", cd_info->min, cd_info->sec, cd_info->msec);
|
|
|
|
mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_CDDB_INFO_TRACKS=%d\n", cd_info->nb_tracks);
|
|
|
|
|
2002-09-17 19:49:57 +00:00
|
|
|
current_track = cd_info->first;
|
|
|
|
while( current_track!=NULL ) {
|
2007-12-15 01:12:44 +00:00
|
|
|
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);
|
2008-07-05 11:44:13 +00:00
|
|
|
mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_CDDB_INFO_TRACK_%d_NAME=%s\n", current_track->track_nb, current_track->name);
|
|
|
|
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);
|
2002-09-17 19:49:57 +00:00
|
|
|
current_track = current_track->next;
|
|
|
|
}
|
2007-12-15 01:12:44 +00:00
|
|
|
mp_msg(MSGT_DEMUX, MSGL_INFO, "================ CD INFO === end =========\n");
|
2002-09-17 19:49:57 +00:00
|
|
|
}
|