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