annotate libmpcodecs/vf_pp.c @ 24576:6704a924d4aa

According to MSDN a thread must call CoUninitialize once for each successful call it has made to CoInitialize or CoInitializeEx, including any call that returns S_FALSE. Only the CoUninitialize call corresponding to the CoInitialize or CoInitializeEx call that initialized the library can close it. patch by Gianluigi Tiesi, mplayer netfarm it
author diego
date Sun, 23 Sep 2007 20:37:33 +0000
parents b7746166426c
children 00fff9a3b735
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5512
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
1 #include <stdio.h>
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
2 #include <stdlib.h>
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
3 #include <string.h>
7946
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
4 #include <inttypes.h>
7963
0a5d69e6f2a2 cleanup
michael
parents: 7961
diff changeset
5 #include <errno.h>
5512
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
6
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16471
diff changeset
7 #include "config.h"
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16471
diff changeset
8 #include "mp_msg.h"
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16471
diff changeset
9 #include "cpudetect.h"
5512
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
10
8123
9fc45fe0d444 *HUGE* set of compiler warning fixes, unused variables removal
arpi
parents: 8040
diff changeset
11 #ifdef HAVE_MALLOC_H
9fc45fe0d444 *HUGE* set of compiler warning fixes, unused variables removal
arpi
parents: 8040
diff changeset
12 #include <malloc.h>
9fc45fe0d444 *HUGE* set of compiler warning fixes, unused variables removal
arpi
parents: 8040
diff changeset
13 #endif
9fc45fe0d444 *HUGE* set of compiler warning fixes, unused variables removal
arpi
parents: 8040
diff changeset
14
5607
1972c3475d93 mp_image.h and img_format.h moved to libmpcodecs
arpi
parents: 5565
diff changeset
15 #include "img_format.h"
1972c3475d93 mp_image.h and img_format.h moved to libmpcodecs
arpi
parents: 5565
diff changeset
16 #include "mp_image.h"
5512
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
17 #include "vf.h"
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
18
9426
c9dcb67e9638 moving postprocess code to libavcodec
michael
parents: 8805
diff changeset
19
17463
b56f34ba3f2f proper support for shared libpostproc
diego
parents: 17012
diff changeset
20 #ifdef USE_LIBPOSTPROC_SO
b56f34ba3f2f proper support for shared libpostproc
diego
parents: 17012
diff changeset
21 #include <postproc/postprocess.h>
b56f34ba3f2f proper support for shared libpostproc
diego
parents: 17012
diff changeset
22 #elif defined(USE_LIBPOSTPROC)
8038
fe30880576dc cleanup
michael
parents: 7985
diff changeset
23 #define EMU_OLD
18557
b7746166426c libpostproc is not a subdirectory of libavcodec anymore.
diego
parents: 17906
diff changeset
24 #include "libpostproc/postprocess.h"
5512
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
25
8038
fe30880576dc cleanup
michael
parents: 7985
diff changeset
26 #ifdef EMU_OLD
18557
b7746166426c libpostproc is not a subdirectory of libavcodec anymore.
diego
parents: 17906
diff changeset
27 #include "libpostproc/postprocess_internal.h"
8038
fe30880576dc cleanup
michael
parents: 7985
diff changeset
28 #endif
17463
b56f34ba3f2f proper support for shared libpostproc
diego
parents: 17012
diff changeset
29 #endif
8038
fe30880576dc cleanup
michael
parents: 7985
diff changeset
30
5512
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
31 struct vf_priv_s {
7946
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
32 int pp;
8040
5241f95b5ec4 cleanup
michael
parents: 8038
diff changeset
33 pp_mode_t *ppMode[PP_QUALITY_MAX+1];
7946
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
34 void *context;
5565
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5519
diff changeset
35 unsigned int outfmt;
5512
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
36 };
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
37
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
38 //===========================================================================//
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
39
5565
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5519
diff changeset
40 static int config(struct vf_instance_s* vf,
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5519
diff changeset
41 int width, int height, int d_width, int d_height,
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5519
diff changeset
42 unsigned int voflags, unsigned int outfmt){
8805
e547ce712577 YUV 411/422/444 support for pp
michael
parents: 8736
diff changeset
43 int flags=
7985
1ab37da5b1da per context cpuCaps (idea by kabi)
michael
parents: 7972
diff changeset
44 (gCpuCaps.hasMMX ? PP_CPU_CAPS_MMX : 0)
1ab37da5b1da per context cpuCaps (idea by kabi)
michael
parents: 7972
diff changeset
45 | (gCpuCaps.hasMMX2 ? PP_CPU_CAPS_MMX2 : 0)
8805
e547ce712577 YUV 411/422/444 support for pp
michael
parents: 8736
diff changeset
46 | (gCpuCaps.has3DNow ? PP_CPU_CAPS_3DNOW : 0);
e547ce712577 YUV 411/422/444 support for pp
michael
parents: 8736
diff changeset
47
e547ce712577 YUV 411/422/444 support for pp
michael
parents: 8736
diff changeset
48 switch(outfmt){
e547ce712577 YUV 411/422/444 support for pp
michael
parents: 8736
diff changeset
49 case IMGFMT_444P: flags|= PP_FORMAT_444; break;
e547ce712577 YUV 411/422/444 support for pp
michael
parents: 8736
diff changeset
50 case IMGFMT_422P: flags|= PP_FORMAT_422; break;
e547ce712577 YUV 411/422/444 support for pp
michael
parents: 8736
diff changeset
51 case IMGFMT_411P: flags|= PP_FORMAT_411; break;
e547ce712577 YUV 411/422/444 support for pp
michael
parents: 8736
diff changeset
52 default: flags|= PP_FORMAT_420; break;
e547ce712577 YUV 411/422/444 support for pp
michael
parents: 8736
diff changeset
53 }
e547ce712577 YUV 411/422/444 support for pp
michael
parents: 8736
diff changeset
54
e547ce712577 YUV 411/422/444 support for pp
michael
parents: 8736
diff changeset
55 if(vf->priv->context) pp_free_context(vf->priv->context);
e547ce712577 YUV 411/422/444 support for pp
michael
parents: 8736
diff changeset
56 vf->priv->context= pp_get_context(width, height, flags);
7946
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
57
9528
565015128767 10l (pp cant convert formats) fixes segfault
michael
parents: 9426
diff changeset
58 return vf_next_config(vf,width,height,d_width,d_height,voflags,outfmt);
5565
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5519
diff changeset
59 }
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5519
diff changeset
60
7949
0aedfdc5d6ef fixing segfault
michael
parents: 7946
diff changeset
61 static void uninit(struct vf_instance_s* vf){
8038
fe30880576dc cleanup
michael
parents: 7985
diff changeset
62 int i;
8040
5241f95b5ec4 cleanup
michael
parents: 8038
diff changeset
63 for(i=0; i<=PP_QUALITY_MAX; i++){
8038
fe30880576dc cleanup
michael
parents: 7985
diff changeset
64 if(vf->priv->ppMode[i])
fe30880576dc cleanup
michael
parents: 7985
diff changeset
65 pp_free_mode(vf->priv->ppMode[i]);
fe30880576dc cleanup
michael
parents: 7985
diff changeset
66 }
7961
78e0f2776da7 cosmetics ;)
michael
parents: 7960
diff changeset
67 if(vf->priv->context) pp_free_context(vf->priv->context);
7949
0aedfdc5d6ef fixing segfault
michael
parents: 7946
diff changeset
68 }
0aedfdc5d6ef fixing segfault
michael
parents: 7946
diff changeset
69
5518
04a40454bdbb accept only 4:2:0 planar yuv formats
arpi
parents: 5514
diff changeset
70 static int query_format(struct vf_instance_s* vf, unsigned int fmt){
04a40454bdbb accept only 4:2:0 planar yuv formats
arpi
parents: 5514
diff changeset
71 switch(fmt){
04a40454bdbb accept only 4:2:0 planar yuv formats
arpi
parents: 5514
diff changeset
72 case IMGFMT_YV12:
04a40454bdbb accept only 4:2:0 planar yuv formats
arpi
parents: 5514
diff changeset
73 case IMGFMT_I420:
04a40454bdbb accept only 4:2:0 planar yuv formats
arpi
parents: 5514
diff changeset
74 case IMGFMT_IYUV:
8805
e547ce712577 YUV 411/422/444 support for pp
michael
parents: 8736
diff changeset
75 case IMGFMT_444P:
e547ce712577 YUV 411/422/444 support for pp
michael
parents: 8736
diff changeset
76 case IMGFMT_422P:
e547ce712577 YUV 411/422/444 support for pp
michael
parents: 8736
diff changeset
77 case IMGFMT_411P:
e547ce712577 YUV 411/422/444 support for pp
michael
parents: 8736
diff changeset
78 return vf_next_query_format(vf,fmt);
5518
04a40454bdbb accept only 4:2:0 planar yuv formats
arpi
parents: 5514
diff changeset
79 }
04a40454bdbb accept only 4:2:0 planar yuv formats
arpi
parents: 5514
diff changeset
80 return 0;
04a40454bdbb accept only 4:2:0 planar yuv formats
arpi
parents: 5514
diff changeset
81 }
04a40454bdbb accept only 4:2:0 planar yuv formats
arpi
parents: 5514
diff changeset
82
5519
868c13f78f08 vf control codes added, autoq support
arpi
parents: 5518
diff changeset
83 static int control(struct vf_instance_s* vf, int request, void* data){
868c13f78f08 vf control codes added, autoq support
arpi
parents: 5518
diff changeset
84 switch(request){
868c13f78f08 vf control codes added, autoq support
arpi
parents: 5518
diff changeset
85 case VFCTRL_QUERY_MAX_PP_LEVEL:
8040
5241f95b5ec4 cleanup
michael
parents: 8038
diff changeset
86 return PP_QUALITY_MAX;
5519
868c13f78f08 vf control codes added, autoq support
arpi
parents: 5518
diff changeset
87 case VFCTRL_SET_PP_LEVEL:
7946
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
88 vf->priv->pp= *((unsigned int*)data);
5519
868c13f78f08 vf control codes added, autoq support
arpi
parents: 5518
diff changeset
89 return CONTROL_TRUE;
868c13f78f08 vf control codes added, autoq support
arpi
parents: 5518
diff changeset
90 }
868c13f78f08 vf control codes added, autoq support
arpi
parents: 5518
diff changeset
91 return vf_next_control(vf,request,data);
868c13f78f08 vf control codes added, autoq support
arpi
parents: 5518
diff changeset
92 }
868c13f78f08 vf control codes added, autoq support
arpi
parents: 5518
diff changeset
93
5512
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
94 static void get_image(struct vf_instance_s* vf, mp_image_t *mpi){
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
95 if(vf->priv->pp&0xFFFF) return; // non-local filters enabled
5513
73696051e3ce mpeg+pp0 fixed
arpi
parents: 5512
diff changeset
96 if((mpi->type==MP_IMGTYPE_IPB || vf->priv->pp) &&
73696051e3ce mpeg+pp0 fixed
arpi
parents: 5512
diff changeset
97 mpi->flags&MP_IMGFLAG_PRESERVE) return; // don't change
5565
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5519
diff changeset
98 if(!(mpi->flags&MP_IMGFLAG_ACCEPT_STRIDE) && mpi->imgfmt!=vf->priv->outfmt)
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5519
diff changeset
99 return; // colorspace differ
5512
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
100 // ok, we can do pp in-place (or pp disabled):
10141
7d6a854a5fe5 cleanup, use vf->dmpi rather than vf->priv->dmpi for consistency
rfelker
parents: 9931
diff changeset
101 vf->dmpi=vf_get_image(vf->next,mpi->imgfmt,
16018
bdf1b4ecb906 use stored dimensions instead of visible one when (vf_)get_image is called
iive
parents: 15965
diff changeset
102 mpi->type, mpi->flags | MP_IMGFLAG_READABLE, mpi->width, mpi->height);
10141
7d6a854a5fe5 cleanup, use vf->dmpi rather than vf->priv->dmpi for consistency
rfelker
parents: 9931
diff changeset
103 mpi->planes[0]=vf->dmpi->planes[0];
7d6a854a5fe5 cleanup, use vf->dmpi rather than vf->priv->dmpi for consistency
rfelker
parents: 9931
diff changeset
104 mpi->stride[0]=vf->dmpi->stride[0];
7d6a854a5fe5 cleanup, use vf->dmpi rather than vf->priv->dmpi for consistency
rfelker
parents: 9931
diff changeset
105 mpi->width=vf->dmpi->width;
5512
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
106 if(mpi->flags&MP_IMGFLAG_PLANAR){
10141
7d6a854a5fe5 cleanup, use vf->dmpi rather than vf->priv->dmpi for consistency
rfelker
parents: 9931
diff changeset
107 mpi->planes[1]=vf->dmpi->planes[1];
7d6a854a5fe5 cleanup, use vf->dmpi rather than vf->priv->dmpi for consistency
rfelker
parents: 9931
diff changeset
108 mpi->planes[2]=vf->dmpi->planes[2];
7d6a854a5fe5 cleanup, use vf->dmpi rather than vf->priv->dmpi for consistency
rfelker
parents: 9931
diff changeset
109 mpi->stride[1]=vf->dmpi->stride[1];
7d6a854a5fe5 cleanup, use vf->dmpi rather than vf->priv->dmpi for consistency
rfelker
parents: 9931
diff changeset
110 mpi->stride[2]=vf->dmpi->stride[2];
5512
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
111 }
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
112 mpi->flags|=MP_IMGFLAG_DIRECT;
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
113 }
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
114
17906
20aca9baf5d8 passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents: 17463
diff changeset
115 static int put_image(struct vf_instance_s* vf, mp_image_t *mpi, double pts){
5512
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
116 if(!(mpi->flags&MP_IMGFLAG_DIRECT)){
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
117 // no DR, so get a new image! hope we'll get DR buffer:
10141
7d6a854a5fe5 cleanup, use vf->dmpi rather than vf->priv->dmpi for consistency
rfelker
parents: 9931
diff changeset
118 vf->dmpi=vf_get_image(vf->next,mpi->imgfmt,
16471
9f516ed86916 pp_postprocess reads from target image, so request a readable one.
reimar
parents: 16018
diff changeset
119 MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE |
9f516ed86916 pp_postprocess reads from target image, so request a readable one.
reimar
parents: 16018
diff changeset
120 MP_IMGFLAG_PREFER_ALIGNED_STRIDE | MP_IMGFLAG_READABLE,
6875
255b150a75a5 - some reorder/cleanup of mp_image flags
arpi
parents: 5607
diff changeset
121 // MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE,
255b150a75a5 - some reorder/cleanup of mp_image flags
arpi
parents: 5607
diff changeset
122 // mpi->w,mpi->h);
16018
bdf1b4ecb906 use stored dimensions instead of visible one when (vf_)get_image is called
iive
parents: 15965
diff changeset
123 (mpi->width+7)&(~7),(mpi->height+7)&(~7));
10141
7d6a854a5fe5 cleanup, use vf->dmpi rather than vf->priv->dmpi for consistency
rfelker
parents: 9931
diff changeset
124 vf->dmpi->w=mpi->w; vf->dmpi->h=mpi->h; // display w;h
5512
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
125 }
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
126
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
127 if(vf->priv->pp || !(mpi->flags&MP_IMGFLAG_DIRECT)){
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
128 // do the postprocessing! (or copy if no DR)
7961
78e0f2776da7 cosmetics ;)
michael
parents: 7960
diff changeset
129 pp_postprocess(mpi->planes ,mpi->stride,
10141
7d6a854a5fe5 cleanup, use vf->dmpi rather than vf->priv->dmpi for consistency
rfelker
parents: 9931
diff changeset
130 vf->dmpi->planes,vf->dmpi->stride,
6875
255b150a75a5 - some reorder/cleanup of mp_image flags
arpi
parents: 5607
diff changeset
131 (mpi->w+7)&(~7),mpi->h,
5512
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
132 mpi->qscale, mpi->qstride,
8038
fe30880576dc cleanup
michael
parents: 7985
diff changeset
133 vf->priv->ppMode[ vf->priv->pp ], vf->priv->context,
9931
c4f7ffafb559 support old libavcodec
michael
parents: 9925
diff changeset
134 #ifdef PP_PICT_TYPE_QP2
9925
420640a0f6d0 passing qscale_type around so the pp code can fix the mpeg2 <<1 thing
michael
parents: 9593
diff changeset
135 mpi->pict_type | (mpi->qscale_type ? PP_PICT_TYPE_QP2 : 0));
9931
c4f7ffafb559 support old libavcodec
michael
parents: 9925
diff changeset
136 #else
c4f7ffafb559 support old libavcodec
michael
parents: 9925
diff changeset
137 mpi->pict_type);
c4f7ffafb559 support old libavcodec
michael
parents: 9925
diff changeset
138 #endif
5512
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
139 }
17906
20aca9baf5d8 passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents: 17463
diff changeset
140 return vf_next_put_image(vf,vf->dmpi, pts);
5512
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
141 }
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
142
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
143 //===========================================================================//
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
144
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
145 extern int divx_quality;
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
146
5565
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5519
diff changeset
147 static unsigned int fmt_list[]={
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5519
diff changeset
148 IMGFMT_YV12,
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5519
diff changeset
149 IMGFMT_I420,
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5519
diff changeset
150 IMGFMT_IYUV,
8805
e547ce712577 YUV 411/422/444 support for pp
michael
parents: 8736
diff changeset
151 IMGFMT_444P,
e547ce712577 YUV 411/422/444 support for pp
michael
parents: 8736
diff changeset
152 IMGFMT_422P,
e547ce712577 YUV 411/422/444 support for pp
michael
parents: 8736
diff changeset
153 IMGFMT_411P,
7127
1e47c2e7aa8e mostly compiler warning fixes, some small bugfix
arpi
parents: 6875
diff changeset
154 0
5565
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5519
diff changeset
155 };
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5519
diff changeset
156
5512
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
157 static int open(vf_instance_t *vf, char* args){
7946
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
158 char *endptr, *name;
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
159 int i;
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
160 int hex_mode=0;
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
161
5518
04a40454bdbb accept only 4:2:0 planar yuv formats
arpi
parents: 5514
diff changeset
162 vf->query_format=query_format;
5519
868c13f78f08 vf control codes added, autoq support
arpi
parents: 5518
diff changeset
163 vf->control=control;
5565
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5519
diff changeset
164 vf->config=config;
5512
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
165 vf->get_image=get_image;
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
166 vf->put_image=put_image;
7949
0aedfdc5d6ef fixing segfault
michael
parents: 7946
diff changeset
167 vf->uninit=uninit;
5565
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5519
diff changeset
168 vf->default_caps=VFCAP_ACCEPT_STRIDE|VFCAP_POSTPROC;
5512
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
169 vf->priv=malloc(sizeof(struct vf_priv_s));
7949
0aedfdc5d6ef fixing segfault
michael
parents: 7946
diff changeset
170 vf->priv->context=NULL;
5565
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5519
diff changeset
171
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5519
diff changeset
172 // check csp:
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5519
diff changeset
173 vf->priv->outfmt=vf_match_csp(&vf->next,fmt_list,IMGFMT_YV12);
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5519
diff changeset
174 if(!vf->priv->outfmt) return 0; // no csp match :(
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5519
diff changeset
175
5514
127f2a84e933 accept -pp value from args
arpi
parents: 5513
diff changeset
176 if(args){
7946
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
177 hex_mode= strtol(args, &endptr, 0);
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
178 if(*endptr){
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
179 name= args;
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
180 }else
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
181 name= NULL;
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
182 }else{
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
183 name="de";
5514
127f2a84e933 accept -pp value from args
arpi
parents: 5513
diff changeset
184 }
7972
6d1103afba1c cleanly passing the cpuCaps
michael
parents: 7963
diff changeset
185
8038
fe30880576dc cleanup
michael
parents: 7985
diff changeset
186 #ifdef EMU_OLD
7946
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
187 if(name){
8038
fe30880576dc cleanup
michael
parents: 7985
diff changeset
188 #endif
8040
5241f95b5ec4 cleanup
michael
parents: 8038
diff changeset
189 for(i=0; i<=PP_QUALITY_MAX; i++){
7961
78e0f2776da7 cosmetics ;)
michael
parents: 7960
diff changeset
190 vf->priv->ppMode[i]= pp_get_mode_by_name_and_quality(name, i);
8038
fe30880576dc cleanup
michael
parents: 7985
diff changeset
191 if(vf->priv->ppMode[i]==NULL) return -1;
7946
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
192 }
8038
fe30880576dc cleanup
michael
parents: 7985
diff changeset
193 #ifdef EMU_OLD
7946
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
194 }else{
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
195 /* hex mode for compatibility */
8040
5241f95b5ec4 cleanup
michael
parents: 8038
diff changeset
196 for(i=0; i<=PP_QUALITY_MAX; i++){
8038
fe30880576dc cleanup
michael
parents: 7985
diff changeset
197 PPMode *ppMode;
fe30880576dc cleanup
michael
parents: 7985
diff changeset
198
fe30880576dc cleanup
michael
parents: 7985
diff changeset
199 ppMode= (PPMode*)memalign(8, sizeof(PPMode));
7946
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
200
8038
fe30880576dc cleanup
michael
parents: 7985
diff changeset
201 ppMode->lumMode= hex_mode;
fe30880576dc cleanup
michael
parents: 7985
diff changeset
202 ppMode->chromMode= ((hex_mode&0xFF)>>4) | (hex_mode&0xFFFFFF00);
fe30880576dc cleanup
michael
parents: 7985
diff changeset
203 ppMode->maxTmpNoise[0]= 700;
fe30880576dc cleanup
michael
parents: 7985
diff changeset
204 ppMode->maxTmpNoise[1]= 1500;
fe30880576dc cleanup
michael
parents: 7985
diff changeset
205 ppMode->maxTmpNoise[2]= 3000;
fe30880576dc cleanup
michael
parents: 7985
diff changeset
206 ppMode->maxAllowedY= 234;
fe30880576dc cleanup
michael
parents: 7985
diff changeset
207 ppMode->minAllowedY= 16;
fe30880576dc cleanup
michael
parents: 7985
diff changeset
208 ppMode->baseDcDiff= 256/4;
fe30880576dc cleanup
michael
parents: 7985
diff changeset
209 ppMode->flatnessThreshold=40;
7946
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
210
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
211 vf->priv->ppMode[i]= ppMode;
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
212 }
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
213 }
8038
fe30880576dc cleanup
michael
parents: 7985
diff changeset
214 #endif
7946
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
215
10756
e40dee59f3ba remove read/revert hack
alex
parents: 10141
diff changeset
216 vf->priv->pp=PP_QUALITY_MAX;
5512
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
217 return 1;
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
218 }
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
219
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
220 vf_info_t vf_info_pp = {
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
221 "postprocessing",
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
222 "pp",
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
223 "A'rpi",
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
224 "",
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9528
diff changeset
225 open,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9528
diff changeset
226 NULL
5512
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
227 };
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
228
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
229 //===========================================================================//
9426
c9dcb67e9638 moving postprocess code to libavcodec
michael
parents: 8805
diff changeset
230