Hi, On Thu, Apr 21, 2011 at 3:59 PM, Ronald S. Bultje <rsbul...@gmail.com> wrote: > Hi, > > On Wed, Apr 20, 2011 at 3:45 PM, Anton Khirnov <an...@khirnov.net> wrote: >> From: Michael Niedermayer <michae...@gmx.at> >> >> Signed-off-by: Michael Niedermayer <michae...@gmx.at> >> Signed-off-by: Anton Khirnov <an...@khirnov.net> >> --- >> libavfilter/vf_drawtext.c | 10 ++++++---- >> 1 files changed, 6 insertions(+), 4 deletions(-) >> >> diff --git a/libavfilter/vf_drawtext.c b/libavfilter/vf_drawtext.c >> index fa6b7fd..7b503f5 100644 >> --- a/libavfilter/vf_drawtext.c >> +++ b/libavfilter/vf_drawtext.c >> @@ -385,12 +385,14 @@ static int config_input(AVFilterLink *inlink) >> >> #define SET_PIXEL_YUV(picref, yuva_color, val, x, y, hsub, vsub) { >> \ >> luma_pos = ((x) ) + ((y) ) * picref->linesize[0]; \ >> - chroma_pos1 = ((x) >> (hsub)) + ((y) >> (vsub)) * picref->linesize[1]; \ >> - chroma_pos2 = ((x) >> (hsub)) + ((y) >> (vsub)) * picref->linesize[2]; \ >> alpha = yuva_color[3] * (val) * 129; \ >> picref->data[0][luma_pos] = (alpha * yuva_color[0] + (255*255*129 - >> alpha) * picref->data[0][luma_pos] ) >> 23; \ >> - picref->data[1][chroma_pos1] = (alpha * yuva_color[1] + (255*255*129 - >> alpha) * picref->data[1][chroma_pos1]) >> 23; \ >> - picref->data[2][chroma_pos2] = (alpha * yuva_color[2] + (255*255*129 - >> alpha) * picref->data[2][chroma_pos2]) >> 23; \ >> + if(((x) & ((1<<(hsub))-1))==0 && ((y) & ((1<<(vsub))-1))==0){\ >> + chroma_pos1 = ((x) >> (hsub)) + ((y) >> (vsub)) * >> picref->linesize[1]; \ >> + chroma_pos2 = ((x) >> (hsub)) + ((y) >> (vsub)) * >> picref->linesize[2]; \ >> + picref->data[1][chroma_pos1] = (alpha * yuva_color[1] + >> (255*255*129 - alpha) * picref->data[1][chroma_pos1]) >> 23; \ >> + picref->data[2][chroma_pos2] = (alpha * yuva_color[2] + >> (255*255*129 - alpha) * picref->data[2][chroma_pos2]) >> 23; \ >> + }\ > > This patch may optimize, but the big issue is that it loses 3/4 of > chroma information when drawing the U/V planes in 420P. That may be > optimal performance-wise, but isn't a great idea quality-wise.
I think the better thing to do is to accept it for now. Stefano: for your TODO list, please add an item to fix chroma subsampling for these type of filters. Swscale also suffers from this kind of stuff, it leads to quite awful artifacts that are easy to spot, and not hard to fix. Ronald _______________________________________________ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel