vf_expand: remove OSD support

It's not clear why this video filter supported OSD rendering.
The manpage says:
    "Can be used for placing subtitles/OSD in the resulting black bands."
But every single VO already does this if vf_expand adds black borders.
This feature is 100% pointless.
This commit is contained in:
wm4 2012-08-15 22:33:24 +02:00
parent 0e7cf9518a
commit 43bd4ab3a2
3 changed files with 4 additions and 140 deletions

View File

@ -53,42 +53,9 @@ crop[=w:h:x:y]
<x>,<y>
Position of the cropped picture, defaults to center.
cropdetect[=limit:round[:reset]]
Calculates necessary cropping parameters and prints the recommended
parameters to stdout.
<limit>
Threshold, which can be optionally specified from nothing (0) to
everything (255) (default: 24).
<round>
Value which the width/height should be divisible by (default: 16). The
offset is automatically adjusted to center the video. Use 2 to get
only even dimensions (needed for 4:2:2 video). 16 is best when
encoding to most video codecs.
<reset>
Counter that determines after how many frames cropdetect will reset
the previously detected largest video area and start over to detect
the current optimal crop area (default: 0). This can be useful when
channel logos distort the video area. 0 indicates never reset and
return the largest area encountered during playback.
rectangle[=w:h:x:y]
Draws a rectangle of the requested width and height at the specified
coordinates over the image and prints current rectangle parameters to the
console. This can be used to find optimal cropping parameters. If you bind
the ``input.conf`` directive 'change_rectangle' to keystrokes, you can
move and resize the rectangle on the fly.
<w>,<h>
width and height (default: -1, maximum possible width where boundaries
are still visible.)
<x>,<y>
top left corner position (default: -1, uppermost leftmost)
expand[=w:h:x:y:osd:aspect:round]
expand[=w:h:x:y:aspect:round]
Expands (not scales) movie resolution to the given value and places the
unscaled original at coordinates x, y. Can be used for placing
subtitles/OSD in the resulting black bands.
unscaled original at coordinates x, y.
<w>,<h>
Expanded width,height (default: original width,height). Negative
@ -102,12 +69,6 @@ expand[=w:h:x:y:osd:aspect:round]
<x>,<y>
position of original image on the expanded image (default: center)
<osd>
OSD/subtitle rendering
:0: disable (default)
:1: enable
<aspect>
Expands to fit an aspect instead of a resolution (default: 0).

View File

