annotate libmenu/vf_menu.c @ 28992:947ef23ba798

Test if create_vdp_decoder() might succeed by calling it from config() with a small value for max_reference_frames. This does not make automatic recovery by using software decoder possible, but lets MPlayer fail more graciously on - actually existing - buggy hardware that does not support certain H264 widths when using hardware accelerated decoding (784, 864, 944, 1024, 1808, 1888 pixels on NVIDIA G98) and if the user tries to hardware-decode more samples at the same time than supported. Might break playback of H264 Intra-Only samples on hardware with very little video memory.
author cehoyos
date Sat, 21 Mar 2009 20:11:05 +0000
parents df67d03dde3b
children 290420c32921
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
28113
f8b6c7045cf8 Add standard GPL headers.
diego
parents: 27746
diff changeset
1 /*
f8b6c7045cf8 Add standard GPL headers.
diego
parents: 27746
diff changeset
2 * This file is part of MPlayer.
f8b6c7045cf8 Add standard GPL headers.
diego
parents: 27746
diff changeset
3 *
f8b6c7045cf8 Add standard GPL headers.
diego
parents: 27746
diff changeset
4 * MPlayer is free software; you can redistribute it and/or modify
f8b6c7045cf8 Add standard GPL headers.
diego
parents: 27746
diff changeset
5 * it under the terms of the GNU General Public License as published by
f8b6c7045cf8 Add standard GPL headers.
diego
parents: 27746
diff changeset
6 * the Free Software Foundation; either version 2 of the License, or
f8b6c7045cf8 Add standard GPL headers.
diego
parents: 27746
diff changeset
7 * (at your option) any later version.
f8b6c7045cf8 Add standard GPL headers.
diego
parents: 27746
diff changeset
8 *
f8b6c7045cf8 Add standard GPL headers.
diego
parents: 27746
diff changeset
9 * MPlayer is distributed in the hope that it will be useful,
f8b6c7045cf8 Add standard GPL headers.
diego
parents: 27746
diff changeset
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
f8b6c7045cf8 Add standard GPL headers.
diego
parents: 27746
diff changeset
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
f8b6c7045cf8 Add standard GPL headers.
diego
parents: 27746
diff changeset
12 * GNU General Public License for more details.
f8b6c7045cf8 Add standard GPL headers.
diego
parents: 27746
diff changeset
13 *
f8b6c7045cf8 Add standard GPL headers.
diego
parents: 27746
diff changeset
14 * You should have received a copy of the GNU General Public License along
f8b6c7045cf8 Add standard GPL headers.
diego
parents: 27746
diff changeset
15 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
f8b6c7045cf8 Add standard GPL headers.
diego
parents: 27746
diff changeset
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
f8b6c7045cf8 Add standard GPL headers.
diego
parents: 27746
diff changeset
17 */
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
18
16862
931bdbc37ee0 Unify include paths, -I.. is in CFLAGS.
diego
parents: 13528
diff changeset
19 #include "config.h"
17994
6927fabaef92 Part1 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu
reynaldo
parents: 17945
diff changeset
20 #include "mp_msg.h"
6927fabaef92 Part1 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu
reynaldo
parents: 17945
diff changeset
21 #include "help_mp.h"
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
22
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
23 #include <stdio.h>
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
24 #include <stdlib.h>
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
25 #include <string.h>
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
26
28594
df67d03dde3b Convert HAVE_MALLOC_H into a 0/1 definition, fixes the warning:
diego
parents: 28113
diff changeset
27 #if HAVE_MALLOC_H
8623
440301fef3fe Added/reordered #includes to silence warnings about "implicit declaration".
rathann
parents: 8251
diff changeset
28 #include <malloc.h>
440301fef3fe Added/reordered #includes to silence warnings about "implicit declaration".
rathann
parents: 8251
diff changeset
29 #endif
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
30
23338
2a66d95355f0 add new -subfont option, that allows having a different font for OSD (controls and menu) and subtitles
ben
parents: 22284
diff changeset
31 #include "mplayer.h"
16862
931bdbc37ee0 Unify include paths, -I.. is in CFLAGS.
diego
parents: 13528
diff changeset
32 #include "mp_msg.h"
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
33
16862
931bdbc37ee0 Unify include paths, -I.. is in CFLAGS.
diego
parents: 13528
diff changeset
34 #include "libmpcodecs/img_format.h"
931bdbc37ee0 Unify include paths, -I.. is in CFLAGS.
diego
parents: 13528
diff changeset
35 #include "libmpcodecs/mp_image.h"
931bdbc37ee0 Unify include paths, -I.. is in CFLAGS.
diego
parents: 13528
diff changeset
36 #include "libmpcodecs/vf.h"
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
37
16862
931bdbc37ee0 Unify include paths, -I.. is in CFLAGS.
diego
parents: 13528
diff changeset
38 #include "libvo/fastmemcpy.h"
931bdbc37ee0 Unify include paths, -I.. is in CFLAGS.
diego
parents: 13528
diff changeset
39 #include "libvo/video_out.h"
931bdbc37ee0 Unify include paths, -I.. is in CFLAGS.
diego
parents: 13528
diff changeset
40 #include "libvo/font_load.h"
25026
afead6ecb8ba Remove the pause filter and the cmd queue hack, to know the mplayer going to
ulion
parents: 24960
diff changeset
41 #include "libvo/sub.h"
16862
931bdbc37ee0 Unify include paths, -I.. is in CFLAGS.
diego
parents: 13528
diff changeset
42 #include "input/input.h"
931bdbc37ee0 Unify include paths, -I.. is in CFLAGS.
diego
parents: 13528
diff changeset
43 #include "m_struct.h"
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
44 #include "menu.h"
22284
83366c8e1928 Fix menu to work with mpctx
uau
parents: 21925
diff changeset
45 #include "access_mpcontext.h"
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
46
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
47
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
48 static struct vf_priv_s* st_priv = NULL;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
49
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
50 static mp_image_t* pause_mpi = NULL;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
51 static int go2pause = 0;
13344
0d96af97ec00 option to display menu at startup, patch by Aurelien Jacobs <aurel at gnuage.org>
faust3
parents: 10397
diff changeset
52 /// if nonzero display menu at startup
27746
38fbba4327fa Remove pointless attribute_used from variable declaration.
diego
parents: 27393
diff changeset
53 int menu_startup = 0;
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
54
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
55 struct vf_priv_s {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
56 menu_t* root;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
57 menu_t* current;
21803
3acc4b00bcc6 allows OSD menu to be displayed when using MPEG PES video out
ben
parents: 19489
diff changeset
58 int passthrough;
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
59 };
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
60
17908
dcfaebcdde14 10l (forgot ...)
michael
parents: 16862
diff changeset
61 static int put_image(struct vf_instance_s* vf, mp_image_t *mpi, double pts);
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
62
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
63 void vf_menu_pause_update(struct vf_instance_s* vf) {
25219
e82ecde2cbd4 Mark several uses of vo_functions_t as const to stop some of the current
reimar
parents: 25026
diff changeset
64 const vo_functions_t *video_out = mpctx_get_video_out(vf->priv->current->ctx);
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
65 if(pause_mpi) {
17908
dcfaebcdde14 10l (forgot ...)
michael
parents: 16862
diff changeset
66 put_image(vf,pause_mpi, MP_NOPTS_VALUE);
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
67 // Don't draw the osd atm
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
68 //vf->control(vf,VFCTRL_DRAW_OSD,NULL);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
69 video_out->flip_page();
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
70 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
71 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
72
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
73 static int cmd_filter(mp_cmd_t* cmd, int paused, struct vf_priv_s * priv) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
74
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
75 switch(cmd->id) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
76 case MP_CMD_MENU : { // Convert txt cmd from the users into libmenu stuff
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
77 char* arg = cmd->args[0].v.s;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
78
25496
63234bdc80e4 Simplify the condition code.
ulion
parents: 25461
diff changeset
79 if (!priv->current->show && strcmp(arg,"hide"))
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
80 priv->current->show = 1;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
81 else if(strcmp(arg,"up") == 0)
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
82 menu_read_cmd(priv->current,MENU_CMD_UP);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
83 else if(strcmp(arg,"down") == 0)
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
84 menu_read_cmd(priv->current,MENU_CMD_DOWN);
17945
98f4e3704a76 Allow 6 ways (up/down/left/right/ok/cancel) navigation.
albeu
parents: 17908
diff changeset
85 else if(strcmp(arg,"left") == 0)
98f4e3704a76 Allow 6 ways (up/down/left/right/ok/cancel) navigation.
albeu
parents: 17908
diff changeset
86 menu_read_cmd(priv->current,MENU_CMD_LEFT);
98f4e3704a76 Allow 6 ways (up/down/left/right/ok/cancel) navigation.
albeu
parents: 17908
diff changeset
87 else if(strcmp(arg,"right") == 0)
98f4e3704a76 Allow 6 ways (up/down/left/right/ok/cancel) navigation.
albeu
parents: 17908
diff changeset
88 menu_read_cmd(priv->current,MENU_CMD_RIGHT);
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
89 else if(strcmp(arg,"ok") == 0)
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
90 menu_read_cmd(priv->current,MENU_CMD_OK);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
91 else if(strcmp(arg,"cancel") == 0)
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
92 menu_read_cmd(priv->current,MENU_CMD_CANCEL);
25263
96d0992c7920 Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents: 25219
diff changeset
93 else if(strcmp(arg,"home") == 0)
96d0992c7920 Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents: 25219
diff changeset
94 menu_read_cmd(priv->current,MENU_CMD_HOME);
96d0992c7920 Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents: 25219
diff changeset
95 else if(strcmp(arg,"end") == 0)
96d0992c7920 Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents: 25219
diff changeset
96 menu_read_cmd(priv->current,MENU_CMD_END);
96d0992c7920 Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents: 25219
diff changeset
97 else if(strcmp(arg,"pageup") == 0)
96d0992c7920 Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents: 25219
diff changeset
98 menu_read_cmd(priv->current,MENU_CMD_PAGE_UP);
96d0992c7920 Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents: 25219
diff changeset
99 else if(strcmp(arg,"pagedown") == 0)
96d0992c7920 Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents: 25219
diff changeset
100 menu_read_cmd(priv->current,MENU_CMD_PAGE_DOWN);
25461
7ef04742572c OSD menu support mouse selection.
ulion
parents: 25263
diff changeset
101 else if(strcmp(arg,"click") == 0)
7ef04742572c OSD menu support mouse selection.
ulion
parents: 25263
diff changeset
102 menu_read_cmd(priv->current,MENU_CMD_CLICK);
19489
87c339558bc1 fix menu toggle/hide issues
ben
parents: 17994
diff changeset
103 else if(strcmp(arg,"hide") == 0 || strcmp(arg,"toggle") == 0)
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
104 priv->current->show = 0;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
105 else
17994
6927fabaef92 Part1 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu
reynaldo
parents: 17945
diff changeset
106 mp_msg(MSGT_GLOBAL,MSGL_WARN,MSGTR_LIBMENU_UnknownMenuCommand,arg);
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
107 return 1;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
108 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
109 case MP_CMD_SET_MENU : {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
110 char* menu = cmd->args[0].v.s;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
111 menu_t* l = priv->current;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
112 priv->current = menu_open(menu);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
113 if(!priv->current) {
17994
6927fabaef92 Part1 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu
reynaldo
parents: 17945
diff changeset
114 mp_msg(MSGT_GLOBAL,MSGL_WARN,MSGTR_LIBMENU_FailedToOpenMenu,menu);
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
115 priv->current = l;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
116 priv->current->show = 0;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
117 } else {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
118 priv->current->show = 1;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
119 priv->current->parent = l;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
120 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
121 return 1;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
122 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
123 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
124 return 0;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
125 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
126
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
127 static void get_image(struct vf_instance_s* vf, mp_image_t *mpi){
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
128 mp_image_t *dmpi;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
129
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
130 if(mpi->type == MP_IMGTYPE_TEMP && (!(mpi->flags&MP_IMGFLAG_PRESERVE)) ) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
131 dmpi = vf_get_image(vf->next,mpi->imgfmt,mpi->type, mpi->flags, mpi->w, mpi->h);
23458
973e53dc7df5 Do not use fast_memcpy for small size copy, esp. when the size is constant
reimar
parents: 23457
diff changeset
132 memcpy(mpi->planes,dmpi->planes,MP_MAX_PLANES*sizeof(unsigned char*));
973e53dc7df5 Do not use fast_memcpy for small size copy, esp. when the size is constant
reimar
parents: 23457
diff changeset
133 memcpy(mpi->stride,dmpi->stride,MP_MAX_PLANES*sizeof(unsigned int));
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
134 mpi->flags|=MP_IMGFLAG_DIRECT;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
135 mpi->priv=(void*)dmpi;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
136 return;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
137 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
138 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
139
25502
605d4e3e403f From now on, libmenu does not steal all input keys from input modules.
ulion
parents: 25496
diff changeset
140 static int key_cb(int code) {
605d4e3e403f From now on, libmenu does not steal all input keys from input modules.
ulion
parents: 25496
diff changeset
141 return menu_read_key(st_priv->current,code);
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
142 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
143
17908
dcfaebcdde14 10l (forgot ...)
michael
parents: 16862
diff changeset
144 static int put_image(struct vf_instance_s* vf, mp_image_t *mpi, double pts){
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
145 mp_image_t *dmpi = NULL;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
146
21803
3acc4b00bcc6 allows OSD menu to be displayed when using MPEG PES video out
ben
parents: 19489
diff changeset
147 if (vf->priv->passthrough) {
3acc4b00bcc6 allows OSD menu to be displayed when using MPEG PES video out
ben
parents: 19489
diff changeset
148 dmpi=vf_get_image(vf->next, IMGFMT_MPEGPES, MP_IMGTYPE_EXPORT,
3acc4b00bcc6 allows OSD menu to be displayed when using MPEG PES video out
ben
parents: 19489
diff changeset
149 0, mpi->w, mpi->h);
3acc4b00bcc6 allows OSD menu to be displayed when using MPEG PES video out
ben
parents: 19489
diff changeset
150 dmpi->planes[0]=mpi->planes[0];
3acc4b00bcc6 allows OSD menu to be displayed when using MPEG PES video out
ben
parents: 19489
diff changeset
151 return vf_next_put_image(vf,dmpi, pts);
3acc4b00bcc6 allows OSD menu to be displayed when using MPEG PES video out
ben
parents: 19489
diff changeset
152 }
3acc4b00bcc6 allows OSD menu to be displayed when using MPEG PES video out
ben
parents: 19489
diff changeset
153
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
154 // Close all menu who requested it
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
155 while(vf->priv->current->cl && vf->priv->current != vf->priv->root) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
156 menu_t* m = vf->priv->current;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
157 vf->priv->current = m->parent ? m->parent : vf->priv->root;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
158 menu_close(m);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
159 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
160
25026
afead6ecb8ba Remove the pause filter and the cmd queue hack, to know the mplayer going to
ulion
parents: 24960
diff changeset
161 // Try to capture the last frame before pause, or fallback to use
afead6ecb8ba Remove the pause filter and the cmd queue hack, to know the mplayer going to
ulion
parents: 24960
diff changeset
162 // last captured frame.
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
163 if(pause_mpi && (mpi->w != pause_mpi->w || mpi->h != pause_mpi->h ||
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
164 mpi->imgfmt != pause_mpi->imgfmt)) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
165 free_mp_image(pause_mpi);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
166 pause_mpi = NULL;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
167 }
25026
afead6ecb8ba Remove the pause filter and the cmd queue hack, to know the mplayer going to
ulion
parents: 24960
diff changeset
168 if (!pause_mpi) {
afead6ecb8ba Remove the pause filter and the cmd queue hack, to know the mplayer going to
ulion
parents: 24960
diff changeset
169 pause_mpi = alloc_mpi(mpi->w,mpi->h,mpi->imgfmt);
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
170 copy_mpi(pause_mpi,mpi);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
171 }
25026
afead6ecb8ba Remove the pause filter and the cmd queue hack, to know the mplayer going to
ulion
parents: 24960
diff changeset
172 else if (mpctx_get_osd_function(vf->priv->root->ctx) == OSD_PAUSE)
afead6ecb8ba Remove the pause filter and the cmd queue hack, to know the mplayer going to
ulion
parents: 24960
diff changeset
173 copy_mpi(pause_mpi,mpi);
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
174
25026
afead6ecb8ba Remove the pause filter and the cmd queue hack, to know the mplayer going to
ulion
parents: 24960
diff changeset
175 if (vf->priv->current->show) {
afead6ecb8ba Remove the pause filter and the cmd queue hack, to know the mplayer going to
ulion
parents: 24960
diff changeset
176 if (!mp_input_key_cb)
afead6ecb8ba Remove the pause filter and the cmd queue hack, to know the mplayer going to
ulion
parents: 24960
diff changeset
177 mp_input_key_cb = key_cb;
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
178
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
179 if(mpi->flags&MP_IMGFLAG_DIRECT)
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
180 dmpi = mpi->priv;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
181 else {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
182 dmpi = vf_get_image(vf->next,mpi->imgfmt,
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
183 MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE,
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
184 mpi->w,mpi->h);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
185 copy_mpi(dmpi,mpi);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
186 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
187 menu_draw(vf->priv->current,dmpi);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
188
8244
64352fb332b6 don't fully-copy the planes if the menu doesn't show (faster)
colin
parents: 8224
diff changeset
189 } else {
64352fb332b6 don't fully-copy the planes if the menu doesn't show (faster)
colin
parents: 8224
diff changeset
190 if(mp_input_key_cb)
64352fb332b6 don't fully-copy the planes if the menu doesn't show (faster)
colin
parents: 8224
diff changeset
191 mp_input_key_cb = NULL;
21924
422eef67d14a speeds up mplayer execution by over FIVE times when all of the of the following apply:
gpoirier
parents: 21818
diff changeset
192
422eef67d14a speeds up mplayer execution by over FIVE times when all of the of the following apply:
gpoirier
parents: 21818
diff changeset
193 if(mpi->flags&MP_IMGFLAG_DIRECT)
422eef67d14a speeds up mplayer execution by over FIVE times when all of the of the following apply:
gpoirier
parents: 21818
diff changeset
194 dmpi = mpi->priv;
422eef67d14a speeds up mplayer execution by over FIVE times when all of the of the following apply:
gpoirier
parents: 21818
diff changeset
195 else {
21925
1c93736b6751 fix identation, broken by last commit
gpoirier
parents: 21924
diff changeset
196 dmpi = vf_get_image(vf->next,mpi->imgfmt,
1c93736b6751 fix identation, broken by last commit
gpoirier
parents: 21924
diff changeset
197 MP_IMGTYPE_EXPORT, MP_IMGFLAG_ACCEPT_STRIDE,
1c93736b6751 fix identation, broken by last commit
gpoirier
parents: 21924
diff changeset
198 mpi->w,mpi->h);
8244
64352fb332b6 don't fully-copy the planes if the menu doesn't show (faster)
colin
parents: 8224
diff changeset
199
21925
1c93736b6751 fix identation, broken by last commit
gpoirier
parents: 21924
diff changeset
200 dmpi->stride[0] = mpi->stride[0];
1c93736b6751 fix identation, broken by last commit
gpoirier
parents: 21924
diff changeset
201 dmpi->stride[1] = mpi->stride[1];
1c93736b6751 fix identation, broken by last commit
gpoirier
parents: 21924
diff changeset
202 dmpi->stride[2] = mpi->stride[2];
1c93736b6751 fix identation, broken by last commit
gpoirier
parents: 21924
diff changeset
203 dmpi->planes[0] = mpi->planes[0];
1c93736b6751 fix identation, broken by last commit
gpoirier
parents: 21924
diff changeset
204 dmpi->planes[1] = mpi->planes[1];
1c93736b6751 fix identation, broken by last commit
gpoirier
parents: 21924
diff changeset
205 dmpi->planes[2] = mpi->planes[2];
1c93736b6751 fix identation, broken by last commit
gpoirier
parents: 21924
diff changeset
206 dmpi->priv = mpi->priv;
1c93736b6751 fix identation, broken by last commit
gpoirier
parents: 21924
diff changeset
207 }
21924
422eef67d14a speeds up mplayer execution by over FIVE times when all of the of the following apply:
gpoirier
parents: 21818
diff changeset
208 }
17908
dcfaebcdde14 10l (forgot ...)
michael
parents: 16862
diff changeset
209 return vf_next_put_image(vf,dmpi, pts);
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
210 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
211
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
212 static void uninit(vf_instance_t *vf) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
213 vf->priv=NULL;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
214 if(pause_mpi) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
215 free_mp_image(pause_mpi);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
216 pause_mpi = NULL;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
217 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
218 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
219
8224
fefc56153615 Fix freetype. Freetype is highly recommended for a nice output ;)
albeu
parents: 8197
diff changeset
220 static int config(struct vf_instance_s* vf, int width, int height, int d_width, int d_height,
fefc56153615 Fix freetype. Freetype is highly recommended for a nice output ;)
albeu
parents: 8197
diff changeset
221 unsigned int flags, unsigned int outfmt) {
27393
4876c89bafdd Rename font-related preprocessor directives.
diego
parents: 26759
diff changeset
222 #ifdef CONFIG_FREETYPE
8224
fefc56153615 Fix freetype. Freetype is highly recommended for a nice output ;)
albeu
parents: 8197
diff changeset
223 // here is the right place to get screen dimensions
fefc56153615 Fix freetype. Freetype is highly recommended for a nice output ;)
albeu
parents: 8197
diff changeset
224 if (force_load_font) {
fefc56153615 Fix freetype. Freetype is highly recommended for a nice output ;)
albeu
parents: 8197
diff changeset
225 force_load_font = 0;
25851
9ebd00825df2 Allow independent scaling of vo_font and sub_font.
reimar
parents: 25502
diff changeset
226 load_font_ft(width,height,&vo_font,font_name,osd_font_scale_factor);
8224
fefc56153615 Fix freetype. Freetype is highly recommended for a nice output ;)
albeu
parents: 8197
diff changeset
227 }
fefc56153615 Fix freetype. Freetype is highly recommended for a nice output ;)
albeu
parents: 8197
diff changeset
228 #endif
21803
3acc4b00bcc6 allows OSD menu to be displayed when using MPEG PES video out
ben
parents: 19489
diff changeset
229 if(outfmt == IMGFMT_MPEGPES)
3acc4b00bcc6 allows OSD menu to be displayed when using MPEG PES video out
ben
parents: 19489
diff changeset
230 vf->priv->passthrough = 1;
8224
fefc56153615 Fix freetype. Freetype is highly recommended for a nice output ;)
albeu
parents: 8197
diff changeset
231 return vf_next_config(vf,width,height,d_width,d_height,flags,outfmt);
fefc56153615 Fix freetype. Freetype is highly recommended for a nice output ;)
albeu
parents: 8197
diff changeset
232 }
21803
3acc4b00bcc6 allows OSD menu to be displayed when using MPEG PES video out
ben
parents: 19489
diff changeset
233
3acc4b00bcc6 allows OSD menu to be displayed when using MPEG PES video out
ben
parents: 19489
diff changeset
234 static int query_format(struct vf_instance_s* vf, unsigned int fmt){
26759
8eff880f638c cosmetics: Remove useless parentheses from return statements.
diego
parents: 25851
diff changeset
235 return vf_next_query_format(vf,fmt);
21803
3acc4b00bcc6 allows OSD menu to be displayed when using MPEG PES video out
ben
parents: 19489
diff changeset
236 }
3acc4b00bcc6 allows OSD menu to be displayed when using MPEG PES video out
ben
parents: 19489
diff changeset
237
23366
b344b6520518 rename some menu open functions, to avoid confusion with libc native open()
ben
parents: 23338
diff changeset
238 static int open_vf(vf_instance_t *vf, char* args){
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
239 if(!st_priv) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
240 st_priv = calloc(1,sizeof(struct vf_priv_s));
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
241 st_priv->root = st_priv->current = menu_open(args);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
242 if(!st_priv->current) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
243 free(st_priv);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
244 st_priv = NULL;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
245 return 0;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
246 }
13344
0d96af97ec00 option to display menu at startup, patch by Aurelien Jacobs <aurel at gnuage.org>
faust3
parents: 10397
diff changeset
247 st_priv->root->show = menu_startup;
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
248 mp_input_add_cmd_filter((mp_input_cmd_filter)cmd_filter,st_priv);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
249 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
250
8224
fefc56153615 Fix freetype. Freetype is highly recommended for a nice output ;)
albeu
parents: 8197
diff changeset
251 vf->config = config;
21803
3acc4b00bcc6 allows OSD menu to be displayed when using MPEG PES video out
ben
parents: 19489
diff changeset
252 vf->query_format=query_format;
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
253 vf->put_image = put_image;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
254 vf->get_image = get_image;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
255 vf->uninit=uninit;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
256 vf->priv=st_priv;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
257 go2pause=0;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
258
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
259 return 1;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
260 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
261
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
262
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
263 vf_info_t vf_info_menu = {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
264 "Internal filter for libmenu",
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
265 "menu",
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
266 "Albeu",
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
267 "",
23366
b344b6520518 rename some menu open functions, to avoid confusion with libc native open()
ben
parents: 23338
diff changeset
268 open_vf,
9755
6b7710f78c32 10L forgot this filter.
albeu
parents: 8635
diff changeset
269 NULL
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
270 };
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
271
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
272
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
273