Mercurial > mplayer.hg
annotate command.c @ 33179:218edd8fc782
Cosmetic: Format to MPlayer coding style.
Additionally: remove needless includes, group and sort includes, group
and sort variables, rename gtkAOFakeSurround declaration gtkAOSurround,
add #ifdefs to variable declarations, group statements by adding or
removing new lines to ease reading, move assignments outside conditions,
add parentheses, avoid mixing declaration and code, revise comments and
add new ones.
author | ib |
---|---|
date | Fri, 15 Apr 2011 14:30:58 +0000 |
parents | abcf963fbd2c |
children | 71c65ab3c204 |
rev | line source |
---|---|
30429
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30345
diff
changeset
|
1 /* |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30345
diff
changeset
|
2 * This file is part of MPlayer. |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30345
diff
changeset
|
3 * |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30345
diff
changeset
|
4 * MPlayer is free software; you can redistribute it and/or modify |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30345
diff
changeset
|
5 * it under the terms of the GNU General Public License as published by |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30345
diff
changeset
|
6 * the Free Software Foundation; either version 2 of the License, or |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30345
diff
changeset
|
7 * (at your option) any later version. |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30345
diff
changeset
|
8 * |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30345
diff
changeset
|
9 * MPlayer is distributed in the hope that it will be useful, |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30345
diff
changeset
|
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30345
diff
changeset
|
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30345
diff
changeset
|
12 * GNU General Public License for more details. |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30345
diff
changeset
|
13 * |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30345
diff
changeset
|
14 * You should have received a copy of the GNU General Public License along |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30345
diff
changeset
|
15 * with MPlayer; if not, write to the Free Software Foundation, Inc., |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30345
diff
changeset
|
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30345
diff
changeset
|
17 */ |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
30345
diff
changeset
|
18 |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
19 #include <stdlib.h> |
22478 | 20 #include <inttypes.h> |
21 #include <unistd.h> | |
22483 | 22 #include <string.h> |
22478 | 23 |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
24 #include "config.h" |
26263 | 25 #include "command.h" |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
26 #include "input/input.h" |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
27 #include "stream/stream.h" |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
28 #include "libmpdemux/demuxer.h" |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
29 #include "libmpdemux/stheader.h" |
23394
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
30 #include "codec-cfg.h" |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
31 #include "mplayer.h" |
32467 | 32 #include "sub/sub.h" |
22478 | 33 #include "m_option.h" |
34 #include "m_property.h" | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
35 #include "help_mp.h" |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
36 #include "metadata.h" |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
37 #include "libmpcodecs/vf.h" |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
38 #include "libmpcodecs/vd.h" |
22478 | 39 #include "libvo/video_out.h" |
32466
9e627a1793b1
Move font_load.[ch], font_load_ft.c and osd_font.h from libvo to sub.
cigaes
parents:
32461
diff
changeset
|
40 #include "sub/font_load.h" |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
41 #include "playtree.h" |
22478 | 42 #include "libao2/audio_out.h" |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
43 #include "mpcommon.h" |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
44 #include "mixer.h" |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
45 #include "libmpcodecs/dec_video.h" |
29759
d287e2785570
Move teletext specific code from stream into libmpcodecs.
cehoyos
parents:
29668
diff
changeset
|
46 #include "libmpcodecs/dec_teletext.h" |
32459
1a605463f62b
Move vobsub.[ch] and unrar_exec.[ch] to the sub directory.
cigaes
parents:
32456
diff
changeset
|
47 #include "sub/vobsub.h" |
32456 | 48 #include "sub/spudec.h" |
30901 | 49 #include "path.h" |
22478 | 50 #include "stream/tv.h" |
51 #include "stream/stream_radio.h" | |
23244
e5e8ac0bd7fc
support for PVR channel navigation (patch by Sven Gothel <sgothel at jausoft dot com>)
ben
parents:
23077
diff
changeset
|
52 #include "stream/pvr.h" |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27345
diff
changeset
|
53 #ifdef CONFIG_DVBIN |
22478 | 54 #include "stream/dvbin.h" |
55 #endif | |
31877
e30fe0cb79cd
Add incomplete clipinf reading support to display audio
reimar
parents:
31805
diff
changeset
|
56 #include "stream/stream_bd.h" |
29433
3495ccd3aef8
Only #include stream/stream_dvd.h when libdvdread is enabled.
diego
parents:
29429
diff
changeset
|
57 #ifdef CONFIG_DVDREAD |
22478 | 58 #include "stream/stream_dvd.h" |
29433
3495ccd3aef8
Only #include stream/stream_dvd.h when libdvdread is enabled.
diego
parents:
29429
diff
changeset
|
59 #endif |
22478 | 60 #include "stream/stream_dvdnav.h" |
32461 | 61 #include "sub/ass_mp.h" |
25461 | 62 #include "m_struct.h" |
63 #include "libmenu/menu.h" | |
23077 | 64 #include "gui/interface.h" |
32460 | 65 #include "sub/eosd.h" |
32442
bf593e3827d9
EOSD: overlay_add: use read_pnm instead of the internal reimplementation.
cigaes
parents:
32438
diff
changeset
|
66 #include "pnm_loader.h" |
22478 | 67 |
68 #include "mp_core.h" | |
24162 | 69 #include "mp_fifo.h" |
26095 | 70 #include "libavutil/avstring.h" |
31957
49848f9a8f30
Add -edl-start-pts option to Adjust positions in EDL records according
reynaldo
parents:
31904
diff
changeset
|
71 #include "edl.h" |
22478 | 72 |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
73 static void rescale_input_coordinates(int ix, int iy, double *dx, double *dy) |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
74 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
75 //remove the borders, if any, and rescale to the range [0,1],[0,1] |
31077 | 76 if (vo_fs) { //we are in full-screen mode |
77 if (vo_screenwidth > vo_dwidth) //there are borders along the x axis | |
78 ix -= (vo_screenwidth - vo_dwidth) / 2; | |
79 if (vo_screenheight > vo_dheight) //there are borders along the y axis (usual way) | |
80 iy -= (vo_screenheight - vo_dheight) / 2; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
81 |
31077 | 82 if (ix < 0 || ix > vo_dwidth) { |
83 *dx = *dy = -1.0; | |
84 return; | |
85 } //we are on one of the borders | |
86 if (iy < 0 || iy > vo_dheight) { | |
87 *dx = *dy = -1.0; | |
88 return; | |
89 } //we are on one of the borders | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
90 } |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
91 |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
92 *dx = (double) ix / (double) vo_dwidth; |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
93 *dy = (double) iy / (double) vo_dheight; |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
94 |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
95 mp_msg(MSGT_CPLAYER, MSGL_V, |
32352
76f94c00a69f
1000l, %lf is not valid format string for printf (only for scanf) and actually
reimar
parents:
32209
diff
changeset
|
96 "\r\nrescaled coordinates: %.3f, %.3f, screen (%d x %d), vodisplay: (%d, %d), fullscreen: %d\r\n", |
31077 | 97 *dx, *dy, vo_screenwidth, vo_screenheight, vo_dwidth, |
98 vo_dheight, vo_fs); | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
99 } |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
100 |
31612
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
101 static int sub_pos_by_source(MPContext *mpctx, int src) |
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
102 { |
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
103 int i, cnt = 0; |
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
104 if (src >= SUB_SOURCES || mpctx->sub_counts[src] == 0) |
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
105 return -1; |
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
106 for (i = 0; i < src; i++) |
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
107 cnt += mpctx->sub_counts[i]; |
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
108 return cnt; |
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
109 } |
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
110 |
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
111 static int sub_source_and_index_by_pos(MPContext *mpctx, int *pos) |
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
112 { |
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
113 int start = 0; |
22478 | 114 int i; |
115 for (i = 0; i < SUB_SOURCES; i++) { | |
31612
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
116 int cnt = mpctx->sub_counts[i]; |
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
117 if (*pos >= start && *pos < start + cnt) { |
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
118 *pos -= start; |
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
119 return i; |
31077 | 120 } |
31612
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
121 start += cnt; |
22478 | 122 } |
31612
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
123 *pos = -1; |
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
124 return -1; |
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
125 } |
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
126 |
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
127 static int sub_source_by_pos(MPContext *mpctx, int pos) |
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
128 { |
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
129 return sub_source_and_index_by_pos(mpctx, &pos); |
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
130 } |
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
131 |
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
132 static int sub_source_pos(MPContext *mpctx) |
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
133 { |
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
134 int pos = mpctx->global_sub_pos; |
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
135 sub_source_and_index_by_pos(mpctx, &pos); |
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
136 return pos; |
22478 | 137 } |
138 | |
31156 | 139 static int sub_source(MPContext *mpctx) |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
140 { |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
141 return sub_source_by_pos(mpctx, mpctx->global_sub_pos); |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
142 } |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
143 |
31788 | 144 static void update_global_sub_size(MPContext *mpctx) |
145 { | |
146 int i; | |
147 int cnt = 0; | |
148 | |
149 // update number of demuxer sub streams | |
150 for (i = 0; i < MAX_S_STREAMS; i++) | |
151 if (mpctx->demuxer->s_streams[i]) | |
152 cnt++; | |
153 if (cnt > mpctx->sub_counts[SUB_SOURCE_DEMUX]) | |
154 mpctx->sub_counts[SUB_SOURCE_DEMUX] = cnt; | |
155 | |
156 // update global size | |
157 mpctx->global_sub_size = 0; | |
158 for (i = 0; i < SUB_SOURCES; i++) | |
159 mpctx->global_sub_size += mpctx->sub_counts[i]; | |
160 | |
161 // update global_sub_pos if we auto-detected a demuxer sub | |
31805
05ca6dd36faf
Fix subtitle selection: make selecting -sid 0 work again by replacing the
reimar
parents:
31792
diff
changeset
|
162 if (mpctx->global_sub_pos == -1) { |
05ca6dd36faf
Fix subtitle selection: make selecting -sid 0 work again by replacing the
reimar
parents:
31792
diff
changeset
|
163 int sub_id = -1; |
05ca6dd36faf
Fix subtitle selection: make selecting -sid 0 work again by replacing the
reimar
parents:
31792
diff
changeset
|
164 if (mpctx->demuxer->sub) |
05ca6dd36faf
Fix subtitle selection: make selecting -sid 0 work again by replacing the
reimar
parents:
31792
diff
changeset
|
165 sub_id = mpctx->demuxer->sub->id; |
05ca6dd36faf
Fix subtitle selection: make selecting -sid 0 work again by replacing the
reimar
parents:
31792
diff
changeset
|
166 if (sub_id < 0) |
05ca6dd36faf
Fix subtitle selection: make selecting -sid 0 work again by replacing the
reimar
parents:
31792
diff
changeset
|
167 sub_id = dvdsub_id; |
05ca6dd36faf
Fix subtitle selection: make selecting -sid 0 work again by replacing the
reimar
parents:
31792
diff
changeset
|
168 if (sub_id >= 0 && sub_id < mpctx->sub_counts[SUB_SOURCE_DEMUX]) |
05ca6dd36faf
Fix subtitle selection: make selecting -sid 0 work again by replacing the
reimar
parents:
31792
diff
changeset
|
169 mpctx->global_sub_pos = sub_pos_by_source(mpctx, SUB_SOURCE_DEMUX) + |
05ca6dd36faf
Fix subtitle selection: make selecting -sid 0 work again by replacing the
reimar
parents:
31792
diff
changeset
|
170 sub_id; |
05ca6dd36faf
Fix subtitle selection: make selecting -sid 0 work again by replacing the
reimar
parents:
31792
diff
changeset
|
171 } |
31788 | 172 } |
173 | |
22478 | 174 /** |
175 * \brief Log the currently displayed subtitle to a file | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
176 * |
22478 | 177 * Logs the current or last displayed subtitle together with filename |
178 * and time information to ~/.mplayer/subtitle_log | |
179 * | |
180 * Intended purpose is to allow convenient marking of bogus subtitles | |
181 * which need to be fixed while watching the movie. | |
182 */ | |
183 | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
184 static void log_sub(void) |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
185 { |
22478 | 186 char *fname; |
187 FILE *f; | |
188 int i; | |
189 | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
190 if (subdata == NULL || vo_sub_last == NULL) |
31077 | 191 return; |
22478 | 192 fname = get_path("subtitle_log"); |
193 f = fopen(fname, "a"); | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
194 if (!f) |
31077 | 195 return; |
22478 | 196 fprintf(f, "----------------------------------------------------------\n"); |
197 if (subdata->sub_uses_time) { | |
31077 | 198 fprintf(f, |
199 "N: %s S: %02ld:%02ld:%02ld.%02ld E: %02ld:%02ld:%02ld.%02ld\n", | |
200 filename, vo_sub_last->start / 360000, | |
201 (vo_sub_last->start / 6000) % 60, | |
202 (vo_sub_last->start / 100) % 60, vo_sub_last->start % 100, | |
203 vo_sub_last->end / 360000, (vo_sub_last->end / 6000) % 60, | |
204 (vo_sub_last->end / 100) % 60, vo_sub_last->end % 100); | |
22478 | 205 } else { |
31077 | 206 fprintf(f, "N: %s S: %ld E: %ld\n", filename, vo_sub_last->start, |
207 vo_sub_last->end); | |
22478 | 208 } |
209 for (i = 0; i < vo_sub_last->lines; i++) { | |
31077 | 210 fprintf(f, "%s\n", vo_sub_last->text[i]); |
22478 | 211 } |
212 fclose(f); | |
213 } | |
214 | |
215 | |
216 /// \defgroup Properties | |
217 ///@{ | |
218 | |
219 /// \defgroup GeneralProperties General properties | |
220 /// \ingroup Properties | |
221 ///@{ | |
222 | |
223 /// OSD level (RW) | |
31156 | 224 static int mp_property_osdlevel(m_option_t *prop, int action, void *arg, |
225 MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
226 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
227 return m_property_choice(prop, action, arg, &osd_level); |
22478 | 228 } |
229 | |
23727 | 230 /// Loop (RW) |
31156 | 231 static int mp_property_loop(m_option_t *prop, int action, void *arg, |
232 MPContext *mpctx) | |
23727 | 233 { |
234 switch (action) { | |
235 case M_PROPERTY_PRINT: | |
236 if (!arg) return M_PROPERTY_ERROR; | |
237 if (mpctx->loop_times < 0) | |
238 *(char**)arg = strdup("off"); | |
239 else if (mpctx->loop_times == 0) | |
240 *(char**)arg = strdup("inf"); | |
241 else | |
242 break; | |
243 return M_PROPERTY_OK; | |
244 } | |
245 return m_property_int_range(prop, action, arg, &mpctx->loop_times); | |
246 } | |
247 | |
22478 | 248 /// Playback speed (RW) |
31156 | 249 static int mp_property_playback_speed(m_option_t *prop, int action, |
250 void *arg, MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
251 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
252 switch (action) { |
22478 | 253 case M_PROPERTY_SET: |
31077 | 254 if (!arg) |
255 return M_PROPERTY_ERROR; | |
256 M_PROPERTY_CLAMP(prop, *(float *) arg); | |
257 playback_speed = *(float *) arg; | |
32561
17bb5a38ae2e
build_afilter_chain is not safe to use directly, thus make it
reimar
parents:
32511
diff
changeset
|
258 reinit_audio_chain(); |
31077 | 259 return M_PROPERTY_OK; |
22478 | 260 case M_PROPERTY_STEP_UP: |
261 case M_PROPERTY_STEP_DOWN: | |
31077 | 262 playback_speed += (arg ? *(float *) arg : 0.1) * |
263 (action == M_PROPERTY_STEP_DOWN ? -1 : 1); | |
264 M_PROPERTY_CLAMP(prop, playback_speed); | |
32561
17bb5a38ae2e
build_afilter_chain is not safe to use directly, thus make it
reimar
parents:
32511
diff
changeset
|
265 reinit_audio_chain(); |
31077 | 266 return M_PROPERTY_OK; |
22478 | 267 } |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
268 return m_property_float_range(prop, action, arg, &playback_speed); |
22478 | 269 } |
270 | |
271 /// filename with path (RO) | |
31156 | 272 static int mp_property_path(m_option_t *prop, int action, void *arg, |
273 MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
274 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
275 return m_property_string_ro(prop, action, arg, filename); |
22478 | 276 } |
277 | |
278 /// filename without path (RO) | |
31156 | 279 static int mp_property_filename(m_option_t *prop, int action, void *arg, |
280 MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
281 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
282 char *f; |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
283 if (!filename) |
31077 | 284 return M_PROPERTY_UNAVAILABLE; |
32588 | 285 f = (char *)mp_basename(filename); |
286 if (!*f) | |
31077 | 287 f = filename; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
288 return m_property_string_ro(prop, action, arg, f); |
22478 | 289 } |
290 | |
291 /// Demuxer name (RO) | |
31156 | 292 static int mp_property_demuxer(m_option_t *prop, int action, void *arg, |
293 MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
294 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
295 if (!mpctx->demuxer) |
31077 | 296 return M_PROPERTY_UNAVAILABLE; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
297 return m_property_string_ro(prop, action, arg, |
31077 | 298 (char *) mpctx->demuxer->desc->name); |
22478 | 299 } |
300 | |
301 /// Position in the stream (RW) | |
31156 | 302 static int mp_property_stream_pos(m_option_t *prop, int action, void *arg, |
303 MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
304 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
305 if (!mpctx->demuxer || !mpctx->demuxer->stream) |
31077 | 306 return M_PROPERTY_UNAVAILABLE; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
307 if (!arg) |
31077 | 308 return M_PROPERTY_ERROR; |
22478 | 309 switch (action) { |
310 case M_PROPERTY_GET: | |
31077 | 311 *(off_t *) arg = stream_tell(mpctx->demuxer->stream); |
312 return M_PROPERTY_OK; | |
22478 | 313 case M_PROPERTY_SET: |
31077 | 314 M_PROPERTY_CLAMP(prop, *(off_t *) arg); |
315 stream_seek(mpctx->demuxer->stream, *(off_t *) arg); | |
316 return M_PROPERTY_OK; | |
22478 | 317 } |
318 return M_PROPERTY_NOT_IMPLEMENTED; | |
319 } | |
320 | |
321 /// Stream start offset (RO) | |
31156 | 322 static int mp_property_stream_start(m_option_t *prop, int action, |
323 void *arg, MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
324 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
325 if (!mpctx->demuxer || !mpctx->demuxer->stream) |
31077 | 326 return M_PROPERTY_UNAVAILABLE; |
22478 | 327 switch (action) { |
328 case M_PROPERTY_GET: | |
31077 | 329 *(off_t *) arg = mpctx->demuxer->stream->start_pos; |
330 return M_PROPERTY_OK; | |
22478 | 331 } |
332 return M_PROPERTY_NOT_IMPLEMENTED; | |
333 } | |
334 | |
335 /// Stream end offset (RO) | |
31156 | 336 static int mp_property_stream_end(m_option_t *prop, int action, void *arg, |
337 MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
338 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
339 if (!mpctx->demuxer || !mpctx->demuxer->stream) |
31077 | 340 return M_PROPERTY_UNAVAILABLE; |
22478 | 341 switch (action) { |
342 case M_PROPERTY_GET: | |
31077 | 343 *(off_t *) arg = mpctx->demuxer->stream->end_pos; |
344 return M_PROPERTY_OK; | |
22478 | 345 } |
346 return M_PROPERTY_NOT_IMPLEMENTED; | |
347 } | |
348 | |
349 /// Stream length (RO) | |
31156 | 350 static int mp_property_stream_length(m_option_t *prop, int action, |
351 void *arg, MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
352 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
353 if (!mpctx->demuxer || !mpctx->demuxer->stream) |
31077 | 354 return M_PROPERTY_UNAVAILABLE; |
22478 | 355 switch (action) { |
356 case M_PROPERTY_GET: | |
31077 | 357 *(off_t *) arg = |
358 mpctx->demuxer->stream->end_pos - mpctx->demuxer->stream->start_pos; | |
359 return M_PROPERTY_OK; | |
22478 | 360 } |
361 return M_PROPERTY_NOT_IMPLEMENTED; | |
362 } | |
363 | |
31728 | 364 /// Current stream position in seconds (RO) |
365 static int mp_property_stream_time_pos(m_option_t *prop, int action, | |
366 void *arg, MPContext *mpctx) | |
367 { | |
368 if (!mpctx->demuxer || mpctx->demuxer->stream_pts == MP_NOPTS_VALUE) | |
369 return M_PROPERTY_UNAVAILABLE; | |
370 | |
371 return m_property_time_ro(prop, action, arg, mpctx->demuxer->stream_pts); | |
372 } | |
373 | |
374 | |
22478 | 375 /// Media length in seconds (RO) |
31156 | 376 static int mp_property_length(m_option_t *prop, int action, void *arg, |
377 MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
378 { |
22478 | 379 double len; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
380 |
22478 | 381 if (!mpctx->demuxer || |
31077 | 382 !(int) (len = demuxer_get_time_length(mpctx->demuxer))) |
383 return M_PROPERTY_UNAVAILABLE; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
384 |
23416
ae4237717601
Move the time printing code out of the length property.
albeu
parents:
23412
diff
changeset
|
385 return m_property_time_ro(prop, action, arg, len); |
22478 | 386 } |
387 | |
23418 | 388 /// Current position in percent (RW) |
31156 | 389 static int mp_property_percent_pos(m_option_t *prop, int action, |
390 void *arg, MPContext *mpctx) { | |
23418 | 391 int pos; |
392 | |
393 if (!mpctx->demuxer) | |
31077 | 394 return M_PROPERTY_UNAVAILABLE; |
23418 | 395 |
396 switch(action) { | |
397 case M_PROPERTY_SET: | |
398 if(!arg) return M_PROPERTY_ERROR; | |
399 M_PROPERTY_CLAMP(prop, *(int*)arg); | |
400 pos = *(int*)arg; | |
401 break; | |
402 case M_PROPERTY_STEP_UP: | |
403 case M_PROPERTY_STEP_DOWN: | |
404 pos = demuxer_get_percent_pos(mpctx->demuxer); | |
405 pos += (arg ? *(int*)arg : 10) * | |
406 (action == M_PROPERTY_STEP_UP ? 1 : -1); | |
407 M_PROPERTY_CLAMP(prop, pos); | |
408 break; | |
409 default: | |
410 return m_property_int_ro(prop, action, arg, | |
411 demuxer_get_percent_pos(mpctx->demuxer)); | |
412 } | |
413 | |
25884
f6697d25b040
More places that should use SEEK_ABSOLUTE / SEEK_FACTOR
reimar
parents:
25878
diff
changeset
|
414 abs_seek_pos = SEEK_ABSOLUTE | SEEK_FACTOR; |
23418 | 415 rel_seek_secs = pos / 100.0; |
416 return M_PROPERTY_OK; | |
417 } | |
418 | |
419 /// Current position in seconds (RW) | |
31156 | 420 static int mp_property_time_pos(m_option_t *prop, int action, |
421 void *arg, MPContext *mpctx) { | |
23418 | 422 if (!(mpctx->sh_video || (mpctx->sh_audio && mpctx->audio_out))) |
423 return M_PROPERTY_UNAVAILABLE; | |
424 | |
425 switch(action) { | |
426 case M_PROPERTY_SET: | |
427 if(!arg) return M_PROPERTY_ERROR; | |
428 M_PROPERTY_CLAMP(prop, *(double*)arg); | |
25884
f6697d25b040
More places that should use SEEK_ABSOLUTE / SEEK_FACTOR
reimar
parents:
25878
diff
changeset
|
429 abs_seek_pos = SEEK_ABSOLUTE; |
23418 | 430 rel_seek_secs = *(double*)arg; |
431 return M_PROPERTY_OK; | |
432 case M_PROPERTY_STEP_UP: | |
433 case M_PROPERTY_STEP_DOWN: | |
434 rel_seek_secs += (arg ? *(double*)arg : 10.0) * | |
435 (action == M_PROPERTY_STEP_UP ? 1.0 : -1.0); | |
436 return M_PROPERTY_OK; | |
437 } | |
438 return m_property_time_ro(prop, action, arg, | |
439 mpctx->sh_video ? mpctx->sh_video->pts : | |
440 playing_audio_pts(mpctx->sh_audio, | |
441 mpctx->d_audio, | |
442 mpctx->audio_out)); | |
443 } | |
444 | |
25363 | 445 /// Current chapter (RW) |
446 static int mp_property_chapter(m_option_t *prop, int action, void *arg, | |
447 MPContext *mpctx) | |
448 { | |
27382
aff29422c652
Fixes unsafe 'chapter' command with get_property() call.
ben
parents:
27381
diff
changeset
|
449 int chapter = -1; |
25363 | 450 float next_pts = 0; |
451 int chapter_num; | |
452 int step_all; | |
453 char *chapter_name = NULL; | |
454 | |
27382
aff29422c652
Fixes unsafe 'chapter' command with get_property() call.
ben
parents:
27381
diff
changeset
|
455 if (mpctx->demuxer) |
27383 | 456 chapter = demuxer_get_current_chapter(mpctx->demuxer); |
25462
3e033aabc9d2
Combine common code for check whether chapter is available.
ulion
parents:
25461
diff
changeset
|
457 if (chapter < 0) |
3e033aabc9d2
Combine common code for check whether chapter is available.
ulion
parents:
25461
diff
changeset
|
458 return M_PROPERTY_UNAVAILABLE; |
3e033aabc9d2
Combine common code for check whether chapter is available.
ulion
parents:
25461
diff
changeset
|
459 |
25363 | 460 switch (action) { |
461 case M_PROPERTY_GET: | |
462 if (!arg) | |
463 return M_PROPERTY_ERROR; | |
25402
f8f596bad3bd
Modified for using chapter property for $(NAME:TEXT) or ?(NAME:TEXT).
ulion
parents:
25377
diff
changeset
|
464 *(int *) arg = chapter; |
25363 | 465 return M_PROPERTY_OK; |
466 case M_PROPERTY_PRINT: { | |
467 if (!arg) | |
468 return M_PROPERTY_ERROR; | |
469 chapter_name = demuxer_chapter_display_name(mpctx->demuxer, chapter); | |
470 if (!chapter_name) | |
471 return M_PROPERTY_UNAVAILABLE; | |
472 *(char **) arg = chapter_name; | |
473 return M_PROPERTY_OK; | |
474 } | |
475 case M_PROPERTY_SET: | |
476 if (!arg) | |
477 return M_PROPERTY_ERROR; | |
478 M_PROPERTY_CLAMP(prop, *(int*)arg); | |
29365
794a26e68c2c
Make set_property chapter 0-based like all other chapter-related
reimar
parents:
29333
diff
changeset
|
479 step_all = *(int *)arg - chapter; |
25363 | 480 chapter += step_all; |
481 break; | |
482 case M_PROPERTY_STEP_UP: | |
483 case M_PROPERTY_STEP_DOWN: { | |
484 step_all = (arg && *(int*)arg != 0 ? *(int*)arg : 1) | |
485 * (action == M_PROPERTY_STEP_UP ? 1 : -1); | |
486 chapter += step_all; | |
487 if (chapter < 0) | |
488 chapter = 0; | |
489 break; | |
490 } | |
491 default: | |
492 return M_PROPERTY_NOT_IMPLEMENTED; | |
493 } | |
494 rel_seek_secs = 0; | |
495 abs_seek_pos = 0; | |
496 chapter = demuxer_seek_chapter(mpctx->demuxer, chapter, 1, | |
497 &next_pts, &chapter_num, &chapter_name); | |
498 if (chapter >= 0) { | |
499 if (next_pts > -1.0) { | |
25884
f6697d25b040
More places that should use SEEK_ABSOLUTE / SEEK_FACTOR
reimar
parents:
25878
diff
changeset
|
500 abs_seek_pos = SEEK_ABSOLUTE; |
25363 | 501 rel_seek_secs = next_pts; |
502 } | |
503 if (chapter_name) | |
504 set_osd_msg(OSD_MSG_TEXT, 1, osd_duration, | |
505 MSGTR_OSDChapter, chapter + 1, chapter_name); | |
506 } | |
507 else if (step_all > 0) | |
508 rel_seek_secs = 1000000000.; | |
509 else | |
510 set_osd_msg(OSD_MSG_TEXT, 1, osd_duration, | |
511 MSGTR_OSDChapter, 0, MSGTR_Unknown); | |
32511
b39155e98ac3
Remove some useless NULL pointer checks before invoking free() on the pointer.
diego
parents:
32467
diff
changeset
|
512 free(chapter_name); |
25363 | 513 return M_PROPERTY_OK; |
514 } | |
515 | |
27635
22bdd7ba8892
slave command to get the number of chapters; patch by Kevin DeKorte - kdekorte gmail com
nicodvb
parents:
27457
diff
changeset
|
516 /// Number of chapters in file |
22bdd7ba8892
slave command to get the number of chapters; patch by Kevin DeKorte - kdekorte gmail com
nicodvb
parents:
27457
diff
changeset
|
517 static int mp_property_chapters(m_option_t *prop, int action, void *arg, |
22bdd7ba8892
slave command to get the number of chapters; patch by Kevin DeKorte - kdekorte gmail com
nicodvb
parents:
27457
diff
changeset
|
518 MPContext *mpctx) |
22bdd7ba8892
slave command to get the number of chapters; patch by Kevin DeKorte - kdekorte gmail com
nicodvb
parents:
27457
diff
changeset
|
519 { |
22bdd7ba8892
slave command to get the number of chapters; patch by Kevin DeKorte - kdekorte gmail com
nicodvb
parents:
27457
diff
changeset
|
520 if (!mpctx->demuxer) |
22bdd7ba8892
slave command to get the number of chapters; patch by Kevin DeKorte - kdekorte gmail com
nicodvb
parents:
27457
diff
changeset
|
521 return M_PROPERTY_UNAVAILABLE; |
22bdd7ba8892
slave command to get the number of chapters; patch by Kevin DeKorte - kdekorte gmail com
nicodvb
parents:
27457
diff
changeset
|
522 if (mpctx->demuxer->num_chapters == 0) |
22bdd7ba8892
slave command to get the number of chapters; patch by Kevin DeKorte - kdekorte gmail com
nicodvb
parents:
27457
diff
changeset
|
523 stream_control(mpctx->demuxer->stream, STREAM_CTRL_GET_NUM_CHAPTERS, &mpctx->demuxer->num_chapters); |
22bdd7ba8892
slave command to get the number of chapters; patch by Kevin DeKorte - kdekorte gmail com
nicodvb
parents:
27457
diff
changeset
|
524 return m_property_int_ro(prop, action, arg, mpctx->demuxer->num_chapters); |
22bdd7ba8892
slave command to get the number of chapters; patch by Kevin DeKorte - kdekorte gmail com
nicodvb
parents:
27457
diff
changeset
|
525 } |
22bdd7ba8892
slave command to get the number of chapters; patch by Kevin DeKorte - kdekorte gmail com
nicodvb
parents:
27457
diff
changeset
|
526 |
25577
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
527 /// Current dvd angle (RW) |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
528 static int mp_property_angle(m_option_t *prop, int action, void *arg, |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
529 MPContext *mpctx) |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
530 { |
27380
843db879a6b2
Fixes unsafe 'angle' command with get_property() call.
ben
parents:
27379
diff
changeset
|
531 int angle = -1; |
25577
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
532 int angles; |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
533 char *angle_name = NULL; |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
534 |
27380
843db879a6b2
Fixes unsafe 'angle' command with get_property() call.
ben
parents:
27379
diff
changeset
|
535 if (mpctx->demuxer) |
27381 | 536 angle = demuxer_get_current_angle(mpctx->demuxer); |
25577
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
537 if (angle < 0) |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
538 return M_PROPERTY_UNAVAILABLE; |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
539 angles = demuxer_angles_count(mpctx->demuxer); |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
540 if (angles <= 1) |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
541 return M_PROPERTY_UNAVAILABLE; |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
542 |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
543 switch (action) { |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
544 case M_PROPERTY_GET: |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
545 if (!arg) |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
546 return M_PROPERTY_ERROR; |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
547 *(int *) arg = angle; |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
548 return M_PROPERTY_OK; |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
549 case M_PROPERTY_PRINT: { |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
550 if (!arg) |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
551 return M_PROPERTY_ERROR; |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
552 angle_name = calloc(1, 64); |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
553 if (!angle_name) |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
554 return M_PROPERTY_UNAVAILABLE; |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
555 snprintf(angle_name, 64, "%d/%d", angle, angles); |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
556 *(char **) arg = angle_name; |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
557 return M_PROPERTY_OK; |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
558 } |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
559 case M_PROPERTY_SET: |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
560 if (!arg) |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
561 return M_PROPERTY_ERROR; |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
562 angle = *(int *)arg; |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
563 M_PROPERTY_CLAMP(prop, angle); |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
564 break; |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
565 case M_PROPERTY_STEP_UP: |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
566 case M_PROPERTY_STEP_DOWN: { |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
567 int step = 0; |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
568 if(arg) |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
569 step = *(int*)arg; |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
570 if(!step) |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
571 step = 1; |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
572 step *= (action == M_PROPERTY_STEP_UP ? 1 : -1); |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
573 angle += step; |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
574 if (angle < 1) //cycle |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
575 angle = angles; |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
576 break; |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
577 } |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
578 default: |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
579 return M_PROPERTY_NOT_IMPLEMENTED; |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
580 } |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
581 angle = demuxer_set_angle(mpctx->demuxer, angle); |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
582 set_osd_msg(OSD_MSG_TEXT, 1, osd_duration, |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
583 MSGTR_OSDAngle, angle, angles); |
32511
b39155e98ac3
Remove some useless NULL pointer checks before invoking free() on the pointer.
diego
parents:
32467
diff
changeset
|
584 free(angle_name); |
25577
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
585 return M_PROPERTY_OK; |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
586 } |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
587 |
23394
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
588 /// Demuxer meta data |
31156 | 589 static int mp_property_metadata(m_option_t *prop, int action, void *arg, |
590 MPContext *mpctx) { | |
23394
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
591 m_property_action_t* ka; |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
592 char* meta; |
31200 | 593 static const m_option_t key_type = |
23394
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
594 { "metadata", NULL, CONF_TYPE_STRING, 0, 0, 0, NULL }; |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
595 if (!mpctx->demuxer) |
31077 | 596 return M_PROPERTY_UNAVAILABLE; |
23394
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
597 |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
598 switch(action) { |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
599 case M_PROPERTY_GET: |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
600 if(!arg) return M_PROPERTY_ERROR; |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
601 *(char***)arg = mpctx->demuxer->info; |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
602 return M_PROPERTY_OK; |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
603 case M_PROPERTY_KEY_ACTION: |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
604 if(!arg) return M_PROPERTY_ERROR; |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
605 ka = arg; |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
606 if(!(meta = demux_info_get(mpctx->demuxer,ka->key))) |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
607 return M_PROPERTY_UNKNOWN; |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
608 switch(ka->action) { |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
609 case M_PROPERTY_GET: |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
610 if(!ka->arg) return M_PROPERTY_ERROR; |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
611 *(char**)ka->arg = meta; |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
612 return M_PROPERTY_OK; |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
613 case M_PROPERTY_GET_TYPE: |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
614 if(!ka->arg) return M_PROPERTY_ERROR; |
31729 | 615 *(const m_option_t**)ka->arg = &key_type; |
23394
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
616 return M_PROPERTY_OK; |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
617 } |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
618 } |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
619 return M_PROPERTY_NOT_IMPLEMENTED; |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
620 } |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
621 |
31156 | 622 static int mp_property_pause(m_option_t *prop, int action, void *arg, |
623 MPContext *mpctx) | |
27648
427fec163870
Add a "pause" property to allow checking if MPlayer is paused.
reimar
parents:
27635
diff
changeset
|
624 { |
427fec163870
Add a "pause" property to allow checking if MPlayer is paused.
reimar
parents:
27635
diff
changeset
|
625 return m_property_flag_ro(prop, action, arg, mpctx->osd_function == OSD_PAUSE); |
427fec163870
Add a "pause" property to allow checking if MPlayer is paused.
reimar
parents:
27635
diff
changeset
|
626 } |
427fec163870
Add a "pause" property to allow checking if MPlayer is paused.
reimar
parents:
27635
diff
changeset
|
627 |
23394
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
628 |
22478 | 629 ///@} |
630 | |
631 /// \defgroup AudioProperties Audio properties | |
632 /// \ingroup Properties | |
633 ///@{ | |
634 | |
635 /// Volume (RW) | |
31156 | 636 static int mp_property_volume(m_option_t *prop, int action, void *arg, |
637 MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
638 { |
22478 | 639 |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
640 if (!mpctx->sh_audio) |
31077 | 641 return M_PROPERTY_UNAVAILABLE; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
642 |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
643 switch (action) { |
22478 | 644 case M_PROPERTY_GET: |
31077 | 645 if (!arg) |
646 return M_PROPERTY_ERROR; | |
647 mixer_getbothvolume(&mpctx->mixer, arg); | |
648 return M_PROPERTY_OK; | |
22478 | 649 case M_PROPERTY_PRINT:{ |
31077 | 650 float vol; |
651 if (!arg) | |
652 return M_PROPERTY_ERROR; | |
653 mixer_getbothvolume(&mpctx->mixer, &vol); | |
654 return m_property_float_range(prop, action, arg, &vol); | |
655 } | |
22478 | 656 case M_PROPERTY_STEP_UP: |
657 case M_PROPERTY_STEP_DOWN: | |
658 case M_PROPERTY_SET: | |
31077 | 659 break; |
22478 | 660 default: |
31077 | 661 return M_PROPERTY_NOT_IMPLEMENTED; |
22478 | 662 } |
663 | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
664 if (mpctx->edl_muted) |
31077 | 665 return M_PROPERTY_DISABLED; |
22478 | 666 mpctx->user_muted = 0; |
667 | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
668 switch (action) { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
669 case M_PROPERTY_SET: |
31077 | 670 if (!arg) |
671 return M_PROPERTY_ERROR; | |
672 M_PROPERTY_CLAMP(prop, *(float *) arg); | |
673 mixer_setvolume(&mpctx->mixer, *(float *) arg, *(float *) arg); | |
674 return M_PROPERTY_OK; | |
22478 | 675 case M_PROPERTY_STEP_UP: |
31077 | 676 if (arg && *(float *) arg <= 0) |
677 mixer_decvolume(&mpctx->mixer); | |
678 else | |
679 mixer_incvolume(&mpctx->mixer); | |
680 return M_PROPERTY_OK; | |
22478 | 681 case M_PROPERTY_STEP_DOWN: |
31077 | 682 if (arg && *(float *) arg <= 0) |
683 mixer_incvolume(&mpctx->mixer); | |
684 else | |
685 mixer_decvolume(&mpctx->mixer); | |
686 return M_PROPERTY_OK; | |
22478 | 687 } |
688 return M_PROPERTY_NOT_IMPLEMENTED; | |
689 } | |
690 | |
691 /// Mute (RW) | |
31156 | 692 static int mp_property_mute(m_option_t *prop, int action, void *arg, |
693 MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
694 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
695 |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
696 if (!mpctx->sh_audio) |
31077 | 697 return M_PROPERTY_UNAVAILABLE; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
698 |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
699 switch (action) { |
22478 | 700 case M_PROPERTY_SET: |
31077 | 701 if (mpctx->edl_muted) |
702 return M_PROPERTY_DISABLED; | |
703 if (!arg) | |
704 return M_PROPERTY_ERROR; | |
705 if ((!!*(int *) arg) != mpctx->mixer.muted) | |
706 mixer_mute(&mpctx->mixer); | |
707 mpctx->user_muted = mpctx->mixer.muted; | |
708 return M_PROPERTY_OK; | |
22478 | 709 case M_PROPERTY_STEP_UP: |
710 case M_PROPERTY_STEP_DOWN: | |
31077 | 711 if (mpctx->edl_muted) |
712 return M_PROPERTY_DISABLED; | |
713 mixer_mute(&mpctx->mixer); | |
714 mpctx->user_muted = mpctx->mixer.muted; | |
715 return M_PROPERTY_OK; | |
22478 | 716 case M_PROPERTY_PRINT: |
31077 | 717 if (!arg) |
718 return M_PROPERTY_ERROR; | |
719 if (mpctx->edl_muted) { | |
720 *(char **) arg = strdup(MSGTR_EnabledEdl); | |
721 return M_PROPERTY_OK; | |
722 } | |
22478 | 723 default: |
31077 | 724 return m_property_flag(prop, action, arg, &mpctx->mixer.muted); |
22478 | 725 |
726 } | |
727 } | |
728 | |
729 /// Audio delay (RW) | |
31156 | 730 static int mp_property_audio_delay(m_option_t *prop, int action, |
731 void *arg, MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
732 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
733 if (!(mpctx->sh_audio && mpctx->sh_video)) |
31077 | 734 return M_PROPERTY_UNAVAILABLE; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
735 switch (action) { |
22478 | 736 case M_PROPERTY_SET: |
737 case M_PROPERTY_STEP_UP: | |
25567
ca62d466a9fc
Fix property audio_delay bug when step up/down with arg value NULL.
ulion
parents:
25495
diff
changeset
|
738 case M_PROPERTY_STEP_DOWN: { |
31077 | 739 int ret; |
740 float delay = audio_delay; | |
741 ret = m_property_delay(prop, action, arg, &audio_delay); | |
742 if (ret != M_PROPERTY_OK) | |
743 return ret; | |
744 if (mpctx->sh_audio) | |
745 mpctx->delay -= audio_delay - delay; | |
746 } | |
747 return M_PROPERTY_OK; | |
22478 | 748 default: |
31077 | 749 return m_property_delay(prop, action, arg, &audio_delay); |
22478 | 750 } |
751 } | |
752 | |
753 /// Audio codec tag (RO) | |
31156 | 754 static int mp_property_audio_format(m_option_t *prop, int action, |
755 void *arg, MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
756 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
757 if (!mpctx->sh_audio) |
31077 | 758 return M_PROPERTY_UNAVAILABLE; |
22478 | 759 return m_property_int_ro(prop, action, arg, mpctx->sh_audio->format); |
760 } | |
761 | |
23394
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
762 /// Audio codec name (RO) |
31156 | 763 static int mp_property_audio_codec(m_option_t *prop, int action, |
764 void *arg, MPContext *mpctx) | |
23394
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
765 { |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
766 if (!mpctx->sh_audio || !mpctx->sh_audio->codec) |
31077 | 767 return M_PROPERTY_UNAVAILABLE; |
23394
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
768 return m_property_string_ro(prop, action, arg, mpctx->sh_audio->codec->name); |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
769 } |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
770 |
22478 | 771 /// Audio bitrate (RO) |
31156 | 772 static int mp_property_audio_bitrate(m_option_t *prop, int action, |
773 void *arg, MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
774 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
775 if (!mpctx->sh_audio) |
31077 | 776 return M_PROPERTY_UNAVAILABLE; |
23394
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
777 return m_property_bitrate(prop, action, arg, mpctx->sh_audio->i_bps); |
22478 | 778 } |
779 | |
780 /// Samplerate (RO) | |
31156 | 781 static int mp_property_samplerate(m_option_t *prop, int action, void *arg, |
782 MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
783 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
784 if (!mpctx->sh_audio) |
31077 | 785 return M_PROPERTY_UNAVAILABLE; |
23396 | 786 switch(action) { |
787 case M_PROPERTY_PRINT: | |
788 if(!arg) return M_PROPERTY_ERROR; | |
789 *(char**)arg = malloc(16); | |
790 sprintf(*(char**)arg,"%d kHz",mpctx->sh_audio->samplerate/1000); | |
791 return M_PROPERTY_OK; | |
792 } | |
22478 | 793 return m_property_int_ro(prop, action, arg, mpctx->sh_audio->samplerate); |
794 } | |
795 | |
796 /// Number of channels (RO) | |
31156 | 797 static int mp_property_channels(m_option_t *prop, int action, void *arg, |
798 MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
799 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
800 if (!mpctx->sh_audio) |
31077 | 801 return M_PROPERTY_UNAVAILABLE; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
802 switch (action) { |
22478 | 803 case M_PROPERTY_PRINT: |
31077 | 804 if (!arg) |
805 return M_PROPERTY_ERROR; | |
806 switch (mpctx->sh_audio->channels) { | |
807 case 1: | |
808 *(char **) arg = strdup("mono"); | |
809 break; | |
810 case 2: | |
811 *(char **) arg = strdup("stereo"); | |
812 break; | |
813 default: | |
814 *(char **) arg = malloc(32); | |
815 sprintf(*(char **) arg, "%d channels", mpctx->sh_audio->channels); | |
816 } | |
817 return M_PROPERTY_OK; | |
22478 | 818 } |
819 return m_property_int_ro(prop, action, arg, mpctx->sh_audio->channels); | |
820 } | |
821 | |
23568 | 822 /// Balance (RW) |
31156 | 823 static int mp_property_balance(m_option_t *prop, int action, void *arg, |
824 MPContext *mpctx) | |
23568 | 825 { |
826 float bal; | |
827 | |
828 if (!mpctx->sh_audio || mpctx->sh_audio->channels < 2) | |
31077 | 829 return M_PROPERTY_UNAVAILABLE; |
23568 | 830 |
831 switch (action) { | |
832 case M_PROPERTY_GET: | |
31077 | 833 if (!arg) |
834 return M_PROPERTY_ERROR; | |
835 mixer_getbalance(&mpctx->mixer, arg); | |
836 return M_PROPERTY_OK; | |
23568 | 837 case M_PROPERTY_PRINT: { |
31077 | 838 char** str = arg; |
839 if (!arg) | |
840 return M_PROPERTY_ERROR; | |
841 mixer_getbalance(&mpctx->mixer, &bal); | |
842 if (bal == 0.f) | |
843 *str = strdup("center"); | |
844 else if (bal == -1.f) | |
845 *str = strdup("left only"); | |
846 else if (bal == 1.f) | |
847 *str = strdup("right only"); | |
848 else { | |
849 unsigned right = (bal + 1.f) / 2.f * 100.f; | |
850 *str = malloc(sizeof("left xxx%, right xxx%")); | |
851 sprintf(*str, "left %d%%, right %d%%", 100 - right, right); | |
852 } | |
853 return M_PROPERTY_OK; | |
854 } | |
23568 | 855 case M_PROPERTY_STEP_UP: |
856 case M_PROPERTY_STEP_DOWN: | |
31077 | 857 mixer_getbalance(&mpctx->mixer, &bal); |
858 bal += (arg ? *(float*)arg : .1f) * | |
859 (action == M_PROPERTY_STEP_UP ? 1.f : -1.f); | |
860 M_PROPERTY_CLAMP(prop, bal); | |
861 mixer_setbalance(&mpctx->mixer, bal); | |
862 return M_PROPERTY_OK; | |
23568 | 863 case M_PROPERTY_SET: |
31077 | 864 if (!arg) |
865 return M_PROPERTY_ERROR; | |
866 M_PROPERTY_CLAMP(prop, *(float*)arg); | |
867 mixer_setbalance(&mpctx->mixer, *(float*)arg); | |
868 return M_PROPERTY_OK; | |
23568 | 869 } |
870 return M_PROPERTY_NOT_IMPLEMENTED; | |
871 } | |
872 | |
22478 | 873 /// Selected audio id (RW) |
31156 | 874 static int mp_property_audio(m_option_t *prop, int action, void *arg, |
875 MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
876 { |
30082
446f2ea148a4
Return the actually playing audio/video id for get_property, not the one
reimar
parents:
30080
diff
changeset
|
877 int current_id, tmp; |
30079
4bd9b89b2b85
Use the same condition to decide if the audio/video id property is
reimar
parents:
30078
diff
changeset
|
878 if (!mpctx->demuxer || !mpctx->demuxer->audio) |
4bd9b89b2b85
Use the same condition to decide if the audio/video id property is
reimar
parents:
30078
diff
changeset
|
879 return M_PROPERTY_UNAVAILABLE; |
30082
446f2ea148a4
Return the actually playing audio/video id for get_property, not the one
reimar
parents:
30080
diff
changeset
|
880 current_id = mpctx->demuxer->audio->id; |
22478 | 881 |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
882 switch (action) { |
22478 | 883 case M_PROPERTY_GET: |
31077 | 884 if (!arg) |
885 return M_PROPERTY_ERROR; | |
886 *(int *) arg = current_id; | |
887 return M_PROPERTY_OK; | |
22478 | 888 case M_PROPERTY_PRINT: |
31077 | 889 if (!arg) |
890 return M_PROPERTY_ERROR; | |
22478 | 891 |
31077 | 892 if (current_id < 0) |
893 *(char **) arg = strdup(MSGTR_Disabled); | |
894 else { | |
895 char lang[40] = MSGTR_Unknown; | |
26083
19fa7a56ed04
Fill sh_audio_t.lang in lavf and mkv demuxers. Use it for printing audio track
eugeni
parents:
25962
diff
changeset
|
896 sh_audio_t* sh = mpctx->sh_audio; |
19fa7a56ed04
Fill sh_audio_t.lang in lavf and mkv demuxers. Use it for printing audio track
eugeni
parents:
25962
diff
changeset
|
897 if (sh && sh->lang) |
19fa7a56ed04
Fill sh_audio_t.lang in lavf and mkv demuxers. Use it for printing audio track
eugeni
parents:
25962
diff
changeset
|
898 av_strlcpy(lang, sh->lang, 40); |
31877
e30fe0cb79cd
Add incomplete clipinf reading support to display audio
reimar
parents:
31805
diff
changeset
|
899 // TODO: use a proper STREAM_CTRL instead of this mess |
e30fe0cb79cd
Add incomplete clipinf reading support to display audio
reimar
parents:
31805
diff
changeset
|
900 else if (sh && mpctx->stream->type == STREAMTYPE_BD) { |
e30fe0cb79cd
Add incomplete clipinf reading support to display audio
reimar
parents:
31805
diff
changeset
|
901 const char *l = bd_lang_from_id(mpctx->stream, sh->aid); |
e30fe0cb79cd
Add incomplete clipinf reading support to display audio
reimar
parents:
31805
diff
changeset
|
902 if (l) |
e30fe0cb79cd
Add incomplete clipinf reading support to display audio
reimar
parents:
31805
diff
changeset
|
903 av_strlcpy(lang, l, sizeof(lang)); |
e30fe0cb79cd
Add incomplete clipinf reading support to display audio
reimar
parents:
31805
diff
changeset
|
904 } |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
905 #ifdef CONFIG_DVDREAD |
31077 | 906 else if (mpctx->stream->type == STREAMTYPE_DVD) { |
907 int code = dvd_lang_from_aid(mpctx->stream, current_id); | |
908 if (code) { | |
909 lang[0] = code >> 8; | |
910 lang[1] = code; | |
911 lang[2] = 0; | |
912 } | |
913 } | |
22478 | 914 #endif |
915 | |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
916 #ifdef CONFIG_DVDNAV |
31077 | 917 else if (mpctx->stream->type == STREAMTYPE_DVDNAV) |
918 mp_dvdnav_lang_from_aid(mpctx->stream, current_id, lang); | |
22478 | 919 #endif |
31077 | 920 *(char **) arg = malloc(64); |
921 snprintf(*(char **) arg, 64, "(%d) %s", current_id, lang); | |
922 } | |
923 return M_PROPERTY_OK; | |
22478 | 924 |
925 case M_PROPERTY_STEP_UP: | |
926 case M_PROPERTY_SET: | |
31077 | 927 if (action == M_PROPERTY_SET && arg) |
928 tmp = *((int *) arg); | |
929 else | |
930 tmp = -1; | |
931 audio_id = demuxer_switch_audio(mpctx->demuxer, tmp); | |
932 if (audio_id == -2 | |
933 || (audio_id > -1 | |
934 && mpctx->demuxer->audio->id != current_id && current_id != -2)) | |
935 uninit_player(INITIALIZED_AO | INITIALIZED_ACODEC); | |
936 if (audio_id > -1 && mpctx->demuxer->audio->id != current_id) { | |
937 sh_audio_t *sh2; | |
938 sh2 = mpctx->demuxer->a_streams[mpctx->demuxer->audio->id]; | |
939 if (sh2) { | |
940 sh2->ds = mpctx->demuxer->audio; | |
941 mpctx->sh_audio = sh2; | |
942 reinit_audio_chain(); | |
943 } | |
944 } | |
945 mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_TRACK=%d\n", audio_id); | |
946 return M_PROPERTY_OK; | |
22478 | 947 default: |
31077 | 948 return M_PROPERTY_NOT_IMPLEMENTED; |
22478 | 949 } |
950 | |
951 } | |
952 | |
953 /// Selected video id (RW) | |
31156 | 954 static int mp_property_video(m_option_t *prop, int action, void *arg, |
955 MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
956 { |
30082
446f2ea148a4
Return the actually playing audio/video id for get_property, not the one
reimar
parents:
30080
diff
changeset
|
957 int current_id, tmp; |
30079
4bd9b89b2b85
Use the same condition to decide if the audio/video id property is
reimar
parents:
30078
diff
changeset
|
958 if (!mpctx->demuxer || !mpctx->demuxer->video) |
4bd9b89b2b85
Use the same condition to decide if the audio/video id property is
reimar
parents:
30078
diff
changeset
|
959 return M_PROPERTY_UNAVAILABLE; |
30082
446f2ea148a4
Return the actually playing audio/video id for get_property, not the one
reimar
parents:
30080
diff
changeset
|
960 current_id = mpctx->demuxer->video->id; |
22478 | 961 |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
962 switch (action) { |
22478 | 963 case M_PROPERTY_GET: |
31077 | 964 if (!arg) |
965 return M_PROPERTY_ERROR; | |
966 *(int *) arg = current_id; | |
967 return M_PROPERTY_OK; | |
22478 | 968 case M_PROPERTY_PRINT: |
31077 | 969 if (!arg) |
970 return M_PROPERTY_ERROR; | |
22478 | 971 |
31077 | 972 if (current_id < 0) |
973 *(char **) arg = strdup(MSGTR_Disabled); | |
974 else { | |
975 char lang[40] = MSGTR_Unknown; | |
976 *(char **) arg = malloc(64); | |
977 snprintf(*(char **) arg, 64, "(%d) %s", current_id, lang); | |
978 } | |
979 return M_PROPERTY_OK; | |
22478 | 980 |
981 case M_PROPERTY_STEP_UP: | |
982 case M_PROPERTY_SET: | |
31077 | 983 if (action == M_PROPERTY_SET && arg) |
984 tmp = *((int *) arg); | |
985 else | |
986 tmp = -1; | |
987 video_id = demuxer_switch_video(mpctx->demuxer, tmp); | |
988 if (video_id == -2 | |
989 || (video_id > -1 && mpctx->demuxer->video->id != current_id | |
990 && current_id != -2)) | |
991 uninit_player(INITIALIZED_VCODEC | | |
992 (fixed_vo && video_id != -2 ? 0 : INITIALIZED_VO)); | |
993 if (video_id > -1 && mpctx->demuxer->video->id != current_id) { | |
994 sh_video_t *sh2; | |
995 sh2 = mpctx->demuxer->v_streams[mpctx->demuxer->video->id]; | |
996 if (sh2) { | |
997 sh2->ds = mpctx->demuxer->video; | |
998 mpctx->sh_video = sh2; | |
999 reinit_video_chain(); | |
1000 } | |
1001 } | |
1002 mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_TRACK=%d\n", video_id); | |
1003 return M_PROPERTY_OK; | |
22478 | 1004 |
1005 default: | |
31077 | 1006 return M_PROPERTY_NOT_IMPLEMENTED; |
22478 | 1007 } |
1008 } | |
1009 | |
31156 | 1010 static int mp_property_program(m_option_t *prop, int action, void *arg, |
1011 MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1012 { |
22478 | 1013 demux_program_t prog; |
1014 | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1015 switch (action) { |
22478 | 1016 case M_PROPERTY_STEP_UP: |
1017 case M_PROPERTY_SET: | |
31077 | 1018 if (action == M_PROPERTY_SET && arg) |
1019 prog.progid = *((int *) arg); | |
1020 else | |
1021 prog.progid = -1; | |
1022 if (demux_control | |
1023 (mpctx->demuxer, DEMUXER_CTRL_IDENTIFY_PROGRAM, | |
1024 &prog) == DEMUXER_CTRL_NOTIMPL) | |
1025 return M_PROPERTY_ERROR; | |
22478 | 1026 |
31077 | 1027 if (prog.aid < 0 && prog.vid < 0) { |
1028 mp_msg(MSGT_CPLAYER, MSGL_ERR, "Selected program contains no audio or video streams!\n"); | |
1029 return M_PROPERTY_ERROR; | |
1030 } | |
1031 mp_property_do("switch_audio", M_PROPERTY_SET, &prog.aid, mpctx); | |
1032 mp_property_do("switch_video", M_PROPERTY_SET, &prog.vid, mpctx); | |
1033 return M_PROPERTY_OK; | |
22478 | 1034 |
1035 default: | |
31077 | 1036 return M_PROPERTY_NOT_IMPLEMENTED; |
22478 | 1037 } |
1038 } | |
1039 | |
1040 ///@} | |
1041 | |
1042 /// \defgroup VideoProperties Video properties | |
1043 /// \ingroup Properties | |
1044 ///@{ | |
1045 | |
1046 /// Fullscreen state (RW) | |
31156 | 1047 static int mp_property_fullscreen(m_option_t *prop, int action, void *arg, |
1048 MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1049 { |
22478 | 1050 |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1051 if (!mpctx->video_out) |
31077 | 1052 return M_PROPERTY_UNAVAILABLE; |
22478 | 1053 |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1054 switch (action) { |
22478 | 1055 case M_PROPERTY_SET: |
31077 | 1056 if (!arg) |
1057 return M_PROPERTY_ERROR; | |
1058 M_PROPERTY_CLAMP(prop, *(int *) arg); | |
1059 if (vo_fs == !!*(int *) arg) | |
1060 return M_PROPERTY_OK; | |
22478 | 1061 case M_PROPERTY_STEP_UP: |
1062 case M_PROPERTY_STEP_DOWN: | |
27343 | 1063 #ifdef CONFIG_GUI |
31077 | 1064 if (use_gui) |
31312
0b7792622c88
Remove Gui-specific slave commands and associated key-bindings and other code.
reimar
parents:
31200
diff
changeset
|
1065 guiGetEvent(guiIEvent, (char *) MP_CMD_VO_FULLSCREEN); |
31077 | 1066 else |
22478 | 1067 #endif |
31077 | 1068 if (vo_config_count) |
1069 mpctx->video_out->control(VOCTRL_FULLSCREEN, 0); | |
1070 return M_PROPERTY_OK; | |
22478 | 1071 default: |
31077 | 1072 return m_property_flag(prop, action, arg, &vo_fs); |
22478 | 1073 } |
1074 } | |
1075 | |
31156 | 1076 static int mp_property_deinterlace(m_option_t *prop, int action, |
1077 void *arg, MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1078 { |
22478 | 1079 int deinterlace; |
1080 vf_instance_t *vf; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1081 if (!mpctx->sh_video || !mpctx->sh_video->vfilter) |
31077 | 1082 return M_PROPERTY_UNAVAILABLE; |
22478 | 1083 vf = mpctx->sh_video->vfilter; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1084 switch (action) { |
22478 | 1085 case M_PROPERTY_GET: |
31077 | 1086 if (!arg) |
1087 return M_PROPERTY_ERROR; | |
1088 vf->control(vf, VFCTRL_GET_DEINTERLACE, arg); | |
1089 return M_PROPERTY_OK; | |
22478 | 1090 case M_PROPERTY_SET: |
31077 | 1091 if (!arg) |
1092 return M_PROPERTY_ERROR; | |
1093 M_PROPERTY_CLAMP(prop, *(int *) arg); | |
1094 vf->control(vf, VFCTRL_SET_DEINTERLACE, arg); | |
1095 return M_PROPERTY_OK; | |
22478 | 1096 case M_PROPERTY_STEP_UP: |
1097 case M_PROPERTY_STEP_DOWN: | |
31077 | 1098 vf->control(vf, VFCTRL_GET_DEINTERLACE, &deinterlace); |
1099 deinterlace = !deinterlace; | |
1100 vf->control(vf, VFCTRL_SET_DEINTERLACE, &deinterlace); | |
1101 set_osd_msg(OSD_MSG_SPEED, 1, osd_duration, MSGTR_OSDDeinterlace, | |
1102 deinterlace ? MSGTR_Enabled : MSGTR_Disabled); | |
1103 return M_PROPERTY_OK; | |
22478 | 1104 } |
1105 return M_PROPERTY_NOT_IMPLEMENTED; | |
1106 } | |
1107 | |
32438
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1108 static int mp_property_capture(m_option_t *prop, int action, |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1109 void *arg, MPContext *mpctx) |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1110 { |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1111 int ret; |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1112 int capturing = !!mpctx->stream->capture_file; |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1113 |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1114 if (!mpctx->stream) |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1115 return M_PROPERTY_UNAVAILABLE; |
32443
5aae26f4bb59
Simplify and fix capture feature to not always return an error.
reimar
parents:
32442
diff
changeset
|
1116 if (!capture_dump) { |
5aae26f4bb59
Simplify and fix capture feature to not always return an error.
reimar
parents:
32442
diff
changeset
|
1117 mp_msg(MSGT_GLOBAL, MSGL_ERR, |
5aae26f4bb59
Simplify and fix capture feature to not always return an error.
reimar
parents:
32442
diff
changeset
|
1118 "Capturing not enabled (forgot -capture parameter?)\n"); |
5aae26f4bb59
Simplify and fix capture feature to not always return an error.
reimar
parents:
32442
diff
changeset
|
1119 return M_PROPERTY_ERROR; |
5aae26f4bb59
Simplify and fix capture feature to not always return an error.
reimar
parents:
32442
diff
changeset
|
1120 } |
32438
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1121 |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1122 ret = m_property_flag(prop, action, arg, &capturing); |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1123 if (ret == M_PROPERTY_OK && capturing != !!mpctx->stream->capture_file) { |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1124 if (capturing) { |
32444
99efb38a4f4e
Change capture feature to append to file instead of overwriting.
reimar
parents:
32443
diff
changeset
|
1125 mpctx->stream->capture_file = fopen(stream_dump_name, "ab"); |
32443
5aae26f4bb59
Simplify and fix capture feature to not always return an error.
reimar
parents:
32442
diff
changeset
|
1126 if (!mpctx->stream->capture_file) { |
32438
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1127 mp_msg(MSGT_GLOBAL, MSGL_ERR, |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1128 "Error opening capture file: %s\n", strerror(errno)); |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1129 ret = M_PROPERTY_ERROR; |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1130 } |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1131 } else { |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1132 fclose(mpctx->stream->capture_file); |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1133 mpctx->stream->capture_file = NULL; |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1134 } |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1135 } |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1136 |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1137 switch (ret) { |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1138 case M_PROPERTY_ERROR: |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1139 set_osd_msg(OSD_MSG_SPEED, 1, osd_duration, MSGTR_OSDCapturingFailure); |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1140 break; |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1141 case M_PROPERTY_OK: |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1142 set_osd_msg(OSD_MSG_SPEED, 1, osd_duration, MSGTR_OSDCapturing, |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1143 mpctx->stream->capture_file ? MSGTR_Enabled : MSGTR_Disabled); |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1144 break; |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1145 default: |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1146 break; |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1147 } |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1148 |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1149 return ret; |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1150 } |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1151 |
22478 | 1152 /// Panscan (RW) |
31156 | 1153 static int mp_property_panscan(m_option_t *prop, int action, void *arg, |
1154 MPContext *mpctx) | |
22478 | 1155 { |
1156 | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1157 if (!mpctx->video_out |
31077 | 1158 || mpctx->video_out->control(VOCTRL_GET_PANSCAN, NULL) != VO_TRUE) |
1159 return M_PROPERTY_UNAVAILABLE; | |
22478 | 1160 |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1161 switch (action) { |
22478 | 1162 case M_PROPERTY_SET: |
31077 | 1163 if (!arg) |
1164 return M_PROPERTY_ERROR; | |
1165 M_PROPERTY_CLAMP(prop, *(float *) arg); | |
1166 vo_panscan = *(float *) arg; | |
1167 mpctx->video_out->control(VOCTRL_SET_PANSCAN, NULL); | |
1168 return M_PROPERTY_OK; | |
22478 | 1169 case M_PROPERTY_STEP_UP: |
1170 case M_PROPERTY_STEP_DOWN: | |
31077 | 1171 vo_panscan += (arg ? *(float *) arg : 0.1) * |
1172 (action == M_PROPERTY_STEP_DOWN ? -1 : 1); | |
1173 if (vo_panscan > 1) | |
1174 vo_panscan = 1; | |
1175 else if (vo_panscan < 0) | |
1176 vo_panscan = 0; | |
1177 mpctx->video_out->control(VOCTRL_SET_PANSCAN, NULL); | |
1178 return M_PROPERTY_OK; | |
22478 | 1179 default: |
31077 | 1180 return m_property_float_range(prop, action, arg, &vo_panscan); |
22478 | 1181 } |
1182 } | |
1183 | |
1184 /// Helper to set vo flags. | |
1185 /** \ingroup PropertyImplHelper | |
1186 */ | |
31156 | 1187 static int mp_property_vo_flag(m_option_t *prop, int action, void *arg, |
1188 int vo_ctrl, int *vo_var, MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1189 { |
22478 | 1190 |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1191 if (!mpctx->video_out) |
31077 | 1192 return M_PROPERTY_UNAVAILABLE; |
22478 | 1193 |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1194 switch (action) { |
22478 | 1195 case M_PROPERTY_SET: |
31077 | 1196 if (!arg) |
1197 return M_PROPERTY_ERROR; | |
1198 M_PROPERTY_CLAMP(prop, *(int *) arg); | |
1199 if (*vo_var == !!*(int *) arg) | |
1200 return M_PROPERTY_OK; | |
22478 | 1201 case M_PROPERTY_STEP_UP: |
1202 case M_PROPERTY_STEP_DOWN: | |
31077 | 1203 if (vo_config_count) |
1204 mpctx->video_out->control(vo_ctrl, 0); | |
1205 return M_PROPERTY_OK; | |
22478 | 1206 default: |
31077 | 1207 return m_property_flag(prop, action, arg, vo_var); |
22478 | 1208 } |
1209 } | |
1210 | |
1211 /// Window always on top (RW) | |
31156 | 1212 static int mp_property_ontop(m_option_t *prop, int action, void *arg, |
1213 MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1214 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1215 return mp_property_vo_flag(prop, action, arg, VOCTRL_ONTOP, &vo_ontop, |
31077 | 1216 mpctx); |
22478 | 1217 } |
1218 | |
1219 /// Display in the root window (RW) | |
31156 | 1220 static int mp_property_rootwin(m_option_t *prop, int action, void *arg, |
1221 MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1222 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1223 return mp_property_vo_flag(prop, action, arg, VOCTRL_ROOTWIN, |
31077 | 1224 &vo_rootwin, mpctx); |
22478 | 1225 } |
1226 | |
1227 /// Show window borders (RW) | |
31156 | 1228 static int mp_property_border(m_option_t *prop, int action, void *arg, |
1229 MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1230 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1231 return mp_property_vo_flag(prop, action, arg, VOCTRL_BORDER, |
31077 | 1232 &vo_border, mpctx); |
22478 | 1233 } |
1234 | |
1235 /// Framedropping state (RW) | |
31156 | 1236 static int mp_property_framedropping(m_option_t *prop, int action, |
1237 void *arg, MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1238 { |
22478 | 1239 |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1240 if (!mpctx->sh_video) |
31077 | 1241 return M_PROPERTY_UNAVAILABLE; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1242 |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1243 switch (action) { |
22478 | 1244 case M_PROPERTY_PRINT: |
31077 | 1245 if (!arg) |
1246 return M_PROPERTY_ERROR; | |
1247 *(char **) arg = strdup(frame_dropping == 1 ? MSGTR_Enabled : | |
1248 (frame_dropping == 2 ? MSGTR_HardFrameDrop : | |
1249 MSGTR_Disabled)); | |
1250 return M_PROPERTY_OK; | |
22478 | 1251 default: |
31077 | 1252 return m_property_choice(prop, action, arg, &frame_dropping); |
22478 | 1253 } |
1254 } | |
1255 | |
1256 /// Color settings, try to use vf/vo then fall back on TV. (RW) | |
31156 | 1257 static int mp_property_gamma(m_option_t *prop, int action, void *arg, |
1258 MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1259 { |
25465
6b9447dc7590
Check availability before check argument for getting gamma properties.
ulion
parents:
25464
diff
changeset
|
1260 int *gamma = prop->priv, r, val; |
22478 | 1261 |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1262 if (!mpctx->sh_video) |
31077 | 1263 return M_PROPERTY_UNAVAILABLE; |
22478 | 1264 |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1265 if (gamma[0] == 1000) { |
31077 | 1266 gamma[0] = 0; |
1267 get_video_colors(mpctx->sh_video, prop->name, gamma); | |
22478 | 1268 } |
1269 | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1270 switch (action) { |
22478 | 1271 case M_PROPERTY_SET: |
31077 | 1272 if (!arg) |
1273 return M_PROPERTY_ERROR; | |
1274 M_PROPERTY_CLAMP(prop, *(int *) arg); | |
1275 *gamma = *(int *) arg; | |
1276 r = set_video_colors(mpctx->sh_video, prop->name, *gamma); | |
1277 if (r <= 0) | |
1278 break; | |
1279 return r; | |
22478 | 1280 case M_PROPERTY_GET: |
31077 | 1281 if (get_video_colors(mpctx->sh_video, prop->name, &val) > 0) { |
1282 if (!arg) | |
1283 return M_PROPERTY_ERROR; | |
1284 *(int *)arg = val; | |
1285 return M_PROPERTY_OK; | |
1286 } | |
1287 break; | |
22478 | 1288 case M_PROPERTY_STEP_UP: |
1289 case M_PROPERTY_STEP_DOWN: | |
31077 | 1290 *gamma += (arg ? *(int *) arg : 1) * |
1291 (action == M_PROPERTY_STEP_DOWN ? -1 : 1); | |
1292 M_PROPERTY_CLAMP(prop, *gamma); | |
1293 r = set_video_colors(mpctx->sh_video, prop->name, *gamma); | |
1294 if (r <= 0) | |
1295 break; | |
1296 return r; | |
22478 | 1297 default: |
31077 | 1298 return M_PROPERTY_NOT_IMPLEMENTED; |
22478 | 1299 } |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1300 |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
1301 #ifdef CONFIG_TV |
22478 | 1302 if (mpctx->demuxer->type == DEMUXER_TYPE_TV) { |
31077 | 1303 int l = strlen(prop->name); |
1304 char tv_prop[3 + l + 1]; | |
1305 sprintf(tv_prop, "tv_%s", prop->name); | |
1306 return mp_property_do(tv_prop, action, arg, mpctx); | |
22478 | 1307 } |
1308 #endif | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1309 |
22478 | 1310 return M_PROPERTY_UNAVAILABLE; |
1311 } | |
1312 | |
1313 /// VSync (RW) | |
31156 | 1314 static int mp_property_vsync(m_option_t *prop, int action, void *arg, |
1315 MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1316 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1317 return m_property_flag(prop, action, arg, &vo_vsync); |
22478 | 1318 } |
1319 | |
1320 /// Video codec tag (RO) | |
31156 | 1321 static int mp_property_video_format(m_option_t *prop, int action, |
1322 void *arg, MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1323 { |
23394
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1324 char* meta; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1325 if (!mpctx->sh_video) |
31077 | 1326 return M_PROPERTY_UNAVAILABLE; |
23394
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1327 switch(action) { |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1328 case M_PROPERTY_PRINT: |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1329 if (!arg) |
31077 | 1330 return M_PROPERTY_ERROR; |
23394
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1331 switch(mpctx->sh_video->format) { |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1332 case 0x10000001: |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1333 meta = strdup ("mpeg1"); break; |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1334 case 0x10000002: |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1335 meta = strdup ("mpeg2"); break; |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1336 case 0x10000004: |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1337 meta = strdup ("mpeg4"); break; |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1338 case 0x10000005: |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1339 meta = strdup ("h264"); break; |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1340 default: |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1341 if(mpctx->sh_video->format >= 0x20202020) { |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1342 meta = malloc(5); |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1343 sprintf (meta, "%.4s", (char *) &mpctx->sh_video->format); |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1344 } else { |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1345 meta = malloc(20); |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1346 sprintf (meta, "0x%08X", mpctx->sh_video->format); |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1347 } |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1348 } |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1349 *(char**)arg = meta; |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1350 return M_PROPERTY_OK; |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1351 } |
22478 | 1352 return m_property_int_ro(prop, action, arg, mpctx->sh_video->format); |
1353 } | |
1354 | |
23394
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1355 /// Video codec name (RO) |
31156 | 1356 static int mp_property_video_codec(m_option_t *prop, int action, |
1357 void *arg, MPContext *mpctx) | |
23394
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1358 { |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1359 if (!mpctx->sh_video || !mpctx->sh_video->codec) |
31077 | 1360 return M_PROPERTY_UNAVAILABLE; |
23394
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1361 return m_property_string_ro(prop, action, arg, mpctx->sh_video->codec->name); |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1362 } |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1363 |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1364 |
22478 | 1365 /// Video bitrate (RO) |
31156 | 1366 static int mp_property_video_bitrate(m_option_t *prop, int action, |
1367 void *arg, MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1368 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1369 if (!mpctx->sh_video) |
31077 | 1370 return M_PROPERTY_UNAVAILABLE; |
23394
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1371 return m_property_bitrate(prop, action, arg, mpctx->sh_video->i_bps); |
22478 | 1372 } |
1373 | |
1374 /// Video display width (RO) | |
31156 | 1375 static int mp_property_width(m_option_t *prop, int action, void *arg, |
1376 MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1377 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1378 if (!mpctx->sh_video) |
31077 | 1379 return M_PROPERTY_UNAVAILABLE; |
22478 | 1380 return m_property_int_ro(prop, action, arg, mpctx->sh_video->disp_w); |
1381 } | |
1382 | |
1383 /// Video display height (RO) | |
31156 | 1384 static int mp_property_height(m_option_t *prop, int action, void *arg, |
1385 MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1386 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1387 if (!mpctx->sh_video) |
31077 | 1388 return M_PROPERTY_UNAVAILABLE; |
22478 | 1389 return m_property_int_ro(prop, action, arg, mpctx->sh_video->disp_h); |
1390 } | |
1391 | |
1392 /// Video fps (RO) | |
31156 | 1393 static int mp_property_fps(m_option_t *prop, int action, void *arg, |
1394 MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1395 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1396 if (!mpctx->sh_video) |
31077 | 1397 return M_PROPERTY_UNAVAILABLE; |
22478 | 1398 return m_property_float_ro(prop, action, arg, mpctx->sh_video->fps); |
1399 } | |
1400 | |
1401 /// Video aspect (RO) | |
31156 | 1402 static int mp_property_aspect(m_option_t *prop, int action, void *arg, |
1403 MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1404 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1405 if (!mpctx->sh_video) |
31077 | 1406 return M_PROPERTY_UNAVAILABLE; |
22478 | 1407 return m_property_float_ro(prop, action, arg, mpctx->sh_video->aspect); |
1408 } | |
1409 | |
1410 ///@} | |
1411 | |
1412 /// \defgroup SubProprties Subtitles properties | |
1413 /// \ingroup Properties | |
1414 ///@{ | |
1415 | |
1416 /// Text subtitle position (RW) | |
31156 | 1417 static int mp_property_sub_pos(m_option_t *prop, int action, void *arg, |
1418 MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1419 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1420 switch (action) { |
22478 | 1421 case M_PROPERTY_SET: |
31077 | 1422 if (!arg) |
1423 return M_PROPERTY_ERROR; | |
22478 | 1424 case M_PROPERTY_STEP_UP: |
1425 case M_PROPERTY_STEP_DOWN: | |
31077 | 1426 vo_osd_changed(OSDTYPE_SUBTITLE); |
22478 | 1427 default: |
31077 | 1428 return m_property_int_range(prop, action, arg, &sub_pos); |
22478 | 1429 } |
1430 } | |
1431 | |
1432 /// Selected subtitles (RW) | |
31156 | 1433 static int mp_property_sub(m_option_t *prop, int action, void *arg, |
1434 MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1435 { |
22478 | 1436 demux_stream_t *const d_sub = mpctx->d_sub; |
31612
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
1437 int global_sub_size; |
22478 | 1438 int source = -1, reset_spu = 0; |
31612
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
1439 int source_pos = -1; |
29668
ecc719c6d7a9
Make update_subtitles work without sh_video for text subtitles.
reimar
parents:
29617
diff
changeset
|
1440 double pts = 0; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1441 char *sub_name; |
22478 | 1442 |
31612
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
1443 update_global_sub_size(mpctx); |
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
1444 global_sub_size = mpctx->global_sub_size; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1445 if (global_sub_size <= 0) |
31077 | 1446 return M_PROPERTY_UNAVAILABLE; |
22478 | 1447 |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1448 switch (action) { |
22478 | 1449 case M_PROPERTY_GET: |
31077 | 1450 if (!arg) |
1451 return M_PROPERTY_ERROR; | |
1452 *(int *) arg = mpctx->global_sub_pos; | |
1453 return M_PROPERTY_OK; | |
22478 | 1454 case M_PROPERTY_PRINT: |
31077 | 1455 if (!arg) |
1456 return M_PROPERTY_ERROR; | |
1457 *(char **) arg = malloc(64); | |
1458 (*(char **) arg)[63] = 0; | |
1459 sub_name = 0; | |
1460 if (subdata) | |
1461 sub_name = subdata->filename; | |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
1462 #ifdef CONFIG_ASS |
31077 | 1463 if (ass_track && ass_track->name) |
1464 sub_name = ass_track->name; | |
22478 | 1465 #endif |
31077 | 1466 if (sub_name) { |
32588 | 1467 const char *tmp = mp_basename(sub_name); |
22478 | 1468 |
31077 | 1469 snprintf(*(char **) arg, 63, "(%d) %s%s", |
1470 mpctx->set_of_sub_pos + 1, | |
1471 strlen(tmp) < 20 ? "" : "...", | |
1472 strlen(tmp) < 20 ? tmp : tmp + strlen(tmp) - 19); | |
1473 return M_PROPERTY_OK; | |
1474 } | |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
1475 #ifdef CONFIG_DVDNAV |
31077 | 1476 if (mpctx->stream->type == STREAMTYPE_DVDNAV) { |
1477 if (vo_spudec && dvdsub_id >= 0) { | |
1478 unsigned char lang[3]; | |
1479 if (mp_dvdnav_lang_from_sid(mpctx->stream, dvdsub_id, lang)) { | |
1480 snprintf(*(char **) arg, 63, "(%d) %s", dvdsub_id, lang); | |
1481 return M_PROPERTY_OK; | |
1482 } | |
1483 } | |
1484 } | |
22478 | 1485 #endif |
1486 | |
31877
e30fe0cb79cd
Add incomplete clipinf reading support to display audio
reimar
parents:
31805
diff
changeset
|
1487 if (mpctx->stream->type == STREAMTYPE_BD |
e30fe0cb79cd
Add incomplete clipinf reading support to display audio
reimar
parents:
31805
diff
changeset
|
1488 && d_sub && d_sub->sh && dvdsub_id >= 0) { |
e30fe0cb79cd
Add incomplete clipinf reading support to display audio
reimar
parents:
31805
diff
changeset
|
1489 const char *lang = bd_lang_from_id(mpctx->stream, ((sh_sub_t*)d_sub->sh)->sid); |
e30fe0cb79cd
Add incomplete clipinf reading support to display audio
reimar
parents:
31805
diff
changeset
|
1490 if (!lang) lang = MSGTR_Unknown; |
e30fe0cb79cd
Add incomplete clipinf reading support to display audio
reimar
parents:
31805
diff
changeset
|
1491 snprintf(*(char **) arg, 63, "(%d) %s", dvdsub_id, lang); |
e30fe0cb79cd
Add incomplete clipinf reading support to display audio
reimar
parents:
31805
diff
changeset
|
1492 return M_PROPERTY_OK; |
e30fe0cb79cd
Add incomplete clipinf reading support to display audio
reimar
parents:
31805
diff
changeset
|
1493 } |
e30fe0cb79cd
Add incomplete clipinf reading support to display audio
reimar
parents:
31805
diff
changeset
|
1494 |
31077 | 1495 if ((mpctx->demuxer->type == DEMUXER_TYPE_MATROSKA |
26084
ec5749eb6f5f
Fill sh_sub_t.lang in lavf, mkv and ogg demuxers. Use it for printing subtitle
eugeni
parents:
26083
diff
changeset
|
1496 || mpctx->demuxer->type == DEMUXER_TYPE_LAVF |
27457
16a2329e8776
handle the lavfpref demuxer in the same way as the lavf one
aurel
parents:
27393
diff
changeset
|
1497 || mpctx->demuxer->type == DEMUXER_TYPE_LAVF_PREFERRED |
26084
ec5749eb6f5f
Fill sh_sub_t.lang in lavf, mkv and ogg demuxers. Use it for printing subtitle
eugeni
parents:
26083
diff
changeset
|
1498 || mpctx->demuxer->type == DEMUXER_TYPE_OGG) |
ec5749eb6f5f
Fill sh_sub_t.lang in lavf, mkv and ogg demuxers. Use it for printing subtitle
eugeni
parents:
26083
diff
changeset
|
1499 && d_sub && d_sub->sh && dvdsub_id >= 0) { |
ec5749eb6f5f
Fill sh_sub_t.lang in lavf, mkv and ogg demuxers. Use it for printing subtitle
eugeni
parents:
26083
diff
changeset
|
1500 const char* lang = ((sh_sub_t*)d_sub->sh)->lang; |
ec5749eb6f5f
Fill sh_sub_t.lang in lavf, mkv and ogg demuxers. Use it for printing subtitle
eugeni
parents:
26083
diff
changeset
|
1501 if (!lang) lang = MSGTR_Unknown; |
31077 | 1502 snprintf(*(char **) arg, 63, "(%d) %s", dvdsub_id, lang); |
1503 return M_PROPERTY_OK; | |
1504 } | |
26084
ec5749eb6f5f
Fill sh_sub_t.lang in lavf, mkv and ogg demuxers. Use it for printing subtitle
eugeni
parents:
26083
diff
changeset
|
1505 |
31077 | 1506 if (vo_vobsub && vobsub_id >= 0) { |
1507 const char *language = MSGTR_Unknown; | |
1508 language = vobsub_get_id(vo_vobsub, (unsigned int) vobsub_id); | |
1509 snprintf(*(char **) arg, 63, "(%d) %s", | |
1510 vobsub_id, language ? language : MSGTR_Unknown); | |
1511 return M_PROPERTY_OK; | |
1512 } | |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
1513 #ifdef CONFIG_DVDREAD |
31077 | 1514 if (vo_spudec && mpctx->stream->type == STREAMTYPE_DVD |
1515 && dvdsub_id >= 0) { | |
1516 char lang[3]; | |
1517 int code = dvd_lang_from_sid(mpctx->stream, dvdsub_id); | |
1518 lang[0] = code >> 8; | |
1519 lang[1] = code; | |
1520 lang[2] = 0; | |
1521 snprintf(*(char **) arg, 63, "(%d) %s", dvdsub_id, lang); | |
1522 return M_PROPERTY_OK; | |
1523 } | |
22478 | 1524 #endif |
31077 | 1525 if (dvdsub_id >= 0) { |
1526 snprintf(*(char **) arg, 63, "(%d) %s", dvdsub_id, MSGTR_Unknown); | |
1527 return M_PROPERTY_OK; | |
1528 } | |
1529 snprintf(*(char **) arg, 63, MSGTR_Disabled); | |
1530 return M_PROPERTY_OK; | |
22478 | 1531 |
1532 case M_PROPERTY_SET: | |
31077 | 1533 if (!arg) |
1534 return M_PROPERTY_ERROR; | |
1535 if (*(int *) arg < -1) | |
1536 *(int *) arg = -1; | |
1537 else if (*(int *) arg >= global_sub_size) | |
1538 *(int *) arg = global_sub_size - 1; | |
1539 mpctx->global_sub_pos = *(int *) arg; | |
1540 break; | |
22478 | 1541 case M_PROPERTY_STEP_UP: |
31077 | 1542 mpctx->global_sub_pos += 2; |
1543 mpctx->global_sub_pos = | |
1544 (mpctx->global_sub_pos % (global_sub_size + 1)) - 1; | |
1545 break; | |
22478 | 1546 case M_PROPERTY_STEP_DOWN: |
31077 | 1547 mpctx->global_sub_pos += global_sub_size + 1; |
1548 mpctx->global_sub_pos = | |
1549 (mpctx->global_sub_pos % (global_sub_size + 1)) - 1; | |
1550 break; | |
22478 | 1551 default: |
31077 | 1552 return M_PROPERTY_NOT_IMPLEMENTED; |
22478 | 1553 } |
1554 | |
31612
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
1555 if (mpctx->global_sub_pos >= 0) { |
31077 | 1556 source = sub_source(mpctx); |
31612
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
1557 source_pos = sub_source_pos(mpctx); |
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
1558 } |
22478 | 1559 |
1560 mp_msg(MSGT_CPLAYER, MSGL_DBG3, | |
31077 | 1561 "subtitles: %d subs, (v@%d s@%d d@%d), @%d, source @%d\n", |
1562 global_sub_size, | |
31612
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
1563 mpctx->sub_counts[SUB_SOURCE_VOBSUB], |
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
1564 mpctx->sub_counts[SUB_SOURCE_SUBS], |
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
1565 mpctx->sub_counts[SUB_SOURCE_DEMUX], |
31077 | 1566 mpctx->global_sub_pos, source); |
22478 | 1567 |
1568 mpctx->set_of_sub_pos = -1; | |
1569 subdata = NULL; | |
1570 | |
1571 vobsub_id = -1; | |
1572 dvdsub_id = -1; | |
1573 if (d_sub) { | |
31077 | 1574 if (d_sub->id > -2) |
1575 reset_spu = 1; | |
1576 d_sub->id = -2; | |
22478 | 1577 } |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
1578 #ifdef CONFIG_ASS |
22478 | 1579 ass_track = 0; |
1580 #endif | |
1581 | |
1582 if (source == SUB_SOURCE_VOBSUB) { | |
31904
f8af1068e397
100l, re-add vobsub_get_id_by_index call accidentally removed in
reimar
parents:
31877
diff
changeset
|
1583 vobsub_id = vobsub_get_id_by_index(vo_vobsub, source_pos); |
22478 | 1584 } else if (source == SUB_SOURCE_SUBS) { |
31612
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
1585 mpctx->set_of_sub_pos = source_pos; |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
1586 #ifdef CONFIG_ASS |
31077 | 1587 if (ass_enabled && mpctx->set_of_ass_tracks[mpctx->set_of_sub_pos]) |
1588 ass_track = mpctx->set_of_ass_tracks[mpctx->set_of_sub_pos]; | |
1589 else | |
22478 | 1590 #endif |
31077 | 1591 { |
1592 subdata = mpctx->set_of_subtitles[mpctx->set_of_sub_pos]; | |
1593 vo_osd_changed(OSDTYPE_SUBTITLE); | |
1594 } | |
22478 | 1595 } else if (source == SUB_SOURCE_DEMUX) { |
31612
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
1596 dvdsub_id = source_pos; |
31077 | 1597 if (d_sub && dvdsub_id < MAX_S_STREAMS) { |
1598 int i = 0; | |
1599 // default: assume 1:1 mapping of sid and stream id | |
1600 d_sub->id = dvdsub_id; | |
1601 d_sub->sh = mpctx->demuxer->s_streams[d_sub->id]; | |
1602 ds_free_packs(d_sub); | |
1603 for (i = 0; i < MAX_S_STREAMS; i++) { | |
1604 sh_sub_t *sh = mpctx->demuxer->s_streams[i]; | |
1605 if (sh && sh->sid == dvdsub_id) { | |
1606 d_sub->id = i; | |
1607 d_sub->sh = sh; | |
1608 break; | |
1609 } | |
1610 } | |
1611 if (d_sub->sh && d_sub->id >= 0) { | |
1612 sh_sub_t *sh = d_sub->sh; | |
1613 if (sh->type == 'v') | |
1614 init_vo_spudec(); | |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
1615 #ifdef CONFIG_ASS |
31077 | 1616 else if (ass_enabled) |
1617 ass_track = sh->ass_track; | |
22478 | 1618 #endif |
23766
f0c2f9de85ba
Make sure that sub->id is -2 and sub->sh is NULL if subtitle doesn't
reimar
parents:
23758
diff
changeset
|
1619 } else { |
f0c2f9de85ba
Make sure that sub->id is -2 and sub->sh is NULL if subtitle doesn't
reimar
parents:
23758
diff
changeset
|
1620 d_sub->id = -2; |
f0c2f9de85ba
Make sure that sub->id is -2 and sub->sh is NULL if subtitle doesn't
reimar
parents:
23758
diff
changeset
|
1621 d_sub->sh = NULL; |
31077 | 1622 } |
1623 } | |
22478 | 1624 } |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
1625 #ifdef CONFIG_DVDREAD |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1626 if (vo_spudec |
31077 | 1627 && (mpctx->stream->type == STREAMTYPE_DVD |
1628 || mpctx->stream->type == STREAMTYPE_DVDNAV) | |
1629 && dvdsub_id < 0 && reset_spu) { | |
1630 d_sub->id = -2; | |
1631 d_sub->sh = NULL; | |
22478 | 1632 } |
1633 #endif | |
29668
ecc719c6d7a9
Make update_subtitles work without sh_video for text subtitles.
reimar
parents:
29617
diff
changeset
|
1634 if (mpctx->sh_audio) |
ecc719c6d7a9
Make update_subtitles work without sh_video for text subtitles.
reimar
parents:
29617
diff
changeset
|
1635 pts = mpctx->sh_audio->pts; |
ecc719c6d7a9
Make update_subtitles work without sh_video for text subtitles.
reimar
parents:
29617
diff
changeset
|
1636 if (mpctx->sh_video) |
ecc719c6d7a9
Make update_subtitles work without sh_video for text subtitles.
reimar
parents:
29617
diff
changeset
|
1637 pts = mpctx->sh_video->pts; |
ecc719c6d7a9
Make update_subtitles work without sh_video for text subtitles.
reimar
parents:
29617
diff
changeset
|
1638 update_subtitles(mpctx->sh_video, pts, d_sub, 1); |
22478 | 1639 |
1640 return M_PROPERTY_OK; | |
1641 } | |
1642 | |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1643 /// Selected sub source (RW) |
31156 | 1644 static int mp_property_sub_source(m_option_t *prop, int action, void *arg, |
1645 MPContext *mpctx) | |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1646 { |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1647 int source; |
31612
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
1648 update_global_sub_size(mpctx); |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1649 if (!mpctx->sh_video || mpctx->global_sub_size <= 0) |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1650 return M_PROPERTY_UNAVAILABLE; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1651 |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1652 switch (action) { |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1653 case M_PROPERTY_GET: |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1654 if (!arg) |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1655 return M_PROPERTY_ERROR; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1656 *(int *) arg = sub_source(mpctx); |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1657 return M_PROPERTY_OK; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1658 case M_PROPERTY_PRINT: |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1659 if (!arg) |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1660 return M_PROPERTY_ERROR; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1661 *(char **) arg = malloc(64); |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1662 (*(char **) arg)[63] = 0; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1663 switch (sub_source(mpctx)) |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1664 { |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1665 case SUB_SOURCE_SUBS: |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1666 snprintf(*(char **) arg, 63, MSGTR_SubSourceFile); |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1667 break; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1668 case SUB_SOURCE_VOBSUB: |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1669 snprintf(*(char **) arg, 63, MSGTR_SubSourceVobsub); |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1670 break; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1671 case SUB_SOURCE_DEMUX: |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1672 snprintf(*(char **) arg, 63, MSGTR_SubSourceDemux); |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1673 break; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1674 default: |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1675 snprintf(*(char **) arg, 63, MSGTR_Disabled); |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1676 } |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1677 return M_PROPERTY_OK; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1678 case M_PROPERTY_SET: |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1679 if (!arg) |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1680 return M_PROPERTY_ERROR; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1681 M_PROPERTY_CLAMP(prop, *(int*)arg); |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1682 if (*(int *) arg < 0) |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1683 mpctx->global_sub_pos = -1; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1684 else if (*(int *) arg != sub_source(mpctx)) { |
31612
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
1685 int new_pos = sub_pos_by_source(mpctx, *(int *)arg); |
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
1686 if (new_pos == -1) |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1687 return M_PROPERTY_UNAVAILABLE; |
31612
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
1688 mpctx->global_sub_pos = new_pos; |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1689 } |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1690 break; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1691 case M_PROPERTY_STEP_UP: |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1692 case M_PROPERTY_STEP_DOWN: { |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1693 int step_all = (arg && *(int*)arg != 0 ? *(int*)arg : 1) |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1694 * (action == M_PROPERTY_STEP_UP ? 1 : -1); |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1695 int step = (step_all > 0) ? 1 : -1; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1696 int cur_source = sub_source(mpctx); |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1697 source = cur_source; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1698 while (step_all) { |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1699 source += step; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1700 if (source >= SUB_SOURCES) |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1701 source = -1; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1702 else if (source < -1) |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1703 source = SUB_SOURCES - 1; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1704 if (source == cur_source || source == -1 || |
31612
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
1705 mpctx->sub_counts[source]) |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1706 step_all -= step; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1707 } |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1708 if (source == cur_source) |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1709 return M_PROPERTY_OK; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1710 if (source == -1) |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1711 mpctx->global_sub_pos = -1; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1712 else |
31612
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
1713 mpctx->global_sub_pos = sub_pos_by_source(mpctx, source); |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1714 break; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1715 } |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1716 default: |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1717 return M_PROPERTY_NOT_IMPLEMENTED; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1718 } |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1719 --mpctx->global_sub_pos; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1720 return mp_property_sub(prop, M_PROPERTY_STEP_UP, NULL, mpctx); |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1721 } |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1722 |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1723 /// Selected subtitles from specific source (RW) |
31156 | 1724 static int mp_property_sub_by_type(m_option_t *prop, int action, void *arg, |
1725 MPContext *mpctx) | |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1726 { |
31805
05ca6dd36faf
Fix subtitle selection: make selecting -sid 0 work again by replacing the
reimar
parents:
31792
diff
changeset
|
1727 int source, is_cur_source, offset, new_pos; |
31612
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
1728 update_global_sub_size(mpctx); |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1729 if (!mpctx->sh_video || mpctx->global_sub_size <= 0) |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1730 return M_PROPERTY_UNAVAILABLE; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1731 |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1732 if (!strcmp(prop->name, "sub_file")) |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1733 source = SUB_SOURCE_SUBS; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1734 else if (!strcmp(prop->name, "sub_vob")) |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1735 source = SUB_SOURCE_VOBSUB; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1736 else if (!strcmp(prop->name, "sub_demux")) |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1737 source = SUB_SOURCE_DEMUX; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1738 else |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1739 return M_PROPERTY_ERROR; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1740 |
31612
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
1741 offset = sub_pos_by_source(mpctx, source); |
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
1742 if (offset < 0) |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1743 return M_PROPERTY_UNAVAILABLE; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1744 |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1745 is_cur_source = sub_source(mpctx) == source; |
31805
05ca6dd36faf
Fix subtitle selection: make selecting -sid 0 work again by replacing the
reimar
parents:
31792
diff
changeset
|
1746 new_pos = mpctx->global_sub_pos; |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1747 switch (action) { |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1748 case M_PROPERTY_GET: |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1749 if (!arg) |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1750 return M_PROPERTY_ERROR; |
25251
80804f0631f4
Skip empty vobsub streams when selecting subtitles.
ulion
parents:
25215
diff
changeset
|
1751 if (is_cur_source) { |
31612
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
1752 *(int *) arg = sub_source_pos(mpctx); |
25251
80804f0631f4
Skip empty vobsub streams when selecting subtitles.
ulion
parents:
25215
diff
changeset
|
1753 if (source == SUB_SOURCE_VOBSUB) |
80804f0631f4
Skip empty vobsub streams when selecting subtitles.
ulion
parents:
25215
diff
changeset
|
1754 *(int *) arg = vobsub_get_id_by_index(vo_vobsub, *(int *) arg); |
80804f0631f4
Skip empty vobsub streams when selecting subtitles.
ulion
parents:
25215
diff
changeset
|
1755 } |
80804f0631f4
Skip empty vobsub streams when selecting subtitles.
ulion
parents:
25215
diff
changeset
|
1756 else |
80804f0631f4
Skip empty vobsub streams when selecting subtitles.
ulion
parents:
25215
diff
changeset
|
1757 *(int *) arg = -1; |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1758 return M_PROPERTY_OK; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1759 case M_PROPERTY_PRINT: |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1760 if (!arg) |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1761 return M_PROPERTY_ERROR; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1762 if (is_cur_source) |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1763 return mp_property_sub(prop, M_PROPERTY_PRINT, arg, mpctx); |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1764 *(char **) arg = malloc(64); |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1765 (*(char **) arg)[63] = 0; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1766 snprintf(*(char **) arg, 63, MSGTR_Disabled); |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1767 return M_PROPERTY_OK; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1768 case M_PROPERTY_SET: |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1769 if (!arg) |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1770 return M_PROPERTY_ERROR; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1771 if (*(int *) arg >= 0) { |
25251
80804f0631f4
Skip empty vobsub streams when selecting subtitles.
ulion
parents:
25215
diff
changeset
|
1772 int index = *(int *)arg; |
80804f0631f4
Skip empty vobsub streams when selecting subtitles.
ulion
parents:
25215
diff
changeset
|
1773 if (source == SUB_SOURCE_VOBSUB) |
80804f0631f4
Skip empty vobsub streams when selecting subtitles.
ulion
parents:
25215
diff
changeset
|
1774 index = vobsub_get_index_by_id(vo_vobsub, index); |
31805
05ca6dd36faf
Fix subtitle selection: make selecting -sid 0 work again by replacing the
reimar
parents:
31792
diff
changeset
|
1775 new_pos = offset + index; |
31612
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
1776 if (index < 0 || index > mpctx->sub_counts[source]) { |
31805
05ca6dd36faf
Fix subtitle selection: make selecting -sid 0 work again by replacing the
reimar
parents:
31792
diff
changeset
|
1777 new_pos = -1; |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1778 *(int *) arg = -1; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1779 } |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1780 } |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1781 else |
31805
05ca6dd36faf
Fix subtitle selection: make selecting -sid 0 work again by replacing the
reimar
parents:
31792
diff
changeset
|
1782 new_pos = -1; |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1783 break; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1784 case M_PROPERTY_STEP_UP: |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1785 case M_PROPERTY_STEP_DOWN: { |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1786 int step_all = (arg && *(int*)arg != 0 ? *(int*)arg : 1) |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1787 * (action == M_PROPERTY_STEP_UP ? 1 : -1); |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1788 int step = (step_all > 0) ? 1 : -1; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1789 int max_sub_pos_for_source = -1; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1790 if (!is_cur_source) |
31805
05ca6dd36faf
Fix subtitle selection: make selecting -sid 0 work again by replacing the
reimar
parents:
31792
diff
changeset
|
1791 new_pos = -1; |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1792 while (step_all) { |
31805
05ca6dd36faf
Fix subtitle selection: make selecting -sid 0 work again by replacing the
reimar
parents:
31792
diff
changeset
|
1793 if (new_pos == -1) { |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1794 if (step > 0) |
31805
05ca6dd36faf
Fix subtitle selection: make selecting -sid 0 work again by replacing the
reimar
parents:
31792
diff
changeset
|
1795 new_pos = offset; |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1796 else if (max_sub_pos_for_source == -1) { |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1797 // Find max pos for specific source |
31805
05ca6dd36faf
Fix subtitle selection: make selecting -sid 0 work again by replacing the
reimar
parents:
31792
diff
changeset
|
1798 new_pos = mpctx->global_sub_size - 1; |
05ca6dd36faf
Fix subtitle selection: make selecting -sid 0 work again by replacing the
reimar
parents:
31792
diff
changeset
|
1799 while (new_pos >= 0 |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1800 && sub_source(mpctx) != source) |
31805
05ca6dd36faf
Fix subtitle selection: make selecting -sid 0 work again by replacing the
reimar
parents:
31792
diff
changeset
|
1801 new_pos--; |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1802 } |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1803 else |
31805
05ca6dd36faf
Fix subtitle selection: make selecting -sid 0 work again by replacing the
reimar
parents:
31792
diff
changeset
|
1804 new_pos = max_sub_pos_for_source; |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1805 } |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1806 else { |
31805
05ca6dd36faf
Fix subtitle selection: make selecting -sid 0 work again by replacing the
reimar
parents:
31792
diff
changeset
|
1807 new_pos += step; |
05ca6dd36faf
Fix subtitle selection: make selecting -sid 0 work again by replacing the
reimar
parents:
31792
diff
changeset
|
1808 if (new_pos < offset || |
05ca6dd36faf
Fix subtitle selection: make selecting -sid 0 work again by replacing the
reimar
parents:
31792
diff
changeset
|
1809 new_pos >= mpctx->global_sub_size || |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1810 sub_source(mpctx) != source) |
31805
05ca6dd36faf
Fix subtitle selection: make selecting -sid 0 work again by replacing the
reimar
parents:
31792
diff
changeset
|
1811 new_pos = -1; |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1812 } |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1813 step_all -= step; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1814 } |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1815 break; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1816 } |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1817 default: |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1818 return M_PROPERTY_NOT_IMPLEMENTED; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1819 } |
31805
05ca6dd36faf
Fix subtitle selection: make selecting -sid 0 work again by replacing the
reimar
parents:
31792
diff
changeset
|
1820 return mp_property_sub(prop, M_PROPERTY_SET, &new_pos, mpctx); |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1821 } |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1822 |
22478 | 1823 /// Subtitle delay (RW) |
31156 | 1824 static int mp_property_sub_delay(m_option_t *prop, int action, void *arg, |
1825 MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1826 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1827 if (!mpctx->sh_video) |
31077 | 1828 return M_PROPERTY_UNAVAILABLE; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1829 return m_property_delay(prop, action, arg, &sub_delay); |
22478 | 1830 } |
1831 | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1832 /// Alignment of text subtitles (RW) |
31156 | 1833 static int mp_property_sub_alignment(m_option_t *prop, int action, |
1834 void *arg, MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1835 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1836 char *name[] = { MSGTR_Top, MSGTR_Center, MSGTR_Bottom }; |
22478 | 1837 |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1838 if (!mpctx->sh_video || mpctx->global_sub_pos < 0 |
31077 | 1839 || sub_source(mpctx) != SUB_SOURCE_SUBS) |
1840 return M_PROPERTY_UNAVAILABLE; | |
22478 | 1841 |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1842 switch (action) { |
22478 | 1843 case M_PROPERTY_PRINT: |
31077 | 1844 if (!arg) |
1845 return M_PROPERTY_ERROR; | |
1846 M_PROPERTY_CLAMP(prop, sub_alignment); | |
1847 *(char **) arg = strdup(name[sub_alignment]); | |
1848 return M_PROPERTY_OK; | |
22478 | 1849 case M_PROPERTY_SET: |
31077 | 1850 if (!arg) |
1851 return M_PROPERTY_ERROR; | |
22478 | 1852 case M_PROPERTY_STEP_UP: |
1853 case M_PROPERTY_STEP_DOWN: | |
31077 | 1854 vo_osd_changed(OSDTYPE_SUBTITLE); |
22478 | 1855 default: |
31077 | 1856 return m_property_choice(prop, action, arg, &sub_alignment); |
22478 | 1857 } |
1858 } | |
1859 | |
1860 /// Subtitle visibility (RW) | |
31156 | 1861 static int mp_property_sub_visibility(m_option_t *prop, int action, |
1862 void *arg, MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1863 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1864 if (!mpctx->sh_video) |
31077 | 1865 return M_PROPERTY_UNAVAILABLE; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1866 |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1867 switch (action) { |
22478 | 1868 case M_PROPERTY_SET: |
31077 | 1869 if (!arg) |
1870 return M_PROPERTY_ERROR; | |
22478 | 1871 case M_PROPERTY_STEP_UP: |
1872 case M_PROPERTY_STEP_DOWN: | |
31077 | 1873 vo_osd_changed(OSDTYPE_SUBTITLE); |
1874 if (vo_spudec) | |
1875 vo_osd_changed(OSDTYPE_SPU); | |
22478 | 1876 default: |
31077 | 1877 return m_property_flag(prop, action, arg, &sub_visibility); |
22478 | 1878 } |
1879 } | |
1880 | |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
1881 #ifdef CONFIG_ASS |
25814
4ba9b9bdf123
Add ass_use_margins command and property to shift subtitles to margins and back
eugeni
parents:
25717
diff
changeset
|
1882 /// Use margins for libass subtitles (RW) |
31156 | 1883 static int mp_property_ass_use_margins(m_option_t *prop, int action, |
1884 void *arg, MPContext *mpctx) | |
25814
4ba9b9bdf123
Add ass_use_margins command and property to shift subtitles to margins and back
eugeni
parents:
25717
diff
changeset
|
1885 { |
4ba9b9bdf123
Add ass_use_margins command and property to shift subtitles to margins and back
eugeni
parents:
25717
diff
changeset
|
1886 if (!mpctx->sh_video) |
31077 | 1887 return M_PROPERTY_UNAVAILABLE; |
25814
4ba9b9bdf123
Add ass_use_margins command and property to shift subtitles to margins and back
eugeni
parents:
25717
diff
changeset
|
1888 |
4ba9b9bdf123
Add ass_use_margins command and property to shift subtitles to margins and back
eugeni
parents:
25717
diff
changeset
|
1889 switch (action) { |
4ba9b9bdf123
Add ass_use_margins command and property to shift subtitles to margins and back
eugeni
parents:
25717
diff
changeset
|
1890 case M_PROPERTY_SET: |
31077 | 1891 if (!arg) |
1892 return M_PROPERTY_ERROR; | |
25814
4ba9b9bdf123
Add ass_use_margins command and property to shift subtitles to margins and back
eugeni
parents:
25717
diff
changeset
|
1893 case M_PROPERTY_STEP_UP: |
4ba9b9bdf123
Add ass_use_margins command and property to shift subtitles to margins and back
eugeni
parents:
25717
diff
changeset
|
1894 case M_PROPERTY_STEP_DOWN: |
31077 | 1895 ass_force_reload = 1; |
25814
4ba9b9bdf123
Add ass_use_margins command and property to shift subtitles to margins and back
eugeni
parents:
25717
diff
changeset
|
1896 default: |
31077 | 1897 return m_property_flag(prop, action, arg, &ass_use_margins); |
25814
4ba9b9bdf123
Add ass_use_margins command and property to shift subtitles to margins and back
eugeni
parents:
25717
diff
changeset
|
1898 } |
4ba9b9bdf123
Add ass_use_margins command and property to shift subtitles to margins and back
eugeni
parents:
25717
diff
changeset
|
1899 } |
4ba9b9bdf123
Add ass_use_margins command and property to shift subtitles to margins and back
eugeni
parents:
25717
diff
changeset
|
1900 #endif |
4ba9b9bdf123
Add ass_use_margins command and property to shift subtitles to margins and back
eugeni
parents:
25717
diff
changeset
|
1901 |
22478 | 1902 /// Show only forced subtitles (RW) |
31156 | 1903 static int mp_property_sub_forced_only(m_option_t *prop, int action, |
1904 void *arg, MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1905 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1906 if (!vo_spudec) |
31077 | 1907 return M_PROPERTY_UNAVAILABLE; |
22478 | 1908 |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1909 switch (action) { |
22478 | 1910 case M_PROPERTY_SET: |
31077 | 1911 if (!arg) |
1912 return M_PROPERTY_ERROR; | |
22478 | 1913 case M_PROPERTY_STEP_UP: |
1914 case M_PROPERTY_STEP_DOWN: | |
31077 | 1915 m_property_flag(prop, action, arg, &forced_subs_only); |
1916 spudec_set_forced_subs_only(vo_spudec, forced_subs_only); | |
1917 return M_PROPERTY_OK; | |
22478 | 1918 default: |
31077 | 1919 return m_property_flag(prop, action, arg, &forced_subs_only); |
22478 | 1920 } |
1921 | |
1922 } | |
1923 | |
27393 | 1924 #ifdef CONFIG_FREETYPE |
23725 | 1925 /// Subtitle scale (RW) |
31156 | 1926 static int mp_property_sub_scale(m_option_t *prop, int action, void *arg, |
1927 MPContext *mpctx) | |
23725 | 1928 { |
1929 | |
1930 switch (action) { | |
1931 case M_PROPERTY_SET: | |
1932 if (!arg) | |
1933 return M_PROPERTY_ERROR; | |
1934 M_PROPERTY_CLAMP(prop, *(float *) arg); | |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
1935 #ifdef CONFIG_ASS |
25815
8920f8a26c05
sub_scale command now works with ass subtitles renderer
ben
parents:
25814
diff
changeset
|
1936 if (ass_enabled) { |
8920f8a26c05
sub_scale command now works with ass subtitles renderer
ben
parents:
25814
diff
changeset
|
1937 ass_font_scale = *(float *) arg; |
8920f8a26c05
sub_scale command now works with ass subtitles renderer
ben
parents:
25814
diff
changeset
|
1938 ass_force_reload = 1; |
8920f8a26c05
sub_scale command now works with ass subtitles renderer
ben
parents:
25814
diff
changeset
|
1939 } |
8920f8a26c05
sub_scale command now works with ass subtitles renderer
ben
parents:
25814
diff
changeset
|
1940 #endif |
25854 | 1941 text_font_scale_factor = *(float *) arg; |
1942 force_load_font = 1; | |
32738
abcf963fbd2c
Force subtitles to be redrawn on sub_scale change.
reimar
parents:
32664
diff
changeset
|
1943 vo_osd_changed(OSDTYPE_SUBTITLE); |
23725 | 1944 return M_PROPERTY_OK; |
1945 case M_PROPERTY_STEP_UP: | |
1946 case M_PROPERTY_STEP_DOWN: | |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
1947 #ifdef CONFIG_ASS |
25815
8920f8a26c05
sub_scale command now works with ass subtitles renderer
ben
parents:
25814
diff
changeset
|
1948 if (ass_enabled) { |
8920f8a26c05
sub_scale command now works with ass subtitles renderer
ben
parents:
25814
diff
changeset
|
1949 ass_font_scale += (arg ? *(float *) arg : 0.1)* |
8920f8a26c05
sub_scale command now works with ass subtitles renderer
ben
parents:
25814
diff
changeset
|
1950 (action == M_PROPERTY_STEP_UP ? 1.0 : -1.0); |
8920f8a26c05
sub_scale command now works with ass subtitles renderer
ben
parents:
25814
diff
changeset
|
1951 M_PROPERTY_CLAMP(prop, ass_font_scale); |
8920f8a26c05
sub_scale command now works with ass subtitles renderer
ben
parents:
25814
diff
changeset
|
1952 ass_force_reload = 1; |
8920f8a26c05
sub_scale command now works with ass subtitles renderer
ben
parents:
25814
diff
changeset
|
1953 } |
8920f8a26c05
sub_scale command now works with ass subtitles renderer
ben
parents:
25814
diff
changeset
|
1954 #endif |
25854 | 1955 text_font_scale_factor += (arg ? *(float *) arg : 0.1)* |
1956 (action == M_PROPERTY_STEP_UP ? 1.0 : -1.0); | |
1957 M_PROPERTY_CLAMP(prop, text_font_scale_factor); | |
1958 force_load_font = 1; | |
32738
abcf963fbd2c
Force subtitles to be redrawn on sub_scale change.
reimar
parents:
32664
diff
changeset
|
1959 vo_osd_changed(OSDTYPE_SUBTITLE); |
23725 | 1960 return M_PROPERTY_OK; |
1961 default: | |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
1962 #ifdef CONFIG_ASS |
25815
8920f8a26c05
sub_scale command now works with ass subtitles renderer
ben
parents:
25814
diff
changeset
|
1963 if (ass_enabled) |
8920f8a26c05
sub_scale command now works with ass subtitles renderer
ben
parents:
25814
diff
changeset
|
1964 return m_property_float_ro(prop, action, arg, ass_font_scale); |
8920f8a26c05
sub_scale command now works with ass subtitles renderer
ben
parents:
25814
diff
changeset
|
1965 else |
8920f8a26c05
sub_scale command now works with ass subtitles renderer
ben
parents:
25814
diff
changeset
|
1966 #endif |
25816 | 1967 return m_property_float_ro(prop, action, arg, text_font_scale_factor); |
23725 | 1968 } |
1969 } | |
23740 | 1970 #endif |
23725 | 1971 |
22478 | 1972 ///@} |
1973 | |
1974 /// \defgroup TVProperties TV properties | |
1975 /// \ingroup Properties | |
1976 ///@{ | |
1977 | |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
1978 #ifdef CONFIG_TV |
22478 | 1979 |
1980 /// TV color settings (RW) | |
31156 | 1981 static int mp_property_tv_color(m_option_t *prop, int action, void *arg, |
1982 MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1983 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1984 int r, val; |
22478 | 1985 tvi_handle_t *tvh = mpctx->demuxer->priv; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1986 if (mpctx->demuxer->type != DEMUXER_TYPE_TV || !tvh) |
31077 | 1987 return M_PROPERTY_UNAVAILABLE; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1988 |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1989 switch (action) { |
22478 | 1990 case M_PROPERTY_SET: |
31077 | 1991 if (!arg) |
1992 return M_PROPERTY_ERROR; | |
1993 M_PROPERTY_CLAMP(prop, *(int *) arg); | |
32405
ad86352b7c6b
Use intptr_t for integers stored in opaque pointers.
cigaes
parents:
32392
diff
changeset
|
1994 return tv_set_color_options(tvh, (intptr_t) prop->priv, *(int *) arg); |
22478 | 1995 case M_PROPERTY_GET: |
32405
ad86352b7c6b
Use intptr_t for integers stored in opaque pointers.
cigaes
parents:
32392
diff
changeset
|
1996 return tv_get_color_options(tvh, (intptr_t) prop->priv, arg); |
22478 | 1997 case M_PROPERTY_STEP_UP: |
1998 case M_PROPERTY_STEP_DOWN: | |
32405
ad86352b7c6b
Use intptr_t for integers stored in opaque pointers.
cigaes
parents:
32392
diff
changeset
|
1999 if ((r = tv_get_color_options(tvh, (intptr_t) prop->priv, &val)) >= 0) { |
31077 | 2000 if (!r) |
2001 return M_PROPERTY_ERROR; | |
2002 val += (arg ? *(int *) arg : 1) * | |
2003 (action == M_PROPERTY_STEP_DOWN ? -1 : 1); | |
2004 M_PROPERTY_CLAMP(prop, val); | |
32405
ad86352b7c6b
Use intptr_t for integers stored in opaque pointers.
cigaes
parents:
32392
diff
changeset
|
2005 return tv_set_color_options(tvh, (intptr_t) prop->priv, val); |
31077 | 2006 } |
2007 return M_PROPERTY_ERROR; | |
22478 | 2008 } |
2009 return M_PROPERTY_NOT_IMPLEMENTED; | |
2010 } | |
2011 | |
2012 #endif | |
2013 | |
31156 | 2014 static int mp_property_teletext_common(m_option_t *prop, int action, void *arg, |
2015 MPContext *mpctx) | |
23900 | 2016 { |
2017 int val,result; | |
32405
ad86352b7c6b
Use intptr_t for integers stored in opaque pointers.
cigaes
parents:
32392
diff
changeset
|
2018 int base_ioctl=(intptr_t)prop->priv; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28368
diff
changeset
|
2019 /* |
23900 | 2020 for teletext's GET,SET,STEP ioctls this is not 0 |
2021 SET is GET+1 | |
2022 STEP is GET+2 | |
2023 */ | |
29820
b33846197f5c
Make sure the teletext property stuff does not crash if no demuxer is available.
reimar
parents:
29809
diff
changeset
|
2024 if (!mpctx->demuxer || !mpctx->demuxer->teletext) |
23900 | 2025 return M_PROPERTY_UNAVAILABLE; |
2026 if(!base_ioctl) | |
2027 return M_PROPERTY_ERROR; | |
2028 | |
2029 switch (action) { | |
2030 case M_PROPERTY_GET: | |
2031 if (!arg) | |
2032 return M_PROPERTY_ERROR; | |
29806 | 2033 result=teletext_control(mpctx->demuxer->teletext, base_ioctl, arg); |
23900 | 2034 break; |
2035 case M_PROPERTY_SET: | |
2036 if (!arg) | |
2037 return M_PROPERTY_ERROR; | |
2038 M_PROPERTY_CLAMP(prop, *(int *) arg); | |
29806 | 2039 result=teletext_control(mpctx->demuxer->teletext, base_ioctl+1, arg); |
23900 | 2040 break; |
2041 case M_PROPERTY_STEP_UP: | |
2042 case M_PROPERTY_STEP_DOWN: | |
29806 | 2043 result=teletext_control(mpctx->demuxer->teletext, base_ioctl, &val); |
23900 | 2044 val += (arg ? *(int *) arg : 1) * (action == M_PROPERTY_STEP_DOWN ? -1 : 1); |
29806 | 2045 result=teletext_control(mpctx->demuxer->teletext, base_ioctl+1, &val); |
23900 | 2046 break; |
2047 default: | |
2048 return M_PROPERTY_NOT_IMPLEMENTED; | |
2049 } | |
2050 | |
29806 | 2051 return result == VBI_CONTROL_TRUE ? M_PROPERTY_OK : M_PROPERTY_ERROR; |
23900 | 2052 } |
2053 | |
31156 | 2054 static int mp_property_teletext_mode(m_option_t *prop, int action, void *arg, |
2055 MPContext *mpctx) | |
23900 | 2056 { |
2057 int result; | |
2058 int val; | |
2059 | |
2060 //with tvh==NULL will fail too | |
2061 result=mp_property_teletext_common(prop,action,arg,mpctx); | |
2062 if(result!=M_PROPERTY_OK) | |
2063 return result; | |
2064 | |
29806 | 2065 if(teletext_control(mpctx->demuxer->teletext, |
32405
ad86352b7c6b
Use intptr_t for integers stored in opaque pointers.
cigaes
parents:
32392
diff
changeset
|
2066 (intptr_t)prop->priv, &val)==VBI_CONTROL_TRUE && val) |
23900 | 2067 mp_input_set_section("teletext"); |
2068 else | |
2069 mp_input_set_section("tv"); | |
2070 return M_PROPERTY_OK; | |
2071 } | |
2072 | |
31156 | 2073 static int mp_property_teletext_page(m_option_t *prop, int action, void *arg, |
2074 MPContext *mpctx) | |
23900 | 2075 { |
2076 int result; | |
2077 int val; | |
29806 | 2078 if (!mpctx->demuxer->teletext) |
27806
26c27a80b8af
Disallow the modification of teletext properties when the tv demuxer is
faust3
parents:
27650
diff
changeset
|
2079 return M_PROPERTY_UNAVAILABLE; |
23900 | 2080 switch(action){ |
2081 case M_PROPERTY_STEP_UP: | |
2082 case M_PROPERTY_STEP_DOWN: | |
2083 //This should be handled separately | |
2084 val = (arg ? *(int *) arg : 1) * (action == M_PROPERTY_STEP_DOWN ? -1 : 1); | |
29806 | 2085 result=teletext_control(mpctx->demuxer->teletext, |
2086 TV_VBI_CONTROL_STEP_PAGE, &val); | |
23900 | 2087 break; |
2088 default: | |
2089 result=mp_property_teletext_common(prop,action,arg,mpctx); | |
2090 } | |
2091 return result; | |
2092 } | |
2093 | |
22478 | 2094 ///@} |
2095 | |
2096 /// All properties available in MPlayer. | |
2097 /** \ingroup Properties | |
2098 */ | |
25717 | 2099 static const m_option_t mp_properties[] = { |
22478 | 2100 // General |
2101 { "osdlevel", mp_property_osdlevel, CONF_TYPE_INT, | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2102 M_OPT_RANGE, 0, 3, NULL }, |
23727 | 2103 { "loop", mp_property_loop, CONF_TYPE_INT, |
2104 M_OPT_MIN, -1, 0, NULL }, | |
22478 | 2105 { "speed", mp_property_playback_speed, CONF_TYPE_FLOAT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2106 M_OPT_RANGE, 0.01, 100.0, NULL }, |
22478 | 2107 { "filename", mp_property_filename, CONF_TYPE_STRING, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2108 0, 0, 0, NULL }, |
22478 | 2109 { "path", mp_property_path, CONF_TYPE_STRING, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2110 0, 0, 0, NULL }, |
22478 | 2111 { "demuxer", mp_property_demuxer, CONF_TYPE_STRING, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2112 0, 0, 0, NULL }, |
22478 | 2113 { "stream_pos", mp_property_stream_pos, CONF_TYPE_POSITION, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2114 M_OPT_MIN, 0, 0, NULL }, |
22478 | 2115 { "stream_start", mp_property_stream_start, CONF_TYPE_POSITION, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2116 M_OPT_MIN, 0, 0, NULL }, |
22478 | 2117 { "stream_end", mp_property_stream_end, CONF_TYPE_POSITION, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2118 M_OPT_MIN, 0, 0, NULL }, |
22478 | 2119 { "stream_length", mp_property_stream_length, CONF_TYPE_POSITION, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2120 M_OPT_MIN, 0, 0, NULL }, |
31728 | 2121 { "stream_time_pos", mp_property_stream_time_pos, CONF_TYPE_TIME, |
2122 M_OPT_MIN, 0, 0, NULL }, | |
23417 | 2123 { "length", mp_property_length, CONF_TYPE_TIME, |
2124 M_OPT_MIN, 0, 0, NULL }, | |
23418 | 2125 { "percent_pos", mp_property_percent_pos, CONF_TYPE_INT, |
2126 M_OPT_RANGE, 0, 100, NULL }, | |
2127 { "time_pos", mp_property_time_pos, CONF_TYPE_TIME, | |
2128 M_OPT_MIN, 0, 0, NULL }, | |
25363 | 2129 { "chapter", mp_property_chapter, CONF_TYPE_INT, |
29365
794a26e68c2c
Make set_property chapter 0-based like all other chapter-related
reimar
parents:
29333
diff
changeset
|
2130 M_OPT_MIN, 0, 0, NULL }, |
27635
22bdd7ba8892
slave command to get the number of chapters; patch by Kevin DeKorte - kdekorte gmail com
nicodvb
parents:
27457
diff
changeset
|
2131 { "chapters", mp_property_chapters, CONF_TYPE_INT, |
22bdd7ba8892
slave command to get the number of chapters; patch by Kevin DeKorte - kdekorte gmail com
nicodvb
parents:
27457
diff
changeset
|
2132 0, 0, 0, NULL }, |
25577
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
2133 { "angle", mp_property_angle, CONF_TYPE_INT, |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
2134 CONF_RANGE, -2, 10, NULL }, |
23394
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
2135 { "metadata", mp_property_metadata, CONF_TYPE_STRING_LIST, |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
2136 0, 0, 0, NULL }, |
27648
427fec163870
Add a "pause" property to allow checking if MPlayer is paused.
reimar
parents:
27635
diff
changeset
|
2137 { "pause", mp_property_pause, CONF_TYPE_FLAG, |
427fec163870
Add a "pause" property to allow checking if MPlayer is paused.
reimar
parents:
27635
diff
changeset
|
2138 M_OPT_RANGE, 0, 1, NULL }, |
32438
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
2139 { "capturing", mp_property_capture, CONF_TYPE_FLAG, |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
2140 M_OPT_RANGE, 0, 1, NULL }, |
22478 | 2141 |
2142 // Audio | |
2143 { "volume", mp_property_volume, CONF_TYPE_FLOAT, | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2144 M_OPT_RANGE, 0, 100, NULL }, |
22478 | 2145 { "mute", mp_property_mute, CONF_TYPE_FLAG, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2146 M_OPT_RANGE, 0, 1, NULL }, |
22478 | 2147 { "audio_delay", mp_property_audio_delay, CONF_TYPE_FLOAT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2148 M_OPT_RANGE, -100, 100, NULL }, |
22478 | 2149 { "audio_format", mp_property_audio_format, CONF_TYPE_INT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2150 0, 0, 0, NULL }, |
23394
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
2151 { "audio_codec", mp_property_audio_codec, CONF_TYPE_STRING, |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
2152 0, 0, 0, NULL }, |
22478 | 2153 { "audio_bitrate", mp_property_audio_bitrate, CONF_TYPE_INT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2154 0, 0, 0, NULL }, |
22478 | 2155 { "samplerate", mp_property_samplerate, CONF_TYPE_INT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2156 0, 0, 0, NULL }, |
22478 | 2157 { "channels", mp_property_channels, CONF_TYPE_INT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2158 0, 0, 0, NULL }, |
22478 | 2159 { "switch_audio", mp_property_audio, CONF_TYPE_INT, |
29333
09938ba82991
Do not use MAX_A/V_STREAMS as upper limit for switch_audio/switch_video
reimar
parents:
29263
diff
changeset
|
2160 CONF_RANGE, -2, 65535, NULL }, |
23568 | 2161 { "balance", mp_property_balance, CONF_TYPE_FLOAT, |
2162 M_OPT_RANGE, -1, 1, NULL }, | |
22478 | 2163 |
2164 // Video | |
2165 { "fullscreen", mp_property_fullscreen, CONF_TYPE_FLAG, | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2166 M_OPT_RANGE, 0, 1, NULL }, |
22478 | 2167 { "deinterlace", mp_property_deinterlace, CONF_TYPE_FLAG, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2168 M_OPT_RANGE, 0, 1, NULL }, |
22478 | 2169 { "ontop", mp_property_ontop, CONF_TYPE_FLAG, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2170 M_OPT_RANGE, 0, 1, NULL }, |
22478 | 2171 { "rootwin", mp_property_rootwin, CONF_TYPE_FLAG, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2172 M_OPT_RANGE, 0, 1, NULL }, |
22478 | 2173 { "border", mp_property_border, CONF_TYPE_FLAG, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2174 M_OPT_RANGE, 0, 1, NULL }, |
22478 | 2175 { "framedropping", mp_property_framedropping, CONF_TYPE_INT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2176 M_OPT_RANGE, 0, 2, NULL }, |
22478 | 2177 { "gamma", mp_property_gamma, CONF_TYPE_INT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2178 M_OPT_RANGE, -100, 100, &vo_gamma_gamma }, |
22478 | 2179 { "brightness", mp_property_gamma, CONF_TYPE_INT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2180 M_OPT_RANGE, -100, 100, &vo_gamma_brightness }, |
22478 | 2181 { "contrast", mp_property_gamma, CONF_TYPE_INT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2182 M_OPT_RANGE, -100, 100, &vo_gamma_contrast }, |
22478 | 2183 { "saturation", mp_property_gamma, CONF_TYPE_INT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2184 M_OPT_RANGE, -100, 100, &vo_gamma_saturation }, |
22478 | 2185 { "hue", mp_property_gamma, CONF_TYPE_INT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2186 M_OPT_RANGE, -100, 100, &vo_gamma_hue }, |
22478 | 2187 { "panscan", mp_property_panscan, CONF_TYPE_FLOAT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2188 M_OPT_RANGE, 0, 1, NULL }, |
22478 | 2189 { "vsync", mp_property_vsync, CONF_TYPE_FLAG, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2190 M_OPT_RANGE, 0, 1, NULL }, |
22478 | 2191 { "video_format", mp_property_video_format, CONF_TYPE_INT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2192 0, 0, 0, NULL }, |
23394
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
2193 { "video_codec", mp_property_video_codec, CONF_TYPE_STRING, |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
2194 0, 0, 0, NULL }, |
22478 | 2195 { "video_bitrate", mp_property_video_bitrate, CONF_TYPE_INT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2196 0, 0, 0, NULL }, |
22478 | 2197 { "width", mp_property_width, CONF_TYPE_INT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2198 0, 0, 0, NULL }, |
22478 | 2199 { "height", mp_property_height, CONF_TYPE_INT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2200 0, 0, 0, NULL }, |
22478 | 2201 { "fps", mp_property_fps, CONF_TYPE_FLOAT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2202 0, 0, 0, NULL }, |
22478 | 2203 { "aspect", mp_property_aspect, CONF_TYPE_FLOAT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2204 0, 0, 0, NULL }, |
22478 | 2205 { "switch_video", mp_property_video, CONF_TYPE_INT, |
29333
09938ba82991
Do not use MAX_A/V_STREAMS as upper limit for switch_audio/switch_video
reimar
parents:
29263
diff
changeset
|
2206 CONF_RANGE, -2, 65535, NULL }, |
22478 | 2207 { "switch_program", mp_property_program, CONF_TYPE_INT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2208 CONF_RANGE, -1, 65535, NULL }, |
22478 | 2209 |
2210 // Subs | |
2211 { "sub", mp_property_sub, CONF_TYPE_INT, | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2212 M_OPT_MIN, -1, 0, NULL }, |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
2213 { "sub_source", mp_property_sub_source, CONF_TYPE_INT, |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
2214 M_OPT_RANGE, -1, SUB_SOURCES - 1, NULL }, |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
2215 { "sub_vob", mp_property_sub_by_type, CONF_TYPE_INT, |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
2216 M_OPT_MIN, -1, 0, NULL }, |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
2217 { "sub_demux", mp_property_sub_by_type, CONF_TYPE_INT, |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
2218 M_OPT_MIN, -1, 0, NULL }, |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
2219 { "sub_file", mp_property_sub_by_type, CONF_TYPE_INT, |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
2220 M_OPT_MIN, -1, 0, NULL }, |
22478 | 2221 { "sub_delay", mp_property_sub_delay, CONF_TYPE_FLOAT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2222 0, 0, 0, NULL }, |
22478 | 2223 { "sub_pos", mp_property_sub_pos, CONF_TYPE_INT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2224 M_OPT_RANGE, 0, 100, NULL }, |
22478 | 2225 { "sub_alignment", mp_property_sub_alignment, CONF_TYPE_INT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2226 M_OPT_RANGE, 0, 2, NULL }, |
22478 | 2227 { "sub_visibility", mp_property_sub_visibility, CONF_TYPE_FLAG, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2228 M_OPT_RANGE, 0, 1, NULL }, |
22478 | 2229 { "sub_forced_only", mp_property_sub_forced_only, CONF_TYPE_FLAG, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2230 M_OPT_RANGE, 0, 1, NULL }, |
27393 | 2231 #ifdef CONFIG_FREETYPE |
23725 | 2232 { "sub_scale", mp_property_sub_scale, CONF_TYPE_FLOAT, |
2233 M_OPT_RANGE, 0, 100, NULL }, | |
23740 | 2234 #endif |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
2235 #ifdef CONFIG_ASS |
25814
4ba9b9bdf123
Add ass_use_margins command and property to shift subtitles to margins and back
eugeni
parents:
25717
diff
changeset
|
2236 { "ass_use_margins", mp_property_ass_use_margins, CONF_TYPE_FLAG, |
4ba9b9bdf123
Add ass_use_margins command and property to shift subtitles to margins and back
eugeni
parents:
25717
diff
changeset
|
2237 M_OPT_RANGE, 0, 1, NULL }, |
4ba9b9bdf123
Add ass_use_margins command and property to shift subtitles to margins and back
eugeni
parents:
25717
diff
changeset
|
2238 #endif |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2239 |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
2240 #ifdef CONFIG_TV |
22478 | 2241 { "tv_brightness", mp_property_tv_color, CONF_TYPE_INT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2242 M_OPT_RANGE, -100, 100, (void *) TV_COLOR_BRIGHTNESS }, |
22478 | 2243 { "tv_contrast", mp_property_tv_color, CONF_TYPE_INT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2244 M_OPT_RANGE, -100, 100, (void *) TV_COLOR_CONTRAST }, |
22478 | 2245 { "tv_saturation", mp_property_tv_color, CONF_TYPE_INT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2246 M_OPT_RANGE, -100, 100, (void *) TV_COLOR_SATURATION }, |
22478 | 2247 { "tv_hue", mp_property_tv_color, CONF_TYPE_INT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2248 M_OPT_RANGE, -100, 100, (void *) TV_COLOR_HUE }, |
22478 | 2249 #endif |
23900 | 2250 { "teletext_page", mp_property_teletext_page, CONF_TYPE_INT, |
2251 M_OPT_RANGE, 100, 899, (void*)TV_VBI_CONTROL_GET_PAGE }, | |
2252 { "teletext_subpage", mp_property_teletext_common, CONF_TYPE_INT, | |
2253 M_OPT_RANGE, 0, 64, (void*)TV_VBI_CONTROL_GET_SUBPAGE }, | |
2254 { "teletext_mode", mp_property_teletext_mode, CONF_TYPE_FLAG, | |
2255 M_OPT_RANGE, 0, 1, (void*)TV_VBI_CONTROL_GET_MODE }, | |
2256 { "teletext_format", mp_property_teletext_common, CONF_TYPE_INT, | |
2257 M_OPT_RANGE, 0, 3, (void*)TV_VBI_CONTROL_GET_FORMAT }, | |
2258 { "teletext_half_page", mp_property_teletext_common, CONF_TYPE_INT, | |
2259 M_OPT_RANGE, 0, 2, (void*)TV_VBI_CONTROL_GET_HALF_PAGE }, | |
22478 | 2260 { NULL, NULL, NULL, 0, 0, 0, NULL } |
2261 }; | |
2262 | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2263 |
23393
a5e55cb59bbc
Rework the property API to allow sub properties such as
albeu
parents:
23259
diff
changeset
|
2264 int mp_property_do(const char *name, int action, void *val, void *ctx) |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2265 { |
23393
a5e55cb59bbc
Rework the property API to allow sub properties such as
albeu
parents:
23259
diff
changeset
|
2266 return m_property_do(mp_properties, name, action, val, ctx); |
22478 | 2267 } |
2268 | |
23393
a5e55cb59bbc
Rework the property API to allow sub properties such as
albeu
parents:
23259
diff
changeset
|
2269 char* mp_property_print(const char *name, void* ctx) |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2270 { |
23393
a5e55cb59bbc
Rework the property API to allow sub properties such as
albeu
parents:
23259
diff
changeset
|
2271 char* ret = NULL; |
a5e55cb59bbc
Rework the property API to allow sub properties such as
albeu
parents:
23259
diff
changeset
|
2272 if(mp_property_do(name,M_PROPERTY_PRINT,&ret,ctx) <= 0) |
a5e55cb59bbc
Rework the property API to allow sub properties such as
albeu
parents:
23259
diff
changeset
|
2273 return NULL; |
a5e55cb59bbc
Rework the property API to allow sub properties such as
albeu
parents:
23259
diff
changeset
|
2274 return ret; |
22478 | 2275 } |
2276 | |
31156 | 2277 char *property_expand_string(MPContext *mpctx, char *str) |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2278 { |
22478 | 2279 return m_properties_expand_string(mp_properties, str, mpctx); |
2280 } | |
2281 | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2282 void property_print_help(void) |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2283 { |
22478 | 2284 m_properties_print_help_list(mp_properties); |
2285 } | |
2286 | |
2287 | |
2288 ///@} | |
2289 // Properties group | |
2290 | |
2291 | |
2292 /** | |
2293 * \defgroup Command2Property Command to property bridge | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2294 * |
22478 | 2295 * It is used to handle most commands that just set a property |
2296 * and optionally display something on the OSD. | |
2297 * Two kinds of commands are handled: adjust or toggle. | |
2298 * | |
2299 * Adjust commands take 1 or 2 parameters: <value> <abs> | |
2300 * If <abs> is non-zero the property is set to the given value | |
2301 * otherwise it is adjusted. | |
2302 * | |
2303 * Toggle commands take 0 or 1 parameters. With no parameter | |
2304 * or a value less than the property minimum it just steps the | |
32593 | 2305 * property to its next or previous value respectively. |
2306 * Otherwise it sets it to the given value. | |
22478 | 2307 * |
2308 *@{ | |
2309 */ | |
2310 | |
2311 /// List of the commands that can be handled by setting a property. | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2312 static struct { |
22478 | 2313 /// property name |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2314 const char *name; |
22478 | 2315 /// cmd id |
2316 int cmd; | |
2317 /// set/adjust or toggle command | |
2318 int toggle; | |
2319 /// progressbar type | |
2320 int osd_progbar; | |
2321 /// osd msg id if it must be shared | |
2322 int osd_id; | |
2323 /// osd msg template | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2324 const char *osd_msg; |
22478 | 2325 } set_prop_cmd[] = { |
23727 | 2326 // general |
2327 { "loop", MP_CMD_LOOP, 0, 0, -1, MSGTR_LoopStatus }, | |
25363 | 2328 { "chapter", MP_CMD_SEEK_CHAPTER, 0, 0, -1, NULL }, |
25577
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
2329 { "angle", MP_CMD_SWITCH_ANGLE, 0, 0, -1, NULL }, |
32438
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
2330 { "capturing", MP_CMD_CAPTURING, 1, 0, -1, NULL }, |
22478 | 2331 // audio |
2332 { "volume", MP_CMD_VOLUME, 0, OSD_VOLUME, -1, MSGTR_Volume }, | |
2333 { "mute", MP_CMD_MUTE, 1, 0, -1, MSGTR_MuteStatus }, | |
2334 { "audio_delay", MP_CMD_AUDIO_DELAY, 0, 0, -1, MSGTR_AVDelayStatus }, | |
2335 { "switch_audio", MP_CMD_SWITCH_AUDIO, 1, 0, -1, MSGTR_OSDAudio }, | |
23568 | 2336 { "balance", MP_CMD_BALANCE, 0, OSD_BALANCE, -1, MSGTR_Balance }, |
22478 | 2337 // video |
2338 { "fullscreen", MP_CMD_VO_FULLSCREEN, 1, 0, -1, NULL }, | |
2339 { "panscan", MP_CMD_PANSCAN, 0, OSD_PANSCAN, -1, MSGTR_Panscan }, | |
2340 { "ontop", MP_CMD_VO_ONTOP, 1, 0, -1, MSGTR_OnTopStatus }, | |
2341 { "rootwin", MP_CMD_VO_ROOTWIN, 1, 0, -1, MSGTR_RootwinStatus }, | |
2342 { "border", MP_CMD_VO_BORDER, 1, 0, -1, MSGTR_BorderStatus }, | |
2343 { "framedropping", MP_CMD_FRAMEDROPPING, 1, 0, -1, MSGTR_FramedroppingStatus }, | |
2344 { "gamma", MP_CMD_GAMMA, 0, OSD_BRIGHTNESS, -1, MSGTR_Gamma }, | |
2345 { "brightness", MP_CMD_BRIGHTNESS, 0, OSD_BRIGHTNESS, -1, MSGTR_Brightness }, | |
2346 { "contrast", MP_CMD_CONTRAST, 0, OSD_CONTRAST, -1, MSGTR_Contrast }, | |
2347 { "saturation", MP_CMD_SATURATION, 0, OSD_SATURATION, -1, MSGTR_Saturation }, | |
2348 { "hue", MP_CMD_HUE, 0, OSD_HUE, -1, MSGTR_Hue }, | |
2349 { "vsync", MP_CMD_SWITCH_VSYNC, 1, 0, -1, MSGTR_VSyncStatus }, | |
31077 | 2350 // subs |
22478 | 2351 { "sub", MP_CMD_SUB_SELECT, 1, 0, -1, MSGTR_SubSelectStatus }, |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
2352 { "sub_source", MP_CMD_SUB_SOURCE, 1, 0, -1, MSGTR_SubSourceStatus }, |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
2353 { "sub_vob", MP_CMD_SUB_VOB, 1, 0, -1, MSGTR_SubSelectStatus }, |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
2354 { "sub_demux", MP_CMD_SUB_DEMUX, 1, 0, -1, MSGTR_SubSelectStatus }, |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
2355 { "sub_file", MP_CMD_SUB_FILE, 1, 0, -1, MSGTR_SubSelectStatus }, |
22478 | 2356 { "sub_pos", MP_CMD_SUB_POS, 0, 0, -1, MSGTR_SubPosStatus }, |
2357 { "sub_alignment", MP_CMD_SUB_ALIGNMENT, 1, 0, -1, MSGTR_SubAlignStatus }, | |
2358 { "sub_delay", MP_CMD_SUB_DELAY, 0, 0, OSD_MSG_SUB_DELAY, MSGTR_SubDelayStatus }, | |
2359 { "sub_visibility", MP_CMD_SUB_VISIBILITY, 1, 0, -1, MSGTR_SubVisibleStatus }, | |
2360 { "sub_forced_only", MP_CMD_SUB_FORCED_ONLY, 1, 0, -1, MSGTR_SubForcedOnlyStatus }, | |
27393 | 2361 #ifdef CONFIG_FREETYPE |
23725 | 2362 { "sub_scale", MP_CMD_SUB_SCALE, 0, 0, -1, MSGTR_SubScale}, |
23740 | 2363 #endif |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
2364 #ifdef CONFIG_ASS |
25814
4ba9b9bdf123
Add ass_use_margins command and property to shift subtitles to margins and back
eugeni
parents:
25717
diff
changeset
|
2365 { "ass_use_margins", MP_CMD_ASS_USE_MARGINS, 1, 0, -1, NULL }, |
4ba9b9bdf123
Add ass_use_margins command and property to shift subtitles to margins and back
eugeni
parents:
25717
diff
changeset
|
2366 #endif |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
2367 #ifdef CONFIG_TV |
22478 | 2368 { "tv_brightness", MP_CMD_TV_SET_BRIGHTNESS, 0, OSD_BRIGHTNESS, -1, MSGTR_Brightness }, |
2369 { "tv_hue", MP_CMD_TV_SET_HUE, 0, OSD_HUE, -1, MSGTR_Hue }, | |
2370 { "tv_saturation", MP_CMD_TV_SET_SATURATION, 0, OSD_SATURATION, -1, MSGTR_Saturation }, | |
2371 { "tv_contrast", MP_CMD_TV_SET_CONTRAST, 0, OSD_CONTRAST, -1, MSGTR_Contrast }, | |
2372 #endif | |
2373 { NULL, 0, 0, 0, -1, NULL } | |
2374 }; | |
2375 | |
2376 | |
2377 /// Handle commands that set a property. | |
31156 | 2378 static int set_property_command(MPContext *mpctx, mp_cmd_t *cmd) |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2379 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2380 int i, r; |
31156 | 2381 m_option_t *prop; |
23393
a5e55cb59bbc
Rework the property API to allow sub properties such as
albeu
parents:
23259
diff
changeset
|
2382 const char *pname; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2383 |
22478 | 2384 // look for the command |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2385 for (i = 0; set_prop_cmd[i].name; i++) |
31077 | 2386 if (set_prop_cmd[i].cmd == cmd->id) |
2387 break; | |
23393
a5e55cb59bbc
Rework the property API to allow sub properties such as
albeu
parents:
23259
diff
changeset
|
2388 if (!(pname = set_prop_cmd[i].name)) |
31077 | 2389 return 0; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2390 |
23393
a5e55cb59bbc
Rework the property API to allow sub properties such as
albeu
parents:
23259
diff
changeset
|
2391 if (mp_property_do(pname,M_PROPERTY_GET_TYPE,&prop,mpctx) <= 0 || !prop) |
a5e55cb59bbc
Rework the property API to allow sub properties such as
albeu
parents:
23259
diff
changeset
|
2392 return 0; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2393 |
22478 | 2394 // toggle command |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2395 if (set_prop_cmd[i].toggle) { |
31077 | 2396 // set to value |
2397 if (cmd->nargs > 0 && cmd->args[0].v.i >= prop->min) | |
2398 r = mp_property_do(pname, M_PROPERTY_SET, &cmd->args[0].v.i, mpctx); | |
32593 | 2399 else if (cmd->nargs > 0) |
2400 r = mp_property_do(pname, M_PROPERTY_STEP_DOWN, NULL, mpctx); | |
31077 | 2401 else |
2402 r = mp_property_do(pname, M_PROPERTY_STEP_UP, NULL, mpctx); | |
2403 } else if (cmd->args[1].v.i) //set | |
2404 r = mp_property_do(pname, M_PROPERTY_SET, &cmd->args[0].v, mpctx); | |
2405 else // adjust | |
2406 r = mp_property_do(pname, M_PROPERTY_STEP_UP, &cmd->args[0].v, mpctx); | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2407 |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2408 if (r <= 0) |
31077 | 2409 return 1; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2410 |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2411 if (set_prop_cmd[i].osd_progbar) { |
31077 | 2412 if (prop->type == CONF_TYPE_INT) { |
2413 if (mp_property_do(pname, M_PROPERTY_GET, &r, mpctx) > 0) | |
2414 set_osd_bar(set_prop_cmd[i].osd_progbar, | |
2415 set_prop_cmd[i].osd_msg, prop->min, prop->max, r); | |
2416 } else if (prop->type == CONF_TYPE_FLOAT) { | |
2417 float f; | |
2418 if (mp_property_do(pname, M_PROPERTY_GET, &f, mpctx) > 0) | |
2419 set_osd_bar(set_prop_cmd[i].osd_progbar, | |
2420 set_prop_cmd[i].osd_msg, prop->min, prop->max, f); | |
2421 } else | |
2422 mp_msg(MSGT_CPLAYER, MSGL_ERR, | |
2423 "Property use an unsupported type.\n"); | |
2424 return 1; | |
22478 | 2425 } |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2426 |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2427 if (set_prop_cmd[i].osd_msg) { |
31077 | 2428 char *val = mp_property_print(pname, mpctx); |
2429 if (val) { | |
2430 set_osd_msg(set_prop_cmd[i].osd_id >= | |
2431 0 ? set_prop_cmd[i].osd_id : OSD_MSG_PROPERTY + i, | |
2432 1, osd_duration, set_prop_cmd[i].osd_msg, val); | |
2433 free(val); | |
2434 } | |
22478 | 2435 } |
2436 return 1; | |
2437 } | |
2438 | |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
2439 #ifdef CONFIG_DVDNAV |
27068 | 2440 static const struct { |
2441 const char *name; | |
2442 const mp_command_type cmd; | |
2443 } mp_dvdnav_bindings[] = { | |
2444 { "up", MP_CMD_DVDNAV_UP }, | |
2445 { "down", MP_CMD_DVDNAV_DOWN }, | |
2446 { "left", MP_CMD_DVDNAV_LEFT }, | |
2447 { "right", MP_CMD_DVDNAV_RIGHT }, | |
2448 { "menu", MP_CMD_DVDNAV_MENU }, | |
2449 { "select", MP_CMD_DVDNAV_SELECT }, | |
2450 { "prev", MP_CMD_DVDNAV_PREVMENU }, | |
2451 { "mouse", MP_CMD_DVDNAV_MOUSECLICK }, | |
27069
1a6930933140
Keep old dvdnav sub-command options for a while in order
ben
parents:
27068
diff
changeset
|
2452 |
1a6930933140
Keep old dvdnav sub-command options for a while in order
ben
parents:
27068
diff
changeset
|
2453 /* |
1a6930933140
Keep old dvdnav sub-command options for a while in order
ben
parents:
27068
diff
changeset
|
2454 * keep old dvdnav sub-command options for a while in order not to |
1a6930933140
Keep old dvdnav sub-command options for a while in order
ben
parents:
27068
diff
changeset
|
2455 * break slave-mode API too suddenly. |
1a6930933140
Keep old dvdnav sub-command options for a while in order
ben
parents:
27068
diff
changeset
|
2456 */ |
1a6930933140
Keep old dvdnav sub-command options for a while in order
ben
parents:
27068
diff
changeset
|
2457 { "1", MP_CMD_DVDNAV_UP }, |
1a6930933140
Keep old dvdnav sub-command options for a while in order
ben
parents:
27068
diff
changeset
|
2458 { "2", MP_CMD_DVDNAV_DOWN }, |
1a6930933140
Keep old dvdnav sub-command options for a while in order
ben
parents:
27068
diff
changeset
|
2459 { "3", MP_CMD_DVDNAV_LEFT }, |
1a6930933140
Keep old dvdnav sub-command options for a while in order
ben
parents:
27068
diff
changeset
|
2460 { "4", MP_CMD_DVDNAV_RIGHT }, |
1a6930933140
Keep old dvdnav sub-command options for a while in order
ben
parents:
27068
diff
changeset
|
2461 { "5", MP_CMD_DVDNAV_MENU }, |
1a6930933140
Keep old dvdnav sub-command options for a while in order
ben
parents:
27068
diff
changeset
|
2462 { "6", MP_CMD_DVDNAV_SELECT }, |
1a6930933140
Keep old dvdnav sub-command options for a while in order
ben
parents:
27068
diff
changeset
|
2463 { "7", MP_CMD_DVDNAV_PREVMENU }, |
1a6930933140
Keep old dvdnav sub-command options for a while in order
ben
parents:
27068
diff
changeset
|
2464 { "8", MP_CMD_DVDNAV_MOUSECLICK }, |
27068 | 2465 { NULL, 0 } |
2466 }; | |
2467 #endif | |
22478 | 2468 |
30077
72e4567e7a0a
Print a ANS_ERROR reply if one of the *_property slave command fails.
reimar
parents:
30025
diff
changeset
|
2469 static const char *property_error_string(int error_value) |
72e4567e7a0a
Print a ANS_ERROR reply if one of the *_property slave command fails.
reimar
parents:
30025
diff
changeset
|
2470 { |
72e4567e7a0a
Print a ANS_ERROR reply if one of the *_property slave command fails.
reimar
parents:
30025
diff
changeset
|
2471 switch (error_value) { |
72e4567e7a0a
Print a ANS_ERROR reply if one of the *_property slave command fails.
reimar
parents:
30025
diff
changeset
|
2472 case M_PROPERTY_ERROR: |
72e4567e7a0a
Print a ANS_ERROR reply if one of the *_property slave command fails.
reimar
parents:
30025
diff
changeset
|
2473 return "ERROR"; |
72e4567e7a0a
Print a ANS_ERROR reply if one of the *_property slave command fails.
reimar
parents:
30025
diff
changeset
|
2474 case M_PROPERTY_UNAVAILABLE: |
72e4567e7a0a
Print a ANS_ERROR reply if one of the *_property slave command fails.
reimar
parents:
30025
diff
changeset
|
2475 return "PROPERTY_UNAVAILABLE"; |
72e4567e7a0a
Print a ANS_ERROR reply if one of the *_property slave command fails.
reimar
parents:
30025
diff
changeset
|
2476 case M_PROPERTY_NOT_IMPLEMENTED: |
72e4567e7a0a
Print a ANS_ERROR reply if one of the *_property slave command fails.
reimar
parents:
30025
diff
changeset
|
2477 return "NOT_IMPLEMENTED"; |
72e4567e7a0a
Print a ANS_ERROR reply if one of the *_property slave command fails.
reimar
parents:
30025
diff
changeset
|
2478 case M_PROPERTY_UNKNOWN: |
72e4567e7a0a
Print a ANS_ERROR reply if one of the *_property slave command fails.
reimar
parents:
30025
diff
changeset
|
2479 return "PROPERTY_UNKNOWN"; |
72e4567e7a0a
Print a ANS_ERROR reply if one of the *_property slave command fails.
reimar
parents:
30025
diff
changeset
|
2480 case M_PROPERTY_DISABLED: |
72e4567e7a0a
Print a ANS_ERROR reply if one of the *_property slave command fails.
reimar
parents:
30025
diff
changeset
|
2481 return "DISABLED"; |
72e4567e7a0a
Print a ANS_ERROR reply if one of the *_property slave command fails.
reimar
parents:
30025
diff
changeset
|
2482 } |
72e4567e7a0a
Print a ANS_ERROR reply if one of the *_property slave command fails.
reimar
parents:
30025
diff
changeset
|
2483 return "UNKNOWN"; |
72e4567e7a0a
Print a ANS_ERROR reply if one of the *_property slave command fails.
reimar
parents:
30025
diff
changeset
|
2484 } |
72e4567e7a0a
Print a ANS_ERROR reply if one of the *_property slave command fails.
reimar
parents:
30025
diff
changeset
|
2485 |
30344
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2486 static void remove_subtitle_range(MPContext *mpctx, int start, int count) |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2487 { |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2488 int idx; |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2489 int end = start + count; |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2490 int after = mpctx->set_of_sub_size - end; |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2491 sub_data **subs = mpctx->set_of_subtitles; |
30345
ea015e0ab0c6
Also handle ASS subtitles when removing subtitles via sub_remove slave command.
reimar
parents:
30344
diff
changeset
|
2492 #ifdef CONFIG_ASS |
31792
55dacfca4a43
Rename libass types to match upstream libass >= 0.9.7
greg
parents:
31788
diff
changeset
|
2493 ASS_Track **ass_tracks = mpctx->set_of_ass_tracks; |
30345
ea015e0ab0c6
Also handle ASS subtitles when removing subtitles via sub_remove slave command.
reimar
parents:
30344
diff
changeset
|
2494 #endif |
30344
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2495 if (count < 0 || count > mpctx->set_of_sub_size || |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2496 start < 0 || start > mpctx->set_of_sub_size - count) { |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2497 mp_msg(MSGT_CPLAYER, MSGL_ERR, |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2498 "Cannot remove invalid subtitle range %i +%i\n", start, count); |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2499 return; |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2500 } |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2501 for (idx = start; idx < end; idx++) { |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2502 sub_data *subd = subs[idx]; |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2503 mp_msg(MSGT_CPLAYER, MSGL_STATUS, |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2504 MSGTR_RemovedSubtitleFile, idx + 1, |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2505 filename_recode(subd->filename)); |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2506 sub_free(subd); |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2507 subs[idx] = NULL; |
30345
ea015e0ab0c6
Also handle ASS subtitles when removing subtitles via sub_remove slave command.
reimar
parents:
30344
diff
changeset
|
2508 #ifdef CONFIG_ASS |
ea015e0ab0c6
Also handle ASS subtitles when removing subtitles via sub_remove slave command.
reimar
parents:
30344
diff
changeset
|
2509 if (ass_tracks[idx]) |
ea015e0ab0c6
Also handle ASS subtitles when removing subtitles via sub_remove slave command.
reimar
parents:
30344
diff
changeset
|
2510 ass_free_track(ass_tracks[idx]); |
ea015e0ab0c6
Also handle ASS subtitles when removing subtitles via sub_remove slave command.
reimar
parents:
30344
diff
changeset
|
2511 ass_tracks[idx] = NULL; |
ea015e0ab0c6
Also handle ASS subtitles when removing subtitles via sub_remove slave command.
reimar
parents:
30344
diff
changeset
|
2512 #endif |
30344
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2513 } |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2514 |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2515 mpctx->global_sub_size -= count; |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2516 mpctx->set_of_sub_size -= count; |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2517 if (mpctx->set_of_sub_size <= 0) |
31612
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
2518 mpctx->sub_counts[SUB_SOURCE_SUBS] = 0; |
30344
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2519 |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2520 memmove(subs + start, subs + end, after * sizeof(*subs)); |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2521 memset(subs + start + after, 0, count * sizeof(*subs)); |
30345
ea015e0ab0c6
Also handle ASS subtitles when removing subtitles via sub_remove slave command.
reimar
parents:
30344
diff
changeset
|
2522 #ifdef CONFIG_ASS |
ea015e0ab0c6
Also handle ASS subtitles when removing subtitles via sub_remove slave command.
reimar
parents:
30344
diff
changeset
|
2523 memmove(ass_tracks + start, ass_tracks + end, after * sizeof(*ass_tracks)); |
ea015e0ab0c6
Also handle ASS subtitles when removing subtitles via sub_remove slave command.
reimar
parents:
30344
diff
changeset
|
2524 memset(ass_tracks + start + after, 0, count * sizeof(*ass_tracks)); |
ea015e0ab0c6
Also handle ASS subtitles when removing subtitles via sub_remove slave command.
reimar
parents:
30344
diff
changeset
|
2525 #endif |
30344
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2526 |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2527 if (mpctx->set_of_sub_pos >= start && mpctx->set_of_sub_pos < end) { |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2528 mpctx->global_sub_pos = -2; |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2529 subdata = NULL; |
30345
ea015e0ab0c6
Also handle ASS subtitles when removing subtitles via sub_remove slave command.
reimar
parents:
30344
diff
changeset
|
2530 #ifdef CONFIG_ASS |
ea015e0ab0c6
Also handle ASS subtitles when removing subtitles via sub_remove slave command.
reimar
parents:
30344
diff
changeset
|
2531 ass_track = NULL; |
ea015e0ab0c6
Also handle ASS subtitles when removing subtitles via sub_remove slave command.
reimar
parents:
30344
diff
changeset
|
2532 #endif |
30344
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2533 mp_input_queue_cmd(mp_input_parse_cmd("sub_select")); |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2534 } else if (mpctx->set_of_sub_pos >= end) { |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2535 mpctx->set_of_sub_pos -= count; |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2536 mpctx->global_sub_pos -= count; |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2537 } |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2538 } |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2539 |
32392 | 2540 static int overlay_source_registered = 0; |
2541 static struct mp_eosd_source overlay_source = { | |
2542 .z_index = 5, | |
2543 }; | |
2544 | |
2545 static void overlay_add(char *file, int id, int x, int y, unsigned col) | |
2546 { | |
2547 FILE *f; | |
32442
bf593e3827d9
EOSD: overlay_add: use read_pnm instead of the internal reimplementation.
cigaes
parents:
32438
diff
changeset
|
2548 unsigned w, h, bpp, maxval; |
bf593e3827d9
EOSD: overlay_add: use read_pnm instead of the internal reimplementation.
cigaes
parents:
32438
diff
changeset
|
2549 uint8_t *data; |
32392 | 2550 struct mp_eosd_image *img; |
2551 | |
32442
bf593e3827d9
EOSD: overlay_add: use read_pnm instead of the internal reimplementation.
cigaes
parents:
32438
diff
changeset
|
2552 f = fopen(file, "rb"); |
bf593e3827d9
EOSD: overlay_add: use read_pnm instead of the internal reimplementation.
cigaes
parents:
32438
diff
changeset
|
2553 if (!f) { |
32392 | 2554 mp_msg(MSGT_CPLAYER, MSGL_ERR, "overlay_add: unable to open file.\n"); |
2555 return; | |
2556 } | |
32442
bf593e3827d9
EOSD: overlay_add: use read_pnm instead of the internal reimplementation.
cigaes
parents:
32438
diff
changeset
|
2557 data = read_pnm(f, &w, &h, &bpp, &maxval); |
bf593e3827d9
EOSD: overlay_add: use read_pnm instead of the internal reimplementation.
cigaes
parents:
32438
diff
changeset
|
2558 fclose(f); |
bf593e3827d9
EOSD: overlay_add: use read_pnm instead of the internal reimplementation.
cigaes
parents:
32438
diff
changeset
|
2559 if (!data) { |
bf593e3827d9
EOSD: overlay_add: use read_pnm instead of the internal reimplementation.
cigaes
parents:
32438
diff
changeset
|
2560 mp_msg(MSGT_CPLAYER, MSGL_ERR, "overlay_add: unable to load file.\n"); |
32392 | 2561 return; |
2562 } | |
32442
bf593e3827d9
EOSD: overlay_add: use read_pnm instead of the internal reimplementation.
cigaes
parents:
32438
diff
changeset
|
2563 if (bpp != 1 || maxval != 255) { |
bf593e3827d9
EOSD: overlay_add: use read_pnm instead of the internal reimplementation.
cigaes
parents:
32438
diff
changeset
|
2564 mp_msg(MSGT_CPLAYER, MSGL_ERR, |
bf593e3827d9
EOSD: overlay_add: use read_pnm instead of the internal reimplementation.
cigaes
parents:
32438
diff
changeset
|
2565 "overlay_add: file format not supported.\n"); |
32392 | 2566 return; |
2567 } | |
2568 if (!overlay_source_registered) { | |
2569 eosd_register(&overlay_source); | |
2570 eosd_image_remove_all(&overlay_source); | |
2571 overlay_source_registered = 1; | |
2572 } | |
2573 img = eosd_image_alloc(); | |
2574 img->w = w; | |
2575 img->h = h; | |
2576 img->stride = w; | |
2577 img->bitmap = data; | |
2578 img->color = col ^ 0xFF; /* col is RGBA, img->color is RGBT */ | |
2579 img->dst_x = x; | |
2580 img->dst_y = y; | |
32405
ad86352b7c6b
Use intptr_t for integers stored in opaque pointers.
cigaes
parents:
32392
diff
changeset
|
2581 img->opaque = (void *)(intptr_t)id; |
32392 | 2582 eosd_image_append(&overlay_source, img); |
2583 overlay_source.changed = EOSD_CHANGED_BITMAP; | |
2584 } | |
2585 | |
2586 static void overlay_remove(int id) | |
2587 { | |
2588 struct mp_eosd_image *img, **prev, *next; | |
2589 prev = &overlay_source.images; | |
2590 img = overlay_source.images; | |
2591 while (img) { | |
2592 next = img->next; | |
32405
ad86352b7c6b
Use intptr_t for integers stored in opaque pointers.
cigaes
parents:
32392
diff
changeset
|
2593 if ((intptr_t)img->opaque == id) { |
32392 | 2594 free(img->bitmap); |
2595 eosd_image_remove(&overlay_source, img, prev); | |
2596 overlay_source.changed = EOSD_CHANGED_BITMAP; | |
2597 } else { | |
2598 prev = &img->next; | |
2599 } | |
2600 img = next; | |
2601 } | |
2602 } | |
2603 | |
31156 | 2604 int run_command(MPContext *mpctx, mp_cmd_t *cmd) |
22478 | 2605 { |
2606 sh_audio_t * const sh_audio = mpctx->sh_audio; | |
2607 sh_video_t * const sh_video = mpctx->sh_video; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2608 int brk_cmd = 0; |
22478 | 2609 if (!set_property_command(mpctx, cmd)) |
31077 | 2610 switch (cmd->id) { |
2611 case MP_CMD_SEEK:{ | |
2612 float v; | |
2613 int abs; | |
2614 if (sh_video) | |
2615 mpctx->osd_show_percentage = sh_video->fps; | |
2616 v = cmd->args[0].v.f; | |
2617 abs = (cmd->nargs > 1) ? cmd->args[1].v.i : 0; | |
2618 if (abs == 2) { /* Absolute seek to a specific timestamp in seconds */ | |
2619 abs_seek_pos = SEEK_ABSOLUTE; | |
2620 if (sh_video) | |
2621 mpctx->osd_function = | |
2622 (v > sh_video->pts) ? OSD_FFW : OSD_REW; | |
2623 rel_seek_secs = v; | |
2624 } else if (abs) { /* Absolute seek by percentage */ | |
2625 abs_seek_pos = SEEK_ABSOLUTE | SEEK_FACTOR; | |
2626 if (sh_video) | |
2627 mpctx->osd_function = OSD_FFW; // Direction isn't set correctly | |
2628 rel_seek_secs = v / 100.0; | |
2629 } else { | |
2630 rel_seek_secs += v; | |
2631 mpctx->osd_function = (v > 0) ? OSD_FFW : OSD_REW; | |
2632 } | |
2633 brk_cmd = 1; | |
2634 } | |
2635 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2636 |
31077 | 2637 case MP_CMD_SET_PROPERTY:{ |
2638 int r = mp_property_do(cmd->args[0].v.s, M_PROPERTY_PARSE, | |
2639 cmd->args[1].v.s, mpctx); | |
2640 if (r == M_PROPERTY_UNKNOWN) | |
2641 mp_msg(MSGT_CPLAYER, MSGL_WARN, | |
2642 "Unknown property: '%s'\n", cmd->args[0].v.s); | |
2643 else if (r <= 0) | |
2644 mp_msg(MSGT_CPLAYER, MSGL_WARN, | |
2645 "Failed to set property '%s' to '%s'.\n", | |
2646 cmd->args[0].v.s, cmd->args[1].v.s); | |
2647 if (r <= 0) | |
2648 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ANS_ERROR=%s\n", property_error_string(r)); | |
2649 } | |
2650 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2651 |
31077 | 2652 case MP_CMD_STEP_PROPERTY:{ |
2653 void* arg = NULL; | |
2654 int r,i; | |
2655 double d; | |
2656 off_t o; | |
2657 if (cmd->args[1].v.f) { | |
31156 | 2658 m_option_t *prop; |
31077 | 2659 if((r = mp_property_do(cmd->args[0].v.s, |
2660 M_PROPERTY_GET_TYPE, | |
2661 &prop, mpctx)) <= 0) | |
2662 goto step_prop_err; | |
2663 if(prop->type == CONF_TYPE_INT || | |
2664 prop->type == CONF_TYPE_FLAG) | |
2665 i = cmd->args[1].v.f, arg = &i; | |
2666 else if(prop->type == CONF_TYPE_FLOAT) | |
2667 arg = &cmd->args[1].v.f; | |
2668 else if(prop->type == CONF_TYPE_DOUBLE || | |
2669 prop->type == CONF_TYPE_TIME) | |
2670 d = cmd->args[1].v.f, arg = &d; | |
2671 else if(prop->type == CONF_TYPE_POSITION) | |
2672 o = cmd->args[1].v.f, arg = &o; | |
2673 else | |
2674 mp_msg(MSGT_CPLAYER, MSGL_WARN, | |
2675 "Ignoring step size stepping property '%s'.\n", | |
2676 cmd->args[0].v.s); | |
2677 } | |
2678 r = mp_property_do(cmd->args[0].v.s, | |
2679 cmd->args[2].v.i < 0 ? | |
2680 M_PROPERTY_STEP_DOWN : M_PROPERTY_STEP_UP, | |
2681 arg, mpctx); | |
2682 step_prop_err: | |
2683 if (r == M_PROPERTY_UNKNOWN) | |
2684 mp_msg(MSGT_CPLAYER, MSGL_WARN, | |
2685 "Unknown property: '%s'\n", cmd->args[0].v.s); | |
2686 else if (r <= 0) | |
2687 mp_msg(MSGT_CPLAYER, MSGL_WARN, | |
2688 "Failed to increment property '%s' by %f.\n", | |
2689 cmd->args[0].v.s, cmd->args[1].v.f); | |
2690 if (r <= 0) | |
2691 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ANS_ERROR=%s\n", property_error_string(r)); | |
2692 } | |
2693 break; | |
22478 | 2694 |
31077 | 2695 case MP_CMD_GET_PROPERTY:{ |
2696 char *tmp; | |
2697 int r = mp_property_do(cmd->args[0].v.s, M_PROPERTY_TO_STRING, | |
2698 &tmp, mpctx); | |
2699 if (r <= 0) { | |
2700 mp_msg(MSGT_CPLAYER, MSGL_WARN, | |
2701 "Failed to get value of property '%s'.\n", | |
2702 cmd->args[0].v.s); | |
2703 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ANS_ERROR=%s\n", property_error_string(r)); | |
2704 break; | |
2705 } | |
2706 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ANS_%s=%s\n", | |
2707 cmd->args[0].v.s, tmp); | |
2708 free(tmp); | |
2709 } | |
2710 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2711 |
31077 | 2712 case MP_CMD_EDL_MARK: |
2713 if (edl_fd) { | |
2714 float v = sh_video ? sh_video->pts : | |
2715 playing_audio_pts(sh_audio, mpctx->d_audio, | |
2716 mpctx->audio_out); | |
22478 | 2717 |
31077 | 2718 if (mpctx->begin_skip == MP_NOPTS_VALUE) { |
2719 mpctx->begin_skip = v; | |
2720 mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_EdloutStartSkip); | |
2721 } else { | |
2722 if (mpctx->begin_skip > v) | |
2723 mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_EdloutBadStop); | |
2724 else { | |
31957
49848f9a8f30
Add -edl-start-pts option to Adjust positions in EDL records according
reynaldo
parents:
31904
diff
changeset
|
2725 double pts = edl_start_pts ? start_pts : 0; |
49848f9a8f30
Add -edl-start-pts option to Adjust positions in EDL records according
reynaldo
parents:
31904
diff
changeset
|
2726 fprintf(edl_fd, "%f %f %d\n", mpctx->begin_skip - pts, v - pts, 0); |
31077 | 2727 mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_EdloutEndSkip); |
2728 } | |
2729 mpctx->begin_skip = MP_NOPTS_VALUE; | |
2730 } | |
2731 } | |
2732 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2733 |
31077 | 2734 case MP_CMD_SWITCH_RATIO: |
28368
c616bf5d520b
command.c: Fix some commands crashing during audio-only playback
uau
parents:
28032
diff
changeset
|
2735 if (!sh_video) |
c616bf5d520b
command.c: Fix some commands crashing during audio-only playback
uau
parents:
28032
diff
changeset
|
2736 break; |
31077 | 2737 if (cmd->nargs == 0 || cmd->args[0].v.f == -1) |
2738 movie_aspect = (float) sh_video->disp_w / sh_video->disp_h; | |
2739 else | |
2740 movie_aspect = cmd->args[0].v.f; | |
2741 mpcodecs_config_vo(sh_video, sh_video->disp_w, sh_video->disp_h, 0); | |
2742 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2743 |
31077 | 2744 case MP_CMD_SPEED_INCR:{ |
2745 float v = cmd->args[0].v.f; | |
2746 playback_speed += v; | |
32561
17bb5a38ae2e
build_afilter_chain is not safe to use directly, thus make it
reimar
parents:
32511
diff
changeset
|
2747 reinit_audio_chain(); |
31077 | 2748 set_osd_msg(OSD_MSG_SPEED, 1, osd_duration, MSGTR_OSDSpeed, |
2749 playback_speed); | |
2750 } break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2751 |
31077 | 2752 case MP_CMD_SPEED_MULT:{ |
2753 float v = cmd->args[0].v.f; | |
2754 playback_speed *= v; | |
32561
17bb5a38ae2e
build_afilter_chain is not safe to use directly, thus make it
reimar
parents:
32511
diff
changeset
|
2755 reinit_audio_chain(); |
31077 | 2756 set_osd_msg(OSD_MSG_SPEED, 1, osd_duration, MSGTR_OSDSpeed, |
2757 playback_speed); | |
2758 } break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2759 |
31077 | 2760 case MP_CMD_SPEED_SET:{ |
2761 float v = cmd->args[0].v.f; | |
2762 playback_speed = v; | |
32561
17bb5a38ae2e
build_afilter_chain is not safe to use directly, thus make it
reimar
parents:
32511
diff
changeset
|
2763 reinit_audio_chain(); |
31077 | 2764 set_osd_msg(OSD_MSG_SPEED, 1, osd_duration, MSGTR_OSDSpeed, |
2765 playback_speed); | |
2766 } break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2767 |
31077 | 2768 case MP_CMD_FRAME_STEP: |
2769 case MP_CMD_PAUSE: | |
2770 cmd->pausing = 1; | |
2771 brk_cmd = 1; | |
2772 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2773 |
31077 | 2774 case MP_CMD_FILE_FILTER: |
2775 file_filter = cmd->args[0].v.i; | |
2776 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2777 |
31077 | 2778 case MP_CMD_QUIT: |
2779 exit_player_with_rc(EXIT_QUIT, | |
2780 (cmd->nargs > 0) ? cmd->args[0].v.i : 0); | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2781 |
31077 | 2782 case MP_CMD_PLAY_TREE_STEP:{ |
2783 int n = cmd->args[0].v.i == 0 ? 1 : cmd->args[0].v.i; | |
2784 int force = cmd->args[1].v.i; | |
22478 | 2785 |
27343 | 2786 #ifdef CONFIG_GUI |
31077 | 2787 if (use_gui) { |
2788 int i = 0; | |
2789 if (n > 0) | |
2790 for (i = 0; i < n; i++) | |
2791 mplNext(); | |
2792 else | |
2793 for (i = 0; i < -1 * n; i++) | |
2794 mplPrev(); | |
2795 } else | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2796 #endif |
31077 | 2797 { |
2798 if (!force && mpctx->playtree_iter) { | |
2799 play_tree_iter_t *i = | |
2800 play_tree_iter_new_copy(mpctx->playtree_iter); | |
2801 if (play_tree_iter_step(i, n, 0) == | |
2802 PLAY_TREE_ITER_ENTRY) | |
2803 mpctx->eof = | |
2804 (n > 0) ? PT_NEXT_ENTRY : PT_PREV_ENTRY; | |
2805 play_tree_iter_free(i); | |
2806 } else | |
2807 mpctx->eof = (n > 0) ? PT_NEXT_ENTRY : PT_PREV_ENTRY; | |
2808 if (mpctx->eof) | |
2809 mpctx->play_tree_step = n; | |
2810 brk_cmd = 1; | |
2811 } | |
2812 } | |
2813 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2814 |
31077 | 2815 case MP_CMD_PLAY_TREE_UP_STEP:{ |
2816 int n = cmd->args[0].v.i > 0 ? 1 : -1; | |
2817 int force = cmd->args[1].v.i; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2818 |
31077 | 2819 if (!force && mpctx->playtree_iter) { |
2820 play_tree_iter_t *i = | |
2821 play_tree_iter_new_copy(mpctx->playtree_iter); | |
2822 if (play_tree_iter_up_step(i, n, 0) == PLAY_TREE_ITER_ENTRY) | |
2823 mpctx->eof = (n > 0) ? PT_UP_NEXT : PT_UP_PREV; | |
2824 play_tree_iter_free(i); | |
2825 } else | |
2826 mpctx->eof = (n > 0) ? PT_UP_NEXT : PT_UP_PREV; | |
2827 brk_cmd = 1; | |
2828 } | |
2829 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2830 |
31077 | 2831 case MP_CMD_PLAY_ALT_SRC_STEP: |
2832 if (mpctx->playtree_iter && mpctx->playtree_iter->num_files > 1) { | |
2833 int v = cmd->args[0].v.i; | |
2834 if (v > 0 | |
2835 && mpctx->playtree_iter->file < | |
2836 mpctx->playtree_iter->num_files) | |
2837 mpctx->eof = PT_NEXT_SRC; | |
2838 else if (v < 0 && mpctx->playtree_iter->file > 1) | |
2839 mpctx->eof = PT_PREV_SRC; | |
2840 } | |
2841 brk_cmd = 1; | |
2842 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2843 |
31077 | 2844 case MP_CMD_SUB_STEP: |
2845 if (sh_video) { | |
2846 int movement = cmd->args[0].v.i; | |
2847 step_sub(subdata, sh_video->pts, movement); | |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
2848 #ifdef CONFIG_ASS |
31077 | 2849 if (ass_track) |
2850 sub_delay += | |
2851 ass_step_sub(ass_track, | |
2852 (sh_video->pts + | |
2853 sub_delay) * 1000 + .5, movement) / 1000.; | |
22478 | 2854 #endif |
31077 | 2855 set_osd_msg(OSD_MSG_SUB_DELAY, 1, osd_duration, |
2856 MSGTR_OSDSubDelay, ROUND(sub_delay * 1000)); | |
2857 } | |
2858 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2859 |
31077 | 2860 case MP_CMD_SUB_LOG: |
2861 log_sub(); | |
2862 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2863 |
31077 | 2864 case MP_CMD_OSD:{ |
2865 int v = cmd->args[0].v.i; | |
2866 int max = (term_osd | |
2867 && !sh_video) ? MAX_TERM_OSD_LEVEL : MAX_OSD_LEVEL; | |
2868 if (osd_level > max) | |
2869 osd_level = max; | |
2870 if (v < 0) | |
2871 osd_level = (osd_level + 1) % (max + 1); | |
2872 else | |
2873 osd_level = v > max ? max : v; | |
2874 /* Show OSD state when disabled, but not when an explicit | |
2875 argument is given to the OSD command, i.e. in slave mode. */ | |
2876 if (v == -1 && osd_level <= 1) | |
2877 set_osd_msg(OSD_MSG_OSD_STATUS, 0, osd_duration, | |
2878 MSGTR_OSDosd, | |
2879 osd_level ? MSGTR_OSDenabled : | |
2880 MSGTR_OSDdisabled); | |
2881 else | |
2882 rm_osd_msg(OSD_MSG_OSD_STATUS); | |
2883 } | |
2884 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2885 |
31077 | 2886 case MP_CMD_OSD_SHOW_TEXT: |
2887 set_osd_msg(OSD_MSG_TEXT, cmd->args[2].v.i, | |
2888 (cmd->args[1].v.i < | |
2889 0 ? osd_duration : cmd->args[1].v.i), | |
2890 "%-.63s", cmd->args[0].v.s); | |
2891 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2892 |
31077 | 2893 case MP_CMD_OSD_SHOW_PROPERTY_TEXT:{ |
2894 char *txt = m_properties_expand_string(mp_properties, | |
2895 cmd->args[0].v.s, | |
2896 mpctx); | |
2897 /* if no argument supplied take default osd_duration, else <arg> ms. */ | |
2898 if (txt) { | |
2899 set_osd_msg(OSD_MSG_TEXT, cmd->args[2].v.i, | |
2900 (cmd->args[1].v.i < | |
2901 0 ? osd_duration : cmd->args[1].v.i), | |
2902 "%-.63s", txt); | |
2903 free(txt); | |
2904 } | |
2905 } | |
2906 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2907 |
31077 | 2908 case MP_CMD_LOADFILE:{ |
2909 play_tree_t *e = play_tree_new(); | |
2910 play_tree_add_file(e, cmd->args[0].v.s); | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2911 |
31077 | 2912 if (cmd->args[1].v.i) // append |
2913 play_tree_append_entry(mpctx->playtree->child, e); | |
2914 else { | |
2915 // Go back to the starting point. | |
2916 while (play_tree_iter_up_step | |
2917 (mpctx->playtree_iter, 0, 1) != PLAY_TREE_ITER_END) | |
2918 /* NOP */ ; | |
2919 play_tree_free_list(mpctx->playtree->child, 1); | |
2920 play_tree_set_child(mpctx->playtree, e); | |
2921 pt_iter_goto_head(mpctx->playtree_iter); | |
2922 mpctx->eof = PT_NEXT_SRC; | |
2923 } | |
2924 brk_cmd = 1; | |
2925 } | |
2926 break; | |
22478 | 2927 |
31077 | 2928 case MP_CMD_LOADLIST:{ |
2929 play_tree_t *e = parse_playlist_file(cmd->args[0].v.s); | |
2930 if (!e) | |
2931 mp_msg(MSGT_CPLAYER, MSGL_ERR, | |
2932 MSGTR_PlaylistLoadUnable, cmd->args[0].v.s); | |
2933 else { | |
2934 if (cmd->args[1].v.i) // append | |
2935 play_tree_append_entry(mpctx->playtree->child, e); | |
2936 else { | |
2937 // Go back to the starting point. | |
2938 while (play_tree_iter_up_step | |
2939 (mpctx->playtree_iter, 0, 1) | |
2940 != PLAY_TREE_ITER_END) | |
2941 /* NOP */ ; | |
2942 play_tree_free_list(mpctx->playtree->child, 1); | |
2943 play_tree_set_child(mpctx->playtree, e); | |
2944 pt_iter_goto_head(mpctx->playtree_iter); | |
2945 mpctx->eof = PT_NEXT_SRC; | |
2946 } | |
2947 } | |
2948 brk_cmd = 1; | |
2949 } | |
2950 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2951 |
31077 | 2952 case MP_CMD_STOP: |
2953 // Go back to the starting point. | |
2954 while (play_tree_iter_up_step | |
2955 (mpctx->playtree_iter, 0, 1) != PLAY_TREE_ITER_END) | |
2956 /* NOP */ ; | |
2957 mpctx->eof = PT_STOP; | |
2958 brk_cmd = 1; | |
2959 break; | |
26877 | 2960 |
31077 | 2961 case MP_CMD_OSD_SHOW_PROGRESSION:{ |
2962 int len = demuxer_get_time_length(mpctx->demuxer); | |
2963 int pts = demuxer_get_current_time(mpctx->demuxer); | |
2964 set_osd_bar(0, "Position", 0, 100, demuxer_get_percent_pos(mpctx->demuxer)); | |
2965 set_osd_msg(OSD_MSG_TEXT, 1, osd_duration, | |
2966 "%c %02d:%02d:%02d / %02d:%02d:%02d", | |
2967 mpctx->osd_function, pts/3600, (pts/60)%60, pts%60, | |
2968 len/3600, (len/60)%60, len%60); | |
2969 } | |
2970 break; | |
30986
2186c040f9e0
Add osd_show_progression: Show progress bar and elapsed/total time.
cehoyos
parents:
30901
diff
changeset
|
2971 |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
2972 #ifdef CONFIG_RADIO |
31077 | 2973 case MP_CMD_RADIO_STEP_CHANNEL: |
2974 if (mpctx->demuxer->stream->type == STREAMTYPE_RADIO) { | |
2975 int v = cmd->args[0].v.i; | |
2976 if (v > 0) | |
2977 radio_step_channel(mpctx->demuxer->stream, | |
2978 RADIO_CHANNEL_HIGHER); | |
2979 else | |
2980 radio_step_channel(mpctx->demuxer->stream, | |
2981 RADIO_CHANNEL_LOWER); | |
2982 if (radio_get_channel_name(mpctx->demuxer->stream)) { | |
2983 set_osd_msg(OSD_MSG_RADIO_CHANNEL, 1, osd_duration, | |
2984 MSGTR_OSDChannel, | |
2985 radio_get_channel_name(mpctx->demuxer->stream)); | |
2986 } | |
2987 } | |
2988 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2989 |
31077 | 2990 case MP_CMD_RADIO_SET_CHANNEL: |
2991 if (mpctx->demuxer->stream->type == STREAMTYPE_RADIO) { | |
2992 radio_set_channel(mpctx->demuxer->stream, cmd->args[0].v.s); | |
2993 if (radio_get_channel_name(mpctx->demuxer->stream)) { | |
2994 set_osd_msg(OSD_MSG_RADIO_CHANNEL, 1, osd_duration, | |
2995 MSGTR_OSDChannel, | |
2996 radio_get_channel_name(mpctx->demuxer->stream)); | |
2997 } | |
2998 } | |
2999 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3000 |
31077 | 3001 case MP_CMD_RADIO_SET_FREQ: |
3002 if (mpctx->demuxer->stream->type == STREAMTYPE_RADIO) | |
3003 radio_set_freq(mpctx->demuxer->stream, cmd->args[0].v.f); | |
3004 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3005 |
31077 | 3006 case MP_CMD_RADIO_STEP_FREQ: |
3007 if (mpctx->demuxer->stream->type == STREAMTYPE_RADIO) | |
3008 radio_step_freq(mpctx->demuxer->stream, cmd->args[0].v.f); | |
3009 break; | |
22478 | 3010 #endif |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3011 |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
3012 #ifdef CONFIG_TV |
31077 | 3013 case MP_CMD_TV_START_SCAN: |
3014 if (mpctx->file_format == DEMUXER_TYPE_TV) | |
3015 tv_start_scan((tvi_handle_t *) (mpctx->demuxer->priv),1); | |
3016 break; | |
3017 case MP_CMD_TV_SET_FREQ: | |
3018 if (mpctx->file_format == DEMUXER_TYPE_TV) | |
3019 tv_set_freq((tvi_handle_t *) (mpctx->demuxer->priv), | |
3020 cmd->args[0].v.f * 16.0); | |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27345
diff
changeset
|
3021 #ifdef CONFIG_PVR |
23258
1d86fb12e4ae
cosmetic: use K&R coding style, as in reste of the file
ben
parents:
23244
diff
changeset
|
3022 else if (mpctx->stream && mpctx->stream->type == STREAMTYPE_PVR) { |
23244
e5e8ac0bd7fc
support for PVR channel navigation (patch by Sven Gothel <sgothel at jausoft dot com>)
ben
parents:
23077
diff
changeset
|
3023 pvr_set_freq (mpctx->stream, ROUND (cmd->args[0].v.f)); |
e5e8ac0bd7fc
support for PVR channel navigation (patch by Sven Gothel <sgothel at jausoft dot com>)
ben
parents:
23077
diff
changeset
|
3024 set_osd_msg (OSD_MSG_TV_CHANNEL, 1, osd_duration, "%s: %s", |
e5e8ac0bd7fc
support for PVR channel navigation (patch by Sven Gothel <sgothel at jausoft dot com>)
ben
parents:
23077
diff
changeset
|
3025 pvr_get_current_channelname (mpctx->stream), |
e5e8ac0bd7fc
support for PVR channel navigation (patch by Sven Gothel <sgothel at jausoft dot com>)
ben
parents:
23077
diff
changeset
|
3026 pvr_get_current_stationname (mpctx->stream)); |
23259 | 3027 } |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27345
diff
changeset
|
3028 #endif /* CONFIG_PVR */ |
31077 | 3029 break; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3030 |
31077 | 3031 case MP_CMD_TV_STEP_FREQ: |
3032 if (mpctx->file_format == DEMUXER_TYPE_TV) | |
3033 tv_step_freq((tvi_handle_t *) (mpctx->demuxer->priv), | |
3034 cmd->args[0].v.f * 16.0); | |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27345
diff
changeset
|
3035 #ifdef CONFIG_PVR |
23258
1d86fb12e4ae
cosmetic: use K&R coding style, as in reste of the file
ben
parents:
23244
diff
changeset
|
3036 else if (mpctx->stream && mpctx->stream->type == STREAMTYPE_PVR) { |
23244
e5e8ac0bd7fc
support for PVR channel navigation (patch by Sven Gothel <sgothel at jausoft dot com>)
ben
parents:
23077
diff
changeset
|
3037 pvr_force_freq_step (mpctx->stream, ROUND (cmd->args[0].v.f)); |
e5e8ac0bd7fc
support for PVR channel navigation (patch by Sven Gothel <sgothel at jausoft dot com>)
ben
parents:
23077
diff
changeset
|
3038 set_osd_msg (OSD_MSG_TV_CHANNEL, 1, osd_duration, "%s: f %d", |
e5e8ac0bd7fc
support for PVR channel navigation (patch by Sven Gothel <sgothel at jausoft dot com>)
ben
parents:
23077
diff
changeset
|
3039 pvr_get_current_channelname (mpctx->stream), |
e5e8ac0bd7fc
support for PVR channel navigation (patch by Sven Gothel <sgothel at jausoft dot com>)
ben
parents:
23077
diff
changeset
|
3040 pvr_get_current_frequency (mpctx->stream)); |
e5e8ac0bd7fc
support for PVR channel navigation (patch by Sven Gothel <sgothel at jausoft dot com>)
ben
parents:
23077
diff
changeset
|
3041 } |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27345
diff
changeset
|
3042 #endif /* CONFIG_PVR */ |
31077 | 3043 break; |
22667 | 3044 |
31077 | 3045 case MP_CMD_TV_SET_NORM: |
3046 if (mpctx->file_format == DEMUXER_TYPE_TV) | |
3047 tv_set_norm((tvi_handle_t *) (mpctx->demuxer->priv), | |
3048 cmd->args[0].v.s); | |
3049 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3050 |
31077 | 3051 case MP_CMD_TV_STEP_CHANNEL:{ |
3052 if (mpctx->file_format == DEMUXER_TYPE_TV) { | |
3053 int v = cmd->args[0].v.i; | |
3054 if (v > 0) { | |
3055 tv_step_channel((tvi_handle_t *) (mpctx-> | |
3056 demuxer->priv), | |
3057 TV_CHANNEL_HIGHER); | |
3058 } else { | |
3059 tv_step_channel((tvi_handle_t *) (mpctx-> | |
3060 demuxer->priv), | |
3061 TV_CHANNEL_LOWER); | |
3062 } | |
3063 if (tv_channel_list) { | |
3064 set_osd_msg(OSD_MSG_TV_CHANNEL, 1, osd_duration, | |
3065 MSGTR_OSDChannel, tv_channel_current->name); | |
3066 //vo_osd_changed(OSDTYPE_SUBTITLE); | |
3067 } | |
3068 } | |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27345
diff
changeset
|
3069 #ifdef CONFIG_PVR |
23244
e5e8ac0bd7fc
support for PVR channel navigation (patch by Sven Gothel <sgothel at jausoft dot com>)
ben
parents:
23077
diff
changeset
|
3070 else if (mpctx->stream && |
23258
1d86fb12e4ae
cosmetic: use K&R coding style, as in reste of the file
ben
parents:
23244
diff
changeset
|
3071 mpctx->stream->type == STREAMTYPE_PVR) { |
23244
e5e8ac0bd7fc
support for PVR channel navigation (patch by Sven Gothel <sgothel at jausoft dot com>)
ben
parents:
23077
diff
changeset
|
3072 pvr_set_channel_step (mpctx->stream, cmd->args[0].v.i); |
e5e8ac0bd7fc
support for PVR channel navigation (patch by Sven Gothel <sgothel at jausoft dot com>)
ben
parents:
23077
diff
changeset
|
3073 set_osd_msg (OSD_MSG_TV_CHANNEL, 1, osd_duration, "%s: %s", |
e5e8ac0bd7fc
support for PVR channel navigation (patch by Sven Gothel <sgothel at jausoft dot com>)
ben
parents:
23077
diff
changeset
|
3074 pvr_get_current_channelname (mpctx->stream), |
e5e8ac0bd7fc
support for PVR channel navigation (patch by Sven Gothel <sgothel at jausoft dot com>)
ben
parents:
23077
diff
changeset
|
3075 pvr_get_current_stationname (mpctx->stream)); |
e5e8ac0bd7fc
support for PVR channel navigation (patch by Sven Gothel <sgothel at jausoft dot com>)
ben
parents:
23077
diff
changeset
|
3076 } |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27345
diff
changeset
|
3077 #endif /* CONFIG_PVR */ |
31077 | 3078 } |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27345
diff
changeset
|
3079 #ifdef CONFIG_DVBIN |
31077 | 3080 if (mpctx->stream->type == STREAMTYPE_DVB) { |
3081 int dir; | |
3082 int v = cmd->args[0].v.i; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3083 |
31077 | 3084 mpctx->last_dvb_step = v; |
3085 if (v > 0) | |
3086 dir = DVB_CHANNEL_HIGHER; | |
3087 else | |
3088 dir = DVB_CHANNEL_LOWER; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3089 |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3090 |
31077 | 3091 if (dvb_step_channel(mpctx->stream, dir)) |
3092 mpctx->eof = mpctx->dvbin_reopen = 1; | |
3093 } | |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27345
diff
changeset
|
3094 #endif /* CONFIG_DVBIN */ |
31077 | 3095 break; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3096 |
31077 | 3097 case MP_CMD_TV_SET_CHANNEL: |
3098 if (mpctx->file_format == DEMUXER_TYPE_TV) { | |
3099 tv_set_channel((tvi_handle_t *) (mpctx->demuxer->priv), | |
3100 cmd->args[0].v.s); | |
3101 if (tv_channel_list) { | |
3102 set_osd_msg(OSD_MSG_TV_CHANNEL, 1, osd_duration, | |
3103 MSGTR_OSDChannel, tv_channel_current->name); | |
3104 //vo_osd_changed(OSDTYPE_SUBTITLE); | |
3105 } | |
3106 } | |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27345
diff
changeset
|
3107 #ifdef CONFIG_PVR |
23258
1d86fb12e4ae
cosmetic: use K&R coding style, as in reste of the file
ben
parents:
23244
diff
changeset
|
3108 else if (mpctx->stream && mpctx->stream->type == STREAMTYPE_PVR) { |
23244
e5e8ac0bd7fc
support for PVR channel navigation (patch by Sven Gothel <sgothel at jausoft dot com>)
ben
parents:
23077
diff
changeset
|
3109 pvr_set_channel (mpctx->stream, cmd->args[0].v.s); |
e5e8ac0bd7fc
support for PVR channel navigation (patch by Sven Gothel <sgothel at jausoft dot com>)
ben
parents:
23077
diff
changeset
|
3110 set_osd_msg (OSD_MSG_TV_CHANNEL, 1, osd_duration, "%s: %s", |
e5e8ac0bd7fc
support for PVR channel navigation (patch by Sven Gothel <sgothel at jausoft dot com>)
ben
parents:
23077
diff
changeset
|
3111 pvr_get_current_channelname (mpctx->stream), |
e5e8ac0bd7fc
support for PVR channel navigation (patch by Sven Gothel <sgothel at jausoft dot com>)
ben
parents:
23077
diff
changeset
|
3112 pvr_get_current_stationname (mpctx->stream)); |
e5e8ac0bd7fc
support for PVR channel navigation (patch by Sven Gothel <sgothel at jausoft dot com>)
ben
parents:
23077
diff
changeset
|
3113 } |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27345
diff
changeset
|
3114 #endif /* CONFIG_PVR */ |
31077 | 3115 break; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3116 |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27345
diff
changeset
|
3117 #ifdef CONFIG_DVBIN |
31077 | 3118 case MP_CMD_DVB_SET_CHANNEL: |
3119 if (mpctx->stream->type == STREAMTYPE_DVB) { | |
3120 mpctx->last_dvb_step = 1; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3121 |
31077 | 3122 if (dvb_set_channel |
3123 (mpctx->stream, cmd->args[1].v.i, cmd->args[0].v.i)) | |
3124 mpctx->eof = mpctx->dvbin_reopen = 1; | |
3125 } | |
3126 break; | |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27345
diff
changeset
|
3127 #endif /* CONFIG_DVBIN */ |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3128 |
31077 | 3129 case MP_CMD_TV_LAST_CHANNEL: |
3130 if (mpctx->file_format == DEMUXER_TYPE_TV) { | |
3131 tv_last_channel((tvi_handle_t *) (mpctx->demuxer->priv)); | |
3132 if (tv_channel_list) { | |
3133 set_osd_msg(OSD_MSG_TV_CHANNEL, 1, osd_duration, | |
3134 MSGTR_OSDChannel, tv_channel_current->name); | |
3135 //vo_osd_changed(OSDTYPE_SUBTITLE); | |
3136 } | |
3137 } | |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27345
diff
changeset
|
3138 #ifdef CONFIG_PVR |
23258
1d86fb12e4ae
cosmetic: use K&R coding style, as in reste of the file
ben
parents:
23244
diff
changeset
|
3139 else if (mpctx->stream && mpctx->stream->type == STREAMTYPE_PVR) { |
23244
e5e8ac0bd7fc
support for PVR channel navigation (patch by Sven Gothel <sgothel at jausoft dot com>)
ben
parents:
23077
diff
changeset
|
3140 pvr_set_lastchannel (mpctx->stream); |
e5e8ac0bd7fc
support for PVR channel navigation (patch by Sven Gothel <sgothel at jausoft dot com>)
ben
parents:
23077
diff
changeset
|
3141 set_osd_msg (OSD_MSG_TV_CHANNEL, 1, osd_duration, "%s: %s", |
e5e8ac0bd7fc
support for PVR channel navigation (patch by Sven Gothel <sgothel at jausoft dot com>)
ben
parents:
23077
diff
changeset
|
3142 pvr_get_current_channelname (mpctx->stream), |
e5e8ac0bd7fc
support for PVR channel navigation (patch by Sven Gothel <sgothel at jausoft dot com>)
ben
parents:
23077
diff
changeset
|
3143 pvr_get_current_stationname (mpctx->stream)); |
e5e8ac0bd7fc
support for PVR channel navigation (patch by Sven Gothel <sgothel at jausoft dot com>)
ben
parents:
23077
diff
changeset
|
3144 } |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27345
diff
changeset
|
3145 #endif /* CONFIG_PVR */ |
31077 | 3146 break; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3147 |
31077 | 3148 case MP_CMD_TV_STEP_NORM: |
3149 if (mpctx->file_format == DEMUXER_TYPE_TV) | |
3150 tv_step_norm((tvi_handle_t *) (mpctx->demuxer->priv)); | |
3151 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3152 |
31077 | 3153 case MP_CMD_TV_STEP_CHANNEL_LIST: |
3154 if (mpctx->file_format == DEMUXER_TYPE_TV) | |
3155 tv_step_chanlist((tvi_handle_t *) (mpctx->demuxer->priv)); | |
3156 break; | |
29806 | 3157 #endif /* CONFIG_TV */ |
31077 | 3158 case MP_CMD_TV_TELETEXT_ADD_DEC: |
3159 if (mpctx->demuxer->teletext) | |
3160 teletext_control(mpctx->demuxer->teletext,TV_VBI_CONTROL_ADD_DEC, | |
3161 &(cmd->args[0].v.s)); | |
3162 break; | |
3163 case MP_CMD_TV_TELETEXT_GO_LINK: | |
3164 if (mpctx->demuxer->teletext) | |
3165 teletext_control(mpctx->demuxer->teletext,TV_VBI_CONTROL_GO_LINK, | |
3166 &(cmd->args[0].v.i)); | |
3167 break; | |
32406 | 3168 |
32392 | 3169 case MP_CMD_OVERLAY_ADD: |
3170 overlay_add(cmd->args[0].v.s, cmd->args[1].v.i, | |
3171 cmd->args[2].v.i, cmd->args[3].v.i, cmd->args[4].v.i); | |
3172 break; | |
3173 case MP_CMD_OVERLAY_REMOVE: | |
3174 overlay_remove(cmd->args[0].v.i); | |
3175 break; | |
22478 | 3176 |
31077 | 3177 case MP_CMD_SUB_LOAD: |
3178 if (sh_video) { | |
3179 int n = mpctx->set_of_sub_size; | |
3180 add_subtitles(cmd->args[0].v.s, sh_video->fps, 0); | |
3181 if (n != mpctx->set_of_sub_size) { | |
31612
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
3182 mpctx->sub_counts[SUB_SOURCE_SUBS]++; |
31077 | 3183 ++mpctx->global_sub_size; |
3184 } | |
3185 } | |
3186 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3187 |
31077 | 3188 case MP_CMD_SUB_REMOVE: |
3189 if (sh_video) { | |
3190 int v = cmd->args[0].v.i; | |
3191 if (v < 0) { | |
3192 remove_subtitle_range(mpctx, 0, mpctx->set_of_sub_size); | |
3193 } else if (v < mpctx->set_of_sub_size) { | |
3194 remove_subtitle_range(mpctx, v, 1); | |
3195 } | |
3196 } | |
3197 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3198 |
31077 | 3199 case MP_CMD_GET_SUB_VISIBILITY: |
3200 if (sh_video) { | |
3201 mp_msg(MSGT_GLOBAL, MSGL_INFO, | |
3202 "ANS_SUB_VISIBILITY=%d\n", sub_visibility); | |
3203 } | |
3204 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3205 |
31077 | 3206 case MP_CMD_SCREENSHOT: |
3207 if (vo_config_count) { | |
3208 mp_msg(MSGT_CPLAYER, MSGL_INFO, "sending VFCTRL_SCREENSHOT!\n"); | |
3209 if (CONTROL_OK != | |
3210 ((vf_instance_t *) sh_video->vfilter)-> | |
3211 control(sh_video->vfilter, VFCTRL_SCREENSHOT, | |
3212 &cmd->args[0].v.i)) | |
3213 mp_msg(MSGT_CPLAYER, MSGL_INFO, "failed (forgot -vf screenshot?)\n"); | |
3214 } | |
3215 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3216 |
31077 | 3217 case MP_CMD_VF_CHANGE_RECTANGLE: |
28368
c616bf5d520b
command.c: Fix some commands crashing during audio-only playback
uau
parents:
28032
diff
changeset
|
3218 if (!sh_video) |
c616bf5d520b
command.c: Fix some commands crashing during audio-only playback
uau
parents:
28032
diff
changeset
|
3219 break; |
31077 | 3220 set_rectangle(sh_video, cmd->args[0].v.i, cmd->args[1].v.i); |
3221 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3222 |
31077 | 3223 case MP_CMD_GET_TIME_LENGTH:{ |
32352
76f94c00a69f
1000l, %lf is not valid format string for printf (only for scanf) and actually
reimar
parents:
32209
diff
changeset
|
3224 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ANS_LENGTH=%.2f\n", |
31077 | 3225 demuxer_get_time_length(mpctx->demuxer)); |
3226 } | |
3227 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3228 |
31077 | 3229 case MP_CMD_GET_FILENAME:{ |
3230 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ANS_FILENAME='%s'\n", | |
3231 get_metadata(META_NAME)); | |
3232 } | |
3233 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3234 |
31077 | 3235 case MP_CMD_GET_VIDEO_CODEC:{ |
3236 char *inf = get_metadata(META_VIDEO_CODEC); | |
3237 if (!inf) | |
3238 inf = strdup(""); | |
3239 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ANS_VIDEO_CODEC='%s'\n", inf); | |
3240 free(inf); | |
3241 } | |
3242 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3243 |
31077 | 3244 case MP_CMD_GET_VIDEO_BITRATE:{ |
3245 char *inf = get_metadata(META_VIDEO_BITRATE); | |
3246 if (!inf) | |
3247 inf = strdup(""); | |
3248 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ANS_VIDEO_BITRATE='%s'\n", inf); | |
3249 free(inf); | |
3250 } | |
3251 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3252 |
31077 | 3253 case MP_CMD_GET_VIDEO_RESOLUTION:{ |
3254 char *inf = get_metadata(META_VIDEO_RESOLUTION); | |
3255 if (!inf) | |
3256 inf = strdup(""); | |
3257 mp_msg(MSGT_GLOBAL, MSGL_INFO, | |
3258 "ANS_VIDEO_RESOLUTION='%s'\n", inf); | |
3259 free(inf); | |
3260 } | |
3261 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3262 |
31077 | 3263 case MP_CMD_GET_AUDIO_CODEC:{ |
3264 char *inf = get_metadata(META_AUDIO_CODEC); | |
3265 if (!inf) | |
3266 inf = strdup(""); | |
3267 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ANS_AUDIO_CODEC='%s'\n", inf); | |
3268 free(inf); | |
3269 } | |
3270 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3271 |
31077 | 3272 case MP_CMD_GET_AUDIO_BITRATE:{ |
3273 char *inf = get_metadata(META_AUDIO_BITRATE); | |
3274 if (!inf) | |
3275 inf = strdup(""); | |
3276 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ANS_AUDIO_BITRATE='%s'\n", inf); | |
3277 free(inf); | |
3278 } | |
3279 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3280 |
31077 | 3281 case MP_CMD_GET_AUDIO_SAMPLES:{ |
3282 char *inf = get_metadata(META_AUDIO_SAMPLES); | |
3283 if (!inf) | |
3284 inf = strdup(""); | |
3285 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ANS_AUDIO_SAMPLES='%s'\n", inf); | |
3286 free(inf); | |
3287 } | |
3288 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3289 |
31077 | 3290 case MP_CMD_GET_META_TITLE:{ |
3291 char *inf = get_metadata(META_INFO_TITLE); | |
3292 if (!inf) | |
3293 inf = strdup(""); | |
3294 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ANS_META_TITLE='%s'\n", inf); | |
3295 free(inf); | |
3296 } | |
3297 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3298 |
31077 | 3299 case MP_CMD_GET_META_ARTIST:{ |
3300 char *inf = get_metadata(META_INFO_ARTIST); | |
3301 if (!inf) | |
3302 inf = strdup(""); | |
3303 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ANS_META_ARTIST='%s'\n", inf); | |
3304 free(inf); | |
3305 } | |
3306 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3307 |
31077 | 3308 case MP_CMD_GET_META_ALBUM:{ |
3309 char *inf = get_metadata(META_INFO_ALBUM); | |
3310 if (!inf) | |
3311 inf = strdup(""); | |
3312 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ANS_META_ALBUM='%s'\n", inf); | |
3313 free(inf); | |
3314 } | |
3315 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3316 |
31077 | 3317 case MP_CMD_GET_META_YEAR:{ |
3318 char *inf = get_metadata(META_INFO_YEAR); | |
3319 if (!inf) | |
3320 inf = strdup(""); | |
3321 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ANS_META_YEAR='%s'\n", inf); | |
3322 free(inf); | |
3323 } | |
3324 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3325 |
31077 | 3326 case MP_CMD_GET_META_COMMENT:{ |
3327 char *inf = get_metadata(META_INFO_COMMENT); | |
3328 if (!inf) | |
3329 inf = strdup(""); | |
3330 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ANS_META_COMMENT='%s'\n", inf); | |
3331 free(inf); | |
3332 } | |
3333 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3334 |
31077 | 3335 case MP_CMD_GET_META_TRACK:{ |
3336 char *inf = get_metadata(META_INFO_TRACK); | |
3337 if (!inf) | |
3338 inf = strdup(""); | |
3339 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ANS_META_TRACK='%s'\n", inf); | |
3340 free(inf); | |
3341 } | |
3342 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3343 |
31077 | 3344 case MP_CMD_GET_META_GENRE:{ |
3345 char *inf = get_metadata(META_INFO_GENRE); | |
3346 if (!inf) | |
3347 inf = strdup(""); | |
3348 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ANS_META_GENRE='%s'\n", inf); | |
3349 free(inf); | |
3350 } | |
3351 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3352 |
31077 | 3353 case MP_CMD_GET_VO_FULLSCREEN: |
3354 if (mpctx->video_out && vo_config_count) | |
3355 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ANS_VO_FULLSCREEN=%d\n", vo_fs); | |
3356 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3357 |
31077 | 3358 case MP_CMD_GET_PERCENT_POS: |
3359 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ANS_PERCENT_POSITION=%d\n", | |
3360 demuxer_get_percent_pos(mpctx->demuxer)); | |
3361 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3362 |
31077 | 3363 case MP_CMD_GET_TIME_POS:{ |
3364 float pos = 0; | |
3365 if (sh_video) | |
3366 pos = sh_video->pts; | |
3367 else if (sh_audio && mpctx->audio_out) | |
3368 pos = | |
3369 playing_audio_pts(sh_audio, mpctx->d_audio, | |
3370 mpctx->audio_out); | |
3371 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ANS_TIME_POSITION=%.1f\n", pos); | |
3372 } | |
3373 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3374 |
31077 | 3375 case MP_CMD_RUN: |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3376 #ifndef __MINGW32__ |
31077 | 3377 if (!fork()) { |
3378 execl("/bin/sh", "sh", "-c", cmd->args[0].v.s, NULL); | |
3379 exit(0); | |
3380 } | |
22478 | 3381 #endif |
31077 | 3382 break; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3383 |
31077 | 3384 case MP_CMD_KEYDOWN_EVENTS: |
3385 mplayer_put_key(cmd->args[0].v.i); | |
3386 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3387 |
31077 | 3388 case MP_CMD_SET_MOUSE_POS:{ |
3389 int pointer_x, pointer_y; | |
3390 double dx, dy; | |
3391 pointer_x = cmd->args[0].v.i; | |
3392 pointer_y = cmd->args[1].v.i; | |
3393 rescale_input_coordinates(pointer_x, pointer_y, &dx, &dy); | |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
3394 #ifdef CONFIG_DVDNAV |
31077 | 3395 if (mpctx->stream->type == STREAMTYPE_DVDNAV |
3396 && dx > 0.0 && dy > 0.0) { | |
3397 int button = -1; | |
3398 pointer_x = (int) (dx * (double) sh_video->disp_w); | |
3399 pointer_y = (int) (dy * (double) sh_video->disp_h); | |
3400 mp_dvdnav_update_mouse_pos(mpctx->stream, | |
3401 pointer_x, pointer_y, &button); | |
3402 if (osd_level > 1 && button > 0) | |
3403 set_osd_msg(OSD_MSG_TEXT, 1, osd_duration, | |
3404 "Selected button number %d", button); | |
3405 } | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3406 #endif |
27345
b597fd2924b4
Rename preprocessor directive HAVE_MENU --> CONFIG_MENU.
diego
parents:
27343
diff
changeset
|
3407 #ifdef CONFIG_MENU |
31077 | 3408 if (use_menu && dx >= 0.0 && dy >= 0.0) |
3409 menu_update_mouse_pos(dx, dy); | |
25461 | 3410 #endif |
31077 | 3411 } |
3412 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3413 |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
3414 #ifdef CONFIG_DVDNAV |
31077 | 3415 case MP_CMD_DVDNAV:{ |
3416 int button = -1; | |
3417 int i; | |
3418 mp_command_type command = 0; | |
3419 if (mpctx->stream->type != STREAMTYPE_DVDNAV) | |
3420 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3421 |
31077 | 3422 for (i = 0; mp_dvdnav_bindings[i].name; i++) |
3423 if (cmd->args[0].v.s && | |
3424 !strcasecmp (cmd->args[0].v.s, | |
3425 mp_dvdnav_bindings[i].name)) | |
3426 command = mp_dvdnav_bindings[i].cmd; | |
27068 | 3427 |
31077 | 3428 mp_dvdnav_handle_input(mpctx->stream,command,&button); |
3429 if (osd_level > 1 && button > 0) | |
3430 set_osd_msg(OSD_MSG_TEXT, 1, osd_duration, | |
3431 "Selected button number %d", button); | |
3432 } | |
3433 break; | |
25817 | 3434 |
31077 | 3435 case MP_CMD_SWITCH_TITLE: |
3436 if (mpctx->stream->type == STREAMTYPE_DVDNAV) | |
3437 mp_dvdnav_switch_title(mpctx->stream, cmd->args[0].v.i); | |
3438 break; | |
25817 | 3439 |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3440 #endif |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3441 |
30988
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3442 case MP_CMD_AF_SWITCH: |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3443 if (sh_audio) |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3444 { |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3445 af_uninit(mpctx->mixer.afilter); |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3446 af_init(mpctx->mixer.afilter); |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3447 } |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3448 case MP_CMD_AF_ADD: |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3449 case MP_CMD_AF_DEL: |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3450 if (!sh_audio) |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3451 break; |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3452 { |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3453 char* af_args = strdup(cmd->args[0].v.s); |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3454 char* af_commands = af_args; |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3455 char* af_command; |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3456 af_instance_t* af; |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3457 while ((af_command = strsep(&af_commands, ",")) != NULL) |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3458 { |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3459 if (cmd->id == MP_CMD_AF_DEL) |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3460 { |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3461 af = af_get(mpctx->mixer.afilter, af_command); |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3462 if (af != NULL) |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3463 af_remove(mpctx->mixer.afilter, af); |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3464 } |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3465 else |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3466 af_add(mpctx->mixer.afilter, af_command); |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3467 } |
32561
17bb5a38ae2e
build_afilter_chain is not safe to use directly, thus make it
reimar
parents:
32511
diff
changeset
|
3468 reinit_audio_chain(); |
30988
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3469 free(af_args); |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3470 } |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3471 break; |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3472 case MP_CMD_AF_CLR: |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3473 if (!sh_audio) |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3474 break; |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3475 af_uninit(mpctx->mixer.afilter); |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3476 af_init(mpctx->mixer.afilter); |
32561
17bb5a38ae2e
build_afilter_chain is not safe to use directly, thus make it
reimar
parents:
32511
diff
changeset
|
3477 reinit_audio_chain(); |
30988
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3478 break; |
32419
8f35fc25523f
Add experimental af_cmdline slave command to allow changing filter options at runtime.
reimar
parents:
32406
diff
changeset
|
3479 case MP_CMD_AF_CMDLINE: |
8f35fc25523f
Add experimental af_cmdline slave command to allow changing filter options at runtime.
reimar
parents:
32406
diff
changeset
|
3480 if (sh_audio) { |
8f35fc25523f
Add experimental af_cmdline slave command to allow changing filter options at runtime.
reimar
parents:
32406
diff
changeset
|
3481 af_instance_t *af = af_get(sh_audio->afilter, cmd->args[0].v.s); |
8f35fc25523f
Add experimental af_cmdline slave command to allow changing filter options at runtime.
reimar
parents:
32406
diff
changeset
|
3482 if (!af) { |
8f35fc25523f
Add experimental af_cmdline slave command to allow changing filter options at runtime.
reimar
parents:
32406
diff
changeset
|
3483 mp_msg(MSGT_CPLAYER, MSGL_WARN, |
8f35fc25523f
Add experimental af_cmdline slave command to allow changing filter options at runtime.
reimar
parents:
32406
diff
changeset
|
3484 "Filter '%s' not found in chain.\n", cmd->args[0].v.s); |
8f35fc25523f
Add experimental af_cmdline slave command to allow changing filter options at runtime.
reimar
parents:
32406
diff
changeset
|
3485 break; |
8f35fc25523f
Add experimental af_cmdline slave command to allow changing filter options at runtime.
reimar
parents:
32406
diff
changeset
|
3486 } |
8f35fc25523f
Add experimental af_cmdline slave command to allow changing filter options at runtime.
reimar
parents:
32406
diff
changeset
|
3487 af->control(af, AF_CONTROL_COMMAND_LINE, cmd->args[1].v.s); |
8f35fc25523f
Add experimental af_cmdline slave command to allow changing filter options at runtime.
reimar
parents:
32406
diff
changeset
|
3488 af_reinit(sh_audio->afilter, af); |
8f35fc25523f
Add experimental af_cmdline slave command to allow changing filter options at runtime.
reimar
parents:
32406
diff
changeset
|
3489 } |
8f35fc25523f
Add experimental af_cmdline slave command to allow changing filter options at runtime.
reimar
parents:
32406
diff
changeset
|
3490 break; |
8f35fc25523f
Add experimental af_cmdline slave command to allow changing filter options at runtime.
reimar
parents:
32406
diff
changeset
|
3491 |
31077 | 3492 default: |
3493 mp_msg(MSGT_CPLAYER, MSGL_V, | |
3494 "Received unknown cmd %s\n", cmd->name); | |
3495 } | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3496 |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3497 switch (cmd->pausing) { |
31077 | 3498 case 1: // "pausing" |
3499 mpctx->osd_function = OSD_PAUSE; | |
3500 break; | |
3501 case 3: // "pausing_toggle" | |
3502 mpctx->was_paused = !mpctx->was_paused; | |
3503 if (mpctx->was_paused) | |
3504 mpctx->osd_function = OSD_PAUSE; | |
3505 else if (mpctx->osd_function == OSD_PAUSE) | |
3506 mpctx->osd_function = OSD_PLAY; | |
3507 break; | |
3508 case 2: // "pausing_keep" | |
3509 if (mpctx->was_paused) | |
3510 mpctx->osd_function = OSD_PAUSE; | |
22478 | 3511 } |
3512 return brk_cmd; | |
3513 } |