From 7f7bc0e7fb8fbc77ab18222fa2d8f90819c10b9a Mon Sep 17 00:00:00 2001
From: Alexandre Lision <alexandre.lision@savoirfairelinux.com>
Date: Mon, 19 Oct 2015 13:59:48 -0400
Subject: [PATCH] video: change pixfmt used by VideoMixer

YUV420P was allocating one large buffer on Linux and 3 on OSX.
This was causing read overflows. We use YUYV422 which is packed (always one buf)

Issue: #81116
Change-Id: I76456f72c6f155d181aa533aa62cb70b92f6eff1
---
 src/media/libav_utils.cpp       | 4 ++--
 src/media/video/video_base.h    | 2 +-
 src/media/video/video_mixer.cpp | 4 ++--
 3 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/src/media/libav_utils.cpp b/src/media/libav_utils.cpp
index 59ec617fea..2dfd4efcec 100644
--- a/src/media/libav_utils.cpp
+++ b/src/media/libav_utils.cpp
@@ -115,7 +115,7 @@ int libav_pixel_format(int fmt)
     switch (fmt) {
         case video::VIDEO_PIXFMT_BGRA: return PIXEL_FORMAT(BGRA);
         case video::VIDEO_PIXFMT_RGBA: return PIXEL_FORMAT(RGBA);
-        case video::VIDEO_PIXFMT_YUV420P: return PIXEL_FORMAT(YUV420P);
+        case video::VIDEO_PIXFMT_YUYV422: return PIXEL_FORMAT(YUYV422);
     }
     return fmt;
 }
@@ -123,7 +123,7 @@ int libav_pixel_format(int fmt)
 int ring_pixel_format(int fmt)
 {
     switch (fmt) {
-        case PIXEL_FORMAT(YUV420P): return video::VIDEO_PIXFMT_YUV420P;
+        case PIXEL_FORMAT(YUYV422): return video::VIDEO_PIXFMT_YUYV422;
     }
     return fmt;
 }
diff --git a/src/media/video/video_base.h b/src/media/video/video_base.h
index a91314f70b..8d694d438f 100644
--- a/src/media/video/video_base.h
+++ b/src/media/video/video_base.h
@@ -50,7 +50,7 @@ namespace ring { namespace video {
 
 enum VideoPixelFormat {
     VIDEO_PIXFMT_BGRA = -1,
-    VIDEO_PIXFMT_YUV420P = -2,
+    VIDEO_PIXFMT_YUYV422 = -2,
     VIDEO_PIXFMT_RGBA = -3,
 };
 
diff --git a/src/media/video/video_mixer.cpp b/src/media/video/video_mixer.cpp
index 0a08feaf81..f9b0105bed 100644
--- a/src/media/video/video_mixer.cpp
+++ b/src/media/video/video_mixer.cpp
@@ -130,7 +130,7 @@ VideoMixer::process()
 
     VideoFrame& output = getNewFrame();
     try {
-        output.reserve(VIDEO_PIXFMT_YUV420P, width_, height_);
+        output.reserve(VIDEO_PIXFMT_YUYV422, width_, height_);
     } catch (const std::bad_alloc& e) {
         RING_ERR("VideoFrame::allocBuffer() failed");
         return;
@@ -231,6 +231,6 @@ VideoMixer::getHeight() const
 
 int
 VideoMixer::getPixelFormat() const
-{ return VIDEO_PIXFMT_YUV420P; }
+{ return VIDEO_PIXFMT_YUYV422; }
 
 }} // namespace ring::video
-- 
GitLab