~ubuntu-dev/mplayer/ubuntu-feisty

« back to all changes in this revision

Viewing changes to libmpdemux/cdinfo.c

  • Committer: William Grant
  • Date: 2007-02-03 03:16:07 UTC
  • mto: This revision was merged to the branch mainline in revision 16.
  • Revision ID: william.grant@ubuntu.org.au-20070203031607-08gc2ompbz6spt9i
Update to 1.0rc1.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 * CD Info 
3
 
 * by Bertrand Baudet <bertrand_baudet@yahoo.com>
4
 
 * (C) 2002, MPlayer team.
5
 
*/
6
 
 
7
 
#include "config.h"
8
 
 
9
 
#if defined(HAVE_CDDA) 
10
 
 
11
 
#include <stdio.h>
12
 
#include <stdlib.h>
13
 
#include <string.h>
14
 
#include "mp_msg.h"
15
 
#include "help_mp.h"
16
 
#include "cdd.h"
17
 
 
18
 
/*******************************************************************************************************************
19
 
 *
20
 
 * xmcd parser, cd info list
21
 
 *
22
 
 *******************************************************************************************************************/
23
 
 
24
 
cd_info_t*
25
 
cd_info_new() {
26
 
        cd_info_t *cd_info = NULL;
27
 
        
28
 
        cd_info = (cd_info_t*)malloc(sizeof(cd_info_t));
29
 
        if( cd_info==NULL ) {
30
 
                mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MemAllocFailed);
31
 
                return NULL;
32
 
        }
33
 
        
34
 
        memset(cd_info, 0, sizeof(cd_info_t));
35
 
        
36
 
        return cd_info;
37
 
}
38
 
 
39
 
void
40
 
cd_info_free(cd_info_t *cd_info) {
41
 
        cd_track_t *cd_track, *cd_track_next;
42
 
        if( cd_info==NULL ) return;
43
 
        if( cd_info->artist!=NULL ) free(cd_info->artist);
44
 
        if( cd_info->album!=NULL ) free(cd_info->album);
45
 
        if( cd_info->genre!=NULL ) free(cd_info->genre);
46
 
 
47
 
        cd_track_next = cd_info->first;
48
 
        while( cd_track_next!=NULL ) {
49
 
                cd_track = cd_track_next;
50
 
                cd_track_next = cd_track->next;
51
 
                if( cd_track->name!=NULL ) free(cd_track->name);
52
 
                free(cd_track);
53
 
        }
54
 
}
55
 
 
56
 
cd_track_t*
57
 
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) {
58
 
        cd_track_t *cd_track;
59
 
        
60
 
        if( cd_info==NULL || track_name==NULL ) return NULL;
61
 
        
62
 
        cd_track = (cd_track_t*)malloc(sizeof(cd_track_t));
63
 
        if( cd_track==NULL ) {
64
 
                mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MemAllocFailed);
65
 
                return NULL;
66
 
        }
67
 
        memset(cd_track, 0, sizeof(cd_track_t));
68
 
        
69
 
        cd_track->name = (char*)malloc(strlen(track_name)+1);
70
 
        if( cd_track->name==NULL ) {
71
 
                mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MemAllocFailed);
72
 
                free(cd_track);
73
 
                return NULL;
74
 
        }
75
 
        strcpy(cd_track->name, track_name);
76
 
        cd_track->track_nb = track_nb;
77
 
        cd_track->min = min;
78
 
        cd_track->sec = sec;
79
 
        cd_track->msec = msec;
80
 
        cd_track->frame_begin = frame_begin;
81
 
        cd_track->frame_length = frame_length;
82
 
 
83
 
        if( cd_info->first==NULL ) {
84
 
                cd_info->first = cd_track;
85
 
        }
86
 
        if( cd_info->last!=NULL ) {
87
 
                cd_info->last->next = cd_track;
88
 
        }
89
 
 
90
 
        cd_track->prev = cd_info->last;
91
 
        
92
 
        cd_info->last = cd_track;
93
 
        cd_info->current = cd_track;
94
 
 
95
 
        cd_info->nb_tracks++;
96
 
        
97
 
        return cd_track;
98
 
}
99
 
 
100
 
cd_track_t*
101
 
cd_info_get_track(cd_info_t *cd_info, unsigned int track_nb) {
102
 
        cd_track_t *cd_track=NULL;
103
 
 
104
 
        if( cd_info==NULL ) return NULL;
105
 
 
106
 
        cd_track = cd_info->first;
107
 
        while( cd_track!=NULL ) {
108
 
                if( cd_track->track_nb==track_nb ) {
109
 
                        return cd_track;
110
 
                }
111
 
                cd_track = cd_track->next;
112
 
        }
113
 
        return NULL;
114
 
}
115
 
 
116
 
void
117
 
cd_info_debug(cd_info_t *cd_info) {
118
 
        cd_track_t *current_track;
119
 
        printf("================ CD INFO === start =========\n");
120
 
        if( cd_info==NULL ) {
121
 
                printf("cd_info is NULL\n");
122
 
                return;
123
 
        }
124
 
        printf(" artist=[%s]\n", cd_info->artist);
125
 
        printf(" album=[%s]\n", cd_info->album);
126
 
        printf(" genre=[%s]\n", cd_info->genre);
127
 
        printf(" nb_tracks=%d\n", cd_info->nb_tracks);
128
 
        printf(" length= %2d:%02d.%02d\n", cd_info->min, cd_info->sec, cd_info->msec);
129
 
        current_track = cd_info->first;
130
 
        while( current_track!=NULL ) {
131
 
                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);
132
 
                current_track = current_track->next;
133
 
        }
134
 
        printf("================ CD INFO ===  end  =========\n");
135
 
}
136
 
 
137
 
#endif