diff -Naur original/libmpeg2-0.5.1/libmpeg2/header.c modified/libmpeg2-0.5.1/libmpeg2/header.c
--- original/libmpeg2-0.5.1/libmpeg2/header.c	2008-07-09 20:16:05.000000000 +0100
+++ modified/libmpeg2-0.5.1/libmpeg2/header.c	2018-04-18 22:48:17.271594700 +0100
@@ -740,7 +740,7 @@
 		mpeg2dec->decoder.convert = convert_init.copy;
 
 		y_size = decoder->stride_frame * mpeg2dec->sequence.height;
-		uv_size = y_size >> (2 - mpeg2dec->decoder.chroma_format);
+		uv_size = mpeg2dec->sequence.chroma_width * mpeg2dec->sequence.chroma_height;
 		mpeg2dec->yuv_buf[0][0] =
 		    (uint8_t *) mpeg2_malloc (y_size, MPEG2_ALLOC_YUV);
 		mpeg2dec->yuv_buf[0][1] =
@@ -754,7 +754,7 @@
 		mpeg2dec->yuv_buf[1][2] =
 		    (uint8_t *) mpeg2_malloc (uv_size, MPEG2_ALLOC_YUV);
 		y_size = decoder->stride_frame * 32;
-		uv_size = y_size >> (2 - mpeg2dec->decoder.chroma_format);
+		uv_size = mpeg2dec->sequence.chroma_width * mpeg2dec->sequence.chroma_height;
 		mpeg2dec->yuv_buf[2][0] =
 		    (uint8_t *) mpeg2_malloc (y_size, MPEG2_ALLOC_YUV);
 		mpeg2dec->yuv_buf[2][1] =
@@ -788,7 +788,7 @@
 		fbuf = &(mpeg2dec->fbuf_alloc[mpeg2dec->alloc_index++].fbuf);
 		fbuf->id = NULL;
 		y_size = decoder->stride_frame * mpeg2dec->sequence.height;
-		uv_size = y_size >> (2 - decoder->chroma_format);
+		uv_size = mpeg2dec->sequence.chroma_width * mpeg2dec->sequence.chroma_height;
 		fbuf->buf[0] = (uint8_t *) mpeg2_malloc (y_size,
 							 MPEG2_ALLOC_YUV);
 		fbuf->buf[1] = (uint8_t *) mpeg2_malloc (uv_size,
