-----Original Message-----
From: "Michael Conrad" <[EMAIL PROTECTED]>
To: "Libav* user questions and discussions" <[email protected]>
Date: Mon, 09 Jun 2008 20:33:35 -0400
Subject: Re: [libav-user] Output pFrame pixel by pixel

> 
> On Mon, 09 Jun 2008 13:57:45 -0400, Konstantin Gorskov  
> <[EMAIL PROTECTED]> wrote:
> > Hi! I can not understand this part of code:
> >     for(int y=0; y<240; y++)
> >     //fwrite(pFrame->data[0]+y*pFrameRGB->linesize[0], 1, 320*3, bufptr);
> >
> > I know, it outputs image file with frame. But, for sample, what  
> > linesize[0] is there for?
> 
> Imagine this: you have an image which is 11 pixels wide and 5 pixels tall,  
> 1 byte per pixel.  In order to copy the frame using SSE2 instructions, the  
> row length must be a multiple of 16.  So for this example, libraries like  
> ffmpeg would allocate 16x5 bytes.
> 
> PPPPPPPPPPP.....
> PPPPPPPPPPP.....
> PPPPPPPPPPP.....
> PPPPPPPPPPP.....
> PPPPPPPPPPP.....
> 
> So:
>    frame->w == 11
>    frame->h == 5
>    frame->linesize[0] == 16
> 
> But, when saving to disk, you don't want to waste space, so you get rid of  
> the padding:
> PPPPPPPPPPP
> PPPPPPPPPPP
> PPPPPPPPPPP
> PPPPPPPPPPP
> PPPPPPPPPPP
> 
> > Can I, for sample, access pixel number 32 in a row?
> 
> So, to access pixel (column,row) in a packed image which was saved to  
> disk, you use
>    pixel= data[ row * width + column ];
> but for image frames with padding, you need
>    pixel= frame->data[0][ row * frame->linesize[0] + column ];
> 
> > And why there is only 240 output steps? Not 240*320?
> 
> fwrite copies a block of data, not just one pixel.  Also, the *only*  
> reason fwrite was called more than once was to skip the padding.  **If  
> there was no padding**, the entire frame could be copied with
>    fwrite(frame->data[0], 1, 320*240*3, file)
> 
> > If I understand correct, all pixel data are stored here, at data[0]?
> 
> Yes.  For RGB, all data is in plane 0.  In some formats, however, the  
> colors are in separate "planes"  ("planar RGB", "planar YUV", etc).  For  
> these, plane N is data[N] with a width of linesize[N].
> 
> Hope that helps ;-)
> -Mike
> _______________________________________________
> libav-user mailing list
> [email protected]
> https://lists.mplayerhq.hu/mailman/listinfo/libav-user
> 


 Thanks a lot for two brilliant answers. This will, for sure, help a lot of 
newbies like me. I really appreciate it.
_______________________________________________
libav-user mailing list
[email protected]
https://lists.mplayerhq.hu/mailman/listinfo/libav-user

Reply via email to