mirror of https://github.com/mpv-player/mpv
allows OSD menu to be displayed when using MPEG PES video out
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@21821 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
5028a513dd
commit
fde73bb200
|
@ -37,6 +37,7 @@ int attribute_used menu_startup = 0;
|
||||||
struct vf_priv_s {
|
struct vf_priv_s {
|
||||||
menu_t* root;
|
menu_t* root;
|
||||||
menu_t* current;
|
menu_t* current;
|
||||||
|
int passthrough;
|
||||||
};
|
};
|
||||||
|
|
||||||
static int put_image(struct vf_instance_s* vf, mp_image_t *mpi, double pts);
|
static int put_image(struct vf_instance_s* vf, mp_image_t *mpi, double pts);
|
||||||
|
@ -178,6 +179,13 @@ inline static void copy_mpi(mp_image_t *dmpi, mp_image_t *mpi) {
|
||||||
static int put_image(struct vf_instance_s* vf, mp_image_t *mpi, double pts){
|
static int put_image(struct vf_instance_s* vf, mp_image_t *mpi, double pts){
|
||||||
mp_image_t *dmpi = NULL;
|
mp_image_t *dmpi = NULL;
|
||||||
|
|
||||||
|
if (vf->priv->passthrough) {
|
||||||
|
dmpi=vf_get_image(vf->next, IMGFMT_MPEGPES, MP_IMGTYPE_EXPORT,
|
||||||
|
0, mpi->w, mpi->h);
|
||||||
|
dmpi->planes[0]=mpi->planes[0];
|
||||||
|
return vf_next_put_image(vf,dmpi, pts);
|
||||||
|
}
|
||||||
|
|
||||||
if(vf->priv->current->show
|
if(vf->priv->current->show
|
||||||
|| (vf->priv->current->parent && vf->priv->current->parent->show)) {
|
|| (vf->priv->current->parent && vf->priv->current->parent->show)) {
|
||||||
// Close all menu who requested it
|
// Close all menu who requested it
|
||||||
|
@ -257,8 +265,15 @@ static int config(struct vf_instance_s* vf, int width, int height, int d_width,
|
||||||
load_font_ft(width,height);
|
load_font_ft(width,height);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
if(outfmt == IMGFMT_MPEGPES)
|
||||||
|
vf->priv->passthrough = 1;
|
||||||
return vf_next_config(vf,width,height,d_width,d_height,flags,outfmt);
|
return vf_next_config(vf,width,height,d_width,d_height,flags,outfmt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int query_format(struct vf_instance_s* vf, unsigned int fmt){
|
||||||
|
return (vf_next_query_format(vf,fmt));
|
||||||
|
}
|
||||||
|
|
||||||
static int open(vf_instance_t *vf, char* args){
|
static int open(vf_instance_t *vf, char* args){
|
||||||
if(!st_priv) {
|
if(!st_priv) {
|
||||||
st_priv = calloc(1,sizeof(struct vf_priv_s));
|
st_priv = calloc(1,sizeof(struct vf_priv_s));
|
||||||
|
@ -273,6 +288,7 @@ static int open(vf_instance_t *vf, char* args){
|
||||||
}
|
}
|
||||||
|
|
||||||
vf->config = config;
|
vf->config = config;
|
||||||
|
vf->query_format=query_format;
|
||||||
vf->put_image = put_image;
|
vf->put_image = put_image;
|
||||||
vf->get_image = get_image;
|
vf->get_image = get_image;
|
||||||
vf->uninit=uninit;
|
vf->uninit=uninit;
|
||||||
|
|
|
@ -31,6 +31,7 @@ static struct vf_priv_s {
|
||||||
double aspect;
|
double aspect;
|
||||||
int round;
|
int round;
|
||||||
unsigned char* fb_ptr;
|
unsigned char* fb_ptr;
|
||||||
|
int passthrough;
|
||||||
int first_slice;
|
int first_slice;
|
||||||
} vf_priv_dflt = {
|
} vf_priv_dflt = {
|
||||||
-1,-1,
|
-1,-1,
|
||||||
|
@ -39,6 +40,7 @@ static struct vf_priv_s {
|
||||||
0.,
|
0.,
|
||||||
1,
|
1,
|
||||||
NULL,
|
NULL,
|
||||||
|
0,
|
||||||
0
|
0
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -170,6 +172,10 @@ static void draw_osd(struct vf_instance_s* vf_,int w,int h){
|
||||||
static int config(struct vf_instance_s* vf,
|
static int config(struct vf_instance_s* vf,
|
||||||
int width, int height, int d_width, int d_height,
|
int width, int height, int d_width, int d_height,
|
||||||
unsigned int flags, unsigned int outfmt){
|
unsigned int flags, unsigned int outfmt){
|
||||||
|
if(outfmt == IMGFMT_MPEGPES) {
|
||||||
|
vf->priv->passthrough = 1;
|
||||||
|
return vf_next_config(vf,width,height,d_width,d_height,flags,outfmt);
|
||||||
|
}
|
||||||
if (outfmt == IMGFMT_IF09) return 0;
|
if (outfmt == IMGFMT_IF09) return 0;
|
||||||
// calculate the missing parameters:
|
// calculate the missing parameters:
|
||||||
#if 0
|
#if 0
|
||||||
|
@ -332,6 +338,13 @@ static void draw_slice(struct vf_instance_s* vf,
|
||||||
}
|
}
|
||||||
|
|
||||||
static int put_image(struct vf_instance_s* vf, mp_image_t *mpi, double pts){
|
static int put_image(struct vf_instance_s* vf, mp_image_t *mpi, double pts){
|
||||||
|
if (vf->priv->passthrough) {
|
||||||
|
mp_image_t *dmpi = vf_get_image(vf->next, IMGFMT_MPEGPES,
|
||||||
|
MP_IMGTYPE_EXPORT, 0, mpi->w, mpi->h);
|
||||||
|
dmpi->planes[0]=mpi->planes[0];
|
||||||
|
return vf_next_put_image(vf,dmpi, pts);
|
||||||
|
}
|
||||||
|
|
||||||
if(mpi->flags&MP_IMGFLAG_DIRECT || mpi->flags&MP_IMGFLAG_DRAW_CALLBACK){
|
if(mpi->flags&MP_IMGFLAG_DIRECT || mpi->flags&MP_IMGFLAG_DRAW_CALLBACK){
|
||||||
vf->dmpi=mpi->priv;
|
vf->dmpi=mpi->priv;
|
||||||
if(!vf->dmpi) { mp_msg(MSGT_VFILTER, MSGL_WARN, MSGTR_MPCODECS_FunWhydowegetNULL); return 0; }
|
if(!vf->dmpi) { mp_msg(MSGT_VFILTER, MSGL_WARN, MSGTR_MPCODECS_FunWhydowegetNULL); return 0; }
|
||||||
|
@ -389,9 +402,14 @@ static int control(struct vf_instance_s* vf, int request, void* data){
|
||||||
return vf_next_control(vf,request,data);
|
return vf_next_control(vf,request,data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int query_format(struct vf_instance_s* vf, unsigned int fmt){
|
||||||
|
return (vf_next_query_format(vf,fmt));
|
||||||
|
}
|
||||||
|
|
||||||
static int open(vf_instance_t *vf, char* args){
|
static int open(vf_instance_t *vf, char* args){
|
||||||
vf->config=config;
|
vf->config=config;
|
||||||
vf->control=control;
|
vf->control=control;
|
||||||
|
vf->query_format=query_format;
|
||||||
vf->start_slice=start_slice;
|
vf->start_slice=start_slice;
|
||||||
vf->draw_slice=draw_slice;
|
vf->draw_slice=draw_slice;
|
||||||
vf->get_image=get_image;
|
vf->get_image=get_image;
|
||||||
|
|
Loading…
Reference in New Issue