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