Mercurial > mplayer.hg
annotate command.c @ 36838:7df9dd22f234
Don't set win32 as audio driver if none has been given.
Select from the list of audio drivers instead.
Having win32 as selected item in the combo box although
this isn't used by MPlayer by default is confusing as well.
Besides that, there seem to be issues with this driver
when changing from or to it during playback.
author | ib |
---|---|
date | Tue, 25 Feb 2014 13:16:35 +0000 |
parents | 598ef7d90b78 |
children | caea6b4337d8 |
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; | |
36641 | 1070 /* Fallthrough to toggle */ |
22478 | 1071 case M_PROPERTY_STEP_UP: |
1072 case M_PROPERTY_STEP_DOWN: | |
27343 | 1073 #ifdef CONFIG_GUI |
31077 | 1074 if (use_gui) |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33725
diff
changeset
|
1075 gui(GUI_RUN_COMMAND, (void *) MP_CMD_VO_FULLSCREEN); |
31077 | 1076 else |
22478 | 1077 #endif |
31077 | 1078 if (vo_config_count) |
1079 mpctx->video_out->control(VOCTRL_FULLSCREEN, 0); | |
1080 return M_PROPERTY_OK; | |
22478 | 1081 default: |
31077 | 1082 return m_property_flag(prop, action, arg, &vo_fs); |
22478 | 1083 } |
1084 } | |
1085 | |
31156 | 1086 static int mp_property_deinterlace(m_option_t *prop, int action, |
1087 void *arg, MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1088 { |
35171 | 1089 int deinterlace, deinterlace_old; |
35173 | 1090 int result; |
22478 | 1091 vf_instance_t *vf; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1092 if (!mpctx->sh_video || !mpctx->sh_video->vfilter) |
31077 | 1093 return M_PROPERTY_UNAVAILABLE; |
22478 | 1094 vf = mpctx->sh_video->vfilter; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1095 switch (action) { |
22478 | 1096 case M_PROPERTY_GET: |
31077 | 1097 if (!arg) |
1098 return M_PROPERTY_ERROR; | |
1099 vf->control(vf, VFCTRL_GET_DEINTERLACE, arg); | |
1100 return M_PROPERTY_OK; | |
22478 | 1101 case M_PROPERTY_SET: |
31077 | 1102 if (!arg) |
1103 return M_PROPERTY_ERROR; | |
1104 M_PROPERTY_CLAMP(prop, *(int *) arg); | |
35173 | 1105 result = vf->control(vf, VFCTRL_SET_DEINTERLACE, arg); |
1106 return (result == CONTROL_OK) ? M_PROPERTY_OK : M_PROPERTY_UNAVAILABLE; | |
22478 | 1107 case M_PROPERTY_STEP_UP: |
1108 case M_PROPERTY_STEP_DOWN: | |
35171 | 1109 vf->control(vf, VFCTRL_GET_DEINTERLACE, &deinterlace_old); |
1110 deinterlace = !deinterlace_old; | |
35173 | 1111 result = vf->control(vf, VFCTRL_SET_DEINTERLACE, &deinterlace); |
1112 if (result != CONTROL_OK) { | |
35171 | 1113 deinterlace = deinterlace_old; |
1114 } | |
31077 | 1115 set_osd_msg(OSD_MSG_SPEED, 1, osd_duration, MSGTR_OSDDeinterlace, |
1116 deinterlace ? MSGTR_Enabled : MSGTR_Disabled); | |
35173 | 1117 return (result == CONTROL_OK) ? M_PROPERTY_OK : M_PROPERTY_UNAVAILABLE; |
22478 | 1118 } |
1119 return M_PROPERTY_NOT_IMPLEMENTED; | |
1120 } | |
1121 | |
32438
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1122 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
|
1123 void *arg, MPContext *mpctx) |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1124 { |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1125 int ret; |
35204
4a62631ecadd
Do not assume that a stream is available for capture.
reimar
parents:
35173
diff
changeset
|
1126 int capturing = mpctx->stream && mpctx->stream->capture_file; |
32438
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1127 |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1128 if (!mpctx->stream) |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1129 return M_PROPERTY_UNAVAILABLE; |
32443
5aae26f4bb59
Simplify and fix capture feature to not always return an error.
reimar
parents:
32442
diff
changeset
|
1130 if (!capture_dump) { |
5aae26f4bb59
Simplify and fix capture feature to not always return an error.
reimar
parents:
32442
diff
changeset
|
1131 mp_msg(MSGT_GLOBAL, MSGL_ERR, |
5aae26f4bb59
Simplify and fix capture feature to not always return an error.
reimar
parents:
32442
diff
changeset
|
1132 "Capturing not enabled (forgot -capture parameter?)\n"); |
5aae26f4bb59
Simplify and fix capture feature to not always return an error.
reimar
parents:
32442
diff
changeset
|
1133 return M_PROPERTY_ERROR; |
5aae26f4bb59
Simplify and fix capture feature to not always return an error.
reimar
parents:
32442
diff
changeset
|
1134 } |
32438
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1135 |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1136 ret = m_property_flag(prop, action, arg, &capturing); |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1137 if (ret == M_PROPERTY_OK && capturing != !!mpctx->stream->capture_file) { |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1138 if (capturing) { |
32444
99efb38a4f4e
Change capture feature to append to file instead of overwriting.
reimar
parents:
32443
diff
changeset
|
1139 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
|
1140 if (!mpctx->stream->capture_file) { |
32438
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1141 mp_msg(MSGT_GLOBAL, MSGL_ERR, |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1142 "Error opening capture file: %s\n", strerror(errno)); |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1143 ret = M_PROPERTY_ERROR; |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1144 } |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1145 } else { |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1146 fclose(mpctx->stream->capture_file); |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1147 mpctx->stream->capture_file = NULL; |
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 |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1151 switch (ret) { |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1152 case M_PROPERTY_ERROR: |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1153 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
|
1154 break; |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1155 case M_PROPERTY_OK: |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1156 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
|
1157 mpctx->stream->capture_file ? MSGTR_Enabled : MSGTR_Disabled); |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1158 break; |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1159 default: |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1160 break; |
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 |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1163 return ret; |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1164 } |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
1165 |
22478 | 1166 /// Panscan (RW) |
31156 | 1167 static int mp_property_panscan(m_option_t *prop, int action, void *arg, |
1168 MPContext *mpctx) | |
22478 | 1169 { |
1170 | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1171 if (!mpctx->video_out |
31077 | 1172 || mpctx->video_out->control(VOCTRL_GET_PANSCAN, NULL) != VO_TRUE) |
1173 return M_PROPERTY_UNAVAILABLE; | |
22478 | 1174 |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1175 switch (action) { |
22478 | 1176 case M_PROPERTY_SET: |
31077 | 1177 if (!arg) |
1178 return M_PROPERTY_ERROR; | |
1179 M_PROPERTY_CLAMP(prop, *(float *) arg); | |
1180 vo_panscan = *(float *) arg; | |
1181 mpctx->video_out->control(VOCTRL_SET_PANSCAN, NULL); | |
1182 return M_PROPERTY_OK; | |
22478 | 1183 case M_PROPERTY_STEP_UP: |
1184 case M_PROPERTY_STEP_DOWN: | |
31077 | 1185 vo_panscan += (arg ? *(float *) arg : 0.1) * |
1186 (action == M_PROPERTY_STEP_DOWN ? -1 : 1); | |
1187 if (vo_panscan > 1) | |
1188 vo_panscan = 1; | |
1189 else if (vo_panscan < 0) | |
1190 vo_panscan = 0; | |
1191 mpctx->video_out->control(VOCTRL_SET_PANSCAN, NULL); | |
1192 return M_PROPERTY_OK; | |
22478 | 1193 default: |
31077 | 1194 return m_property_float_range(prop, action, arg, &vo_panscan); |
22478 | 1195 } |
1196 } | |
1197 | |
1198 /// Helper to set vo flags. | |
1199 /** \ingroup PropertyImplHelper | |
1200 */ | |
31156 | 1201 static int mp_property_vo_flag(m_option_t *prop, int action, void *arg, |
1202 int vo_ctrl, int *vo_var, MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1203 { |
22478 | 1204 |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1205 if (!mpctx->video_out) |
31077 | 1206 return M_PROPERTY_UNAVAILABLE; |
22478 | 1207 |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1208 switch (action) { |
22478 | 1209 case M_PROPERTY_SET: |
31077 | 1210 if (!arg) |
1211 return M_PROPERTY_ERROR; | |
1212 M_PROPERTY_CLAMP(prop, *(int *) arg); | |
1213 if (*vo_var == !!*(int *) arg) | |
1214 return M_PROPERTY_OK; | |
36641 | 1215 /* Fallthrough to toggle */ |
22478 | 1216 case M_PROPERTY_STEP_UP: |
1217 case M_PROPERTY_STEP_DOWN: | |
31077 | 1218 if (vo_config_count) |
1219 mpctx->video_out->control(vo_ctrl, 0); | |
1220 return M_PROPERTY_OK; | |
22478 | 1221 default: |
31077 | 1222 return m_property_flag(prop, action, arg, vo_var); |
22478 | 1223 } |
1224 } | |
1225 | |
1226 /// Window always on top (RW) | |
31156 | 1227 static int mp_property_ontop(m_option_t *prop, int action, void *arg, |
1228 MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1229 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1230 return mp_property_vo_flag(prop, action, arg, VOCTRL_ONTOP, &vo_ontop, |
31077 | 1231 mpctx); |
22478 | 1232 } |
1233 | |
1234 /// Display in the root window (RW) | |
31156 | 1235 static int mp_property_rootwin(m_option_t *prop, int action, void *arg, |
1236 MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1237 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1238 return mp_property_vo_flag(prop, action, arg, VOCTRL_ROOTWIN, |
31077 | 1239 &vo_rootwin, mpctx); |
22478 | 1240 } |
1241 | |
1242 /// Show window borders (RW) | |
31156 | 1243 static int mp_property_border(m_option_t *prop, int action, void *arg, |
1244 MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1245 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1246 return mp_property_vo_flag(prop, action, arg, VOCTRL_BORDER, |
31077 | 1247 &vo_border, mpctx); |
22478 | 1248 } |
1249 | |
1250 /// Framedropping state (RW) | |
31156 | 1251 static int mp_property_framedropping(m_option_t *prop, int action, |
1252 void *arg, MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1253 { |
22478 | 1254 |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1255 if (!mpctx->sh_video) |
31077 | 1256 return M_PROPERTY_UNAVAILABLE; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1257 |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1258 switch (action) { |
22478 | 1259 case M_PROPERTY_PRINT: |
31077 | 1260 if (!arg) |
1261 return M_PROPERTY_ERROR; | |
1262 *(char **) arg = strdup(frame_dropping == 1 ? MSGTR_Enabled : | |
1263 (frame_dropping == 2 ? MSGTR_HardFrameDrop : | |
1264 MSGTR_Disabled)); | |
1265 return M_PROPERTY_OK; | |
22478 | 1266 default: |
31077 | 1267 return m_property_choice(prop, action, arg, &frame_dropping); |
22478 | 1268 } |
1269 } | |
1270 | |
1271 /// Color settings, try to use vf/vo then fall back on TV. (RW) | |
31156 | 1272 static int mp_property_gamma(m_option_t *prop, int action, void *arg, |
1273 MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1274 { |
25465
6b9447dc7590
Check availability before check argument for getting gamma properties.
ulion
parents:
25464
diff
changeset
|
1275 int *gamma = prop->priv, r, val; |
22478 | 1276 |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1277 if (!mpctx->sh_video) |
31077 | 1278 return M_PROPERTY_UNAVAILABLE; |
22478 | 1279 |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1280 if (gamma[0] == 1000) { |
31077 | 1281 gamma[0] = 0; |
1282 get_video_colors(mpctx->sh_video, prop->name, gamma); | |
22478 | 1283 } |
1284 | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1285 switch (action) { |
22478 | 1286 case M_PROPERTY_SET: |
31077 | 1287 if (!arg) |
1288 return M_PROPERTY_ERROR; | |
1289 M_PROPERTY_CLAMP(prop, *(int *) arg); | |
1290 *gamma = *(int *) arg; | |
1291 r = set_video_colors(mpctx->sh_video, prop->name, *gamma); | |
1292 if (r <= 0) | |
1293 break; | |
1294 return r; | |
22478 | 1295 case M_PROPERTY_GET: |
31077 | 1296 if (get_video_colors(mpctx->sh_video, prop->name, &val) > 0) { |
1297 if (!arg) | |
1298 return M_PROPERTY_ERROR; | |
1299 *(int *)arg = val; | |
1300 return M_PROPERTY_OK; | |
1301 } | |
1302 break; | |
22478 | 1303 case M_PROPERTY_STEP_UP: |
1304 case M_PROPERTY_STEP_DOWN: | |
31077 | 1305 *gamma += (arg ? *(int *) arg : 1) * |
1306 (action == M_PROPERTY_STEP_DOWN ? -1 : 1); | |
1307 M_PROPERTY_CLAMP(prop, *gamma); | |
1308 r = set_video_colors(mpctx->sh_video, prop->name, *gamma); | |
1309 if (r <= 0) | |
1310 break; | |
1311 return r; | |
22478 | 1312 default: |
31077 | 1313 return M_PROPERTY_NOT_IMPLEMENTED; |
22478 | 1314 } |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1315 |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
1316 #ifdef CONFIG_TV |
22478 | 1317 if (mpctx->demuxer->type == DEMUXER_TYPE_TV) { |
31077 | 1318 int l = strlen(prop->name); |
1319 char tv_prop[3 + l + 1]; | |
1320 sprintf(tv_prop, "tv_%s", prop->name); | |
1321 return mp_property_do(tv_prop, action, arg, mpctx); | |
22478 | 1322 } |
1323 #endif | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1324 |
22478 | 1325 return M_PROPERTY_UNAVAILABLE; |
1326 } | |
1327 | |
1328 /// VSync (RW) | |
31156 | 1329 static int mp_property_vsync(m_option_t *prop, int action, void *arg, |
1330 MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1331 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1332 return m_property_flag(prop, action, arg, &vo_vsync); |
22478 | 1333 } |
1334 | |
1335 /// Video codec tag (RO) | |
31156 | 1336 static int mp_property_video_format(m_option_t *prop, int action, |
1337 void *arg, MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1338 { |
23394
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1339 char* meta; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1340 if (!mpctx->sh_video) |
31077 | 1341 return M_PROPERTY_UNAVAILABLE; |
23394
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1342 switch(action) { |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1343 case M_PROPERTY_PRINT: |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1344 if (!arg) |
31077 | 1345 return M_PROPERTY_ERROR; |
23394
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1346 switch(mpctx->sh_video->format) { |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1347 case 0x10000001: |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1348 meta = strdup ("mpeg1"); break; |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1349 case 0x10000002: |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1350 meta = strdup ("mpeg2"); break; |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1351 case 0x10000004: |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1352 meta = strdup ("mpeg4"); break; |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1353 case 0x10000005: |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1354 meta = strdup ("h264"); break; |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1355 default: |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1356 if(mpctx->sh_video->format >= 0x20202020) { |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1357 meta = malloc(5); |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1358 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
|
1359 } else { |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1360 meta = malloc(20); |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1361 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
|
1362 } |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1363 } |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1364 *(char**)arg = meta; |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1365 return M_PROPERTY_OK; |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1366 } |
22478 | 1367 return m_property_int_ro(prop, action, arg, mpctx->sh_video->format); |
1368 } | |
1369 | |
23394
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1370 /// Video codec name (RO) |
31156 | 1371 static int mp_property_video_codec(m_option_t *prop, int action, |
1372 void *arg, MPContext *mpctx) | |
23394
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1373 { |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1374 if (!mpctx->sh_video || !mpctx->sh_video->codec) |
31077 | 1375 return M_PROPERTY_UNAVAILABLE; |
23394
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1376 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
|
1377 } |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1378 |
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1379 |
22478 | 1380 /// Video bitrate (RO) |
31156 | 1381 static int mp_property_video_bitrate(m_option_t *prop, int action, |
1382 void *arg, MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1383 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1384 if (!mpctx->sh_video) |
31077 | 1385 return M_PROPERTY_UNAVAILABLE; |
23394
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
1386 return m_property_bitrate(prop, action, arg, mpctx->sh_video->i_bps); |
22478 | 1387 } |
1388 | |
1389 /// Video display width (RO) | |
31156 | 1390 static int mp_property_width(m_option_t *prop, int action, void *arg, |
1391 MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1392 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1393 if (!mpctx->sh_video) |
31077 | 1394 return M_PROPERTY_UNAVAILABLE; |
22478 | 1395 return m_property_int_ro(prop, action, arg, mpctx->sh_video->disp_w); |
1396 } | |
1397 | |
1398 /// Video display height (RO) | |
31156 | 1399 static int mp_property_height(m_option_t *prop, int action, void *arg, |
1400 MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1401 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1402 if (!mpctx->sh_video) |
31077 | 1403 return M_PROPERTY_UNAVAILABLE; |
22478 | 1404 return m_property_int_ro(prop, action, arg, mpctx->sh_video->disp_h); |
1405 } | |
1406 | |
1407 /// Video fps (RO) | |
31156 | 1408 static int mp_property_fps(m_option_t *prop, int action, void *arg, |
1409 MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1410 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1411 if (!mpctx->sh_video) |
31077 | 1412 return M_PROPERTY_UNAVAILABLE; |
22478 | 1413 return m_property_float_ro(prop, action, arg, mpctx->sh_video->fps); |
1414 } | |
1415 | |
1416 /// Video aspect (RO) | |
31156 | 1417 static int mp_property_aspect(m_option_t *prop, int action, void *arg, |
1418 MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1419 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1420 if (!mpctx->sh_video) |
31077 | 1421 return M_PROPERTY_UNAVAILABLE; |
22478 | 1422 return m_property_float_ro(prop, action, arg, mpctx->sh_video->aspect); |
1423 } | |
1424 | |
1425 ///@} | |
1426 | |
1427 /// \defgroup SubProprties Subtitles properties | |
1428 /// \ingroup Properties | |
1429 ///@{ | |
1430 | |
1431 /// Text subtitle position (RW) | |
31156 | 1432 static int mp_property_sub_pos(m_option_t *prop, int action, void *arg, |
1433 MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1434 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1435 switch (action) { |
22478 | 1436 case M_PROPERTY_SET: |
31077 | 1437 if (!arg) |
1438 return M_PROPERTY_ERROR; | |
22478 | 1439 case M_PROPERTY_STEP_UP: |
1440 case M_PROPERTY_STEP_DOWN: | |
31077 | 1441 vo_osd_changed(OSDTYPE_SUBTITLE); |
22478 | 1442 default: |
31077 | 1443 return m_property_int_range(prop, action, arg, &sub_pos); |
22478 | 1444 } |
1445 } | |
1446 | |
1447 /// Selected subtitles (RW) | |
31156 | 1448 static int mp_property_sub(m_option_t *prop, int action, void *arg, |
1449 MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1450 { |
22478 | 1451 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
|
1452 int global_sub_size; |
22478 | 1453 int source = -1, reset_spu = 0; |
31612
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
1454 int source_pos = -1; |
29668
ecc719c6d7a9
Make update_subtitles work without sh_video for text subtitles.
reimar
parents:
29617
diff
changeset
|
1455 double pts = 0; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1456 char *sub_name; |
22478 | 1457 |
31612
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
1458 update_global_sub_size(mpctx); |
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
1459 global_sub_size = mpctx->global_sub_size; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1460 if (global_sub_size <= 0) |
31077 | 1461 return M_PROPERTY_UNAVAILABLE; |
22478 | 1462 |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1463 switch (action) { |
22478 | 1464 case M_PROPERTY_GET: |
31077 | 1465 if (!arg) |
1466 return M_PROPERTY_ERROR; | |
1467 *(int *) arg = mpctx->global_sub_pos; | |
1468 return M_PROPERTY_OK; | |
22478 | 1469 case M_PROPERTY_PRINT: |
31077 | 1470 if (!arg) |
1471 return M_PROPERTY_ERROR; | |
1472 *(char **) arg = malloc(64); | |
1473 (*(char **) arg)[63] = 0; | |
1474 sub_name = 0; | |
1475 if (subdata) | |
1476 sub_name = subdata->filename; | |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
1477 #ifdef CONFIG_ASS |
31077 | 1478 if (ass_track && ass_track->name) |
1479 sub_name = ass_track->name; | |
22478 | 1480 #endif |
31077 | 1481 if (sub_name) { |
32588 | 1482 const char *tmp = mp_basename(sub_name); |
22478 | 1483 |
31077 | 1484 snprintf(*(char **) arg, 63, "(%d) %s%s", |
1485 mpctx->set_of_sub_pos + 1, | |
1486 strlen(tmp) < 20 ? "" : "...", | |
1487 strlen(tmp) < 20 ? tmp : tmp + strlen(tmp) - 19); | |
1488 return M_PROPERTY_OK; | |
1489 } | |
26084
ec5749eb6f5f
Fill sh_sub_t.lang in lavf, mkv and ogg demuxers. Use it for printing subtitle
eugeni
parents:
26083
diff
changeset
|
1490 |
31077 | 1491 if (vo_vobsub && vobsub_id >= 0) { |
1492 const char *language = MSGTR_Unknown; | |
1493 language = vobsub_get_id(vo_vobsub, (unsigned int) vobsub_id); | |
1494 snprintf(*(char **) arg, 63, "(%d) %s", | |
1495 vobsub_id, language ? language : MSGTR_Unknown); | |
1496 return M_PROPERTY_OK; | |
1497 } | |
34648
26eddbd6353a
Code cleanup: Use a stream_control instead of global functions to
reimar
parents:
34386
diff
changeset
|
1498 if (dvdsub_id >= 0) { |
26eddbd6353a
Code cleanup: Use a stream_control instead of global functions to
reimar
parents:
34386
diff
changeset
|
1499 char lang[40] = MSGTR_Unknown; |
35446 | 1500 int id = dvdsub_id; |
1501 // HACK: for DVDs sub->sh/id will be invalid until | |
1502 // we actually get the first packet | |
1503 if (d_sub && d_sub->sh) | |
1504 id = d_sub->id; | |
1505 demuxer_sub_lang(mpctx->demuxer, id, lang, sizeof(lang)); | |
31077 | 1506 snprintf(*(char **) arg, 63, "(%d) %s", dvdsub_id, lang); |
1507 return M_PROPERTY_OK; | |
1508 } | |
1509 snprintf(*(char **) arg, 63, MSGTR_Disabled); | |
1510 return M_PROPERTY_OK; | |
22478 | 1511 |
1512 case M_PROPERTY_SET: | |
31077 | 1513 if (!arg) |
1514 return M_PROPERTY_ERROR; | |
1515 if (*(int *) arg < -1) | |
1516 *(int *) arg = -1; | |
1517 else if (*(int *) arg >= global_sub_size) | |
1518 *(int *) arg = global_sub_size - 1; | |
1519 mpctx->global_sub_pos = *(int *) arg; | |
1520 break; | |
22478 | 1521 case M_PROPERTY_STEP_UP: |
31077 | 1522 mpctx->global_sub_pos += 2; |
1523 mpctx->global_sub_pos = | |
1524 (mpctx->global_sub_pos % (global_sub_size + 1)) - 1; | |
1525 break; | |
22478 | 1526 case M_PROPERTY_STEP_DOWN: |
31077 | 1527 mpctx->global_sub_pos += global_sub_size + 1; |
1528 mpctx->global_sub_pos = | |
1529 (mpctx->global_sub_pos % (global_sub_size + 1)) - 1; | |
1530 break; | |
22478 | 1531 default: |
31077 | 1532 return M_PROPERTY_NOT_IMPLEMENTED; |
22478 | 1533 } |
1534 | |
31612
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
1535 if (mpctx->global_sub_pos >= 0) { |
31077 | 1536 source = sub_source(mpctx); |
31612
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
1537 source_pos = sub_source_pos(mpctx); |
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
1538 } |
22478 | 1539 |
1540 mp_msg(MSGT_CPLAYER, MSGL_DBG3, | |
31077 | 1541 "subtitles: %d subs, (v@%d s@%d d@%d), @%d, source @%d\n", |
1542 global_sub_size, | |
31612
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
1543 mpctx->sub_counts[SUB_SOURCE_VOBSUB], |
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
1544 mpctx->sub_counts[SUB_SOURCE_SUBS], |
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
1545 mpctx->sub_counts[SUB_SOURCE_DEMUX], |
31077 | 1546 mpctx->global_sub_pos, source); |
22478 | 1547 |
1548 mpctx->set_of_sub_pos = -1; | |
1549 subdata = NULL; | |
1550 | |
1551 vobsub_id = -1; | |
1552 dvdsub_id = -1; | |
1553 if (d_sub) { | |
31077 | 1554 if (d_sub->id > -2) |
1555 reset_spu = 1; | |
1556 d_sub->id = -2; | |
36336
e24ada1fc15f
Fix disabling subtitles by switching through them.
reimar
parents:
36317
diff
changeset
|
1557 d_sub->sh = NULL; |
22478 | 1558 } |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
1559 #ifdef CONFIG_ASS |
22478 | 1560 ass_track = 0; |
1561 #endif | |
1562 | |
1563 if (source == SUB_SOURCE_VOBSUB) { | |
31904
f8af1068e397
100l, re-add vobsub_get_id_by_index call accidentally removed in
reimar
parents:
31877
diff
changeset
|
1564 vobsub_id = vobsub_get_id_by_index(vo_vobsub, source_pos); |
22478 | 1565 } else if (source == SUB_SOURCE_SUBS) { |
31612
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
1566 mpctx->set_of_sub_pos = source_pos; |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
1567 #ifdef CONFIG_ASS |
31077 | 1568 if (ass_enabled && mpctx->set_of_ass_tracks[mpctx->set_of_sub_pos]) |
1569 ass_track = mpctx->set_of_ass_tracks[mpctx->set_of_sub_pos]; | |
1570 else | |
22478 | 1571 #endif |
31077 | 1572 { |
1573 subdata = mpctx->set_of_subtitles[mpctx->set_of_sub_pos]; | |
1574 vo_osd_changed(OSDTYPE_SUBTITLE); | |
1575 } | |
22478 | 1576 } else if (source == SUB_SOURCE_DEMUX) { |
31612
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
1577 dvdsub_id = source_pos; |
31077 | 1578 if (d_sub && dvdsub_id < MAX_S_STREAMS) { |
1579 int i = 0; | |
1580 // default: assume 1:1 mapping of sid and stream id | |
1581 d_sub->id = dvdsub_id; | |
1582 d_sub->sh = mpctx->demuxer->s_streams[d_sub->id]; | |
1583 ds_free_packs(d_sub); | |
1584 for (i = 0; i < MAX_S_STREAMS; i++) { | |
1585 sh_sub_t *sh = mpctx->demuxer->s_streams[i]; | |
1586 if (sh && sh->sid == dvdsub_id) { | |
1587 d_sub->id = i; | |
1588 d_sub->sh = sh; | |
1589 break; | |
1590 } | |
1591 } | |
1592 if (d_sub->sh && d_sub->id >= 0) { | |
1593 sh_sub_t *sh = d_sub->sh; | |
1594 if (sh->type == 'v') | |
33577
c111d9e9cfb0
Move init_vo_spudec to mp_common.c and reuse it in mencoder.
reimar
parents:
33555
diff
changeset
|
1595 init_vo_spudec(mpctx->stream, mpctx->sh_video, sh); |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
1596 #ifdef CONFIG_ASS |
31077 | 1597 else if (ass_enabled) |
1598 ass_track = sh->ass_track; | |
22478 | 1599 #endif |
23766
f0c2f9de85ba
Make sure that sub->id is -2 and sub->sh is NULL if subtitle doesn't
reimar
parents:
23758
diff
changeset
|
1600 } else { |
f0c2f9de85ba
Make sure that sub->id is -2 and sub->sh is NULL if subtitle doesn't
reimar
parents:
23758
diff
changeset
|
1601 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
|
1602 d_sub->sh = NULL; |
31077 | 1603 } |
1604 } | |
22478 | 1605 } |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
1606 #ifdef CONFIG_DVDREAD |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1607 if (vo_spudec |
35206
63274beacefb
Make checks for STREAMTYPE simpler and more consistent.
reimar
parents:
35205
diff
changeset
|
1608 && (IS_STREAMTYPE(DVD) |
63274beacefb
Make checks for STREAMTYPE simpler and more consistent.
reimar
parents:
35205
diff
changeset
|
1609 || IS_STREAMTYPE(DVDNAV)) |
31077 | 1610 && dvdsub_id < 0 && reset_spu) { |
1611 d_sub->id = -2; | |
1612 d_sub->sh = NULL; | |
22478 | 1613 } |
1614 #endif | |
29668
ecc719c6d7a9
Make update_subtitles work without sh_video for text subtitles.
reimar
parents:
29617
diff
changeset
|
1615 if (mpctx->sh_audio) |
ecc719c6d7a9
Make update_subtitles work without sh_video for text subtitles.
reimar
parents:
29617
diff
changeset
|
1616 pts = mpctx->sh_audio->pts; |
ecc719c6d7a9
Make update_subtitles work without sh_video for text subtitles.
reimar
parents:
29617
diff
changeset
|
1617 if (mpctx->sh_video) |
ecc719c6d7a9
Make update_subtitles work without sh_video for text subtitles.
reimar
parents:
29617
diff
changeset
|
1618 pts = mpctx->sh_video->pts; |
ecc719c6d7a9
Make update_subtitles work without sh_video for text subtitles.
reimar
parents:
29617
diff
changeset
|
1619 update_subtitles(mpctx->sh_video, pts, d_sub, 1); |
22478 | 1620 |
1621 return M_PROPERTY_OK; | |
1622 } | |
1623 | |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1624 /// Selected sub source (RW) |
31156 | 1625 static int mp_property_sub_source(m_option_t *prop, int action, void *arg, |
1626 MPContext *mpctx) | |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1627 { |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1628 int source; |
31612
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
1629 update_global_sub_size(mpctx); |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1630 if (!mpctx->sh_video || mpctx->global_sub_size <= 0) |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1631 return M_PROPERTY_UNAVAILABLE; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1632 |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1633 switch (action) { |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1634 case M_PROPERTY_GET: |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1635 if (!arg) |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1636 return M_PROPERTY_ERROR; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1637 *(int *) arg = sub_source(mpctx); |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1638 return M_PROPERTY_OK; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1639 case M_PROPERTY_PRINT: |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1640 if (!arg) |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1641 return M_PROPERTY_ERROR; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1642 *(char **) arg = malloc(64); |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1643 (*(char **) arg)[63] = 0; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1644 switch (sub_source(mpctx)) |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1645 { |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1646 case SUB_SOURCE_SUBS: |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1647 snprintf(*(char **) arg, 63, MSGTR_SubSourceFile); |
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_VOBSUB: |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1650 snprintf(*(char **) arg, 63, MSGTR_SubSourceVobsub); |
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 case SUB_SOURCE_DEMUX: |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1653 snprintf(*(char **) arg, 63, MSGTR_SubSourceDemux); |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1654 break; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1655 default: |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1656 snprintf(*(char **) arg, 63, MSGTR_Disabled); |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1657 } |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1658 return M_PROPERTY_OK; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1659 case M_PROPERTY_SET: |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1660 if (!arg) |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1661 return M_PROPERTY_ERROR; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1662 M_PROPERTY_CLAMP(prop, *(int*)arg); |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1663 if (*(int *) arg < 0) |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1664 mpctx->global_sub_pos = -1; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1665 else if (*(int *) arg != sub_source(mpctx)) { |
31612
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
1666 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
|
1667 if (new_pos == -1) |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1668 return M_PROPERTY_UNAVAILABLE; |
31612
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
1669 mpctx->global_sub_pos = new_pos; |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1670 } |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1671 break; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1672 case M_PROPERTY_STEP_UP: |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1673 case M_PROPERTY_STEP_DOWN: { |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1674 int step_all = (arg && *(int*)arg != 0 ? *(int*)arg : 1) |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1675 * (action == M_PROPERTY_STEP_UP ? 1 : -1); |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1676 int step = (step_all > 0) ? 1 : -1; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1677 int cur_source = sub_source(mpctx); |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1678 source = cur_source; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1679 while (step_all) { |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1680 source += step; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1681 if (source >= SUB_SOURCES) |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1682 source = -1; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1683 else if (source < -1) |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1684 source = SUB_SOURCES - 1; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1685 if (source == cur_source || source == -1 || |
31612
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
1686 mpctx->sub_counts[source]) |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1687 step_all -= step; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1688 } |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1689 if (source == cur_source) |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1690 return M_PROPERTY_OK; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1691 if (source == -1) |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1692 mpctx->global_sub_pos = -1; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1693 else |
31612
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
1694 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
|
1695 break; |
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 default: |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1698 return M_PROPERTY_NOT_IMPLEMENTED; |
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 --mpctx->global_sub_pos; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1701 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
|
1702 } |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1703 |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1704 /// Selected subtitles from specific source (RW) |
31156 | 1705 static int mp_property_sub_by_type(m_option_t *prop, int action, void *arg, |
1706 MPContext *mpctx) | |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1707 { |
31805
05ca6dd36faf
Fix subtitle selection: make selecting -sid 0 work again by replacing the
reimar
parents:
31792
diff
changeset
|
1708 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
|
1709 update_global_sub_size(mpctx); |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1710 if (!mpctx->sh_video || mpctx->global_sub_size <= 0) |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1711 return M_PROPERTY_UNAVAILABLE; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1712 |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1713 if (!strcmp(prop->name, "sub_file")) |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1714 source = SUB_SOURCE_SUBS; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1715 else if (!strcmp(prop->name, "sub_vob")) |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1716 source = SUB_SOURCE_VOBSUB; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1717 else if (!strcmp(prop->name, "sub_demux")) |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1718 source = SUB_SOURCE_DEMUX; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1719 else |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1720 return M_PROPERTY_ERROR; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1721 |
31612
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
1722 offset = sub_pos_by_source(mpctx, source); |
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
1723 if (offset < 0) |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1724 return M_PROPERTY_UNAVAILABLE; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1725 |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1726 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
|
1727 new_pos = mpctx->global_sub_pos; |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1728 switch (action) { |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1729 case M_PROPERTY_GET: |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1730 if (!arg) |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1731 return M_PROPERTY_ERROR; |
25251
80804f0631f4
Skip empty vobsub streams when selecting subtitles.
ulion
parents:
25215
diff
changeset
|
1732 if (is_cur_source) { |
31612
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
1733 *(int *) arg = sub_source_pos(mpctx); |
25251
80804f0631f4
Skip empty vobsub streams when selecting subtitles.
ulion
parents:
25215
diff
changeset
|
1734 if (source == SUB_SOURCE_VOBSUB) |
80804f0631f4
Skip empty vobsub streams when selecting subtitles.
ulion
parents:
25215
diff
changeset
|
1735 *(int *) arg = vobsub_get_id_by_index(vo_vobsub, *(int *) arg); |
80804f0631f4
Skip empty vobsub streams when selecting subtitles.
ulion
parents:
25215
diff
changeset
|
1736 } |
80804f0631f4
Skip empty vobsub streams when selecting subtitles.
ulion
parents:
25215
diff
changeset
|
1737 else |
80804f0631f4
Skip empty vobsub streams when selecting subtitles.
ulion
parents:
25215
diff
changeset
|
1738 *(int *) arg = -1; |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1739 return M_PROPERTY_OK; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1740 case M_PROPERTY_PRINT: |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1741 if (!arg) |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1742 return M_PROPERTY_ERROR; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1743 if (is_cur_source) |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1744 return mp_property_sub(prop, M_PROPERTY_PRINT, arg, mpctx); |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1745 *(char **) arg = malloc(64); |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1746 (*(char **) arg)[63] = 0; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1747 snprintf(*(char **) arg, 63, MSGTR_Disabled); |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1748 return M_PROPERTY_OK; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1749 case M_PROPERTY_SET: |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1750 if (!arg) |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1751 return M_PROPERTY_ERROR; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1752 if (*(int *) arg >= 0) { |
25251
80804f0631f4
Skip empty vobsub streams when selecting subtitles.
ulion
parents:
25215
diff
changeset
|
1753 int index = *(int *)arg; |
80804f0631f4
Skip empty vobsub streams when selecting subtitles.
ulion
parents:
25215
diff
changeset
|
1754 if (source == SUB_SOURCE_VOBSUB) |
80804f0631f4
Skip empty vobsub streams when selecting subtitles.
ulion
parents:
25215
diff
changeset
|
1755 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
|
1756 new_pos = offset + index; |
31612
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
1757 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
|
1758 new_pos = -1; |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1759 *(int *) arg = -1; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1760 } |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1761 } |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1762 else |
31805
05ca6dd36faf
Fix subtitle selection: make selecting -sid 0 work again by replacing the
reimar
parents:
31792
diff
changeset
|
1763 new_pos = -1; |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1764 break; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1765 case M_PROPERTY_STEP_UP: |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1766 case M_PROPERTY_STEP_DOWN: { |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1767 int step_all = (arg && *(int*)arg != 0 ? *(int*)arg : 1) |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1768 * (action == M_PROPERTY_STEP_UP ? 1 : -1); |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1769 int step = (step_all > 0) ? 1 : -1; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1770 int max_sub_pos_for_source = -1; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1771 if (!is_cur_source) |
31805
05ca6dd36faf
Fix subtitle selection: make selecting -sid 0 work again by replacing the
reimar
parents:
31792
diff
changeset
|
1772 new_pos = -1; |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1773 while (step_all) { |
31805
05ca6dd36faf
Fix subtitle selection: make selecting -sid 0 work again by replacing the
reimar
parents:
31792
diff
changeset
|
1774 if (new_pos == -1) { |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1775 if (step > 0) |
31805
05ca6dd36faf
Fix subtitle selection: make selecting -sid 0 work again by replacing the
reimar
parents:
31792
diff
changeset
|
1776 new_pos = offset; |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1777 else if (max_sub_pos_for_source == -1) { |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1778 // 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
|
1779 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
|
1780 while (new_pos >= 0 |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1781 && sub_source(mpctx) != source) |
31805
05ca6dd36faf
Fix subtitle selection: make selecting -sid 0 work again by replacing the
reimar
parents:
31792
diff
changeset
|
1782 new_pos--; |
35207 | 1783 // cache for next time |
1784 max_sub_pos_for_source = new_pos; | |
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 = max_sub_pos_for_source; |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1788 } |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1789 else { |
31805
05ca6dd36faf
Fix subtitle selection: make selecting -sid 0 work again by replacing the
reimar
parents:
31792
diff
changeset
|
1790 new_pos += step; |
05ca6dd36faf
Fix subtitle selection: make selecting -sid 0 work again by replacing the
reimar
parents:
31792
diff
changeset
|
1791 if (new_pos < offset || |
05ca6dd36faf
Fix subtitle selection: make selecting -sid 0 work again by replacing the
reimar
parents:
31792
diff
changeset
|
1792 new_pos >= mpctx->global_sub_size || |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1793 sub_source(mpctx) != source) |
31805
05ca6dd36faf
Fix subtitle selection: make selecting -sid 0 work again by replacing the
reimar
parents:
31792
diff
changeset
|
1794 new_pos = -1; |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1795 } |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1796 step_all -= step; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1797 } |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1798 break; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1799 } |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1800 default: |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1801 return M_PROPERTY_NOT_IMPLEMENTED; |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1802 } |
31805
05ca6dd36faf
Fix subtitle selection: make selecting -sid 0 work again by replacing the
reimar
parents:
31792
diff
changeset
|
1803 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
|
1804 } |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
1805 |
22478 | 1806 /// Subtitle delay (RW) |
31156 | 1807 static int mp_property_sub_delay(m_option_t *prop, int action, void *arg, |
1808 MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1809 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1810 if (!mpctx->sh_video) |
31077 | 1811 return M_PROPERTY_UNAVAILABLE; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1812 return m_property_delay(prop, action, arg, &sub_delay); |
22478 | 1813 } |
1814 | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1815 /// Alignment of text subtitles (RW) |
31156 | 1816 static int mp_property_sub_alignment(m_option_t *prop, int action, |
1817 void *arg, MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1818 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1819 char *name[] = { MSGTR_Top, MSGTR_Center, MSGTR_Bottom }; |
22478 | 1820 |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1821 if (!mpctx->sh_video || mpctx->global_sub_pos < 0 |
31077 | 1822 || sub_source(mpctx) != SUB_SOURCE_SUBS) |
1823 return M_PROPERTY_UNAVAILABLE; | |
22478 | 1824 |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1825 switch (action) { |
22478 | 1826 case M_PROPERTY_PRINT: |
31077 | 1827 if (!arg) |
1828 return M_PROPERTY_ERROR; | |
1829 M_PROPERTY_CLAMP(prop, sub_alignment); | |
1830 *(char **) arg = strdup(name[sub_alignment]); | |
1831 return M_PROPERTY_OK; | |
22478 | 1832 case M_PROPERTY_SET: |
31077 | 1833 if (!arg) |
1834 return M_PROPERTY_ERROR; | |
22478 | 1835 case M_PROPERTY_STEP_UP: |
1836 case M_PROPERTY_STEP_DOWN: | |
31077 | 1837 vo_osd_changed(OSDTYPE_SUBTITLE); |
22478 | 1838 default: |
31077 | 1839 return m_property_choice(prop, action, arg, &sub_alignment); |
22478 | 1840 } |
1841 } | |
1842 | |
1843 /// Subtitle visibility (RW) | |
31156 | 1844 static int mp_property_sub_visibility(m_option_t *prop, int action, |
1845 void *arg, MPContext *mpctx) | |
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 if (!mpctx->sh_video) |
31077 | 1848 return M_PROPERTY_UNAVAILABLE; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1849 |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1850 switch (action) { |
22478 | 1851 case M_PROPERTY_SET: |
31077 | 1852 if (!arg) |
1853 return M_PROPERTY_ERROR; | |
22478 | 1854 case M_PROPERTY_STEP_UP: |
1855 case M_PROPERTY_STEP_DOWN: | |
31077 | 1856 vo_osd_changed(OSDTYPE_SUBTITLE); |
1857 if (vo_spudec) | |
1858 vo_osd_changed(OSDTYPE_SPU); | |
22478 | 1859 default: |
31077 | 1860 return m_property_flag(prop, action, arg, &sub_visibility); |
22478 | 1861 } |
1862 } | |
1863 | |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
1864 #ifdef CONFIG_ASS |
25814
4ba9b9bdf123
Add ass_use_margins command and property to shift subtitles to margins and back
eugeni
parents:
25717
diff
changeset
|
1865 /// Use margins for libass subtitles (RW) |
31156 | 1866 static int mp_property_ass_use_margins(m_option_t *prop, int action, |
1867 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
|
1868 { |
4ba9b9bdf123
Add ass_use_margins command and property to shift subtitles to margins and back
eugeni
parents:
25717
diff
changeset
|
1869 if (!mpctx->sh_video) |
31077 | 1870 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
|
1871 |
4ba9b9bdf123
Add ass_use_margins command and property to shift subtitles to margins and back
eugeni
parents:
25717
diff
changeset
|
1872 switch (action) { |
4ba9b9bdf123
Add ass_use_margins command and property to shift subtitles to margins and back
eugeni
parents:
25717
diff
changeset
|
1873 case M_PROPERTY_SET: |
31077 | 1874 if (!arg) |
1875 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
|
1876 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
|
1877 case M_PROPERTY_STEP_DOWN: |
31077 | 1878 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
|
1879 default: |
31077 | 1880 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
|
1881 } |
4ba9b9bdf123
Add ass_use_margins command and property to shift subtitles to margins and back
eugeni
parents:
25717
diff
changeset
|
1882 } |
4ba9b9bdf123
Add ass_use_margins command and property to shift subtitles to margins and back
eugeni
parents:
25717
diff
changeset
|
1883 #endif |
4ba9b9bdf123
Add ass_use_margins command and property to shift subtitles to margins and back
eugeni
parents:
25717
diff
changeset
|
1884 |
22478 | 1885 /// Show only forced subtitles (RW) |
31156 | 1886 static int mp_property_sub_forced_only(m_option_t *prop, int action, |
1887 void *arg, MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1888 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1889 if (!vo_spudec) |
31077 | 1890 return M_PROPERTY_UNAVAILABLE; |
22478 | 1891 |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1892 switch (action) { |
22478 | 1893 case M_PROPERTY_SET: |
31077 | 1894 if (!arg) |
1895 return M_PROPERTY_ERROR; | |
22478 | 1896 case M_PROPERTY_STEP_UP: |
1897 case M_PROPERTY_STEP_DOWN: | |
31077 | 1898 m_property_flag(prop, action, arg, &forced_subs_only); |
1899 spudec_set_forced_subs_only(vo_spudec, forced_subs_only); | |
1900 return M_PROPERTY_OK; | |
22478 | 1901 default: |
31077 | 1902 return m_property_flag(prop, action, arg, &forced_subs_only); |
22478 | 1903 } |
1904 | |
1905 } | |
1906 | |
27393 | 1907 #ifdef CONFIG_FREETYPE |
23725 | 1908 /// Subtitle scale (RW) |
31156 | 1909 static int mp_property_sub_scale(m_option_t *prop, int action, void *arg, |
1910 MPContext *mpctx) | |
23725 | 1911 { |
1912 | |
1913 switch (action) { | |
1914 case M_PROPERTY_SET: | |
1915 if (!arg) | |
1916 return M_PROPERTY_ERROR; | |
1917 M_PROPERTY_CLAMP(prop, *(float *) arg); | |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
1918 #ifdef CONFIG_ASS |
25815
8920f8a26c05
sub_scale command now works with ass subtitles renderer
ben
parents:
25814
diff
changeset
|
1919 if (ass_enabled) { |
8920f8a26c05
sub_scale command now works with ass subtitles renderer
ben
parents:
25814
diff
changeset
|
1920 ass_font_scale = *(float *) arg; |
8920f8a26c05
sub_scale command now works with ass subtitles renderer
ben
parents:
25814
diff
changeset
|
1921 ass_force_reload = 1; |
8920f8a26c05
sub_scale command now works with ass subtitles renderer
ben
parents:
25814
diff
changeset
|
1922 } |
8920f8a26c05
sub_scale command now works with ass subtitles renderer
ben
parents:
25814
diff
changeset
|
1923 #endif |
25854 | 1924 text_font_scale_factor = *(float *) arg; |
1925 force_load_font = 1; | |
32738
abcf963fbd2c
Force subtitles to be redrawn on sub_scale change.
reimar
parents:
32664
diff
changeset
|
1926 vo_osd_changed(OSDTYPE_SUBTITLE); |
23725 | 1927 return M_PROPERTY_OK; |
1928 case M_PROPERTY_STEP_UP: | |
1929 case M_PROPERTY_STEP_DOWN: | |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
1930 #ifdef CONFIG_ASS |
25815
8920f8a26c05
sub_scale command now works with ass subtitles renderer
ben
parents:
25814
diff
changeset
|
1931 if (ass_enabled) { |
8920f8a26c05
sub_scale command now works with ass subtitles renderer
ben
parents:
25814
diff
changeset
|
1932 ass_font_scale += (arg ? *(float *) arg : 0.1)* |
8920f8a26c05
sub_scale command now works with ass subtitles renderer
ben
parents:
25814
diff
changeset
|
1933 (action == M_PROPERTY_STEP_UP ? 1.0 : -1.0); |
8920f8a26c05
sub_scale command now works with ass subtitles renderer
ben
parents:
25814
diff
changeset
|
1934 M_PROPERTY_CLAMP(prop, ass_font_scale); |
8920f8a26c05
sub_scale command now works with ass subtitles renderer
ben
parents:
25814
diff
changeset
|
1935 ass_force_reload = 1; |
8920f8a26c05
sub_scale command now works with ass subtitles renderer
ben
parents:
25814
diff
changeset
|
1936 } |
8920f8a26c05
sub_scale command now works with ass subtitles renderer
ben
parents:
25814
diff
changeset
|
1937 #endif |
25854 | 1938 text_font_scale_factor += (arg ? *(float *) arg : 0.1)* |
1939 (action == M_PROPERTY_STEP_UP ? 1.0 : -1.0); | |
1940 M_PROPERTY_CLAMP(prop, text_font_scale_factor); | |
1941 force_load_font = 1; | |
32738
abcf963fbd2c
Force subtitles to be redrawn on sub_scale change.
reimar
parents:
32664
diff
changeset
|
1942 vo_osd_changed(OSDTYPE_SUBTITLE); |
23725 | 1943 return M_PROPERTY_OK; |
1944 default: | |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
1945 #ifdef CONFIG_ASS |
25815
8920f8a26c05
sub_scale command now works with ass subtitles renderer
ben
parents:
25814
diff
changeset
|
1946 if (ass_enabled) |
8920f8a26c05
sub_scale command now works with ass subtitles renderer
ben
parents:
25814
diff
changeset
|
1947 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
|
1948 else |
8920f8a26c05
sub_scale command now works with ass subtitles renderer
ben
parents:
25814
diff
changeset
|
1949 #endif |
25816 | 1950 return m_property_float_ro(prop, action, arg, text_font_scale_factor); |
23725 | 1951 } |
1952 } | |
23740 | 1953 #endif |
23725 | 1954 |
22478 | 1955 ///@} |
1956 | |
1957 /// \defgroup TVProperties TV properties | |
1958 /// \ingroup Properties | |
1959 ///@{ | |
1960 | |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
1961 #ifdef CONFIG_TV |
22478 | 1962 |
1963 /// TV color settings (RW) | |
31156 | 1964 static int mp_property_tv_color(m_option_t *prop, int action, void *arg, |
1965 MPContext *mpctx) | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1966 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1967 int r, val; |
22478 | 1968 tvi_handle_t *tvh = mpctx->demuxer->priv; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1969 if (mpctx->demuxer->type != DEMUXER_TYPE_TV || !tvh) |
31077 | 1970 return M_PROPERTY_UNAVAILABLE; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1971 |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
1972 switch (action) { |
22478 | 1973 case M_PROPERTY_SET: |
31077 | 1974 if (!arg) |
1975 return M_PROPERTY_ERROR; | |
1976 M_PROPERTY_CLAMP(prop, *(int *) arg); | |
32405
ad86352b7c6b
Use intptr_t for integers stored in opaque pointers.
cigaes
parents:
32392
diff
changeset
|
1977 return tv_set_color_options(tvh, (intptr_t) prop->priv, *(int *) arg); |
22478 | 1978 case M_PROPERTY_GET: |
32405
ad86352b7c6b
Use intptr_t for integers stored in opaque pointers.
cigaes
parents:
32392
diff
changeset
|
1979 return tv_get_color_options(tvh, (intptr_t) prop->priv, arg); |
22478 | 1980 case M_PROPERTY_STEP_UP: |
1981 case M_PROPERTY_STEP_DOWN: | |
32405
ad86352b7c6b
Use intptr_t for integers stored in opaque pointers.
cigaes
parents:
32392
diff
changeset
|
1982 if ((r = tv_get_color_options(tvh, (intptr_t) prop->priv, &val)) >= 0) { |
31077 | 1983 if (!r) |
1984 return M_PROPERTY_ERROR; | |
1985 val += (arg ? *(int *) arg : 1) * | |
1986 (action == M_PROPERTY_STEP_DOWN ? -1 : 1); | |
1987 M_PROPERTY_CLAMP(prop, val); | |
32405
ad86352b7c6b
Use intptr_t for integers stored in opaque pointers.
cigaes
parents:
32392
diff
changeset
|
1988 return tv_set_color_options(tvh, (intptr_t) prop->priv, val); |
31077 | 1989 } |
1990 return M_PROPERTY_ERROR; | |
22478 | 1991 } |
1992 return M_PROPERTY_NOT_IMPLEMENTED; | |
1993 } | |
1994 | |
1995 #endif | |
1996 | |
31156 | 1997 static int mp_property_teletext_common(m_option_t *prop, int action, void *arg, |
1998 MPContext *mpctx) | |
23900 | 1999 { |
2000 int val,result; | |
32405
ad86352b7c6b
Use intptr_t for integers stored in opaque pointers.
cigaes
parents:
32392
diff
changeset
|
2001 int base_ioctl=(intptr_t)prop->priv; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28368
diff
changeset
|
2002 /* |
23900 | 2003 for teletext's GET,SET,STEP ioctls this is not 0 |
2004 SET is GET+1 | |
2005 STEP is GET+2 | |
2006 */ | |
29820
b33846197f5c
Make sure the teletext property stuff does not crash if no demuxer is available.
reimar
parents:
29809
diff
changeset
|
2007 if (!mpctx->demuxer || !mpctx->demuxer->teletext) |
23900 | 2008 return M_PROPERTY_UNAVAILABLE; |
2009 if(!base_ioctl) | |
2010 return M_PROPERTY_ERROR; | |
2011 | |
2012 switch (action) { | |
2013 case M_PROPERTY_GET: | |
2014 if (!arg) | |
2015 return M_PROPERTY_ERROR; | |
29806 | 2016 result=teletext_control(mpctx->demuxer->teletext, base_ioctl, arg); |
23900 | 2017 break; |
2018 case M_PROPERTY_SET: | |
2019 if (!arg) | |
2020 return M_PROPERTY_ERROR; | |
2021 M_PROPERTY_CLAMP(prop, *(int *) arg); | |
29806 | 2022 result=teletext_control(mpctx->demuxer->teletext, base_ioctl+1, arg); |
23900 | 2023 break; |
2024 case M_PROPERTY_STEP_UP: | |
2025 case M_PROPERTY_STEP_DOWN: | |
29806 | 2026 result=teletext_control(mpctx->demuxer->teletext, base_ioctl, &val); |
23900 | 2027 val += (arg ? *(int *) arg : 1) * (action == M_PROPERTY_STEP_DOWN ? -1 : 1); |
29806 | 2028 result=teletext_control(mpctx->demuxer->teletext, base_ioctl+1, &val); |
23900 | 2029 break; |
2030 default: | |
2031 return M_PROPERTY_NOT_IMPLEMENTED; | |
2032 } | |
2033 | |
29806 | 2034 return result == VBI_CONTROL_TRUE ? M_PROPERTY_OK : M_PROPERTY_ERROR; |
23900 | 2035 } |
2036 | |
31156 | 2037 static int mp_property_teletext_mode(m_option_t *prop, int action, void *arg, |
2038 MPContext *mpctx) | |
23900 | 2039 { |
2040 int result; | |
2041 int val; | |
2042 | |
2043 //with tvh==NULL will fail too | |
2044 result=mp_property_teletext_common(prop,action,arg,mpctx); | |
2045 if(result!=M_PROPERTY_OK) | |
2046 return result; | |
2047 | |
29806 | 2048 if(teletext_control(mpctx->demuxer->teletext, |
32405
ad86352b7c6b
Use intptr_t for integers stored in opaque pointers.
cigaes
parents:
32392
diff
changeset
|
2049 (intptr_t)prop->priv, &val)==VBI_CONTROL_TRUE && val) |
23900 | 2050 mp_input_set_section("teletext"); |
2051 else | |
2052 mp_input_set_section("tv"); | |
2053 return M_PROPERTY_OK; | |
2054 } | |
2055 | |
31156 | 2056 static int mp_property_teletext_page(m_option_t *prop, int action, void *arg, |
2057 MPContext *mpctx) | |
23900 | 2058 { |
2059 int result; | |
2060 int val; | |
29806 | 2061 if (!mpctx->demuxer->teletext) |
27806
26c27a80b8af
Disallow the modification of teletext properties when the tv demuxer is
faust3
parents:
27650
diff
changeset
|
2062 return M_PROPERTY_UNAVAILABLE; |
23900 | 2063 switch(action){ |
2064 case M_PROPERTY_STEP_UP: | |
2065 case M_PROPERTY_STEP_DOWN: | |
2066 //This should be handled separately | |
2067 val = (arg ? *(int *) arg : 1) * (action == M_PROPERTY_STEP_DOWN ? -1 : 1); | |
29806 | 2068 result=teletext_control(mpctx->demuxer->teletext, |
2069 TV_VBI_CONTROL_STEP_PAGE, &val); | |
23900 | 2070 break; |
2071 default: | |
2072 result=mp_property_teletext_common(prop,action,arg,mpctx); | |
2073 } | |
2074 return result; | |
2075 } | |
2076 | |
22478 | 2077 ///@} |
2078 | |
2079 /// All properties available in MPlayer. | |
2080 /** \ingroup Properties | |
2081 */ | |
25717 | 2082 static const m_option_t mp_properties[] = { |
22478 | 2083 // General |
2084 { "osdlevel", mp_property_osdlevel, CONF_TYPE_INT, | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2085 M_OPT_RANGE, 0, 3, NULL }, |
23727 | 2086 { "loop", mp_property_loop, CONF_TYPE_INT, |
2087 M_OPT_MIN, -1, 0, NULL }, | |
22478 | 2088 { "speed", mp_property_playback_speed, CONF_TYPE_FLOAT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2089 M_OPT_RANGE, 0.01, 100.0, NULL }, |
22478 | 2090 { "filename", mp_property_filename, CONF_TYPE_STRING, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2091 0, 0, 0, NULL }, |
22478 | 2092 { "path", mp_property_path, CONF_TYPE_STRING, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2093 0, 0, 0, NULL }, |
22478 | 2094 { "demuxer", mp_property_demuxer, CONF_TYPE_STRING, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2095 0, 0, 0, NULL }, |
22478 | 2096 { "stream_pos", mp_property_stream_pos, CONF_TYPE_POSITION, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2097 M_OPT_MIN, 0, 0, NULL }, |
22478 | 2098 { "stream_start", mp_property_stream_start, CONF_TYPE_POSITION, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2099 M_OPT_MIN, 0, 0, NULL }, |
22478 | 2100 { "stream_end", mp_property_stream_end, CONF_TYPE_POSITION, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2101 M_OPT_MIN, 0, 0, NULL }, |
22478 | 2102 { "stream_length", mp_property_stream_length, CONF_TYPE_POSITION, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2103 M_OPT_MIN, 0, 0, NULL }, |
31728 | 2104 { "stream_time_pos", mp_property_stream_time_pos, CONF_TYPE_TIME, |
2105 M_OPT_MIN, 0, 0, NULL }, | |
23417 | 2106 { "length", mp_property_length, CONF_TYPE_TIME, |
2107 M_OPT_MIN, 0, 0, NULL }, | |
23418 | 2108 { "percent_pos", mp_property_percent_pos, CONF_TYPE_INT, |
2109 M_OPT_RANGE, 0, 100, NULL }, | |
2110 { "time_pos", mp_property_time_pos, CONF_TYPE_TIME, | |
2111 M_OPT_MIN, 0, 0, NULL }, | |
25363 | 2112 { "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
|
2113 M_OPT_MIN, 0, 0, NULL }, |
34386
206264c532f5
Add new stream control command STREAM_CTRL_GET_NUM_TITLES.
ib
parents:
34339
diff
changeset
|
2114 { "titles", mp_property_titles, CONF_TYPE_INT, |
206264c532f5
Add new stream control command STREAM_CTRL_GET_NUM_TITLES.
ib
parents:
34339
diff
changeset
|
2115 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
|
2116 { "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
|
2117 0, 0, 0, NULL }, |
25577
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
2118 { "angle", mp_property_angle, CONF_TYPE_INT, |
f1ea96323643
properties to get and set angle; patch by oattila chello hu
nicodvb
parents:
25567
diff
changeset
|
2119 CONF_RANGE, -2, 10, NULL }, |
23394
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
2120 { "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
|
2121 0, 0, 0, NULL }, |
27648
427fec163870
Add a "pause" property to allow checking if MPlayer is paused.
reimar
parents:
27635
diff
changeset
|
2122 { "pause", mp_property_pause, CONF_TYPE_FLAG, |
427fec163870
Add a "pause" property to allow checking if MPlayer is paused.
reimar
parents:
27635
diff
changeset
|
2123 M_OPT_RANGE, 0, 1, NULL }, |
32438
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
2124 { "capturing", mp_property_capture, CONF_TYPE_FLAG, |
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
2125 M_OPT_RANGE, 0, 1, NULL }, |
22478 | 2126 |
2127 // Audio | |
2128 { "volume", mp_property_volume, CONF_TYPE_FLOAT, | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2129 M_OPT_RANGE, 0, 100, NULL }, |
22478 | 2130 { "mute", mp_property_mute, CONF_TYPE_FLAG, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2131 M_OPT_RANGE, 0, 1, NULL }, |
22478 | 2132 { "audio_delay", mp_property_audio_delay, CONF_TYPE_FLOAT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2133 M_OPT_RANGE, -100, 100, NULL }, |
22478 | 2134 { "audio_format", mp_property_audio_format, CONF_TYPE_INT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2135 0, 0, 0, NULL }, |
23394
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
2136 { "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
|
2137 0, 0, 0, NULL }, |
22478 | 2138 { "audio_bitrate", mp_property_audio_bitrate, CONF_TYPE_INT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2139 0, 0, 0, NULL }, |
22478 | 2140 { "samplerate", mp_property_samplerate, CONF_TYPE_INT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2141 0, 0, 0, NULL }, |
22478 | 2142 { "channels", mp_property_channels, CONF_TYPE_INT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2143 0, 0, 0, NULL }, |
22478 | 2144 { "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
|
2145 CONF_RANGE, -2, 65535, NULL }, |
23568 | 2146 { "balance", mp_property_balance, CONF_TYPE_FLOAT, |
2147 M_OPT_RANGE, -1, 1, NULL }, | |
22478 | 2148 |
2149 // Video | |
2150 { "fullscreen", mp_property_fullscreen, CONF_TYPE_FLAG, | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2151 M_OPT_RANGE, 0, 1, NULL }, |
22478 | 2152 { "deinterlace", mp_property_deinterlace, CONF_TYPE_FLAG, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2153 M_OPT_RANGE, 0, 1, NULL }, |
22478 | 2154 { "ontop", mp_property_ontop, CONF_TYPE_FLAG, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2155 M_OPT_RANGE, 0, 1, NULL }, |
22478 | 2156 { "rootwin", mp_property_rootwin, CONF_TYPE_FLAG, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2157 M_OPT_RANGE, 0, 1, NULL }, |
22478 | 2158 { "border", mp_property_border, CONF_TYPE_FLAG, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2159 M_OPT_RANGE, 0, 1, NULL }, |
22478 | 2160 { "framedropping", mp_property_framedropping, CONF_TYPE_INT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2161 M_OPT_RANGE, 0, 2, NULL }, |
22478 | 2162 { "gamma", mp_property_gamma, CONF_TYPE_INT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2163 M_OPT_RANGE, -100, 100, &vo_gamma_gamma }, |
22478 | 2164 { "brightness", mp_property_gamma, CONF_TYPE_INT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2165 M_OPT_RANGE, -100, 100, &vo_gamma_brightness }, |
22478 | 2166 { "contrast", mp_property_gamma, CONF_TYPE_INT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2167 M_OPT_RANGE, -100, 100, &vo_gamma_contrast }, |
22478 | 2168 { "saturation", mp_property_gamma, CONF_TYPE_INT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2169 M_OPT_RANGE, -100, 100, &vo_gamma_saturation }, |
22478 | 2170 { "hue", mp_property_gamma, CONF_TYPE_INT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2171 M_OPT_RANGE, -100, 100, &vo_gamma_hue }, |
22478 | 2172 { "panscan", mp_property_panscan, CONF_TYPE_FLOAT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2173 M_OPT_RANGE, 0, 1, NULL }, |
22478 | 2174 { "vsync", mp_property_vsync, CONF_TYPE_FLAG, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2175 M_OPT_RANGE, 0, 1, NULL }, |
22478 | 2176 { "video_format", mp_property_video_format, CONF_TYPE_INT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2177 0, 0, 0, NULL }, |
23394
d4e8613ddc95
Make all the info available via the metadata API available via properties.
albeu
parents:
23393
diff
changeset
|
2178 { "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
|
2179 0, 0, 0, NULL }, |
22478 | 2180 { "video_bitrate", mp_property_video_bitrate, CONF_TYPE_INT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2181 0, 0, 0, NULL }, |
22478 | 2182 { "width", mp_property_width, CONF_TYPE_INT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2183 0, 0, 0, NULL }, |
22478 | 2184 { "height", mp_property_height, CONF_TYPE_INT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2185 0, 0, 0, NULL }, |
22478 | 2186 { "fps", mp_property_fps, CONF_TYPE_FLOAT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2187 0, 0, 0, NULL }, |
22478 | 2188 { "aspect", mp_property_aspect, CONF_TYPE_FLOAT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2189 0, 0, 0, NULL }, |
22478 | 2190 { "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
|
2191 CONF_RANGE, -2, 65535, NULL }, |
22478 | 2192 { "switch_program", mp_property_program, CONF_TYPE_INT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2193 CONF_RANGE, -1, 65535, NULL }, |
22478 | 2194 |
2195 // Subs | |
2196 { "sub", mp_property_sub, CONF_TYPE_INT, | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2197 M_OPT_MIN, -1, 0, NULL }, |
25129
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
2198 { "sub_source", mp_property_sub_source, CONF_TYPE_INT, |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
2199 M_OPT_RANGE, -1, SUB_SOURCES - 1, NULL }, |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
2200 { "sub_vob", mp_property_sub_by_type, CONF_TYPE_INT, |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
2201 M_OPT_MIN, -1, 0, NULL }, |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
2202 { "sub_demux", mp_property_sub_by_type, CONF_TYPE_INT, |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
2203 M_OPT_MIN, -1, 0, NULL }, |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
2204 { "sub_file", mp_property_sub_by_type, CONF_TYPE_INT, |
c04b64054255
Support select subtitle by source, add 4 properties:
ulion
parents:
25032
diff
changeset
|
2205 M_OPT_MIN, -1, 0, NULL }, |
22478 | 2206 { "sub_delay", mp_property_sub_delay, CONF_TYPE_FLOAT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2207 0, 0, 0, NULL }, |
22478 | 2208 { "sub_pos", mp_property_sub_pos, CONF_TYPE_INT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2209 M_OPT_RANGE, 0, 100, NULL }, |
22478 | 2210 { "sub_alignment", mp_property_sub_alignment, CONF_TYPE_INT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2211 M_OPT_RANGE, 0, 2, NULL }, |
22478 | 2212 { "sub_visibility", mp_property_sub_visibility, CONF_TYPE_FLAG, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2213 M_OPT_RANGE, 0, 1, NULL }, |
22478 | 2214 { "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
|
2215 M_OPT_RANGE, 0, 1, NULL }, |
27393 | 2216 #ifdef CONFIG_FREETYPE |
23725 | 2217 { "sub_scale", mp_property_sub_scale, CONF_TYPE_FLOAT, |
2218 M_OPT_RANGE, 0, 100, NULL }, | |
23740 | 2219 #endif |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
2220 #ifdef CONFIG_ASS |
25814
4ba9b9bdf123
Add ass_use_margins command and property to shift subtitles to margins and back
eugeni
parents:
25717
diff
changeset
|
2221 { "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
|
2222 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
|
2223 #endif |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2224 |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
2225 #ifdef CONFIG_TV |
22478 | 2226 { "tv_brightness", mp_property_tv_color, CONF_TYPE_INT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2227 M_OPT_RANGE, -100, 100, (void *) TV_COLOR_BRIGHTNESS }, |
22478 | 2228 { "tv_contrast", mp_property_tv_color, CONF_TYPE_INT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2229 M_OPT_RANGE, -100, 100, (void *) TV_COLOR_CONTRAST }, |
22478 | 2230 { "tv_saturation", mp_property_tv_color, CONF_TYPE_INT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2231 M_OPT_RANGE, -100, 100, (void *) TV_COLOR_SATURATION }, |
22478 | 2232 { "tv_hue", mp_property_tv_color, CONF_TYPE_INT, |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2233 M_OPT_RANGE, -100, 100, (void *) TV_COLOR_HUE }, |
22478 | 2234 #endif |
23900 | 2235 { "teletext_page", mp_property_teletext_page, CONF_TYPE_INT, |
2236 M_OPT_RANGE, 100, 899, (void*)TV_VBI_CONTROL_GET_PAGE }, | |
2237 { "teletext_subpage", mp_property_teletext_common, CONF_TYPE_INT, | |
2238 M_OPT_RANGE, 0, 64, (void*)TV_VBI_CONTROL_GET_SUBPAGE }, | |
2239 { "teletext_mode", mp_property_teletext_mode, CONF_TYPE_FLAG, | |
2240 M_OPT_RANGE, 0, 1, (void*)TV_VBI_CONTROL_GET_MODE }, | |
2241 { "teletext_format", mp_property_teletext_common, CONF_TYPE_INT, | |
2242 M_OPT_RANGE, 0, 3, (void*)TV_VBI_CONTROL_GET_FORMAT }, | |
2243 { "teletext_half_page", mp_property_teletext_common, CONF_TYPE_INT, | |
2244 M_OPT_RANGE, 0, 2, (void*)TV_VBI_CONTROL_GET_HALF_PAGE }, | |
22478 | 2245 { NULL, NULL, NULL, 0, 0, 0, NULL } |
2246 }; | |
2247 | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2248 |
23393
a5e55cb59bbc
Rework the property API to allow sub properties such as
albeu
parents:
23259
diff
changeset
|
2249 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
|
2250 { |
23393
a5e55cb59bbc
Rework the property API to allow sub properties such as
albeu
parents:
23259
diff
changeset
|
2251 return m_property_do(mp_properties, name, action, val, ctx); |
22478 | 2252 } |
2253 | |
23393
a5e55cb59bbc
Rework the property API to allow sub properties such as
albeu
parents:
23259
diff
changeset
|
2254 char* mp_property_print(const char *name, void* ctx) |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2255 { |
23393
a5e55cb59bbc
Rework the property API to allow sub properties such as
albeu
parents:
23259
diff
changeset
|
2256 char* ret = NULL; |
a5e55cb59bbc
Rework the property API to allow sub properties such as
albeu
parents:
23259
diff
changeset
|
2257 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
|
2258 return NULL; |
a5e55cb59bbc
Rework the property API to allow sub properties such as
albeu
parents:
23259
diff
changeset
|
2259 return ret; |
22478 | 2260 } |
2261 | |
31156 | 2262 char *property_expand_string(MPContext *mpctx, char *str) |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2263 { |
22478 | 2264 return m_properties_expand_string(mp_properties, str, mpctx); |
2265 } | |
2266 | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2267 void property_print_help(void) |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2268 { |
22478 | 2269 m_properties_print_help_list(mp_properties); |
2270 } | |
2271 | |
2272 | |
2273 ///@} | |
2274 // Properties group | |
2275 | |
2276 | |
2277 /** | |
2278 * \defgroup Command2Property Command to property bridge | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2279 * |
22478 | 2280 * It is used to handle most commands that just set a property |
2281 * and optionally display something on the OSD. | |
2282 * Two kinds of commands are handled: adjust or toggle. | |
2283 * | |
2284 * Adjust commands take 1 or 2 parameters: <value> <abs> | |
2285 * If <abs> is non-zero the property is set to the given value | |
2286 * otherwise it is adjusted. | |
2287 * | |
2288 * Toggle commands take 0 or 1 parameters. With no parameter | |
2289 * or a value less than the property minimum it just steps the | |
32593 | 2290 * property to its next or previous value respectively. |
2291 * Otherwise it sets it to the given value. | |
22478 | 2292 * |
2293 *@{ | |
2294 */ | |
2295 | |
2296 /// 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
|
2297 static struct { |
22478 | 2298 /// property name |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2299 const char *name; |
22478 | 2300 /// cmd id |
2301 int cmd; | |
2302 /// set/adjust or toggle command | |
2303 int toggle; | |
2304 /// progressbar type | |
2305 int osd_progbar; | |
2306 /// osd msg id if it must be shared | |
2307 int osd_id; | |
2308 /// osd msg template | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2309 const char *osd_msg; |
22478 | 2310 } set_prop_cmd[] = { |
23727 | 2311 // general |
2312 { "loop", MP_CMD_LOOP, 0, 0, -1, MSGTR_LoopStatus }, | |
25363 | 2313 { "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
|
2314 { "angle", MP_CMD_SWITCH_ANGLE, 0, 0, -1, NULL }, |
32438
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
32419
diff
changeset
|
2315 { "capturing", MP_CMD_CAPTURING, 1, 0, -1, NULL }, |
22478 | 2316 // audio |
2317 { "volume", MP_CMD_VOLUME, 0, OSD_VOLUME, -1, MSGTR_Volume }, | |
2318 { "mute", MP_CMD_MUTE, 1, 0, -1, MSGTR_MuteStatus }, | |
2319 { "audio_delay", MP_CMD_AUDIO_DELAY, 0, 0, -1, MSGTR_AVDelayStatus }, | |
2320 { "switch_audio", MP_CMD_SWITCH_AUDIO, 1, 0, -1, MSGTR_OSDAudio }, | |
23568 | 2321 { "balance", MP_CMD_BALANCE, 0, OSD_BALANCE, -1, MSGTR_Balance }, |
22478 | 2322 // video |
2323 { "fullscreen", MP_CMD_VO_FULLSCREEN, 1, 0, -1, NULL }, | |
2324 { "panscan", MP_CMD_PANSCAN, 0, OSD_PANSCAN, -1, MSGTR_Panscan }, | |
2325 { "ontop", MP_CMD_VO_ONTOP, 1, 0, -1, MSGTR_OnTopStatus }, | |
2326 { "rootwin", MP_CMD_VO_ROOTWIN, 1, 0, -1, MSGTR_RootwinStatus }, | |
2327 { "border", MP_CMD_VO_BORDER, 1, 0, -1, MSGTR_BorderStatus }, | |
2328 { "framedropping", MP_CMD_FRAMEDROPPING, 1, 0, -1, MSGTR_FramedroppingStatus }, | |
2329 { "gamma", MP_CMD_GAMMA, 0, OSD_BRIGHTNESS, -1, MSGTR_Gamma }, | |
2330 { "brightness", MP_CMD_BRIGHTNESS, 0, OSD_BRIGHTNESS, -1, MSGTR_Brightness }, | |
2331 { "contrast", MP_CMD_CONTRAST, 0, OSD_CONTRAST, -1, MSGTR_Contrast }, | |
2332 { "saturation", MP_CMD_SATURATION, 0, OSD_SATURATION, -1, MSGTR_Saturation }, | |
2333 { "hue", MP_CMD_HUE, 0, OSD_HUE, -1, MSGTR_Hue }, | |
2334 { "vsync", MP_CMD_SWITCH_VSYNC, 1, 0, -1, MSGTR_VSyncStatus }, | |
31077 | 2335 // subs |
22478 | 2336 { "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
|
2337 { "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
|
2338 { "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
|
2339 { "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
|
2340 { "sub_file", MP_CMD_SUB_FILE, 1, 0, -1, MSGTR_SubSelectStatus }, |
22478 | 2341 { "sub_pos", MP_CMD_SUB_POS, 0, 0, -1, MSGTR_SubPosStatus }, |
2342 { "sub_alignment", MP_CMD_SUB_ALIGNMENT, 1, 0, -1, MSGTR_SubAlignStatus }, | |
2343 { "sub_delay", MP_CMD_SUB_DELAY, 0, 0, OSD_MSG_SUB_DELAY, MSGTR_SubDelayStatus }, | |
2344 { "sub_visibility", MP_CMD_SUB_VISIBILITY, 1, 0, -1, MSGTR_SubVisibleStatus }, | |
2345 { "sub_forced_only", MP_CMD_SUB_FORCED_ONLY, 1, 0, -1, MSGTR_SubForcedOnlyStatus }, | |
27393 | 2346 #ifdef CONFIG_FREETYPE |
23725 | 2347 { "sub_scale", MP_CMD_SUB_SCALE, 0, 0, -1, MSGTR_SubScale}, |
23740 | 2348 #endif |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
2349 #ifdef CONFIG_ASS |
25814
4ba9b9bdf123
Add ass_use_margins command and property to shift subtitles to margins and back
eugeni
parents:
25717
diff
changeset
|
2350 { "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
|
2351 #endif |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
2352 #ifdef CONFIG_TV |
22478 | 2353 { "tv_brightness", MP_CMD_TV_SET_BRIGHTNESS, 0, OSD_BRIGHTNESS, -1, MSGTR_Brightness }, |
2354 { "tv_hue", MP_CMD_TV_SET_HUE, 0, OSD_HUE, -1, MSGTR_Hue }, | |
2355 { "tv_saturation", MP_CMD_TV_SET_SATURATION, 0, OSD_SATURATION, -1, MSGTR_Saturation }, | |
2356 { "tv_contrast", MP_CMD_TV_SET_CONTRAST, 0, OSD_CONTRAST, -1, MSGTR_Contrast }, | |
2357 #endif | |
2358 { NULL, 0, 0, 0, -1, NULL } | |
2359 }; | |
2360 | |
2361 | |
2362 /// Handle commands that set a property. | |
31156 | 2363 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
|
2364 { |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2365 int i, r; |
31156 | 2366 m_option_t *prop; |
23393
a5e55cb59bbc
Rework the property API to allow sub properties such as
albeu
parents:
23259
diff
changeset
|
2367 const char *pname; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2368 |
22478 | 2369 // look for the command |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2370 for (i = 0; set_prop_cmd[i].name; i++) |
31077 | 2371 if (set_prop_cmd[i].cmd == cmd->id) |
2372 break; | |
23393
a5e55cb59bbc
Rework the property API to allow sub properties such as
albeu
parents:
23259
diff
changeset
|
2373 if (!(pname = set_prop_cmd[i].name)) |
31077 | 2374 return 0; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2375 |
23393
a5e55cb59bbc
Rework the property API to allow sub properties such as
albeu
parents:
23259
diff
changeset
|
2376 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
|
2377 return 0; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2378 |
22478 | 2379 // toggle command |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2380 if (set_prop_cmd[i].toggle) { |
31077 | 2381 // set to value |
2382 if (cmd->nargs > 0 && cmd->args[0].v.i >= prop->min) | |
2383 r = mp_property_do(pname, M_PROPERTY_SET, &cmd->args[0].v.i, mpctx); | |
32593 | 2384 else if (cmd->nargs > 0) |
2385 r = mp_property_do(pname, M_PROPERTY_STEP_DOWN, NULL, mpctx); | |
31077 | 2386 else |
2387 r = mp_property_do(pname, M_PROPERTY_STEP_UP, NULL, mpctx); | |
2388 } else if (cmd->args[1].v.i) //set | |
2389 r = mp_property_do(pname, M_PROPERTY_SET, &cmd->args[0].v, mpctx); | |
2390 else // adjust | |
2391 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
|
2392 |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2393 if (r <= 0) |
31077 | 2394 return 1; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2395 |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2396 if (set_prop_cmd[i].osd_progbar) { |
31077 | 2397 if (prop->type == CONF_TYPE_INT) { |
2398 if (mp_property_do(pname, M_PROPERTY_GET, &r, mpctx) > 0) | |
2399 set_osd_bar(set_prop_cmd[i].osd_progbar, | |
2400 set_prop_cmd[i].osd_msg, prop->min, prop->max, r); | |
2401 } else if (prop->type == CONF_TYPE_FLOAT) { | |
2402 float f; | |
2403 if (mp_property_do(pname, M_PROPERTY_GET, &f, mpctx) > 0) | |
2404 set_osd_bar(set_prop_cmd[i].osd_progbar, | |
2405 set_prop_cmd[i].osd_msg, prop->min, prop->max, f); | |
2406 } else | |
2407 mp_msg(MSGT_CPLAYER, MSGL_ERR, | |
2408 "Property use an unsupported type.\n"); | |
2409 return 1; | |
22478 | 2410 } |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2411 |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2412 if (set_prop_cmd[i].osd_msg) { |
31077 | 2413 char *val = mp_property_print(pname, mpctx); |
2414 if (val) { | |
2415 set_osd_msg(set_prop_cmd[i].osd_id >= | |
2416 0 ? set_prop_cmd[i].osd_id : OSD_MSG_PROPERTY + i, | |
2417 1, osd_duration, set_prop_cmd[i].osd_msg, val); | |
2418 free(val); | |
2419 } | |
22478 | 2420 } |
2421 return 1; | |
2422 } | |
2423 | |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
2424 #ifdef CONFIG_DVDNAV |
27068 | 2425 static const struct { |
2426 const char *name; | |
2427 const mp_command_type cmd; | |
2428 } mp_dvdnav_bindings[] = { | |
2429 { "up", MP_CMD_DVDNAV_UP }, | |
2430 { "down", MP_CMD_DVDNAV_DOWN }, | |
2431 { "left", MP_CMD_DVDNAV_LEFT }, | |
2432 { "right", MP_CMD_DVDNAV_RIGHT }, | |
2433 { "menu", MP_CMD_DVDNAV_MENU }, | |
2434 { "select", MP_CMD_DVDNAV_SELECT }, | |
2435 { "prev", MP_CMD_DVDNAV_PREVMENU }, | |
2436 { "mouse", MP_CMD_DVDNAV_MOUSECLICK }, | |
27069
1a6930933140
Keep old dvdnav sub-command options for a while in order
ben
parents:
27068
diff
changeset
|
2437 |
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 * 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
|
2440 * break slave-mode API too suddenly. |
1a6930933140
Keep old dvdnav sub-command options for a while in order
ben
parents:
27068
diff
changeset
|
2441 */ |
1a6930933140
Keep old dvdnav sub-command options for a while in order
ben
parents:
27068
diff
changeset
|
2442 { "1", MP_CMD_DVDNAV_UP }, |
1a6930933140
Keep old dvdnav sub-command options for a while in order
ben
parents:
27068
diff
changeset
|
2443 { "2", MP_CMD_DVDNAV_DOWN }, |
1a6930933140
Keep old dvdnav sub-command options for a while in order
ben
parents:
27068
diff
changeset
|
2444 { "3", MP_CMD_DVDNAV_LEFT }, |
1a6930933140
Keep old dvdnav sub-command options for a while in order
ben
parents:
27068
diff
changeset
|
2445 { "4", MP_CMD_DVDNAV_RIGHT }, |
1a6930933140
Keep old dvdnav sub-command options for a while in order
ben
parents:
27068
diff
changeset
|
2446 { "5", MP_CMD_DVDNAV_MENU }, |
1a6930933140
Keep old dvdnav sub-command options for a while in order
ben
parents:
27068
diff
changeset
|
2447 { "6", MP_CMD_DVDNAV_SELECT }, |
1a6930933140
Keep old dvdnav sub-command options for a while in order
ben
parents:
27068
diff
changeset
|
2448 { "7", MP_CMD_DVDNAV_PREVMENU }, |
1a6930933140
Keep old dvdnav sub-command options for a while in order
ben
parents:
27068
diff
changeset
|
2449 { "8", MP_CMD_DVDNAV_MOUSECLICK }, |
27068 | 2450 { NULL, 0 } |
2451 }; | |
2452 #endif | |
22478 | 2453 |
30077
72e4567e7a0a
Print a ANS_ERROR reply if one of the *_property slave command fails.
reimar
parents:
30025
diff
changeset
|
2454 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
|
2455 { |
72e4567e7a0a
Print a ANS_ERROR reply if one of the *_property slave command fails.
reimar
parents:
30025
diff
changeset
|
2456 switch (error_value) { |
72e4567e7a0a
Print a ANS_ERROR reply if one of the *_property slave command fails.
reimar
parents:
30025
diff
changeset
|
2457 case M_PROPERTY_ERROR: |
72e4567e7a0a
Print a ANS_ERROR reply if one of the *_property slave command fails.
reimar
parents:
30025
diff
changeset
|
2458 return "ERROR"; |
72e4567e7a0a
Print a ANS_ERROR reply if one of the *_property slave command fails.
reimar
parents:
30025
diff
changeset
|
2459 case M_PROPERTY_UNAVAILABLE: |
72e4567e7a0a
Print a ANS_ERROR reply if one of the *_property slave command fails.
reimar
parents:
30025
diff
changeset
|
2460 return "PROPERTY_UNAVAILABLE"; |
72e4567e7a0a
Print a ANS_ERROR reply if one of the *_property slave command fails.
reimar
parents:
30025
diff
changeset
|
2461 case M_PROPERTY_NOT_IMPLEMENTED: |
72e4567e7a0a
Print a ANS_ERROR reply if one of the *_property slave command fails.
reimar
parents:
30025
diff
changeset
|
2462 return "NOT_IMPLEMENTED"; |
72e4567e7a0a
Print a ANS_ERROR reply if one of the *_property slave command fails.
reimar
parents:
30025
diff
changeset
|
2463 case M_PROPERTY_UNKNOWN: |
72e4567e7a0a
Print a ANS_ERROR reply if one of the *_property slave command fails.
reimar
parents:
30025
diff
changeset
|
2464 return "PROPERTY_UNKNOWN"; |
72e4567e7a0a
Print a ANS_ERROR reply if one of the *_property slave command fails.
reimar
parents:
30025
diff
changeset
|
2465 case M_PROPERTY_DISABLED: |
72e4567e7a0a
Print a ANS_ERROR reply if one of the *_property slave command fails.
reimar
parents:
30025
diff
changeset
|
2466 return "DISABLED"; |
72e4567e7a0a
Print a ANS_ERROR reply if one of the *_property slave command fails.
reimar
parents:
30025
diff
changeset
|
2467 } |
72e4567e7a0a
Print a ANS_ERROR reply if one of the *_property slave command fails.
reimar
parents:
30025
diff
changeset
|
2468 return "UNKNOWN"; |
72e4567e7a0a
Print a ANS_ERROR reply if one of the *_property slave command fails.
reimar
parents:
30025
diff
changeset
|
2469 } |
34200
87a1b3a11b33
Fix a bunch of Doxygen syntax errors that caused warnings.
diego
parents:
34174
diff
changeset
|
2470 ///@} |
30077
72e4567e7a0a
Print a ANS_ERROR reply if one of the *_property slave command fails.
reimar
parents:
30025
diff
changeset
|
2471 |
30344
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2472 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
|
2473 { |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2474 int idx; |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2475 int end = start + count; |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2476 int after = mpctx->set_of_sub_size - end; |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2477 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
|
2478 #ifdef CONFIG_ASS |
31792
55dacfca4a43
Rename libass types to match upstream libass >= 0.9.7
greg
parents:
31788
diff
changeset
|
2479 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
|
2480 #endif |
30344
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2481 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
|
2482 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
|
2483 mp_msg(MSGT_CPLAYER, MSGL_ERR, |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2484 "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
|
2485 return; |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2486 } |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2487 for (idx = start; idx < end; idx++) { |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2488 sub_data *subd = subs[idx]; |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2489 mp_msg(MSGT_CPLAYER, MSGL_STATUS, |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2490 MSGTR_RemovedSubtitleFile, idx + 1, |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2491 filename_recode(subd->filename)); |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2492 sub_free(subd); |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2493 subs[idx] = NULL; |
30345
ea015e0ab0c6
Also handle ASS subtitles when removing subtitles via sub_remove slave command.
reimar
parents:
30344
diff
changeset
|
2494 #ifdef CONFIG_ASS |
ea015e0ab0c6
Also handle ASS subtitles when removing subtitles via sub_remove slave command.
reimar
parents:
30344
diff
changeset
|
2495 if (ass_tracks[idx]) |
ea015e0ab0c6
Also handle ASS subtitles when removing subtitles via sub_remove slave command.
reimar
parents:
30344
diff
changeset
|
2496 ass_free_track(ass_tracks[idx]); |
ea015e0ab0c6
Also handle ASS subtitles when removing subtitles via sub_remove slave command.
reimar
parents:
30344
diff
changeset
|
2497 ass_tracks[idx] = NULL; |
ea015e0ab0c6
Also handle ASS subtitles when removing subtitles via sub_remove slave command.
reimar
parents:
30344
diff
changeset
|
2498 #endif |
30344
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2499 } |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2500 |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2501 mpctx->global_sub_size -= count; |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2502 mpctx->set_of_sub_size -= count; |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2503 if (mpctx->set_of_sub_size <= 0) |
31612
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
2504 mpctx->sub_counts[SUB_SOURCE_SUBS] = 0; |
30344
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2505 |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2506 memmove(subs + start, subs + end, after * sizeof(*subs)); |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2507 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
|
2508 #ifdef CONFIG_ASS |
ea015e0ab0c6
Also handle ASS subtitles when removing subtitles via sub_remove slave command.
reimar
parents:
30344
diff
changeset
|
2509 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
|
2510 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
|
2511 #endif |
30344
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2512 |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2513 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
|
2514 mpctx->global_sub_pos = -2; |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2515 subdata = NULL; |
30345
ea015e0ab0c6
Also handle ASS subtitles when removing subtitles via sub_remove slave command.
reimar
parents:
30344
diff
changeset
|
2516 #ifdef CONFIG_ASS |
ea015e0ab0c6
Also handle ASS subtitles when removing subtitles via sub_remove slave command.
reimar
parents:
30344
diff
changeset
|
2517 ass_track = NULL; |
ea015e0ab0c6
Also handle ASS subtitles when removing subtitles via sub_remove slave command.
reimar
parents:
30344
diff
changeset
|
2518 #endif |
30344
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2519 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
|
2520 } else if (mpctx->set_of_sub_pos >= end) { |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2521 mpctx->set_of_sub_pos -= count; |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2522 mpctx->global_sub_pos -= count; |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2523 } |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2524 } |
4752e3cbe7be
Avoid duplicating code to remove subtitles (sub_remove slave command).
reimar
parents:
30082
diff
changeset
|
2525 |
32392 | 2526 static int overlay_source_registered = 0; |
2527 static struct mp_eosd_source overlay_source = { | |
2528 .z_index = 5, | |
2529 }; | |
2530 | |
2531 static void overlay_add(char *file, int id, int x, int y, unsigned col) | |
2532 { | |
2533 FILE *f; | |
33708 | 2534 int w, h, bpp, maxval; |
32442
bf593e3827d9
EOSD: overlay_add: use read_pnm instead of the internal reimplementation.
cigaes
parents:
32438
diff
changeset
|
2535 uint8_t *data; |
32392 | 2536 struct mp_eosd_image *img; |
2537 | |
32442
bf593e3827d9
EOSD: overlay_add: use read_pnm instead of the internal reimplementation.
cigaes
parents:
32438
diff
changeset
|
2538 f = fopen(file, "rb"); |
bf593e3827d9
EOSD: overlay_add: use read_pnm instead of the internal reimplementation.
cigaes
parents:
32438
diff
changeset
|
2539 if (!f) { |
32392 | 2540 mp_msg(MSGT_CPLAYER, MSGL_ERR, "overlay_add: unable to open file.\n"); |
2541 return; | |
2542 } | |
32442
bf593e3827d9
EOSD: overlay_add: use read_pnm instead of the internal reimplementation.
cigaes
parents:
32438
diff
changeset
|
2543 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
|
2544 fclose(f); |
bf593e3827d9
EOSD: overlay_add: use read_pnm instead of the internal reimplementation.
cigaes
parents:
32438
diff
changeset
|
2545 if (!data) { |
bf593e3827d9
EOSD: overlay_add: use read_pnm instead of the internal reimplementation.
cigaes
parents:
32438
diff
changeset
|
2546 mp_msg(MSGT_CPLAYER, MSGL_ERR, "overlay_add: unable to load file.\n"); |
32392 | 2547 return; |
2548 } | |
32442
bf593e3827d9
EOSD: overlay_add: use read_pnm instead of the internal reimplementation.
cigaes
parents:
32438
diff
changeset
|
2549 if (bpp != 1 || maxval != 255) { |
bf593e3827d9
EOSD: overlay_add: use read_pnm instead of the internal reimplementation.
cigaes
parents:
32438
diff
changeset
|
2550 mp_msg(MSGT_CPLAYER, MSGL_ERR, |
bf593e3827d9
EOSD: overlay_add: use read_pnm instead of the internal reimplementation.
cigaes
parents:
32438
diff
changeset
|
2551 "overlay_add: file format not supported.\n"); |
32392 | 2552 return; |
2553 } | |
2554 if (!overlay_source_registered) { | |
2555 eosd_register(&overlay_source); | |
2556 eosd_image_remove_all(&overlay_source); | |
2557 overlay_source_registered = 1; | |
2558 } | |
2559 img = eosd_image_alloc(); | |
2560 img->w = w; | |
2561 img->h = h; | |
2562 img->stride = w; | |
2563 img->bitmap = data; | |
2564 img->color = col ^ 0xFF; /* col is RGBA, img->color is RGBT */ | |
2565 img->dst_x = x; | |
2566 img->dst_y = y; | |
32405
ad86352b7c6b
Use intptr_t for integers stored in opaque pointers.
cigaes
parents:
32392
diff
changeset
|
2567 img->opaque = (void *)(intptr_t)id; |
32392 | 2568 eosd_image_append(&overlay_source, img); |
2569 overlay_source.changed = EOSD_CHANGED_BITMAP; | |
2570 } | |
2571 | |
2572 static void overlay_remove(int id) | |
2573 { | |
2574 struct mp_eosd_image *img, **prev, *next; | |
2575 prev = &overlay_source.images; | |
2576 img = overlay_source.images; | |
2577 while (img) { | |
2578 next = img->next; | |
32405
ad86352b7c6b
Use intptr_t for integers stored in opaque pointers.
cigaes
parents:
32392
diff
changeset
|
2579 if ((intptr_t)img->opaque == id) { |
32392 | 2580 free(img->bitmap); |
2581 eosd_image_remove(&overlay_source, img, prev); | |
2582 overlay_source.changed = EOSD_CHANGED_BITMAP; | |
2583 } else { | |
2584 prev = &img->next; | |
2585 } | |
2586 img = next; | |
2587 } | |
2588 } | |
2589 | |
31156 | 2590 int run_command(MPContext *mpctx, mp_cmd_t *cmd) |
22478 | 2591 { |
2592 sh_audio_t * const sh_audio = mpctx->sh_audio; | |
2593 sh_video_t * const sh_video = mpctx->sh_video; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2594 int brk_cmd = 0; |
22478 | 2595 if (!set_property_command(mpctx, cmd)) |
31077 | 2596 switch (cmd->id) { |
2597 case MP_CMD_SEEK:{ | |
2598 float v; | |
2599 int abs; | |
2600 if (sh_video) | |
2601 mpctx->osd_show_percentage = sh_video->fps; | |
2602 v = cmd->args[0].v.f; | |
2603 abs = (cmd->nargs > 1) ? cmd->args[1].v.i : 0; | |
2604 if (abs == 2) { /* Absolute seek to a specific timestamp in seconds */ | |
2605 abs_seek_pos = SEEK_ABSOLUTE; | |
2606 if (sh_video) | |
2607 mpctx->osd_function = | |
2608 (v > sh_video->pts) ? OSD_FFW : OSD_REW; | |
2609 rel_seek_secs = v; | |
2610 } else if (abs) { /* Absolute seek by percentage */ | |
2611 abs_seek_pos = SEEK_ABSOLUTE | SEEK_FACTOR; | |
2612 if (sh_video) | |
2613 mpctx->osd_function = OSD_FFW; // Direction isn't set correctly | |
2614 rel_seek_secs = v / 100.0; | |
2615 } else { | |
2616 rel_seek_secs += v; | |
2617 mpctx->osd_function = (v > 0) ? OSD_FFW : OSD_REW; | |
2618 } | |
2619 brk_cmd = 1; | |
2620 } | |
2621 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2622 |
31077 | 2623 case MP_CMD_SET_PROPERTY:{ |
2624 int r = mp_property_do(cmd->args[0].v.s, M_PROPERTY_PARSE, | |
2625 cmd->args[1].v.s, mpctx); | |
2626 if (r == M_PROPERTY_UNKNOWN) | |
2627 mp_msg(MSGT_CPLAYER, MSGL_WARN, | |
2628 "Unknown property: '%s'\n", cmd->args[0].v.s); | |
2629 else if (r <= 0) | |
2630 mp_msg(MSGT_CPLAYER, MSGL_WARN, | |
2631 "Failed to set property '%s' to '%s'.\n", | |
2632 cmd->args[0].v.s, cmd->args[1].v.s); | |
2633 if (r <= 0) | |
2634 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ANS_ERROR=%s\n", property_error_string(r)); | |
2635 } | |
2636 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2637 |
31077 | 2638 case MP_CMD_STEP_PROPERTY:{ |
2639 void* arg = NULL; | |
2640 int r,i; | |
2641 double d; | |
2642 off_t o; | |
2643 if (cmd->args[1].v.f) { | |
31156 | 2644 m_option_t *prop; |
31077 | 2645 if((r = mp_property_do(cmd->args[0].v.s, |
2646 M_PROPERTY_GET_TYPE, | |
2647 &prop, mpctx)) <= 0) | |
2648 goto step_prop_err; | |
2649 if(prop->type == CONF_TYPE_INT || | |
2650 prop->type == CONF_TYPE_FLAG) | |
2651 i = cmd->args[1].v.f, arg = &i; | |
2652 else if(prop->type == CONF_TYPE_FLOAT) | |
2653 arg = &cmd->args[1].v.f; | |
2654 else if(prop->type == CONF_TYPE_DOUBLE || | |
2655 prop->type == CONF_TYPE_TIME) | |
2656 d = cmd->args[1].v.f, arg = &d; | |
2657 else if(prop->type == CONF_TYPE_POSITION) | |
2658 o = cmd->args[1].v.f, arg = &o; | |
2659 else | |
2660 mp_msg(MSGT_CPLAYER, MSGL_WARN, | |
2661 "Ignoring step size stepping property '%s'.\n", | |
2662 cmd->args[0].v.s); | |
2663 } | |
2664 r = mp_property_do(cmd->args[0].v.s, | |
2665 cmd->args[2].v.i < 0 ? | |
2666 M_PROPERTY_STEP_DOWN : M_PROPERTY_STEP_UP, | |
2667 arg, mpctx); | |
2668 step_prop_err: | |
2669 if (r == M_PROPERTY_UNKNOWN) | |
2670 mp_msg(MSGT_CPLAYER, MSGL_WARN, | |
2671 "Unknown property: '%s'\n", cmd->args[0].v.s); | |
2672 else if (r <= 0) | |
2673 mp_msg(MSGT_CPLAYER, MSGL_WARN, | |
2674 "Failed to increment property '%s' by %f.\n", | |
2675 cmd->args[0].v.s, cmd->args[1].v.f); | |
2676 if (r <= 0) | |
2677 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ANS_ERROR=%s\n", property_error_string(r)); | |
2678 } | |
2679 break; | |
22478 | 2680 |
31077 | 2681 case MP_CMD_GET_PROPERTY:{ |
2682 char *tmp; | |
2683 int r = mp_property_do(cmd->args[0].v.s, M_PROPERTY_TO_STRING, | |
2684 &tmp, mpctx); | |
2685 if (r <= 0) { | |
2686 mp_msg(MSGT_CPLAYER, MSGL_WARN, | |
2687 "Failed to get value of property '%s'.\n", | |
2688 cmd->args[0].v.s); | |
2689 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ANS_ERROR=%s\n", property_error_string(r)); | |
2690 break; | |
2691 } | |
2692 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ANS_%s=%s\n", | |
2693 cmd->args[0].v.s, tmp); | |
2694 free(tmp); | |
2695 } | |
2696 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2697 |
31077 | 2698 case MP_CMD_EDL_MARK: |
2699 if (edl_fd) { | |
2700 float v = sh_video ? sh_video->pts : | |
2701 playing_audio_pts(sh_audio, mpctx->d_audio, | |
2702 mpctx->audio_out); | |
22478 | 2703 |
31077 | 2704 if (mpctx->begin_skip == MP_NOPTS_VALUE) { |
2705 mpctx->begin_skip = v; | |
2706 mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_EdloutStartSkip); | |
2707 } else { | |
2708 if (mpctx->begin_skip > v) | |
2709 mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_EdloutBadStop); | |
2710 else { | |
31957
49848f9a8f30
Add -edl-start-pts option to Adjust positions in EDL records according
reynaldo
parents:
31904
diff
changeset
|
2711 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
|
2712 fprintf(edl_fd, "%f %f %d\n", mpctx->begin_skip - pts, v - pts, 0); |
31077 | 2713 mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_EdloutEndSkip); |
2714 } | |
2715 mpctx->begin_skip = MP_NOPTS_VALUE; | |
2716 } | |
2717 } | |
2718 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2719 |
31077 | 2720 case MP_CMD_SWITCH_RATIO: |
28368
c616bf5d520b
command.c: Fix some commands crashing during audio-only playback
uau
parents:
28032
diff
changeset
|
2721 if (!sh_video) |
c616bf5d520b
command.c: Fix some commands crashing during audio-only playback
uau
parents:
28032
diff
changeset
|
2722 break; |
36316
139f2b064ef9
Don't subsequently calculate original_aspect from last movie_aspect.
ib
parents:
36295
diff
changeset
|
2723 if (cmd->nargs == 0) |
139f2b064ef9
Don't subsequently calculate original_aspect from last movie_aspect.
ib
parents:
36295
diff
changeset
|
2724 movie_aspect = -1.0; |
36317
56f576e4a49d
Be more consistent with movie aspect setting and check.
ib
parents:
36316
diff
changeset
|
2725 else if (cmd->args[0].v.f == -1 || cmd->args[0].v.f >= 0) |
56f576e4a49d
Be more consistent with movie aspect setting and check.
ib
parents:
36316
diff
changeset
|
2726 movie_aspect = cmd->args[0].v.f; |
31077 | 2727 else |
36317
56f576e4a49d
Be more consistent with movie aspect setting and check.
ib
parents:
36316
diff
changeset
|
2728 mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_InvalidSwitchRatio, |
56f576e4a49d
Be more consistent with movie aspect setting and check.
ib
parents:
36316
diff
changeset
|
2729 cmd->args[0].v.f); |
31077 | 2730 mpcodecs_config_vo(sh_video, sh_video->disp_w, sh_video->disp_h, 0); |
2731 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2732 |
31077 | 2733 case MP_CMD_SPEED_INCR:{ |
2734 float v = cmd->args[0].v.f; | |
2735 playback_speed += v; | |
32561
17bb5a38ae2e
build_afilter_chain is not safe to use directly, thus make it
reimar
parents:
32511
diff
changeset
|
2736 reinit_audio_chain(); |
31077 | 2737 set_osd_msg(OSD_MSG_SPEED, 1, osd_duration, MSGTR_OSDSpeed, |
2738 playback_speed); | |
2739 } break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2740 |
31077 | 2741 case MP_CMD_SPEED_MULT:{ |
2742 float v = cmd->args[0].v.f; | |
2743 playback_speed *= v; | |
32561
17bb5a38ae2e
build_afilter_chain is not safe to use directly, thus make it
reimar
parents:
32511
diff
changeset
|
2744 reinit_audio_chain(); |
31077 | 2745 set_osd_msg(OSD_MSG_SPEED, 1, osd_duration, MSGTR_OSDSpeed, |
2746 playback_speed); | |
2747 } break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2748 |
31077 | 2749 case MP_CMD_SPEED_SET:{ |
2750 float v = cmd->args[0].v.f; | |
2751 playback_speed = v; | |
32561
17bb5a38ae2e
build_afilter_chain is not safe to use directly, thus make it
reimar
parents:
32511
diff
changeset
|
2752 reinit_audio_chain(); |
31077 | 2753 set_osd_msg(OSD_MSG_SPEED, 1, osd_duration, MSGTR_OSDSpeed, |
2754 playback_speed); | |
2755 } break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2756 |
31077 | 2757 case MP_CMD_FRAME_STEP: |
2758 case MP_CMD_PAUSE: | |
2759 cmd->pausing = 1; | |
2760 brk_cmd = 1; | |
2761 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2762 |
31077 | 2763 case MP_CMD_FILE_FILTER: |
2764 file_filter = cmd->args[0].v.i; | |
2765 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2766 |
36361 | 2767 case MP_CMD_QUIT: { |
2768 int rc = cmd->nargs > 0 ? cmd->args[0].v.i : 0; | |
2769 mp_cmd_free(cmd); | |
2770 exit_player_with_rc(EXIT_QUIT, rc); | |
2771 } | |
31077 | 2772 case MP_CMD_PLAY_TREE_STEP:{ |
2773 int n = cmd->args[0].v.i == 0 ? 1 : cmd->args[0].v.i; | |
2774 int force = cmd->args[1].v.i; | |
22478 | 2775 |
27343 | 2776 #ifdef CONFIG_GUI |
31077 | 2777 if (use_gui) { |
2778 int i = 0; | |
2779 if (n > 0) | |
2780 for (i = 0; i < n; i++) | |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33725
diff
changeset
|
2781 gui(GUI_RUN_COMMAND, (void *)MP_CMD_PLAY_TREE_STEP); |
31077 | 2782 else |
2783 for (i = 0; i < -1 * n; i++) | |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33725
diff
changeset
|
2784 gui(GUI_RUN_COMMAND, (void *)-MP_CMD_PLAY_TREE_STEP); |
31077 | 2785 } else |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2786 #endif |
31077 | 2787 { |
2788 if (!force && mpctx->playtree_iter) { | |
2789 play_tree_iter_t *i = | |
2790 play_tree_iter_new_copy(mpctx->playtree_iter); | |
2791 if (play_tree_iter_step(i, n, 0) == | |
2792 PLAY_TREE_ITER_ENTRY) | |
2793 mpctx->eof = | |
2794 (n > 0) ? PT_NEXT_ENTRY : PT_PREV_ENTRY; | |
2795 play_tree_iter_free(i); | |
2796 } else | |
2797 mpctx->eof = (n > 0) ? PT_NEXT_ENTRY : PT_PREV_ENTRY; | |
2798 if (mpctx->eof) | |
2799 mpctx->play_tree_step = n; | |
2800 brk_cmd = 1; | |
2801 } | |
2802 } | |
2803 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2804 |
31077 | 2805 case MP_CMD_PLAY_TREE_UP_STEP:{ |
2806 int n = cmd->args[0].v.i > 0 ? 1 : -1; | |
2807 int force = cmd->args[1].v.i; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2808 |
31077 | 2809 if (!force && mpctx->playtree_iter) { |
2810 play_tree_iter_t *i = | |
2811 play_tree_iter_new_copy(mpctx->playtree_iter); | |
2812 if (play_tree_iter_up_step(i, n, 0) == PLAY_TREE_ITER_ENTRY) | |
2813 mpctx->eof = (n > 0) ? PT_UP_NEXT : PT_UP_PREV; | |
2814 play_tree_iter_free(i); | |
2815 } else | |
2816 mpctx->eof = (n > 0) ? PT_UP_NEXT : PT_UP_PREV; | |
2817 brk_cmd = 1; | |
2818 } | |
2819 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2820 |
31077 | 2821 case MP_CMD_PLAY_ALT_SRC_STEP: |
2822 if (mpctx->playtree_iter && mpctx->playtree_iter->num_files > 1) { | |
2823 int v = cmd->args[0].v.i; | |
2824 if (v > 0 | |
2825 && mpctx->playtree_iter->file < | |
2826 mpctx->playtree_iter->num_files) | |
2827 mpctx->eof = PT_NEXT_SRC; | |
2828 else if (v < 0 && mpctx->playtree_iter->file > 1) | |
2829 mpctx->eof = PT_PREV_SRC; | |
2830 } | |
2831 brk_cmd = 1; | |
2832 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2833 |
31077 | 2834 case MP_CMD_SUB_STEP: |
2835 if (sh_video) { | |
2836 int movement = cmd->args[0].v.i; | |
2837 step_sub(subdata, sh_video->pts, movement); | |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
2838 #ifdef CONFIG_ASS |
31077 | 2839 if (ass_track) |
2840 sub_delay += | |
2841 ass_step_sub(ass_track, | |
2842 (sh_video->pts + | |
2843 sub_delay) * 1000 + .5, movement) / 1000.; | |
22478 | 2844 #endif |
31077 | 2845 set_osd_msg(OSD_MSG_SUB_DELAY, 1, osd_duration, |
2846 MSGTR_OSDSubDelay, ROUND(sub_delay * 1000)); | |
2847 } | |
2848 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2849 |
31077 | 2850 case MP_CMD_SUB_LOG: |
2851 log_sub(); | |
2852 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2853 |
31077 | 2854 case MP_CMD_OSD:{ |
2855 int v = cmd->args[0].v.i; | |
2856 int max = (term_osd | |
2857 && !sh_video) ? MAX_TERM_OSD_LEVEL : MAX_OSD_LEVEL; | |
2858 if (osd_level > max) | |
2859 osd_level = max; | |
2860 if (v < 0) | |
2861 osd_level = (osd_level + 1) % (max + 1); | |
2862 else | |
2863 osd_level = v > max ? max : v; | |
2864 /* Show OSD state when disabled, but not when an explicit | |
2865 argument is given to the OSD command, i.e. in slave mode. */ | |
2866 if (v == -1 && osd_level <= 1) | |
2867 set_osd_msg(OSD_MSG_OSD_STATUS, 0, osd_duration, | |
2868 MSGTR_OSDosd, | |
2869 osd_level ? MSGTR_OSDenabled : | |
2870 MSGTR_OSDdisabled); | |
2871 else | |
2872 rm_osd_msg(OSD_MSG_OSD_STATUS); | |
2873 } | |
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_TEXT: |
2877 set_osd_msg(OSD_MSG_TEXT, cmd->args[2].v.i, | |
2878 (cmd->args[1].v.i < | |
2879 0 ? osd_duration : cmd->args[1].v.i), | |
2880 "%-.63s", cmd->args[0].v.s); | |
2881 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2882 |
31077 | 2883 case MP_CMD_OSD_SHOW_PROPERTY_TEXT:{ |
2884 char *txt = m_properties_expand_string(mp_properties, | |
2885 cmd->args[0].v.s, | |
2886 mpctx); | |
2887 /* if no argument supplied take default osd_duration, else <arg> ms. */ | |
2888 if (txt) { | |
2889 set_osd_msg(OSD_MSG_TEXT, cmd->args[2].v.i, | |
2890 (cmd->args[1].v.i < | |
2891 0 ? osd_duration : cmd->args[1].v.i), | |
2892 "%-.63s", txt); | |
2893 free(txt); | |
2894 } | |
2895 } | |
2896 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2897 |
31077 | 2898 case MP_CMD_LOADFILE:{ |
2899 play_tree_t *e = play_tree_new(); | |
2900 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
|
2901 |
31077 | 2902 if (cmd->args[1].v.i) // append |
2903 play_tree_append_entry(mpctx->playtree->child, e); | |
2904 else { | |
2905 // Go back to the starting point. | |
2906 while (play_tree_iter_up_step | |
2907 (mpctx->playtree_iter, 0, 1) != PLAY_TREE_ITER_END) | |
2908 /* NOP */ ; | |
2909 play_tree_free_list(mpctx->playtree->child, 1); | |
2910 play_tree_set_child(mpctx->playtree, e); | |
2911 pt_iter_goto_head(mpctx->playtree_iter); | |
2912 mpctx->eof = PT_NEXT_SRC; | |
2913 } | |
2914 brk_cmd = 1; | |
2915 } | |
2916 break; | |
22478 | 2917 |
31077 | 2918 case MP_CMD_LOADLIST:{ |
2919 play_tree_t *e = parse_playlist_file(cmd->args[0].v.s); | |
2920 if (!e) | |
2921 mp_msg(MSGT_CPLAYER, MSGL_ERR, | |
2922 MSGTR_PlaylistLoadUnable, cmd->args[0].v.s); | |
2923 else { | |
2924 if (cmd->args[1].v.i) // append | |
2925 play_tree_append_entry(mpctx->playtree->child, e); | |
2926 else { | |
2927 // Go back to the starting point. | |
2928 while (play_tree_iter_up_step | |
2929 (mpctx->playtree_iter, 0, 1) | |
2930 != PLAY_TREE_ITER_END) | |
2931 /* NOP */ ; | |
2932 play_tree_free_list(mpctx->playtree->child, 1); | |
2933 play_tree_set_child(mpctx->playtree, e); | |
2934 pt_iter_goto_head(mpctx->playtree_iter); | |
2935 mpctx->eof = PT_NEXT_SRC; | |
2936 } | |
2937 } | |
2938 brk_cmd = 1; | |
2939 } | |
2940 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2941 |
31077 | 2942 case MP_CMD_STOP: |
33482
7e41f14e7778
Fix segmentation fault when pressing U (stop playing) in GUI.
ib
parents:
33251
diff
changeset
|
2943 #ifdef CONFIG_GUI |
7e41f14e7778
Fix segmentation fault when pressing U (stop playing) in GUI.
ib
parents:
33251
diff
changeset
|
2944 // playtree_iter isn't used by the GUI |
7e41f14e7778
Fix segmentation fault when pressing U (stop playing) in GUI.
ib
parents:
33251
diff
changeset
|
2945 if (use_gui) |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33725
diff
changeset
|
2946 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
|
2947 else |
7e41f14e7778
Fix segmentation fault when pressing U (stop playing) in GUI.
ib
parents:
33251
diff
changeset
|
2948 #endif |
31077 | 2949 // Go back to the starting point. |
2950 while (play_tree_iter_up_step | |
2951 (mpctx->playtree_iter, 0, 1) != PLAY_TREE_ITER_END) | |
2952 /* NOP */ ; | |
2953 mpctx->eof = PT_STOP; | |
2954 brk_cmd = 1; | |
2955 break; | |
26877 | 2956 |
31077 | 2957 case MP_CMD_OSD_SHOW_PROGRESSION:{ |
2958 int len = demuxer_get_time_length(mpctx->demuxer); | |
2959 int pts = demuxer_get_current_time(mpctx->demuxer); | |
2960 set_osd_bar(0, "Position", 0, 100, demuxer_get_percent_pos(mpctx->demuxer)); | |
2961 set_osd_msg(OSD_MSG_TEXT, 1, osd_duration, | |
2962 "%c %02d:%02d:%02d / %02d:%02d:%02d", | |
2963 mpctx->osd_function, pts/3600, (pts/60)%60, pts%60, | |
2964 len/3600, (len/60)%60, len%60); | |
2965 } | |
2966 break; | |
30986
2186c040f9e0
Add osd_show_progression: Show progress bar and elapsed/total time.
cehoyos
parents:
30901
diff
changeset
|
2967 |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
2968 #ifdef CONFIG_RADIO |
31077 | 2969 case MP_CMD_RADIO_STEP_CHANNEL: |
35206
63274beacefb
Make checks for STREAMTYPE simpler and more consistent.
reimar
parents:
35205
diff
changeset
|
2970 if (IS_STREAMTYPE(RADIO)) { |
31077 | 2971 int v = cmd->args[0].v.i; |
2972 if (v > 0) | |
2973 radio_step_channel(mpctx->demuxer->stream, | |
2974 RADIO_CHANNEL_HIGHER); | |
2975 else | |
2976 radio_step_channel(mpctx->demuxer->stream, | |
2977 RADIO_CHANNEL_LOWER); | |
2978 if (radio_get_channel_name(mpctx->demuxer->stream)) { | |
2979 set_osd_msg(OSD_MSG_RADIO_CHANNEL, 1, osd_duration, | |
2980 MSGTR_OSDChannel, | |
2981 radio_get_channel_name(mpctx->demuxer->stream)); | |
2982 } | |
2983 } | |
2984 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2985 |
31077 | 2986 case MP_CMD_RADIO_SET_CHANNEL: |
35206
63274beacefb
Make checks for STREAMTYPE simpler and more consistent.
reimar
parents:
35205
diff
changeset
|
2987 if (IS_STREAMTYPE(RADIO)) { |
31077 | 2988 radio_set_channel(mpctx->demuxer->stream, cmd->args[0].v.s); |
2989 if (radio_get_channel_name(mpctx->demuxer->stream)) { | |
2990 set_osd_msg(OSD_MSG_RADIO_CHANNEL, 1, osd_duration, | |
2991 MSGTR_OSDChannel, | |
2992 radio_get_channel_name(mpctx->demuxer->stream)); | |
2993 } | |
2994 } | |
2995 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
2996 |
31077 | 2997 case MP_CMD_RADIO_SET_FREQ: |
35206
63274beacefb
Make checks for STREAMTYPE simpler and more consistent.
reimar
parents:
35205
diff
changeset
|
2998 if (IS_STREAMTYPE(RADIO)) |
31077 | 2999 radio_set_freq(mpctx->demuxer->stream, cmd->args[0].v.f); |
3000 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3001 |
31077 | 3002 case MP_CMD_RADIO_STEP_FREQ: |
35206
63274beacefb
Make checks for STREAMTYPE simpler and more consistent.
reimar
parents:
35205
diff
changeset
|
3003 if (IS_STREAMTYPE(RADIO)) |
31077 | 3004 radio_step_freq(mpctx->demuxer->stream, cmd->args[0].v.f); |
3005 break; | |
22478 | 3006 #endif |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3007 |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
3008 #ifdef CONFIG_TV |
31077 | 3009 case MP_CMD_TV_START_SCAN: |
3010 if (mpctx->file_format == DEMUXER_TYPE_TV) | |
3011 tv_start_scan((tvi_handle_t *) (mpctx->demuxer->priv),1); | |
3012 break; | |
3013 case MP_CMD_TV_SET_FREQ: | |
3014 if (mpctx->file_format == DEMUXER_TYPE_TV) | |
3015 tv_set_freq((tvi_handle_t *) (mpctx->demuxer->priv), | |
3016 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
|
3017 #ifdef CONFIG_PVR |
35206
63274beacefb
Make checks for STREAMTYPE simpler and more consistent.
reimar
parents:
35205
diff
changeset
|
3018 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
|
3019 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
|
3020 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
|
3021 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
|
3022 pvr_get_current_stationname (mpctx->stream)); |
23259 | 3023 } |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27345
diff
changeset
|
3024 #endif /* CONFIG_PVR */ |
31077 | 3025 break; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3026 |
31077 | 3027 case MP_CMD_TV_STEP_FREQ: |
3028 if (mpctx->file_format == DEMUXER_TYPE_TV) | |
3029 tv_step_freq((tvi_handle_t *) (mpctx->demuxer->priv), | |
3030 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
|
3031 #ifdef CONFIG_PVR |
35206
63274beacefb
Make checks for STREAMTYPE simpler and more consistent.
reimar
parents:
35205
diff
changeset
|
3032 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
|
3033 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
|
3034 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
|
3035 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
|
3036 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
|
3037 } |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27345
diff
changeset
|
3038 #endif /* CONFIG_PVR */ |
31077 | 3039 break; |
22667 | 3040 |
31077 | 3041 case MP_CMD_TV_SET_NORM: |
3042 if (mpctx->file_format == DEMUXER_TYPE_TV) | |
3043 tv_set_norm((tvi_handle_t *) (mpctx->demuxer->priv), | |
3044 cmd->args[0].v.s); | |
3045 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3046 |
31077 | 3047 case MP_CMD_TV_STEP_CHANNEL:{ |
3048 if (mpctx->file_format == DEMUXER_TYPE_TV) { | |
3049 int v = cmd->args[0].v.i; | |
3050 if (v > 0) { | |
3051 tv_step_channel((tvi_handle_t *) (mpctx-> | |
3052 demuxer->priv), | |
3053 TV_CHANNEL_HIGHER); | |
3054 } else { | |
3055 tv_step_channel((tvi_handle_t *) (mpctx-> | |
3056 demuxer->priv), | |
3057 TV_CHANNEL_LOWER); | |
3058 } | |
3059 if (tv_channel_list) { | |
3060 set_osd_msg(OSD_MSG_TV_CHANNEL, 1, osd_duration, | |
3061 MSGTR_OSDChannel, tv_channel_current->name); | |
3062 //vo_osd_changed(OSDTYPE_SUBTITLE); | |
3063 } | |
3064 } | |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27345
diff
changeset
|
3065 #ifdef CONFIG_PVR |
35206
63274beacefb
Make checks for STREAMTYPE simpler and more consistent.
reimar
parents:
35205
diff
changeset
|
3066 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
|
3067 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
|
3068 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
|
3069 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
|
3070 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
|
3071 } |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27345
diff
changeset
|
3072 #endif /* CONFIG_PVR */ |
31077 | 3073 } |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27345
diff
changeset
|
3074 #ifdef CONFIG_DVBIN |
35206
63274beacefb
Make checks for STREAMTYPE simpler and more consistent.
reimar
parents:
35205
diff
changeset
|
3075 if (IS_STREAMTYPE(DVB)) { |
31077 | 3076 int dir; |
3077 int v = cmd->args[0].v.i; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3078 |
31077 | 3079 mpctx->last_dvb_step = v; |
3080 if (v > 0) | |
3081 dir = DVB_CHANNEL_HIGHER; | |
3082 else | |
3083 dir = DVB_CHANNEL_LOWER; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3084 |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3085 |
31077 | 3086 if (dvb_step_channel(mpctx->stream, dir)) |
3087 mpctx->eof = mpctx->dvbin_reopen = 1; | |
3088 } | |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27345
diff
changeset
|
3089 #endif /* CONFIG_DVBIN */ |
31077 | 3090 break; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3091 |
31077 | 3092 case MP_CMD_TV_SET_CHANNEL: |
3093 if (mpctx->file_format == DEMUXER_TYPE_TV) { | |
3094 tv_set_channel((tvi_handle_t *) (mpctx->demuxer->priv), | |
3095 cmd->args[0].v.s); | |
3096 if (tv_channel_list) { | |
3097 set_osd_msg(OSD_MSG_TV_CHANNEL, 1, osd_duration, | |
3098 MSGTR_OSDChannel, tv_channel_current->name); | |
3099 //vo_osd_changed(OSDTYPE_SUBTITLE); | |
3100 } | |
3101 } | |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27345
diff
changeset
|
3102 #ifdef CONFIG_PVR |
35206
63274beacefb
Make checks for STREAMTYPE simpler and more consistent.
reimar
parents:
35205
diff
changeset
|
3103 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
|
3104 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
|
3105 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
|
3106 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
|
3107 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
|
3108 } |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27345
diff
changeset
|
3109 #endif /* CONFIG_PVR */ |
31077 | 3110 break; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3111 |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27345
diff
changeset
|
3112 #ifdef CONFIG_DVBIN |
31077 | 3113 case MP_CMD_DVB_SET_CHANNEL: |
35206
63274beacefb
Make checks for STREAMTYPE simpler and more consistent.
reimar
parents:
35205
diff
changeset
|
3114 if (IS_STREAMTYPE(DVB)) { |
31077 | 3115 mpctx->last_dvb_step = 1; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3116 |
31077 | 3117 if (dvb_set_channel |
3118 (mpctx->stream, cmd->args[1].v.i, cmd->args[0].v.i)) | |
3119 mpctx->eof = mpctx->dvbin_reopen = 1; | |
3120 } | |
3121 break; | |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27345
diff
changeset
|
3122 #endif /* CONFIG_DVBIN */ |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3123 |
31077 | 3124 case MP_CMD_TV_LAST_CHANNEL: |
3125 if (mpctx->file_format == DEMUXER_TYPE_TV) { | |
3126 tv_last_channel((tvi_handle_t *) (mpctx->demuxer->priv)); | |
3127 if (tv_channel_list) { | |
3128 set_osd_msg(OSD_MSG_TV_CHANNEL, 1, osd_duration, | |
3129 MSGTR_OSDChannel, tv_channel_current->name); | |
3130 //vo_osd_changed(OSDTYPE_SUBTITLE); | |
3131 } | |
3132 } | |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27345
diff
changeset
|
3133 #ifdef CONFIG_PVR |
35206
63274beacefb
Make checks for STREAMTYPE simpler and more consistent.
reimar
parents:
35205
diff
changeset
|
3134 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
|
3135 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
|
3136 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
|
3137 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
|
3138 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
|
3139 } |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27345
diff
changeset
|
3140 #endif /* CONFIG_PVR */ |
31077 | 3141 break; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3142 |
31077 | 3143 case MP_CMD_TV_STEP_NORM: |
3144 if (mpctx->file_format == DEMUXER_TYPE_TV) | |
3145 tv_step_norm((tvi_handle_t *) (mpctx->demuxer->priv)); | |
3146 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3147 |
31077 | 3148 case MP_CMD_TV_STEP_CHANNEL_LIST: |
3149 if (mpctx->file_format == DEMUXER_TYPE_TV) | |
3150 tv_step_chanlist((tvi_handle_t *) (mpctx->demuxer->priv)); | |
3151 break; | |
29806 | 3152 #endif /* CONFIG_TV */ |
31077 | 3153 case MP_CMD_TV_TELETEXT_ADD_DEC: |
3154 if (mpctx->demuxer->teletext) | |
3155 teletext_control(mpctx->demuxer->teletext,TV_VBI_CONTROL_ADD_DEC, | |
3156 &(cmd->args[0].v.s)); | |
3157 break; | |
3158 case MP_CMD_TV_TELETEXT_GO_LINK: | |
3159 if (mpctx->demuxer->teletext) | |
3160 teletext_control(mpctx->demuxer->teletext,TV_VBI_CONTROL_GO_LINK, | |
3161 &(cmd->args[0].v.i)); | |
3162 break; | |
32406 | 3163 |
32392 | 3164 case MP_CMD_OVERLAY_ADD: |
3165 overlay_add(cmd->args[0].v.s, cmd->args[1].v.i, | |
3166 cmd->args[2].v.i, cmd->args[3].v.i, cmd->args[4].v.i); | |
3167 break; | |
3168 case MP_CMD_OVERLAY_REMOVE: | |
3169 overlay_remove(cmd->args[0].v.i); | |
3170 break; | |
22478 | 3171 |
31077 | 3172 case MP_CMD_SUB_LOAD: |
3173 if (sh_video) { | |
3174 int n = mpctx->set_of_sub_size; | |
3175 add_subtitles(cmd->args[0].v.s, sh_video->fps, 0); | |
3176 if (n != mpctx->set_of_sub_size) { | |
31612
7fc1f051a19f
Change global subtitle numbering scheme so that demuxers can "asynchronously"
reimar
parents:
31312
diff
changeset
|
3177 mpctx->sub_counts[SUB_SOURCE_SUBS]++; |
31077 | 3178 ++mpctx->global_sub_size; |
3179 } | |
3180 } | |
3181 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3182 |
31077 | 3183 case MP_CMD_SUB_REMOVE: |
3184 if (sh_video) { | |
3185 int v = cmd->args[0].v.i; | |
3186 if (v < 0) { | |
3187 remove_subtitle_range(mpctx, 0, mpctx->set_of_sub_size); | |
3188 } else if (v < mpctx->set_of_sub_size) { | |
3189 remove_subtitle_range(mpctx, v, 1); | |
3190 } | |
3191 } | |
3192 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3193 |
31077 | 3194 case MP_CMD_GET_SUB_VISIBILITY: |
3195 if (sh_video) { | |
3196 mp_msg(MSGT_GLOBAL, MSGL_INFO, | |
3197 "ANS_SUB_VISIBILITY=%d\n", sub_visibility); | |
3198 } | |
3199 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3200 |
31077 | 3201 case MP_CMD_SCREENSHOT: |
3202 if (vo_config_count) { | |
3203 mp_msg(MSGT_CPLAYER, MSGL_INFO, "sending VFCTRL_SCREENSHOT!\n"); | |
3204 if (CONTROL_OK != | |
3205 ((vf_instance_t *) sh_video->vfilter)-> | |
3206 control(sh_video->vfilter, VFCTRL_SCREENSHOT, | |
3207 &cmd->args[0].v.i)) | |
3208 mp_msg(MSGT_CPLAYER, MSGL_INFO, "failed (forgot -vf screenshot?)\n"); | |
3209 } | |
3210 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3211 |
31077 | 3212 case MP_CMD_VF_CHANGE_RECTANGLE: |
28368
c616bf5d520b
command.c: Fix some commands crashing during audio-only playback
uau
parents:
28032
diff
changeset
|
3213 if (!sh_video) |
c616bf5d520b
command.c: Fix some commands crashing during audio-only playback
uau
parents:
28032
diff
changeset
|
3214 break; |
31077 | 3215 set_rectangle(sh_video, cmd->args[0].v.i, cmd->args[1].v.i); |
3216 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3217 |
31077 | 3218 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
|
3219 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ANS_LENGTH=%.2f\n", |
31077 | 3220 demuxer_get_time_length(mpctx->demuxer)); |
3221 } | |
3222 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3223 |
31077 | 3224 case MP_CMD_GET_FILENAME:{ |
3225 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ANS_FILENAME='%s'\n", | |
3226 get_metadata(META_NAME)); | |
3227 } | |
3228 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3229 |
31077 | 3230 case MP_CMD_GET_VIDEO_CODEC:{ |
3231 char *inf = get_metadata(META_VIDEO_CODEC); | |
3232 if (!inf) | |
3233 inf = strdup(""); | |
3234 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ANS_VIDEO_CODEC='%s'\n", inf); | |
3235 free(inf); | |
3236 } | |
3237 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3238 |
31077 | 3239 case MP_CMD_GET_VIDEO_BITRATE:{ |
3240 char *inf = get_metadata(META_VIDEO_BITRATE); | |
3241 if (!inf) | |
3242 inf = strdup(""); | |
3243 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ANS_VIDEO_BITRATE='%s'\n", inf); | |
3244 free(inf); | |
3245 } | |
3246 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3247 |
31077 | 3248 case MP_CMD_GET_VIDEO_RESOLUTION:{ |
3249 char *inf = get_metadata(META_VIDEO_RESOLUTION); | |
3250 if (!inf) | |
3251 inf = strdup(""); | |
3252 mp_msg(MSGT_GLOBAL, MSGL_INFO, | |
3253 "ANS_VIDEO_RESOLUTION='%s'\n", inf); | |
3254 free(inf); | |
3255 } | |
3256 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3257 |
31077 | 3258 case MP_CMD_GET_AUDIO_CODEC:{ |
3259 char *inf = get_metadata(META_AUDIO_CODEC); | |
3260 if (!inf) | |
3261 inf = strdup(""); | |
3262 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ANS_AUDIO_CODEC='%s'\n", inf); | |
3263 free(inf); | |
3264 } | |
3265 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3266 |
31077 | 3267 case MP_CMD_GET_AUDIO_BITRATE:{ |
3268 char *inf = get_metadata(META_AUDIO_BITRATE); | |
3269 if (!inf) | |
3270 inf = strdup(""); | |
3271 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ANS_AUDIO_BITRATE='%s'\n", inf); | |
3272 free(inf); | |
3273 } | |
3274 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3275 |
31077 | 3276 case MP_CMD_GET_AUDIO_SAMPLES:{ |
3277 char *inf = get_metadata(META_AUDIO_SAMPLES); | |
3278 if (!inf) | |
3279 inf = strdup(""); | |
3280 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ANS_AUDIO_SAMPLES='%s'\n", inf); | |
3281 free(inf); | |
3282 } | |
3283 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3284 |
31077 | 3285 case MP_CMD_GET_META_TITLE:{ |
3286 char *inf = get_metadata(META_INFO_TITLE); | |
3287 if (!inf) | |
3288 inf = strdup(""); | |
3289 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ANS_META_TITLE='%s'\n", inf); | |
3290 free(inf); | |
3291 } | |
3292 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3293 |
31077 | 3294 case MP_CMD_GET_META_ARTIST:{ |
3295 char *inf = get_metadata(META_INFO_ARTIST); | |
3296 if (!inf) | |
3297 inf = strdup(""); | |
3298 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ANS_META_ARTIST='%s'\n", inf); | |
3299 free(inf); | |
3300 } | |
3301 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3302 |
31077 | 3303 case MP_CMD_GET_META_ALBUM:{ |
3304 char *inf = get_metadata(META_INFO_ALBUM); | |
3305 if (!inf) | |
3306 inf = strdup(""); | |
3307 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ANS_META_ALBUM='%s'\n", inf); | |
3308 free(inf); | |
3309 } | |
3310 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3311 |
31077 | 3312 case MP_CMD_GET_META_YEAR:{ |
3313 char *inf = get_metadata(META_INFO_YEAR); | |
3314 if (!inf) | |
3315 inf = strdup(""); | |
3316 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ANS_META_YEAR='%s'\n", inf); | |
3317 free(inf); | |
3318 } | |
3319 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3320 |
31077 | 3321 case MP_CMD_GET_META_COMMENT:{ |
3322 char *inf = get_metadata(META_INFO_COMMENT); | |
3323 if (!inf) | |
3324 inf = strdup(""); | |
3325 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ANS_META_COMMENT='%s'\n", inf); | |
3326 free(inf); | |
3327 } | |
3328 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3329 |
31077 | 3330 case MP_CMD_GET_META_TRACK:{ |
3331 char *inf = get_metadata(META_INFO_TRACK); | |
3332 if (!inf) | |
3333 inf = strdup(""); | |
3334 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ANS_META_TRACK='%s'\n", inf); | |
3335 free(inf); | |
3336 } | |
3337 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3338 |
31077 | 3339 case MP_CMD_GET_META_GENRE:{ |
3340 char *inf = get_metadata(META_INFO_GENRE); | |
3341 if (!inf) | |
3342 inf = strdup(""); | |
3343 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ANS_META_GENRE='%s'\n", inf); | |
3344 free(inf); | |
3345 } | |
3346 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3347 |
31077 | 3348 case MP_CMD_GET_VO_FULLSCREEN: |
3349 if (mpctx->video_out && vo_config_count) | |
3350 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ANS_VO_FULLSCREEN=%d\n", vo_fs); | |
3351 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3352 |
31077 | 3353 case MP_CMD_GET_PERCENT_POS: |
3354 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ANS_PERCENT_POSITION=%d\n", | |
3355 demuxer_get_percent_pos(mpctx->demuxer)); | |
3356 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3357 |
31077 | 3358 case MP_CMD_GET_TIME_POS:{ |
3359 float pos = 0; | |
3360 if (sh_video) | |
3361 pos = sh_video->pts; | |
3362 else if (sh_audio && mpctx->audio_out) | |
3363 pos = | |
3364 playing_audio_pts(sh_audio, mpctx->d_audio, | |
3365 mpctx->audio_out); | |
3366 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ANS_TIME_POSITION=%.1f\n", pos); | |
3367 } | |
3368 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3369 |
31077 | 3370 case MP_CMD_RUN: |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3371 #ifndef __MINGW32__ |
31077 | 3372 if (!fork()) { |
34987 | 3373 char *exp_cmd = property_expand_string(mpctx, cmd->args[0].v.s); |
3374 if (exp_cmd) { | |
3375 execl("/bin/sh", "sh", "-c", exp_cmd, NULL); | |
3376 free(exp_cmd); | |
3377 } | |
31077 | 3378 exit(0); |
3379 } | |
22478 | 3380 #endif |
31077 | 3381 break; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3382 |
31077 | 3383 case MP_CMD_KEYDOWN_EVENTS: |
3384 mplayer_put_key(cmd->args[0].v.i); | |
3385 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3386 |
31077 | 3387 case MP_CMD_SET_MOUSE_POS:{ |
3388 int pointer_x, pointer_y; | |
3389 double dx, dy; | |
3390 pointer_x = cmd->args[0].v.i; | |
3391 pointer_y = cmd->args[1].v.i; | |
3392 rescale_input_coordinates(pointer_x, pointer_y, &dx, &dy); | |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
3393 #ifdef CONFIG_DVDNAV |
35206
63274beacefb
Make checks for STREAMTYPE simpler and more consistent.
reimar
parents:
35205
diff
changeset
|
3394 if (IS_STREAMTYPE(DVDNAV) |
31077 | 3395 && dx > 0.0 && dy > 0.0) { |
3396 int button = -1; | |
3397 pointer_x = (int) (dx * (double) sh_video->disp_w); | |
3398 pointer_y = (int) (dy * (double) sh_video->disp_h); | |
3399 mp_dvdnav_update_mouse_pos(mpctx->stream, | |
3400 pointer_x, pointer_y, &button); | |
3401 if (osd_level > 1 && button > 0) | |
3402 set_osd_msg(OSD_MSG_TEXT, 1, osd_duration, | |
3403 "Selected button number %d", button); | |
3404 } | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3405 #endif |
27345
b597fd2924b4
Rename preprocessor directive HAVE_MENU --> CONFIG_MENU.
diego
parents:
27343
diff
changeset
|
3406 #ifdef CONFIG_MENU |
31077 | 3407 if (use_menu && dx >= 0.0 && dy >= 0.0) |
3408 menu_update_mouse_pos(dx, dy); | |
25461 | 3409 #endif |
31077 | 3410 } |
3411 break; | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3412 |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
27069
diff
changeset
|
3413 #ifdef CONFIG_DVDNAV |
31077 | 3414 case MP_CMD_DVDNAV:{ |
3415 int button = -1; | |
3416 int i; | |
3417 mp_command_type command = 0; | |
35206
63274beacefb
Make checks for STREAMTYPE simpler and more consistent.
reimar
parents:
35205
diff
changeset
|
3418 if (!IS_STREAMTYPE(DVDNAV)) |
31077 | 3419 break; |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3420 |
31077 | 3421 for (i = 0; mp_dvdnav_bindings[i].name; i++) |
3422 if (cmd->args[0].v.s && | |
3423 !strcasecmp (cmd->args[0].v.s, | |
3424 mp_dvdnav_bindings[i].name)) | |
3425 command = mp_dvdnav_bindings[i].cmd; | |
27068 | 3426 |
31077 | 3427 mp_dvdnav_handle_input(mpctx->stream,command,&button); |
3428 if (osd_level > 1 && button > 0) | |
3429 set_osd_msg(OSD_MSG_TEXT, 1, osd_duration, | |
3430 "Selected button number %d", button); | |
3431 } | |
3432 break; | |
25817 | 3433 |
31077 | 3434 case MP_CMD_SWITCH_TITLE: |
35206
63274beacefb
Make checks for STREAMTYPE simpler and more consistent.
reimar
parents:
35205
diff
changeset
|
3435 if (IS_STREAMTYPE(DVDNAV)) |
31077 | 3436 mp_dvdnav_switch_title(mpctx->stream, cmd->args[0].v.i); |
3437 break; | |
25817 | 3438 |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3439 #endif |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3440 |
30988
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3441 case MP_CMD_AF_SWITCH: |
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 { |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3444 af_uninit(mpctx->mixer.afilter); |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3445 af_init(mpctx->mixer.afilter); |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3446 } |
36641 | 3447 /* Fallthrough to add filters like for af_add */ |
30988
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3448 case MP_CMD_AF_ADD: |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3449 case MP_CMD_AF_DEL: |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3450 if (!sh_audio) |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3451 break; |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3452 { |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3453 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
|
3454 char* af_commands = af_args; |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3455 char* af_command; |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3456 af_instance_t* af; |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3457 while ((af_command = strsep(&af_commands, ",")) != NULL) |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3458 { |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3459 if (cmd->id == MP_CMD_AF_DEL) |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3460 { |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3461 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
|
3462 if (af != NULL) |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3463 af_remove(mpctx->mixer.afilter, af); |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3464 } |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3465 else |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3466 af_add(mpctx->mixer.afilter, af_command); |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3467 } |
32561
17bb5a38ae2e
build_afilter_chain is not safe to use directly, thus make it
reimar
parents:
32511
diff
changeset
|
3468 reinit_audio_chain(); |
30988
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3469 free(af_args); |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3470 } |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3471 break; |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3472 case MP_CMD_AF_CLR: |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3473 if (!sh_audio) |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3474 break; |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3475 af_uninit(mpctx->mixer.afilter); |
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3476 af_init(mpctx->mixer.afilter); |
32561
17bb5a38ae2e
build_afilter_chain is not safe to use directly, thus make it
reimar
parents:
32511
diff
changeset
|
3477 reinit_audio_chain(); |
30988
8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
cehoyos
parents:
30986
diff
changeset
|
3478 break; |
32419
8f35fc25523f
Add experimental af_cmdline slave command to allow changing filter options at runtime.
reimar
parents:
32406
diff
changeset
|
3479 case MP_CMD_AF_CMDLINE: |
8f35fc25523f
Add experimental af_cmdline slave command to allow changing filter options at runtime.
reimar
parents:
32406
diff
changeset
|
3480 if (sh_audio) { |
8f35fc25523f
Add experimental af_cmdline slave command to allow changing filter options at runtime.
reimar
parents:
32406
diff
changeset
|
3481 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
|
3482 if (!af) { |
8f35fc25523f
Add experimental af_cmdline slave command to allow changing filter options at runtime.
reimar
parents:
32406
diff
changeset
|
3483 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
|
3484 "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
|
3485 break; |
8f35fc25523f
Add experimental af_cmdline slave command to allow changing filter options at runtime.
reimar
parents:
32406
diff
changeset
|
3486 } |
8f35fc25523f
Add experimental af_cmdline slave command to allow changing filter options at runtime.
reimar
parents:
32406
diff
changeset
|
3487 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
|
3488 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
|
3489 } |
8f35fc25523f
Add experimental af_cmdline slave command to allow changing filter options at runtime.
reimar
parents:
32406
diff
changeset
|
3490 break; |
8f35fc25523f
Add experimental af_cmdline slave command to allow changing filter options at runtime.
reimar
parents:
32406
diff
changeset
|
3491 |
31077 | 3492 default: |
34339 | 3493 #ifdef CONFIG_GUI |
3494 if (use_gui && cmd->id == MP_CMD_GUI) | |
3495 gui(GUI_RUN_MESSAGE, cmd->args[0].v.s); | |
3496 else | |
3497 #endif | |
31077 | 3498 mp_msg(MSGT_CPLAYER, MSGL_V, |
3499 "Received unknown cmd %s\n", cmd->name); | |
3500 } | |
22479
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3501 |
a99ddf2ece25
Change to match current command.c (same functionality).
uau
parents:
22478
diff
changeset
|
3502 switch (cmd->pausing) { |
31077 | 3503 case 1: // "pausing" |
3504 mpctx->osd_function = OSD_PAUSE; | |
3505 break; | |
3506 case 3: // "pausing_toggle" | |
3507 mpctx->was_paused = !mpctx->was_paused; | |
3508 if (mpctx->was_paused) | |
3509 mpctx->osd_function = OSD_PAUSE; | |
3510 else if (mpctx->osd_function == OSD_PAUSE) | |
3511 mpctx->osd_function = OSD_PLAY; | |
3512 break; | |
3513 case 2: // "pausing_keep" | |
3514 if (mpctx->was_paused) | |
3515 mpctx->osd_function = OSD_PAUSE; | |
22478 | 3516 } |
3517 return brk_cmd; | |
3518 } |