source: titan/titan/dvdplayer.h @ 45557

Last change on this file since 45557 was 36560, checked in by gost, 8 years ago

[titan] BCM accel Step3

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