source: titan/titan/audiotrack.h @ 15272

Last change on this file since 15272 was 12175, checked in by nit, 12 years ago

fix

File size: 4.0 KB
Line 
1#ifndef AUDIOTRACK_H
2#define AUDIOTRACK_H
3
4struct audiotrack* checkaudiotrack(struct channel* chnode, struct audiotrack* atrack)
5{
6        struct audiotrack* node = NULL;
7
8        if(chnode != NULL)
9        {
10                node = chnode->audiotrack;
11                while(node != NULL)
12                {
13                        if(node == atrack)
14                                return node;
15                        node = node->next;
16                }
17        }
18        return NULL;
19}
20
21void screenaudiotrack()
22{
23        int rcret = 0, treffer = 0;
24        struct skin* audiotrack = getscreen("audiotrack");
25        struct skin* listbox = getscreennode(audiotrack, "listbox");
26        struct skin* tmp = NULL;
27        struct audiotrack* node = NULL;
28
29        listbox->aktline = 1;
30        listbox->aktpage = -1;
31
32        if(status.aktservice->channel != NULL)
33        {
34                m_lock(&status.audiotrackmutex, 7);
35                node = status.aktservice->channel->audiotrack;
36                while(node != NULL)
37                {
38                        tmp = addlistbox(audiotrack, listbox, tmp, 1);
39                        if(tmp != NULL)
40                        {
41                                changetext(tmp, node->name);
42                                tmp->type = CHOICEBOX;
43                                tmp->del = 1;
44                                tmp->handle = (char*)node;
45
46                                if(status.aktservice->channel->audiopid == node->audiopid)
47                                {
48                                        changeinput(tmp, _("running"));
49                                        treffer = 1;
50                                }
51                                else
52                                        changeinput(tmp, "");
53
54                                if(treffer == 0) listbox->aktline++;
55                        }
56                        node = node->next;
57                }       
58                m_unlock(&status.audiotrackmutex, 7);
59        }
60
61        if(treffer == 0) listbox->aktline = 1;
62
63        drawscreen(audiotrack, 0);
64        addscreenrc(audiotrack, listbox);
65
66        while(1)
67        {
68                rcret = waitrc(audiotrack, 0, 0);
69       
70                if(rcret == getrcconfigint("rcexit", NULL)) break;
71                if(rcret == getrcconfigint("rcok", NULL))
72                {
73                        if(listbox->select != NULL && listbox->select->handle != NULL)
74                        {
75                                m_lock(&status.audiotrackmutex, 7);
76                                if(checkaudiotrack(status.aktservice->channel, (struct audiotrack*)listbox->select->handle) != NULL)
77                                        servicechangeaudio(status.aktservice->channel, (struct audiotrack*)listbox->select->handle);
78                                m_unlock(&status.audiotrackmutex, 7);
79                        }
80                        break;
81                }
82                if(rcret == getrcconfigint("rcyellow", NULL))
83                {
84                        clearscreen(audiotrack);
85                        screensubtitle();
86                        break;
87                }
88        }
89
90        delmarkedscreennodes(audiotrack, 1);
91        delownerrc(audiotrack);
92        clearscreen(audiotrack);
93}
94
95struct audiotrack* addaudiotrack(struct channel* chnode, char* langdesc, int pid, int audiocodec, struct audiotrack* last)
96{
97        debug(1000, "in");
98        struct audiotrack *newnode = NULL, *prev = NULL, *node = NULL;
99        char *tmpstr = NULL;
100
101        if(chnode == NULL)
102        {
103                debug(1000, "out -> NULL detect");
104                return NULL;
105        }
106
107        newnode = (struct audiotrack*)malloc(sizeof(struct audiotrack));       
108        if(newnode == NULL)
109        {
110                err("no memory");
111                return NULL;
112        }
113
114        memset(newnode, 0, sizeof(struct audiotrack));
115
116        newnode->audiopid = pid;
117        newnode->audiocodec = audiocodec;
118        if(ostrcmp(langdesc, "und") == 0)
119                tmpstr = ostrcat(tmpstr, _("undefined"), 1, 0);
120        else
121                tmpstr = ostrcat(tmpstr, _(langdesc), 1, 0);
122        switch(audiocodec)
123        {
124                case AC3: tmpstr = ostrcat(tmpstr, " (DOLBY DIGITAL)", 1, 0); break;
125                case MPEGA: tmpstr = ostrcat(tmpstr, " (STEREO)", 1, 0); break;
126                case DTS: tmpstr = ostrcat(tmpstr, " (DTS)", 1, 0); break;
127                case LPCM: tmpstr = ostrcat(tmpstr, " (LPCM)", 1, 0); break;
128                case AAC: tmpstr = ostrcat(tmpstr, " (AAC)", 1, 0); break;
129                case AACHE: tmpstr = ostrcat(tmpstr, " (AACHE)", 1, 0); break;
130        }
131
132        newnode->name = tmpstr;
133
134        m_lock(&status.audiotrackmutex, 7);
135        node = chnode->audiotrack;
136        if(last == NULL)
137        {
138                while(node != NULL)
139                {
140                        prev = node;
141                        node = node->next;
142                }
143        }
144        else
145        {
146                prev = last;
147                node = last->next;
148        }
149
150        if(prev == NULL)
151                chnode->audiotrack = newnode;
152        else
153                prev->next = newnode;
154
155        newnode->next = node;
156
157        m_unlock(&status.audiotrackmutex, 7);
158        debug(1000, "out");
159        return newnode;
160}
161
162void freeaudiotrack(struct channel* chnode)
163{
164        debug(1000, "in");
165        struct audiotrack *node = NULL, *prev = NULL;
166
167        if(chnode == NULL)
168        {
169                debug(1000, "out -> NULL detect");
170                return;
171        }
172
173        m_lock(&status.audiotrackmutex, 7);
174        node = chnode->audiotrack;
175        prev = chnode->audiotrack;
176
177        while(node != NULL)
178        {
179                prev = node;
180                node = node->next;
181                chnode->audiotrack = node;
182
183                free(prev->name);
184                prev->name = NULL;
185
186                free(prev);
187                prev = NULL;
188
189        }
190        m_unlock(&status.audiotrackmutex, 7);
191        debug(1000, "out");
192}
193
194#endif
Note: See TracBrowser for help on using the repository browser.