[Libav-user] Help with unpacking PIX_FMT_YUV4* data types

wm4 nfxjfg at googlemail.com
Tue Mar 11 00:47:47 CET 2014

On Mon, 10 Mar 2014 16:18:27 -0700
Ricky Huang <rhuang.work at gmail.com> wrote:

> Hello all,
> I am writing code that extracts the luminance component of an input video using my own custom filter in libavfilter - specifically I am extracting it from "PIX_FMT_YUV420P" a video and I am wondering how to go about doing so.  According to the pixfmt.h header: 
> > 
> > PIX_FMT_YUV420P,   ///< planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
> I am not sure how to interpret that.  Assuming I am doing this in my draw_slice() function. It has the definition of:
> > 
> > static void draw_slice(AVFilterLink *inlink, int y0, int h, int slice_dir)
> I know I can get to the input data plane by:
> > 
> > AVFilterBufferRef *cur_pic = link->cur_buf;
> > uint8_t *data = cur_pic->data[0];

I think this functionality was removed long ago. You're supposed to
write/read AVFrames from the filters.

> But there are multiple "planes" in the data.  Does data[0], data[1], data[2] correspond to each of the Y, U, V channels?

Yes, for YUV420P.

> Also, once I am able to point my pointer at the correct coordinate, how should I interpret the extracted result (float, int, etc)?
> Thank you in advance.

More information about the Libav-user mailing list