[FFmpeg-devel] [PATCH] lavfi: add xbr filter
arwa arif
arwaarif1994 at gmail.com
Sun Oct 26 19:58:35 CET 2014
1. I think I understood what is giving you segmentation fault. The mask
that I am creating is going out of bounds for the boundary pixels. I will
try to fix it. But, I am curious why is it working on my laptop?
2. Thank you Clement for the mode part. It made the code look smaller.
Also, I chose numbers instead of alphabets because I was initially
accessing the required values by considering the numbers as indices of a
matrix. If you want, I can convert it to alphabets instead.
3. I think 4x can be done fast enough, but 3x will take time.
4. I tried reading the hqx code, I am not very sure with what they have
done in init part. It will be grateful if you can maybe explain the
algorithm or maybe provide me with a link which explicitly explains it.
On Sun, Oct 26, 2014 at 8:44 PM, Clément Bœsch <u at pkh.me> wrote:
> On Sun, Oct 26, 2014 at 02:51:48PM +0530, arwa arif wrote:
> [...]
> > +/**
> > +* Mixes a pixel A, with pixel B, with B's transperancy set to 'a'
> > +* In other words, A is a solid color (bottom) and B is a transparent
> color (top)
> > +**/
> > +static int mix(AVFrame *in,int x1,int y1,int x2,int y2,int a,int mode){
>
> > + /*If red color*/
> > + int col1,col2;
> > + if(mode==0){
> > + col1 = *(in->data[0] + y1 * in->linesize[0] + x1*3);
> > + col2 = *(in->data[0] + y2 * in->linesize[0] + x2*3);
> > + }
> > +
> > + /*If green color*/
> > + else if(mode==1){
> > + col1 = *(in->data[0] + y1 * in->linesize[0] + x1*3 + 1);
> > + col2 = *(in->data[0] + y2 * in->linesize[0] + x2*3 + 1);
> > + }
> > +
> > + /*If blue color*/
> > + else{
> > + col1 = *(in->data[0] + y1 * in->linesize[0] + x1*3 + 2);
> > + col2 = *(in->data[0] + y2 * in->linesize[0] + x2*3 + 2);
> > + }
>
> All of this can be probably be simplified to:
>
> const int col1 = in->data[0][y1 * in->linesize[0] + x1*3 + mode];
> const int col2 = in->data[0][y2 * in->linesize[0] + x2*3 + mode];
>
> And "mode" is badly named, "layer", "color" or "channel" would be more
> appropriate.
>
> [...]
> > +/**
> > +* Applies the xBR filter rules.
> > +**/
> > +static void apply_edge_detection_rules(AVFrame *in,AVFrame *out,int
> x,int y){
> > +
> > + /* Matrix: (10 is 0,0 i.e: current pixel)
> > + -2 | -1| 0| +1| +2 (x)
> > + ______________________________
> > + -2 | [ 0][ 1][ 2]
> > + -1 | [ 3][ 4][ 5][ 6][ 7]
> > + 0 | [ 8][ 9][10][11][12]
> > + +1 | [13][14][15][16][17]
> > + +2 | [18][19][20]
> > + |(y)|
>
> Why are the spaces totally broken here?
>
> Unless I'm mistaken, you want this:
>
> -2 | -1| 0| +1| +2
> +----------------------> (x)
> -2 | [ 0][ 1][ 2]
> -1 | [ 3][ 4][ 5][ 6][ 7]
> 0 | [ 8][ 9][10][11][12]
> +1 | [13][14][15][16][17]
> +2 | [18][19][20]
> |
> (y) v
>
> And then my question becomes: why don't you pick the original naming with
> the letters as in the specs?
>
> [...]
>
> --
> Clément B.
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
>
More information about the ffmpeg-devel
mailing list