Hi, On Sun, Feb 13, 2011 at 10:56 PM, Thomas Worth <[email protected]> wrote: > On Sun, Feb 13, 2011 at 7:12 PM, Ronald S. Bultje <[email protected]> wrote: >> On Sun, Feb 13, 2011 at 6:44 PM, Thomas Worth <[email protected]> wrote: >>> I am allocating buffers that need to hold the entire contents of >>> myAVframe->data[0], including the padding bytes. In the case of >>> 1920x1088 video, there are 32 padding bytes so linesize[0] is 1952. I >>> need to know this beforehand so I can make room in my buffer. Is there >>> any way to know how much this will be prior to actually decoding the >>> frame? >> >> FFALIGN(width, 16)+EDGE_SIZE*16, where FF_ALIGN aligns width to the >> next multiple of 16, and EDGE_SIZE itself is also 16, so for 1920, >> that'd be ceil(1920/16.0)*16+16*2=1952. >> >> The same calculation applies to height also. One of the edges is on >> top, one at the bottom, one left and one right, so data[0] is >> allocated_data+16+(align(width,16)+16*2)*16. >> >> If you can't provide edges, and you want linesize to be equal to >> width, use AVCodecContext->flags &= CODEC_FLAG_EMU_EDGE, this will >> slightly slow down decoding, but alleviate the edges on all sides of >> the image. > > Thanks. In your code above, you multiply 16 by 2, for a total of 32 > padding bytes. However, in the case of subsampled formats (h264 > decoder, for example) this only applies to the luma channel (data[0]). > Cb and Cr channels are only padded with 16 bytes. How should I apply > this? Is data[0] always 16*2 and data[>0] always 16*1 with subsampled > formats? What should I use to detect this? h264 is a 4:2:0 format > where Cb and Cr are 1/4 the resolution of Y, but what about a 4:2:2 > format with 1/2 the resolution of Y?
See avcodec_default_get_buffer() in libavcodec/utils.c and av_image_fill_linesizes() in libavcore/imgutils.c for the answer in coding, but basically for 4:2:0 all edges are half-sized. I don't actually know what it does for 4:2:2, don't work much with that, Stefano? Ronald _______________________________________________ libav-user mailing list [email protected] https://lists.mplayerhq.hu/mailman/listinfo/libav-user
