diff --git a/webrtc/common_video/i420_video_frame.cc b/webrtc/common_video/i420_video_frame.cc index 995565cd3b..a630541a66 100644 --- a/webrtc/common_video/i420_video_frame.cc +++ b/webrtc/common_video/i420_video_frame.cc @@ -119,18 +119,17 @@ int I420VideoFrame::CreateFrame(const uint8_t* buffer_y, } int I420VideoFrame::CopyFrame(const I420VideoFrame& videoFrame) { - if (videoFrame.native_handle()) { + if (videoFrame.IsZeroSize()) { + video_frame_buffer_ = nullptr; + } else if (videoFrame.native_handle()) { video_frame_buffer_ = videoFrame.video_frame_buffer(); } else { - int ret = CreateFrame( - videoFrame.buffer(kYPlane), - videoFrame.buffer(kUPlane), - videoFrame.buffer(kVPlane), - videoFrame.width(), videoFrame.height(), videoFrame.stride(kYPlane), - videoFrame.stride(kUPlane), videoFrame.stride(kVPlane)); - if (ret < 0) - return ret; + CreateFrame(videoFrame.buffer(kYPlane), videoFrame.buffer(kUPlane), + videoFrame.buffer(kVPlane), videoFrame.width(), + videoFrame.height(), videoFrame.stride(kYPlane), + videoFrame.stride(kUPlane), videoFrame.stride(kVPlane)); } + timestamp_ = videoFrame.timestamp_; ntp_time_ms_ = videoFrame.ntp_time_ms_; render_time_ms_ = videoFrame.render_time_ms_; diff --git a/webrtc/common_video/i420_video_frame_unittest.cc b/webrtc/common_video/i420_video_frame_unittest.cc index 2208a871c5..44d5060829 100644 --- a/webrtc/common_video/i420_video_frame_unittest.cc +++ b/webrtc/common_video/i420_video_frame_unittest.cc @@ -46,6 +46,12 @@ TEST(TestI420VideoFrame, InitialValues) { EXPECT_EQ(kVideoRotation_0, frame.rotation()); } +TEST(TestI420VideoFrame, CopiesInitialFrameWithoutCrashing) { + I420VideoFrame frame; + I420VideoFrame frame2; + frame2.CopyFrame(frame); +} + TEST(TestI420VideoFrame, WidthHeightValues) { I420VideoFrame frame; const int valid_value = 10;