diff --git a/webrtc/common_video/i420_video_frame_unittest.cc b/webrtc/common_video/i420_video_frame_unittest.cc index a0146e5455..c10fefdbfe 100644 --- a/webrtc/common_video/i420_video_frame_unittest.cc +++ b/webrtc/common_video/i420_video_frame_unittest.cc @@ -91,23 +91,20 @@ TEST(TestVideoFrame, CopiesInitialFrameWithoutCrashing) { } TEST(TestVideoFrame, WidthHeightValues) { - VideoFrame frame; + VideoFrame frame(I420Buffer::Create(10, 10, 10, 14, 90), + webrtc::kVideoRotation_0, + 789 * rtc::kNumMicrosecsPerMillisec); const int valid_value = 10; - frame.CreateEmptyFrame(10, 10, 10, 14, 90); EXPECT_EQ(valid_value, frame.width()); EXPECT_EQ(valid_value, frame.height()); frame.set_timestamp(123u); EXPECT_EQ(123u, frame.timestamp()); frame.set_ntp_time_ms(456); EXPECT_EQ(456, frame.ntp_time_ms()); - frame.set_render_time_ms(789); EXPECT_EQ(789, frame.render_time_ms()); } TEST(TestVideoFrame, CopyFrame) { - uint32_t timestamp = 1; - int64_t ntp_time_ms = 2; - int64_t render_time_ms = 3; int stride_y = 15; int stride_u = 10; int stride_v = 10; @@ -115,11 +112,6 @@ TEST(TestVideoFrame, CopyFrame) { int height = 15; // Copy frame. VideoFrame small_frame; - small_frame.CreateEmptyFrame(width, height, - stride_y, stride_u, stride_v); - small_frame.set_timestamp(timestamp); - small_frame.set_ntp_time_ms(ntp_time_ms); - small_frame.set_render_time_ms(render_time_ms); const int kSizeY = 400; const int kSizeU = 100; const int kSizeV = 100; @@ -214,8 +206,7 @@ TEST(TestVideoFrame, CopyBuffer) { int stride_uv = 10; const int kSizeY = 225; const int kSizeUv = 80; - frame2.CreateEmptyFrame(width, height, - stride_y, stride_uv, stride_uv); + uint8_t buffer_y[kSizeY]; uint8_t buffer_u[kSizeUv]; uint8_t buffer_v[kSizeUv]; @@ -234,20 +225,6 @@ TEST(TestVideoFrame, CopyBuffer) { stride_uv, 8, 8)); } -TEST(TestVideoFrame, FailToReuseAllocation) { - VideoFrame frame1; - frame1.CreateEmptyFrame(640, 320, 640, 320, 320); - const uint8_t* y = frame1.video_frame_buffer()->DataY(); - const uint8_t* u = frame1.video_frame_buffer()->DataU(); - const uint8_t* v = frame1.video_frame_buffer()->DataV(); - // Make a shallow copy of |frame1|. - VideoFrame frame2(frame1.video_frame_buffer(), 0, 0, kVideoRotation_0); - frame1.CreateEmptyFrame(640, 320, 640, 320, 320); - EXPECT_NE(y, frame1.video_frame_buffer()->DataY()); - EXPECT_NE(u, frame1.video_frame_buffer()->DataU()); - EXPECT_NE(v, frame1.video_frame_buffer()->DataV()); -} - TEST(TestVideoFrame, TextureInitialValues) { test::FakeNativeHandle* handle = new test::FakeNativeHandle(); VideoFrame frame = test::FakeNativeHandle::CreateFrame( diff --git a/webrtc/common_video/video_frame.cc b/webrtc/common_video/video_frame.cc index a9f0b4d295..9a8f8ab318 100644 --- a/webrtc/common_video/video_frame.cc +++ b/webrtc/common_video/video_frame.cc @@ -51,29 +51,6 @@ VideoFrame::VideoFrame(const rtc::scoped_refptr& buffer, RTC_DCHECK(buffer); } -void VideoFrame::CreateEmptyFrame(int width, - int height, - int stride_y, - int stride_u, - int stride_v) { - const int half_width = (width + 1) / 2; - RTC_DCHECK_GT(width, 0); - RTC_DCHECK_GT(height, 0); - RTC_DCHECK_GE(stride_y, width); - RTC_DCHECK_GE(stride_u, half_width); - RTC_DCHECK_GE(stride_v, half_width); - - // Creating empty frame - reset all values. - timestamp_rtp_ = 0; - ntp_time_ms_ = 0; - timestamp_us_ = 0; - rotation_ = kVideoRotation_0; - - // Allocate a new buffer. - video_frame_buffer_ = I420Buffer::Create( - width, height, stride_y, stride_u, stride_v); -} - void VideoFrame::CreateFrame(const uint8_t* buffer_y, const uint8_t* buffer_u, const uint8_t* buffer_v, diff --git a/webrtc/modules/video_coding/video_sender_unittest.cc b/webrtc/modules/video_coding/video_sender_unittest.cc index e32cdacdb1..f66221e558 100644 --- a/webrtc/modules/video_coding/video_sender_unittest.cc +++ b/webrtc/modules/video_coding/video_sender_unittest.cc @@ -74,9 +74,8 @@ class EmptyFrameGenerator : public FrameGenerator { public: EmptyFrameGenerator(int width, int height) : width_(width), height_(height) {} VideoFrame* NextFrame() override { - frame_.reset(new VideoFrame()); - frame_->CreateEmptyFrame(width_, height_, width_, (width_ + 1) / 2, - (width_ + 1) / 2); + frame_.reset(new VideoFrame(I420Buffer::Create(width_, height_), + webrtc::kVideoRotation_0, 0)); return frame_.get(); } diff --git a/webrtc/test/fake_decoder.cc b/webrtc/test/fake_decoder.cc index 103b41ce56..4a35e78921 100644 --- a/webrtc/test/fake_decoder.cc +++ b/webrtc/test/fake_decoder.cc @@ -20,13 +20,6 @@ FakeDecoder::FakeDecoder() : callback_(NULL) {} int32_t FakeDecoder::InitDecode(const VideoCodec* config, int32_t number_of_cores) { config_ = *config; - size_t width = config->width; - size_t height = config->height; - frame_.CreateEmptyFrame(static_cast(width), - static_cast(height), - static_cast(width), - static_cast((width + 1) / 2), - static_cast((width + 1) / 2)); return WEBRTC_VIDEO_CODEC_OK; } @@ -35,11 +28,13 @@ int32_t FakeDecoder::Decode(const EncodedImage& input, const RTPFragmentationHeader* fragmentation, const CodecSpecificInfo* codec_specific_info, int64_t render_time_ms) { - frame_.set_timestamp(input._timeStamp); - frame_.set_ntp_time_ms(input.ntp_time_ms_); - frame_.set_render_time_ms(render_time_ms); + VideoFrame frame(I420Buffer::Create(config_.width, config_.height), + webrtc::kVideoRotation_0, + render_time_ms * rtc::kNumMicrosecsPerMillisec); + frame.set_timestamp(input._timeStamp); + frame.set_ntp_time_ms(input.ntp_time_ms_); - callback_->Decoded(frame_); + callback_->Decoded(frame); return WEBRTC_VIDEO_CODEC_OK; } diff --git a/webrtc/test/fake_decoder.h b/webrtc/test/fake_decoder.h index d9dad57c4e..b3120a027b 100644 --- a/webrtc/test/fake_decoder.h +++ b/webrtc/test/fake_decoder.h @@ -44,7 +44,6 @@ class FakeDecoder : public VideoDecoder { private: VideoCodec config_; - VideoFrame frame_; DecodedImageCallback* callback_; }; diff --git a/webrtc/test/frame_generator.cc b/webrtc/test/frame_generator.cc index a6afce01d9..302eafc0a4 100644 --- a/webrtc/test/frame_generator.cc +++ b/webrtc/test/frame_generator.cc @@ -154,6 +154,8 @@ class ScrollingImageFrameGenerator : public FrameGenerator { scroll_time_(scroll_time_ms), pause_time_(pause_time_ms), num_frames_(files.size()), + target_width_(static_cast(target_width)), + target_height_(static_cast(target_height)), current_frame_num_(num_frames_ - 1), current_source_frame_(nullptr), file_generator_(files, source_width, source_height, 1) { @@ -164,11 +166,6 @@ class ScrollingImageFrameGenerator : public FrameGenerator { RTC_DCHECK_GE(scroll_time_ms, 0); RTC_DCHECK_GE(pause_time_ms, 0); RTC_DCHECK_GT(scroll_time_ms + pause_time_ms, 0); - current_frame_.CreateEmptyFrame(static_cast(target_width), - static_cast(target_height), - static_cast(target_width), - static_cast((target_width + 1) / 2), - static_cast((target_width + 1) / 2)); } virtual ~ScrollingImageFrameGenerator() {} @@ -202,12 +199,10 @@ class ScrollingImageFrameGenerator : public FrameGenerator { } void CropSourceToScrolledImage(double scroll_factor) { - const int kTargetWidth = current_frame_.width(); - const int kTargetHeight = current_frame_.height(); - int scroll_margin_x = current_source_frame_->width() - kTargetWidth; + int scroll_margin_x = current_source_frame_->width() - target_width_; int pixels_scrolled_x = static_cast(scroll_margin_x * scroll_factor + 0.5); - int scroll_margin_y = current_source_frame_->height() - kTargetHeight; + int scroll_margin_y = current_source_frame_->height() - target_height_; int pixels_scrolled_y = static_cast(scroll_margin_y * scroll_factor + 0.5); @@ -225,7 +220,7 @@ class ScrollingImageFrameGenerator : public FrameGenerator { ¤t_source_frame_->video_frame_buffer()->DataY()[offset_y], ¤t_source_frame_->video_frame_buffer()->DataU()[offset_u], ¤t_source_frame_->video_frame_buffer()->DataV()[offset_v], - kTargetWidth, kTargetHeight, + target_width_, target_height_, current_source_frame_->video_frame_buffer()->StrideY(), current_source_frame_->video_frame_buffer()->StrideU(), current_source_frame_->video_frame_buffer()->StrideV(), @@ -237,6 +232,9 @@ class ScrollingImageFrameGenerator : public FrameGenerator { const int64_t scroll_time_; const int64_t pause_time_; const size_t num_frames_; + const int target_width_; + const int target_height_; + size_t current_frame_num_; VideoFrame* current_source_frame_; VideoFrame current_frame_; diff --git a/webrtc/video/overuse_frame_detector_unittest.cc b/webrtc/video/overuse_frame_detector_unittest.cc index 64747fa684..f00b32df6e 100644 --- a/webrtc/video/overuse_frame_detector_unittest.cc +++ b/webrtc/video/overuse_frame_detector_unittest.cc @@ -99,8 +99,8 @@ class OveruseFrameDetectorTest : public ::testing::Test, int width, int height, int delay_ms) { - VideoFrame frame; - frame.CreateEmptyFrame(width, height, width, width / 2, width / 2); + VideoFrame frame(I420Buffer::Create(width, height), + webrtc::kVideoRotation_0, 0); uint32_t timestamp = 0; while (num_frames-- > 0) { frame.set_timestamp(timestamp); @@ -281,8 +281,8 @@ TEST_F(OveruseFrameDetectorTest, MeasuresMultipleConcurrentSamples) { EXPECT_CALL(*(observer_.get()), OveruseDetected()).Times(testing::AtLeast(1)); static const int kIntervalMs = 33; static const size_t kNumFramesEncodingDelay = 3; - VideoFrame frame; - frame.CreateEmptyFrame(kWidth, kHeight, kWidth, kWidth / 2, kWidth / 2); + VideoFrame frame(I420Buffer::Create(kWidth, kHeight), + webrtc::kVideoRotation_0, 0); for (size_t i = 0; i < 1000; ++i) { // Unique timestamps. frame.set_timestamp(static_cast(i)); @@ -302,8 +302,8 @@ TEST_F(OveruseFrameDetectorTest, UpdatesExistingSamples) { EXPECT_CALL(*(observer_.get()), OveruseDetected()).Times(testing::AtLeast(1)); static const int kIntervalMs = 33; static const int kDelayMs = 30; - VideoFrame frame; - frame.CreateEmptyFrame(kWidth, kHeight, kWidth, kWidth / 2, kWidth / 2); + VideoFrame frame(I420Buffer::Create(kWidth, kHeight), + webrtc::kVideoRotation_0, 0); uint32_t timestamp = 0; for (size_t i = 0; i < 1000; ++i) { frame.set_timestamp(timestamp); diff --git a/webrtc/video_frame.h b/webrtc/video_frame.h index 8fbfb595a5..21654d95e4 100644 --- a/webrtc/video_frame.h +++ b/webrtc/video_frame.h @@ -44,22 +44,6 @@ class VideoFrame { int64_t render_time_ms, VideoRotation rotation); - // CreateEmptyFrame: Sets frame dimensions and allocates buffers based - // on set dimensions - height and plane stride. - // If required size is bigger than the allocated one, new buffers of adequate - // size will be allocated. - - // TODO(nisse): Deprecated. Should be deleted in the cricket::VideoFrame and - // webrtc::VideoFrame merge. If you need to write into the frame, create a - // VideoFrameBuffer of the desired size, e.g, using I420Buffer::Create and - // write to that. And if you need to wrap it into a VideoFrame, pass it to the - // constructor. - void CreateEmptyFrame(int width, - int height, - int stride_y, - int stride_u, - int stride_v); - // CreateFrame: Sets the frame's members and buffers. If required size is // bigger than allocated one, new buffers of adequate size will be allocated.