diff options
author | bertrand <bertrand@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2002-09-17 19:49:57 +0000 |
---|---|---|
committer | bertrand <bertrand@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2002-09-17 19:49:57 +0000 |
commit | 12ec7ec1b2e5435271cac977edcf0291454f8da4 (patch) | |
tree | 41e1951d662778f536c0a31cbb33e78788714d9d | |
parent | 27506924c4f20e795bc466f6da51121b6a1d834e (diff) |
Moved all the cdinfo specific from cddb to a standalone file, so
if no network, cdda can still be compiled.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@7431 b3059339-0415-0410-9bf9-f77b7e298cf2
-rw-r--r-- | libmpdemux/cdinfo.c | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/libmpdemux/cdinfo.c b/libmpdemux/cdinfo.c new file mode 100644 index 0000000000..edb811314d --- /dev/null +++ b/libmpdemux/cdinfo.c @@ -0,0 +1,136 @@ +/* + * CD Info + * by Bertrand Baudet <bertrand_baudet@yahoo.com> + * (C) 2002, MPlayer team. +*/ + +#include "config.h" + +#if defined(HAVE_CDDA) + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "cdd.h" + +/******************************************************************************************************************* + * + * xmcd parser, cd info list + * + *******************************************************************************************************************/ + +cd_info_t* +cd_info_new() { + cd_info_t *cd_info = NULL; + + cd_info = (cd_info_t*)malloc(sizeof(cd_info_t)); + if( cd_info==NULL ) { + printf("Memory allocation failed\n"); + return NULL; + } + + memset(cd_info, 0, sizeof(cd_info_t)); + + 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; + + if( cd_info==NULL || track_name==NULL ) return NULL; + + cd_track = (cd_track_t*)malloc(sizeof(cd_track_t)); + if( cd_track==NULL ) { + printf("Memory allocation failed\n"); + return NULL; + } + memset(cd_track, 0, sizeof(cd_track_t)); + + cd_track->name = (char*)malloc(strlen(track_name)+1); + if( cd_track->name==NULL ) { + printf("Memory allocation failed\n"); + 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; + + cd_info->last = cd_track; + cd_info->current = cd_track; + + cd_info->nb_tracks++; + + 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; + printf("================ CD INFO === start =========\n"); + if( cd_info==NULL ) { + printf("cd_info is NULL\n"); + return; + } + printf(" artist=[%s]\n", cd_info->artist); + printf(" album=[%s]\n", cd_info->album); + printf(" genre=[%s]\n", cd_info->genre); + printf(" nb_tracks=%d\n", cd_info->nb_tracks); + printf(" length= %2d:%02d.%02d\n", cd_info->min, cd_info->sec, cd_info->msec); + current_track = cd_info->first; + while( current_track!=NULL ) { + printf(" #%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); + current_track = current_track->next; + } + printf("================ CD INFO === end =========\n"); +} + +#endif |