On Sun, May 11, 2008 at 09:55:18PM +0200, Vitor Sessak wrote:
> Michael Niedermayer wrote:
> > On Sun, May 11, 2008 at 12:47:20PM +0100, vmrsss wrote:
> >> Hi Michael,
> >>
> >>    Sorry, I need some clarification.
> >>
> >> On 11 May 2008, at 12:15, Michael Niedermayer wrote:
> >>>>  double a;               // required aspect
> >>> remove all aspect related code, you dont know what you are doing.
> >>> read about pixel vs display aspect ratio
> >> I am happy to remove aspect related code, I agree it is not  
> >> particularly useful. The idea is taken from mplayer and is to expand  
> >> the frame to fit a specific ratio instead of giving size. Upon  
> > 
> > hmm, i think i misunderstood the code, maybe it is useful to keep,
> > have you tested it?
> > 
> > 
> >> reflection, I agree with your remark (because I do understand pixel vs  
> >> aspect ratio very well :-)
> >>
> >>>>    /* copy slice (y, y+h) from the original frame */
> >>>>    for(plane = 0; plane < 3; plane++) {
> >>>>
> >>>>      if( plane == 0 ){
> >>>>  vsub = hsub = 0;
> >>>>      }else{
> >>>>  vsub = pad->vsub; hsub = pad->hsub;
> >>>>      }
> >>>>
> >>>>      j1 = ((pad->y + y) >>vsub) * out->linesize[plane];
> >>>>      j2 = (y >>vsub) * in->linesize[plane];
> >>>>
> >>>>      for(i = 0; i < (h >>vsub); i++){
> >>>>
> >>>>  memset(out->data[plane] + j1, padcolor[plane], pad->x >>hsub);
> >>>>  memcpy(out->data[plane] + j1 + (pad->x >>hsub),
> >>>>         in->data[plane]  + j2, in->w >>hsub);
> >>>>  memset(out->data[plane] + j1 + ((pad->x + in->w) >>hsub),
> >>>>         padcolor[plane], k >>hsub);
> >>>>
> >>>>  j1 += out->linesize[plane];
> >>>>  j2 += in->linesize[plane];
> >>>>      }
> >>>>    }
> >>> unconditional copying is unacceptable
> >> help explain: Why unconditional? I am copying in->data between y and y 
> >> +h, which I assume is what draw_slice(...,y,h) entitles to do. Anyway,  
> >> more fittingly: how would you want that copying to be coded?
> > 
> > There should be no copy.
> > The source filter should directly draw into the larger buffer of the
> > destination filter.
> 
> How should it be done then? Something like:
> 
> static void end_frame(AVFilterLink *link)
> {
>      AVFilterLink* output = link->dst->outputs[0];
> 
>      avfilter_resize_video_buffer(link->currpic, pad->w, pad->h); // not
> yet existent function!
> 
>      draw_borders(link->currpic);
> 
>      for (i=0; i<4; i++)
>      link->currpic->data[i] += the quantity needed to pad top/left
> 
>      avfilter_draw_slice(output, 0, pad->h);
>      avfilter_end_frame(output);
> }
> 
> and avfilter_resize_video_buffer() implemented using av_realloc()?

not possible, the buffer could be from an API like directdraw, xv, sdl
or even a buffer on your video card. These almost certainly do not
provide a function to resize. Also av_realloc() can be very slow.

Anyway, mplayer can do it, so it can be done and actually i belived that
avfilter already was able to do such things but i do not know precissely
how ATM. So maybe that has not been completely implemented.

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

When you are offended at any man's fault, turn to yourself and study your
own failings. Then you will forget your anger. -- Epictetus

Attachment: signature.asc
Description: Digital signature

_______________________________________________
FFmpeg-soc mailing list
[email protected]
https://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-soc

Reply via email to