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