source: titan/titan/audiotrack.h @ 10958

Last change on this file since 10958 was 10335, checked in by nit, 12 years ago

[titan] fix _()

File size: 3.8 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;
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                                        changeinput(tmp, _("running"));
48                                else
49                                        changeinput(tmp, "");
50                        }
51                        node = node->next;
52                }       
53                m_unlock(&status.audiotrackmutex, 7);
54        }
55
56        drawscreen(audiotrack, 0);
57        addscreenrc(audiotrack, listbox);
58
59        while(1)
60        {
61                rcret = waitrc(audiotrack, 0, 0);
62       
63                if(rcret == getrcconfigint("rcexit", NULL)) break;
64                if(rcret == getrcconfigint("rcok", NULL))
65                {
66                        if(listbox->select != NULL && listbox->select->handle != NULL)
67                        {
68                                m_lock(&status.audiotrackmutex, 7);
69                                if(checkaudiotrack(status.aktservice->channel, (struct audiotrack*)listbox->select->handle) != NULL)
70                                        servicechangeaudio(status.aktservice->channel, (struct audiotrack*)listbox->select->handle);
71                                m_unlock(&status.audiotrackmutex, 7);
72                        }
73                        break;
74                }
75                if(rcret == getrcconfigint("rcyellow", NULL))
76                {
77                        clearscreen(audiotrack);
78                        screensubtitle();
79                        break;
80                }
81        }
82
83        delmarkedscreennodes(audiotrack, 1);
84        delownerrc(audiotrack);
85        clearscreen(audiotrack);
86}
87
88struct audiotrack* addaudiotrack(struct channel* chnode, char* langdesc, int pid, int audiocodec, struct audiotrack* last)
89{
90        debug(1000, "in");
91        struct audiotrack *newnode = NULL, *prev = NULL, *node = NULL;
92        char *tmpstr = NULL;
93
94        if(chnode == NULL)
95        {
96                debug(1000, "out -> NULL detect");
97                return NULL;
98        }
99
100        newnode = (struct audiotrack*)malloc(sizeof(struct audiotrack));       
101        if(newnode == NULL)
102        {
103                err("no memory");
104                return NULL;
105        }
106
107        memset(newnode, 0, sizeof(struct audiotrack));
108
109        newnode->audiopid = pid;
110        newnode->audiocodec = audiocodec;
111
112        tmpstr = ostrcat(tmpstr, langdesc, 1, 0);
113        switch(audiocodec)
114        {
115                case AC3: tmpstr = ostrcat(tmpstr, " (AC3)", 1, 0); break;
116                case MPEGA: tmpstr = ostrcat(tmpstr, " (MPEG)", 1, 0); break;
117                case DTS: tmpstr = ostrcat(tmpstr, " (DTS)", 1, 0); break;
118                case LPCM: tmpstr = ostrcat(tmpstr, " (LPCM)", 1, 0); break;
119                case AAC: tmpstr = ostrcat(tmpstr, " (AAC)", 1, 0); break;
120                case AACHE: tmpstr = ostrcat(tmpstr, " (AACHE)", 1, 0); break;
121        }
122
123        newnode->name = tmpstr;
124
125        m_lock(&status.audiotrackmutex, 7);
126        node = chnode->audiotrack;
127        if(last == NULL)
128        {
129                while(node != NULL)
130                {
131                        prev = node;
132                        node = node->next;
133                }
134        }
135        else
136        {
137                prev = last;
138                node = last->next;
139        }
140
141        if(prev == NULL)
142                chnode->audiotrack = newnode;
143        else
144                prev->next = newnode;
145
146        newnode->next = node;
147
148        m_unlock(&status.audiotrackmutex, 7);
149        debug(1000, "out");
150        return newnode;
151}
152
153void freeaudiotrack(struct channel* chnode)
154{
155        debug(1000, "in");
156        struct audiotrack *node = NULL, *prev = NULL;
157
158        if(chnode == NULL)
159        {
160                debug(1000, "out -> NULL detect");
161                return;
162        }
163
164        m_lock(&status.audiotrackmutex, 7);
165        node = chnode->audiotrack;
166        prev = chnode->audiotrack;
167
168        while(node != NULL)
169        {
170                prev = node;
171                node = node->next;
172                chnode->audiotrack = node;
173
174                free(prev->name);
175                prev->name = NULL;
176
177                free(prev);
178                prev = NULL;
179
180        }
181        m_unlock(&status.audiotrackmutex, 7);
182        debug(1000, "out");
183}
184
185#endif
Note: See TracBrowser for help on using the repository browser.