From 89b723065270b82954c3660b24837ff24f4d7d2c Mon Sep 17 00:00:00 2001 From: Palana Date: Tue, 10 Mar 2015 18:20:49 +0100 Subject: [PATCH] libobs: Fix async plane offset calculation Frames allocated via video_frame_init from media-io/video-frame.c have their planes aligned which the original offset calculation didn't take into account, resulting in some planes being drawn incorrectly. Example media file to reproduce via the ffmpeg (media) source: http://download.blender.org/peach/bigbuckbunny_movies/big_buck_bunny_480p_surround-fix.avi --- libobs/obs-source.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/libobs/obs-source.c b/libobs/obs-source.c index 6c9c9fa74..b86ea5def 100644 --- a/libobs/obs-source.c +++ b/libobs/obs-source.c @@ -765,9 +765,8 @@ static inline bool set_planar420_sizes(struct obs_source *source, source->async_convert_width = frame->width; source->async_convert_height = (size / frame->width + 1) & 0xFFFFFFFE; source->async_texture_format = GS_R8; - source->async_plane_offset[0] = frame->width * frame->height; - source->async_plane_offset[1] = source->async_plane_offset[0] + - frame->width * frame->height / 4; + source->async_plane_offset[0] = (int)(frame->data[1] - frame->data[0]); + source->async_plane_offset[1] = (int)(frame->data[2] - frame->data[0]); return true; } @@ -780,7 +779,7 @@ static inline bool set_nv12_sizes(struct obs_source *source, source->async_convert_width = frame->width; source->async_convert_height = (size / frame->width + 1) & 0xFFFFFFFE; source->async_texture_format = GS_R8; - source->async_plane_offset[0] = frame->width * frame->height; + source->async_plane_offset[0] = (int)(frame->data[1] - frame->data[0]); return true; }