Mercurial > mplayer.hg
comparison libmpcodecs/vf_pp.c @ 5512:4ccfa77d8e86
postprocessing filter (fixme: -pp 0)
author | arpi |
---|---|
date | Sun, 07 Apr 2002 03:20:41 +0000 |
parents | |
children | 73696051e3ce |
comparison
equal
deleted
inserted
replaced
5511:7a24a067f0af | 5512:4ccfa77d8e86 |
---|---|
1 #include <stdio.h> | |
2 #include <stdlib.h> | |
3 #include <string.h> | |
4 | |
5 #include "../config.h" | |
6 #include "../mp_msg.h" | |
7 | |
8 #include "../mp_image.h" | |
9 #include "vf.h" | |
10 | |
11 #include "../postproc/postprocess.h" | |
12 | |
13 struct vf_priv_s { | |
14 unsigned int pp; | |
15 mp_image_t *dmpi; | |
16 }; | |
17 | |
18 //===========================================================================// | |
19 | |
20 static void get_image(struct vf_instance_s* vf, mp_image_t *mpi){ | |
21 if(vf->priv->pp&0xFFFF) return; // non-local filters enabled | |
22 if(vf->priv->pp && mpi->flags&MP_IMGFLAG_PRESERVE) return; // don't change | |
23 // ok, we can do pp in-place (or pp disabled): | |
24 vf->priv->dmpi=vf_get_image(vf->next,mpi->imgfmt, | |
25 mpi->type, mpi->flags, mpi->w, mpi->h); | |
26 mpi->planes[0]=vf->priv->dmpi->planes[0]; | |
27 mpi->stride[0]=vf->priv->dmpi->stride[0]; | |
28 mpi->width=vf->priv->dmpi->width; | |
29 if(mpi->flags&MP_IMGFLAG_PLANAR){ | |
30 mpi->planes[1]=vf->priv->dmpi->planes[1]; | |
31 mpi->planes[2]=vf->priv->dmpi->planes[2]; | |
32 mpi->stride[1]=vf->priv->dmpi->stride[1]; | |
33 mpi->stride[2]=vf->priv->dmpi->stride[2]; | |
34 } | |
35 mpi->flags|=MP_IMGFLAG_DIRECT; | |
36 } | |
37 | |
38 static void put_image(struct vf_instance_s* vf, mp_image_t *mpi){ | |
39 if(!(mpi->flags&MP_IMGFLAG_DIRECT)){ | |
40 // no DR, so get a new image! hope we'll get DR buffer: | |
41 vf->priv->dmpi=vf_get_image(vf->next,mpi->imgfmt, | |
42 MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE|MP_IMGFLAG_ALIGNED_STRIDE, | |
43 mpi->w,mpi->h); | |
44 } | |
45 | |
46 if(vf->priv->pp || !(mpi->flags&MP_IMGFLAG_DIRECT)){ | |
47 // do the postprocessing! (or copy if no DR) | |
48 postprocess(mpi->planes,mpi->stride[0], | |
49 vf->priv->dmpi->planes,vf->priv->dmpi->stride[0], | |
50 mpi->w,mpi->h, | |
51 mpi->qscale, mpi->qstride, | |
52 vf->priv->pp); | |
53 } | |
54 | |
55 vf_next_put_image(vf,vf->priv->dmpi); | |
56 } | |
57 | |
58 //===========================================================================// | |
59 | |
60 extern int divx_quality; | |
61 | |
62 static int open(vf_instance_t *vf, char* args){ | |
63 vf->get_image=get_image; | |
64 vf->put_image=put_image; | |
65 vf->priv=malloc(sizeof(struct vf_priv_s)); | |
66 vf->priv->pp=divx_quality; | |
67 return 1; | |
68 } | |
69 | |
70 vf_info_t vf_info_pp = { | |
71 "postprocessing", | |
72 "pp", | |
73 "A'rpi", | |
74 "", | |
75 open | |
76 }; | |
77 | |
78 //===========================================================================// |