source: titan/titan/play.h @ 30654

Last change on this file since 30654 was 30654, checked in by nit, 9 years ago

add mipsel current audio detect

File size: 49.3 KB
Line 
1#ifndef PLAY_H
2#define PLAY_H
3
4extern struct screensaver* screensaver;
5
6void screenplaypolicy()
7{
8        if(checkbit(status.playercan, 0) == 0) return;
9
10        int rcret = 0;
11        struct skin* playpolicy = getscreen("playpolicy");
12        char* tmpstr = NULL;
13
14start:
15        changepolicy();
16        tmpstr = getpolicy();
17        changetext(playpolicy, _(tmpstr));
18        free(tmpstr); tmpstr = NULL;
19        drawscreen(playpolicy, 0, 0);
20
21        while(1)
22        {
23                rcret = waitrc(playpolicy, 1000, 0);
24                if(rcret == getrcconfigint("rcok", NULL))
25                        goto start;
26                break;
27        }
28
29        clearscreen(playpolicy);
30}
31
32void screenplaybufferstatus(struct stimerthread* self)
33{
34        int rcret = -1, draw = 50;
35        if(self == NULL) return;
36
37        struct skin* playbufferstatus = getscreen("playbufferstatus");
38
39        playbufferstatus->progresssize = 0;
40       
41        while(self->aktion != STOP)
42        {
43                rcret = waitrc(0, 1, 0);
44                if(rcret == getrcconfigint("rcexit", NULL))
45                {
46                        playerstopbuffer();
47                        break;
48                }
49
50                if(draw == 50)
51                {
52                        draw = 0;
53                        if(playergetbuffersize() > 0)
54                                drawscreen(playbufferstatus, 0, 0);
55                }
56                //usleep(10000);
57                draw++;
58        }
59       
60        if(playergetbuffersize() > 0)
61        {
62                clearscreen(playbufferstatus);
63                drawscreen(skin, 0, 0);
64        }
65}
66
67//flag = 4 ---> timeshift
68//flag = 5 --> timeshift, not in play mode (only recording)
69void screenplayinfobar(char* file, char* showname, int mode, int playertype, int flag)
70{
71        int change = 1;
72        int videodevpts = 1;
73
74        if(checkbit(status.playercan, 14) == 0) return;
75
76        if((flag == 2) || (flag == 3))
77        {
78                return;
79        }
80        struct skin* playinfobar = getscreen("playinfobar");
81        struct skin* playinfobarpic = getscreen("playinfobarpic");
82        if(mode == 1)
83        {
84                clearscreen(playinfobar);
85                clearscreen(playinfobarpic);
86                drawscreen(skin, 0, 0);
87                return;
88        }
89
90        struct skin* title = getscreennode(playinfobar, "title");
91        struct skin* spos = getscreennode(playinfobar, "pos");
92        struct skin* slen = getscreennode(playinfobar, "len");
93        struct skin* sreverse = getscreennode(playinfobar, "reverse");
94        struct skin* sprogress = getscreennode(playinfobar, "progress");
95        char* tmpstr = NULL;
96        unsigned long long pos = 0, dpos = 0, len = 0, reverse = 0;
97
98        // show thumb cover start
99        struct skin* playinfobarcover = getscreen("playinfobarcover");
100        struct skin* cover = getscreennode(playinfobarcover, "cover");
101        cover->hidden = YES;
102        if(file != NULL)
103        {
104                struct mediadb* node = NULL;
105                char* dname = ostrcat(file, NULL, 0, 0);
106                dname = dirname(dname);
107                node = getmediadb(dname, basename(file), 0);
108                free(dname); dname = NULL;
109               
110                if(node != NULL)
111                {
112                        if(ostrncmp("tt", node->id, 2) == 0)
113                        {
114                                tmpstr = ostrcat(tmpstr, getconfig("mediadbpath", NULL), 1, 0);
115                                tmpstr = ostrcat(tmpstr, "/", 1, 0);
116                                tmpstr = ostrcat(tmpstr, node->id, 1, 0);
117                                tmpstr = ostrcat(tmpstr, "_poster.jpg", 0, 0);
118                                if(file_exist(tmpstr))
119                                {
120                                        changepic(cover, tmpstr);
121                                        cover->hidden = NO;
122                                }
123                                free(tmpstr), tmpstr = NULL;
124                        }
125                }
126        }
127        // show thumb cover end
128
129        if(showname == NULL)
130        {
131                tmpstr = ostrcat(file, NULL, 0, 0);
132                if(tmpstr != NULL) changetext(title, basename(tmpstr));
133                free(tmpstr); tmpstr = NULL;
134        }
135        else
136                changetext(title, showname);
137
138        videodevpts = 1;
139        if(playertype == 1)
140        {
141                int ret = 0;
142                unsigned long long startpos = 0;
143                if(flag == 4)
144                        ret = playergetinfots(&len, &startpos, NULL, &pos, NULL, 1);
145                else if(flag == 5)
146                        ret = playergetinfots(&len, &startpos, NULL, &pos, NULL, 2);
147                else
148                {
149                        ret = playergetinfots(&len, &startpos, NULL, &pos, NULL, 0);
150                        if(ret == 0)
151                        {
152                                ret = videogetpts(status.aktservice->videodev, &dpos);
153                                if(ret == 0)
154                                {
155                                        pos = dpos;
156                                        videodevpts = 1;
157                                }
158                                else
159                                {
160                                        ret = 0;
161                                        videodevpts = 0;
162                                }
163                        }
164                }
165                len = len / 90000;
166                pos = (pos - startpos) / 90000;
167                if(ret != 0) change = 0;
168        }
169        else if(playertype == 2)
170        {
171                pos = dvdgetpts() / 90000;
172                len = dvdgetlength();
173        }
174        else
175        {
176                pos = playergetpts() / 90000;
177                len = playergetlength();
178        }
179        if(pos < 0) pos = 0;
180        reverse = len - pos;
181
182        if(change == 1)
183        {
184                if(len == 0)
185                        sprogress->progresssize = 0;
186                else
187                        sprogress->progresssize = pos * 100 / len;
188        }
189
190        tmpstr = convert_timesec(pos);
191        if(videodevpts == 1)
192                changetext(spos, tmpstr);
193        else
194                changetext(spos, " ");
195        free(tmpstr); tmpstr = NULL;
196
197        tmpstr = convert_timesec(len);
198        changetext(slen, tmpstr);
199        free(tmpstr); tmpstr = NULL;
200
201        tmpstr = convert_timesec(reverse);
202        changetext(sreverse, tmpstr);
203        free(tmpstr); tmpstr = NULL;
204
205        drawscreen(playinfobar, 0, 0);
206        drawscreen(playinfobarpic, 0, 0);
207        drawscreen(playinfobarcover, 0, 0);
208}
209
210void screenplaytracklist(int mode, int playertype, int flag)
211{
212        //mode 1 = audiotracks
213        //mode 2 = subtitle tracks
214
215        if(mode == 1 && checkbit(status.playercan, 1) == 0) return;
216        if(mode == 2 && checkbit(status.playercan, 2) == 0) return;
217
218        if(playertype == 1)
219        {
220                screenplayinfobar(NULL, NULL, 1, playertype, flag);
221                if(mode == 1)
222                        playerchangeaudiotrackts();
223                else if(mode == 2)
224                        playerchangesubtitletrackts();
225                blitfb(0);
226                return;
227        }
228
229        int i = 0;
230        int rcret = 0, curtrackid = 0;
231        struct skin* track = NULL;
232        if(mode == 1)
233                track = getscreen("audiotrack");
234        else if(mode == 2)
235                track = getscreen("subtitle");
236        struct skin* listbox = getscreennode(track, "listbox");
237        struct skin* tmp = NULL;
238        char** tracklist = NULL;
239        char* curtrackencoding = NULL, *curtrackname = NULL;
240        char* tmpstr = NULL;
241
242        playergetcurtrac(mode, &curtrackid, &curtrackencoding, &curtrackname);
243        tracklist = playergettracklist(mode);
244
245        if(tracklist != NULL)
246        {
247                while(tracklist[i] != NULL)
248                {
249                        tmp = addlistbox(track, listbox, tmp, 1);
250                        if(tmp != NULL)
251                        {
252                                if(ostrcmp(tracklist[i], "und") == 0)
253                                        tmpstr = ostrcat(tmpstr, _("undefined"), 1, 0);
254                                else
255                                        tmpstr = ostrcat(tmpstr, _(tracklist[i]), 1, 0);
256                                       
257                                if(tracklist[i + 1] != NULL && strlen(tracklist[i + 1]) > 0)
258                                {       
259                                        tmpstr = ostrcat(tmpstr, " (", 1, 0);
260                                        tmpstr = ostrcat(tmpstr, tracklist[i + 1], 1, 0);
261                                        tmpstr = ostrcat(tmpstr, ")", 1, 0);
262                                }
263                               
264                               
265                                changetext(tmp, tmpstr);
266                                free(tmpstr); tmpstr = NULL;
267                                tmp->type = CHOICEBOX;
268                                tmp->del = 1;
269                                if(tracklist[i] != NULL && atoi(tracklist[i]) != 0)
270                                        tmp->handle = (char*)atoi(tracklist[i]);
271                                else
272                                        tmp->handle = (char*)(i / 2);
273                               
274#ifdef MIPSEL   
275                                if(curtrackid == (i / 2))
276                                {
277                                        tmp->handle1 = "running";
278                                        changeinput(tmp, _("running"));
279                                }
280                                else
281                                        changeinput(tmp, "");
282#else
283                                if((ostrcmp(curtrackname, tracklist[i]) == 0 && ostrcmp(curtrackencoding, tracklist[i + 1]) == 0) || (tracklist[i] != NULL && curtrackid == atoi(tracklist[i])))
284                                {
285                                        tmp->handle1 = "running";
286                                        changeinput(tmp, _("running"));
287                                }
288                                else
289                                        changeinput(tmp, "");
290#endif
291                        }
292                        i += 2;
293                }
294        }
295
296        free(curtrackencoding); curtrackencoding = NULL;
297        free(curtrackname); curtrackname = NULL;
298        playerfreetracklist(tracklist);
299        tracklist = NULL;
300
301        listbox->aktline = 1;
302        listbox->aktpage = -1;
303
304        screenplayinfobar(NULL, NULL, 1, playertype, flag);
305        drawscreen(track, 0, 0);
306        addscreenrc(track, listbox);
307
308        while(1)
309        {
310                rcret = waitrc(track, 0, 0);
311
312                if(rcret == getrcconfigint("rcexit", NULL)) break;
313                if(rcret == getrcconfigint("rcyellow", NULL)) break;
314                if(rcret == getrcconfigint("rcok", NULL))
315                {
316                        if(listbox->select != NULL)
317                        {
318                                if(mode == 1)
319                                        playerchangeaudiotrack((int)listbox->select->handle);
320                                else if(mode == 2)
321                                {
322                                        if(listbox->select->handle1 != NULL)
323                                                playerstopsubtitletrack();
324                                        else   
325                                                playerchangesubtitletrack((int)listbox->select->handle);
326                                }
327                        }
328                        break;
329                }
330        }
331
332        delmarkedscreennodes(track, 1);
333        delownerrc(track);
334        clearscreen(track);
335        blitfb(0);
336       
337        if(rcret == getrcconfigint("rcyellow", NULL))
338                screenplaytracklist(2, playertype, flag);
339}
340
341void playrcyellow(char* file, char* showname, int playinfobarstatus, int playertype, int flag)
342{
343//      if(checkbit(status.playercan, 1) == 0) return;
344
345        screenplaytracklist(1, playertype, flag);
346        if(playinfobarstatus > 0)
347                screenplayinfobar(file, showname, 0, playertype, flag);
348}
349
350void playrctext(char* file, char* showname, int playinfobarstatus, int playertype, int flag)
351{
352//      if(checkbit(status.playercan, 2) == 0) return;
353
354        screenplaytracklist(2, playertype, flag);
355        if(playinfobarstatus > 0)
356                screenplayinfobar(file, showname, 0, playertype, flag);
357}
358
359void playrcgreen(char* file, char* showname, int playinfobarstatus, int playertype, int flag)
360{
361//      if(checkbit(status.playercan, 3) == 0) return;
362
363        screenplayinfobar(file, showname, 1, playertype, flag);
364        if(playertype == 2)
365                screenvideomode(2);
366        else
367                screenvideomode(1);
368        drawscreen(skin, 0, 0);
369        if(playinfobarstatus > 0)
370                screenplayinfobar(file, showname, 0, playertype, flag);
371}
372
373void playrcblue(char* file, char* showname, int playinfobarstatus, int playertype, int flag)
374{
375        if(checkbit(status.playercan, 4) == 0) return;
376
377        screenplayinfobar(file, showname, 1, playertype, flag);
378        screenpowerofftimer();
379        drawscreen(skin, 0, 0);
380        if(playinfobarstatus > 0)
381                screenplayinfobar(file, showname, 0, playertype, flag);
382}
383
384void playrcok(char* file, char* showname, int playinfobarstatus, int playertype, int flag)
385{
386//      if(checkbit(status.playercan, 0) == 0) return;
387
388        free(status.playfile); status.playfile = NULL;
389        status.playfile = ostrcat(file, NULL, 0, 0);
390        screenplaypolicy(file, 1);
391        drawscreen(skin, 0, 0);
392        if(playinfobarstatus > 0)
393                screenplayinfobar(file, showname, 0, playertype, flag);
394}
395
396void id3tag_info(char* file)
397{
398        char* tmpstr = NULL;
399
400        if(file == NULL) return;
401        if(!filelistflt(".mp3 .flac .ogg .wma .ra .wav", file))
402        {
403                struct id3tag* id3tag = NULL;
404                int hash = gethash(file);
405                char* tmphash = olutoa(hash);
406                               
407                id3tag = getid3(file, tmphash, 1);
408                free(tmphash); tmphash = NULL;
409       
410                if(id3tag != NULL)
411                {
412                        tmpstr = ostrcat(tmpstr, _("Title:"), 1, 0);
413                        tmpstr = ostrcat(tmpstr, " ", 1, 0);
414                        tmpstr = ostrcat(tmpstr, id3tag->title, 1, 0);
415                        tmpstr = ostrcat(tmpstr, "\n", 1, 0);
416                       
417                        tmpstr = ostrcat(tmpstr, _("Artist:"), 1, 0);
418                        tmpstr = ostrcat(tmpstr, " ", 1, 0);
419                        tmpstr = ostrcat(tmpstr, id3tag->artist, 1, 0);
420                        tmpstr = ostrcat(tmpstr, "\n", 1, 0);
421                       
422                        tmpstr = ostrcat(tmpstr, _("Album:"), 1, 0);
423                        tmpstr = ostrcat(tmpstr, " ", 1, 0);
424                        tmpstr = ostrcat(tmpstr, id3tag->album, 1, 0);
425                        tmpstr = ostrcat(tmpstr, "\n", 1, 0);
426                       
427                        tmpstr = ostrcat(tmpstr, _("Year:"), 1, 0);
428                        tmpstr = ostrcat(tmpstr, " ", 1, 0);
429                        tmpstr = ostrcat(tmpstr, id3tag->year, 1, 0);
430                        tmpstr = ostrcat(tmpstr, "\n", 1, 0);
431               
432                        tmpstr = ostrcat(tmpstr, _("Genre:"), 1, 0);
433                        tmpstr = ostrcat(tmpstr, " ", 1, 0);
434                        tmpstr = ostrcat(tmpstr, id3tag->genretext, 1, 0);
435                        tmpstr = ostrcat(tmpstr, "\n", 1, 0);
436
437                        tmpstr = ostrcat(tmpstr, _("Comment:"), 1, 0);
438                        tmpstr = ostrcat(tmpstr, " ", 1, 0);
439                        tmpstr = ostrcat(tmpstr, id3tag->comment, 1, 0);
440                        tmpstr = ostrcat(tmpstr, "\n", 1, 0);
441                }
442                freeid3(id3tag); id3tag = NULL;         
443        }
444        else
445        {
446                tmpstr = ostrcat(tmpstr, _("Title:"), 1, 0);
447                tmpstr = ostrcat(tmpstr, " ", 1, 0);
448                tmpstr = ostrcat(tmpstr, playergetinfo("Title"), 1, 1);
449                tmpstr = ostrcat(tmpstr, "\n", 1, 0);
450               
451                tmpstr = ostrcat(tmpstr, _("Artist:"), 1, 0);
452                tmpstr = ostrcat(tmpstr, " ", 1, 0);
453                tmpstr = ostrcat(tmpstr, playergetinfo("Artist"), 1, 1);
454                tmpstr = ostrcat(tmpstr, "\n", 1, 0);
455               
456                tmpstr = ostrcat(tmpstr, _("Album:"), 1, 0);
457                tmpstr = ostrcat(tmpstr, " ", 1, 0);
458                tmpstr = ostrcat(tmpstr, playergetinfo("Album"), 1, 1);
459                tmpstr = ostrcat(tmpstr, "\n", 1, 0);
460               
461                tmpstr = ostrcat(tmpstr, _("Year:"), 1, 0);
462                tmpstr = ostrcat(tmpstr, " ", 1, 0);
463                tmpstr = ostrcat(tmpstr, playergetinfo("Year"), 1, 1);
464                tmpstr = ostrcat(tmpstr, "\n", 1, 0);
465       
466                tmpstr = ostrcat(tmpstr, _("Genre:"), 1, 0);
467                tmpstr = ostrcat(tmpstr, " ", 1, 0);
468                tmpstr = ostrcat(tmpstr, playergetinfo("Genre"), 1, 1);
469                tmpstr = ostrcat(tmpstr, "\n", 1, 0);
470               
471                tmpstr = ostrcat(tmpstr, _("Comment:"), 1, 0);
472                tmpstr = ostrcat(tmpstr, " ", 1, 0);
473                tmpstr = ostrcat(tmpstr, playergetinfo("Comment"), 1, 1);
474                tmpstr = ostrcat(tmpstr, "\n", 1, 0);
475               
476                tmpstr = ostrcat(tmpstr, _("Track:"), 1, 0);
477                tmpstr = ostrcat(tmpstr, " ", 1, 0);
478                tmpstr = ostrcat(tmpstr, playergetinfo("Track"), 1, 1);
479                tmpstr = ostrcat(tmpstr, "\n", 1, 0);
480               
481                tmpstr = ostrcat(tmpstr, _("Copyright:"), 1, 0);
482                tmpstr = ostrcat(tmpstr, " ", 1, 0);
483                tmpstr = ostrcat(tmpstr, playergetinfo("Copyright"), 1, 1);
484                tmpstr = ostrcat(tmpstr, "\n", 1, 0);
485               
486        //      tmpstr = ostrcat(tmpstr, _("TestLibEplayer:"), 1, 0);
487        //      tmpstr = ostrcat(tmpstr, " ", 1, 0);
488        //      tmpstr = ostrcat(tmpstr, playergetinfo("TestLibEplayer"), 1, 1);
489        //      tmpstr = ostrcat(tmpstr, "\n", 1, 0);
490        }
491                       
492        textbox(_("iD3Tag"), tmpstr, _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 800, 500, 100, 0);
493        free(tmpstr), tmpstr = NULL;
494}
495
496void imdb_submenu(char* file, int mode)
497{
498        struct skin* pluginnode = NULL;
499        void (*startplugin)(char*, char*, int, char*, char*);
500
501        startplugin = NULL;
502       
503        if(mode == 0)
504                pluginnode = getplugin("IMDb");
505        else if(mode == 1)
506                pluginnode = getplugin("IMDb-API");
507        else if(mode == 2)
508                pluginnode = getplugin("TMDb");
509                       
510        if(pluginnode != NULL)
511        {                       
512                if(mode == 0)
513                        startplugin = dlsym(pluginnode->pluginhandle, "screenimdb");
514                else if(mode == 1)
515                        startplugin = dlsym(pluginnode->pluginhandle, "screenimdbapi");
516                else if(mode == 2)
517                        startplugin = dlsym(pluginnode->pluginhandle, "screentmdb");
518
519                if(startplugin != NULL)
520                {
521                                debug(133, "file=%s", basename(file));
522                        if(file != NULL)
523                        {
524                                if(ostrstr(file, "/") != NULL)
525                                {
526                                        //create imdb search name
527       
528                                        char* dname = ostrcat(file, NULL, 0, 0);
529                                        dname = dirname(dname);
530                               
531                                        char* shortname = ostrcat(basename(file), NULL, 0, 0);
532                                        string_tolower(shortname);
533        //                              shortname = string_shortname(shortname, 1);
534                                        shortname = string_shortname(shortname, 2);
535                                        string_removechar(shortname);
536                                        strstrip(shortname);
537       
538                                        debug(133, "inputfile=%s", file);
539                                        debug(133, "shortname=%s", shortname);
540                                        debug(133, "dname=%s", dname);
541                                        debug(133, "file=%s", basename(file));
542       
543                                        startplugin(shortname, NULL, 2, dname, basename(file));
544       
545                                        free(shortname), shortname = NULL;
546                                        free(dname), dname = NULL;
547                                }
548                                else
549                                {
550                                        startplugin(file, NULL, 2, NULL, NULL);
551                                }
552                               
553                        }                               
554                }
555        }
556}
557
558void get_mediadb_scan_info()
559{
560        int videocount = 0, audiocount = 0, picturecount = 0;
561        getmediadbcounts(&videocount, &audiocount, &picturecount);
562
563        char* tmpstr = NULL;
564        tmpstr = ostrcat(tmpstr, "scanning (", 1, 0);
565        tmpstr = ostrcat(tmpstr, oitoa(videocount), 1, 1);
566        tmpstr = ostrcat(tmpstr, "/", 1, 0);
567        tmpstr = ostrcat(tmpstr, oitoa(status.mediadbfiles), 1, 1);
568        tmpstr = ostrcat(tmpstr, ")", 1, 0);
569       
570        tmpstr = ostrcat(tmpstr, "\n\n ", 1, 0);
571        tmpstr = ostrcat(tmpstr, _("MediaDB directory scan started in Background !"), 1, 0);
572        tmpstr = ostrcat(tmpstr, "\n\n  ", 1, 0);
573        tmpstr = ostrcat(tmpstr, _("Delete MediaDB before scan"), 1, 0);
574        tmpstr = ostrcat(tmpstr, ": \t", 1, 0);
575        if(ostrcmp(getconfig("mediadbscandelall", NULL), "1") == 0)
576                tmpstr = ostrcat(tmpstr, _("yes"), 1, 0);
577        else
578                tmpstr = ostrcat(tmpstr, _("no"), 1, 0);
579        tmpstr = ostrcat(tmpstr, "\n  ", 1, 0);                 
580        tmpstr = ostrcat(tmpstr, _("Delete unused entrys before scan"), 1, 0);
581        tmpstr = ostrcat(tmpstr, ": \t", 1, 0);         
582        if(ostrcmp(getconfig("mediadbscandelnotfound", NULL), "1") == 0)
583                tmpstr = ostrcat(tmpstr, _("yes"), 1, 0);
584        else
585                tmpstr = ostrcat(tmpstr, _("no"), 1, 0);
586        tmpstr = ostrcat(tmpstr, "\n  ", 1, 0);
587        tmpstr = ostrcat(tmpstr, _("scan Directory"), 1, 0);
588        tmpstr = ostrcat(tmpstr, ": \t\t\t", 1, 0);
589        tmpstr = ostrcat(tmpstr, getconfig("mc_vp_path", NULL), 1, 0);
590        tmpstr = ostrcat(tmpstr, "\n  ", 1, 0);         
591        tmpstr = ostrcat(tmpstr, _("MediaDB place"), 1, 0);
592        tmpstr = ostrcat(tmpstr, ": \t\t\t", 1, 0);                             
593        tmpstr = ostrcat(tmpstr, getconfig("mediadbpath", NULL), 1, 0);
594        tmpstr = ostrcat(tmpstr, "\n  ", 1, 0);
595        tmpstr = ostrcat(tmpstr, _("MediaDB Debug"), 1, 0);
596        tmpstr = ostrcat(tmpstr, ": \t\t\t", 1, 0);
597        if(ostrcmp(getconfig("mediadbdebug", NULL), "1") == 0)
598                tmpstr = ostrcat(tmpstr, _("yes"), 1, 0);
599        else
600                tmpstr = ostrcat(tmpstr, _("no"), 1, 0);
601        tmpstr = ostrcat(tmpstr, "\n  ", 1, 0);         
602        tmpstr = ostrcat(tmpstr, _("Backdrop Download Count"), 1, 0);
603        tmpstr = ostrcat(tmpstr, ": \t\t", 1, 0);               
604        if(getconfigint("mediadbbackdrop", NULL) == 0)
605                tmpstr = ostrcat(tmpstr, _("all"), 1, 0);
606        else
607                tmpstr = ostrcat(tmpstr, oitoa(getconfigint("mediadbbackdrop", NULL)), 1, 1);
608
609        textbox(_("Message"), tmpstr, _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 1100, 500, 10, 0);
610        free(tmpstr), tmpstr = NULL;
611}
612
613// flag 100 = tithek
614int playrcred(char* file, char* showname, int playinfobarstatus, int playertype, int flag)
615{
616        int ret = 1;
617//      if(checkbit(status.playercan, 5) == 0) return;
618        if(status.play == 1)
619                screenplayinfobar(file, showname, 1, playertype, flag);
620
621        int hangtime = status.hangtime;
622
623        struct skin* pluginnode = NULL;
624        void (*startplugin)(void);
625        struct skin* plugin = getscreen("plugin");
626        struct skin* child = plugin->child;
627        struct menulist* mlist = NULL, *mbox = NULL;
628        char* skintitle = _("Menu");
629               
630        if(flag < 99)
631        {
632                if(status.play == 1)
633                {
634                        addmenulist(&mlist, "Video Settings", _("Video Settings"), NULL, 0, 0);
635                        addmenulist(&mlist, "AV Settings", _("AV Settings"), NULL, 0, 0);
636                        addmenulist(&mlist, "iD3Tag Info", _("iD3Tag Info"), NULL, 0, 0);
637                }
638
639                addmenulist(&mlist, "MediaDB Edit", _("MediaDB Edit"), NULL, 0, 0);
640       
641                if(status.play == 0)
642                        addmenulist(&mlist, "Delete File", _("Delete File"), NULL, 0, 0);
643                       
644                if(status.mediadbfiles > 0)
645                        addmenulist(&mlist, "MediaDB Scan Info", _("MediaDB Scan Info"), NULL, 0, 0);
646        }
647        else
648        {
649                if(file_exist("/mnt/swapextensions/etc/.codecpack") || file_exist("/var/swap/etc/.codecpack") || file_exist("/var/etc/.codecpack"))
650                {
651                        addmenulist(&mlist, "Search on KinoX", _("Search on KinoX"), NULL, 0, 0);
652                        addmenulist(&mlist, "Search on KinoX (local)", _("Search on KinoX (local)"), NULL, 0, 0);
653                        addmenulist(&mlist, "Search on Movie4k", NULL, _("Search on Movie4k"), 0, 0);
654                        addmenulist(&mlist, "Search on Movie4k (local)", _("Search on Movie4k (local)"), NULL, 0, 0);
655                        addmenulist(&mlist, "Search on Solarmovies (movie)", _("Search on Solarmovies (movie)"), NULL, 0, 0);
656                        addmenulist(&mlist, "Search on Solarmovies (serie)", _("Search on Solarmovies (serie)"), NULL, 0, 0);
657                        addmenulist(&mlist, "Search on Solarmovies (local)", _("Search on Solarmovies (local)"), NULL, 0, 0);
658                        addmenulist(&mlist, "Search on Mle-HD (local)", _("Search on Mle-HD (local)"), NULL, 0, 0);
659                        addmenulist(&mlist, "Search on Beeg (local)", _("Search on Beeg (local)"), NULL, 0, 0);
660                        addmenulist(&mlist, "Search on Xvideos (local)", _("Search on Xvideos (local)"), NULL, 0, 0);
661                        addmenulist(&mlist, "Search on FilmOn (local)", _("Search on FilmOn (local)"), NULL, 0, 0);
662                }
663                addmenulist(&mlist, "Search on Netzkino (local)", _("Search on Netzkino (local)"), NULL, 0, 0);
664                addmenulist(&mlist, "Search on Youtube", _("Search on Youtube"), NULL, 0, 0);
665                addmenulist(&mlist, "Search on Youtube (local)", _("Search on Youtube (local)"), NULL, 0, 0);
666                addmenulist(&mlist, "Search on MyVideo", _("Search on MyVideo"), NULL, 0, 0);
667                addmenulist(&mlist, "Search on MyVideo (local)", _("Search on MyVideo (local)"), NULL, 0, 0);
668                addmenulist(&mlist, "Search on ARD (local)", _("Search on ARD (local)"), NULL, 0, 0);
669                addmenulist(&mlist, "Search on ZDF (local)", _("Search on ZDF (local)"), NULL, 0, 0);
670                addmenulist(&mlist, "Search on TecTime (local)", _("Search on TecTime (local)"), NULL, 0, 0);
671                addmenulist(&mlist, "Search on Giga (local)", _("Search on Giga (local)"), NULL, 0, 0);
672                addmenulist(&mlist, "Search on Rtl-Now (local)", _("Search on Rtl-Now (local)"), NULL, 0, 0);
673                addmenulist(&mlist, "Search on Rtl2-Now (local)", _("Search on Rtl2-Now (local)"), NULL, 0, 0);
674                addmenulist(&mlist, "Search on SuperRTL-Now (local)", _("Search on SuperRTL-Now (local)"), NULL, 0, 0);
675                addmenulist(&mlist, "Search on VOX-Now (local)", _("Search on VOX-Now (local)"), NULL, 0, 0);
676                addmenulist(&mlist, "Search on RtlNitro-Now (local)", _("Search on RtlNitro-Now (local)"), NULL, 0, 0);
677                addmenulist(&mlist, "Search on NTV-Now (local)", _("Search on NTV-Now (local)"), NULL, 0, 0);
678                addmenulist(&mlist, "Search on InternetTv (local)", _("Search on InternetTv (local)"), NULL, 0, 0);
679                addmenulist(&mlist, "Search on InternetRadio (local)", _("Search on InternetRadio (local)"), NULL, 0, 0);
680        }
681
682        addmenulist(&mlist, "Downloads", _("Downloads"), NULL, 0, 0);
683
684        //add plugins
685        while(child != NULL)
686        {
687                if(child->del == PLUGINDELMARK && (status.security == 1 || (status.security == 0 && checkpluginskip(child->name) == 0)))
688                {
689                        if(ostrcmp(child->name, "Streaminfo") == 0 && status.play == 1)
690                                addmenulist(&mlist, child->name, _(child->name), child->pic, 0, 0);
691                        else if(ostrcmp(child->name, "IMDb") == 0)
692                                addmenulist(&mlist, child->name, _(child->name), child->pic, 0, 0);
693                        else if(ostrcmp(child->name, "IMDb-API") == 0)
694                                addmenulist(&mlist, child->name, _(child->name), child->pic, 0, 0);
695//                      else if(ostrcmp(child->name, "TMDb") == 0)
696//                              addmenulist(&mlist, child->name, _(child->name), child->pic, 0, 0);
697                }
698                child = child->next;
699        }
700
701        mbox = menulistbox(mlist, NULL, skintitle, _("Choose your Red-Menu entry from the following list"), NULL, NULL, 1, 0);
702        if(mbox != NULL)
703        {
704                if(ostrcmp(mbox->name, "Video Settings") == 0)
705                        screenvideosettings();
706                else if(ostrcmp(mbox->name, "AV Settings") == 0)
707                        screenavsettings(0);
708                else if(ostrcmp(mbox->name, "IMDb") == 0)
709                        imdb_submenu(file, 0);
710                else if(ostrcmp(mbox->name, "IMDb-API") == 0)
711                        imdb_submenu(file, 1);
712                else if(ostrcmp(mbox->name, "TMDb") == 0)
713                        imdb_submenu(file, 2);
714                else if(ostrcmp(mbox->name, "iD3Tag Info") == 0)
715                        id3tag_info(file);
716                else if(ostrcmp(mbox->name, "MediaDB Scan Info") == 0)
717                        get_mediadb_scan_info();
718                else if(ostrcmp(mbox->name, "MediaDB Edit") == 0)
719                        screenmediadbedit(file, 0, 0);
720                else if(ostrcmp(mbox->name, "Delete File") == 0)
721                {
722                        playcheckdirrcret(file, 1);
723                        ret = 7;
724                }
725                else if(ostrcmp(mbox->name, "Downloads") == 0)
726                        screenbgdownload(1);
727                else if(ostrcmp(mbox->name, "Search on KinoX") == 0)
728                        ret = 2;
729                else if(ostrcmp(mbox->name, "Search on KinoX (local)") == 0)
730                        ret = 8;
731                else if(ostrcmp(mbox->name, "Search on Solarmovies (movie)") == 0)
732                        ret = 3;
733                else if(ostrcmp(mbox->name, "Search on Solarmovies (serie)") == 0)
734                        ret = 4;
735                else if(ostrcmp(mbox->name, "Search on Solarmovies (local)") == 0)
736                        ret = 9;
737                else if(ostrcmp(mbox->name, "Search on Youtube") == 0)
738                        ret = 5;
739                else if(ostrcmp(mbox->name, "Search on Youtube (local)") == 0)
740                        ret = 10;
741                else if(ostrcmp(mbox->name, "Search on MyVideo") == 0)
742                        ret = 6;
743                else if(ostrcmp(mbox->name, "Search on MyVideo (local)") == 0)
744                        ret = 11;
745                else if(ostrcmp(mbox->name, "Search on Movie4k") == 0)
746                        ret = 7;
747                else if(ostrcmp(mbox->name, "Search on Movie4k (local)") == 0)
748                        ret = 12;
749                else if(ostrcmp(mbox->name, "Search on InternetRadio (local)") == 0)
750                        ret = 13;
751                else if(ostrcmp(mbox->name, "Search on InternetTv (local)") == 0)
752                        ret = 14;
753                else if(ostrcmp(mbox->name, "Search on ARD (local)") == 0)
754                        ret = 15;
755                else if(ostrcmp(mbox->name, "Search on ZDF (local)") == 0)
756                        ret = 16;
757                else if(ostrcmp(mbox->name, "Search on TecTime (local)") == 0)
758                        ret = 17;
759                else if(ostrcmp(mbox->name, "Search on Giga (local)") == 0)
760                        ret = 18;
761                else if(ostrcmp(mbox->name, "Search on Beeg (local)") == 0)
762                        ret = 19;
763                else if(ostrcmp(mbox->name, "Search on Rtl2-Now (local)") == 0)
764                        ret = 20;
765                else if(ostrcmp(mbox->name, "Search on Rtl-Now (local)") == 0)
766                        ret = 21;
767                else if(ostrcmp(mbox->name, "Search on SuperRTL-Now (local)") == 0)
768                        ret = 22;
769                else if(ostrcmp(mbox->name, "Search on VOX-Now (local)") == 0)
770                        ret = 23;
771                else if(ostrcmp(mbox->name, "Search on Xvideos (local)") == 0)
772                        ret = 24;
773                else if(ostrcmp(mbox->name, "Search on Mle-HD (local)") == 0)
774                        ret = 25;
775                else if(ostrcmp(mbox->name, "Search on Netzkino (local)") == 0)
776                        ret = 26;
777                else if(ostrcmp(mbox->name, "Search on FilmOn (local)") == 0)
778                        ret = 27;
779                else if(ostrcmp(mbox->name, "Search on RtlNitro-Now (local)") == 0)
780                        ret = 28;
781                else if(ostrcmp(mbox->name, "Search on NTV-Now (local)") == 0)
782                        ret = 29;
783                else if(ostrcmp(mbox->name, "Downloads") == 0)
784                {
785                        if(status.play == 1)
786                                screenbgdownload(1);
787                        else
788                                screenbgdownload(0);
789                }                       
790                else
791                {
792                        pluginnode = getplugin(mbox->name);
793
794                        if(pluginnode != NULL)
795                        {
796                                startplugin = dlsym(pluginnode->pluginhandle, "start");
797                                if(startplugin != NULL)
798                                        startplugin();
799                        }
800                }
801        }
802
803        freemenulist(mlist, 1); mlist = NULL;
804        drawscreen(skin, 0, 0);
805        resettvpic();
806        if(playinfobarstatus > 0 &&     status.play == 1)
807                screenplayinfobar(file, showname, 0, playertype, flag);
808
809        status.hangtime = hangtime;
810        return ret;
811}
812
813void playrcinfo(char* file, char* showname, int* playinfobarstatus, int* playinfobarcount, int playertype, int flag)
814{
815        if(checkbit(status.playercan, 14) == 0) return;
816
817        if(*playinfobarstatus == 0)
818        {
819                *playinfobarstatus = 1;
820                *playinfobarcount = 0;
821                screenplayinfobar(file, showname, 0, playertype, flag);
822        }
823        else if(*playinfobarstatus == 1)
824        {
825                *playinfobarstatus = 0;
826                screenplayinfobar(NULL, NULL, 1, playertype, flag);
827        }
828}
829
830void playrcstop(int playertype, int flag)
831{
832        if(checkbit(status.playercan, 6) == 0) return;
833
834        free(status.playfile); status.playfile = NULL;
835       
836        if(playertype == 1)
837                playerstopts(0, 0);
838        else if(playertype == 2)
839                dvdstop();
840        else
841                playerstop();
842
843        writevfdmenu("Player");
844        screenplayinfobar(NULL, NULL, 1, playertype, flag);
845}
846
847//type 0: only from play
848//type 1: only from pause
849void playrcsf(char* file, char* showname, int* playinfobarstatus, int* playinfobarcount, int playertype, int type, int flag)
850{
851        if(checkbit(status.playercan, 15) == 0) return;
852
853        if(status.playspeed == 0 && ((type == 0 && status.pause == 0) || (type == 1 && status.pause == 1)))
854        {
855                status.slowspeed++;
856                if(status.slowspeed > 6) status.slowspeed = 6;
857                if(status.slowspeed > 0)
858                {
859                        status.play = 0;
860
861                        if(playertype == 1)
862                                playerslowts((int)pow(2, status.slowspeed));
863                        else if(playertype == 0)
864                                playerslow(status.playspeed);
865                        *playinfobarstatus = 2;
866                        *playinfobarcount = 0;
867                        screenplayinfobar(file, showname, 0, playertype, flag);
868                }
869                if(status.slowspeed == 0)
870                {
871                        status.pause = 0;
872                        status.play = 1;
873                        if(playertype == 1)
874                        {
875                                playerpausets();
876                                audioclearbuffer(status.aktservice->audiodev);
877                                playercontinuets();
878                                playerresetts();
879                        }
880                        else if(playertype == 2)
881                                dvdcontinue();
882                        else
883                                playercontinue();
884                        *playinfobarstatus = 1;
885                        *playinfobarcount = 0;
886                        screenplayinfobar(file, showname, 0, playertype, flag);
887                }
888        }
889}
890
891//type 0: only from play
892//type 1: only from pause
893void playrcsr(char* file, char* showname, int* playinfobarstatus, int* playinfobarcount, int playertype, int type, int flag)
894{
895        if(checkbit(status.playercan, 15) == 0) return;
896
897        if(status.playspeed == 0 && ((type == 0 && status.pause == 0) || (type == 1 && status.pause == 1)))
898        {
899                status.slowspeed--;
900                if(status.slowspeed < 0) status.slowspeed = 0;
901                if(status.slowspeed > 0)
902                {
903                        status.play = 0;
904                        if(playertype == 1)
905                                playerslowts((int)pow(2, status.slowspeed));
906                        else if(playertype == 0)
907                                playerslowts(status.slowspeed);
908                        *playinfobarstatus = 2;
909                        *playinfobarcount = 0;
910                        screenplayinfobar(file, showname, 0, playertype, flag);
911                }
912                if(status.slowspeed == 0)
913                {
914                        status.pause = 0;
915                        status.play = 1;
916                        if(playertype == 1)
917                        {
918                                playerpausets();
919                                audioclearbuffer(status.aktservice->audiodev);
920                                playercontinuets();
921                                playerresetts();
922                        }
923                        else if(playertype == 2)
924                                dvdcontinue();
925                        else
926                                playercontinue();
927                        *playinfobarstatus = 1;
928                        *playinfobarcount = 0;
929                        screenplayinfobar(file, showname, 0, playertype, flag);
930                }
931        }
932}
933
934void playrcff(char* file, char* showname, int* playinfobarstatus, int* playinfobarcount, int playertype, int flag)
935{
936        if(status.pause == 1)
937        {
938                playrcsf(file, showname, playinfobarstatus, playinfobarcount, playertype, 1, flag);
939                return;
940        }
941
942        if(checkbit(status.playercan, 7) == 0) return;
943
944        if(status.pause == 0 && status.slowspeed == 0)
945        {
946                status.playspeed++;
947                if(status.playspeed > 6) status.playspeed = 6;
948                if(status.playspeed > 0)
949                {
950                        status.play = 0;
951                        if(playertype == 1)
952                                playerffts((int)pow(2, status.playspeed));
953                        else if(playertype == 2)
954                                dvdff(status.playspeed);
955                        else   
956                                playerff(status.playspeed);
957                        *playinfobarstatus = 2;
958                        *playinfobarcount = 0;
959                        screenplayinfobar(file, showname, 0, playertype, flag);
960                }
961                if(status.playspeed < 0)
962                {
963                        status.play = 0;
964                        if(playertype == 1)
965                                playerfrts((int)(pow(2, status.playspeed * -1) * -1), 0);
966                        else if(playertype == 2)
967                                dvdfr(status.playspeed);
968                        else
969                                playerfr(status.playspeed);
970                        *playinfobarstatus = 2;
971                        *playinfobarcount = 0;
972                        screenplayinfobar(file, showname, 0, playertype, flag);
973                }
974                if(status.playspeed == 0)
975                {
976                        status.play = 1;
977                        if(playertype == 1)
978                        {
979                                playerpausets();
980                                playercontinuets();
981                                playerresetts();
982                        }
983                        else if(playertype == 2)
984                                dvdcontinue();
985                        else
986                                playercontinue();
987                        *playinfobarstatus = 1;
988                        *playinfobarcount = 0;
989                        screenplayinfobar(file, showname, 0, playertype, flag);
990                }
991        }
992}
993
994void playrcfr(char* file, char* showname, int* playinfobarstatus, int* playinfobarcount, int playertype, int flag)
995{
996        if(status.pause == 1)
997        {
998                playrcsr(file, showname, playinfobarstatus, playinfobarcount, playertype, 1, flag);
999                return;
1000        }
1001       
1002        if(checkbit(status.playercan, 8) == 0) return;
1003
1004        if(status.pause == 0 && status.slowspeed == 0)
1005        {
1006                status.playspeed--;
1007                if(status.playspeed < -6) status.playspeed = -6;
1008                if(status.playspeed > 0)
1009                {
1010                        status.play = 0;
1011                        if(playertype == 1)
1012                                playerffts((int)pow(2, status.playspeed));
1013                        else if(playertype == 2)
1014                                dvdff(status.playspeed);
1015                        else
1016                                playerff(status.playspeed);
1017                        *playinfobarstatus = 2;
1018                        *playinfobarcount = 0;
1019                        screenplayinfobar(file, showname, 0, playertype, flag);
1020                }
1021                if(status.playspeed < 0)
1022                {
1023                        status.play = 0;
1024                        if(playertype == 1)
1025                                playerfrts((int)(pow(2, status.playspeed * -1) * -1), 0);
1026                        else if(playertype == 2)
1027                                dvdfr(status.playspeed);
1028                        else
1029                                playerfr(status.playspeed);
1030                        *playinfobarstatus = 2;
1031                        *playinfobarcount = 0;
1032                        screenplayinfobar(file, showname, 0, playertype, flag);
1033                }
1034                if(status.playspeed == 0)
1035                {
1036                        status.play = 1;
1037                        if(playertype == 1)
1038                        {
1039                                playerpausets();
1040                                playercontinuets();
1041                                playerresetts();
1042                        }
1043                        else if(playertype == 2)
1044                                dvdcontinue();
1045                        else
1046                                playercontinue();
1047                        *playinfobarstatus = 1;
1048                        *playinfobarcount = 0;
1049                        screenplayinfobar(file, showname, 0, playertype, flag);
1050                }
1051        }
1052}
1053
1054void playrcpause(char* file, char* showname, int* playinfobarstatus, int* playinfobarcount, int playertype, int flag)
1055{
1056        if(status.playspeed != 0 || status.slowspeed != 0)
1057        {
1058                playrcplay(file, showname, playinfobarstatus, playinfobarcount, playertype, flag);
1059                return;
1060        }
1061       
1062        if(checkbit(status.playercan, 9) == 0) return;
1063
1064        if(status.pause == 1)
1065        {
1066                if(playertype == 1)
1067                {
1068                        playercontinuets();
1069                }
1070                else if(playertype == 2)
1071                        dvdcontinue();
1072                else
1073                        playercontinue();
1074                status.slowspeed = 0;
1075                status.playspeed = 0;
1076                status.play = 1;
1077                status.pause = 0;
1078                *playinfobarstatus = 1;
1079                *playinfobarcount = 0;
1080                screenplayinfobar(file, showname, 0, playertype, flag);
1081        }
1082        else
1083        {
1084                status.slowspeed = 0;
1085                status.playspeed = 0;
1086                status.play = 0;
1087                status.pause = 1;
1088                if(playertype == 1)
1089                        playerpausets();
1090                else if(playertype == 2)
1091                        dvdpause();
1092                else
1093                        playerpause();
1094                *playinfobarstatus = 2;
1095                *playinfobarcount = 0;
1096                screenplayinfobar(file, showname, 0, playertype, flag);
1097        }
1098}
1099
1100void playrcplay(char* file, char* showname, int* playinfobarstatus, int* playinfobarcount, int playertype, int flag)
1101{
1102        if(checkbit(status.playercan, 10) == 0) return;
1103
1104        free(status.playfile); status.playfile = NULL;
1105        status.playfile = ostrcat(file, NULL, 0, 0);
1106
1107        if(playertype == 1)
1108        {
1109                if(status.playspeed != 0 || status.slowspeed != 0)
1110                        playerpausets();
1111                if(status.slowspeed != 0)
1112                        audioclearbuffer(status.aktservice->audiodev);
1113                playercontinuets();
1114                if(status.playspeed != 0 || status.slowspeed != 0)
1115                        playerresetts();
1116        }
1117        else if(playertype == 2)
1118                dvdcontinue();
1119        else
1120                playercontinue();
1121        status.slowspeed = 0;
1122        status.playspeed = 0;
1123        status.pause = 0;
1124        status.play = 1;
1125        *playinfobarstatus = 1;
1126        *playinfobarcount = 0;
1127        screenplayinfobar(file, showname, 0, playertype, flag);
1128}
1129
1130void playrcjumpr(char* file, char* showname, int sec, int* playinfobarstatus, int* playinfobarcount, int playertype, int flag)
1131{
1132//      if(checkbit(status.playercan, 11) == 0) return;
1133
1134        unsigned long long pos = 0;
1135       
1136        if(status.pause == 0 && status.playspeed == 0 && status.slowspeed == 0)
1137        {
1138                struct skin* load = getscreen("loading");
1139                drawscreen(load, 0, 0);
1140               
1141                //a jump over the beginning of the
1142                //file, freez the player (type 0)
1143                if(playertype == 1)
1144                        playerseekts(getservice(RECORDPLAY, 0), sec * -1, 0);
1145                else if(playertype == 2)
1146                        pos = dvdgetpts() / 90000;
1147                else
1148                        pos = playergetpts() / 90000;
1149       
1150                if(playertype != 1)
1151                {
1152                        if(pos + 10 > sec)
1153                        {
1154                                if(playertype == 2)
1155                                        dvdseek(sec * -1);
1156                                else
1157                                        playerseek(sec * -1);
1158                        }
1159                        else
1160                        {
1161                                if(playertype == 2)
1162                                {
1163                                        dvdstop();
1164                                        dvdstart(file);
1165                                }
1166                                else
1167                                {
1168                                        playerstop();
1169                                        playerstart(file);
1170                                }
1171                        }
1172                }
1173
1174                *playinfobarstatus = 1;
1175                *playinfobarcount = 0;
1176                //status.play = 0;
1177                clearscreen(load);
1178                screenplayinfobar(file, showname, 0, playertype, flag);
1179                //status.play = 1;
1180                sleep(1);
1181        }
1182}
1183
1184void playrcjumpto(char* file, char* showname, int* playinfobarstatus, int* playinfobarcount, int playertype, int flag)
1185{
1186        if(status.pause == 0 && status.playspeed == 0 && status.slowspeed == 0)
1187        {
1188                char* tmpstr = numinput(_("Jump To (min)"), NULL, "000", 0);
1189                if(tmpstr != NULL)
1190                {
1191                        int jump = atoi(tmpstr) * 60;
1192                        playrcjumpf(file, showname, jump, playinfobarstatus, playinfobarcount, playertype, flag);
1193                }
1194                free(tmpstr), tmpstr = NULL;
1195        }
1196}
1197
1198void playrcjumpf(char* file, char* showname, int sec, int* playinfobarstatus, int* playinfobarcount, int playertype, int flag)
1199{
1200//      if(checkbit(status.playercan, 12) == 0) return;
1201
1202        if(status.pause == 0 && status.playspeed == 0 && status.slowspeed == 0)
1203        {
1204                struct skin* load = getscreen("loading");
1205                drawscreen(load, 0, 0);
1206               
1207                if(playertype == 1)
1208                        playerseekts(getservice(RECORDPLAY, 0), sec, 0);
1209                else if(playertype == 2)
1210                        dvdseek(sec);
1211                else
1212                        playerseek(sec);
1213                *playinfobarstatus = 1;
1214                *playinfobarcount = 0;
1215                //status.play = 0;
1216                clearscreen(load);
1217                screenplayinfobar(file, showname, 0, playertype, flag);
1218                //status.play = 1;
1219        }
1220}
1221
1222void playchangecodec(int playertype)
1223{
1224        if(checkbit(status.playercan, 13) == 0) return;
1225
1226        char** tracklist = NULL;
1227
1228        if(getconfigint("av_ac3default", NULL) == 1)
1229        {
1230                int i = 0;
1231               
1232                tracklist = playergettracklist(1);
1233                if(tracklist != NULL)
1234                {
1235                        while(tracklist[i] != NULL)
1236                        {
1237                                if(ostrcmp(tracklist[i + 1], "A_AC3") == 0)
1238                                {
1239                                        playerchangeaudiotrack(i / 2);
1240                                }
1241                                i += 2;
1242                        }
1243                }
1244                playerfreetracklist(tracklist);
1245                tracklist = NULL;
1246        }
1247}
1248
1249int playcheckdirrcret(char* file, int dirrcret)
1250{
1251        int ret = 0;
1252        char* epgfilename = NULL, *tmpstr = NULL;
1253
1254        if(dirrcret == 4)
1255        {
1256                int sort = screendirsort();
1257                addconfigint("dirsort", sort);
1258                ret = 1;
1259        }
1260        if(dirrcret == 3)
1261        {
1262                epgfilename = changefilenameext(file, ".epg");
1263
1264                tmpstr = readfiletomem(epgfilename, 0);
1265                if(tmpstr != NULL)
1266                        textbox(_("EPG Info"), tmpstr, _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 800, 600, 0, 2);
1267                else {
1268                        free(epgfilename); epgfilename = NULL;
1269                        epgfilename = changefilenameext(file, ".eit");
1270                        tmpstr = readeittomem(epgfilename);
1271                        if(tmpstr != NULL)
1272                                textbox(_("EPG Info"), tmpstr, _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 800, 600, 0, 2);
1273                }
1274                free(epgfilename); epgfilename = NULL;
1275                free(tmpstr); tmpstr = NULL;
1276                ret = 1;
1277        }
1278        if(dirrcret == 1)
1279        {
1280                if(getservicebyrecname(file, 0, 0) != NULL)
1281                        textbox(_("Message"), _("Record in progress"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 1000, 200, 0, 0);
1282                else if(textbox(_("Really Delete ?"), file, _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 1000, 200, 0, 0) == 1)
1283                {
1284                        unlink(file);
1285                        epgfilename = changefilenameext(file, ".epg");
1286                        unlink(epgfilename);
1287                        free(epgfilename); epgfilename = NULL;
1288                        epgfilename = changefilenameext(file, ".se");
1289                        unlink(epgfilename);
1290                        free(epgfilename); epgfilename = NULL;
1291                        epgfilename = changefilenameext(file, ".ma");
1292                        unlink(epgfilename);
1293                        free(epgfilename); epgfilename = NULL;
1294                        epgfilename = changefilenameext(file, ".as");
1295                        unlink(epgfilename);
1296                        free(epgfilename); epgfilename = NULL;
1297                }
1298                ret = 1;
1299        }
1300       
1301        return ret;
1302}
1303
1304void playwritevfd(char* file, char* showname)
1305{
1306        char* tmpstr = NULL;
1307
1308        if(showname == NULL)
1309        {
1310                tmpstr = ostrcat(file, NULL, 0, 0);
1311                if(tmpstr != NULL) writevfdmenu(basename(tmpstr));
1312                free(tmpstr); tmpstr = NULL;
1313        }
1314        else
1315                writevfdmenu(showname);
1316}
1317
1318
1319void playstartservice()
1320{
1321        char* tmpstr = NULL;
1322
1323        if(status.aktservice->channel != NULL)
1324        {
1325                tmpstr = ostrcat(status.aktservice->channellist, NULL, 0, 0);
1326                servicecheckret(servicestart(status.aktservice->channel, tmpstr, NULL, 3), 0);
1327        }
1328        else
1329        {
1330                tmpstr = ostrcat(status.lastservice->channellist, NULL, 0, 0);
1331                servicecheckret(servicestart(status.lastservice->channel, tmpstr, NULL, 0), 0);
1332        }
1333        free(tmpstr); tmpstr = NULL;
1334}
1335
1336// flag 0 = dirlist/playing/infobar
1337// flag 1 = playing/infobar
1338// flag 2 = playing
1339// flag 3 = not stop/start live service
1340// flag 4 = playing with screensaver
1341// startfolder 2 = do nothing with playstop/playstart
1342int screenplay(char* startfile, char* showname, int startfolder, int flag)
1343{
1344        int rcret = 0, playertype = 0, ret = 0, rcwait = 1000, screensaver_delay = 0, holdselection = 0, waitofbuffer = 0;
1345        char* file = NULL, *tmpstr = NULL, *tmpstr1 = NULL;
1346        char* tmppolicy = NULL, *startdir = NULL;
1347        char* formats = NULL;
1348        struct channel* pipchannel = NULL;
1349        struct skin* playinfobar = getscreen("playinfobar");
1350        struct skin* sprogress = getscreennode(playinfobar, "progress");
1351        struct skin* load = getscreen("loading");
1352
1353        int oldsort = getconfigint("dirsort", NULL);
1354        int skip13 = getconfigint("skip13", NULL);
1355        int skip46 = getconfigint("skip46", NULL);
1356        int skip79 = getconfigint("skip79", NULL);
1357
1358        if(startfolder == 0 && flag != 3)
1359        {
1360                rcret = servicestop(status.aktservice, 1, 1);
1361                if(rcret == 1) return ret;
1362        }
1363
1364        if(status.webplayfile != NULL)
1365        {
1366                startfile = status.webplayfile;
1367                rcret = servicestop(status.aktservice, 1, 1);
1368                if(rcret == 1) return ret;
1369        }
1370
1371        // allowed from atemio avi mkv mpg4 xvid mpg1 mpg2 jpeg png
1372        if(startfolder == 1)
1373                formats = ostrcat(formats, ".ts", 1, 0);
1374        else if(file_exist("/mnt/swapextensions/etc/.codecpack") || file_exist("/var/swap/etc/.codecpack") || file_exist("/var/etc/.codecpack"))
1375                formats = ostrcat(formats, ".flac .ogg .mp3 .avi .dat .divx .flv .mkv .m4v .mp4 .mov .mpg .mpeg .mts .m2ts .trp .ts .vdr .vob .wmv .rm", 1, 0);
1376        else
1377                formats = ostrcat(formats, ".avi .mkv .mpg .mpeg .ts .mp3 .flac .ogg", 1, 0);
1378
1379       
1380        status.updatevfd = PAUSE;
1381        tmppolicy = getpolicy();
1382
1383playerstart:
1384        //reset timeline
1385        sprogress->progresssize = 0;
1386
1387        if(startfolder == 0)
1388                startdir = getconfig("rec_moviepath", NULL);
1389        else
1390                startdir = getconfig("rec_path", NULL);
1391
1392        status.playspeed = 0, status.play = 0, status.pause = 0, status.slowspeed = 0;
1393        int playinfobarcount = 0, playinfobarstatus = 1, dirrcret = 0;
1394
1395        if(startfile == NULL)
1396        {
1397                readmediadb(getconfig("mediadbfile", NULL), 0, 0);
1398
1399                tmpstr = ostrcat(file, NULL, 0, 0);
1400                char* tmpstartdir = startdir;
1401                if(file != NULL)
1402                {
1403                        tmpstr1 = ostrcat(file, NULL, 0, 0);
1404                        startdir = dirname(tmpstr1);
1405                }
1406                free(file); file = NULL;
1407                file = screendirreal(startdir, formats, basename(tmpstr), &dirrcret, ".epg", _("DEL"), getrcconfigint("rcred", NULL), _("SELECT"), 0, _("EPG"), getrcconfigint("rcyellow", NULL), _("SORT"), getrcconfigint("rcblue", NULL), 90, 1, 90, 1, holdselection, 64);
1408                holdselection = 0;
1409                free(tmpstr); tmpstr = NULL;
1410                free(tmpstr1); tmpstr1 = NULL;
1411                startdir = tmpstartdir;
1412        }
1413        else
1414                file = ostrcat(startfile, NULL, 0, 0);
1415
1416        if(file == NULL)
1417        {
1418                if(playcheckdirrcret(file, dirrcret) == 1)
1419                        goto playerstart;
1420        }
1421
1422        if(file != NULL)
1423        {
1424                //if(getconfigint("playertype", NULL) == 1 && cmpfilenameext(file, ".ts") == 0)
1425                if(cmpfilenameext(file, ".ts") == 0)
1426                        playertype = 1;
1427
1428                if(startfile == NULL)
1429                {
1430                        tmpstr = ostrcat(file, NULL, 0, 0);
1431                        if(tmpstr != NULL && startfolder == 0) addconfig("rec_moviepath", dirname(tmpstr));
1432                        free(tmpstr); tmpstr = NULL;
1433               
1434                        if(playcheckdirrcret(file, dirrcret) == 1)
1435                        {
1436                                if(dirrcret == 1) holdselection = 1;
1437                                goto playerstart;
1438                        }
1439
1440                        if(startfolder == 1 && flag != 3)
1441                        {
1442                                rcret = servicestop(status.aktservice, 1, 1);
1443                                if(rcret == 1)
1444                                {
1445                                        free(tmppolicy);
1446                                        free(file);
1447                                        free(formats);
1448                                        addconfigint("dirsort", oldsort);
1449                                        return ret;
1450                                }
1451                        }
1452                }
1453
1454                drawscreen(skin, 0, 0);
1455                drawscreen(load, 0, 0);
1456                playwritevfd(file, showname);
1457                if(playertype == 1)
1458                        rcret = playerstartts(file, 0);
1459                else if(playertype == 2)
1460                        rcret = playerstart(file);
1461                else
1462                {
1463#ifdef EPLAYER3
1464                        if(ostrstr(file, "http://") == file)
1465                        {
1466                                struct stimerthread* bufferstatus = addtimer(&screenplaybufferstatus, START, 1000, 1, NULL, NULL, NULL);
1467                                rcret = playerstart(file);
1468                                if(bufferstatus != NULL && gettimer(bufferstatus) != NULL)
1469                                {
1470                                        bufferstatus->aktion = STOP;
1471                                        usleep(100000);
1472                                }
1473                        }
1474                        else
1475                                rcret = playerstart(file);
1476#else
1477                        rcret = playerstart(file);
1478#endif
1479                }
1480#ifndef SIMULATE
1481                if(rcret != 0)
1482                {
1483                        textbox(_("Message"), _("Can't start playback !"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 7, 0);
1484                        writevfdmenu("Player");
1485                       
1486                        if(startfile == NULL)
1487                        {
1488                                if(startfolder == 1 && flag != 3) playstartservice();
1489                                goto playerstart;
1490                        }
1491                        else
1492                        {
1493                                ret = 2;
1494                                goto playerend;
1495                        }
1496                }
1497#endif
1498                clearscreen(load);
1499                if(status.prefillbuffer == 0)
1500                        screenplayinfobar(file, showname, 0, playertype, flag);
1501                else
1502                        waitofbuffer = 1;
1503               
1504                if(flag == 4 && getconfigint("screensaver", NULL) == 1)
1505                {
1506                        screensaver_delay = getconfigint("screensaver_delay", NULL);
1507                        initscreensaver();
1508                }                                                               
1509               
1510                //change codec if ac3default and video has ac3
1511                //deaktivate, freeze player, makes a seek -5
1512                //see eplayer container_ffmpeg_switch_audio
1513                //the seek to the beginning of the file freez
1514                //eplayer.
1515                //playchangecodec();
1516                free(status.playfile); status.playfile = NULL;
1517                status.playfile = ostrcat(file, NULL, 0, 0);
1518                status.play = 1;
1519                int count = 0;
1520                while(1)
1521                {
1522                        while((playertype == 0 && playerisplaying()) || (playertype == 1 && playerisplayingts()))
1523                        {
1524                                rcret = waitrc(playinfobar, rcwait, 0);
1525                                playinfobarcount++;
1526                                if(playinfobarstatus > 0)
1527                                        screenplayinfobar(file, showname, 0, playertype, flag);
1528                                if(playinfobarstatus == 1 && playinfobarcount >= getconfigint("infobartimeout", NULL))
1529                                {
1530                                        playinfobarstatus = 0;
1531                                        screenplayinfobar(NULL, NULL, 1, playertype, flag);
1532                                }
1533                               
1534                                if(waitofbuffer == 1 && status.prefillbuffer == 0)
1535                                {
1536                                        screenplayinfobar(file, showname, 0, playertype, flag);
1537                                        waitofbuffer = 0;
1538                                }
1539
1540                                if(flag == 4)
1541                                {
1542                                        if(status.play == 1 && screensaver != NULL)
1543                                                count++;
1544       
1545                                        if(count > screensaver_delay && screensaver != NULL)
1546                                        {
1547                                                showscreensaver();
1548                                                rcwait = screensaver->speed;
1549                                        }
1550                                }
1551               
1552                                if(rcret == getrcconfigint("rcpip", NULL))
1553                                {
1554                                        if(status.pipservice->videodev == NULL)
1555                                        {
1556                                                pipchannel = status.lastservice->channel;
1557                                                printf("++++ RC: %i\n",pipstart(pipchannel, NULL, 0));
1558                                        }
1559                                        else
1560                                        {
1561                                                pipstop(status.pipservice, 0);
1562                                                pipchannel = NULL;
1563                                        }
1564                                }                               
1565                               
1566                                if(rcret == getrcconfigint("rcyellow", NULL))
1567                                        playrcyellow(file, showname, playinfobarstatus, playertype, flag);
1568                               
1569                                if(rcret == getrcconfigint("rctext", NULL) || rcret == getrcconfigint("rcsubtitel", NULL))
1570                                        playrctext(file, showname, playinfobarstatus, playertype, flag);
1571                                       
1572                                if(rcret == getrcconfigint("rcgreen", NULL))
1573                                        playrcgreen(file, showname, playinfobarstatus, playertype, flag);
1574                                       
1575                                if(rcret == getrcconfigint("rcblue", NULL))
1576                                        playrcblue(file, showname, playinfobarstatus, playertype, flag);
1577                                       
1578                                if(rcret == getrcconfigint("rcok", NULL))
1579                                        playrcok(file, showname, playinfobarstatus, playertype, flag);
1580                               
1581                                if(rcret == getrcconfigint("rcred", NULL))
1582                                        playrcred(file, showname, playinfobarstatus, playertype, flag);
1583
1584                                if(rcret == getrcconfigint("rcinfo", NULL))
1585                                        playrcinfo(file, showname, &playinfobarstatus, &playinfobarcount, playertype, flag);
1586                               
1587                                if(rcret == getrcconfigint("rcstop", NULL) || rcret == getrcconfigint("rcexit", NULL))
1588                                {
1589                                        if(status.prefillbuffer == 1)
1590                                        {
1591                                                status.prefillbuffer = 2;
1592                                                continue;
1593                                        }
1594                                        playrcstop(playertype, flag);
1595                                        if(startfile == NULL)
1596                                        {                                               
1597                                                if(startfolder == 1 && flag != 3) playstartservice();
1598                                                goto playerstart;
1599                                        }
1600                                        else
1601                                        {
1602                                                ret = 1;
1603                                                goto playerend;
1604                                        }
1605                                }
1606                               
1607                                if(rcret == getrcconfigint("rcsf", NULL))
1608                                        playrcsf(file, showname, &playinfobarstatus, &playinfobarcount, playertype, 0, flag);
1609         
1610                        if(rcret == getrcconfigint("rcsr", NULL))
1611                                        playrcsr(file, showname, &playinfobarstatus, &playinfobarcount, playertype, 0, flag);
1612
1613                                if(rcret == getrcconfigint("rcff", NULL))
1614                                        playrcff(file, showname, &playinfobarstatus, &playinfobarcount, playertype, flag);
1615                               
1616                                if(rcret == getrcconfigint("rcfr", NULL))
1617                                        playrcfr(file, showname, &playinfobarstatus, &playinfobarcount, playertype, flag);
1618
1619                                if(rcret == getrcconfigint("rcpause", NULL) || ((checkbox("ATEMIO520") == 1 || checkbox("ATEMIO530") == 1) && rcret == getrcconfigint("rcplay", NULL) && status.pause == 0 && status.slowspeed == 0 && status.playspeed == 0 && ostrcmp(getconfig("remotecontrol", NULL), "0") == 0))
1620                                {       
1621                                        playrcpause(file, showname, &playinfobarstatus, &playinfobarcount, playertype, flag);
1622                                        continue;
1623                                }
1624
1625                                if(rcret == getrcconfigint("rcplay", NULL))
1626                                        playrcplay(file, showname, &playinfobarstatus, &playinfobarcount, playertype, flag);
1627
1628                                if(rcret == getrcconfigint("rcleft", NULL))
1629                                        playrcjumpr(file, showname, 60, &playinfobarstatus, &playinfobarcount, playertype, flag);
1630                               
1631                                if(rcret == getrcconfigint("rc1", NULL))
1632                                        playrcjumpr(file, showname, skip13, &playinfobarstatus, &playinfobarcount, playertype, flag);
1633                               
1634                                if(rcret == getrcconfigint("rc4", NULL))
1635                                        playrcjumpr(file, showname, skip46, &playinfobarstatus, &playinfobarcount, playertype, flag);
1636                               
1637                                if(rcret == getrcconfigint("rc7", NULL))
1638                                        playrcjumpr(file, showname, skip79, &playinfobarstatus, &playinfobarcount, playertype, flag);
1639
1640                                if(rcret == getrcconfigint("rc2", NULL))
1641                                        playrcjumpto(file, showname, &playinfobarstatus, &playinfobarcount, playertype, flag);
1642                               
1643                                if(rcret == getrcconfigint("rcright", NULL))
1644                                        playrcjumpf(file, showname, 60, &playinfobarstatus, &playinfobarcount, playertype, flag);
1645                               
1646                                if(rcret == getrcconfigint("rc3", NULL))
1647                                        playrcjumpf(file, showname, skip13, &playinfobarstatus, &playinfobarcount, playertype, flag);
1648                               
1649                                if(rcret == getrcconfigint("rc6", NULL))
1650                                        playrcjumpf(file, showname, skip46, &playinfobarstatus, &playinfobarcount, playertype, flag);
1651                               
1652                                if(rcret == getrcconfigint("rc9", NULL))
1653                                        playrcjumpf(file, showname, skip79, &playinfobarstatus, &playinfobarcount, playertype, flag);
1654
1655                                if(rcret == getrcconfigint("rcdown", NULL))
1656                                        playrcjumpr(file, showname, 300, &playinfobarstatus, &playinfobarcount, playertype, flag);
1657
1658                                if(rcret == getrcconfigint("rcup", NULL))
1659                                        playrcjumpf(file, showname, 300, &playinfobarstatus, &playinfobarcount, playertype, flag);
1660                               
1661                                if(rcret == getrcconfigint("rc0", NULL))
1662                                        setmarker();
1663                                       
1664                                if(rcret == getrcconfigint("rc5", NULL))
1665                                        screenmarker(file, showname, &playinfobarstatus, &playinfobarcount, playertype, flag);
1666                               
1667                                if(rcret == getrcconfigint("rcmenu", NULL)) {
1668                                        char* asfile = changefilenameext(file, ".as");
1669                                        if(status.autoseek == 0) {
1670                                                status.autoseek = 1;
1671                                                textbox(_("Message"), _("Marker autoseek is started"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 10, 0);
1672                                                addtimer(&markerautoseek_thread, START, 10000, 1, NULL, NULL, NULL);
1673                                                FILE* testseek = fopen(asfile, "w");
1674                                                if(testseek != NULL)
1675                                                {
1676                                                        fprintf(testseek,"autoseek is started\n");
1677                                                        fclose(testseek);
1678                                                }
1679                                        }
1680                                        else {
1681                                                status.autoseek = 0;
1682                                                textbox(_("Message"), _("Marker autoseek is stopped"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 10, 0);
1683                                                unlink(asfile);
1684                                        }
1685                                        free(asfile); asfile = NULL;
1686                                }
1687                        }
1688                        //don't change this sleep, without this
1689                        //the player stops to fast, and a last seek can
1690                        //produce a segfault
1691playerend:
1692                        sleep(1);
1693                        if(playertype == 1)
1694                                playerafterendts();
1695                        else
1696                                playerafterend();
1697
1698                        writevfdmenu("Player");
1699                        screenplayinfobar(file, showname, 1, playertype, flag);
1700
1701                        if(startfile == NULL)
1702                        {
1703                                if(startfolder == 1 && flag != 3) playstartservice();
1704                                goto playerstart;
1705                        }
1706                        else
1707                                break;
1708                }
1709        }
1710        if(startfolder == 0 && flag != 3) playstartservice();
1711        status.updatevfd = START;
1712       
1713        if(status.webplayfile != NULL)
1714        {
1715                playstartservice();
1716                free(status.webplayfile); status.webplayfile = NULL;
1717        }
1718
1719        if(tmppolicy != NULL)
1720        {
1721                setpolicy(tmppolicy);
1722                free(tmppolicy);
1723        }
1724       
1725        if(flag == 4)
1726                deinitscreensaver();
1727
1728        addconfigint("dirsort", oldsort);
1729        free(status.playfile); status.playfile = NULL;
1730        status.slowspeed = 0;
1731        status.playspeed = 0;
1732        status.pause = 0;
1733        status.play = 0;
1734        free(file);
1735        free(formats);
1736
1737        if(status.mediadbthread == NULL)
1738        {
1739                if(status.writemediadb == 1)
1740                        writemediadb(getconfig("mediadbfile", NULL), NULL);
1741                freemediadb(0);
1742        }
1743
1744        return ret;
1745}
1746
1747#endif
Note: See TracBrowser for help on using the repository browser.