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