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