annotate stream/stream_dvdnav.c @ 26110:69790f7caffa

configure: Set CONFIG_ENCODERS=yes in config.mak unconditionally config.h already had "#define CONFIG_ENCODERS 1" unconditionally, but the config.mak value depended on whether MEncoder was enabled. Encoders need to be enabled as some encoder code is used by MPlayer too. The inconsistent values broke compilation with --disable-mencoder after libavcodec Makefile made compilation of i386/dsputilenc_mmx.o depend on the config.mak value.
author uau
date Mon, 03 Mar 2008 03:02:36 +0000
parents eff9e1b25743
children 2b6d87a07612
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
19302
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
1 #include "config.h"
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
2
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
3 #include <stdlib.h>
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
4 #include <stdio.h>
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
5 #include <unistd.h>
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
6 #include <string.h>
25031
5e1e61012a05 report why the dvd couldn't be opened. Patch by Jan Knutar jknutar+nic+fi
nicodvb
parents: 25025
diff changeset
7 #include <errno.h>
19302
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
8 #include "mp_msg.h"
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
9 #include "osdep/timer.h"
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
10 #include "input/input.h"
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
11 #include "stream.h"
19312
ab8d6b6deb63 proper inclusion of demuxer.h (including libmpdemux in Makefile only was to make previous split easier)
ben
parents: 19302
diff changeset
12 #include "libmpdemux/demuxer.h"
25539
47f2a9304623 include dvdnav.h from its installation directory rather than appending
nicodvb
parents: 25536
diff changeset
13 #include <dvdnav/dvdnav.h>
19302
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
14 #include "stream_dvdnav.h"
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
15 #include "libvo/video_out.h"
21193
a067e7e18b50 support for dvdnav menu buttons overlay as simple alpha boxes (rework from Otvos Attila's series of patches)
ben
parents: 20851
diff changeset
16 #include "libavutil/common.h"
19302
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
17 #include "spudec.h"
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
18 #include "m_option.h"
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
19 #include "m_struct.h"
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
20 #include "help_mp.h"
25824
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
21 #include "stream_dvd_common.h"
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
22
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
23 /* state flags */
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
24 typedef enum {
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
25 NAV_FLAG_EOF = 1 << 0, /* end of stream has been reached */
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
26 NAV_FLAG_WAIT = 1 << 1, /* wait event */
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
27 NAV_FLAG_WAIT_SKIP = 1 << 2, /* wait skip disable */
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
28 NAV_FLAG_CELL_CHANGED = 1 << 3, /* cell change event */
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
29 NAV_FLAG_WAIT_READ_AUTO = 1 << 4, /* wait read auto mode */
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
30 NAV_FLAG_WAIT_READ = 1 << 5, /* suspend read from stream */
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
31 NAV_FLAG_VTS_DOMAIN = 1 << 6, /* vts domain */
25827
3fc9f549b5d0 remove the spu_set field, replaced by a flag
ben
parents: 25826
diff changeset
32 NAV_FLAG_SPU_SET = 1 << 7, /* spu_clut is valid */
25830
32acf35f74e1 add a new state flag to dvdnav in order to notify if
ben
parents: 25829
diff changeset
33 NAV_FLAG_STREAM_CHANGE = 1 << 8, /* title, chapter, audio or SPU */
25824
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
34 } dvdnav_state_t;
19302
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
35
25536
a7eec00ebb9c private structures belong to the C file using them, not to header files included somewhere else
nicodvb
parents: 25296
diff changeset
36 typedef struct {
a7eec00ebb9c private structures belong to the C file using them, not to header files included somewhere else
nicodvb
parents: 25296
diff changeset
37 dvdnav_t * dvdnav; /* handle to libdvdnav stuff */
a7eec00ebb9c private structures belong to the C file using them, not to header files included somewhere else
nicodvb
parents: 25296
diff changeset
38 char * filename; /* path */
a7eec00ebb9c private structures belong to the C file using them, not to header files included somewhere else
nicodvb
parents: 25296
diff changeset
39 unsigned int duration; /* in milliseconds */
a7eec00ebb9c private structures belong to the C file using them, not to header files included somewhere else
nicodvb
parents: 25296
diff changeset
40 int mousex, mousey;
a7eec00ebb9c private structures belong to the C file using them, not to header files included somewhere else
nicodvb
parents: 25296
diff changeset
41 int title;
25827
3fc9f549b5d0 remove the spu_set field, replaced by a flag
ben
parents: 25826
diff changeset
42 unsigned int spu_clut[16];
25536
a7eec00ebb9c private structures belong to the C file using them, not to header files included somewhere else
nicodvb
parents: 25296
diff changeset
43 dvdnav_highlight_event_t hlev;
25824
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
44 int still_length; /* still frame duration */
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
45 unsigned int state;
25536
a7eec00ebb9c private structures belong to the C file using them, not to header files included somewhere else
nicodvb
parents: 25296
diff changeset
46 } dvdnav_priv_t;
a7eec00ebb9c private structures belong to the C file using them, not to header files included somewhere else
nicodvb
parents: 25296
diff changeset
47
19302
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
48 extern char *dvd_device;
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
49 extern char *audio_lang, *dvdsub_lang;
25196
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
50 extern char *dvd_audio_stream_channels[6], *dvd_audio_stream_types[8];
19302
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
51
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
52 static struct stream_priv_s {
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
53 int track;
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
54 char* device;
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
55 } stream_priv_dflts = {
19764
499e5525d706 if no track number specified play the whole disc, or the menus can't be shown at start
nicodvb
parents: 19477
diff changeset
56 0,
19302
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
57 NULL
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
58 };
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
59
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
60 #define ST_OFF(f) M_ST_OFF(struct stream_priv_s,f)
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
61 /// URL definition
25242
371a40dcc1cc stream_opts arrays should be const
reimar
parents: 25211
diff changeset
62 static const m_option_t stream_opts_fields[] = {
19302
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
63 {"filename", ST_OFF(device), CONF_TYPE_STRING, 0, 0, 0, NULL },
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
64 {"hostname", ST_OFF(track), CONF_TYPE_INT, 0, 0, 0, NULL},
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
65 { NULL, NULL, 0, 0, 0, 0, NULL }
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
66 };
25691
68015115f63a stream_opts should be const
reimar
parents: 25574
diff changeset
67 static const struct m_struct_st stream_opts = {
19302
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
68 "dvd",
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
69 sizeof(struct stream_priv_s),
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
70 &stream_priv_dflts,
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
71 stream_opts_fields
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
72 };
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
73
19892
2c361743ce69 don't seek until dvdnav_get_position() returns something meaningful
nicodvb
parents: 19851
diff changeset
74 static int seek(stream_t *s, off_t newpos);
2c361743ce69 don't seek until dvdnav_get_position() returns something meaningful
nicodvb
parents: 19851
diff changeset
75
19914
dfd1bb3fc7c0 made file-static new_dvdnav_stream() and dvdnav_stream_read()
nicodvb
parents: 19912
diff changeset
76 static dvdnav_priv_t * new_dvdnav_stream(char * filename) {
25819
ecab5c5a5349 type expected by dvdnav_get_title_string() is const
ben
parents: 25818
diff changeset
77 const char * title_str;
20809
ab7e5eb57d52 COSMETICS: renamed dvdnav_priv to priv
nicodvb
parents: 20788
diff changeset
78 dvdnav_priv_t *priv;
19302
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
79
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
80 if (!filename)
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
81 return NULL;
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
82
20809
ab7e5eb57d52 COSMETICS: renamed dvdnav_priv to priv
nicodvb
parents: 20788
diff changeset
83 if (!(priv=calloc(1,sizeof(dvdnav_priv_t))))
19302
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
84 return NULL;
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
85
20809
ab7e5eb57d52 COSMETICS: renamed dvdnav_priv to priv
nicodvb
parents: 20788
diff changeset
86 if (!(priv->filename=strdup(filename))) {
ab7e5eb57d52 COSMETICS: renamed dvdnav_priv to priv
nicodvb
parents: 20788
diff changeset
87 free(priv);
19302
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
88 return NULL;
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
89 }
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
90
20809
ab7e5eb57d52 COSMETICS: renamed dvdnav_priv to priv
nicodvb
parents: 20788
diff changeset
91 if(dvdnav_open(&(priv->dvdnav),priv->filename)!=DVDNAV_STATUS_OK)
19302
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
92 {
20809
ab7e5eb57d52 COSMETICS: renamed dvdnav_priv to priv
nicodvb
parents: 20788
diff changeset
93 free(priv->filename);
ab7e5eb57d52 COSMETICS: renamed dvdnav_priv to priv
nicodvb
parents: 20788
diff changeset
94 free(priv);
19302
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
95 return NULL;
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
96 }
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
97
20809
ab7e5eb57d52 COSMETICS: renamed dvdnav_priv to priv
nicodvb
parents: 20788
diff changeset
98 if (!priv->dvdnav) {
ab7e5eb57d52 COSMETICS: renamed dvdnav_priv to priv
nicodvb
parents: 20788
diff changeset
99 free(priv);
19302
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
100 return NULL;
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
101 }
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
102
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
103 if(1) //from vlc: if not used dvdnav from cvs will fail
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
104 {
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
105 int len, event;
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
106 char buf[2048];
20786
50b5a9e01009 COSMETICS: reformatted this ugly mess in a consistent manner
nicodvb
parents: 20754
diff changeset
107
20809
ab7e5eb57d52 COSMETICS: renamed dvdnav_priv to priv
nicodvb
parents: 20788
diff changeset
108 dvdnav_get_next_block(priv->dvdnav,buf,&event,&len);
ab7e5eb57d52 COSMETICS: renamed dvdnav_priv to priv
nicodvb
parents: 20788
diff changeset
109 dvdnav_sector_search(priv->dvdnav, 0, SEEK_SET);
19302
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
110 }
20786
50b5a9e01009 COSMETICS: reformatted this ugly mess in a consistent manner
nicodvb
parents: 20754
diff changeset
111
19454
b9a62caeb61b corrected _very_ misleading comment
nicodvb
parents: 19453
diff changeset
112 /* turn off dvdnav caching */
20809
ab7e5eb57d52 COSMETICS: renamed dvdnav_priv to priv
nicodvb
parents: 20788
diff changeset
113 dvdnav_set_readahead_flag(priv->dvdnav, 0);
ab7e5eb57d52 COSMETICS: renamed dvdnav_priv to priv
nicodvb
parents: 20788
diff changeset
114 if(dvdnav_set_PGC_positioning_flag(priv->dvdnav, 1) != DVDNAV_STATUS_OK)
19302
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
115 mp_msg(MSGT_OPEN,MSGL_ERR,"stream_dvdnav, failed to set PGC positioning\n");
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
116 #if 1
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
117 /* report the title?! */
20809
ab7e5eb57d52 COSMETICS: renamed dvdnav_priv to priv
nicodvb
parents: 20788
diff changeset
118 if (dvdnav_get_title_string(priv->dvdnav,&title_str)==DVDNAV_STATUS_OK) {
19302
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
119 mp_msg(MSGT_IDENTIFY, MSGL_INFO,"Title: '%s'\n",title_str);
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
120 }
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
121 #endif
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
122
20809
ab7e5eb57d52 COSMETICS: renamed dvdnav_priv to priv
nicodvb
parents: 20788
diff changeset
123 //dvdnav_event_clear(priv);
19302
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
124
20809
ab7e5eb57d52 COSMETICS: renamed dvdnav_priv to priv
nicodvb
parents: 20788
diff changeset
125 return priv;
19302
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
126 }
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
127
21219
8258747951d7 keep nav highlight event in dvdnav priv structure
ben
parents: 21204
diff changeset
128 static void dvdnav_get_highlight (dvdnav_priv_t *priv, int display_mode) {
21193
a067e7e18b50 support for dvdnav menu buttons overlay as simple alpha boxes (rework from Otvos Attila's series of patches)
ben
parents: 20851
diff changeset
129 pci_t *pnavpci = NULL;
21219
8258747951d7 keep nav highlight event in dvdnav priv structure
ben
parents: 21204
diff changeset
130 dvdnav_highlight_event_t *hlev = &(priv->hlev);
8258747951d7 keep nav highlight event in dvdnav priv structure
ben
parents: 21204
diff changeset
131 int btnum;
21198
fbe50a67612a COSMETICS: consistently reformatted after ben's mess
nicodvb
parents: 21197
diff changeset
132
21219
8258747951d7 keep nav highlight event in dvdnav priv structure
ben
parents: 21204
diff changeset
133 if (!priv || !priv->dvdnav)
21193
a067e7e18b50 support for dvdnav menu buttons overlay as simple alpha boxes (rework from Otvos Attila's series of patches)
ben
parents: 20851
diff changeset
134 return;
a067e7e18b50 support for dvdnav menu buttons overlay as simple alpha boxes (rework from Otvos Attila's series of patches)
ben
parents: 20851
diff changeset
135
a067e7e18b50 support for dvdnav menu buttons overlay as simple alpha boxes (rework from Otvos Attila's series of patches)
ben
parents: 20851
diff changeset
136 pnavpci = dvdnav_get_current_nav_pci (priv->dvdnav);
a067e7e18b50 support for dvdnav menu buttons overlay as simple alpha boxes (rework from Otvos Attila's series of patches)
ben
parents: 20851
diff changeset
137 if (!pnavpci)
a067e7e18b50 support for dvdnav menu buttons overlay as simple alpha boxes (rework from Otvos Attila's series of patches)
ben
parents: 20851
diff changeset
138 return;
21198
fbe50a67612a COSMETICS: consistently reformatted after ben's mess
nicodvb
parents: 21197
diff changeset
139
21193
a067e7e18b50 support for dvdnav menu buttons overlay as simple alpha boxes (rework from Otvos Attila's series of patches)
ben
parents: 20851
diff changeset
140 dvdnav_get_current_highlight (priv->dvdnav, &(hlev->buttonN));
a067e7e18b50 support for dvdnav menu buttons overlay as simple alpha boxes (rework from Otvos Attila's series of patches)
ben
parents: 20851
diff changeset
141 hlev->display = display_mode; /* show */
21198
fbe50a67612a COSMETICS: consistently reformatted after ben's mess
nicodvb
parents: 21197
diff changeset
142
21193
a067e7e18b50 support for dvdnav menu buttons overlay as simple alpha boxes (rework from Otvos Attila's series of patches)
ben
parents: 20851
diff changeset
143 if (hlev->buttonN > 0 && pnavpci->hli.hl_gi.btn_ns > 0 && hlev->display) {
a067e7e18b50 support for dvdnav menu buttons overlay as simple alpha boxes (rework from Otvos Attila's series of patches)
ben
parents: 20851
diff changeset
144 for (btnum = 0; btnum < pnavpci->hli.hl_gi.btn_ns; btnum++) {
a067e7e18b50 support for dvdnav menu buttons overlay as simple alpha boxes (rework from Otvos Attila's series of patches)
ben
parents: 20851
diff changeset
145 btni_t *btni = &(pnavpci->hli.btnit[btnum]);
a067e7e18b50 support for dvdnav menu buttons overlay as simple alpha boxes (rework from Otvos Attila's series of patches)
ben
parents: 20851
diff changeset
146
a067e7e18b50 support for dvdnav menu buttons overlay as simple alpha boxes (rework from Otvos Attila's series of patches)
ben
parents: 20851
diff changeset
147 if (hlev->buttonN == btnum + 1) {
a067e7e18b50 support for dvdnav menu buttons overlay as simple alpha boxes (rework from Otvos Attila's series of patches)
ben
parents: 20851
diff changeset
148 hlev->sx = FFMIN (btni->x_start, btni->x_end);
a067e7e18b50 support for dvdnav menu buttons overlay as simple alpha boxes (rework from Otvos Attila's series of patches)
ben
parents: 20851
diff changeset
149 hlev->ex = FFMAX (btni->x_start, btni->x_end);
a067e7e18b50 support for dvdnav menu buttons overlay as simple alpha boxes (rework from Otvos Attila's series of patches)
ben
parents: 20851
diff changeset
150 hlev->sy = FFMIN (btni->y_start, btni->y_end);
a067e7e18b50 support for dvdnav menu buttons overlay as simple alpha boxes (rework from Otvos Attila's series of patches)
ben
parents: 20851
diff changeset
151 hlev->ey = FFMAX (btni->y_start, btni->y_end);
a067e7e18b50 support for dvdnav menu buttons overlay as simple alpha boxes (rework from Otvos Attila's series of patches)
ben
parents: 20851
diff changeset
152
a067e7e18b50 support for dvdnav menu buttons overlay as simple alpha boxes (rework from Otvos Attila's series of patches)
ben
parents: 20851
diff changeset
153 hlev->palette = (btni->btn_coln == 0) ? 0 :
a067e7e18b50 support for dvdnav menu buttons overlay as simple alpha boxes (rework from Otvos Attila's series of patches)
ben
parents: 20851
diff changeset
154 pnavpci->hli.btn_colit.btn_coli[btni->btn_coln - 1][0];
a067e7e18b50 support for dvdnav menu buttons overlay as simple alpha boxes (rework from Otvos Attila's series of patches)
ben
parents: 20851
diff changeset
155 break;
a067e7e18b50 support for dvdnav menu buttons overlay as simple alpha boxes (rework from Otvos Attila's series of patches)
ben
parents: 20851
diff changeset
156 }
a067e7e18b50 support for dvdnav menu buttons overlay as simple alpha boxes (rework from Otvos Attila's series of patches)
ben
parents: 20851
diff changeset
157 }
a067e7e18b50 support for dvdnav menu buttons overlay as simple alpha boxes (rework from Otvos Attila's series of patches)
ben
parents: 20851
diff changeset
158 } else { /* hide button or no button */
a067e7e18b50 support for dvdnav menu buttons overlay as simple alpha boxes (rework from Otvos Attila's series of patches)
ben
parents: 20851
diff changeset
159 hlev->sx = hlev->ex = 0;
a067e7e18b50 support for dvdnav menu buttons overlay as simple alpha boxes (rework from Otvos Attila's series of patches)
ben
parents: 20851
diff changeset
160 hlev->sy = hlev->ey = 0;
a067e7e18b50 support for dvdnav menu buttons overlay as simple alpha boxes (rework from Otvos Attila's series of patches)
ben
parents: 20851
diff changeset
161 hlev->palette = hlev->buttonN = 0;
a067e7e18b50 support for dvdnav menu buttons overlay as simple alpha boxes (rework from Otvos Attila's series of patches)
ben
parents: 20851
diff changeset
162 }
a067e7e18b50 support for dvdnav menu buttons overlay as simple alpha boxes (rework from Otvos Attila's series of patches)
ben
parents: 20851
diff changeset
163 }
a067e7e18b50 support for dvdnav menu buttons overlay as simple alpha boxes (rework from Otvos Attila's series of patches)
ben
parents: 20851
diff changeset
164
25824
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
165 static inline int dvdnav_get_duration (int length) {
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
166 return (length == 255) ? 0 : length * 1000;
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
167 }
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
168
20809
ab7e5eb57d52 COSMETICS: renamed dvdnav_priv to priv
nicodvb
parents: 20788
diff changeset
169 static int dvdnav_stream_read(dvdnav_priv_t * priv, unsigned char *buf, int *len) {
19302
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
170 int event = DVDNAV_NOP;
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
171
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
172 *len=-1;
20809
ab7e5eb57d52 COSMETICS: renamed dvdnav_priv to priv
nicodvb
parents: 20788
diff changeset
173 if (dvdnav_get_next_block(priv->dvdnav,buf,&event,len)!=DVDNAV_STATUS_OK) {
ab7e5eb57d52 COSMETICS: renamed dvdnav_priv to priv
nicodvb
parents: 20788
diff changeset
174 mp_msg(MSGT_OPEN,MSGL_V, "Error getting next block from DVD %d (%s)\n",event, dvdnav_err_to_string(priv->dvdnav) );
19302
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
175 *len=-1;
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
176 }
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
177 else if (event!=DVDNAV_BLOCK_OK) {
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
178 // need to handle certain events internally (like skipping stills)
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
179 switch (event) {
21332
7f53c807d593 feed the content of NAV_PACKET to the demuxer
nicodvb
parents: 21219
diff changeset
180 case DVDNAV_NAV_PACKET:
7f53c807d593 feed the content of NAV_PACKET to the demuxer
nicodvb
parents: 21219
diff changeset
181 return event;
20786
50b5a9e01009 COSMETICS: reformatted this ugly mess in a consistent manner
nicodvb
parents: 20754
diff changeset
182 case DVDNAV_STILL_FRAME: {
25824
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
183 dvdnav_still_event_t *still_event = (dvdnav_still_event_t *) buf;
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
184 priv->still_length = still_event->length;
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
185 /* set still frame duration */
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
186 priv->duration = dvdnav_get_duration (priv->still_length);
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
187 if (priv->still_length <= 1) {
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
188 pci_t *pnavpci = dvdnav_get_current_nav_pci (priv->dvdnav);
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
189 priv->duration = mp_dvdtimetomsec (&pnavpci->pci_gi.e_eltm);
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
190 }
20786
50b5a9e01009 COSMETICS: reformatted this ugly mess in a consistent manner
nicodvb
parents: 20754
diff changeset
191 break;
50b5a9e01009 COSMETICS: reformatted this ugly mess in a consistent manner
nicodvb
parents: 20754
diff changeset
192 }
21193
a067e7e18b50 support for dvdnav menu buttons overlay as simple alpha boxes (rework from Otvos Attila's series of patches)
ben
parents: 20851
diff changeset
193 case DVDNAV_HIGHLIGHT: {
21219
8258747951d7 keep nav highlight event in dvdnav priv structure
ben
parents: 21204
diff changeset
194 dvdnav_get_highlight (priv, 1);
21193
a067e7e18b50 support for dvdnav menu buttons overlay as simple alpha boxes (rework from Otvos Attila's series of patches)
ben
parents: 20851
diff changeset
195 break;
a067e7e18b50 support for dvdnav menu buttons overlay as simple alpha boxes (rework from Otvos Attila's series of patches)
ben
parents: 20851
diff changeset
196 }
20786
50b5a9e01009 COSMETICS: reformatted this ugly mess in a consistent manner
nicodvb
parents: 20754
diff changeset
197 case DVDNAV_CELL_CHANGE: {
19453
087d4a916ea3 implemented STREAM_CTRL_GET_TIME_LENGTH (duration of the pgc playing)
nicodvb
parents: 19452
diff changeset
198 dvdnav_cell_change_event_t *ev = (dvdnav_cell_change_event_t*)buf;
25824
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
199 uint32_t nextstill;
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
200
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
201 priv->state &= ~NAV_FLAG_WAIT_SKIP;
25830
32acf35f74e1 add a new state flag to dvdnav in order to notify if
ben
parents: 25829
diff changeset
202 priv->state |= NAV_FLAG_STREAM_CHANGE;
19453
087d4a916ea3 implemented STREAM_CTRL_GET_TIME_LENGTH (duration of the pgc playing)
nicodvb
parents: 19452
diff changeset
203 if(ev->pgc_length)
20809
ab7e5eb57d52 COSMETICS: renamed dvdnav_priv to priv
nicodvb
parents: 20788
diff changeset
204 priv->duration = ev->pgc_length/90;
25824
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
205
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
206 if (dvdnav_is_domain_vts(priv->dvdnav))
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
207 priv->state &= ~NAV_FLAG_VTS_DOMAIN;
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
208 else
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
209 priv->state |= NAV_FLAG_VTS_DOMAIN;
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
210
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
211 nextstill = dvdnav_get_next_still_flag (priv->dvdnav);
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
212 if (nextstill) {
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
213 priv->duration = dvdnav_get_duration (nextstill);
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
214 priv->still_length = nextstill;
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
215 if (priv->still_length <= 1) {
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
216 pci_t *pnavpci = dvdnav_get_current_nav_pci (priv->dvdnav);
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
217 priv->duration = mp_dvdtimetomsec (&pnavpci->pci_gi.e_eltm);
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
218 }
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
219 }
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
220
19453
087d4a916ea3 implemented STREAM_CTRL_GET_TIME_LENGTH (duration of the pgc playing)
nicodvb
parents: 19452
diff changeset
221 break;
20786
50b5a9e01009 COSMETICS: reformatted this ugly mess in a consistent manner
nicodvb
parents: 20754
diff changeset
222 }
21538
c9b6588932b5 export spu palette; part of a patch by Otvos Attila
nicodvb
parents: 21424
diff changeset
223 case DVDNAV_SPU_CLUT_CHANGE: {
c9b6588932b5 export spu palette; part of a patch by Otvos Attila
nicodvb
parents: 21424
diff changeset
224 memcpy(priv->spu_clut, buf, 16*sizeof(unsigned int));
25827
3fc9f549b5d0 remove the spu_set field, replaced by a flag
ben
parents: 25826
diff changeset
225 priv->state |= NAV_FLAG_SPU_SET;
21538
c9b6588932b5 export spu palette; part of a patch by Otvos Attila
nicodvb
parents: 21424
diff changeset
226 break;
c9b6588932b5 export spu palette; part of a patch by Otvos Attila
nicodvb
parents: 21424
diff changeset
227 }
25824
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
228 case DVDNAV_WAIT: {
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
229 if ((priv->state & NAV_FLAG_WAIT_SKIP) &&
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
230 !(priv->state & NAV_FLAG_WAIT))
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
231 dvdnav_wait_skip (priv->dvdnav);
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
232 else
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
233 priv->state |= NAV_FLAG_WAIT;
19302
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
234 break;
25824
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
235 }
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
236 case DVDNAV_VTS_CHANGE: {
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
237 priv->state &= ~NAV_FLAG_WAIT_SKIP;
25830
32acf35f74e1 add a new state flag to dvdnav in order to notify if
ben
parents: 25829
diff changeset
238 priv->state |= NAV_FLAG_STREAM_CHANGE;
32acf35f74e1 add a new state flag to dvdnav in order to notify if
ben
parents: 25829
diff changeset
239 break;
32acf35f74e1 add a new state flag to dvdnav in order to notify if
ben
parents: 25829
diff changeset
240 }
32acf35f74e1 add a new state flag to dvdnav in order to notify if
ben
parents: 25829
diff changeset
241 case DVDNAV_SPU_STREAM_CHANGE: {
32acf35f74e1 add a new state flag to dvdnav in order to notify if
ben
parents: 25829
diff changeset
242 priv->state |= NAV_FLAG_STREAM_CHANGE;
25824
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
243 break;
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
244 }
19302
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
245 }
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
246
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
247 *len=0;
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
248 }
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
249 return event;
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
250 }
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
251
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
252 static void update_title_len(stream_t *stream) {
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
253 dvdnav_priv_t *priv = stream->priv;
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
254 dvdnav_status_t status;
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
255 uint32_t pos = 0, len = 0;
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
256
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
257 status = dvdnav_get_position(priv->dvdnav, &pos, &len);
19892
2c361743ce69 don't seek until dvdnav_get_position() returns something meaningful
nicodvb
parents: 19851
diff changeset
258 if(status == DVDNAV_STATUS_OK && len) {
19302
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
259 stream->end_pos = (off_t) len * 2048;
19892
2c361743ce69 don't seek until dvdnav_get_position() returns something meaningful
nicodvb
parents: 19851
diff changeset
260 stream->seek = seek;
2c361743ce69 don't seek until dvdnav_get_position() returns something meaningful
nicodvb
parents: 19851
diff changeset
261 } else {
2c361743ce69 don't seek until dvdnav_get_position() returns something meaningful
nicodvb
parents: 19851
diff changeset
262 stream->seek = NULL;
2c361743ce69 don't seek until dvdnav_get_position() returns something meaningful
nicodvb
parents: 19851
diff changeset
263 stream->end_pos = 0;
2c361743ce69 don't seek until dvdnav_get_position() returns something meaningful
nicodvb
parents: 19851
diff changeset
264 }
19302
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
265 }
20786
50b5a9e01009 COSMETICS: reformatted this ugly mess in a consistent manner
nicodvb
parents: 20754
diff changeset
266
19302
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
267
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
268 static int seek(stream_t *s, off_t newpos) {
23990
f57dacd8c419 removed unused variables
nicodvb
parents: 23902
diff changeset
269 uint32_t sector = 0;
20786
50b5a9e01009 COSMETICS: reformatted this ugly mess in a consistent manner
nicodvb
parents: 20754
diff changeset
270 dvdnav_priv_t *priv = s->priv;
19302
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
271
20786
50b5a9e01009 COSMETICS: reformatted this ugly mess in a consistent manner
nicodvb
parents: 20754
diff changeset
272 if(s->end_pos && newpos > s->end_pos)
50b5a9e01009 COSMETICS: reformatted this ugly mess in a consistent manner
nicodvb
parents: 20754
diff changeset
273 newpos = s->end_pos;
50b5a9e01009 COSMETICS: reformatted this ugly mess in a consistent manner
nicodvb
parents: 20754
diff changeset
274 sector = newpos / 2048ULL;
50b5a9e01009 COSMETICS: reformatted this ugly mess in a consistent manner
nicodvb
parents: 20754
diff changeset
275 if(dvdnav_sector_search(priv->dvdnav, (uint64_t) sector, SEEK_SET) != DVDNAV_STATUS_OK)
50b5a9e01009 COSMETICS: reformatted this ugly mess in a consistent manner
nicodvb
parents: 20754
diff changeset
276 goto fail;
19302
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
277
20786
50b5a9e01009 COSMETICS: reformatted this ugly mess in a consistent manner
nicodvb
parents: 20754
diff changeset
278 s->pos = newpos;
50b5a9e01009 COSMETICS: reformatted this ugly mess in a consistent manner
nicodvb
parents: 20754
diff changeset
279
19302
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
280 return 1;
20786
50b5a9e01009 COSMETICS: reformatted this ugly mess in a consistent manner
nicodvb
parents: 20754
diff changeset
281
19302
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
282 fail:
20786
50b5a9e01009 COSMETICS: reformatted this ugly mess in a consistent manner
nicodvb
parents: 20754
diff changeset
283 mp_msg(MSGT_STREAM,MSGL_INFO,"dvdnav_stream, seeking to %"PRIu64" failed: %s\n", newpos, dvdnav_err_to_string(priv->dvdnav));
19302
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
284
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
285 return 1;
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
286 }
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
287
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
288 static void stream_dvdnav_close(stream_t *s) {
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
289 dvdnav_priv_t *priv = s->priv;
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
290 dvdnav_close(priv->dvdnav);
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
291 priv->dvdnav = NULL;
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
292 free(priv);
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
293 }
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
294
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
295
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
296 static int fill_buffer(stream_t *s, char *but, int len)
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
297 {
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
298 int event;
20786
50b5a9e01009 COSMETICS: reformatted this ugly mess in a consistent manner
nicodvb
parents: 20754
diff changeset
299
20809
ab7e5eb57d52 COSMETICS: renamed dvdnav_priv to priv
nicodvb
parents: 20788
diff changeset
300 dvdnav_priv_t* priv=s->priv;
25824
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
301 if (priv->state & NAV_FLAG_WAIT_READ) /* read is suspended */
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
302 return -1;
19302
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
303 len=0;
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
304 if(!s->end_pos)
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
305 update_title_len(s);
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
306 while(!len) /* grab all event until DVDNAV_BLOCK_OK (len=2048), DVDNAV_STOP or DVDNAV_STILL_FRAME */
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
307 {
20810
4d2c03da592c one more deuglification
nicodvb
parents: 20809
diff changeset
308 event=dvdnav_stream_read(priv, s->buffer, &len);
4d2c03da592c one more deuglification
nicodvb
parents: 20809
diff changeset
309 if(event==-1 || len==-1)
20786
50b5a9e01009 COSMETICS: reformatted this ugly mess in a consistent manner
nicodvb
parents: 20754
diff changeset
310 {
50b5a9e01009 COSMETICS: reformatted this ugly mess in a consistent manner
nicodvb
parents: 20754
diff changeset
311 mp_msg(MSGT_CPLAYER,MSGL_ERR, "DVDNAV stream read error!\n");
50b5a9e01009 COSMETICS: reformatted this ugly mess in a consistent manner
nicodvb
parents: 20754
diff changeset
312 return 0;
50b5a9e01009 COSMETICS: reformatted this ugly mess in a consistent manner
nicodvb
parents: 20754
diff changeset
313 }
25825
4c17a62383a4 automatically set spu button highlight when nav cell has changed
ben
parents: 25824
diff changeset
314 if (event != DVDNAV_BLOCK_OK)
4c17a62383a4 automatically set spu button highlight when nav cell has changed
ben
parents: 25824
diff changeset
315 dvdnav_get_highlight (priv, 1);
20786
50b5a9e01009 COSMETICS: reformatted this ugly mess in a consistent manner
nicodvb
parents: 20754
diff changeset
316 switch (event) {
25824
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
317 case DVDNAV_STOP: {
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
318 priv->state |= NAV_FLAG_EOF;
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
319 return len;
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
320 }
21333
9e3860c22d99 cosmetical reformatting
nicodvb
parents: 21332
diff changeset
321 case DVDNAV_BLOCK_OK:
9e3860c22d99 cosmetical reformatting
nicodvb
parents: 21332
diff changeset
322 case DVDNAV_NAV_PACKET:
25824
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
323 case DVDNAV_STILL_FRAME:
21333
9e3860c22d99 cosmetical reformatting
nicodvb
parents: 21332
diff changeset
324 return len;
25824
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
325 case DVDNAV_WAIT: {
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
326 if (priv->state & NAV_FLAG_WAIT)
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
327 return len;
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
328 break;
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
329 }
20786
50b5a9e01009 COSMETICS: reformatted this ugly mess in a consistent manner
nicodvb
parents: 20754
diff changeset
330 case DVDNAV_VTS_CHANGE: {
50b5a9e01009 COSMETICS: reformatted this ugly mess in a consistent manner
nicodvb
parents: 20754
diff changeset
331 int tit = 0, part = 0;
23043
4038852b041e after a DVDNAV_VTS_CHANGE event report the title being played
nicodvb
parents: 22936
diff changeset
332 dvdnav_vts_change_event_t *vts_event = (dvdnav_vts_change_event_t *)s->buffer;
4038852b041e after a DVDNAV_VTS_CHANGE event report the title being played
nicodvb
parents: 22936
diff changeset
333 mp_msg(MSGT_CPLAYER,MSGL_INFO, "DVDNAV, switched to title: %d\r\n", vts_event->new_vtsN);
25824
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
334 priv->state |= NAV_FLAG_CELL_CHANGED;
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
335 priv->state &= ~NAV_FLAG_WAIT_SKIP;
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
336 priv->state &= ~NAV_FLAG_WAIT;
20786
50b5a9e01009 COSMETICS: reformatted this ugly mess in a consistent manner
nicodvb
parents: 20754
diff changeset
337 s->end_pos = 0;
50b5a9e01009 COSMETICS: reformatted this ugly mess in a consistent manner
nicodvb
parents: 20754
diff changeset
338 update_title_len(s);
25824
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
339 if (priv->state & NAV_FLAG_WAIT_READ_AUTO)
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
340 priv->state |= NAV_FLAG_WAIT_READ;
20809
ab7e5eb57d52 COSMETICS: renamed dvdnav_priv to priv
nicodvb
parents: 20788
diff changeset
341 if(dvdnav_current_title_info(priv->dvdnav, &tit, &part) == DVDNAV_STATUS_OK) {
20786
50b5a9e01009 COSMETICS: reformatted this ugly mess in a consistent manner
nicodvb
parents: 20754
diff changeset
342 mp_msg(MSGT_CPLAYER,MSGL_V, "\r\nDVDNAV, NEW TITLE %d\r\n", tit);
21219
8258747951d7 keep nav highlight event in dvdnav priv structure
ben
parents: 21204
diff changeset
343 dvdnav_get_highlight (priv, 0);
20809
ab7e5eb57d52 COSMETICS: renamed dvdnav_priv to priv
nicodvb
parents: 20788
diff changeset
344 if(priv->title > 0 && tit != priv->title)
20786
50b5a9e01009 COSMETICS: reformatted this ugly mess in a consistent manner
nicodvb
parents: 20754
diff changeset
345 return 0;
50b5a9e01009 COSMETICS: reformatted this ugly mess in a consistent manner
nicodvb
parents: 20754
diff changeset
346 }
50b5a9e01009 COSMETICS: reformatted this ugly mess in a consistent manner
nicodvb
parents: 20754
diff changeset
347 break;
19302
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
348 }
20786
50b5a9e01009 COSMETICS: reformatted this ugly mess in a consistent manner
nicodvb
parents: 20754
diff changeset
349 case DVDNAV_CELL_CHANGE: {
25824
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
350 priv->state |= NAV_FLAG_CELL_CHANGED;
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
351 priv->state &= ~NAV_FLAG_WAIT_SKIP;
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
352 priv->state &= ~NAV_FLAG_WAIT;
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
353 if (priv->state & NAV_FLAG_WAIT_READ_AUTO)
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
354 priv->state |= NAV_FLAG_WAIT_READ;
20809
ab7e5eb57d52 COSMETICS: renamed dvdnav_priv to priv
nicodvb
parents: 20788
diff changeset
355 if(priv->title > 0 && dvd_last_chapter > 0) {
20786
50b5a9e01009 COSMETICS: reformatted this ugly mess in a consistent manner
nicodvb
parents: 20754
diff changeset
356 int tit=0, part=0;
20809
ab7e5eb57d52 COSMETICS: renamed dvdnav_priv to priv
nicodvb
parents: 20788
diff changeset
357 if(dvdnav_current_title_info(priv->dvdnav, &tit, &part) == DVDNAV_STATUS_OK && part > dvd_last_chapter)
20786
50b5a9e01009 COSMETICS: reformatted this ugly mess in a consistent manner
nicodvb
parents: 20754
diff changeset
358 return 0;
25826
d8ed72fc61f8 this end brace was not correctly indented
ben
parents: 25825
diff changeset
359 }
25825
4c17a62383a4 automatically set spu button highlight when nav cell has changed
ben
parents: 25824
diff changeset
360 dvdnav_get_highlight (priv, 1);
19302
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
361 }
20786
50b5a9e01009 COSMETICS: reformatted this ugly mess in a consistent manner
nicodvb
parents: 20754
diff changeset
362 break;
50b5a9e01009 COSMETICS: reformatted this ugly mess in a consistent manner
nicodvb
parents: 20754
diff changeset
363 }
19302
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
364 }
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
365 mp_msg(MSGT_STREAM,MSGL_DBG2,"DVDNAV fill_buffer len: %d\n",len);
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
366 return len;
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
367 }
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
368
19443
6e618d1fbb23 implemented seeking to chapter
nicodvb
parents: 19312
diff changeset
369 static int control(stream_t *stream, int cmd, void* arg) {
20809
ab7e5eb57d52 COSMETICS: renamed dvdnav_priv to priv
nicodvb
parents: 20788
diff changeset
370 dvdnav_priv_t* priv=stream->priv;
19443
6e618d1fbb23 implemented seeking to chapter
nicodvb
parents: 19312
diff changeset
371 int tit, part;
6e618d1fbb23 implemented seeking to chapter
nicodvb
parents: 19312
diff changeset
372
6e618d1fbb23 implemented seeking to chapter
nicodvb
parents: 19312
diff changeset
373 switch(cmd)
6e618d1fbb23 implemented seeking to chapter
nicodvb
parents: 19312
diff changeset
374 {
6e618d1fbb23 implemented seeking to chapter
nicodvb
parents: 19312
diff changeset
375 case STREAM_CTRL_SEEK_TO_CHAPTER:
6e618d1fbb23 implemented seeking to chapter
nicodvb
parents: 19312
diff changeset
376 {
6e618d1fbb23 implemented seeking to chapter
nicodvb
parents: 19312
diff changeset
377 int chap = *((unsigned int *)arg)+1;
6e618d1fbb23 implemented seeking to chapter
nicodvb
parents: 19312
diff changeset
378
20809
ab7e5eb57d52 COSMETICS: renamed dvdnav_priv to priv
nicodvb
parents: 20788
diff changeset
379 if(chap < 1 || dvdnav_current_title_info(priv->dvdnav, &tit, &part) != DVDNAV_STATUS_OK)
19443
6e618d1fbb23 implemented seeking to chapter
nicodvb
parents: 19312
diff changeset
380 break;
20809
ab7e5eb57d52 COSMETICS: renamed dvdnav_priv to priv
nicodvb
parents: 20788
diff changeset
381 if(dvdnav_part_play(priv->dvdnav, tit, chap) != DVDNAV_STATUS_OK)
19443
6e618d1fbb23 implemented seeking to chapter
nicodvb
parents: 19312
diff changeset
382 break;
6e618d1fbb23 implemented seeking to chapter
nicodvb
parents: 19312
diff changeset
383 return 1;
6e618d1fbb23 implemented seeking to chapter
nicodvb
parents: 19312
diff changeset
384 }
19477
2a6520a36e96 implemented STREAM_CTRL_GET_NUM_CHAPTERS
nicodvb
parents: 19454
diff changeset
385 case STREAM_CTRL_GET_NUM_CHAPTERS:
2a6520a36e96 implemented STREAM_CTRL_GET_NUM_CHAPTERS
nicodvb
parents: 19454
diff changeset
386 {
20809
ab7e5eb57d52 COSMETICS: renamed dvdnav_priv to priv
nicodvb
parents: 20788
diff changeset
387 if(dvdnav_current_title_info(priv->dvdnav, &tit, &part) != DVDNAV_STATUS_OK)
19477
2a6520a36e96 implemented STREAM_CTRL_GET_NUM_CHAPTERS
nicodvb
parents: 19454
diff changeset
388 break;
20809
ab7e5eb57d52 COSMETICS: renamed dvdnav_priv to priv
nicodvb
parents: 20788
diff changeset
389 if(dvdnav_get_number_of_parts(priv->dvdnav, tit, &part) != DVDNAV_STATUS_OK)
19477
2a6520a36e96 implemented STREAM_CTRL_GET_NUM_CHAPTERS
nicodvb
parents: 19454
diff changeset
390 break;
2a6520a36e96 implemented STREAM_CTRL_GET_NUM_CHAPTERS
nicodvb
parents: 19454
diff changeset
391 if(!part)
2a6520a36e96 implemented STREAM_CTRL_GET_NUM_CHAPTERS
nicodvb
parents: 19454
diff changeset
392 break;
2a6520a36e96 implemented STREAM_CTRL_GET_NUM_CHAPTERS
nicodvb
parents: 19454
diff changeset
393 *((unsigned int *)arg) = part;
2a6520a36e96 implemented STREAM_CTRL_GET_NUM_CHAPTERS
nicodvb
parents: 19454
diff changeset
394 return 1;
2a6520a36e96 implemented STREAM_CTRL_GET_NUM_CHAPTERS
nicodvb
parents: 19454
diff changeset
395 }
19443
6e618d1fbb23 implemented seeking to chapter
nicodvb
parents: 19312
diff changeset
396 case STREAM_CTRL_GET_CURRENT_CHAPTER:
6e618d1fbb23 implemented seeking to chapter
nicodvb
parents: 19312
diff changeset
397 {
20809
ab7e5eb57d52 COSMETICS: renamed dvdnav_priv to priv
nicodvb
parents: 20788
diff changeset
398 if(dvdnav_current_title_info(priv->dvdnav, &tit, &part) != DVDNAV_STATUS_OK)
19443
6e618d1fbb23 implemented seeking to chapter
nicodvb
parents: 19312
diff changeset
399 break;
6e618d1fbb23 implemented seeking to chapter
nicodvb
parents: 19312
diff changeset
400 *((unsigned int *)arg) = part - 1;
6e618d1fbb23 implemented seeking to chapter
nicodvb
parents: 19312
diff changeset
401 return 1;
6e618d1fbb23 implemented seeking to chapter
nicodvb
parents: 19312
diff changeset
402 }
19453
087d4a916ea3 implemented STREAM_CTRL_GET_TIME_LENGTH (duration of the pgc playing)
nicodvb
parents: 19452
diff changeset
403 case STREAM_CTRL_GET_TIME_LENGTH:
087d4a916ea3 implemented STREAM_CTRL_GET_TIME_LENGTH (duration of the pgc playing)
nicodvb
parents: 19452
diff changeset
404 {
25824
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
405 if(priv->duration || priv->still_length)
20786
50b5a9e01009 COSMETICS: reformatted this ugly mess in a consistent manner
nicodvb
parents: 20754
diff changeset
406 {
20851
6602a90a06ec consistency fix: STREAM_CTRL_GET_TIME_LENGTH and STREAM_CTRL_GET_CURRENT_TIME now return time in (double) seconds
nicodvb
parents: 20810
diff changeset
407 *((double *)arg) = (double)priv->duration / 1000.0;
20786
50b5a9e01009 COSMETICS: reformatted this ugly mess in a consistent manner
nicodvb
parents: 20754
diff changeset
408 return 1;
50b5a9e01009 COSMETICS: reformatted this ugly mess in a consistent manner
nicodvb
parents: 20754
diff changeset
409 }
50b5a9e01009 COSMETICS: reformatted this ugly mess in a consistent manner
nicodvb
parents: 20754
diff changeset
410 break;
19453
087d4a916ea3 implemented STREAM_CTRL_GET_TIME_LENGTH (duration of the pgc playing)
nicodvb
parents: 19452
diff changeset
411 }
24303
21d181441aa4 implemented STREAM_CTRL_GET_ASPECT_RATIO
nicodvb
parents: 24257
diff changeset
412 case STREAM_CTRL_GET_ASPECT_RATIO:
21d181441aa4 implemented STREAM_CTRL_GET_ASPECT_RATIO
nicodvb
parents: 24257
diff changeset
413 {
21d181441aa4 implemented STREAM_CTRL_GET_ASPECT_RATIO
nicodvb
parents: 24257
diff changeset
414 uint8_t ar = dvdnav_get_video_aspect(priv->dvdnav);
21d181441aa4 implemented STREAM_CTRL_GET_ASPECT_RATIO
nicodvb
parents: 24257
diff changeset
415 *((double *)arg) = !ar ? 4.0/3.0 : 16.0/9.0;
21d181441aa4 implemented STREAM_CTRL_GET_ASPECT_RATIO
nicodvb
parents: 24257
diff changeset
416 return 1;
21d181441aa4 implemented STREAM_CTRL_GET_ASPECT_RATIO
nicodvb
parents: 24257
diff changeset
417 }
22936
a6486d2975d2 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME - dvdnav from mphq required
nicodvb
parents: 21613
diff changeset
418 case STREAM_CTRL_GET_CURRENT_TIME:
a6486d2975d2 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME - dvdnav from mphq required
nicodvb
parents: 21613
diff changeset
419 {
a6486d2975d2 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME - dvdnav from mphq required
nicodvb
parents: 21613
diff changeset
420 double tm;
a6486d2975d2 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME - dvdnav from mphq required
nicodvb
parents: 21613
diff changeset
421 tm = dvdnav_get_current_time(priv->dvdnav)/90000.0f;
a6486d2975d2 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME - dvdnav from mphq required
nicodvb
parents: 21613
diff changeset
422 if(tm != -1)
a6486d2975d2 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME - dvdnav from mphq required
nicodvb
parents: 21613
diff changeset
423 {
a6486d2975d2 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME - dvdnav from mphq required
nicodvb
parents: 21613
diff changeset
424 *((double *)arg) = tm;
a6486d2975d2 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME - dvdnav from mphq required
nicodvb
parents: 21613
diff changeset
425 return 1;
a6486d2975d2 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME - dvdnav from mphq required
nicodvb
parents: 21613
diff changeset
426 }
a6486d2975d2 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME - dvdnav from mphq required
nicodvb
parents: 21613
diff changeset
427 break;
a6486d2975d2 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME - dvdnav from mphq required
nicodvb
parents: 21613
diff changeset
428 }
a6486d2975d2 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME - dvdnav from mphq required
nicodvb
parents: 21613
diff changeset
429 case STREAM_CTRL_SEEK_TO_TIME:
a6486d2975d2 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME - dvdnav from mphq required
nicodvb
parents: 21613
diff changeset
430 {
a6486d2975d2 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME - dvdnav from mphq required
nicodvb
parents: 21613
diff changeset
431 uint64_t tm = (uint64_t) (*((double*)arg) * 90000);
a6486d2975d2 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME - dvdnav from mphq required
nicodvb
parents: 21613
diff changeset
432 if(dvdnav_time_search(priv->dvdnav, tm) == DVDNAV_STATUS_OK)
a6486d2975d2 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME - dvdnav from mphq required
nicodvb
parents: 21613
diff changeset
433 return 1;
a6486d2975d2 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME - dvdnav from mphq required
nicodvb
parents: 21613
diff changeset
434 break;
a6486d2975d2 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME - dvdnav from mphq required
nicodvb
parents: 21613
diff changeset
435 }
25574
bef7f820d179 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25539
diff changeset
436 case STREAM_CTRL_GET_NUM_ANGLES:
bef7f820d179 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25539
diff changeset
437 {
bef7f820d179 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25539
diff changeset
438 uint32_t curr, angles;
bef7f820d179 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25539
diff changeset
439 if(dvdnav_get_angle_info(priv->dvdnav, &curr, &angles) != DVDNAV_STATUS_OK)
bef7f820d179 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25539
diff changeset
440 break;
bef7f820d179 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25539
diff changeset
441 *((int *)arg) = angles;
bef7f820d179 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25539
diff changeset
442 return 1;
bef7f820d179 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25539
diff changeset
443 }
bef7f820d179 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25539
diff changeset
444 case STREAM_CTRL_GET_ANGLE:
bef7f820d179 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25539
diff changeset
445 {
bef7f820d179 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25539
diff changeset
446 uint32_t curr, angles;
bef7f820d179 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25539
diff changeset
447 if(dvdnav_get_angle_info(priv->dvdnav, &curr, &angles) != DVDNAV_STATUS_OK)
bef7f820d179 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25539
diff changeset
448 break;
bef7f820d179 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25539
diff changeset
449 *((int *)arg) = curr;
bef7f820d179 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25539
diff changeset
450 return 1;
bef7f820d179 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25539
diff changeset
451 }
bef7f820d179 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25539
diff changeset
452 case STREAM_CTRL_SET_ANGLE:
bef7f820d179 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25539
diff changeset
453 {
bef7f820d179 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25539
diff changeset
454 uint32_t curr, angles;
bef7f820d179 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25539
diff changeset
455 int new_angle = *((int *)arg);
bef7f820d179 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25539
diff changeset
456 if(dvdnav_get_angle_info(priv->dvdnav, &curr, &angles) != DVDNAV_STATUS_OK)
bef7f820d179 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25539
diff changeset
457 break;
bef7f820d179 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25539
diff changeset
458 if(new_angle>angles || new_angle<1)
bef7f820d179 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25539
diff changeset
459 break;
bef7f820d179 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25539
diff changeset
460 if(dvdnav_angle_change(priv->dvdnav, new_angle) != DVDNAV_STATUS_OK)
bef7f820d179 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25539
diff changeset
461 return 1;
bef7f820d179 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25539
diff changeset
462 }
19443
6e618d1fbb23 implemented seeking to chapter
nicodvb
parents: 19312
diff changeset
463 }
6e618d1fbb23 implemented seeking to chapter
nicodvb
parents: 19312
diff changeset
464
24257
d261f5109660 cosmetics: typo fix UNSUPORTED --> UNSUPPORTED
diego
parents: 24109
diff changeset
465 return STREAM_UNSUPPORTED;
19443
6e618d1fbb23 implemented seeking to chapter
nicodvb
parents: 19312
diff changeset
466 }
6e618d1fbb23 implemented seeking to chapter
nicodvb
parents: 19312
diff changeset
467
25165
4e57fd666c56 -identify chapters of chosen title
nicodvb
parents: 25031
diff changeset
468 static void identify_chapters(dvdnav_t *nav, uint32_t title)
4e57fd666c56 -identify chapters of chosen title
nicodvb
parents: 25031
diff changeset
469 {
25177
a43d99a80f4a -identify also shows the duration(s) of the title(s)
nicodvb
parents: 25176
diff changeset
470 uint64_t *parts=NULL, duration=0;
25165
4e57fd666c56 -identify chapters of chosen title
nicodvb
parents: 25031
diff changeset
471 uint32_t n, i, t;
25177
a43d99a80f4a -identify also shows the duration(s) of the title(s)
nicodvb
parents: 25176
diff changeset
472 n = dvdnav_describe_title_chapters(nav, title, &parts, &duration);
25165
4e57fd666c56 -identify chapters of chosen title
nicodvb
parents: 25031
diff changeset
473 if(parts) {
25177
a43d99a80f4a -identify also shows the duration(s) of the title(s)
nicodvb
parents: 25176
diff changeset
474 t = duration / 90;
a43d99a80f4a -identify also shows the duration(s) of the title(s)
nicodvb
parents: 25176
diff changeset
475 mp_msg(MSGT_IDENTIFY, MSGL_V, "ID_DVD_TITLE_%d_LENGTH=%d.%03d\n", title, t / 1000, t % 1000);
25167
89b5a20fc346 with -identify show the title being described
nicodvb
parents: 25165
diff changeset
476 mp_msg(MSGT_IDENTIFY, MSGL_INFO, "TITLE %u, CHAPTERS: ", title);
25165
4e57fd666c56 -identify chapters of chosen title
nicodvb
parents: 25031
diff changeset
477 for(i=0; i<n; i++) {
4e57fd666c56 -identify chapters of chosen title
nicodvb
parents: 25031
diff changeset
478 t = parts[i] / 90000;
4e57fd666c56 -identify chapters of chosen title
nicodvb
parents: 25031
diff changeset
479 mp_msg(MSGT_IDENTIFY, MSGL_INFO, "%02d:%02d:%02d,", t/3600, (t/60)%60, t%60);
4e57fd666c56 -identify chapters of chosen title
nicodvb
parents: 25031
diff changeset
480 }
4e57fd666c56 -identify chapters of chosen title
nicodvb
parents: 25031
diff changeset
481 free(parts);
4e57fd666c56 -identify chapters of chosen title
nicodvb
parents: 25031
diff changeset
482 mp_msg(MSGT_IDENTIFY, MSGL_INFO, "\n");
4e57fd666c56 -identify chapters of chosen title
nicodvb
parents: 25031
diff changeset
483 }
4e57fd666c56 -identify chapters of chosen title
nicodvb
parents: 25031
diff changeset
484 }
4e57fd666c56 -identify chapters of chosen title
nicodvb
parents: 25031
diff changeset
485
25176
6d9212e61af8 cosmetics: moved identification code to a separate function
nicodvb
parents: 25168
diff changeset
486 static void identify(dvdnav_priv_t *priv, struct stream_priv_s *p)
6d9212e61af8 cosmetics: moved identification code to a separate function
nicodvb
parents: 25168
diff changeset
487 {
6d9212e61af8 cosmetics: moved identification code to a separate function
nicodvb
parents: 25168
diff changeset
488 uint32_t titles=0, i;
6d9212e61af8 cosmetics: moved identification code to a separate function
nicodvb
parents: 25168
diff changeset
489 if(p->track <= 0) {
6d9212e61af8 cosmetics: moved identification code to a separate function
nicodvb
parents: 25168
diff changeset
490 dvdnav_get_number_of_titles(priv->dvdnav, &titles);
6d9212e61af8 cosmetics: moved identification code to a separate function
nicodvb
parents: 25168
diff changeset
491 for(i=0; i<titles; i++)
6d9212e61af8 cosmetics: moved identification code to a separate function
nicodvb
parents: 25168
diff changeset
492 identify_chapters(priv->dvdnav, i);
6d9212e61af8 cosmetics: moved identification code to a separate function
nicodvb
parents: 25168
diff changeset
493 }
6d9212e61af8 cosmetics: moved identification code to a separate function
nicodvb
parents: 25168
diff changeset
494 else
6d9212e61af8 cosmetics: moved identification code to a separate function
nicodvb
parents: 25168
diff changeset
495 identify_chapters(priv->dvdnav, p->track);
6d9212e61af8 cosmetics: moved identification code to a separate function
nicodvb
parents: 25168
diff changeset
496 }
6d9212e61af8 cosmetics: moved identification code to a separate function
nicodvb
parents: 25168
diff changeset
497
25196
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
498 static void show_audio_subs_languages(dvdnav_t *nav)
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
499 {
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
500 uint8_t lg;
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
501 uint16_t i, lang, format, id, channels;
25820
b43eaaa94dd3 array was defined for 6 elements while 7 were declared
ben
parents: 25819
diff changeset
502 int base[7] = {128, 0, 0, 0, 160, 136, 0};
25196
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
503 char tmp[3];
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
504 for(i=0; i<8; i++)
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
505 {
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
506 lg = dvdnav_get_audio_logical_stream(nav, i);
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
507 if(lg == 0xff) continue;
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
508 channels = dvdnav_audio_stream_channels(nav, lg);
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
509 if(channels == 0xFFFF)
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
510 channels = 2; //unknown
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
511 else
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
512 channels--;
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
513 lang = dvdnav_audio_stream_to_lang(nav, lg);
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
514 if(lang == 0xFFFF)
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
515 tmp[0] = tmp[1] = '?';
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
516 else
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
517 {
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
518 tmp[0] = lang >> 8;
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
519 tmp[1] = lang & 0xFF;
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
520 }
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
521 tmp[2] = 0;
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
522 format = dvdnav_audio_stream_format(nav, lg);
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
523 if(format == 0xFFFF || format > 6)
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
524 format = 1; //unknown
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
525 id = i + base[format];
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
526 mp_msg(MSGT_OPEN,MSGL_STATUS,MSGTR_DVDaudioStreamInfo, i,
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
527 dvd_audio_stream_types[format], dvd_audio_stream_channels[channels], tmp, id);
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
528 }
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
529
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
530 for(i=0; i<32; i++)
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
531 {
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
532 lg = dvdnav_get_spu_logical_stream(nav, i);
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
533 if(lg == 0xff) continue;
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
534 lang = dvdnav_spu_stream_to_lang(nav, lg);
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
535 if(lang == 0xFFFF)
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
536 tmp[0] = tmp[1] = '?';
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
537 else
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
538 {
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
539 tmp[0] = lang >> 8;
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
540 tmp[1] = lang & 0xFF;
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
541 }
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
542 tmp[2] = 0;
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
543 mp_msg(MSGT_OPEN,MSGL_STATUS,MSGTR_DVDsubtitleLanguage, i+0x20, tmp);
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
544 }
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
545 }
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
546
19302
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
547 static int open_s(stream_t *stream,int mode, void* opts, int* file_format) {
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
548 struct stream_priv_s* p = (struct stream_priv_s*)opts;
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
549 char *filename;
20809
ab7e5eb57d52 COSMETICS: renamed dvdnav_priv to priv
nicodvb
parents: 20788
diff changeset
550 dvdnav_priv_t *priv;
19302
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
551
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
552 if(p->device) filename = p->device;
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
553 else if(dvd_device) filename= dvd_device;
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
554 else filename = DEFAULT_DVD_DEVICE;
20809
ab7e5eb57d52 COSMETICS: renamed dvdnav_priv to priv
nicodvb
parents: 20788
diff changeset
555 if(!(priv=new_dvdnav_stream(filename))) {
25031
5e1e61012a05 report why the dvd couldn't be opened. Patch by Jan Knutar jknutar+nic+fi
nicodvb
parents: 25025
diff changeset
556 mp_msg(MSGT_OPEN,MSGL_ERR,MSGTR_CantOpenDVD,filename, strerror(errno));
24257
d261f5109660 cosmetics: typo fix UNSUPORTED --> UNSUPPORTED
diego
parents: 24109
diff changeset
557 return STREAM_UNSUPPORTED;
19302
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
558 }
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
559
19764
499e5525d706 if no track number specified play the whole disc, or the menus can't be shown at start
nicodvb
parents: 19477
diff changeset
560 if(p->track > 0) {
20809
ab7e5eb57d52 COSMETICS: renamed dvdnav_priv to priv
nicodvb
parents: 20788
diff changeset
561 priv->title = p->track;
ab7e5eb57d52 COSMETICS: renamed dvdnav_priv to priv
nicodvb
parents: 20788
diff changeset
562 if(dvdnav_title_play(priv->dvdnav, p->track) != DVDNAV_STATUS_OK) {
ab7e5eb57d52 COSMETICS: renamed dvdnav_priv to priv
nicodvb
parents: 20788
diff changeset
563 mp_msg(MSGT_OPEN,MSGL_FATAL,"dvdnav_stream, couldn't select title %d, error '%s'\n", p->track, dvdnav_err_to_string(priv->dvdnav));
24257
d261f5109660 cosmetics: typo fix UNSUPORTED --> UNSUPPORTED
diego
parents: 24109
diff changeset
564 return STREAM_UNSUPPORTED;
20786
50b5a9e01009 COSMETICS: reformatted this ugly mess in a consistent manner
nicodvb
parents: 20754
diff changeset
565 }
25824
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
566 } else if (p->track == 0) {
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
567 if(dvdnav_menu_call(priv->dvdnav, DVD_MENU_Root) != DVDNAV_STATUS_OK)
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
568 dvdnav_menu_call(priv->dvdnav, DVD_MENU_Title);
19842
a43fa4ad378e at start, when not playing a specific titleset, try to call the Title menu (as is common practice among players)
nicodvb
parents: 19840
diff changeset
569 }
25176
6d9212e61af8 cosmetics: moved identification code to a separate function
nicodvb
parents: 25168
diff changeset
570 if(mp_msg_test(MSGT_IDENTIFY, MSGL_INFO))
6d9212e61af8 cosmetics: moved identification code to a separate function
nicodvb
parents: 25168
diff changeset
571 identify(priv, p);
25196
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
572 if(p->track > 0)
5487d363a9ac at startup show audio and subtitle streams available in the chosen title with all their properties
nicodvb
parents: 25177
diff changeset
573 show_audio_subs_languages(priv->dvdnav);
20754
da4c2344a97c support for -dvdangle
nicodvb
parents: 20409
diff changeset
574 if(dvd_angle > 1)
20809
ab7e5eb57d52 COSMETICS: renamed dvdnav_priv to priv
nicodvb
parents: 20788
diff changeset
575 dvdnav_angle_change(priv->dvdnav, dvd_angle);
19302
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
576
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
577 stream->sector_size = 2048;
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
578 stream->flags = STREAM_READ | STREAM_SEEK;
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
579 stream->fill_buffer = fill_buffer;
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
580 stream->seek = seek;
19443
6e618d1fbb23 implemented seeking to chapter
nicodvb
parents: 19312
diff changeset
581 stream->control = control;
19302
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
582 stream->close = stream_dvdnav_close;
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
583 stream->type = STREAMTYPE_DVDNAV;
20809
ab7e5eb57d52 COSMETICS: renamed dvdnav_priv to priv
nicodvb
parents: 20788
diff changeset
584 stream->priv=(void*)priv;
19302
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
585 *file_format = DEMUXER_TYPE_MPEG_PS;
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
586
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
587 update_title_len(stream);
25824
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
588 if(!stream->pos && p->track > 0)
24109
4565ffb49fda Removed uninitialized variable.
cehoyos
parents: 23991
diff changeset
589 mp_msg(MSGT_OPEN,MSGL_ERR, "INIT ERROR: couldn't get init pos %s\r\n", dvdnav_err_to_string(priv->dvdnav));
20786
50b5a9e01009 COSMETICS: reformatted this ugly mess in a consistent manner
nicodvb
parents: 20754
diff changeset
590
20406
831cd8cbf58a spell fix
nicodvb
parents: 20405
diff changeset
591 mp_msg(MSGT_OPEN,MSGL_INFO, "Remember to disable MPlayer's cache when playing dvdnav:// streams (adding -nocache to your command line)\r\n");
19302
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
592
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
593 return STREAM_OK;
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
594 }
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
595
19768
1069a634fc92 added mp_dvdnav_handle_input to handle user's input (revived from the repository with few changes)
nicodvb
parents: 19764
diff changeset
596
25824
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
597 void mp_dvdnav_handle_input(stream_t *stream, int cmd, int *button) {
25829
c0b5ff39e928 remove useless casts
ben
parents: 25828
diff changeset
598 dvdnav_priv_t * priv = stream->priv;
20809
ab7e5eb57d52 COSMETICS: renamed dvdnav_priv to priv
nicodvb
parents: 20788
diff changeset
599 dvdnav_t *nav = priv->dvdnav;
19908
b6aa47caeb72 §Ænitial button value is -1. Only (button>0) is a correct button selection.
jonas
parents: 19895
diff changeset
600 dvdnav_status_t status=DVDNAV_STATUS_ERR;
19768
1069a634fc92 added mp_dvdnav_handle_input to handle user's input (revived from the repository with few changes)
nicodvb
parents: 19764
diff changeset
601 pci_t *pci = dvdnav_get_current_nav_pci(nav);
1069a634fc92 added mp_dvdnav_handle_input to handle user's input (revived from the repository with few changes)
nicodvb
parents: 19764
diff changeset
602
1069a634fc92 added mp_dvdnav_handle_input to handle user's input (revived from the repository with few changes)
nicodvb
parents: 19764
diff changeset
603 if(cmd != MP_CMD_DVDNAV_SELECT && !pci)
25824
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
604 return;
19768
1069a634fc92 added mp_dvdnav_handle_input to handle user's input (revived from the repository with few changes)
nicodvb
parents: 19764
diff changeset
605
1069a634fc92 added mp_dvdnav_handle_input to handle user's input (revived from the repository with few changes)
nicodvb
parents: 19764
diff changeset
606 switch(cmd) {
1069a634fc92 added mp_dvdnav_handle_input to handle user's input (revived from the repository with few changes)
nicodvb
parents: 19764
diff changeset
607 case MP_CMD_DVDNAV_UP:
1069a634fc92 added mp_dvdnav_handle_input to handle user's input (revived from the repository with few changes)
nicodvb
parents: 19764
diff changeset
608 status = dvdnav_upper_button_select(nav, pci);
1069a634fc92 added mp_dvdnav_handle_input to handle user's input (revived from the repository with few changes)
nicodvb
parents: 19764
diff changeset
609 break;
1069a634fc92 added mp_dvdnav_handle_input to handle user's input (revived from the repository with few changes)
nicodvb
parents: 19764
diff changeset
610 case MP_CMD_DVDNAV_DOWN:
1069a634fc92 added mp_dvdnav_handle_input to handle user's input (revived from the repository with few changes)
nicodvb
parents: 19764
diff changeset
611 status = dvdnav_lower_button_select(nav, pci);
1069a634fc92 added mp_dvdnav_handle_input to handle user's input (revived from the repository with few changes)
nicodvb
parents: 19764
diff changeset
612 break;
1069a634fc92 added mp_dvdnav_handle_input to handle user's input (revived from the repository with few changes)
nicodvb
parents: 19764
diff changeset
613 case MP_CMD_DVDNAV_LEFT:
1069a634fc92 added mp_dvdnav_handle_input to handle user's input (revived from the repository with few changes)
nicodvb
parents: 19764
diff changeset
614 status = dvdnav_left_button_select(nav, pci);
1069a634fc92 added mp_dvdnav_handle_input to handle user's input (revived from the repository with few changes)
nicodvb
parents: 19764
diff changeset
615 break;
1069a634fc92 added mp_dvdnav_handle_input to handle user's input (revived from the repository with few changes)
nicodvb
parents: 19764
diff changeset
616 case MP_CMD_DVDNAV_RIGHT:
1069a634fc92 added mp_dvdnav_handle_input to handle user's input (revived from the repository with few changes)
nicodvb
parents: 19764
diff changeset
617 status = dvdnav_right_button_select(nav, pci);
1069a634fc92 added mp_dvdnav_handle_input to handle user's input (revived from the repository with few changes)
nicodvb
parents: 19764
diff changeset
618 break;
1069a634fc92 added mp_dvdnav_handle_input to handle user's input (revived from the repository with few changes)
nicodvb
parents: 19764
diff changeset
619 case MP_CMD_DVDNAV_MENU:
1069a634fc92 added mp_dvdnav_handle_input to handle user's input (revived from the repository with few changes)
nicodvb
parents: 19764
diff changeset
620 status = dvdnav_menu_call(nav,DVD_MENU_Root);
1069a634fc92 added mp_dvdnav_handle_input to handle user's input (revived from the repository with few changes)
nicodvb
parents: 19764
diff changeset
621 break;
19777
bb1b570ac7c1 permit to select previous dvdnav menu, in the order chapter->title->root
nicodvb
parents: 19774
diff changeset
622 case MP_CMD_DVDNAV_PREVMENU: {
bb1b570ac7c1 permit to select previous dvdnav menu, in the order chapter->title->root
nicodvb
parents: 19774
diff changeset
623 int title=0, part=0;
bb1b570ac7c1 permit to select previous dvdnav menu, in the order chapter->title->root
nicodvb
parents: 19774
diff changeset
624
bb1b570ac7c1 permit to select previous dvdnav menu, in the order chapter->title->root
nicodvb
parents: 19774
diff changeset
625 dvdnav_current_title_info(nav, &title, &part);
bb1b570ac7c1 permit to select previous dvdnav menu, in the order chapter->title->root
nicodvb
parents: 19774
diff changeset
626 if(title) {
25824
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
627 if((status=dvdnav_menu_call(nav, DVD_MENU_Part)) == DVDNAV_STATUS_OK)
19777
bb1b570ac7c1 permit to select previous dvdnav menu, in the order chapter->title->root
nicodvb
parents: 19774
diff changeset
628 break;
bb1b570ac7c1 permit to select previous dvdnav menu, in the order chapter->title->root
nicodvb
parents: 19774
diff changeset
629 }
25824
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
630 if((status=dvdnav_menu_call(nav, DVD_MENU_Title)) == DVDNAV_STATUS_OK)
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
631 break;
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
632 status=dvdnav_menu_call(nav, DVD_MENU_Root);
19777
bb1b570ac7c1 permit to select previous dvdnav menu, in the order chapter->title->root
nicodvb
parents: 19774
diff changeset
633 }
bb1b570ac7c1 permit to select previous dvdnav menu, in the order chapter->title->root
nicodvb
parents: 19774
diff changeset
634 break;
19768
1069a634fc92 added mp_dvdnav_handle_input to handle user's input (revived from the repository with few changes)
nicodvb
parents: 19764
diff changeset
635 case MP_CMD_DVDNAV_SELECT:
1069a634fc92 added mp_dvdnav_handle_input to handle user's input (revived from the repository with few changes)
nicodvb
parents: 19764
diff changeset
636 status = dvdnav_button_activate(nav, pci);
1069a634fc92 added mp_dvdnav_handle_input to handle user's input (revived from the repository with few changes)
nicodvb
parents: 19764
diff changeset
637 break;
19912
3fdb44285fe7 introduced new MP_CMD_DVDNAV_MOUSECLICK command (bound to mouse0);
nicodvb
parents: 19909
diff changeset
638 case MP_CMD_DVDNAV_MOUSECLICK:
3fdb44285fe7 introduced new MP_CMD_DVDNAV_MOUSECLICK command (bound to mouse0);
nicodvb
parents: 19909
diff changeset
639 /*
3fdb44285fe7 introduced new MP_CMD_DVDNAV_MOUSECLICK command (bound to mouse0);
nicodvb
parents: 19909
diff changeset
640 this is a workaround: in theory the simple dvdnav_lower_button_select()+dvdnav_button_activate()
3fdb44285fe7 introduced new MP_CMD_DVDNAV_MOUSECLICK command (bound to mouse0);
nicodvb
parents: 19909
diff changeset
641 should be enough (and generally it is), but there are cases when the calls to dvdnav_lower_button_select()
3fdb44285fe7 introduced new MP_CMD_DVDNAV_MOUSECLICK command (bound to mouse0);
nicodvb
parents: 19909
diff changeset
642 and friends fail! Hence we have to call dvdnav_mouse_activate(priv->mousex, priv->mousey) with
3fdb44285fe7 introduced new MP_CMD_DVDNAV_MOUSECLICK command (bound to mouse0);
nicodvb
parents: 19909
diff changeset
643 the coodinates saved by mp_dvdnav_update_mouse_pos().
3fdb44285fe7 introduced new MP_CMD_DVDNAV_MOUSECLICK command (bound to mouse0);
nicodvb
parents: 19909
diff changeset
644 This last call always works well
3fdb44285fe7 introduced new MP_CMD_DVDNAV_MOUSECLICK command (bound to mouse0);
nicodvb
parents: 19909
diff changeset
645 */
20809
ab7e5eb57d52 COSMETICS: renamed dvdnav_priv to priv
nicodvb
parents: 20788
diff changeset
646 status = dvdnav_mouse_activate(nav, pci, priv->mousex, priv->mousey);
19912
3fdb44285fe7 introduced new MP_CMD_DVDNAV_MOUSECLICK command (bound to mouse0);
nicodvb
parents: 19909
diff changeset
647 break;
19768
1069a634fc92 added mp_dvdnav_handle_input to handle user's input (revived from the repository with few changes)
nicodvb
parents: 19764
diff changeset
648 default:
1069a634fc92 added mp_dvdnav_handle_input to handle user's input (revived from the repository with few changes)
nicodvb
parents: 19764
diff changeset
649 mp_msg(MSGT_CPLAYER, MSGL_V, "Unknown DVDNAV cmd %d\n", cmd);
1069a634fc92 added mp_dvdnav_handle_input to handle user's input (revived from the repository with few changes)
nicodvb
parents: 19764
diff changeset
650 break;
1069a634fc92 added mp_dvdnav_handle_input to handle user's input (revived from the repository with few changes)
nicodvb
parents: 19764
diff changeset
651 }
1069a634fc92 added mp_dvdnav_handle_input to handle user's input (revived from the repository with few changes)
nicodvb
parents: 19764
diff changeset
652
19840
ba3b77867047 in mp_dvdnav_handle_input() update current button only if the status of the previous operation succeeded; patch by Jonas Jermann
nicodvb
parents: 19839
diff changeset
653 if(status == DVDNAV_STATUS_OK)
20786
50b5a9e01009 COSMETICS: reformatted this ugly mess in a consistent manner
nicodvb
parents: 20754
diff changeset
654 dvdnav_get_current_highlight(nav, button);
19768
1069a634fc92 added mp_dvdnav_handle_input to handle user's input (revived from the repository with few changes)
nicodvb
parents: 19764
diff changeset
655 }
1069a634fc92 added mp_dvdnav_handle_input to handle user's input (revived from the repository with few changes)
nicodvb
parents: 19764
diff changeset
656
19851
adfd08588514 report mouse coordinates after movement to dvdnav; this permits to enable button selection using the mouse; patch by Jonas Jermann and me
nicodvb
parents: 19842
diff changeset
657 void mp_dvdnav_update_mouse_pos(stream_t *stream, int32_t x, int32_t y, int* button) {
25829
c0b5ff39e928 remove useless casts
ben
parents: 25828
diff changeset
658 dvdnav_priv_t * priv = stream->priv;
20809
ab7e5eb57d52 COSMETICS: renamed dvdnav_priv to priv
nicodvb
parents: 20788
diff changeset
659 dvdnav_t *nav = priv->dvdnav;
19851
adfd08588514 report mouse coordinates after movement to dvdnav; this permits to enable button selection using the mouse; patch by Jonas Jermann and me
nicodvb
parents: 19842
diff changeset
660 dvdnav_status_t status;
adfd08588514 report mouse coordinates after movement to dvdnav; this permits to enable button selection using the mouse; patch by Jonas Jermann and me
nicodvb
parents: 19842
diff changeset
661 pci_t *pci = dvdnav_get_current_nav_pci(nav);
adfd08588514 report mouse coordinates after movement to dvdnav; this permits to enable button selection using the mouse; patch by Jonas Jermann and me
nicodvb
parents: 19842
diff changeset
662
adfd08588514 report mouse coordinates after movement to dvdnav; this permits to enable button selection using the mouse; patch by Jonas Jermann and me
nicodvb
parents: 19842
diff changeset
663 if(!pci) return;
adfd08588514 report mouse coordinates after movement to dvdnav; this permits to enable button selection using the mouse; patch by Jonas Jermann and me
nicodvb
parents: 19842
diff changeset
664
adfd08588514 report mouse coordinates after movement to dvdnav; this permits to enable button selection using the mouse; patch by Jonas Jermann and me
nicodvb
parents: 19842
diff changeset
665 status = dvdnav_mouse_select(nav, pci, x, y);
adfd08588514 report mouse coordinates after movement to dvdnav; this permits to enable button selection using the mouse; patch by Jonas Jermann and me
nicodvb
parents: 19842
diff changeset
666 if(status == DVDNAV_STATUS_OK) dvdnav_get_current_highlight(nav, button);
adfd08588514 report mouse coordinates after movement to dvdnav; this permits to enable button selection using the mouse; patch by Jonas Jermann and me
nicodvb
parents: 19842
diff changeset
667 else *button = -1;
20809
ab7e5eb57d52 COSMETICS: renamed dvdnav_priv to priv
nicodvb
parents: 20788
diff changeset
668 priv->mousex = x;
ab7e5eb57d52 COSMETICS: renamed dvdnav_priv to priv
nicodvb
parents: 20788
diff changeset
669 priv->mousey = y;
19851
adfd08588514 report mouse coordinates after movement to dvdnav; this permits to enable button selection using the mouse; patch by Jonas Jermann and me
nicodvb
parents: 19842
diff changeset
670 }
adfd08588514 report mouse coordinates after movement to dvdnav; this permits to enable button selection using the mouse; patch by Jonas Jermann and me
nicodvb
parents: 19842
diff changeset
671
21424
3504737c4e96 doxygenized dvdnav_sid_from_lang() and dvdnav_number_of_subs()
nicodvb
parents: 21333
diff changeset
672 /**
21600
ca8327c8d1fb added dvdnav_aid_from_lang() to support -alang
nicodvb
parents: 21560
diff changeset
673 * \brief dvdnav_aid_from_lang() returns the audio id corresponding to the language code 'lang'
ca8327c8d1fb added dvdnav_aid_from_lang() to support -alang
nicodvb
parents: 21560
diff changeset
674 * \param stream: - stream pointer
ca8327c8d1fb added dvdnav_aid_from_lang() to support -alang
nicodvb
parents: 21560
diff changeset
675 * \param lang: 2-characters language code[s], eventually separated by spaces of commas
ca8327c8d1fb added dvdnav_aid_from_lang() to support -alang
nicodvb
parents: 21560
diff changeset
676 * \return -1 on error, current subtitle id if successful
ca8327c8d1fb added dvdnav_aid_from_lang() to support -alang
nicodvb
parents: 21560
diff changeset
677 */
ca8327c8d1fb added dvdnav_aid_from_lang() to support -alang
nicodvb
parents: 21560
diff changeset
678 int dvdnav_aid_from_lang(stream_t *stream, unsigned char *language) {
25829
c0b5ff39e928 remove useless casts
ben
parents: 25828
diff changeset
679 dvdnav_priv_t * priv = stream->priv;
21600
ca8327c8d1fb added dvdnav_aid_from_lang() to support -alang
nicodvb
parents: 21560
diff changeset
680 int k;
ca8327c8d1fb added dvdnav_aid_from_lang() to support -alang
nicodvb
parents: 21560
diff changeset
681 uint8_t format, lg;
ca8327c8d1fb added dvdnav_aid_from_lang() to support -alang
nicodvb
parents: 21560
diff changeset
682 uint16_t lang, lcode;;
ca8327c8d1fb added dvdnav_aid_from_lang() to support -alang
nicodvb
parents: 21560
diff changeset
683
ca8327c8d1fb added dvdnav_aid_from_lang() to support -alang
nicodvb
parents: 21560
diff changeset
684 while(language && strlen(language)>=2) {
ca8327c8d1fb added dvdnav_aid_from_lang() to support -alang
nicodvb
parents: 21560
diff changeset
685 lcode = (language[0] << 8) | (language[1]);
ca8327c8d1fb added dvdnav_aid_from_lang() to support -alang
nicodvb
parents: 21560
diff changeset
686 for(k=0; k<32; k++) {
ca8327c8d1fb added dvdnav_aid_from_lang() to support -alang
nicodvb
parents: 21560
diff changeset
687 lg = dvdnav_get_audio_logical_stream(priv->dvdnav, k);
ca8327c8d1fb added dvdnav_aid_from_lang() to support -alang
nicodvb
parents: 21560
diff changeset
688 if(lg == 0xff) continue;
ca8327c8d1fb added dvdnav_aid_from_lang() to support -alang
nicodvb
parents: 21560
diff changeset
689 lang = dvdnav_audio_stream_to_lang(priv->dvdnav, lg);
ca8327c8d1fb added dvdnav_aid_from_lang() to support -alang
nicodvb
parents: 21560
diff changeset
690 if(lang != 0xFFFF && lang == lcode) {
ca8327c8d1fb added dvdnav_aid_from_lang() to support -alang
nicodvb
parents: 21560
diff changeset
691 format = dvdnav_audio_stream_format(priv->dvdnav, lg);
ca8327c8d1fb added dvdnav_aid_from_lang() to support -alang
nicodvb
parents: 21560
diff changeset
692 switch(format) {
ca8327c8d1fb added dvdnav_aid_from_lang() to support -alang
nicodvb
parents: 21560
diff changeset
693 case DVDNAV_FORMAT_AC3:
ca8327c8d1fb added dvdnav_aid_from_lang() to support -alang
nicodvb
parents: 21560
diff changeset
694 return k+128;
ca8327c8d1fb added dvdnav_aid_from_lang() to support -alang
nicodvb
parents: 21560
diff changeset
695 case DVDNAV_FORMAT_DTS:
ca8327c8d1fb added dvdnav_aid_from_lang() to support -alang
nicodvb
parents: 21560
diff changeset
696 return k+136;
ca8327c8d1fb added dvdnav_aid_from_lang() to support -alang
nicodvb
parents: 21560
diff changeset
697 case DVDNAV_FORMAT_LPCM:
ca8327c8d1fb added dvdnav_aid_from_lang() to support -alang
nicodvb
parents: 21560
diff changeset
698 return k+160;
ca8327c8d1fb added dvdnav_aid_from_lang() to support -alang
nicodvb
parents: 21560
diff changeset
699 case DVDNAV_FORMAT_MPEGAUDIO:
ca8327c8d1fb added dvdnav_aid_from_lang() to support -alang
nicodvb
parents: 21560
diff changeset
700 return k;
ca8327c8d1fb added dvdnav_aid_from_lang() to support -alang
nicodvb
parents: 21560
diff changeset
701 default:
ca8327c8d1fb added dvdnav_aid_from_lang() to support -alang
nicodvb
parents: 21560
diff changeset
702 return -1;
ca8327c8d1fb added dvdnav_aid_from_lang() to support -alang
nicodvb
parents: 21560
diff changeset
703 }
ca8327c8d1fb added dvdnav_aid_from_lang() to support -alang
nicodvb
parents: 21560
diff changeset
704 }
ca8327c8d1fb added dvdnav_aid_from_lang() to support -alang
nicodvb
parents: 21560
diff changeset
705 }
ca8327c8d1fb added dvdnav_aid_from_lang() to support -alang
nicodvb
parents: 21560
diff changeset
706 language += 2;
ca8327c8d1fb added dvdnav_aid_from_lang() to support -alang
nicodvb
parents: 21560
diff changeset
707 while(language[0]==',' || language[0]==' ') ++language;
ca8327c8d1fb added dvdnav_aid_from_lang() to support -alang
nicodvb
parents: 21560
diff changeset
708 }
ca8327c8d1fb added dvdnav_aid_from_lang() to support -alang
nicodvb
parents: 21560
diff changeset
709 return -1;
ca8327c8d1fb added dvdnav_aid_from_lang() to support -alang
nicodvb
parents: 21560
diff changeset
710 }
ca8327c8d1fb added dvdnav_aid_from_lang() to support -alang
nicodvb
parents: 21560
diff changeset
711
21603
4bfdaf8bcae5 implemented dvdnav_lang_from_aid() to retrieve audio language
nicodvb
parents: 21600
diff changeset
712 /**
4bfdaf8bcae5 implemented dvdnav_lang_from_aid() to retrieve audio language
nicodvb
parents: 21600
diff changeset
713 * \brief dvdnav_lang_from_aid() assigns to buf the language corresponding to audio id 'aid'
4bfdaf8bcae5 implemented dvdnav_lang_from_aid() to retrieve audio language
nicodvb
parents: 21600
diff changeset
714 * \param stream: - stream pointer
4bfdaf8bcae5 implemented dvdnav_lang_from_aid() to retrieve audio language
nicodvb
parents: 21600
diff changeset
715 * \param sid: physical subtitle id
4bfdaf8bcae5 implemented dvdnav_lang_from_aid() to retrieve audio language
nicodvb
parents: 21600
diff changeset
716 * \param buf: buffer to contain the 2-chars language string
4bfdaf8bcae5 implemented dvdnav_lang_from_aid() to retrieve audio language
nicodvb
parents: 21600
diff changeset
717 * \return 0 on error, 1 if successful
4bfdaf8bcae5 implemented dvdnav_lang_from_aid() to retrieve audio language
nicodvb
parents: 21600
diff changeset
718 */
4bfdaf8bcae5 implemented dvdnav_lang_from_aid() to retrieve audio language
nicodvb
parents: 21600
diff changeset
719 int dvdnav_lang_from_aid(stream_t *stream, int aid, unsigned char *buf) {
4bfdaf8bcae5 implemented dvdnav_lang_from_aid() to retrieve audio language
nicodvb
parents: 21600
diff changeset
720 uint8_t lg;
4bfdaf8bcae5 implemented dvdnav_lang_from_aid() to retrieve audio language
nicodvb
parents: 21600
diff changeset
721 uint16_t lang;
25829
c0b5ff39e928 remove useless casts
ben
parents: 25828
diff changeset
722 dvdnav_priv_t * priv = stream->priv;
21603
4bfdaf8bcae5 implemented dvdnav_lang_from_aid() to retrieve audio language
nicodvb
parents: 21600
diff changeset
723
4bfdaf8bcae5 implemented dvdnav_lang_from_aid() to retrieve audio language
nicodvb
parents: 21600
diff changeset
724 if(aid < 0)
4bfdaf8bcae5 implemented dvdnav_lang_from_aid() to retrieve audio language
nicodvb
parents: 21600
diff changeset
725 return 0;
21613
8547ae79e74b simplified aid management in dvdnav_lang_from_aid(); patch by Joakim Patte
nicodvb
parents: 21603
diff changeset
726 lg = dvdnav_get_audio_logical_stream(priv->dvdnav, aid & 0x7);
21603
4bfdaf8bcae5 implemented dvdnav_lang_from_aid() to retrieve audio language
nicodvb
parents: 21600
diff changeset
727 if(lg == 0xff) return 0;
4bfdaf8bcae5 implemented dvdnav_lang_from_aid() to retrieve audio language
nicodvb
parents: 21600
diff changeset
728 lang = dvdnav_audio_stream_to_lang(priv->dvdnav, lg);
4bfdaf8bcae5 implemented dvdnav_lang_from_aid() to retrieve audio language
nicodvb
parents: 21600
diff changeset
729 if(lang == 0xffff) return 0;
4bfdaf8bcae5 implemented dvdnav_lang_from_aid() to retrieve audio language
nicodvb
parents: 21600
diff changeset
730 buf[0] = lang >> 8;
4bfdaf8bcae5 implemented dvdnav_lang_from_aid() to retrieve audio language
nicodvb
parents: 21600
diff changeset
731 buf[1] = lang & 0xFF;
4bfdaf8bcae5 implemented dvdnav_lang_from_aid() to retrieve audio language
nicodvb
parents: 21600
diff changeset
732 buf[2] = 0;
4bfdaf8bcae5 implemented dvdnav_lang_from_aid() to retrieve audio language
nicodvb
parents: 21600
diff changeset
733 return 1;
4bfdaf8bcae5 implemented dvdnav_lang_from_aid() to retrieve audio language
nicodvb
parents: 21600
diff changeset
734 }
4bfdaf8bcae5 implemented dvdnav_lang_from_aid() to retrieve audio language
nicodvb
parents: 21600
diff changeset
735
21600
ca8327c8d1fb added dvdnav_aid_from_lang() to support -alang
nicodvb
parents: 21560
diff changeset
736
ca8327c8d1fb added dvdnav_aid_from_lang() to support -alang
nicodvb
parents: 21560
diff changeset
737 /**
21424
3504737c4e96 doxygenized dvdnav_sid_from_lang() and dvdnav_number_of_subs()
nicodvb
parents: 21333
diff changeset
738 * \brief dvdnav_sid_from_lang() returns the subtitle id corresponding to the language code 'lang'
3504737c4e96 doxygenized dvdnav_sid_from_lang() and dvdnav_number_of_subs()
nicodvb
parents: 21333
diff changeset
739 * \param stream: - stream pointer
3504737c4e96 doxygenized dvdnav_sid_from_lang() and dvdnav_number_of_subs()
nicodvb
parents: 21333
diff changeset
740 * \param lang: 2-characters language code[s], eventually separated by spaces of commas
3504737c4e96 doxygenized dvdnav_sid_from_lang() and dvdnav_number_of_subs()
nicodvb
parents: 21333
diff changeset
741 * \return -1 on error, current subtitle id if successful
3504737c4e96 doxygenized dvdnav_sid_from_lang() and dvdnav_number_of_subs()
nicodvb
parents: 21333
diff changeset
742 */
21197
7ecd9de03435 added code to identify subs language and count; needed for forthcoming support for -slang
nicodvb
parents: 21193
diff changeset
743 int dvdnav_sid_from_lang(stream_t *stream, unsigned char *language) {
25829
c0b5ff39e928 remove useless casts
ben
parents: 25828
diff changeset
744 dvdnav_priv_t * priv = stream->priv;
23990
f57dacd8c419 removed unused variables
nicodvb
parents: 23902
diff changeset
745 uint8_t lg, k;
21204
1ddb1a86e419 support for comma-separated language codes in -slang
nicodvb
parents: 21200
diff changeset
746 uint16_t lang, lcode;
21197
7ecd9de03435 added code to identify subs language and count; needed for forthcoming support for -slang
nicodvb
parents: 21193
diff changeset
747
21204
1ddb1a86e419 support for comma-separated language codes in -slang
nicodvb
parents: 21200
diff changeset
748 while(language && strlen(language)>=2) {
21333
9e3860c22d99 cosmetical reformatting
nicodvb
parents: 21332
diff changeset
749 lcode = (language[0] << 8) | (language[1]);
9e3860c22d99 cosmetical reformatting
nicodvb
parents: 21332
diff changeset
750 for(k=0; k<32; k++) {
9e3860c22d99 cosmetical reformatting
nicodvb
parents: 21332
diff changeset
751 lg = dvdnav_get_spu_logical_stream(priv->dvdnav, k);
9e3860c22d99 cosmetical reformatting
nicodvb
parents: 21332
diff changeset
752 if(lg == 0xff) continue;
9e3860c22d99 cosmetical reformatting
nicodvb
parents: 21332
diff changeset
753 lang = dvdnav_spu_stream_to_lang(priv->dvdnav, lg);
9e3860c22d99 cosmetical reformatting
nicodvb
parents: 21332
diff changeset
754 if(lang != 0xFFFF && lang == lcode) {
9e3860c22d99 cosmetical reformatting
nicodvb
parents: 21332
diff changeset
755 return k;
9e3860c22d99 cosmetical reformatting
nicodvb
parents: 21332
diff changeset
756 }
21197
7ecd9de03435 added code to identify subs language and count; needed for forthcoming support for -slang
nicodvb
parents: 21193
diff changeset
757 }
21333
9e3860c22d99 cosmetical reformatting
nicodvb
parents: 21332
diff changeset
758 language += 2;
9e3860c22d99 cosmetical reformatting
nicodvb
parents: 21332
diff changeset
759 while(language[0]==',' || language[0]==' ') ++language;
21204
1ddb1a86e419 support for comma-separated language codes in -slang
nicodvb
parents: 21200
diff changeset
760 }
21197
7ecd9de03435 added code to identify subs language and count; needed for forthcoming support for -slang
nicodvb
parents: 21193
diff changeset
761 return -1;
7ecd9de03435 added code to identify subs language and count; needed for forthcoming support for -slang
nicodvb
parents: 21193
diff changeset
762 }
7ecd9de03435 added code to identify subs language and count; needed for forthcoming support for -slang
nicodvb
parents: 21193
diff changeset
763
21424
3504737c4e96 doxygenized dvdnav_sid_from_lang() and dvdnav_number_of_subs()
nicodvb
parents: 21333
diff changeset
764 /**
21560
a16219e6d656 added function to return the language of the specified subtitle id. Patch by
nicodvb
parents: 21538
diff changeset
765 * \brief dvdnav_lang_from_sid() assigns to buf the language corresponding to subtitle id 'sid'
a16219e6d656 added function to return the language of the specified subtitle id. Patch by
nicodvb
parents: 21538
diff changeset
766 * \param stream: - stream pointer
a16219e6d656 added function to return the language of the specified subtitle id. Patch by
nicodvb
parents: 21538
diff changeset
767 * \param sid: physical subtitle id
a16219e6d656 added function to return the language of the specified subtitle id. Patch by
nicodvb
parents: 21538
diff changeset
768 * \param buf: buffer to contain the 2-chars language string
a16219e6d656 added function to return the language of the specified subtitle id. Patch by
nicodvb
parents: 21538
diff changeset
769 * \return 0 on error, 1 if successful
a16219e6d656 added function to return the language of the specified subtitle id. Patch by
nicodvb
parents: 21538
diff changeset
770 */
a16219e6d656 added function to return the language of the specified subtitle id. Patch by
nicodvb
parents: 21538
diff changeset
771 int dvdnav_lang_from_sid(stream_t *stream, int sid, unsigned char *buf) {
23990
f57dacd8c419 removed unused variables
nicodvb
parents: 23902
diff changeset
772 uint8_t lg;
21560
a16219e6d656 added function to return the language of the specified subtitle id. Patch by
nicodvb
parents: 21538
diff changeset
773 uint16_t lang;
25829
c0b5ff39e928 remove useless casts
ben
parents: 25828
diff changeset
774 dvdnav_priv_t *priv = stream->priv;
21560
a16219e6d656 added function to return the language of the specified subtitle id. Patch by
nicodvb
parents: 21538
diff changeset
775 if(sid < 0) return 0;
a16219e6d656 added function to return the language of the specified subtitle id. Patch by
nicodvb
parents: 21538
diff changeset
776 lg = dvdnav_get_spu_logical_stream(priv->dvdnav, sid);
a16219e6d656 added function to return the language of the specified subtitle id. Patch by
nicodvb
parents: 21538
diff changeset
777 lang = dvdnav_spu_stream_to_lang(priv->dvdnav, lg);
a16219e6d656 added function to return the language of the specified subtitle id. Patch by
nicodvb
parents: 21538
diff changeset
778 if(lang == 0xffff) return 0;
a16219e6d656 added function to return the language of the specified subtitle id. Patch by
nicodvb
parents: 21538
diff changeset
779 buf[0] = lang >> 8;
a16219e6d656 added function to return the language of the specified subtitle id. Patch by
nicodvb
parents: 21538
diff changeset
780 buf[1] = lang & 0xFF;
a16219e6d656 added function to return the language of the specified subtitle id. Patch by
nicodvb
parents: 21538
diff changeset
781 buf[2] = 0;
a16219e6d656 added function to return the language of the specified subtitle id. Patch by
nicodvb
parents: 21538
diff changeset
782 return 1;
a16219e6d656 added function to return the language of the specified subtitle id. Patch by
nicodvb
parents: 21538
diff changeset
783 }
a16219e6d656 added function to return the language of the specified subtitle id. Patch by
nicodvb
parents: 21538
diff changeset
784
a16219e6d656 added function to return the language of the specified subtitle id. Patch by
nicodvb
parents: 21538
diff changeset
785 /**
21424
3504737c4e96 doxygenized dvdnav_sid_from_lang() and dvdnav_number_of_subs()
nicodvb
parents: 21333
diff changeset
786 * \brief dvdnav_number_of_subs() returns the count of available subtitles
3504737c4e96 doxygenized dvdnav_sid_from_lang() and dvdnav_number_of_subs()
nicodvb
parents: 21333
diff changeset
787 * \param stream: - stream pointer
3504737c4e96 doxygenized dvdnav_sid_from_lang() and dvdnav_number_of_subs()
nicodvb
parents: 21333
diff changeset
788 * \return 0 on error, something meaningful otherwise
3504737c4e96 doxygenized dvdnav_sid_from_lang() and dvdnav_number_of_subs()
nicodvb
parents: 21333
diff changeset
789 */
21197
7ecd9de03435 added code to identify subs language and count; needed for forthcoming support for -slang
nicodvb
parents: 21193
diff changeset
790 int dvdnav_number_of_subs(stream_t *stream) {
25829
c0b5ff39e928 remove useless casts
ben
parents: 25828
diff changeset
791 dvdnav_priv_t * priv = stream->priv;
21197
7ecd9de03435 added code to identify subs language and count; needed for forthcoming support for -slang
nicodvb
parents: 21193
diff changeset
792 uint8_t lg, k, n=0;
7ecd9de03435 added code to identify subs language and count; needed for forthcoming support for -slang
nicodvb
parents: 21193
diff changeset
793
25824
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
794 if (priv->state & NAV_FLAG_VTS_DOMAIN) return 0;
21197
7ecd9de03435 added code to identify subs language and count; needed for forthcoming support for -slang
nicodvb
parents: 21193
diff changeset
795 for(k=0; k<32; k++) {
7ecd9de03435 added code to identify subs language and count; needed for forthcoming support for -slang
nicodvb
parents: 21193
diff changeset
796 lg = dvdnav_get_spu_logical_stream(priv->dvdnav, k);
7ecd9de03435 added code to identify subs language and count; needed for forthcoming support for -slang
nicodvb
parents: 21193
diff changeset
797 if(lg == 0xff) continue;
7ecd9de03435 added code to identify subs language and count; needed for forthcoming support for -slang
nicodvb
parents: 21193
diff changeset
798 n++;
7ecd9de03435 added code to identify subs language and count; needed for forthcoming support for -slang
nicodvb
parents: 21193
diff changeset
799 }
7ecd9de03435 added code to identify subs language and count; needed for forthcoming support for -slang
nicodvb
parents: 21193
diff changeset
800 return n;
7ecd9de03435 added code to identify subs language and count; needed for forthcoming support for -slang
nicodvb
parents: 21193
diff changeset
801 }
7ecd9de03435 added code to identify subs language and count; needed for forthcoming support for -slang
nicodvb
parents: 21193
diff changeset
802
23902
29f612207c95 More doxygen comments
reimar
parents: 23043
diff changeset
803 /**
29f612207c95 More doxygen comments
reimar
parents: 23043
diff changeset
804 * \brief mp_dvdnav_get_spu_clut() returns the spu clut
29f612207c95 More doxygen comments
reimar
parents: 23043
diff changeset
805 * \param stream: - stream pointer
29f612207c95 More doxygen comments
reimar
parents: 23043
diff changeset
806 * \return spu clut pointer
29f612207c95 More doxygen comments
reimar
parents: 23043
diff changeset
807 */
21538
c9b6588932b5 export spu palette; part of a patch by Otvos Attila
nicodvb
parents: 21424
diff changeset
808 unsigned int *mp_dvdnav_get_spu_clut(stream_t *stream) {
25829
c0b5ff39e928 remove useless casts
ben
parents: 25828
diff changeset
809 dvdnav_priv_t *priv = stream->priv;
25828
8a1627f693a6 simplify by a one-liner
ben
parents: 25827
diff changeset
810 return (priv->state & NAV_FLAG_SPU_SET) ? priv->spu_clut : NULL;
21538
c9b6588932b5 export spu palette; part of a patch by Otvos Attila
nicodvb
parents: 21424
diff changeset
811 }
c9b6588932b5 export spu palette; part of a patch by Otvos Attila
nicodvb
parents: 21424
diff changeset
812
23902
29f612207c95 More doxygen comments
reimar
parents: 23043
diff changeset
813 /**
29f612207c95 More doxygen comments
reimar
parents: 23043
diff changeset
814 * \brief mp_dvdnav_get_highlight() get dvdnav highlight struct
29f612207c95 More doxygen comments
reimar
parents: 23043
diff changeset
815 * \param stream: - stream pointer
29f612207c95 More doxygen comments
reimar
parents: 23043
diff changeset
816 * \param hl : - highlight struct pointer
29f612207c95 More doxygen comments
reimar
parents: 23043
diff changeset
817 */
21219
8258747951d7 keep nav highlight event in dvdnav priv structure
ben
parents: 21204
diff changeset
818 void mp_dvdnav_get_highlight (stream_t *stream, nav_highlight_t *hl) {
25829
c0b5ff39e928 remove useless casts
ben
parents: 25828
diff changeset
819 dvdnav_priv_t *priv = stream->priv;
21219
8258747951d7 keep nav highlight event in dvdnav priv structure
ben
parents: 21204
diff changeset
820 dvdnav_highlight_event_t hlev = priv->hlev;
8258747951d7 keep nav highlight event in dvdnav priv structure
ben
parents: 21204
diff changeset
821
8258747951d7 keep nav highlight event in dvdnav priv structure
ben
parents: 21204
diff changeset
822 hl->sx = hlev.sx;
8258747951d7 keep nav highlight event in dvdnav priv structure
ben
parents: 21204
diff changeset
823 hl->sy = hlev.sy;
8258747951d7 keep nav highlight event in dvdnav priv structure
ben
parents: 21204
diff changeset
824 hl->ex = hlev.ex;
8258747951d7 keep nav highlight event in dvdnav priv structure
ben
parents: 21204
diff changeset
825 hl->ey = hlev.ey;
21200
c7b5dd2b2291 better nav highlight handling
ben
parents: 21199
diff changeset
826 }
19851
adfd08588514 report mouse coordinates after movement to dvdnav; this permits to enable button selection using the mouse; patch by Jonas Jermann and me
nicodvb
parents: 19842
diff changeset
827
25817
883c6c3ae041 Add new command to switch between dvdnav titles
ben
parents: 25691
diff changeset
828 void mp_dvdnav_switch_title (stream_t *stream, int title) {
25829
c0b5ff39e928 remove useless casts
ben
parents: 25828
diff changeset
829 dvdnav_priv_t *priv = stream->priv;
25817
883c6c3ae041 Add new command to switch between dvdnav titles
ben
parents: 25691
diff changeset
830 uint32_t titles;
883c6c3ae041 Add new command to switch between dvdnav titles
ben
parents: 25691
diff changeset
831
883c6c3ae041 Add new command to switch between dvdnav titles
ben
parents: 25691
diff changeset
832 dvdnav_get_number_of_titles (priv->dvdnav, &titles);
883c6c3ae041 Add new command to switch between dvdnav titles
ben
parents: 25691
diff changeset
833 if (title > 0 && title <= titles)
883c6c3ae041 Add new command to switch between dvdnav titles
ben
parents: 25691
diff changeset
834 dvdnav_title_play (priv->dvdnav, title);
883c6c3ae041 Add new command to switch between dvdnav titles
ben
parents: 25691
diff changeset
835 }
883c6c3ae041 Add new command to switch between dvdnav titles
ben
parents: 25691
diff changeset
836
25824
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
837 /**
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
838 * \brief Check if end of stream has been reached
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
839 * \param stream: - stream pointer
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
840 * \return 1 on really eof
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
841 */
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
842 int mp_dvdnav_is_eof (stream_t *stream) {
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
843 return ((dvdnav_priv_t *) stream->priv)->state & NAV_FLAG_EOF;
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
844 }
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
845
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
846 /**
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
847 * \brief Skip still frame
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
848 * \param stream: - stream pointer
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
849 * \return 0 on success
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
850 */
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
851 int mp_dvdnav_skip_still (stream_t *stream) {
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
852 dvdnav_priv_t *priv = stream->priv;
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
853 if (priv->still_length == 0xff)
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
854 return 1;
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
855 dvdnav_still_skip(priv->dvdnav);
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
856 return 0;
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
857 }
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
858
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
859 /**
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
860 * \brief Skip wait event
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
861 * \param stream: - stream pointer
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
862 * \return 0 on success
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
863 */
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
864 int mp_dvdnav_skip_wait (stream_t *stream) {
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
865 dvdnav_priv_t *priv = stream->priv;
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
866 if (!(priv->state & NAV_FLAG_WAIT))
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
867 return 1;
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
868 priv->state &= ~NAV_FLAG_WAIT;
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
869 dvdnav_wait_skip(priv->dvdnav);
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
870 return 0;
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
871 }
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
872
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
873 /**
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
874 * \brief Set wait mode
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
875 * \param stream : - stream pointer
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
876 * \param mode : - if true, then suspend block read
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
877 * \param automode: - if true, then VTS or cell change set wait mode
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
878 */
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
879 void mp_dvdnav_read_wait (stream_t *stream, int mode, int automode) {
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
880 dvdnav_priv_t *priv = stream->priv;
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
881 if (mode == 0)
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
882 priv->state &= ~NAV_FLAG_WAIT_READ;
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
883 if (mode > 0)
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
884 priv->state |= NAV_FLAG_WAIT_READ;
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
885 if (automode == 0)
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
886 priv->state &= ~NAV_FLAG_WAIT_READ_AUTO;
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
887 if (automode > 0)
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
888 priv->state |= NAV_FLAG_WAIT_READ_AUTO;
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
889 }
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
890
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
891 /**
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
892 * \brief Check if cell has changed
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
893 * \param stream: - stream pointer
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
894 * \param clear : - if true, then clear cell change flag
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
895 * \return 1 if cell has changed
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
896 */
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
897 int mp_dvdnav_cell_has_changed (stream_t *stream, int clear) {
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
898 dvdnav_priv_t *priv = stream->priv;
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
899 if (!(priv->state & NAV_FLAG_CELL_CHANGED))
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
900 return 0;
25832
8601206c2ffc factorize 2 tests
ben
parents: 25830
diff changeset
901 if (clear) {
25824
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
902 priv->state &= ~NAV_FLAG_CELL_CHANGED;
25832
8601206c2ffc factorize 2 tests
ben
parents: 25830
diff changeset
903 priv->state |= NAV_FLAG_STREAM_CHANGE;
8601206c2ffc factorize 2 tests
ben
parents: 25830
diff changeset
904 }
25824
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
905 return 1;
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
906 }
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
907
25830
32acf35f74e1 add a new state flag to dvdnav in order to notify if
ben
parents: 25829
diff changeset
908 /* Notify if something has changed in stream
32acf35f74e1 add a new state flag to dvdnav in order to notify if
ben
parents: 25829
diff changeset
909 * Can be related to title, chapter, audio or SPU
32acf35f74e1 add a new state flag to dvdnav in order to notify if
ben
parents: 25829
diff changeset
910 */
32acf35f74e1 add a new state flag to dvdnav in order to notify if
ben
parents: 25829
diff changeset
911 int mp_dvdnav_stream_has_changed (stream_t *stream) {
32acf35f74e1 add a new state flag to dvdnav in order to notify if
ben
parents: 25829
diff changeset
912 dvdnav_priv_t *priv = stream->priv;
32acf35f74e1 add a new state flag to dvdnav in order to notify if
ben
parents: 25829
diff changeset
913
32acf35f74e1 add a new state flag to dvdnav in order to notify if
ben
parents: 25829
diff changeset
914 if (!(priv->state & NAV_FLAG_STREAM_CHANGE))
32acf35f74e1 add a new state flag to dvdnav in order to notify if
ben
parents: 25829
diff changeset
915 return 0;
32acf35f74e1 add a new state flag to dvdnav in order to notify if
ben
parents: 25829
diff changeset
916
32acf35f74e1 add a new state flag to dvdnav in order to notify if
ben
parents: 25829
diff changeset
917 priv->state &= ~NAV_FLAG_STREAM_CHANGE;
32acf35f74e1 add a new state flag to dvdnav in order to notify if
ben
parents: 25829
diff changeset
918 return 1;
32acf35f74e1 add a new state flag to dvdnav in order to notify if
ben
parents: 25829
diff changeset
919 }
25824
eb338d06c638 Add support for dvdnav still frames playback.
ben
parents: 25820
diff changeset
920
25211
c1d17bd6683c Mark all stream_info_t as const
reimar
parents: 25196
diff changeset
921 const stream_info_t stream_info_dvdnav = {
19302
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
922 "DVDNAV stream",
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
923 "null",
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
924 "",
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
925 "",
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
926 open_s,
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
927 { "dvdnav", NULL },
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
928 &stream_opts,
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
929 1 // Urls are an option string
cc4774869fbc renamed dvdnav_stream to stream_dvdnav for consistency
ben
parents:
diff changeset
930 };