[Mplayer-cvslog] CVS: main/libmpcodecs vf_pullup.c,1.2,1.3
Richard Felker CVS
rfelker at mplayerhq.hu
Mon Sep 1 04:54:39 CEST 2003
Update of /cvsroot/mplayer/main/libmpcodecs
In directory mail:/var/tmp.root/cvs-serv13710/libmpcodecs
Modified Files:
vf_pullup.c
Log Message:
direct render frames whose fields are not in a common buffer, rather
than repacking them together and exporting. slight performance boost.
Index: vf_pullup.c
===================================================================
RCS file: /cvsroot/mplayer/main/libmpcodecs/vf_pullup.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- vf_pullup.c 31 Aug 2003 19:56:13 -0000 1.2
+++ vf_pullup.c 1 Sep 2003 02:54:06 -0000 1.3
@@ -93,8 +93,6 @@
mpi->flags |= MP_IMGFLAG_DIRECT;
mpi->flags &= ~MP_IMGFLAG_DRAW_CALLBACK;
-
- //mpi->width = mpi->stride[0];
}
static int put_image(struct vf_instance_s* vf, mp_image_t *mpi)
@@ -133,7 +131,6 @@
p = mpi->fields & MP_IMGFIELD_TOP_FIRST ? 0 :
(mpi->fields & MP_IMGFIELD_ORDERED ? 1 : 0);
- //printf("p=%d\n", p);
pullup_submit_field(c, b, p);
pullup_submit_field(c, b, p^1);
if (mpi->fields & MP_IMGFIELD_REPEAT_FIRST)
@@ -158,16 +155,40 @@
}
/* If the frame isn't already exportable... */
- if (!f->buffer) {
- /* FIXME: DR disabled for now */
- if (0) {
- dmpi = vf_get_image(vf->next, mpi->imgfmt,
- MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE,
- mpi->width, mpi->height);
- /* FIXME: draw into DR buffer */
- return vf_next_put_image(vf, dmpi);
+ while (!f->buffer) {
+ dmpi = vf_get_image(vf->next, mpi->imgfmt,
+ MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE,
+ mpi->width, mpi->height);
+ /* FIXME: Is it ok to discard dmpi if it's not direct? */
+ if (!(dmpi->flags & MP_IMGFLAG_DIRECT)) {
+ pullup_pack_frame(c, f);
+ break;
+ }
+ /* Direct render fields into output buffer */
+ p = f->parity;
+ my_memcpy_pic(dmpi->planes[0], f->fields[p]->planes[0],
+ mpi->w, mpi->h/2, dmpi->stride[0]*2, c->stride[0]*2);
+ my_memcpy_pic(dmpi->planes[0] + dmpi->stride[0],
+ f->fields[p^1]->planes[0] + c->stride[0],
+ mpi->w, mpi->h/2, dmpi->stride[0]*2, c->stride[0]*2);
+ if (mpi->flags & MP_IMGFLAG_PLANAR) {
+ my_memcpy_pic(dmpi->planes[1], f->fields[p]->planes[1],
+ mpi->chroma_width, mpi->chroma_height/2,
+ dmpi->stride[1]*2, c->stride[1]*2);
+ my_memcpy_pic(dmpi->planes[1] + dmpi->stride[1],
+ f->fields[p^1]->planes[1] + c->stride[1],
+ mpi->chroma_width, mpi->chroma_height/2,
+ dmpi->stride[1]*2, c->stride[1]*2);
+ my_memcpy_pic(dmpi->planes[2], f->fields[p]->planes[2],
+ mpi->chroma_width, mpi->chroma_height/2,
+ dmpi->stride[2]*2, c->stride[2]*2);
+ my_memcpy_pic(dmpi->planes[2] + dmpi->stride[2],
+ f->fields[p^1]->planes[2] + c->stride[2],
+ mpi->chroma_width, mpi->chroma_height/2,
+ dmpi->stride[2]*2, c->stride[2]*2);
}
- pullup_pack_frame(c, f);
+ pullup_release_frame(f);
+ return vf_next_put_image(vf, dmpi);
}
dmpi = vf_get_image(vf->next, mpi->imgfmt,
MP_IMGTYPE_EXPORT, MP_IMGFLAG_ACCEPT_STRIDE,
More information about the MPlayer-cvslog
mailing list