diff --git a/talk/app/webrtc/objc/RTCI420Frame.mm b/talk/app/webrtc/objc/RTCI420Frame.mm index 6c6c564582..1646510b37 100644 --- a/talk/app/webrtc/objc/RTCI420Frame.mm +++ b/talk/app/webrtc/objc/RTCI420Frame.mm @@ -29,7 +29,7 @@ #include -#include "webrtc/media/base/videoframe.h" +#include "webrtc/media/engine/webrtcvideoframe.h" @implementation RTCI420Frame { std::unique_ptr _videoFrame; @@ -98,7 +98,10 @@ if (self = [super init]) { // Keep a shallow copy of the video frame. The underlying frame buffer is // not copied. - _videoFrame.reset(videoFrame->Copy()); + _videoFrame.reset(new cricket::WebRtcVideoFrame( + videoFrame->video_frame_buffer(), + videoFrame->rotation(), + videoFrame->timestamp_us())); } return self; } diff --git a/webrtc/api/java/jni/peerconnection_jni.cc b/webrtc/api/java/jni/peerconnection_jni.cc index a5ba254c32..2b08f751c7 100644 --- a/webrtc/api/java/jni/peerconnection_jni.cc +++ b/webrtc/api/java/jni/peerconnection_jni.cc @@ -768,7 +768,8 @@ class JavaVideoRendererWrapper // ownership of the frame, and the frame should be released with // VideoRenderer.releaseNativeFrame(). static jlong javaShallowCopy(const cricket::VideoFrame* frame) { - return jlongFromPointer(frame->Copy()); + return jlongFromPointer(new cricket::WebRtcVideoFrame( + frame->video_frame_buffer(), frame->rotation(), frame->timestamp_us())); } // Return a VideoRenderer.I420Frame referring to the data in |frame|. diff --git a/webrtc/media/base/videoframe.h b/webrtc/media/base/videoframe.h index 4015f906f9..10dc1bdcd8 100644 --- a/webrtc/media/base/videoframe.h +++ b/webrtc/media/base/videoframe.h @@ -51,11 +51,6 @@ class VideoFrame { // Indicates the rotation angle in degrees. virtual webrtc::VideoRotation rotation() const = 0; - // Make a shallow copy of the frame. The frame buffer itself is not copied. - // Both the current and new VideoFrame will share a single reference-counted - // frame buffer. - virtual VideoFrame *Copy() const = 0; - // Return a copy of frame which has its pending rotation applied. The // ownership of the returned frame is held by this frame. virtual const VideoFrame* GetCopyWithRotationApplied() const = 0; diff --git a/webrtc/media/base/videoframe_unittest.h b/webrtc/media/base/videoframe_unittest.h index 39985617c5..38c3f85a71 100644 --- a/webrtc/media/base/videoframe_unittest.h +++ b/webrtc/media/base/videoframe_unittest.h @@ -1808,31 +1808,6 @@ class VideoFrameTest : public testing::Test { EXPECT_TRUE(IsEqual(frame1, frame2, 1)); } - /////////////////// - // General tests // - /////////////////// - - void Copy() { - std::unique_ptr source(new T); - std::unique_ptr target; - ASSERT_TRUE(LoadFrameNoRepeat(source.get())); - target.reset(source->Copy()); - EXPECT_TRUE(IsEqual(*source, *target, 0)); - source.reset(); - ASSERT_TRUE(target->video_frame_buffer() != NULL); - EXPECT_TRUE(target->video_frame_buffer()->DataY() != NULL); - } - - void CopyIsRef() { - std::unique_ptr source(new T); - std::unique_ptr target; - ASSERT_TRUE(LoadFrameNoRepeat(source.get())); - target.reset(source->Copy()); - EXPECT_TRUE(IsEqual(*source, *target, 0)); - const T* const_source = source.get(); - EXPECT_EQ(const_source->video_frame_buffer(), target->video_frame_buffer()); - } - int repeat_; }; diff --git a/webrtc/media/engine/webrtcvideoframe.cc b/webrtc/media/engine/webrtcvideoframe.cc index 4f89c8b85d..067c80fc1e 100644 --- a/webrtc/media/engine/webrtcvideoframe.cc +++ b/webrtc/media/engine/webrtcvideoframe.cc @@ -78,10 +78,6 @@ WebRtcVideoFrame::video_frame_buffer() const { return video_frame_buffer_; } -VideoFrame* WebRtcVideoFrame::Copy() const { - return new WebRtcVideoFrame(video_frame_buffer_, rotation_, timestamp_us_); -} - size_t WebRtcVideoFrame::ConvertToRgbBuffer(uint32_t to_fourcc, uint8_t* buffer, size_t size, diff --git a/webrtc/media/engine/webrtcvideoframe.h b/webrtc/media/engine/webrtcvideoframe.h index 487e32ef9a..cec2f839eb 100644 --- a/webrtc/media/engine/webrtcvideoframe.h +++ b/webrtc/media/engine/webrtcvideoframe.h @@ -75,8 +75,6 @@ class WebRtcVideoFrame : public VideoFrame { webrtc::VideoRotation rotation() const override { return rotation_; } - VideoFrame* Copy() const override; - size_t ConvertToRgbBuffer(uint32_t to_fourcc, uint8_t* buffer, size_t size, diff --git a/webrtc/media/engine/webrtcvideoframe_unittest.cc b/webrtc/media/engine/webrtcvideoframe_unittest.cc index abfd0aea3c..a725246a43 100644 --- a/webrtc/media/engine/webrtcvideoframe_unittest.cc +++ b/webrtc/media/engine/webrtcvideoframe_unittest.cc @@ -245,9 +245,6 @@ TEST_WEBRTCVIDEOFRAME(ConvertFromUYVYBufferInverted) // TEST_WEBRTCVIDEOFRAME(ConvertToI422Buffer) // TEST_WEBRTCVIDEOFRAME(ConstructARGBBlackWhitePixel) -TEST_WEBRTCVIDEOFRAME(Copy) -TEST_WEBRTCVIDEOFRAME(CopyIsRef) - // These functions test implementation-specific details. // Tests the Init function with different cropped size. TEST_F(WebRtcVideoFrameTest, InitEvenSize) { @@ -292,24 +289,6 @@ TEST_F(WebRtcVideoFrameTest, TextureInitialValues) { EXPECT_EQ(40, frame.timestamp_us()); } -TEST_F(WebRtcVideoFrameTest, CopyTextureFrame) { - webrtc::test::FakeNativeHandle* dummy_handle = - new webrtc::test::FakeNativeHandle(); - webrtc::NativeHandleBuffer* buffer = - new rtc::RefCountedObject( - dummy_handle, 640, 480); - // Timestamp is converted from ns to us, so last three digits are lost. - cricket::WebRtcVideoFrame frame1(buffer, 20000, webrtc::kVideoRotation_0); - cricket::VideoFrame* frame2 = frame1.Copy(); - EXPECT_EQ(frame1.video_frame_buffer()->native_handle(), - frame2->video_frame_buffer()->native_handle()); - EXPECT_EQ(frame1.width(), frame2->width()); - EXPECT_EQ(frame1.height(), frame2->height()); - EXPECT_EQ(frame1.GetTimeStamp(), frame2->GetTimeStamp()); - EXPECT_EQ(frame1.timestamp_us(), frame2->timestamp_us()); - delete frame2; -} - TEST_F(WebRtcVideoFrameTest, ApplyRotationToFrame) { WebRtcVideoTestFrame applied0; EXPECT_TRUE(IsNull(applied0)); diff --git a/webrtc/sdk/objc/Framework/Classes/RTCVideoFrame.mm b/webrtc/sdk/objc/Framework/Classes/RTCVideoFrame.mm index 5b2d2586b1..dcce32d833 100644 --- a/webrtc/sdk/objc/Framework/Classes/RTCVideoFrame.mm +++ b/webrtc/sdk/objc/Framework/Classes/RTCVideoFrame.mm @@ -12,6 +12,8 @@ #include +#include "webrtc/media/engine/webrtcvideoframe.h" + @implementation RTCVideoFrame { std::unique_ptr _videoFrame; rtc::scoped_refptr _i420Buffer; @@ -105,7 +107,10 @@ if (self = [super init]) { // Keep a shallow copy of the video frame. The underlying frame buffer is // not copied. - _videoFrame.reset(nativeFrame->Copy()); + _videoFrame.reset(new cricket::WebRtcVideoFrame( + nativeFrame->video_frame_buffer(), + nativeFrame->rotation(), + nativeFrame->timestamp_us())); } return self; }