]> git.sesse.net Git - nageru/commitdiff
Make the FFmpegCapture disconnected frames proper black.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Tue, 24 Apr 2018 20:47:35 +0000 (22:47 +0200)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Tue, 24 Apr 2018 20:47:35 +0000 (22:47 +0200)
Less disturbing, more consistent between BGRA and Y'CbCr, and the
all-zero Y'CbCr frame causes out-of-gamut (negative) RGB values that
ended up confusing white balance adjustment a lot.

ffmpeg_capture.cpp

index b7db50c5513beea1376b70031d608cab6059c154..235393a5058b0a2215a8ea021becc6c1fc75ab9a 100644 (file)
@@ -327,6 +327,7 @@ void FFmpegCapture::send_disconnected_frame()
                if (pixel_format == bmusb::PixelFormat_8BitBGRA) {
                        video_format.stride = width * 4;
                        video_frame.len = width * height * 4;
+                       memset(video_frame.data, 0, video_frame.len);
                } else {
                        video_format.stride = width;
                        current_frame_ycbcr_format.luma_coefficients = YCBCR_REC_709;
@@ -339,8 +340,9 @@ void FFmpegCapture::send_disconnected_frame()
                        current_frame_ycbcr_format.cr_x_position = 0.0f;
                        current_frame_ycbcr_format.cr_y_position = 0.0f;
                        video_frame.len = width * height * 2;
+                       memset(video_frame.data, 0, width * height);
+                       memset(video_frame.data + width * height, 128, width * height);  // Valid for both NV12 and planar.
                }
-               memset(video_frame.data, 0, video_frame.len);
 
                frame_callback(-1, AVRational{1, TIMEBASE}, -1, AVRational{1, TIMEBASE}, timecode++,
                        video_frame, /*video_offset=*/0, video_format,