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

Reply via email to