source: titan/titan/dvdplayer.h @ 14980

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

cleanup

File size: 17.0 KB
Line 
1#ifndef DVDPLAYER_H
2#define DVDPLAYER_H
3
4#ifdef DVDPLAYER
5struct ddvd *ddvdconfig = NULL;
6struct ddvd_resume resumeinfo;
7struct stimerthread* dvdtimerthread = NULL;
8struct fb* dvdskinfb = NULL;
9int tv_aspect = DDVD_16_9;
10int tv_policy = DDVD_PAN_SCAN;
11int tv_policy2 = DDVD_PAN_SCAN;
12char* tv_videomode = NULL;
13int dvdmenu = 0;
14#endif
15
16int dvd_calc_y_fbscreen()
17{
18        int y_offset = 0;
19        int dvd_aspect = 0;
20
21#ifdef DVDPLAYER
22        //0=4:3 2=16:9
23        dvd_aspect = ddvd_get_dvd_aspect(ddvdconfig);
24
25        if(dvd_aspect == 0 && tv_policy == DDVD_PAN_SCAN)
26        {
27                switch(tv_aspect)
28                {
29                        case DDVD_16_10:
30                                y_offset = -(dvdskinfb->height * 15 / 12 - dvdskinfb->height) / 2;
31                                break;
32                        case DDVD_16_9:
33                                y_offset = (dvdskinfb->height * 3 / 4 - dvdskinfb->height) / 2;
34                                break;
35                }
36        }
37
38        if(dvd_aspect >= 2 && tv_aspect == DDVD_4_3 && tv_policy == DDVD_LETTERBOX)
39                y_offset = (fb->height - fb->height * 3 / 4) / 2;
40
41        if(dvd_aspect >= 2 && tv_aspect == DDVD_16_10 && tv_policy2 == DDVD_LETTERBOX)
42                y_offset = (fb->height - fb->height * 15 / 16) / 2;
43
44
45#endif
46        return y_offset;
47}
48
49int dvd_calc_x_fbscreen()
50{
51        int x_offset = 0;
52        int dvd_aspect = 0;
53
54#ifdef DVDPLAYER
55        //0=4:3 2=16:9
56        dvd_aspect = ddvd_get_dvd_aspect(ddvdconfig);
57
58        if(dvd_aspect == 0 && tv_policy == DDVD_LETTERBOX)
59        {
60                switch(tv_aspect)
61                {
62                        case DDVD_16_10:
63                                x_offset = (fb->width - fb->width * 12 / 15) / 2;
64                                break;
65                        case DDVD_16_9:
66                                x_offset = (fb->width - fb->width * 3 / 4) / 2;
67                                break;
68                }
69        }
70
71        if(dvd_aspect >= 2 && tv_aspect == DDVD_4_3 && tv_policy == DDVD_PAN_SCAN)
72                x_offset = (dvdskinfb->width * 3 / 4 - dvdskinfb->width) / 2;
73
74        if(dvd_aspect >= 2 && tv_aspect == DDVD_16_10 && tv_policy2 == DDVD_PAN_SCAN)
75                x_offset = (dvdskinfb->width * 15 / 16 - dvdskinfb->width) / 2;
76
77#endif
78        return x_offset;
79}
80
81int dvdblit()
82{
83#ifdef DVDPLAYER
84        int x_offset = dvd_calc_x_fbscreen();
85        int y_offset = dvd_calc_y_fbscreen();
86
87        m_lock(&status.drawingmutex, 0);
88
89        int leftoffset = getconfigint("fbleftoffset", NULL);
90        int rightoffset = getconfigint("fbrightoffset", NULL);
91        int topoffset = getconfigint("fbtopoffset", NULL);
92        int bottomoffset = getconfigint("fbbottomoffset", NULL);
93
94        if(leftoffset != 0) addconfigint("fbleftoffset", 0);
95        if(rightoffset != 0) addconfigint("fbrightoffset", 0);
96        if(topoffset != 0) addconfigint("fbtopoffset", 0);
97        if(bottomoffset != 0) addconfigint("fbbottomoffset", 0);
98
99        unsigned char* fb = dvdskinfb->fb;
100        int width = dvdskinfb->width;
101        int height = dvdskinfb->height;
102
103        if(x_offset > 0)
104        {
105                addconfigint("fbleftoffset", x_offset);
106                addconfigint("fbrightoffset", x_offset);
107        }
108        if(x_offset < 0)
109        {
110                dvdskinfb->fb -= x_offset * dvdskinfb->colbytes;
111                dvdskinfb->width += (x_offset * 2);
112        }
113        if(y_offset > 0)
114        {
115                addconfigint("fbtopoffset", y_offset);
116                addconfigint("fbbottomoffset", y_offset);
117        }
118        if(y_offset < 0)
119        {
120                dvdskinfb->fb -= y_offset * dvdskinfb->pitch;
121                dvdskinfb->height += (y_offset * 2);
122        }
123
124        blitfb2(dvdskinfb, 0);
125
126        if(x_offset < 0)
127        {
128                dvdskinfb->fb = fb;
129                dvdskinfb->width = width;
130        }
131        if(y_offset < 0)
132        {
133                dvdskinfb->fb = fb;
134                dvdskinfb->height = height;
135        }
136
137        addconfigint("fbleftoffset", leftoffset);
138        addconfigint("fbrightoffset", rightoffset);
139        addconfigint("fbtopoffset", topoffset);
140        addconfigint("fbbottomoffset", bottomoffset);
141
142        m_unlock(&status.drawingmutex, 0);
143#endif
144
145        return 0;
146}
147
148void dvdchangevideo()
149{
150        char* tmpstr = NULL;
151
152        tmpstr = getaspect();
153        if(ostrncmp(tmpstr, "4:3", 3) == 0)
154                tv_aspect = DDVD_4_3;
155        else if(ostrncmp(tmpstr, "16:10", 5) == 0)
156                tv_aspect = DDVD_16_10;
157        else
158                tv_aspect = DDVD_16_9;
159        free(tmpstr); tmpstr = NULL;
160       
161        tmpstr = getpolicy();
162        if(ostrncmp(tmpstr, "bestfit", 7) == 0)
163                tv_policy = DDVD_JUSTSCALE;
164        else if(ostrncmp(tmpstr, "letterbox", 9) == 0)
165                tv_policy = DDVD_LETTERBOX;
166        else
167                tv_policy = DDVD_PAN_SCAN;
168        free(tmpstr); tmpstr = NULL;
169
170        //TODO:
171        //tmpstr = getpolicy2();
172        //if(ostrncmp(tmpstr, "bestfit", 7) == 0)
173        //      tv_policy2 = DDVD_JUSTSCALE;
174        //else if(ostrncmp(tmpstr, "letterbox", 9) == 0)
175        //      tv_policy2 = DDVD_LETTERBOX;
176        //else
177        //      tv_policy2 = DDVD_PANSCAN;
178        //free(tmpstr); tmpstr = NULL;
179        tv_policy2 = tv_policy;
180}
181
182void dvdcleanup()
183{
184#ifdef DVDPLAYER
185        ddvdconfig = NULL;
186        dvdtimerthread = NULL;
187        delfb("dvdskinfb");
188        dvdskinfb = NULL;
189        if(tv_videomode != NULL)
190        {
191                setvideomode(tv_videomode, 0);
192                changefbresolution(tv_videomode);
193                free(tv_videomode); tv_videomode = NULL;
194        }
195#endif
196}
197
198void dvdthread()
199{
200        debug(333, "dvd thread start");
201
202#ifdef DVDPLAYER
203        if(ddvdconfig != NULL)
204        {
205                ddvd_run(ddvdconfig);
206                ddvd_close(ddvdconfig);
207        }
208       
209        dvdcleanup();
210#endif
211
212        debug(333, "dvd thread end");
213}
214
215int dvdstart(char* filename)
216{
217#ifdef DVDPLAYER
218        char* tmpstr = NULL;
219
220        if(ddvdconfig != NULL)
221        {
222                debug(333, "dvdplayer allready running");
223                dvdstop();
224        }
225
226        if(filename == NULL) return 1;
227       
228        status.playercan = 0x7FFF;
229
230        ddvdconfig = ddvd_create();
231        if(ddvdconfig == NULL) return 1;
232       
233        ddvd_set_dvd_path(ddvdconfig, filename);
234        ddvd_set_ac3thru(ddvdconfig, 0);
235
236        tmpstr = ostrcat(getconfig("lang", NULL), NULL, 0, 0);
237        if(tmpstr != NULL && strlen(tmpstr) > 3)
238        {
239                tmpstr += 3;
240                ddvd_set_language(ddvdconfig, tmpstr);
241                tmpstr -= 3;
242        }
243        free(tmpstr); tmpstr = NULL;
244
245        dvdchangevideo();
246
247#ifdef DDVD_SUPPORTS_16_10_SCALING
248        ddvd_set_video_ex(ddvdconfig, tv_aspect, tv_policy, tv_policy2, DDVD_PAL);
249#else
250        ddvd_set_video(ddvdconfig, tv_aspect, tv_policy, DDVD_PAL);
251#warning please update libdreamdvd for 16:10 scaling support!
252#endif
253        if(dvdsetfb() != 0)
254        {
255                ddvd_close(ddvdconfig);
256                ddvdconfig = NULL;
257                err("can't set dvdskinfb");
258                return 1;
259        }
260
261        free(tv_videomode); tv_videomode = NULL;
262        tv_videomode = getvideomode();
263
264        //change videomode if greater 720
265        if(ostrncmp("1080", tv_videomode, 4) == 0)
266        {
267                setvideomode("720p", 0);
268                changefbresolution("720p");
269        }
270        else
271        {
272                free(tv_videomode);
273                tv_videomode = NULL;
274        }
275
276        ddvd_set_spu(ddvdconfig, -1);
277        dvdtimerthread = addtimer(&dvdthread, START, 1000, 1, NULL, NULL, NULL);
278        sleep(1);
279        if(dvdtimerthread != NULL)
280                return 0;
281       
282        dvdcleanup();
283#endif
284        return 1;
285}
286
287int dvdmenuopen()
288{
289        return dvdmenu;
290}
291
292void dvdgotmessage()
293{
294#ifdef DVDPLAYER
295        if(ddvdconfig == NULL) return;
296        switch(ddvd_get_next_message(ddvdconfig, 0))
297        {
298                case DDVD_COLORTABLE_UPDATE:
299                {
300                        debug(333, "DDVD_COLORTABLE_UPDATE");
301/*
302                        struct ddvd_color ctmp[4];
303                        ddvd_get_last_colortable(ddvdconfig, ctmp);
304                        int i = 0;
305                        while (i < 4)
306                        {
307                                rd1[252+i] = ctmp[i].red;
308                                bl1[252+i] = ctmp[i].blue;
309                                gn1[252+i] = ctmp[i].green;
310                                tr1[252+i] = ctmp[i].trans;
311                                i++;
312                        }
313                        if(ioctl(fb, FBIOPUTCMAP, &colormap) == -1)
314                        {
315                                err("FBIOPUTCMAP");
316                                return 1;
317                        }
318*/
319                        debug(333, "no support for 8bpp framebuffer in dvdplayer yet");
320                        break;
321                }
322                case DDVD_SCREEN_UPDATE:
323                {
324                        debug(333, "DVD_SCREEN_UPDATE");
325
326                        if(dvdskinfb != NULL)
327                        {
328                                int x1 = 0, x2 = 0, y1 = 0, y2 = 0;
329                                ddvd_get_last_blit_area(ddvdconfig, &x1, &x2, &y1, &y2);
330                                debug(333, "ddvd blit area: %d %d %d %d", x1, y1, x2, y2);
331                                if(x1 != 0 || x2 != 0 || y1 != 0 || y2 != 0)
332                                        dvdblit();
333                        }
334                        break;
335                }
336                case DDVD_SHOWOSD_STATE_PLAY:
337                {
338                        debug(333, "DVD_SHOWOSD_STATE_PLAY");
339                        //TODO: show play icon
340                        break;
341                }
342                case DDVD_SHOWOSD_STATE_PAUSE:
343                {
344                        debug(333, "DVD_SHOWOSD_STATE_PAUSE");
345                        //TODO: show pause icon
346                        break;
347                }
348                case DDVD_SHOWOSD_STATE_FFWD:
349                {
350                        debug(333, "DVD_SHOWOSD_STATE_FFWD");
351                        //TODO: show ff icon
352                        break;
353                }
354                case DDVD_SHOWOSD_STATE_FBWD:
355                {
356                        debug(333, "DVD_SHOWOSD_STATE_FBWD");
357                        //TODO: show fr icon
358                        break;
359                }
360                case DDVD_SHOWOSD_STRING:
361                {
362                        debug(333, "DVD_SHOWOSD_STRING");
363                        break;
364                }
365                case DDVD_SHOWOSD_AUDIO:
366                {
367                        debug(333, "DVD_SHOWOSD_STRING");
368                        //TODO: show audio osd
369                        break;
370                }
371                case DDVD_SHOWOSD_SUBTITLE:
372                {
373                        debug(333, "DVD_SHOWOSD_SUBTITLE");
374                        //TODO: show subtitle osd
375                        break;
376                }
377                case DDVD_EOF_REACHED:
378                {
379                        debug(333, "DVD_EOF_REACHED");
380                        //TODO: eof
381                        break;
382                }
383                case DDVD_SOF_REACHED:
384                {
385                        debug(333, "DVD_SOF_REACHED");
386                        //TODO: sof
387                        break;
388                }
389                case DDVD_SHOWOSD_ANGLE:
390                {
391                        debug(333, "DVD_ANGLE_INFO");
392                        //TODO: angel
393                        break;
394                }
395                case DDVD_SHOWOSD_TIME:
396                {
397                        break;
398                }
399                case DDVD_SHOWOSD_TITLESTRING:
400                {
401//                      ddvd_get_title_string(ddvdconfig, ddvd_titlestring);
402//                      debug(333, "DDVD_SHOWOSD_TITLESTRING: %s", ddvd_titlestring);
403                        break;
404                }
405                case DDVD_MENU_OPENED:
406                {
407                        debug(333, "DVD_MENU_OPENED");
408                        dvdmenu = 1;
409                        break;
410                }
411                case DDVD_MENU_CLOSED:
412                {
413                        debug(333, "DVD_MENU_CLOSED");
414                        dvdmenu = 0;
415                        break;
416                }
417#ifdef DDVD_SUPPORTS_PICTURE_INFO
418                case DDVD_SIZE_CHANGED:
419                {
420                        debug(333, "DVD_SIZE_CHANGED");
421/*
422                        int changed = m_width != -1 && m_height != -1 && m_aspect != -1;
423                        ddvd_get_last_size(ddvdconfig, &m_width, &m_height, &m_aspect);
424*/
425                        break;
426                }
427                case DDVD_PROGRESSIVE_CHANGED:
428                {
429                        debug(333, "DVD_PROGRESSIVE_CHANGED");
430/*
431                        int changed = m_progressive != -1;
432                        ddvd_get_last_progressive(ddvdconfig, &m_progressive);
433*/
434                        break;
435                }
436                case DDVD_FRAMERATE_CHANGED:
437                {
438                        debug(333, "DVD_FRAMERATE_CHANGED");
439/*
440                        int changed = m_framerate != -1;
441                        ddvd_get_last_framerate(m_ddvdconfig, &m_framerate);
442*/
443                        break;
444                }
445#endif
446                default:
447                        break;
448        }
449#endif
450}
451
452int dvdisplaying()
453{
454#ifdef DVDPLAYER
455        if(dvdtimerthread == NULL)
456                return 0;
457#endif
458        return 1;
459}
460
461void dvdafterend()
462{
463}
464
465int dvdstop()
466{
467#ifdef DVDPLAYER
468        debug(333, "dvd stop");
469        int i = 0;
470
471        if(ddvdconfig != NULL)
472        {
473                ddvd_send_key(ddvdconfig, DDVD_KEY_EXIT);
474                while(dvdtimerthread != NULL)
475                {
476                        if(i >= 5) break;
477                        sleep(1);
478                        i++;
479                }
480        }
481#endif
482        return 0;
483}
484
485int dvdgetnumaudiotracks()
486{
487        unsigned int i = 0;
488
489#ifdef DVDPLAYER
490        if(ddvdconfig != NULL)
491                ddvd_get_audio_count(ddvdconfig, &i);
492#endif
493
494        return i;
495}
496
497int dvdgetcuraudiotrack()
498{
499        int audioid = -1;
500
501#ifdef DVDPLAYER
502        int audiotype = 0;
503        uint16_t audiolang = 0;
504
505        if(ddvdconfig != NULL)
506                ddvd_get_last_audio(ddvdconfig, &audioid, &audiolang, &audiotype);
507#endif
508
509        return audioid;
510}
511
512int dvdchangeaudiotrack(unsigned int i)
513{
514#ifdef DVDPLAYER
515        if(ddvdconfig != NULL)
516                ddvd_set_audio(ddvdconfig, i);
517#endif
518
519        return 0;
520}
521
522char* dvdgetaudiotrackinfo(unsigned int audioid)
523{
524        char* tmpstr = NULL;
525
526#ifdef DVDPLAYER
527        int audiotype = 0;
528        uint16_t audiolang;
529
530        if(ddvdconfig == NULL) return NULL;
531
532        ddvd_get_audio_byid(ddvdconfig, audioid, &audiolang, &audiotype);
533
534        char audiostr[3] = {audiolang >> 8, audiolang, 0};
535        tmpstr = ostrcat(tmpstr, audiostr, 1, 0);
536        tmpstr = ostrcat(tmpstr, " (", 1, 0);
537
538        switch(audiotype)
539        {
540                case DDVD_MPEG:
541                        tmpstr = ostrcat(tmpstr, "MPEG", 1, 0);
542                        break;
543                case DDVD_AC3:
544                        tmpstr = ostrcat(tmpstr, "AC3", 1, 0);
545                        break;
546                case DDVD_DTS:
547                        tmpstr = ostrcat(tmpstr, "DTS", 1, 0);
548                        break;
549                case DDVD_LPCM:
550                        tmpstr = ostrcat(tmpstr, "LPCM", 1, 0);
551                        break;
552                default:
553                        tmpstr = ostrcat(tmpstr, "unknown", 1, 0);
554        }
555        tmpstr = ostrcat(tmpstr, ")", 1, 0);
556#endif
557
558        return tmpstr;
559}
560
561int dvdgetnumsputracks()
562{
563        unsigned int i = 0;
564
565#ifdef DVDPLAYER
566        if(ddvdconfig != NULL)
567                ddvd_get_spu_count(ddvdconfig, &i);
568#endif
569
570        return i;
571}
572
573int dvdgetcursputrack()
574{
575        int spuid = -1;
576
577#ifdef DVDPLAYER
578        uint16_t spulang = 0;
579
580        if(ddvdconfig != NULL)
581                ddvd_get_last_spu(ddvdconfig, &spuid, &spulang);
582#endif
583
584        return spuid;
585}
586
587int dvdchangesputrack(unsigned int i)
588{
589#ifdef DVDPLAYER
590        if(ddvdconfig != NULL)
591                ddvd_set_spu(ddvdconfig, i);
592#endif
593
594        return 0;
595}
596
597char* dvdgetsputrackinfo(unsigned int spuid)
598{
599        char* tmpstr = NULL;
600
601#ifdef DVDPLAYER
602        uint16_t spulang;
603
604        if(ddvdconfig == NULL) return NULL;
605
606        ddvd_get_spu_byid(ddvdconfig, spuid, &spulang);
607        char spustr[3] = {spulang >> 8, spulang, 0};
608
609        tmpstr = ostrcat(tmpstr, spustr, 1, 0);
610#endif
611
612        return tmpstr;
613}
614
615int dvdgetangelinfo()
616{
617#ifdef DVDPLAYER
618        int current = 0, num = 0;
619
620        if(ddvdconfig != NULL)
621                ddvd_get_angle_info(ddvdconfig, &current, &num);
622#endif
623
624        return 0;
625}
626
627
628int dvdff(int speed)
629{
630#ifdef DVDPLAYER
631        if(ddvdconfig == NULL) return 1;
632        debug(333, "dvd fastforward (%d)", speed);
633
634        if(speed > 0 && speed <= 64)
635                ddvd_send_key(ddvdconfig, DDVD_KEY_FFWD);
636#endif
637
638        return 0;
639}
640
641int dvdfr(int speed)
642{
643#ifdef DVDPLAYER
644        if(ddvdconfig == NULL) return 1;
645        debug(333, "dvd rewind (%d)", speed);
646
647        if(speed < 0 && speed >= -64)
648                ddvd_send_key(ddvdconfig, DDVD_KEY_FBWD);
649#endif
650
651        return 0;
652}
653
654int dvdpause()
655{
656        debug(333, "dvd pause");
657
658#ifdef DVDPLAYER
659        if(ddvdconfig != NULL)
660                ddvd_send_key(ddvdconfig, DDVD_KEY_PAUSE);
661#endif
662
663        return 0;
664}
665
666int dvdplay()
667{
668        debug(333, "dvd play");
669
670#ifdef DVDPLAYER
671        if(ddvdconfig != NULL)
672                ddvd_send_key(ddvdconfig, DDVD_KEY_PLAY);
673#endif
674
675        return 0;
676}
677
678int dvdcontinue()
679{
680        return dvdplay();
681}
682
683int dvdgetinfo(int flag)
684{
685#ifdef DVDPLAYER
686        if(ddvdconfig == NULL) return 1;
687
688        switch(flag)
689        {
690                case 0: //current chapter
691                {
692                        struct ddvd_time info;
693                        ddvd_get_last_time(ddvdconfig, &info);
694                        return info.pos_chapter;
695                }
696                case 1: //tital chapter
697                {
698                        struct ddvd_time info;
699                        ddvd_get_last_time(ddvdconfig, &info);
700                        return info.end_chapter;
701                }
702                case 2: //current title
703                {
704                        struct ddvd_time info;
705                        ddvd_get_last_time(ddvdconfig, &info);
706                        return info.pos_title;
707                }
708                case 3: //total title
709                {
710                        struct ddvd_time info;
711                        ddvd_get_last_time(ddvdconfig, &info);
712                        return info.end_title;
713                }
714                case 4: //teletext pid
715                {
716                        int spuid = 0;
717                        uint16_t spulang = 0;
718                        ddvd_get_last_spu(ddvdconfig, &spuid, &spulang);
719                        return spuid;
720                }
721        }
722#endif
723        return 0;
724}
725
726int dvdsetfb()
727{
728#ifdef DVDPLAYER
729        int width = 720, height = 576, colbytes = 4;
730
731        if(dvdskinfb == NULL)
732                dvdskinfb = addfb("dvdskinfb", 1001, width, height, colbytes, -1, fb->fb + (fb->width * fb->height * fb->colbytes), width * height * colbytes);
733
734        if(dvdskinfb == NULL) return 1;
735        if(ddvdconfig == NULL) return 1;
736//#ifdef DDVD_SUPPORTS_GET_BLIT_DESTINATION
737        ddvd_set_lfb_ex(ddvdconfig, dvdskinfb->fb, dvdskinfb->width, dvdskinfb->height, dvdskinfb->colbytes, dvdskinfb->pitch, 1);
738//#else
739//      ddvd_set_lfb(ddvdconfig, dvdskinfb->fb, dvdskinfb->width, dvdskinfb->height, dvdskinfb->colbytes, dvdskinfb->pitch);
740//#warning please update libdreamdvd for fast scaling
741//#endif
742#endif
743        return 0;
744}
745
746unsigned long long int dvdgetlength()
747{
748        unsigned long long int len = 0;
749
750#ifdef DVDPLAYER
751        struct ddvd_time info;
752
753        if(ddvdconfig != NULL)
754        {
755                ddvd_get_last_time(ddvdconfig, &info);
756
757                len = info.end_hours * 3600;
758                len += info.end_minutes * 60;
759                len += info.end_seconds;
760        }
761#endif
762
763        return len;
764}
765
766int dvdsetresume()
767{
768#ifdef DVDPLAYER
769        if(ddvdconfig != NULL)
770        {
771                debug(333, "title=%d, chapter=%d, block=%lu, audioid=%d, audiolock=%d, spuid=%d, spulock=%d", resumeinfo.title, resumeinfo.chapter, resumeinfo.block, resumeinfo.audio_id, resumeinfo.audio_lock, resumeinfo.spu_id, resumeinfo.spu_lock);
772                ddvd_set_resume_pos(ddvdconfig, resumeinfo);
773        }
774#endif
775        return 0;
776}
777
778int dvdgetresume()
779{
780#ifdef DVDPLAYER
781        if(ddvdconfig != NULL)
782        {
783                ddvd_get_resume_pos(ddvdconfig, &resumeinfo);
784                debug(333, "title=%d, chapter=%d, block=%lu, audioid=%d, audiolock=%d, spuid=%d, spulock=%d", resumeinfo.title, resumeinfo.chapter, resumeinfo.block, resumeinfo.audio_id, resumeinfo.audio_lock, resumeinfo.spu_id, resumeinfo.spu_lock);
785        }
786#endif
787        return 0;
788}
789
790int dvdseek(int sec)
791{
792#ifdef DVDPLAYER
793        if(ddvdconfig != NULL)
794        {
795                debug(333, "seek sec=%d", sec);
796                ddvd_skip_seconds(ddvdconfig, sec);
797        }
798#endif
799        return 0;
800}
801
802unsigned long long int dvdgetpts()
803{
804        unsigned long long int pts = 0;
805
806#ifdef DVDPLAYER
807        struct ddvd_time info;
808
809        if(ddvdconfig != NULL)
810        {
811                ddvd_get_last_time(ddvdconfig, &info);
812
813                pts = info.pos_hours * 3600;
814                pts += info.pos_minutes * 60;
815                pts += info.pos_seconds;
816                pts *= 90000;
817        }
818#endif
819
820        return pts;
821}
822
823int dvdseektitle(int title)
824{
825        debug(333, "seek title %d", title);
826
827#ifdef DVDPLAYER
828        if(ddvdconfig != NULL)
829                ddvd_set_title(ddvdconfig, title);
830#endif
831
832        return 0;
833}
834
835int dvdseekchapter(int chapter)
836{
837        debug(333, "seek chapter %d", chapter);
838
839#ifdef DVDPLAYER
840        if(chapter > 0 && ddvdconfig != NULL)
841                ddvd_set_chapter(ddvdconfig, chapter);
842#endif
843
844        return 0;
845}
846
847int dvdkeypress(int key)
848{
849#ifdef DVDPLAYER
850        if(ddvdconfig == NULL) return 1;
851
852        if(key == getrcconfigint("rcleft", NULL))
853                ddvd_send_key(ddvdconfig, DDVD_KEY_LEFT);
854        if(key == getrcconfigint("rcright", NULL))
855                ddvd_send_key(ddvdconfig, DDVD_KEY_RIGHT);
856        if(key == getrcconfigint("rcup", NULL))
857                ddvd_send_key(ddvdconfig, DDVD_KEY_UP);
858        if(key == getrcconfigint("rcdown", NULL))
859                ddvd_send_key(ddvdconfig, DDVD_KEY_DOWN);
860        if(key == getrcconfigint("rcok", NULL))
861                ddvd_send_key(ddvdconfig, DDVD_KEY_OK);
862        if(key == getrcconfigint("rcyellow", NULL))
863                ddvd_send_key(ddvdconfig, DDVD_KEY_AUDIO);
864        if(key == getrcconfigint("rctext", NULL) || key == getrcconfigint("rcsubtitel", NULL))
865                ddvd_send_key(ddvdconfig, DDVD_KEY_SUBTITLE);
866        if(key == getrcconfigint("rcyellow", NULL))
867                ddvd_send_key(ddvdconfig, DDVD_KEY_AUDIOMENU);
868        if(key == getrcconfigint("rcnext", NULL))
869                ddvd_send_key(ddvdconfig, DDVD_KEY_NEXT_CHAPTER);
870        if(key == getrcconfigint("rcprev", NULL))
871                ddvd_send_key(ddvdconfig, DDVD_KEY_PREV_CHAPTER);
872        if(key == getrcconfigint("rcchup", NULL))
873                ddvd_send_key(ddvdconfig, DDVD_KEY_NEXT_TITLE);
874        if(key == getrcconfigint("rcchdown", NULL))
875                ddvd_send_key(ddvdconfig, DDVD_KEY_PREV_TITLE);
876        if(key == getrcconfigint("rcmenu", NULL))
877                ddvd_send_key(ddvdconfig, DDVD_KEY_MENU);
878        if(key == getrcconfigint("rcblue", NULL))
879                ddvd_send_key(ddvdconfig, DDVD_KEY_ANGLE);
880#endif
881
882        return 0;
883}
884
885#endif
Note: See TracBrowser for help on using the repository browser.