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