|  |  | @@ -426,17 +426,14 @@ void avcodec_pix_fmt_string (char *buf, int buf_size, int pix_fmt) | 
		
	
		
			
			|  |  |  | ); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | int avpicture_fill(AVPicture *picture, uint8_t *ptr, | 
		
	
		
			
			|  |  |  | int pix_fmt, int width, int height) | 
		
	
		
			
			|  |  |  | int ff_fill_linesize(AVPicture *picture, int pix_fmt, int width) | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | int size, w2, h2, size2; | 
		
	
		
			
			|  |  |  | int w2; | 
		
	
		
			
			|  |  |  | const PixFmtInfo *pinfo; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | if(avcodec_check_dimensions(NULL, width, height)) | 
		
	
		
			
			|  |  |  | goto fail; | 
		
	
		
			
			|  |  |  | memset(picture->linesize, 0, sizeof(picture->linesize)); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | pinfo = &pix_fmt_info[pix_fmt]; | 
		
	
		
			
			|  |  |  | size = width * height; | 
		
	
		
			
			|  |  |  | switch(pix_fmt) { | 
		
	
		
			
			|  |  |  | case PIX_FMT_YUV420P: | 
		
	
		
			
			|  |  |  | case PIX_FMT_YUV422P: | 
		
	
	
		
			
				|  |  | @@ -449,62 +446,33 @@ int avpicture_fill(AVPicture *picture, uint8_t *ptr, | 
		
	
		
			
			|  |  |  | case PIX_FMT_YUVJ444P: | 
		
	
		
			
			|  |  |  | case PIX_FMT_YUVJ440P: | 
		
	
		
			
			|  |  |  | w2 = (width + (1 << pinfo->x_chroma_shift) - 1) >> pinfo->x_chroma_shift; | 
		
	
		
			
			|  |  |  | h2 = (height + (1 << pinfo->y_chroma_shift) - 1) >> pinfo->y_chroma_shift; | 
		
	
		
			
			|  |  |  | size2 = w2 * h2; | 
		
	
		
			
			|  |  |  | picture->data[0] = ptr; | 
		
	
		
			
			|  |  |  | picture->data[1] = picture->data[0] + size; | 
		
	
		
			
			|  |  |  | picture->data[2] = picture->data[1] + size2; | 
		
	
		
			
			|  |  |  | picture->data[3] = NULL; | 
		
	
		
			
			|  |  |  | picture->linesize[0] = width; | 
		
	
		
			
			|  |  |  | picture->linesize[1] = w2; | 
		
	
		
			
			|  |  |  | picture->linesize[2] = w2; | 
		
	
		
			
			|  |  |  | picture->linesize[3] = 0; | 
		
	
		
			
			|  |  |  | return size + 2 * size2; | 
		
	
		
			
			|  |  |  | break; | 
		
	
		
			
			|  |  |  | case PIX_FMT_YUVA420P: | 
		
	
		
			
			|  |  |  | w2 = (width + (1 << pinfo->x_chroma_shift) - 1) >> pinfo->x_chroma_shift; | 
		
	
		
			
			|  |  |  | h2 = (height + (1 << pinfo->y_chroma_shift) - 1) >> pinfo->y_chroma_shift; | 
		
	
		
			
			|  |  |  | size2 = w2 * h2; | 
		
	
		
			
			|  |  |  | picture->data[0] = ptr; | 
		
	
		
			
			|  |  |  | picture->data[1] = picture->data[0] + size; | 
		
	
		
			
			|  |  |  | picture->data[2] = picture->data[1] + size2; | 
		
	
		
			
			|  |  |  | picture->data[3] = picture->data[1] + size2 + size2; | 
		
	
		
			
			|  |  |  | picture->linesize[0] = width; | 
		
	
		
			
			|  |  |  | picture->linesize[1] = w2; | 
		
	
		
			
			|  |  |  | picture->linesize[2] = w2; | 
		
	
		
			
			|  |  |  | picture->linesize[3] = width; | 
		
	
		
			
			|  |  |  | return 2 * size + 2 * size2; | 
		
	
		
			
			|  |  |  | break; | 
		
	
		
			
			|  |  |  | case PIX_FMT_NV12: | 
		
	
		
			
			|  |  |  | case PIX_FMT_NV21: | 
		
	
		
			
			|  |  |  | w2 = (width + (1 << pinfo->x_chroma_shift) - 1) >> pinfo->x_chroma_shift; | 
		
	
		
			
			|  |  |  | h2 = (height + (1 << pinfo->y_chroma_shift) - 1) >> pinfo->y_chroma_shift; | 
		
	
		
			
			|  |  |  | size2 = w2 * h2 * 2; | 
		
	
		
			
			|  |  |  | picture->data[0] = ptr; | 
		
	
		
			
			|  |  |  | picture->data[1] = picture->data[0] + size; | 
		
	
		
			
			|  |  |  | picture->data[2] = NULL; | 
		
	
		
			
			|  |  |  | picture->data[3] = NULL; | 
		
	
		
			
			|  |  |  | picture->linesize[0] = width; | 
		
	
		
			
			|  |  |  | picture->linesize[1] = w2; | 
		
	
		
			
			|  |  |  | picture->linesize[2] = 0; | 
		
	
		
			
			|  |  |  | picture->linesize[3] = 0; | 
		
	
		
			
			|  |  |  | return size + 2 * size2; | 
		
	
		
			
			|  |  |  | break; | 
		
	
		
			
			|  |  |  | case PIX_FMT_RGB24: | 
		
	
		
			
			|  |  |  | case PIX_FMT_BGR24: | 
		
	
		
			
			|  |  |  | picture->data[0] = ptr; | 
		
	
		
			
			|  |  |  | picture->data[1] = NULL; | 
		
	
		
			
			|  |  |  | picture->data[2] = NULL; | 
		
	
		
			
			|  |  |  | picture->data[3] = NULL; | 
		
	
		
			
			|  |  |  | picture->linesize[0] = width * 3; | 
		
	
		
			
			|  |  |  | return size * 3; | 
		
	
		
			
			|  |  |  | break; | 
		
	
		
			
			|  |  |  | case PIX_FMT_RGB32: | 
		
	
		
			
			|  |  |  | case PIX_FMT_BGR32: | 
		
	
		
			
			|  |  |  | case PIX_FMT_RGB32_1: | 
		
	
		
			
			|  |  |  | case PIX_FMT_BGR32_1: | 
		
	
		
			
			|  |  |  | picture->data[0] = ptr; | 
		
	
		
			
			|  |  |  | picture->data[1] = NULL; | 
		
	
		
			
			|  |  |  | picture->data[2] = NULL; | 
		
	
		
			
			|  |  |  | picture->data[3] = NULL; | 
		
	
		
			
			|  |  |  | picture->linesize[0] = width * 4; | 
		
	
		
			
			|  |  |  | return size * 4; | 
		
	
		
			
			|  |  |  | break; | 
		
	
		
			
			|  |  |  | case PIX_FMT_GRAY16BE: | 
		
	
		
			
			|  |  |  | case PIX_FMT_GRAY16LE: | 
		
	
		
			
			|  |  |  | case PIX_FMT_BGR555: | 
		
	
	
		
			
				|  |  | @@ -512,64 +480,119 @@ int avpicture_fill(AVPicture *picture, uint8_t *ptr, | 
		
	
		
			
			|  |  |  | case PIX_FMT_RGB555: | 
		
	
		
			
			|  |  |  | case PIX_FMT_RGB565: | 
		
	
		
			
			|  |  |  | case PIX_FMT_YUYV422: | 
		
	
		
			
			|  |  |  | picture->data[0] = ptr; | 
		
	
		
			
			|  |  |  | picture->data[1] = NULL; | 
		
	
		
			
			|  |  |  | picture->data[2] = NULL; | 
		
	
		
			
			|  |  |  | picture->data[3] = NULL; | 
		
	
		
			
			|  |  |  | picture->linesize[0] = width * 2; | 
		
	
		
			
			|  |  |  | return size * 2; | 
		
	
		
			
			|  |  |  | break; | 
		
	
		
			
			|  |  |  | case PIX_FMT_UYVY422: | 
		
	
		
			
			|  |  |  | picture->data[0] = ptr; | 
		
	
		
			
			|  |  |  | picture->data[1] = NULL; | 
		
	
		
			
			|  |  |  | picture->data[2] = NULL; | 
		
	
		
			
			|  |  |  | picture->data[3] = NULL; | 
		
	
		
			
			|  |  |  | picture->linesize[0] = width * 2; | 
		
	
		
			
			|  |  |  | return size * 2; | 
		
	
		
			
			|  |  |  | break; | 
		
	
		
			
			|  |  |  | case PIX_FMT_UYYVYY411: | 
		
	
		
			
			|  |  |  | picture->data[0] = ptr; | 
		
	
		
			
			|  |  |  | picture->data[1] = NULL; | 
		
	
		
			
			|  |  |  | picture->data[2] = NULL; | 
		
	
		
			
			|  |  |  | picture->data[3] = NULL; | 
		
	
		
			
			|  |  |  | picture->linesize[0] = width + width/2; | 
		
	
		
			
			|  |  |  | return size + size/2; | 
		
	
		
			
			|  |  |  | break; | 
		
	
		
			
			|  |  |  | case PIX_FMT_RGB8: | 
		
	
		
			
			|  |  |  | case PIX_FMT_BGR8: | 
		
	
		
			
			|  |  |  | case PIX_FMT_RGB4_BYTE: | 
		
	
		
			
			|  |  |  | case PIX_FMT_BGR4_BYTE: | 
		
	
		
			
			|  |  |  | case PIX_FMT_GRAY8: | 
		
	
		
			
			|  |  |  | picture->data[0] = ptr; | 
		
	
		
			
			|  |  |  | picture->data[1] = NULL; | 
		
	
		
			
			|  |  |  | picture->data[2] = NULL; | 
		
	
		
			
			|  |  |  | picture->data[3] = NULL; | 
		
	
		
			
			|  |  |  | picture->linesize[0] = width; | 
		
	
		
			
			|  |  |  | return size; | 
		
	
		
			
			|  |  |  | break; | 
		
	
		
			
			|  |  |  | case PIX_FMT_RGB4: | 
		
	
		
			
			|  |  |  | case PIX_FMT_BGR4: | 
		
	
		
			
			|  |  |  | picture->linesize[0] = width / 2; | 
		
	
		
			
			|  |  |  | break; | 
		
	
		
			
			|  |  |  | case PIX_FMT_MONOWHITE: | 
		
	
		
			
			|  |  |  | case PIX_FMT_MONOBLACK: | 
		
	
		
			
			|  |  |  | picture->linesize[0] = (width + 7) >> 3; | 
		
	
		
			
			|  |  |  | break; | 
		
	
		
			
			|  |  |  | case PIX_FMT_PAL8: | 
		
	
		
			
			|  |  |  | picture->linesize[0] = width; | 
		
	
		
			
			|  |  |  | picture->linesize[1] = 4; | 
		
	
		
			
			|  |  |  | break; | 
		
	
		
			
			|  |  |  | default: | 
		
	
		
			
			|  |  |  | return -1; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | return 0; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | int ff_fill_pointer(AVPicture *picture, uint8_t *ptr, int pix_fmt, | 
		
	
		
			
			|  |  |  | int height) | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | int size, h2, size2; | 
		
	
		
			
			|  |  |  | const PixFmtInfo *pinfo; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | pinfo = &pix_fmt_info[pix_fmt]; | 
		
	
		
			
			|  |  |  | size = picture->linesize[0] * height; | 
		
	
		
			
			|  |  |  | switch(pix_fmt) { | 
		
	
		
			
			|  |  |  | case PIX_FMT_YUV420P: | 
		
	
		
			
			|  |  |  | case PIX_FMT_YUV422P: | 
		
	
		
			
			|  |  |  | case PIX_FMT_YUV444P: | 
		
	
		
			
			|  |  |  | case PIX_FMT_YUV410P: | 
		
	
		
			
			|  |  |  | case PIX_FMT_YUV411P: | 
		
	
		
			
			|  |  |  | case PIX_FMT_YUV440P: | 
		
	
		
			
			|  |  |  | case PIX_FMT_YUVJ420P: | 
		
	
		
			
			|  |  |  | case PIX_FMT_YUVJ422P: | 
		
	
		
			
			|  |  |  | case PIX_FMT_YUVJ444P: | 
		
	
		
			
			|  |  |  | case PIX_FMT_YUVJ440P: | 
		
	
		
			
			|  |  |  | h2 = (height + (1 << pinfo->y_chroma_shift) - 1) >> pinfo->y_chroma_shift; | 
		
	
		
			
			|  |  |  | size2 = picture->linesize[1] * h2; | 
		
	
		
			
			|  |  |  | picture->data[0] = ptr; | 
		
	
		
			
			|  |  |  | picture->data[1] = NULL; | 
		
	
		
			
			|  |  |  | picture->data[1] = picture->data[0] + size; | 
		
	
		
			
			|  |  |  | picture->data[2] = picture->data[1] + size2; | 
		
	
		
			
			|  |  |  | picture->data[3] = NULL; | 
		
	
		
			
			|  |  |  | return size + 2 * size2; | 
		
	
		
			
			|  |  |  | case PIX_FMT_YUVA420P: | 
		
	
		
			
			|  |  |  | h2 = (height + (1 << pinfo->y_chroma_shift) - 1) >> pinfo->y_chroma_shift; | 
		
	
		
			
			|  |  |  | size2 = picture->linesize[1] * h2; | 
		
	
		
			
			|  |  |  | picture->data[0] = ptr; | 
		
	
		
			
			|  |  |  | picture->data[1] = picture->data[0] + size; | 
		
	
		
			
			|  |  |  | picture->data[2] = picture->data[1] + size2; | 
		
	
		
			
			|  |  |  | picture->data[3] = picture->data[1] + size2 + size2; | 
		
	
		
			
			|  |  |  | return 2 * size + 2 * size2; | 
		
	
		
			
			|  |  |  | 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; | 
		
	
		
			
			|  |  |  | picture->data[0] = ptr; | 
		
	
		
			
			|  |  |  | picture->data[1] = picture->data[0] + size; | 
		
	
		
			
			|  |  |  | picture->data[2] = NULL; | 
		
	
		
			
			|  |  |  | picture->data[3] = NULL; | 
		
	
		
			
			|  |  |  | picture->linesize[0] = width / 2; | 
		
	
		
			
			|  |  |  | return size / 2; | 
		
	
		
			
			|  |  |  | return size + 2 * size2; | 
		
	
		
			
			|  |  |  | case PIX_FMT_RGB24: | 
		
	
		
			
			|  |  |  | case PIX_FMT_BGR24: | 
		
	
		
			
			|  |  |  | case PIX_FMT_RGB32: | 
		
	
		
			
			|  |  |  | case PIX_FMT_BGR32: | 
		
	
		
			
			|  |  |  | case PIX_FMT_RGB32_1: | 
		
	
		
			
			|  |  |  | case PIX_FMT_BGR32_1: | 
		
	
		
			
			|  |  |  | case PIX_FMT_GRAY16BE: | 
		
	
		
			
			|  |  |  | case PIX_FMT_GRAY16LE: | 
		
	
		
			
			|  |  |  | case PIX_FMT_BGR555: | 
		
	
		
			
			|  |  |  | case PIX_FMT_BGR565: | 
		
	
		
			
			|  |  |  | case PIX_FMT_RGB555: | 
		
	
		
			
			|  |  |  | case PIX_FMT_RGB565: | 
		
	
		
			
			|  |  |  | case PIX_FMT_YUYV422: | 
		
	
		
			
			|  |  |  | case PIX_FMT_UYVY422: | 
		
	
		
			
			|  |  |  | case PIX_FMT_UYYVYY411: | 
		
	
		
			
			|  |  |  | case PIX_FMT_RGB8: | 
		
	
		
			
			|  |  |  | case PIX_FMT_BGR8: | 
		
	
		
			
			|  |  |  | case PIX_FMT_RGB4_BYTE: | 
		
	
		
			
			|  |  |  | case PIX_FMT_BGR4_BYTE: | 
		
	
		
			
			|  |  |  | case PIX_FMT_GRAY8: | 
		
	
		
			
			|  |  |  | case PIX_FMT_RGB4: | 
		
	
		
			
			|  |  |  | case PIX_FMT_BGR4: | 
		
	
		
			
			|  |  |  | case PIX_FMT_MONOWHITE: | 
		
	
		
			
			|  |  |  | case PIX_FMT_MONOBLACK: | 
		
	
		
			
			|  |  |  | picture->data[0] = ptr; | 
		
	
		
			
			|  |  |  | picture->data[1] = NULL; | 
		
	
		
			
			|  |  |  | picture->data[2] = NULL; | 
		
	
		
			
			|  |  |  | picture->data[3] = NULL; | 
		
	
		
			
			|  |  |  | picture->linesize[0] = (width + 7) >> 3; | 
		
	
		
			
			|  |  |  | return picture->linesize[0] * height; | 
		
	
		
			
			|  |  |  | return size; | 
		
	
		
			
			|  |  |  | case PIX_FMT_PAL8: | 
		
	
		
			
			|  |  |  | size2 = (size + 3) & ~3; | 
		
	
		
			
			|  |  |  | picture->data[0] = ptr; | 
		
	
		
			
			|  |  |  | picture->data[1] = ptr + size2; /* palette is stored here as 256 32 bit words */ | 
		
	
		
			
			|  |  |  | picture->data[2] = NULL; | 
		
	
		
			
			|  |  |  | picture->data[3] = NULL; | 
		
	
		
			
			|  |  |  | picture->linesize[0] = width; | 
		
	
		
			
			|  |  |  | picture->linesize[1] = 4; | 
		
	
		
			
			|  |  |  | return size2 + 256 * 4; | 
		
	
		
			
			|  |  |  | default: | 
		
	
		
			
			|  |  |  | fail: | 
		
	
		
			
			|  |  |  | picture->data[0] = NULL; | 
		
	
		
			
			|  |  |  | picture->data[1] = NULL; | 
		
	
		
			
			|  |  |  | picture->data[2] = NULL; | 
		
	
	
		
			
				|  |  | @@ -578,6 +601,19 @@ fail: | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | int avpicture_fill(AVPicture *picture, uint8_t *ptr, | 
		
	
		
			
			|  |  |  | int pix_fmt, int width, int height) | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | if(avcodec_check_dimensions(NULL, width, height)) | 
		
	
		
			
			|  |  |  | return -1; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | if (avpicture_fill_linesize(picture, pix_fmt, width)) | 
		
	
		
			
			|  |  |  | return -1; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | return avpicture_fill_pointer(picture, ptr, pix_fmt, height); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | int avpicture_layout(const AVPicture* src, int pix_fmt, int width, int height, | 
		
	
		
			
			|  |  |  | unsigned char *dest, int dest_size) | 
		
	
		
			
			|  |  |  | { | 
		
	
	
		
			
				|  |  | 
 |