Fixed issues with planar codec buffer alignment
authorArmin Novak <armin.novak@thincast.com>
Wed, 2 Jun 2021 08:47:10 +0000 (10:47 +0200)
committerakallabeth <akallabeth@users.noreply.github.com>
Wed, 2 Jun 2021 11:44:47 +0000 (13:44 +0200)
Align width and height to next multiple of 4 to avoid issues with
internal buffer sizes.

(cherry picked from commit c2049673be9be05a87d62759c55893759ed64d05)

libfreerdp/codec/planar.c

index 8588a9e..12b9f6d 100644 (file)
@@ -33,6 +33,8 @@
 
 #define TAG FREERDP_TAG("codec")
 
+#define ALIGN(val, align) ((val) % (align) == 0) ? (val) : ((val) + (align) - (val) % (align))
+
 static INLINE UINT32 planar_invert_format(BITMAP_PLANAR_CONTEXT* planar, BOOL alpha,
                                           UINT32 DstFormat)
 {
@@ -1482,8 +1484,8 @@ BOOL freerdp_bitmap_planar_context_reset(BITMAP_PLANAR_CONTEXT* context, UINT32
                return FALSE;
 
        context->bgr = FALSE;
-       context->maxWidth = width;
-       context->maxHeight = height;
+       context->maxWidth = ALIGN(width, 4);
+       context->maxHeight = ALIGN(height, 4);
        context->maxPlaneSize = context->maxWidth * context->maxHeight;
        context->nTempStep = context->maxWidth * 4;
        free(context->planesBuffer);