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 //===========================================================================//