annotate libmenu/vf_menu.c @ 10898:716edc005b18

patch from Pierre Lombard <p_l@gmx.fr> If the sound channel is already busy the async open fails and returns -EBUSY. There's no need to try to open it synchronously as it will block mplayer till the sound channel is released. (Granted there's a very slight chance your sound device happen to be freed between those two calls but it's not the common case). The behavior is changed by this oneliner to match the ao_oss behavior (disable sound if the sound device is busy).
author attila
date Sun, 21 Sep 2003 09:49:05 +0000
parents 6180d7558f75
children 0d96af97ec00
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
1
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
2 #include "../config.h"
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
3
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
4 #include <stdio.h>
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
5 #include <stdlib.h>
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
6 #include <string.h>
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
7
8623
440301fef3fe Added/reordered #includes to silence warnings about "implicit declaration".
rathann
parents: 8251
diff changeset
8 #ifdef HAVE_MALLOC_H
440301fef3fe Added/reordered #includes to silence warnings about "implicit declaration".
rathann
parents: 8251
diff changeset
9 #include <malloc.h>
440301fef3fe Added/reordered #includes to silence warnings about "implicit declaration".
rathann
parents: 8251
diff changeset
10 #endif
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
11
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
12 #include "../mp_msg.h"
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
13
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
14 #include "../libmpcodecs/img_format.h"
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
15 #include "../libmpcodecs/mp_image.h"
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
16 #include "../libmpcodecs/vf.h"
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
17
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
18 #include "../libvo/fastmemcpy.h"
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
19 #include "../libvo/video_out.h"
8224
fefc56153615 Fix freetype. Freetype is highly recommended for a nice output ;)
albeu
parents: 8197
diff changeset
20 #include "../libvo/font_load.h"
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
21 #include "../input/input.h"
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
22 #include "../m_struct.h"
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
23 #include "menu.h"
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
24
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
25 extern vo_functions_t* video_out;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
26
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
27
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
28 static struct vf_priv_s* st_priv = NULL;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
29
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
30 static mp_image_t* pause_mpi = NULL;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
31 static int go2pause = 0;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
32
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
33 struct vf_priv_s {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
34 menu_t* root;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
35 menu_t* current;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
36 };
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
37
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
38 static int put_image(struct vf_instance_s* vf, mp_image_t *mpi);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
39
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
40 static mp_image_t* alloc_mpi(int w, int h, uint32_t fmt) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
41 mp_image_t* mpi = new_mp_image(w,h);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
42
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
43 mp_image_setfmt(mpi,fmt);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
44 // IF09 - allocate space for 4. plane delta info - unused
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
45 if (mpi->imgfmt == IMGFMT_IF09)
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
46 {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
47 mpi->planes[0]=memalign(64, mpi->bpp*mpi->width*(mpi->height+2)/8+
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
48 mpi->chroma_width*mpi->chroma_height);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
49 /* delta table, just for fun ;) */
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
50 mpi->planes[3]=mpi->planes[0]+2*(mpi->chroma_width*mpi->chroma_height);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
51 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
52 else
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
53 mpi->planes[0]=memalign(64, mpi->bpp*mpi->width*(mpi->height+2)/8);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
54 if(mpi->flags&MP_IMGFLAG_PLANAR){
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
55 // YV12/I420/YVU9/IF09. feel free to add other planar formats here...
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
56 if(!mpi->stride[0]) mpi->stride[0]=mpi->width;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
57 if(!mpi->stride[1]) mpi->stride[1]=mpi->stride[2]=mpi->chroma_width;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
58 if(mpi->flags&MP_IMGFLAG_SWAPPED){
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
59 // I420/IYUV (Y,U,V)
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
60 mpi->planes[1]=mpi->planes[0]+mpi->width*mpi->height;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
61 mpi->planes[2]=mpi->planes[1]+mpi->chroma_width*mpi->chroma_height;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
62 } else {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
63 // YV12,YVU9,IF09 (Y,V,U)
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
64 mpi->planes[2]=mpi->planes[0]+mpi->width*mpi->height;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
65 mpi->planes[1]=mpi->planes[2]+mpi->chroma_width*mpi->chroma_height;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
66 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
67 } else {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
68 if(!mpi->stride[0]) mpi->stride[0]=mpi->width*mpi->bpp/8;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
69 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
70 mpi->flags|=MP_IMGFLAG_ALLOCATED;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
71
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
72 return mpi;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
73 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
74
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
75 void vf_menu_pause_update(struct vf_instance_s* vf) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
76 if(pause_mpi) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
77 put_image(vf,pause_mpi);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
78 // Don't draw the osd atm
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
79 //vf->control(vf,VFCTRL_DRAW_OSD,NULL);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
80 video_out->flip_page();
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
81 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
82 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
83
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
84 static int cmd_filter(mp_cmd_t* cmd, int paused, struct vf_priv_s * priv) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
85
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
86 switch(cmd->id) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
87 case MP_CMD_PAUSE :
9903
7d70e56f317a 10l fix by Vladimir Mosgalin <mosgalin@VM10124.spb.edu>
alex
parents: 9755
diff changeset
88 #if 0 // http://mplayerhq.hu/pipermail/mplayer-dev-eng/2003-March/017331.html
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
89 if(!paused && !go2pause) { // Initial pause cmd -> wait the next put_image
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
90 go2pause = 1;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
91 return 1;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
92 }
9903
7d70e56f317a 10l fix by Vladimir Mosgalin <mosgalin@VM10124.spb.edu>
alex
parents: 9755
diff changeset
93 #endif
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
94 if(go2pause == 2) // Msg resent by put_image after saving the image
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
95 go2pause = 0;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
96 break;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
97 case MP_CMD_MENU : { // Convert txt cmd from the users into libmenu stuff
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
98 char* arg = cmd->args[0].v.s;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
99
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
100 if(!priv->current->show)
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
101 priv->current->show = 1;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
102 else if(strcmp(arg,"up") == 0)
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
103 menu_read_cmd(priv->current,MENU_CMD_UP);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
104 else if(strcmp(arg,"down") == 0)
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
105 menu_read_cmd(priv->current,MENU_CMD_DOWN);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
106 else if(strcmp(arg,"ok") == 0)
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
107 menu_read_cmd(priv->current,MENU_CMD_OK);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
108 else if(strcmp(arg,"cancel") == 0)
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
109 menu_read_cmd(priv->current,MENU_CMD_CANCEL);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
110 else if(strcmp(arg,"hide") == 0)
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
111 priv->current->show = 0;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
112 else
10397
6180d7558f75 output typo fixes: unknow --> unknown
diego
parents: 9903
diff changeset
113 printf("Unknown menu command: '%s'\n",arg);
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
114 return 1;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
115 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
116 case MP_CMD_SET_MENU : {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
117 char* menu = cmd->args[0].v.s;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
118 menu_t* l = priv->current;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
119 priv->current = menu_open(menu);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
120 if(!priv->current) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
121 printf("Failed to open menu '%s'\n",menu);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
122 priv->current = l;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
123 priv->current->show = 0;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
124 } else {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
125 priv->current->show = 1;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
126 priv->current->parent = l;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
127 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
128 return 1;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
129 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
130 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
131 return 0;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
132 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
133
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
134 static void get_image(struct vf_instance_s* vf, mp_image_t *mpi){
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
135 mp_image_t *dmpi;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
136
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
137 if(mpi->type == MP_IMGTYPE_TEMP && (!(mpi->flags&MP_IMGFLAG_PRESERVE)) ) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
138 dmpi = vf_get_image(vf->next,mpi->imgfmt,mpi->type, mpi->flags, mpi->w, mpi->h);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
139 memcpy(mpi->planes,dmpi->planes,MP_MAX_PLANES*sizeof(unsigned char*));
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
140 memcpy(mpi->stride,dmpi->stride,MP_MAX_PLANES*sizeof(unsigned int));
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
141 mpi->flags|=MP_IMGFLAG_DIRECT;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
142 mpi->priv=(void*)dmpi;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
143 return;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
144 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
145 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
146
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
147 static void key_cb(int code) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
148 menu_read_key(st_priv->current,code);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
149 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
150
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
151
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
152
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
153 inline static void copy_mpi(mp_image_t *dmpi, mp_image_t *mpi) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
154 if(mpi->flags&MP_IMGFLAG_PLANAR){
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
155 memcpy_pic(dmpi->planes[0],mpi->planes[0], mpi->w, mpi->h,
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
156 dmpi->stride[0],mpi->stride[0]);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
157 memcpy_pic(dmpi->planes[1],mpi->planes[1], mpi->chroma_width, mpi->chroma_height,
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
158 dmpi->stride[1],mpi->stride[1]);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
159 memcpy_pic(dmpi->planes[2], mpi->planes[2], mpi->chroma_width, mpi->chroma_height,
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
160 dmpi->stride[2],mpi->stride[2]);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
161 } else {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
162 memcpy_pic(dmpi->planes[0],mpi->planes[0],
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
163 mpi->w*(dmpi->bpp/8), mpi->h,
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
164 dmpi->stride[0],mpi->stride[0]);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
165 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
166 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
167
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
168
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
169
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
170 static int put_image(struct vf_instance_s* vf, mp_image_t *mpi){
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
171 mp_image_t *dmpi = NULL;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
172
8251
3d74366d947e better fix for my previous 10l
colin
parents: 8244
diff changeset
173 if(vf->priv->current->show
3d74366d947e better fix for my previous 10l
colin
parents: 8244
diff changeset
174 || (vf->priv->current->parent && vf->priv->current->parent->show)) {
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
175 // Close all menu who requested it
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
176 while(vf->priv->current->cl && vf->priv->current != vf->priv->root) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
177 menu_t* m = vf->priv->current;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
178 vf->priv->current = m->parent ? m->parent : vf->priv->root;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
179 menu_close(m);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
180 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
181
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
182 // Step 1 : save the picture
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
183 while(go2pause == 1) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
184 static char delay = 0; // Hack : wait the 2 frame to be sure to show the right picture
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
185 delay ^= 1; // after a seek
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
186 if(!delay) break;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
187
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
188 if(pause_mpi && (mpi->w != pause_mpi->w || mpi->h != pause_mpi->h ||
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
189 mpi->imgfmt != pause_mpi->imgfmt)) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
190 free_mp_image(pause_mpi);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
191 pause_mpi = NULL;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
192 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
193 if(!pause_mpi)
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
194 pause_mpi = alloc_mpi(mpi->w,mpi->h,mpi->imgfmt);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
195 copy_mpi(pause_mpi,mpi);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
196 mp_input_queue_cmd(mp_input_parse_cmd("pause"));
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
197 go2pause = 2;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
198 break;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
199 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
200
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
201 // Grab // Ungrab the keys
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
202 if(!mp_input_key_cb && vf->priv->current->show)
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
203 mp_input_key_cb = key_cb;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
204 if(mp_input_key_cb && !vf->priv->current->show)
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
205 mp_input_key_cb = NULL;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
206
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
207 if(mpi->flags&MP_IMGFLAG_DIRECT)
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
208 dmpi = mpi->priv;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
209 else {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
210 dmpi = vf_get_image(vf->next,mpi->imgfmt,
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
211 MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE,
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
212 mpi->w,mpi->h);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
213 copy_mpi(dmpi,mpi);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
214 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
215 menu_draw(vf->priv->current,dmpi);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
216
8244
64352fb332b6 don't fully-copy the planes if the menu doesn't show (faster)
colin
parents: 8224
diff changeset
217 } else {
64352fb332b6 don't fully-copy the planes if the menu doesn't show (faster)
colin
parents: 8224
diff changeset
218 if(mp_input_key_cb)
64352fb332b6 don't fully-copy the planes if the menu doesn't show (faster)
colin
parents: 8224
diff changeset
219 mp_input_key_cb = NULL;
64352fb332b6 don't fully-copy the planes if the menu doesn't show (faster)
colin
parents: 8224
diff changeset
220 dmpi = vf_get_image(vf->next,mpi->imgfmt,
64352fb332b6 don't fully-copy the planes if the menu doesn't show (faster)
colin
parents: 8224
diff changeset
221 MP_IMGTYPE_EXPORT, MP_IMGFLAG_ACCEPT_STRIDE,
64352fb332b6 don't fully-copy the planes if the menu doesn't show (faster)
colin
parents: 8224
diff changeset
222 mpi->w,mpi->h);
64352fb332b6 don't fully-copy the planes if the menu doesn't show (faster)
colin
parents: 8224
diff changeset
223
64352fb332b6 don't fully-copy the planes if the menu doesn't show (faster)
colin
parents: 8224
diff changeset
224 dmpi->stride[0] = mpi->stride[0];
64352fb332b6 don't fully-copy the planes if the menu doesn't show (faster)
colin
parents: 8224
diff changeset
225 dmpi->stride[1] = mpi->stride[1];
64352fb332b6 don't fully-copy the planes if the menu doesn't show (faster)
colin
parents: 8224
diff changeset
226 dmpi->stride[2] = mpi->stride[2];
64352fb332b6 don't fully-copy the planes if the menu doesn't show (faster)
colin
parents: 8224
diff changeset
227 dmpi->planes[0] = mpi->planes[0];
64352fb332b6 don't fully-copy the planes if the menu doesn't show (faster)
colin
parents: 8224
diff changeset
228 dmpi->planes[1] = mpi->planes[1];
64352fb332b6 don't fully-copy the planes if the menu doesn't show (faster)
colin
parents: 8224
diff changeset
229 dmpi->planes[2] = mpi->planes[2];
64352fb332b6 don't fully-copy the planes if the menu doesn't show (faster)
colin
parents: 8224
diff changeset
230 dmpi->priv = mpi->priv;
64352fb332b6 don't fully-copy the planes if the menu doesn't show (faster)
colin
parents: 8224
diff changeset
231 }
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
232 return vf_next_put_image(vf,dmpi);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
233 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
234
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
235 static void uninit(vf_instance_t *vf) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
236 vf->priv=NULL;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
237 if(pause_mpi) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
238 free_mp_image(pause_mpi);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
239 pause_mpi = NULL;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
240 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
241 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
242
8224
fefc56153615 Fix freetype. Freetype is highly recommended for a nice output ;)
albeu
parents: 8197
diff changeset
243 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
244 unsigned int flags, unsigned int outfmt) {
fefc56153615 Fix freetype. Freetype is highly recommended for a nice output ;)
albeu
parents: 8197
diff changeset
245 #ifdef HAVE_FREETYPE
fefc56153615 Fix freetype. Freetype is highly recommended for a nice output ;)
albeu
parents: 8197
diff changeset
246 // 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
247 if (force_load_font) {
fefc56153615 Fix freetype. Freetype is highly recommended for a nice output ;)
albeu
parents: 8197
diff changeset
248 force_load_font = 0;
8635
81dbd28ef7c0 these patches let ,,oldstyle'' and freetype subtitle renderers live
arpi
parents: 8623
diff changeset
249 load_font_ft(width,height);
8224
fefc56153615 Fix freetype. Freetype is highly recommended for a nice output ;)
albeu
parents: 8197
diff changeset
250 }
fefc56153615 Fix freetype. Freetype is highly recommended for a nice output ;)
albeu
parents: 8197
diff changeset
251 #endif
fefc56153615 Fix freetype. Freetype is highly recommended for a nice output ;)
albeu
parents: 8197
diff changeset
252 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
253 }
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
254 static int open(vf_instance_t *vf, char* args){
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
255 if(!st_priv) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
256 st_priv = calloc(1,sizeof(struct vf_priv_s));
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
257 st_priv->root = st_priv->current = menu_open(args);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
258 if(!st_priv->current) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
259 free(st_priv);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
260 st_priv = NULL;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
261 return 0;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
262 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
263 mp_input_add_cmd_filter((mp_input_cmd_filter)cmd_filter,st_priv);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
264 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
265
8224
fefc56153615 Fix freetype. Freetype is highly recommended for a nice output ;)
albeu
parents: 8197
diff changeset
266 vf->config = config;
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
267 vf->put_image = put_image;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
268 vf->get_image = get_image;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
269 vf->uninit=uninit;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
270 vf->priv=st_priv;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
271 go2pause=0;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
272
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
273 return 1;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
274 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
275
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
276
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
277 vf_info_t vf_info_menu = {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
278 "Internal filter for libmenu",
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
279 "menu",
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
280 "Albeu",
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
281 "",
9755
6b7710f78c32 10L forgot this filter.
albeu
parents: 8635
diff changeset
282 open,
6b7710f78c32 10L forgot this filter.
albeu
parents: 8635
diff changeset
283 NULL
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
284 };
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
285
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
286
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
287