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