annotate libmenu/vf_menu.c @ 23572:a00685941686

demux_mkv very long seek fix The seek code searching for the closest position in the index used "int64_t min_diff=0xFFFFFFFL" as the initial "further from the goal than any real alternative" value. The unit is milliseconds so seeks more than about 75 hours past the end of the file would fail to recognize the last index position as the best match. This was triggered in practice by chapter seek code which apparently uses a seek of 1000000000 seconds forward to mean "seek to the end". The practical effect was that trying to seek to the next chapter in a file without chapters made MPlayer block until it finished reading the file from the current position to the end. Fixed by increasing the initial value from FFFFFFF to FFFFFFFFFFFFFFF.
author uau
date Wed, 20 Jun 2007 18:19:03 +0000
parents 973e53dc7df5
children 8572d2ef5263
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
1
16862
931bdbc37ee0 Unify include paths, -I.. is in CFLAGS.
diego
parents: 13528
diff changeset
2 #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
3 #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
4 #include "help_mp.h"
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
5
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
6 #include <stdio.h>
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
7 #include <stdlib.h>
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
8 #include <string.h>
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
9
8623
440301fef3fe Added/reordered #includes to silence warnings about "implicit declaration".
rathann
parents: 8251
diff changeset
10 #ifdef HAVE_MALLOC_H
440301fef3fe Added/reordered #includes to silence warnings about "implicit declaration".
rathann
parents: 8251
diff changeset
11 #include <malloc.h>
440301fef3fe Added/reordered #includes to silence warnings about "implicit declaration".
rathann
parents: 8251
diff changeset
12 #endif
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
13
23338
2a66d95355f0 add new -subfont option, that allows having a different font for OSD (controls and menu) and subtitles
ben
parents: 22284
diff changeset
14 #include "mplayer.h"
16862
931bdbc37ee0 Unify include paths, -I.. is in CFLAGS.
diego
parents: 13528
diff changeset
15 #include "mp_msg.h"
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
16
16862
931bdbc37ee0 Unify include paths, -I.. is in CFLAGS.
diego
parents: 13528
diff changeset
17 #include "libmpcodecs/img_format.h"
931bdbc37ee0 Unify include paths, -I.. is in CFLAGS.
diego
parents: 13528
diff changeset
18 #include "libmpcodecs/mp_image.h"
931bdbc37ee0 Unify include paths, -I.. is in CFLAGS.
diego
parents: 13528
diff changeset
19 #include "libmpcodecs/vf.h"
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
20
16862
931bdbc37ee0 Unify include paths, -I.. is in CFLAGS.
diego
parents: 13528
diff changeset
21 #include "libvo/fastmemcpy.h"
931bdbc37ee0 Unify include paths, -I.. is in CFLAGS.
diego
parents: 13528
diff changeset
22 #include "libvo/video_out.h"
931bdbc37ee0 Unify include paths, -I.. is in CFLAGS.
diego
parents: 13528
diff changeset
23 #include "libvo/font_load.h"
931bdbc37ee0 Unify include paths, -I.. is in CFLAGS.
diego
parents: 13528
diff changeset
24 #include "input/input.h"
931bdbc37ee0 Unify include paths, -I.. is in CFLAGS.
diego
parents: 13528
diff changeset
25 #include "m_struct.h"
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
26 #include "menu.h"
22284
83366c8e1928 Fix menu to work with mpctx
uau
parents: 21925
diff changeset
27 #include "access_mpcontext.h"
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
28
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
29
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
30 static struct vf_priv_s* st_priv = NULL;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
31
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
32 static mp_image_t* pause_mpi = NULL;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
33 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
34 /// if nonzero display menu at startup
13528
39bdfbbc4216 support newer gcc
faust3
parents: 13344
diff changeset
35 int attribute_used menu_startup = 0;
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
36
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
37 struct vf_priv_s {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
38 menu_t* root;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
39 menu_t* current;
21803
3acc4b00bcc6 allows OSD menu to be displayed when using MPEG PES video out
ben
parents: 19489
diff changeset
40 int passthrough;
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
41 };
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
42
17908
dcfaebcdde14 10l (forgot ...)
michael
parents: 16862
diff changeset
43 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
44
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
45 static mp_image_t* alloc_mpi(int w, int h, uint32_t fmt) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
46 mp_image_t* mpi = new_mp_image(w,h);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
47
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
48 mp_image_setfmt(mpi,fmt);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
49 // IF09 - allocate space for 4. plane delta info - unused
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
50 if (mpi->imgfmt == IMGFMT_IF09)
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
51 {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
52 mpi->planes[0]=memalign(64, mpi->bpp*mpi->width*(mpi->height+2)/8+
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
53 mpi->chroma_width*mpi->chroma_height);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
54 /* delta table, just for fun ;) */
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
55 mpi->planes[3]=mpi->planes[0]+2*(mpi->chroma_width*mpi->chroma_height);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
56 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
57 else
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
58 mpi->planes[0]=memalign(64, mpi->bpp*mpi->width*(mpi->height+2)/8);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
59 if(mpi->flags&MP_IMGFLAG_PLANAR){
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
60 // YV12/I420/YVU9/IF09. feel free to add other planar formats here...
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
61 if(!mpi->stride[0]) mpi->stride[0]=mpi->width;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
62 if(!mpi->stride[1]) mpi->stride[1]=mpi->stride[2]=mpi->chroma_width;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
63 if(mpi->flags&MP_IMGFLAG_SWAPPED){
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
64 // I420/IYUV (Y,U,V)
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
65 mpi->planes[1]=mpi->planes[0]+mpi->width*mpi->height;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
66 mpi->planes[2]=mpi->planes[1]+mpi->chroma_width*mpi->chroma_height;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
67 } else {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
68 // YV12,YVU9,IF09 (Y,V,U)
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
69 mpi->planes[2]=mpi->planes[0]+mpi->width*mpi->height;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
70 mpi->planes[1]=mpi->planes[2]+mpi->chroma_width*mpi->chroma_height;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
71 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
72 } else {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
73 if(!mpi->stride[0]) mpi->stride[0]=mpi->width*mpi->bpp/8;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
74 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
75 mpi->flags|=MP_IMGFLAG_ALLOCATED;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
76
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
77 return mpi;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
78 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
79
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
80 void vf_menu_pause_update(struct vf_instance_s* vf) {
22284
83366c8e1928 Fix menu to work with mpctx
uau
parents: 21925
diff changeset
81 vo_functions_t *video_out = mpctx_get_video_out(vf->priv->current->ctx);
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
82 if(pause_mpi) {
17908
dcfaebcdde14 10l (forgot ...)
michael
parents: 16862
diff changeset
83 put_image(vf,pause_mpi, MP_NOPTS_VALUE);
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
84 // Don't draw the osd atm
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
85 //vf->control(vf,VFCTRL_DRAW_OSD,NULL);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
86 video_out->flip_page();
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
87 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
88 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
89
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
90 static int cmd_filter(mp_cmd_t* cmd, int paused, struct vf_priv_s * priv) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
91
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
92 switch(cmd->id) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
93 case MP_CMD_PAUSE :
21818
7bd48682de5f woops, actually fix URL this time
gpoirier
parents: 21813
diff changeset
94 #if 0 // http://lists.mplayerhq.hu/pipermail/mplayer-dev-eng/2003-March/017286.html
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
95 if(!paused && !go2pause) { // Initial pause cmd -> wait the next put_image
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
96 go2pause = 1;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
97 return 1;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
98 }
9903
7d70e56f317a 10l fix by Vladimir Mosgalin <mosgalin@VM10124.spb.edu>
alex
parents: 9755
diff changeset
99 #endif
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
100 if(go2pause == 2) // Msg resent by put_image after saving the image
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
101 go2pause = 0;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
102 break;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
103 case MP_CMD_MENU : { // Convert txt cmd from the users into libmenu stuff
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
104 char* arg = cmd->args[0].v.s;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
105
19489
87c339558bc1 fix menu toggle/hide issues
ben
parents: 17994
diff changeset
106 if(!priv->current->show && !(strcmp(arg,"hide") == 0) )
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
107 priv->current->show = 1;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
108 else if(strcmp(arg,"up") == 0)
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
109 menu_read_cmd(priv->current,MENU_CMD_UP);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
110 else if(strcmp(arg,"down") == 0)
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
111 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
112 else if(strcmp(arg,"left") == 0)
98f4e3704a76 Allow 6 ways (up/down/left/right/ok/cancel) navigation.
albeu
parents: 17908
diff changeset
113 menu_read_cmd(priv->current,MENU_CMD_LEFT);
98f4e3704a76 Allow 6 ways (up/down/left/right/ok/cancel) navigation.
albeu
parents: 17908
diff changeset
114 else if(strcmp(arg,"right") == 0)
98f4e3704a76 Allow 6 ways (up/down/left/right/ok/cancel) navigation.
albeu
parents: 17908
diff changeset
115 menu_read_cmd(priv->current,MENU_CMD_RIGHT);
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
116 else if(strcmp(arg,"ok") == 0)
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
117 menu_read_cmd(priv->current,MENU_CMD_OK);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
118 else if(strcmp(arg,"cancel") == 0)
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
119 menu_read_cmd(priv->current,MENU_CMD_CANCEL);
19489
87c339558bc1 fix menu toggle/hide issues
ben
parents: 17994
diff changeset
120 else if(strcmp(arg,"hide") == 0 || strcmp(arg,"toggle") == 0)
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
121 priv->current->show = 0;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
122 else
17994
6927fabaef92 Part1 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu
reynaldo
parents: 17945
diff changeset
123 mp_msg(MSGT_GLOBAL,MSGL_WARN,MSGTR_LIBMENU_UnknownMenuCommand,arg);
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
124 return 1;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
125 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
126 case MP_CMD_SET_MENU : {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
127 char* menu = cmd->args[0].v.s;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
128 menu_t* l = priv->current;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
129 priv->current = menu_open(menu);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
130 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
131 mp_msg(MSGT_GLOBAL,MSGL_WARN,MSGTR_LIBMENU_FailedToOpenMenu,menu);
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
132 priv->current = l;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
133 priv->current->show = 0;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
134 } else {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
135 priv->current->show = 1;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
136 priv->current->parent = l;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
137 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
138 return 1;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
139 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
140 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
141 return 0;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
142 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
143
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
144 static void get_image(struct vf_instance_s* vf, mp_image_t *mpi){
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
145 mp_image_t *dmpi;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
146
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
147 if(mpi->type == MP_IMGTYPE_TEMP && (!(mpi->flags&MP_IMGFLAG_PRESERVE)) ) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
148 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
149 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
150 memcpy(mpi->stride,dmpi->stride,MP_MAX_PLANES*sizeof(unsigned int));
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
151 mpi->flags|=MP_IMGFLAG_DIRECT;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
152 mpi->priv=(void*)dmpi;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
153 return;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
154 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
155 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
156
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
157 static void key_cb(int code) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
158 menu_read_key(st_priv->current,code);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
159 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
160
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
161
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
162
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
163 inline static void copy_mpi(mp_image_t *dmpi, mp_image_t *mpi) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
164 if(mpi->flags&MP_IMGFLAG_PLANAR){
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
165 memcpy_pic(dmpi->planes[0],mpi->planes[0], mpi->w, mpi->h,
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
166 dmpi->stride[0],mpi->stride[0]);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
167 memcpy_pic(dmpi->planes[1],mpi->planes[1], mpi->chroma_width, mpi->chroma_height,
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
168 dmpi->stride[1],mpi->stride[1]);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
169 memcpy_pic(dmpi->planes[2], mpi->planes[2], mpi->chroma_width, mpi->chroma_height,
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
170 dmpi->stride[2],mpi->stride[2]);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
171 } else {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
172 memcpy_pic(dmpi->planes[0],mpi->planes[0],
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
173 mpi->w*(dmpi->bpp/8), mpi->h,
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
174 dmpi->stride[0],mpi->stride[0]);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
175 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
176 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
177
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
178
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
179
17908
dcfaebcdde14 10l (forgot ...)
michael
parents: 16862
diff changeset
180 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
181 mp_image_t *dmpi = NULL;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
182
21803
3acc4b00bcc6 allows OSD menu to be displayed when using MPEG PES video out
ben
parents: 19489
diff changeset
183 if (vf->priv->passthrough) {
3acc4b00bcc6 allows OSD menu to be displayed when using MPEG PES video out
ben
parents: 19489
diff changeset
184 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
185 0, mpi->w, mpi->h);
3acc4b00bcc6 allows OSD menu to be displayed when using MPEG PES video out
ben
parents: 19489
diff changeset
186 dmpi->planes[0]=mpi->planes[0];
3acc4b00bcc6 allows OSD menu to be displayed when using MPEG PES video out
ben
parents: 19489
diff changeset
187 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
188 }
3acc4b00bcc6 allows OSD menu to be displayed when using MPEG PES video out
ben
parents: 19489
diff changeset
189
8251
3d74366d947e better fix for my previous 10l
colin
parents: 8244
diff changeset
190 if(vf->priv->current->show
3d74366d947e better fix for my previous 10l
colin
parents: 8244
diff changeset
191 || (vf->priv->current->parent && vf->priv->current->parent->show)) {
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
192 // Close all menu who requested it
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
193 while(vf->priv->current->cl && vf->priv->current != vf->priv->root) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
194 menu_t* m = vf->priv->current;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
195 vf->priv->current = m->parent ? m->parent : vf->priv->root;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
196 menu_close(m);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
197 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
198
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
199 // Step 1 : save the picture
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
200 while(go2pause == 1) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
201 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
202 delay ^= 1; // after a seek
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
203 if(!delay) break;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
204
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
205 if(pause_mpi && (mpi->w != pause_mpi->w || mpi->h != pause_mpi->h ||
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
206 mpi->imgfmt != pause_mpi->imgfmt)) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
207 free_mp_image(pause_mpi);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
208 pause_mpi = NULL;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
209 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
210 if(!pause_mpi)
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
211 pause_mpi = alloc_mpi(mpi->w,mpi->h,mpi->imgfmt);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
212 copy_mpi(pause_mpi,mpi);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
213 mp_input_queue_cmd(mp_input_parse_cmd("pause"));
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
214 go2pause = 2;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
215 break;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
216 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
217
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
218 // Grab // Ungrab the keys
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
219 if(!mp_input_key_cb && vf->priv->current->show)
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
220 mp_input_key_cb = key_cb;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
221 if(mp_input_key_cb && !vf->priv->current->show)
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
222 mp_input_key_cb = NULL;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
223
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
224 if(mpi->flags&MP_IMGFLAG_DIRECT)
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
225 dmpi = mpi->priv;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
226 else {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
227 dmpi = vf_get_image(vf->next,mpi->imgfmt,
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
228 MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE,
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
229 mpi->w,mpi->h);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
230 copy_mpi(dmpi,mpi);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
231 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
232 menu_draw(vf->priv->current,dmpi);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
233
8244
64352fb332b6 don't fully-copy the planes if the menu doesn't show (faster)
colin
parents: 8224
diff changeset
234 } else {
64352fb332b6 don't fully-copy the planes if the menu doesn't show (faster)
colin
parents: 8224
diff changeset
235 if(mp_input_key_cb)
64352fb332b6 don't fully-copy the planes if the menu doesn't show (faster)
colin
parents: 8224
diff changeset
236 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
237
422eef67d14a speeds up mplayer execution by over FIVE times when all of the of the following apply:
gpoirier
parents: 21818
diff changeset
238 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
239 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
240 else {
21925
1c93736b6751 fix identation, broken by last commit
gpoirier
parents: 21924
diff changeset
241 dmpi = vf_get_image(vf->next,mpi->imgfmt,
1c93736b6751 fix identation, broken by last commit
gpoirier
parents: 21924
diff changeset
242 MP_IMGTYPE_EXPORT, MP_IMGFLAG_ACCEPT_STRIDE,
1c93736b6751 fix identation, broken by last commit
gpoirier
parents: 21924
diff changeset
243 mpi->w,mpi->h);
8244
64352fb332b6 don't fully-copy the planes if the menu doesn't show (faster)
colin
parents: 8224
diff changeset
244
21925
1c93736b6751 fix identation, broken by last commit
gpoirier
parents: 21924
diff changeset
245 dmpi->stride[0] = mpi->stride[0];
1c93736b6751 fix identation, broken by last commit
gpoirier
parents: 21924
diff changeset
246 dmpi->stride[1] = mpi->stride[1];
1c93736b6751 fix identation, broken by last commit
gpoirier
parents: 21924
diff changeset
247 dmpi->stride[2] = mpi->stride[2];
1c93736b6751 fix identation, broken by last commit
gpoirier
parents: 21924
diff changeset
248 dmpi->planes[0] = mpi->planes[0];
1c93736b6751 fix identation, broken by last commit
gpoirier
parents: 21924
diff changeset
249 dmpi->planes[1] = mpi->planes[1];
1c93736b6751 fix identation, broken by last commit
gpoirier
parents: 21924
diff changeset
250 dmpi->planes[2] = mpi->planes[2];
1c93736b6751 fix identation, broken by last commit
gpoirier
parents: 21924
diff changeset
251 dmpi->priv = mpi->priv;
1c93736b6751 fix identation, broken by last commit
gpoirier
parents: 21924
diff changeset
252 }
21924
422eef67d14a speeds up mplayer execution by over FIVE times when all of the of the following apply:
gpoirier
parents: 21818
diff changeset
253 }
17908
dcfaebcdde14 10l (forgot ...)
michael
parents: 16862
diff changeset
254 return vf_next_put_image(vf,dmpi, pts);
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
255 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
256
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
257 static void uninit(vf_instance_t *vf) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
258 vf->priv=NULL;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
259 if(pause_mpi) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
260 free_mp_image(pause_mpi);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
261 pause_mpi = NULL;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
262 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
263 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
264
8224
fefc56153615 Fix freetype. Freetype is highly recommended for a nice output ;)
albeu
parents: 8197
diff changeset
265 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
266 unsigned int flags, unsigned int outfmt) {
fefc56153615 Fix freetype. Freetype is highly recommended for a nice output ;)
albeu
parents: 8197
diff changeset
267 #ifdef HAVE_FREETYPE
fefc56153615 Fix freetype. Freetype is highly recommended for a nice output ;)
albeu
parents: 8197
diff changeset
268 // 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
269 if (force_load_font) {
fefc56153615 Fix freetype. Freetype is highly recommended for a nice output ;)
albeu
parents: 8197
diff changeset
270 force_load_font = 0;
23338
2a66d95355f0 add new -subfont option, that allows having a different font for OSD (controls and menu) and subtitles
ben
parents: 22284
diff changeset
271 load_font_ft(width,height,&vo_font,font_name);
8224
fefc56153615 Fix freetype. Freetype is highly recommended for a nice output ;)
albeu
parents: 8197
diff changeset
272 }
fefc56153615 Fix freetype. Freetype is highly recommended for a nice output ;)
albeu
parents: 8197
diff changeset
273 #endif
21803
3acc4b00bcc6 allows OSD menu to be displayed when using MPEG PES video out
ben
parents: 19489
diff changeset
274 if(outfmt == IMGFMT_MPEGPES)
3acc4b00bcc6 allows OSD menu to be displayed when using MPEG PES video out
ben
parents: 19489
diff changeset
275 vf->priv->passthrough = 1;
8224
fefc56153615 Fix freetype. Freetype is highly recommended for a nice output ;)
albeu
parents: 8197
diff changeset
276 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
277 }
21803
3acc4b00bcc6 allows OSD menu to be displayed when using MPEG PES video out
ben
parents: 19489
diff changeset
278
3acc4b00bcc6 allows OSD menu to be displayed when using MPEG PES video out
ben
parents: 19489
diff changeset
279 static int query_format(struct vf_instance_s* vf, unsigned int fmt){
3acc4b00bcc6 allows OSD menu to be displayed when using MPEG PES video out
ben
parents: 19489
diff changeset
280 return (vf_next_query_format(vf,fmt));
3acc4b00bcc6 allows OSD menu to be displayed when using MPEG PES video out
ben
parents: 19489
diff changeset
281 }
3acc4b00bcc6 allows OSD menu to be displayed when using MPEG PES video out
ben
parents: 19489
diff changeset
282
23366
b344b6520518 rename some menu open functions, to avoid confusion with libc native open()
ben
parents: 23338
diff changeset
283 static int open_vf(vf_instance_t *vf, char* args){
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
284 if(!st_priv) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
285 st_priv = calloc(1,sizeof(struct vf_priv_s));
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
286 st_priv->root = st_priv->current = menu_open(args);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
287 if(!st_priv->current) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
288 free(st_priv);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
289 st_priv = NULL;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
290 return 0;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
291 }
13344
0d96af97ec00 option to display menu at startup, patch by Aurelien Jacobs <aurel at gnuage.org>
faust3
parents: 10397
diff changeset
292 st_priv->root->show = menu_startup;
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
293 mp_input_add_cmd_filter((mp_input_cmd_filter)cmd_filter,st_priv);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
294 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
295
8224
fefc56153615 Fix freetype. Freetype is highly recommended for a nice output ;)
albeu
parents: 8197
diff changeset
296 vf->config = config;
21803
3acc4b00bcc6 allows OSD menu to be displayed when using MPEG PES video out
ben
parents: 19489
diff changeset
297 vf->query_format=query_format;
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
298 vf->put_image = put_image;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
299 vf->get_image = get_image;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
300 vf->uninit=uninit;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
301 vf->priv=st_priv;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
302 go2pause=0;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
303
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
304 return 1;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
305 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
306
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
307
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
308 vf_info_t vf_info_menu = {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
309 "Internal filter for libmenu",
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
310 "menu",
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
311 "Albeu",
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
312 "",
23366
b344b6520518 rename some menu open functions, to avoid confusion with libc native open()
ben
parents: 23338
diff changeset
313 open_vf,
9755
6b7710f78c32 10L forgot this filter.
albeu
parents: 8635
diff changeset
314 NULL
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
315 };
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
316
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
317
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
318