Mercurial > mplayer.hg
annotate libmpcodecs/vf_qp.c @ 36920:40ad45360c8a
Replace old item 'potmeter' by new item 'pimage'.
Recent versions of the X11/GTK GUI didn't allow to control a potmeter,
because that didn't seem to make any sense.
In order to get rid of the confusing potmeter that doesn't distinguish
from a hpotmeter and in order to allow the more useful behaviour recent
versions of the X11/GTK GUI have been utilized (and because we're still
supporting item 'potmeter' for reasons of compatibility with old skins),
introduce new item 'pimage' that reuses most of the current potmeter
code.
Additionally, remove remaining code and documentation of 'potmeter'.
author | ib |
---|---|
date | Mon, 17 Mar 2014 12:29:46 +0000 |
parents | d206960484fe |
children |
rev | line source |
---|---|
11921 | 1 /* |
26727 | 2 * Copyright (C) 2004 Michael Niedermayer <michaelni@gmx.at> |
3 * | |
4 * This file is part of MPlayer. | |
5 * | |
6 * MPlayer is free software; you can redistribute it and/or modify | |
7 * it under the terms of the GNU General Public License as published by | |
8 * the Free Software Foundation; either version 2 of the License, or | |
9 * (at your option) any later version. | |
10 * | |
11 * MPlayer is distributed in the hope that it will be useful, | |
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 * GNU General Public License for more details. | |
15 * | |
16 * You should have received a copy of the GNU General Public License along | |
17 * with MPlayer; if not, write to the Free Software Foundation, Inc., | |
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | |
19 */ | |
11921 | 20 |
21 #include <stdio.h> | |
22 #include <stdlib.h> | |
23 #include <string.h> | |
24 #include <math.h> | |
25 #include <inttypes.h> | |
26 | |
17012 | 27 #include "mp_msg.h" |
28 #include "cpudetect.h" | |
24974
6f05850b5fd1
Rearrange headers to get rid of an #undef and remove unnecessary headers.
diego
parents:
24972
diff
changeset
|
29 #include "img_format.h" |
6f05850b5fd1
Rearrange headers to get rid of an #undef and remove unnecessary headers.
diego
parents:
24972
diff
changeset
|
30 #include "mp_image.h" |
6f05850b5fd1
Rearrange headers to get rid of an #undef and remove unnecessary headers.
diego
parents:
24972
diff
changeset
|
31 #include "vf.h" |
6f05850b5fd1
Rearrange headers to get rid of an #undef and remove unnecessary headers.
diego
parents:
24972
diff
changeset
|
32 #include "libvo/fastmemcpy.h" |
11921 | 33 |
17012 | 34 #include "libavcodec/avcodec.h" |
31256 | 35 #include "libavutil/eval.h" |
35712
d206960484fe
Add a number of missing libavutil header #includes.
diego
parents:
33232
diff
changeset
|
36 #include "libavutil/mem.h" |
16677
044b85964c05
Compilation fix for systems lacking lrintf like e.g. NetBSD.
diego
parents:
11923
diff
changeset
|
37 |
11921 | 38 |
39 struct vf_priv_s { | |
32702
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
40 char eq[200]; |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
41 int8_t *qp; |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
42 int8_t lut[257]; |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
43 int qp_stride; |
11921 | 44 }; |
45 | |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30638
diff
changeset
|
46 static int config(struct vf_instance *vf, |
11921 | 47 int width, int height, int d_width, int d_height, |
32702
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
48 unsigned int flags, unsigned int outfmt){ |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
49 int h= (height+15)>>4; |
11921 | 50 int i; |
51 | |
32702
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
52 vf->priv->qp_stride= (width+15)>>4; |
16677
044b85964c05
Compilation fix for systems lacking lrintf like e.g. NetBSD.
diego
parents:
11923
diff
changeset
|
53 vf->priv->qp= av_malloc(vf->priv->qp_stride*h*sizeof(int8_t)); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29087
diff
changeset
|
54 |
11921 | 55 for(i=-129; i<128; i++){ |
56 double const_values[]={ | |
57 M_PI, | |
58 M_E, | |
59 i != -129, | |
60 i, | |
61 0 | |
62 }; | |
63 static const char *const_names[]={ | |
64 "PI", | |
65 "E", | |
66 "known", | |
67 "qp", | |
68 NULL | |
69 }; | |
31130
d1f5069bef25
Fix compilation broken by FFmpeg-r23201 that changed the api of error logging.
iive
parents:
30989
diff
changeset
|
70 double temp_val; |
32702
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
71 int res; |
11921 | 72 |
33232 | 73 res= av_expr_parse_and_eval(&temp_val, vf->priv->eq, const_names, const_values, NULL, NULL, NULL, NULL, NULL, 0, NULL); |
31130
d1f5069bef25
Fix compilation broken by FFmpeg-r23201 that changed the api of error logging.
iive
parents:
30989
diff
changeset
|
74 |
31233 | 75 if (res < 0){ |
31130
d1f5069bef25
Fix compilation broken by FFmpeg-r23201 that changed the api of error logging.
iive
parents:
30989
diff
changeset
|
76 mp_msg(MSGT_VFILTER, MSGL_ERR, "qp: Error evaluating \"%s\" \n", vf->priv->eq); |
d1f5069bef25
Fix compilation broken by FFmpeg-r23201 that changed the api of error logging.
iive
parents:
30989
diff
changeset
|
77 return 0; |
d1f5069bef25
Fix compilation broken by FFmpeg-r23201 that changed the api of error logging.
iive
parents:
30989
diff
changeset
|
78 } |
d1f5069bef25
Fix compilation broken by FFmpeg-r23201 that changed the api of error logging.
iive
parents:
30989
diff
changeset
|
79 vf->priv->lut[i+129]= lrintf(temp_val); |
11921 | 80 } |
81 | |
32702
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
82 return vf_next_config(vf,width,height,d_width,d_height,flags,outfmt); |
11921 | 83 } |
84 | |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30638
diff
changeset
|
85 static void get_image(struct vf_instance *vf, mp_image_t *mpi){ |
11921 | 86 if(mpi->flags&MP_IMGFLAG_PRESERVE) return; // don't change |
87 // ok, we can do pp in-place (or pp disabled): | |
88 vf->dmpi=vf_get_image(vf->next,mpi->imgfmt, | |
89 mpi->type, mpi->flags, mpi->w, mpi->h); | |
90 mpi->planes[0]=vf->dmpi->planes[0]; | |
91 mpi->stride[0]=vf->dmpi->stride[0]; | |
92 mpi->width=vf->dmpi->width; | |
93 if(mpi->flags&MP_IMGFLAG_PLANAR){ | |
94 mpi->planes[1]=vf->dmpi->planes[1]; | |
95 mpi->planes[2]=vf->dmpi->planes[2]; | |
32702
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
96 mpi->stride[1]=vf->dmpi->stride[1]; |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
97 mpi->stride[2]=vf->dmpi->stride[2]; |
11921 | 98 } |
99 mpi->flags|=MP_IMGFLAG_DIRECT; | |
100 } | |
101 | |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30638
diff
changeset
|
102 static int put_image(struct vf_instance *vf, mp_image_t *mpi, double pts){ |
32702
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
103 mp_image_t *dmpi; |
11921 | 104 int x,y; |
105 | |
32702
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
106 if(!(mpi->flags&MP_IMGFLAG_DIRECT)){ |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
107 // no DR, so get a new image! hope we'll get DR buffer: |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
108 vf->dmpi=vf_get_image(vf->next,mpi->imgfmt, |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
109 MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE|MP_IMGFLAG_PREFER_ALIGNED_STRIDE, |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
110 mpi->w,mpi->h); |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
111 } |
11921 | 112 |
32702
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
113 dmpi= vf->dmpi; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29087
diff
changeset
|
114 |
32702
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
115 if(!(mpi->flags&MP_IMGFLAG_DIRECT)){ |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
116 memcpy_pic(dmpi->planes[0], mpi->planes[0], mpi->w, mpi->h, dmpi->stride[0], mpi->stride[0]); |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
117 if(mpi->flags&MP_IMGFLAG_PLANAR){ |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
118 memcpy_pic(dmpi->planes[1], mpi->planes[1], mpi->w>>mpi->chroma_x_shift, mpi->h>>mpi->chroma_y_shift, dmpi->stride[1], mpi->stride[1]); |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
119 memcpy_pic(dmpi->planes[2], mpi->planes[2], mpi->w>>mpi->chroma_x_shift, mpi->h>>mpi->chroma_y_shift, dmpi->stride[2], mpi->stride[2]); |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
120 } |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
121 } |
11921 | 122 vf_clone_mpi_attributes(dmpi, mpi); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29087
diff
changeset
|
123 |
11921 | 124 dmpi->qscale = vf->priv->qp; |
125 dmpi->qstride= vf->priv->qp_stride; | |
126 if(mpi->qscale){ | |
127 for(y=0; y<((dmpi->h+15)>>4); y++){ | |
128 for(x=0; x<vf->priv->qp_stride; x++){ | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29087
diff
changeset
|
129 dmpi->qscale[x + dmpi->qstride*y]= |
11921 | 130 vf->priv->lut[ 129 + ((int8_t)mpi->qscale[x + mpi->qstride*y]) ]; |
131 } | |
132 } | |
133 }else{ | |
134 int qp= vf->priv->lut[0]; | |
135 for(y=0; y<((dmpi->h+15)>>4); y++){ | |
136 for(x=0; x<vf->priv->qp_stride; x++){ | |
137 dmpi->qscale[x + dmpi->qstride*y]= qp; | |
138 } | |
139 } | |
140 } | |
141 | |
32702
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
142 return vf_next_put_image(vf,dmpi, pts); |
11921 | 143 } |
144 | |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30638
diff
changeset
|
145 static void uninit(struct vf_instance *vf){ |
32702
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
146 if(!vf->priv) return; |
11921 | 147 |
32702
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
148 av_free(vf->priv->qp); |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
149 vf->priv->qp= NULL; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29087
diff
changeset
|
150 |
32702
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
151 av_free(vf->priv); |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
152 vf->priv=NULL; |
11921 | 153 } |
154 | |
155 //===========================================================================// | |
30638
a7b908875c14
Rename open() vf initialization function to vf_open().
diego
parents:
29263
diff
changeset
|
156 static int vf_open(vf_instance_t *vf, char *args){ |
11921 | 157 vf->config=config; |
158 vf->put_image=put_image; | |
159 vf->get_image=get_image; | |
160 vf->uninit=uninit; | |
16677
044b85964c05
Compilation fix for systems lacking lrintf like e.g. NetBSD.
diego
parents:
11923
diff
changeset
|
161 vf->priv=av_malloc(sizeof(struct vf_priv_s)); |
11921 | 162 memset(vf->priv, 0, sizeof(struct vf_priv_s)); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29087
diff
changeset
|
163 |
11921 | 164 // avcodec_init(); |
165 | |
166 if (args) strncpy(vf->priv->eq, args, 199); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29087
diff
changeset
|
167 |
11921 | 168 return 1; |
169 } | |
170 | |
25221 | 171 const vf_info_t vf_info_qp = { |
11921 | 172 "QP changer", |
173 "qp", | |
174 "Michael Niedermayer", | |
175 "", | |
30638
a7b908875c14
Rename open() vf initialization function to vf_open().
diego
parents:
29263
diff
changeset
|
176 vf_open, |
11921 | 177 NULL |
178 }; |