[FFmpeg-cvslog] r20610 - trunk/libavcodec/imgconvert.c
ramiro
subversion
Wed Nov 25 18:14:49 CET 2009
Author: ramiro
Date: Wed Nov 25 18:14:48 2009
New Revision: 20610
Log:
Fix nv12/nv21 handling. linesize for plane 1 should account for both chroma
planes instead of just doubling the height while computing plane sizes. Also
adjust avpicture_layout() to copy the correct amount of data for plane 1.
Modified:
trunk/libavcodec/imgconvert.c
Modified: trunk/libavcodec/imgconvert.c
==============================================================================
--- trunk/libavcodec/imgconvert.c Wed Nov 25 17:00:14 2009 (r20609)
+++ trunk/libavcodec/imgconvert.c Wed Nov 25 18:14:48 2009 (r20610)
@@ -689,7 +689,7 @@ int ff_fill_linesize(AVPicture *picture,
case PIX_FMT_NV21:
w2 = (width + (1 << pinfo->x_chroma_shift) - 1) >> pinfo->x_chroma_shift;
picture->linesize[0] = width;
- picture->linesize[1] = w2;
+ picture->linesize[1] = 2 * w2;
break;
case PIX_FMT_RGB24:
case PIX_FMT_BGR24:
@@ -789,12 +789,12 @@ int ff_fill_pointer(AVPicture *picture,
case PIX_FMT_NV12:
case PIX_FMT_NV21:
h2 = (height + (1 << pinfo->y_chroma_shift) - 1) >> pinfo->y_chroma_shift;
- size2 = picture->linesize[1] * h2 * 2;
+ size2 = picture->linesize[1] * h2;
picture->data[0] = ptr;
picture->data[1] = picture->data[0] + size;
picture->data[2] = NULL;
picture->data[3] = NULL;
- return size + 2 * size2;
+ return size + size2;
case PIX_FMT_RGB24:
case PIX_FMT_BGR24:
case PIX_FMT_ARGB:
@@ -904,6 +904,8 @@ int avpicture_layout(const AVPicture* sr
if (i == 1) {
w = ((width >> pf->x_chroma_shift) * pf->depth + 7) / 8;
h = height >> pf->y_chroma_shift;
+ if (pix_fmt == PIX_FMT_NV12 || pix_fmt == PIX_FMT_NV21)
+ w <<= 1;
} else if (i == 3) {
w = ow;
h = oh;
More information about the ffmpeg-cvslog
mailing list