annotate libmpcodecs/vf_pp.c @ 32142:4614728cab25

build system: Merge all FFmpeg library checks into a single FFmpeg check. There is little point in assuming that some parts of FFmpeg might be available without the others. Plus, mixing and matching static and shared FFmpeg libraries was never supported.
author diego
date Mon, 13 Sep 2010 18:19:25 +0000
parents ed8a577b9a20
children 5d1ad5720b32
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
30421
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
1 /*
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
2 * This file is part of MPlayer.
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
3 *
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
4 * MPlayer is free software; you can redistribute it and/or modify
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
5 * it under the terms of the GNU General Public License as published by
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
6 * the Free Software Foundation; either version 2 of the License, or
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
7 * (at your option) any later version.
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
8 *
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
9 * MPlayer is distributed in the hope that it will be useful,
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
12 * GNU General Public License for more details.
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
13 *
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
14 * You should have received a copy of the GNU General Public License along
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
15 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
17 */
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
18
5512
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
19 #include <stdio.h>
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
20 #include <stdlib.h>
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
21 #include <string.h>
7946
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
22 #include <inttypes.h>
7963
0a5d69e6f2a2 cleanup
michael
parents: 7961
diff changeset
23 #include <errno.h>
5512
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
24
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16471
diff changeset
25 #include "config.h"
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16471
diff changeset
26 #include "mp_msg.h"
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16471
diff changeset
27 #include "cpudetect.h"
5512
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
28
28594
df67d03dde3b Convert HAVE_MALLOC_H into a 0/1 definition, fixes the warning:
diego
parents: 28327
diff changeset
29 #if HAVE_MALLOC_H
8123
9fc45fe0d444 *HUGE* set of compiler warning fixes, unused variables removal
arpi
parents: 8040
diff changeset
30 #include <malloc.h>
9fc45fe0d444 *HUGE* set of compiler warning fixes, unused variables removal
arpi
parents: 8040
diff changeset
31 #endif
9fc45fe0d444 *HUGE* set of compiler warning fixes, unused variables removal
arpi
parents: 8040
diff changeset
32
31979
ed8a577b9a20 Add the proper include instead of declaring the divx_quality variable extern.
diego
parents: 30708
diff changeset
33 #include "dec_video.h"
5607
1972c3475d93 mp_image.h and img_format.h moved to libmpcodecs
arpi
parents: 5565
diff changeset
34 #include "img_format.h"
1972c3475d93 mp_image.h and img_format.h moved to libmpcodecs
arpi
parents: 5565
diff changeset
35 #include "mp_image.h"
5512
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
36 #include "vf.h"
28327
c39a1fd7d45c Fix compilation after DECLARE_ASM_CONST/DECLARE_ALIGNED moving within FFmpeg.
diego
parents: 27341
diff changeset
37 #include "libavutil/internal.h"
18557
b7746166426c libpostproc is not a subdirectory of libavcodec anymore.
diego
parents: 17906
diff changeset
38 #include "libpostproc/postprocess.h"
26068
bfada3b4c366 10l: Revert nonsense commit.
diego
parents: 26066
diff changeset
39
32142
4614728cab25 build system: Merge all FFmpeg library checks into a single FFmpeg check.
diego
parents: 31979
diff changeset
40 #ifdef CONFIG_FFMPEG_A
26069
1318e956c092 FFmpeg now uses different (unified) #include paths.
diego
parents: 26068
diff changeset
41 #define EMU_OLD
26068
bfada3b4c366 10l: Revert nonsense commit.
diego
parents: 26066
diff changeset
42 #include "libpostproc/postprocess_internal.h"
bfada3b4c366 10l: Revert nonsense commit.
diego
parents: 26066
diff changeset
43 #endif
8038
fe30880576dc cleanup
michael
parents: 7985
diff changeset
44
28327
c39a1fd7d45c Fix compilation after DECLARE_ASM_CONST/DECLARE_ALIGNED moving within FFmpeg.
diego
parents: 27341
diff changeset
45 #undef malloc
c39a1fd7d45c Fix compilation after DECLARE_ASM_CONST/DECLARE_ALIGNED moving within FFmpeg.
diego
parents: 27341
diff changeset
46
5512
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
47 struct vf_priv_s {
7946
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
48 int pp;
8040
5241f95b5ec4 cleanup
michael
parents: 8038
diff changeset
49 pp_mode_t *ppMode[PP_QUALITY_MAX+1];
7946
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
50 void *context;
5565
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5519
diff changeset
51 unsigned int outfmt;
5512
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
52 };
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
53
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
54 //===========================================================================//
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
55
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 30638
diff changeset
56 static int config(struct vf_instance *vf,
5565
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5519
diff changeset
57 int width, int height, int d_width, int d_height,
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5519
diff changeset
58 unsigned int voflags, unsigned int outfmt){
8805
e547ce712577 YUV 411/422/444 support for pp
michael
parents: 8736
diff changeset
59 int flags=
7985
1ab37da5b1da per context cpuCaps (idea by kabi)
michael
parents: 7972
diff changeset
60 (gCpuCaps.hasMMX ? PP_CPU_CAPS_MMX : 0)
1ab37da5b1da per context cpuCaps (idea by kabi)
michael
parents: 7972
diff changeset
61 | (gCpuCaps.hasMMX2 ? PP_CPU_CAPS_MMX2 : 0)
8805
e547ce712577 YUV 411/422/444 support for pp
michael
parents: 8736
diff changeset
62 | (gCpuCaps.has3DNow ? PP_CPU_CAPS_3DNOW : 0);
e547ce712577 YUV 411/422/444 support for pp
michael
parents: 8736
diff changeset
63
e547ce712577 YUV 411/422/444 support for pp
michael
parents: 8736
diff changeset
64 switch(outfmt){
e547ce712577 YUV 411/422/444 support for pp
michael
parents: 8736
diff changeset
65 case IMGFMT_444P: flags|= PP_FORMAT_444; break;
e547ce712577 YUV 411/422/444 support for pp
michael
parents: 8736
diff changeset
66 case IMGFMT_422P: flags|= PP_FORMAT_422; break;
e547ce712577 YUV 411/422/444 support for pp
michael
parents: 8736
diff changeset
67 case IMGFMT_411P: flags|= PP_FORMAT_411; break;
e547ce712577 YUV 411/422/444 support for pp
michael
parents: 8736
diff changeset
68 default: flags|= PP_FORMAT_420; break;
e547ce712577 YUV 411/422/444 support for pp
michael
parents: 8736
diff changeset
69 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28594
diff changeset
70
8805
e547ce712577 YUV 411/422/444 support for pp
michael
parents: 8736
diff changeset
71 if(vf->priv->context) pp_free_context(vf->priv->context);
e547ce712577 YUV 411/422/444 support for pp
michael
parents: 8736
diff changeset
72 vf->priv->context= pp_get_context(width, height, flags);
7946
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
73
9528
565015128767 10l (pp cant convert formats) fixes segfault
michael
parents: 9426
diff changeset
74 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
75 }
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5519
diff changeset
76
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 30638
diff changeset
77 static void uninit(struct vf_instance *vf){
8038
fe30880576dc cleanup
michael
parents: 7985
diff changeset
78 int i;
8040
5241f95b5ec4 cleanup
michael
parents: 8038
diff changeset
79 for(i=0; i<=PP_QUALITY_MAX; i++){
8038
fe30880576dc cleanup
michael
parents: 7985
diff changeset
80 if(vf->priv->ppMode[i])
fe30880576dc cleanup
michael
parents: 7985
diff changeset
81 pp_free_mode(vf->priv->ppMode[i]);
fe30880576dc cleanup
michael
parents: 7985
diff changeset
82 }
7961
78e0f2776da7 cosmetics ;)
michael
parents: 7960
diff changeset
83 if(vf->priv->context) pp_free_context(vf->priv->context);
7949
0aedfdc5d6ef fixing segfault
michael
parents: 7946
diff changeset
84 }
0aedfdc5d6ef fixing segfault
michael
parents: 7946
diff changeset
85
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 30638
diff changeset
86 static int query_format(struct vf_instance *vf, unsigned int fmt){
5518
04a40454bdbb accept only 4:2:0 planar yuv formats
arpi
parents: 5514
diff changeset
87 switch(fmt){
04a40454bdbb accept only 4:2:0 planar yuv formats
arpi
parents: 5514
diff changeset
88 case IMGFMT_YV12:
04a40454bdbb accept only 4:2:0 planar yuv formats
arpi
parents: 5514
diff changeset
89 case IMGFMT_I420:
04a40454bdbb accept only 4:2:0 planar yuv formats
arpi
parents: 5514
diff changeset
90 case IMGFMT_IYUV:
8805
e547ce712577 YUV 411/422/444 support for pp
michael
parents: 8736
diff changeset
91 case IMGFMT_444P:
e547ce712577 YUV 411/422/444 support for pp
michael
parents: 8736
diff changeset
92 case IMGFMT_422P:
e547ce712577 YUV 411/422/444 support for pp
michael
parents: 8736
diff changeset
93 case IMGFMT_411P:
e547ce712577 YUV 411/422/444 support for pp
michael
parents: 8736
diff changeset
94 return vf_next_query_format(vf,fmt);
5518
04a40454bdbb accept only 4:2:0 planar yuv formats
arpi
parents: 5514
diff changeset
95 }
04a40454bdbb accept only 4:2:0 planar yuv formats
arpi
parents: 5514
diff changeset
96 return 0;
04a40454bdbb accept only 4:2:0 planar yuv formats
arpi
parents: 5514
diff changeset
97 }
04a40454bdbb accept only 4:2:0 planar yuv formats
arpi
parents: 5514
diff changeset
98
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 30638
diff changeset
99 static int control(struct vf_instance *vf, int request, void* data){
5519
868c13f78f08 vf control codes added, autoq support
arpi
parents: 5518
diff changeset
100 switch(request){
868c13f78f08 vf control codes added, autoq support
arpi
parents: 5518
diff changeset
101 case VFCTRL_QUERY_MAX_PP_LEVEL:
8040
5241f95b5ec4 cleanup
michael
parents: 8038
diff changeset
102 return PP_QUALITY_MAX;
5519
868c13f78f08 vf control codes added, autoq support
arpi
parents: 5518
diff changeset
103 case VFCTRL_SET_PP_LEVEL:
7946
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
104 vf->priv->pp= *((unsigned int*)data);
5519
868c13f78f08 vf control codes added, autoq support
arpi
parents: 5518
diff changeset
105 return CONTROL_TRUE;
868c13f78f08 vf control codes added, autoq support
arpi
parents: 5518
diff changeset
106 }
868c13f78f08 vf control codes added, autoq support
arpi
parents: 5518
diff changeset
107 return vf_next_control(vf,request,data);
868c13f78f08 vf control codes added, autoq support
arpi
parents: 5518
diff changeset
108 }
868c13f78f08 vf control codes added, autoq support
arpi
parents: 5518
diff changeset
109
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 30638
diff changeset
110 static void get_image(struct vf_instance *vf, mp_image_t *mpi){
5512
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
111 if(vf->priv->pp&0xFFFF) return; // non-local filters enabled
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28594
diff changeset
112 if((mpi->type==MP_IMGTYPE_IPB || vf->priv->pp) &&
5513
73696051e3ce mpeg+pp0 fixed
arpi
parents: 5512
diff changeset
113 mpi->flags&MP_IMGFLAG_PRESERVE) return; // don't change
5565
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5519
diff changeset
114 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
115 return; // colorspace differ
5512
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
116 // 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
117 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
118 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
119 mpi->planes[0]=vf->dmpi->planes[0];
7d6a854a5fe5 cleanup, use vf->dmpi rather than vf->priv->dmpi for consistency
rfelker
parents: 9931
diff changeset
120 mpi->stride[0]=vf->dmpi->stride[0];
7d6a854a5fe5 cleanup, use vf->dmpi rather than vf->priv->dmpi for consistency
rfelker
parents: 9931
diff changeset
121 mpi->width=vf->dmpi->width;
5512
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
122 if(mpi->flags&MP_IMGFLAG_PLANAR){
10141
7d6a854a5fe5 cleanup, use vf->dmpi rather than vf->priv->dmpi for consistency
rfelker
parents: 9931
diff changeset
123 mpi->planes[1]=vf->dmpi->planes[1];
7d6a854a5fe5 cleanup, use vf->dmpi rather than vf->priv->dmpi for consistency
rfelker
parents: 9931
diff changeset
124 mpi->planes[2]=vf->dmpi->planes[2];
7d6a854a5fe5 cleanup, use vf->dmpi rather than vf->priv->dmpi for consistency
rfelker
parents: 9931
diff changeset
125 mpi->stride[1]=vf->dmpi->stride[1];
7d6a854a5fe5 cleanup, use vf->dmpi rather than vf->priv->dmpi for consistency
rfelker
parents: 9931
diff changeset
126 mpi->stride[2]=vf->dmpi->stride[2];
5512
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
127 }
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
128 mpi->flags|=MP_IMGFLAG_DIRECT;
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
129 }
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
130
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 30638
diff changeset
131 static int put_image(struct vf_instance *vf, mp_image_t *mpi, double pts){
5512
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
132 if(!(mpi->flags&MP_IMGFLAG_DIRECT)){
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
133 // 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
134 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
135 MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE |
9f516ed86916 pp_postprocess reads from target image, so request a readable one.
reimar
parents: 16018
diff changeset
136 MP_IMGFLAG_PREFER_ALIGNED_STRIDE | MP_IMGFLAG_READABLE,
6875
255b150a75a5 - some reorder/cleanup of mp_image flags
arpi
parents: 5607
diff changeset
137 // MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE,
255b150a75a5 - some reorder/cleanup of mp_image flags
arpi
parents: 5607
diff changeset
138 // mpi->w,mpi->h);
16018
bdf1b4ecb906 use stored dimensions instead of visible one when (vf_)get_image is called
iive
parents: 15965
diff changeset
139 (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
140 vf->dmpi->w=mpi->w; vf->dmpi->h=mpi->h; // display w;h
5512
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
141 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28594
diff changeset
142
5512
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
143 if(vf->priv->pp || !(mpi->flags&MP_IMGFLAG_DIRECT)){
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
144 // do the postprocessing! (or copy if no DR)
7961
78e0f2776da7 cosmetics ;)
michael
parents: 7960
diff changeset
145 pp_postprocess(mpi->planes ,mpi->stride,
10141
7d6a854a5fe5 cleanup, use vf->dmpi rather than vf->priv->dmpi for consistency
rfelker
parents: 9931
diff changeset
146 vf->dmpi->planes,vf->dmpi->stride,
6875
255b150a75a5 - some reorder/cleanup of mp_image flags
arpi
parents: 5607
diff changeset
147 (mpi->w+7)&(~7),mpi->h,
5512
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
148 mpi->qscale, mpi->qstride,
8038
fe30880576dc cleanup
michael
parents: 7985
diff changeset
149 vf->priv->ppMode[ vf->priv->pp ], vf->priv->context,
9931
c4f7ffafb559 support old libavcodec
michael
parents: 9925
diff changeset
150 #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
151 mpi->pict_type | (mpi->qscale_type ? PP_PICT_TYPE_QP2 : 0));
9931
c4f7ffafb559 support old libavcodec
michael
parents: 9925
diff changeset
152 #else
c4f7ffafb559 support old libavcodec
michael
parents: 9925
diff changeset
153 mpi->pict_type);
c4f7ffafb559 support old libavcodec
michael
parents: 9925
diff changeset
154 #endif
5512
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
155 }
17906
20aca9baf5d8 passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents: 17463
diff changeset
156 return vf_next_put_image(vf,vf->dmpi, pts);
5512
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
157 }
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
158
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
159 //===========================================================================//
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
160
30708
8a96d56b01f0 Mark all fmt_list arrays as const.
diego
parents: 30642
diff changeset
161 static const unsigned int fmt_list[]={
5565
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5519
diff changeset
162 IMGFMT_YV12,
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5519
diff changeset
163 IMGFMT_I420,
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5519
diff changeset
164 IMGFMT_IYUV,
8805
e547ce712577 YUV 411/422/444 support for pp
michael
parents: 8736
diff changeset
165 IMGFMT_444P,
e547ce712577 YUV 411/422/444 support for pp
michael
parents: 8736
diff changeset
166 IMGFMT_422P,
e547ce712577 YUV 411/422/444 support for pp
michael
parents: 8736
diff changeset
167 IMGFMT_411P,
7127
1e47c2e7aa8e mostly compiler warning fixes, some small bugfix
arpi
parents: 6875
diff changeset
168 0
5565
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5519
diff changeset
169 };
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5519
diff changeset
170
30638
a7b908875c14 Rename open() vf initialization function to vf_open().
diego
parents: 30633
diff changeset
171 static int vf_open(vf_instance_t *vf, char *args){
7946
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
172 char *endptr, *name;
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
173 int i;
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
174 int hex_mode=0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28594
diff changeset
175
5518
04a40454bdbb accept only 4:2:0 planar yuv formats
arpi
parents: 5514
diff changeset
176 vf->query_format=query_format;
5519
868c13f78f08 vf control codes added, autoq support
arpi
parents: 5518
diff changeset
177 vf->control=control;
5565
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5519
diff changeset
178 vf->config=config;
5512
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
179 vf->get_image=get_image;
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
180 vf->put_image=put_image;
7949
0aedfdc5d6ef fixing segfault
michael
parents: 7946
diff changeset
181 vf->uninit=uninit;
5565
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5519
diff changeset
182 vf->default_caps=VFCAP_ACCEPT_STRIDE|VFCAP_POSTPROC;
5512
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
183 vf->priv=malloc(sizeof(struct vf_priv_s));
7949
0aedfdc5d6ef fixing segfault
michael
parents: 7946
diff changeset
184 vf->priv->context=NULL;
5565
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5519
diff changeset
185
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5519
diff changeset
186 // check csp:
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5519
diff changeset
187 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
188 if(!vf->priv->outfmt) return 0; // no csp match :(
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28594
diff changeset
189
5514
127f2a84e933 accept -pp value from args
arpi
parents: 5513
diff changeset
190 if(args){
7946
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
191 hex_mode= strtol(args, &endptr, 0);
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
192 if(*endptr){
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
193 name= args;
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
194 }else
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
195 name= NULL;
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
196 }else{
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
197 name="de";
5514
127f2a84e933 accept -pp value from args
arpi
parents: 5513
diff changeset
198 }
7972
6d1103afba1c cleanly passing the cpuCaps
michael
parents: 7963
diff changeset
199
8038
fe30880576dc cleanup
michael
parents: 7985
diff changeset
200 #ifdef EMU_OLD
7946
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
201 if(name){
8038
fe30880576dc cleanup
michael
parents: 7985
diff changeset
202 #endif
8040
5241f95b5ec4 cleanup
michael
parents: 8038
diff changeset
203 for(i=0; i<=PP_QUALITY_MAX; i++){
7961
78e0f2776da7 cosmetics ;)
michael
parents: 7960
diff changeset
204 vf->priv->ppMode[i]= pp_get_mode_by_name_and_quality(name, i);
8038
fe30880576dc cleanup
michael
parents: 7985
diff changeset
205 if(vf->priv->ppMode[i]==NULL) return -1;
7946
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
206 }
8038
fe30880576dc cleanup
michael
parents: 7985
diff changeset
207 #ifdef EMU_OLD
7946
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
208 }else{
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
209 /* hex mode for compatibility */
8040
5241f95b5ec4 cleanup
michael
parents: 8038
diff changeset
210 for(i=0; i<=PP_QUALITY_MAX; i++){
8038
fe30880576dc cleanup
michael
parents: 7985
diff changeset
211 PPMode *ppMode;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28594
diff changeset
212
8038
fe30880576dc cleanup
michael
parents: 7985
diff changeset
213 ppMode= (PPMode*)memalign(8, sizeof(PPMode));
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28594
diff changeset
214
8038
fe30880576dc cleanup
michael
parents: 7985
diff changeset
215 ppMode->lumMode= hex_mode;
fe30880576dc cleanup
michael
parents: 7985
diff changeset
216 ppMode->chromMode= ((hex_mode&0xFF)>>4) | (hex_mode&0xFFFFFF00);
fe30880576dc cleanup
michael
parents: 7985
diff changeset
217 ppMode->maxTmpNoise[0]= 700;
fe30880576dc cleanup
michael
parents: 7985
diff changeset
218 ppMode->maxTmpNoise[1]= 1500;
fe30880576dc cleanup
michael
parents: 7985
diff changeset
219 ppMode->maxTmpNoise[2]= 3000;
fe30880576dc cleanup
michael
parents: 7985
diff changeset
220 ppMode->maxAllowedY= 234;
fe30880576dc cleanup
michael
parents: 7985
diff changeset
221 ppMode->minAllowedY= 16;
fe30880576dc cleanup
michael
parents: 7985
diff changeset
222 ppMode->baseDcDiff= 256/4;
fe30880576dc cleanup
michael
parents: 7985
diff changeset
223 ppMode->flatnessThreshold=40;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28594
diff changeset
224
7946
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
225 vf->priv->ppMode[i]= ppMode;
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
226 }
f483ab704252 postprocessing cleanup:
michael
parents: 7368
diff changeset
227 }
8038
fe30880576dc cleanup
michael
parents: 7985
diff changeset
228 #endif
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28594
diff changeset
229
10756
e40dee59f3ba remove read/revert hack
alex
parents: 10141
diff changeset
230 vf->priv->pp=PP_QUALITY_MAX;
5512
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
231 return 1;
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
232 }
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
233
25221
00fff9a3b735 Make all vf_info_t structs const
reimar
parents: 18557
diff changeset
234 const vf_info_t vf_info_pp = {
5512
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
235 "postprocessing",
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
236 "pp",
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
237 "A'rpi",
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
238 "",
30638
a7b908875c14 Rename open() vf initialization function to vf_open().
diego
parents: 30633
diff changeset
239 vf_open,
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9528
diff changeset
240 NULL
5512
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
241 };
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
242
4ccfa77d8e86 postprocessing filter (fixme: -pp 0)
arpi
parents:
diff changeset
243 //===========================================================================//