@ -16,8 +16,6 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#define OSD_SUPPORT
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@ -34,11 +32,6 @@
#include "libvo/fastmemcpy.h"
#include "libavutil/avutil.h"
#ifdef OSD_SUPPORT
#include "sub/sub.h"
#include "libvo/osd.h"
#endif
#include "m_option.h"
#include "m_struct.h"
@ -52,79 +45,21 @@ static struct vf_priv_s {
int cfg_exp_x, cfg_exp_y;
int exp_w,exp_h;
int exp_x,exp_y;
int osd_enabled;
double aspect;
int round;
int passthrough;
int first_slice;
struct osd_state *osd;
} const vf_priv_dflt = {
-1,-1,
-1,-1,
-1,-1,
-1,-1,
0,
0.,
1,
0,
0
};
//===========================================================================//
#ifdef OSD_SUPPORT
static void draw_func(void *ctx, int x0,int y0, int w,int h,unsigned char* src, unsigned char *srca, int stride){
struct vf_instance *vf = ctx;
unsigned char* dst;
if(w<=0 || h<=0) return; // nothing to do...
// printf("OSD redraw: %d;%d %dx%d \n",x0,y0,w,h);
dst=vf->dmpi->planes[0]+
vf->dmpi->stride[0]*y0+
(vf->dmpi->bpp>>3)*x0;
switch(vf->dmpi->imgfmt){
case IMGFMT_BGR12:
case IMGFMT_RGB12:
vo_draw_alpha_rgb12(w, h, src, srca, stride, dst, vf->dmpi->stride[0]);
break;
case IMGFMT_BGR15:
case IMGFMT_RGB15:
vo_draw_alpha_rgb15(w,h,src,srca,stride,dst,vf->dmpi->stride[0]);
break;
case IMGFMT_BGR16:
case IMGFMT_RGB16:
vo_draw_alpha_rgb16(w,h,src,srca,stride,dst,vf->dmpi->stride[0]);
break;
case IMGFMT_BGR24:
case IMGFMT_RGB24:
vo_draw_alpha_rgb24(w,h,src,srca,stride,dst,vf->dmpi->stride[0]);
break;
case IMGFMT_BGR32:
case IMGFMT_RGB32:
vo_draw_alpha_rgb32(w,h,src,srca,stride,dst,vf->dmpi->stride[0]);
break;
case IMGFMT_YV12:
case IMGFMT_I420:
case IMGFMT_IYUV:
case IMGFMT_YVU9:
case IMGFMT_IF09:
case IMGFMT_Y800:
case IMGFMT_Y8:
vo_draw_alpha_yv12(w,h,src,srca,stride,dst,vf->dmpi->stride[0]);
break;
case IMGFMT_YUY2:
vo_draw_alpha_yuy2(w,h,src,srca,stride,dst,vf->dmpi->stride[0]);
break;
case IMGFMT_UYVY:
vo_draw_alpha_yuy2(w,h,src,srca,stride,dst+1,vf->dmpi->stride[0]);
break;
}
}
static void draw_osd(struct vf_instance *vf,int w,int h){
osd_draw_text(vf->priv->osd, vf->priv->exp_w,vf->priv->exp_h,draw_func,vf);
}
#endif
//===========================================================================//
static int config(struct vf_instance *vf,
@ -204,14 +139,6 @@ static int config(struct vf_instance *vf,
static void get_image(struct vf_instance *vf, mp_image_t *mpi){
// if(mpi->type==MP_IMGTYPE_IPB) return; // not yet working
#ifdef OSD_SUPPORT
if(vf->priv->osd_enabled && (mpi->flags&MP_IMGFLAG_PRESERVE)){
// check if we have to render osd!
osd_update(vf->priv->osd, vf->priv->exp_w, vf->priv->exp_h);
if(vo_osd_check_range_update(vf->priv->exp_x,vf->priv->exp_y,
vf->priv->exp_x+mpi->w,vf->priv->exp_y+mpi->h)) return;
}
#endif
if(vf->priv->exp_w==mpi->width ||
(mpi->flags&(MP_IMGFLAG_ACCEPT_STRIDE|MP_IMGFLAG_ACCEPT_WIDTH)) ){
// try full DR !
@ -345,9 +272,6 @@ static int put_image(struct vf_instance *vf, mp_image_t *mpi, double pts){
if(!vf->dmpi) { mp_tmsg(MSGT_VFILTER, MSGL_WARN, "Why do we get NULL??\n"); return 0; }
mpi->priv=NULL;
clear_borders(vf,mpi->w,mpi->h);
#ifdef OSD_SUPPORT
if(vf->priv->osd_enabled) draw_osd(vf,mpi->w,mpi->h);
#endif
// we've used DR, so we're ready...
if(!(mpi->flags&MP_IMGFLAG_PLANAR))
vf->dmpi->planes[1] = mpi->planes[1]; // passthrough rgb8 palette
@ -381,25 +305,12 @@ static int put_image(struct vf_instance *vf, mp_image_t *mpi, double pts){
vf->dmpi->planes[1] = mpi->planes[1]; // passthrough rgb8 palette
}
clear_borders(vf,mpi->w,mpi->h);
#ifdef OSD_SUPPORT
if(vf->priv->osd_enabled) draw_osd(vf,mpi->w,mpi->h);
#endif
return vf_next_put_image(vf,vf->dmpi, pts);
}
//===========================================================================//
static int control(struct vf_instance *vf, int request, void* data){
#ifdef OSD_SUPPORT
switch(request){
case VFCTRL_SET_OSD_OBJ:
vf->priv->osd = data;
break;
case VFCTRL_DRAW_OSD:
if(vf->priv->osd_enabled) return CONTROL_TRUE;
break;
}
#endif
return vf_next_control(vf,request,data);
}
@ -415,16 +326,13 @@ static int vf_open(vf_instance_t *vf, char *args){
vf->draw_slice=draw_slice;
vf->get_image=get_image;
vf->put_image=put_image;
mp_msg(MSGT_VFILTER, MSGL_INFO, "Expand: %d x %d, %d ; %d, osd: %d, aspect: %f, round: %d\n",
mp_msg(MSGT_VFILTER, MSGL_INFO, "Expand: %d x %d, %d ; %d, aspect: %f, round: %d\n",
vf->priv->cfg_exp_w,
vf->priv->cfg_exp_h,
vf->priv->cfg_exp_x,
vf->priv->cfg_exp_y,
vf->priv->osd_enabled,
vf->priv->aspect,
vf->priv->round);
if (vf->priv->osd_enabled)
vf->default_caps = VFCAP_OSD_FILTER;
return 1;
}
@ -434,7 +342,6 @@ static m_option_t vf_opts_fields[] = {
{"h", ST_OFF(cfg_exp_h), CONF_TYPE_INT, 0, 0 ,0, NULL},
{"x", ST_OFF(cfg_exp_x), CONF_TYPE_INT, M_OPT_MIN, -1, 0, NULL},
{"y", ST_OFF(cfg_exp_y), CONF_TYPE_INT, M_OPT_MIN, -1, 0, NULL},
{"osd", ST_OFF(osd_enabled), CONF_TYPE_FLAG, 0 , 0, 1, NULL},
{"aspect", ST_OFF(aspect), CONF_TYPE_DOUBLE, M_OPT_MIN, 0, 0, NULL},
{"round", ST_OFF(round), CONF_TYPE_INT, M_OPT_MIN, 1, 0, NULL},
{ NULL, NULL, 0, 0, 0, 0, NULL }
@ -450,11 +357,7 @@ static const m_struct_t vf_opts = {
const vf_info_t vf_info_expand = {
#ifdef OSD_SUPPORT
"expanding & osd",
#else
"expanding",
#endif
"expand",
"A'rpi",
"",

View File

@ -2443,7 +2443,7 @@ static double update_video(struct MPContext *mpctx)
struct sh_video *sh_video = mpctx->sh_video;
struct vo *video_out = mpctx->video_out;
sh_video->vfilter->control(sh_video->vfilter, VFCTRL_SET_OSD_OBJ,
mpctx->osd); // hack for vf_expand
mpctx->osd); // for vf_ass
if (!mpctx->opts.correct_pts)
return update_video_nocorrect_pts(mpctx);