source: titan/titan/dvdplayer.h @ 15272

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

[titan] optimize

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