[Mplayer-cvslog] CVS: main/libmpcodecs vf_tfields.c,1.2,1.3
Richard Felker CVS
rfelker at mplayerhq.hu
Mon Apr 28 04:54:20 CEST 2003
Update of /cvsroot/mplayer/main/libmpcodecs
In directory mail:/var/tmp.root/cvs-serv5280/libmpcodecs
Modified Files:
vf_tfields.c
Log Message:
new mode for tfields filter -- shifts fields by a quarter-pixel so the
output picture doesn't bob up and down :)
Index: vf_tfields.c
===================================================================
RCS file: /cvsroot/mplayer/main/libmpcodecs/vf_tfields.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- vf_tfields.c 15 Mar 2003 18:01:02 -0000 1.2
+++ vf_tfields.c 28 Apr 2003 02:53:50 -0000 1.3
@@ -56,6 +56,29 @@
}
}
+static void qpelup(unsigned char *d, unsigned char *s, int w, int h, int ds, int ss)
+{
+ int i, j;
+ memcpy(d, s, w);
+ for (i=h-1; i; i--) {
+ d += ds;
+ s += ss;
+ for (j=0; j<w; j++)
+ d[j] = (s[j-ss] + 3*s[j])>>2;
+ }
+}
+
+static void qpeldown(unsigned char *d, unsigned char *s, int w, int h, int ds, int ss)
+{
+ int i, j;
+ for (i=h-1; i; i--) {
+ for (j=0; j<w; j++)
+ d[j] = (3*s[j] + s[j+ss])>>2;
+ d += ds;
+ s += ss;
+ }
+ memcpy(d, s, w);
+}
static int put_image(struct vf_instance_s* vf, mp_image_t *mpi)
@@ -128,6 +151,33 @@
mpi->chroma_width, mpi->chroma_height, 1);
}
return vf_next_put_image(vf, dmpi) || ret;
+ case 2:
+ dmpi = vf_get_image(vf->next, mpi->imgfmt,
+ MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE,
+ mpi->width, mpi->height/2);
+ qpeldown(dmpi->planes[0], mpi->planes[0], mpi->w, mpi->h/2,
+ dmpi->stride[0], mpi->stride[0]*2);
+ if (mpi->flags & MP_IMGFLAG_PLANAR) {
+ qpeldown(dmpi->planes[1], mpi->planes[1],
+ mpi->chroma_width, mpi->chroma_height/2,
+ dmpi->stride[1], mpi->stride[1]*2);
+ qpeldown(dmpi->planes[2], mpi->planes[2],
+ mpi->chroma_width, mpi->chroma_height/2,
+ dmpi->stride[2], mpi->stride[2]*2);
+ }
+ ret = vf_next_put_image(vf, dmpi);
+
+ qpelup(dmpi->planes[0], mpi->planes[0] + mpi->stride[0],
+ mpi->w, mpi->h/2, dmpi->stride[0], mpi->stride[0]*2);
+ if (mpi->flags & MP_IMGFLAG_PLANAR) {
+ qpelup(dmpi->planes[1], mpi->planes[1] + mpi->stride[1],
+ mpi->chroma_width, mpi->chroma_height/2,
+ dmpi->stride[1], mpi->stride[1]*2);
+ qpelup(dmpi->planes[2], mpi->planes[2] + mpi->stride[2],
+ mpi->chroma_width, mpi->chroma_height/2,
+ dmpi->stride[2], mpi->stride[2]*2);
+ }
+ return vf_next_put_image(vf, dmpi) || ret;
}
return 0;
}
@@ -150,6 +200,7 @@
{
switch (vf->priv->mode) {
case 0:
+ case 2:
return vf_next_config(vf,width,height/2,d_width,d_height,flags,outfmt);
case 1:
return vf_next_config(vf,width,height,d_width,d_height,flags,outfmt);
More information about the MPlayer-cvslog
mailing list