diff --git a/api/video/BUILD.gn b/api/video/BUILD.gn index fd8363a333..f4069d26a6 100644 --- a/api/video/BUILD.gn +++ b/api/video/BUILD.gn @@ -42,6 +42,8 @@ rtc_library("video_rtp_headers") { rtc_library("video_frame") { visibility = [ "*" ] sources = [ + "i420_buffer.cc", + "i420_buffer.h", "video_codec_type.h", "video_frame.cc", "video_frame.h", @@ -59,7 +61,9 @@ rtc_library("video_frame") { "..:scoped_refptr", "../../rtc_base:checks", "../../rtc_base:rtc_base_approved", + "../../rtc_base/memory:aligned_malloc", "../../rtc_base/system:rtc_export", + "//third_party/libyuv", ] absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ] } @@ -70,6 +74,47 @@ if (is_android) { } } +# Deprecated empty target. Use "video_frame" instead. +rtc_source_set("video_frame_i420") { + visibility = [ "*" ] + sources = [] + deps = [ ":video_frame" ] +} + +rtc_library("video_frame_i010") { + visibility = [ "*" ] + sources = [ + "i010_buffer.cc", + "i010_buffer.h", + ] + deps = [ + ":video_frame", + ":video_rtp_headers", + "..:scoped_refptr", + "../../rtc_base", + "../../rtc_base:checks", + "../../rtc_base/memory:aligned_malloc", + "//third_party/libyuv", + ] +} + +rtc_library("video_frame_nv12") { + visibility = [ "*" ] + sources = [ + "nv12_buffer.cc", + "nv12_buffer.h", + ] + deps = [ + ":video_frame", + "..:scoped_refptr", + "../../rtc_base", + "../../rtc_base:checks", + "../../rtc_base/memory:aligned_malloc", + "../../rtc_base/system:rtc_export", + "//third_party/libyuv", + ] +} + rtc_source_set("recordable_encoded_frame") { visibility = [ "*" ] sources = [ "recordable_encoded_frame.h" ] @@ -90,60 +135,6 @@ rtc_source_set("video_frame_type") { sources = [ "video_frame_type.h" ] } -rtc_library("video_frame_i420") { - visibility = [ "*" ] - sources = [ - "i420_buffer.cc", - "i420_buffer.h", - ] - deps = [ - ":video_frame", - ":video_rtp_headers", - "..:scoped_refptr", - "../../rtc_base", - "../../rtc_base:checks", - "../../rtc_base/memory:aligned_malloc", - "../../rtc_base/system:rtc_export", - "//third_party/libyuv", - ] -} - -rtc_library("video_frame_i010") { - visibility = [ "*" ] - sources = [ - "i010_buffer.cc", - "i010_buffer.h", - ] - deps = [ - ":video_frame", - ":video_frame_i420", - ":video_rtp_headers", - "..:scoped_refptr", - "../../rtc_base", - "../../rtc_base:checks", - "../../rtc_base/memory:aligned_malloc", - "//third_party/libyuv", - ] -} - -rtc_library("video_frame_nv12") { - visibility = [ "*" ] - sources = [ - "nv12_buffer.cc", - "nv12_buffer.h", - ] - deps = [ - ":video_frame", - ":video_frame_i420", - "..:scoped_refptr", - "../../rtc_base", - "../../rtc_base:checks", - "../../rtc_base/memory:aligned_malloc", - "../../rtc_base/system:rtc_export", - "//third_party/libyuv", - ] -} - rtc_library("encoded_image") { visibility = [ "*" ] sources = [ diff --git a/api/video/nv12_buffer.cc b/api/video/nv12_buffer.cc index d6f0183408..cfa85ac52e 100644 --- a/api/video/nv12_buffer.cc +++ b/api/video/nv12_buffer.cc @@ -14,6 +14,7 @@ #include "rtc_base/checks.h" #include "rtc_base/ref_counted_object.h" #include "third_party/libyuv/include/libyuv/convert.h" +#include "third_party/libyuv/include/libyuv/scale.h" namespace webrtc { @@ -122,4 +123,35 @@ void NV12Buffer::InitializeData() { memset(data_.get(), 0, NV12DataSize(height_, stride_y_, stride_uv_)); } +void NV12Buffer::CropAndScaleFrom(const NV12BufferInterface& src, + int offset_x, + int offset_y, + int crop_width, + int crop_height) { + RTC_CHECK_LE(crop_width, src.width()); + RTC_CHECK_LE(crop_height, src.height()); + RTC_CHECK_LE(crop_width + offset_x, src.width()); + RTC_CHECK_LE(crop_height + offset_y, src.height()); + RTC_CHECK_GE(offset_x, 0); + RTC_CHECK_GE(offset_y, 0); + + // Make sure offset is even so that u/v plane becomes aligned. + const int uv_offset_x = offset_x / 2; + const int uv_offset_y = offset_y / 2; + offset_x = uv_offset_x * 2; + offset_y = uv_offset_y * 2; + + const uint8_t* y_plane = src.DataY() + src.StrideY() * offset_y + offset_x; + const uint8_t* uv_plane = + src.DataUV() + src.StrideUV() * uv_offset_y + uv_offset_x * 2; + + // kFilterBox is unsupported in libyuv, so using kFilterBilinear instead. + int res = libyuv::NV12Scale(y_plane, src.StrideY(), uv_plane, src.StrideUV(), + crop_width, crop_height, MutableDataY(), + StrideY(), MutableDataUV(), StrideUV(), width(), + height(), libyuv::kFilterBilinear); + + RTC_DCHECK_EQ(res, 0); +} + } // namespace webrtc diff --git a/api/video/nv12_buffer.h b/api/video/nv12_buffer.h index 039f767e10..cb989e84b0 100644 --- a/api/video/nv12_buffer.h +++ b/api/video/nv12_buffer.h @@ -56,6 +56,14 @@ class RTC_EXPORT NV12Buffer : public NV12BufferInterface { // are resolved in a better way. Or in the mean time, use SetBlack. void InitializeData(); + // Scale the cropped area of |src| to the size of |this| buffer, and + // write the result into |this|. + void CropAndScaleFrom(const NV12BufferInterface& src, + int offset_x, + int offset_y, + int crop_width, + int crop_height); + protected: NV12Buffer(int width, int height); NV12Buffer(int width, int height, int stride_y, int stride_uv); diff --git a/api/video/test/BUILD.gn b/api/video/test/BUILD.gn index d46b48e618..72f50494bb 100644 --- a/api/video/test/BUILD.gn +++ b/api/video/test/BUILD.gn @@ -20,7 +20,6 @@ rtc_library("rtc_api_video_unittests") { "..:video_adaptation", "..:video_bitrate_allocation", "..:video_frame", - "..:video_frame_i420", "..:video_frame_nv12", "..:video_rtp_headers", "../../../test:frame_utils", diff --git a/api/video/video_frame_buffer.cc b/api/video/video_frame_buffer.cc index e7418cb160..64f339448b 100644 --- a/api/video/video_frame_buffer.cc +++ b/api/video/video_frame_buffer.cc @@ -10,10 +10,25 @@ #include "api/video/video_frame_buffer.h" +#include "api/video/i420_buffer.h" #include "rtc_base/checks.h" namespace webrtc { +rtc::scoped_refptr VideoFrameBuffer::CropAndScale( + int offset_x, + int offset_y, + int crop_width, + int crop_height, + int scaled_width, + int scaled_height) { + rtc::scoped_refptr result = + I420Buffer::Create(scaled_width, scaled_height); + result->CropAndScaleFrom(*this->ToI420(), offset_x, offset_y, crop_width, + crop_height); + return result; +} + const I420BufferInterface* VideoFrameBuffer::GetI420() const { // Overridden by subclasses that can return an I420 buffer without any // conversion, in particular, I420BufferInterface. @@ -124,5 +139,4 @@ int NV12BufferInterface::ChromaWidth() const { int NV12BufferInterface::ChromaHeight() const { return (height() + 1) / 2; } - } // namespace webrtc diff --git a/api/video/video_frame_buffer.h b/api/video/video_frame_buffer.h index 5a46c2e377..67b8797325 100644 --- a/api/video/video_frame_buffer.h +++ b/api/video/video_frame_buffer.h @@ -79,6 +79,24 @@ class RTC_EXPORT VideoFrameBuffer : public rtc::RefCountInterface { // behave as the other GetXXX methods below. virtual const I420BufferInterface* GetI420() const; + // A format specific scale function. Default implementation works by + // converting to I420. But more efficient implementations may override it, + // especially for kNative. + // First, the image is cropped to |crop_width| and |crop_height| and then + // scaled to |scaled_width| and |scaled_height|. + virtual rtc::scoped_refptr CropAndScale(int offset_x, + int offset_y, + int crop_width, + int crop_height, + int scaled_width, + int scaled_height); + + // Alias for common use case. + rtc::scoped_refptr Scale(int scaled_width, + int scaled_height) { + return CropAndScale(0, 0, width(), height(), scaled_width, scaled_height); + } + // These functions should only be called if type() is of the correct type. // Calling with a different type will result in a crash. const I420ABufferInterface* GetI420A() const; diff --git a/api/video_codecs/BUILD.gn b/api/video_codecs/BUILD.gn index 1569125345..a99027641e 100644 --- a/api/video_codecs/BUILD.gn +++ b/api/video_codecs/BUILD.gn @@ -137,7 +137,7 @@ rtc_library("rtc_software_fallback_wrappers") { deps = [ ":video_codecs_api", "..:fec_controller_api", - "../../api/video:video_frame_i420", + "../../api/video:video_frame", "../../media:rtc_h264_profile_id", "../../media:rtc_media_base", "../../modules/video_coding:video_codec_interface", diff --git a/api/video_codecs/test/BUILD.gn b/api/video_codecs/test/BUILD.gn index 10b18b6e5b..c47e5b919e 100644 --- a/api/video_codecs/test/BUILD.gn +++ b/api/video_codecs/test/BUILD.gn @@ -36,7 +36,6 @@ if (rtc_include_tests) { "../../video:encoded_image", "../../video:video_bitrate_allocation", "../../video:video_frame", - "../../video:video_frame_i420", "../../video:video_rtp_headers", "//testing/gtest", ] diff --git a/common_video/BUILD.gn b/common_video/BUILD.gn index 9cb6f454d7..bea8530860 100644 --- a/common_video/BUILD.gn +++ b/common_video/BUILD.gn @@ -49,7 +49,6 @@ rtc_library("common_video") { "../api/video:video_bitrate_allocation", "../api/video:video_bitrate_allocator", "../api/video:video_frame", - "../api/video:video_frame_i420", "../api/video:video_frame_nv12", "../api/video:video_rtp_headers", "../api/video_codecs:bitstream_parser_api", @@ -105,7 +104,7 @@ if (rtc_include_tests) { "../api/units:time_delta", "../api/video:video_frame", "../api/video:video_frame_i010", - "../api/video:video_frame_i420", + "../api/video:video_frame_nv12", "../api/video:video_rtp_headers", "../media:rtc_h264_profile_id", "../rtc_base", diff --git a/common_video/video_frame_unittest.cc b/common_video/video_frame_unittest.cc index 225a7d3089..9a7a5e2b7c 100644 --- a/common_video/video_frame_unittest.cc +++ b/common_video/video_frame_unittest.cc @@ -15,6 +15,7 @@ #include "api/video/i010_buffer.h" #include "api/video/i420_buffer.h" +#include "api/video/nv12_buffer.h" #include "rtc_base/bind.h" #include "rtc_base/time_utils.h" #include "test/fake_texture_frame.h" @@ -157,6 +158,29 @@ rtc::scoped_refptr CreateGradient(VideoFrameBuffer::Type type, return I010Buffer::Copy(*buffer); } +rtc::scoped_refptr CreateNV12Gradient(int width, + int height) { + rtc::scoped_refptr buffer(NV12Buffer::Create(width, height)); + // Initialize with gradient, Y = 128(x/w + y/h), U = 256 x/w, V = 256 y/h + for (int x = 0; x < width; x++) { + for (int y = 0; y < height; y++) { + buffer->MutableDataY()[x + y * width] = + 128 * (x * height + y * width) / (width * height); + } + } + int chroma_width = buffer->ChromaWidth(); + int chroma_height = buffer->ChromaHeight(); + for (int x = 0; x < chroma_width; x++) { + for (int y = 0; y < chroma_height; y++) { + buffer->MutableDataUV()[x * 2 + y * buffer->StrideUV()] = + 255 * x / (chroma_width - 1); + buffer->MutableDataUV()[x * 2 + 1 + y * buffer->StrideUV()] = + 255 * y / (chroma_height - 1); + } + } + return buffer; +} + // The offsets and sizes describe the rectangle extracted from the // original (gradient) frame, in relative coordinates where the // original frame correspond to the unit square, 0.0 <= x, y < 1.0. @@ -495,6 +519,35 @@ INSTANTIATE_TEST_SUITE_P(All, ::testing::Values(VideoFrameBuffer::Type::kI420, VideoFrameBuffer::Type::kI010)); +TEST(TestNV12Buffer, CropAndScale) { + const int kSourceWidth = 640; + const int kSourceHeight = 480; + const int kScaledWidth = 320; + const int kScaledHeight = 240; + const int kCropLeft = 40; + const int kCropTop = 30; + const int kCropRight = 0; + const int kCropBottom = 30; + + rtc::scoped_refptr buf = + CreateNV12Gradient(kSourceWidth, kSourceHeight); + + rtc::scoped_refptr scaled_buffer = buf->CropAndScale( + kCropLeft, kCropTop, kSourceWidth - kCropLeft - kCropRight, + kSourceHeight - kCropTop - kCropBottom, kScaledWidth, kScaledHeight); + + // Parameters to CheckCrop indicate what part of the source frame is in the + // scaled frame. + const float kOffsetX = (kCropLeft + 0.0) / kSourceWidth; + const float kOffsetY = (kCropTop + 0.0) / kSourceHeight; + const float kRelativeWidth = + (kSourceWidth - kCropLeft - kCropRight + 0.0) / kSourceWidth; + const float kRelativeHeight = + (kSourceHeight - kCropTop - kCropBottom + 0.0) / kSourceHeight; + CheckCrop(*scaled_buffer->ToI420(), kOffsetX, kOffsetY, kRelativeWidth, + kRelativeHeight); +} + class TestPlanarYuvBufferRotate : public ::testing::TestWithParam< std::tuple> {}; diff --git a/examples/BUILD.gn b/examples/BUILD.gn index c7b113ad73..4315e0c216 100644 --- a/examples/BUILD.gn +++ b/examples/BUILD.gn @@ -667,7 +667,7 @@ if (is_linux || is_chromeos || is_win) { "../api:scoped_refptr", "../api/audio:audio_mixer_api", "../api/audio_codecs:audio_codecs_api", - "../api/video:video_frame_i420", + "../api/video:video_frame", "../api/video:video_rtp_headers", "../api/video_codecs:video_codecs_api", "../media:rtc_media_base", diff --git a/media/BUILD.gn b/media/BUILD.gn index b73661295c..212ccf9eae 100644 --- a/media/BUILD.gn +++ b/media/BUILD.gn @@ -99,7 +99,6 @@ rtc_library("rtc_media_base") { "../api/video:video_bitrate_allocation", "../api/video:video_bitrate_allocator_factory", "../api/video:video_frame", - "../api/video:video_frame_i420", "../api/video:video_rtp_headers", "../api/video_codecs:video_codecs_api", "../call:call_interfaces", @@ -185,7 +184,6 @@ rtc_library("rtc_simulcast_encoder_adapter") { "../api:scoped_refptr", "../api/video:video_codec_constants", "../api/video:video_frame", - "../api/video:video_frame_i420", "../api/video:video_rtp_headers", "../api/video_codecs:rtc_software_fallback_wrappers", "../api/video_codecs:video_codecs_api", @@ -299,7 +297,6 @@ rtc_library("rtc_audio_video") { "../api/video:video_bitrate_allocator_factory", "../api/video:video_codec_constants", "../api/video:video_frame", - "../api/video:video_frame_i420", "../api/video:video_rtp_headers", "../api/video_codecs:rtc_software_fallback_wrappers", "../api/video_codecs:video_codecs_api", @@ -466,7 +463,6 @@ if (rtc_include_tests) { "../api/video:encoded_image", "../api/video:video_bitrate_allocation", "../api/video:video_frame", - "../api/video:video_frame_i420", "../api/video:video_rtp_headers", "../api/video_codecs:video_codecs_api", "../call:call_interfaces", @@ -568,7 +564,6 @@ if (rtc_include_tests) { "../api/video:builtin_video_bitrate_allocator_factory", "../api/video:video_bitrate_allocation", "../api/video:video_frame", - "../api/video:video_frame_i420", "../api/video:video_rtp_headers", "../api/video_codecs:builtin_video_decoder_factory", "../api/video_codecs:builtin_video_encoder_factory", diff --git a/modules/video_capture/BUILD.gn b/modules/video_capture/BUILD.gn index 9822981e24..b63a78adbe 100644 --- a/modules/video_capture/BUILD.gn +++ b/modules/video_capture/BUILD.gn @@ -30,7 +30,6 @@ rtc_library("video_capture_module") { "..:module_api", "../../api:scoped_refptr", "../../api/video:video_frame", - "../../api/video:video_frame_i420", "../../api/video:video_rtp_headers", "../../common_video", "../../media:rtc_media_base", @@ -132,7 +131,6 @@ if (!build_with_chromium) { ":video_capture_module", "../../api:scoped_refptr", "../../api/video:video_frame", - "../../api/video:video_frame_i420", "../../api/video:video_rtp_headers", "../../common_video", "../../rtc_base:rtc_base_approved", diff --git a/modules/video_coding/BUILD.gn b/modules/video_coding/BUILD.gn index 7cbd1fc8ff..86bd1666c7 100644 --- a/modules/video_coding/BUILD.gn +++ b/modules/video_coding/BUILD.gn @@ -20,7 +20,6 @@ rtc_library("encoded_frame") { ":video_codec_interface", "../../api/video:encoded_image", "../../api/video:video_frame", - "../../api/video:video_frame_i420", "../../api/video:video_rtp_headers", "../../modules:module_api_public", "../../modules/rtp_rtcp:rtp_video_header", @@ -186,7 +185,6 @@ rtc_library("video_coding") { "../../api/video:video_adaptation", "../../api/video:video_bitrate_allocator", "../../api/video:video_frame", - "../../api/video:video_frame_i420", "../../api/video:video_frame_type", "../../api/video:video_rtp_headers", "../../api/video_codecs:video_codecs_api", @@ -380,7 +378,6 @@ rtc_library("webrtc_h264") { ":video_coding_utility", "../../api/video:video_frame", "../../api/video:video_frame_i010", - "../../api/video:video_frame_i420", "../../api/video:video_rtp_headers", "../../api/video_codecs:video_codecs_api", "../../common_video", @@ -428,7 +425,6 @@ rtc_library("webrtc_multiplex") { "../../api:scoped_refptr", "../../api/video:encoded_image", "../../api/video:video_frame", - "../../api/video:video_frame_i420", "../../api/video:video_rtp_headers", "../../api/video_codecs:video_codecs_api", "../../common_video", @@ -463,7 +459,6 @@ rtc_library("webrtc_vp8") { "../../api:scoped_refptr", "../../api/video:encoded_image", "../../api/video:video_frame", - "../../api/video:video_frame_i420", "../../api/video:video_rtp_headers", "../../api/video_codecs:video_codecs_api", "../../api/video_codecs:vp8_temporal_layers_factory", @@ -660,7 +655,6 @@ if (rtc_include_tests) { "../../api:simulcast_test_fixture_api", "../../api/video:encoded_image", "../../api/video:video_frame", - "../../api/video:video_frame_i420", "../../api/video:video_rtp_headers", "../../api/video_codecs:video_codecs_api", "../../common_video", @@ -698,7 +692,6 @@ if (rtc_include_tests) { "../../api/video:video_bitrate_allocator", "../../api/video:video_bitrate_allocator_factory", "../../api/video:video_frame", - "../../api/video:video_frame_i420", "../../api/video:video_rtp_headers", "../../api/video_codecs:video_codecs_api", "../../common_video", @@ -850,7 +843,6 @@ if (rtc_include_tests) { "../../api/test/video:function_video_factory", "../../api/video:encoded_image", "../../api/video:video_frame", - "../../api/video:video_frame_i420", "../../api/video:video_rtp_headers", "../../api/video_codecs:rtc_software_fallback_wrappers", "../../api/video_codecs:video_codecs_api", @@ -982,7 +974,6 @@ if (rtc_include_tests) { "../../api/video:video_bitrate_allocator", "../../api/video:video_bitrate_allocator_factory", "../../api/video:video_frame", - "../../api/video:video_frame_i420", "../../api/video:video_frame_type", "../../api/video:video_rtp_headers", "../../api/video_codecs:video_codecs_api", diff --git a/modules/video_coding/codecs/av1/BUILD.gn b/modules/video_coding/codecs/av1/BUILD.gn index a1d2f6ec0f..6c649538c8 100644 --- a/modules/video_coding/codecs/av1/BUILD.gn +++ b/modules/video_coding/codecs/av1/BUILD.gn @@ -22,7 +22,7 @@ rtc_library("libaom_av1_decoder") { "../..:video_codec_interface", "../../../../api:scoped_refptr", "../../../../api/video:encoded_image", - "../../../../api/video:video_frame_i420", + "../../../../api/video:video_frame", "../../../../common_video", "../../../../rtc_base:logging", "//third_party/libaom", @@ -116,7 +116,6 @@ rtc_library("libaom_av1_encoder") { "../../../../api:scoped_refptr", "../../../../api/video:encoded_image", "../../../../api/video:video_frame", - "../../../../api/video:video_frame_i420", "../../../../common_video", "../../../../rtc_base:checks", "../../../../rtc_base:logging", @@ -161,7 +160,7 @@ if (rtc_include_tests) { "../../../../api:mock_video_encoder", "../../../../api/units:data_size", "../../../../api/units:time_delta", - "../../../../api/video:video_frame_i420", + "../../../../api/video:video_frame", "../../../../api/video_codecs:video_codecs_api", "../../../../test:test_support", ] diff --git a/modules/video_processing/BUILD.gn b/modules/video_processing/BUILD.gn index abc9f039ce..871012ae18 100644 --- a/modules/video_processing/BUILD.gn +++ b/modules/video_processing/BUILD.gn @@ -29,7 +29,6 @@ rtc_library("video_processing") { "..:module_api", "../../api:scoped_refptr", "../../api/video:video_frame", - "../../api/video:video_frame_i420", "../../api/video:video_rtp_headers", "../../common_audio", "../../common_video", @@ -100,7 +99,6 @@ if (rtc_include_tests) { ":video_processing", "../../api:scoped_refptr", "../../api/video:video_frame", - "../../api/video:video_frame_i420", "../../api/video:video_rtp_headers", "../../common_video", "../../test:fileutils", diff --git a/rtc_tools/BUILD.gn b/rtc_tools/BUILD.gn index ae1c930092..8a10d1440a 100644 --- a/rtc_tools/BUILD.gn +++ b/rtc_tools/BUILD.gn @@ -56,7 +56,6 @@ rtc_library("video_file_reader") { deps = [ "../api:scoped_refptr", "../api/video:video_frame", - "../api/video:video_frame_i420", "../api/video:video_rtp_headers", "../rtc_base:checks", "../rtc_base:rtc_base_approved", @@ -76,7 +75,6 @@ rtc_library("video_file_writer") { ":video_file_reader", "../api:scoped_refptr", "../api/video:video_frame", - "../api/video:video_frame_i420", "../api/video:video_rtp_headers", "../rtc_base:rtc_base_approved", ] @@ -105,7 +103,6 @@ rtc_library("video_quality_analysis") { "../api:array_view", "../api:scoped_refptr", "../api/video:video_frame", - "../api/video:video_frame_i420", "../api/video:video_rtp_headers", "../common_video", "../rtc_base:checks", @@ -487,7 +484,6 @@ if (rtc_include_tests) { ":video_quality_analysis", "../api:scoped_refptr", "../api/video:video_frame", - "../api/video:video_frame_i420", "../api/video:video_rtp_headers", "../common_video", "../rtc_base", diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn index 14b2bca447..2a80c65049 100644 --- a/sdk/BUILD.gn +++ b/sdk/BUILD.gn @@ -383,7 +383,6 @@ if (is_ios || is_mac) { "../api:libjingle_peerconnection_api", "../api:media_stream_interface", "../api/video:video_frame", - "../api/video:video_frame_i420", "../api/video:video_rtp_headers", "../common_video", "../media:rtc_media_base", @@ -412,7 +411,6 @@ if (is_ios || is_mac) { deps = [ ":base_objc", "//api/video:video_frame", - "//api/video:video_frame_i420", "//api/video:video_rtp_headers", "//common_video", "//rtc_base:checks", @@ -1130,7 +1128,7 @@ if (is_ios || is_mac) { ":videotoolbox_objc", "../api:scoped_refptr", "../api/task_queue:default_task_queue_factory", - "../api/video:video_frame_i420", + "../api/video:video_frame", "../common_video", "../media:rtc_media_base", "../media:rtc_media_tests_utils", @@ -1656,7 +1654,6 @@ if (is_ios || is_mac) { ":vpx_codec_constants", ":wrapped_native_codec_objc", "../api/video:video_frame", - "../api/video:video_frame_i420", "../api/video:video_rtp_headers", "../api/video_codecs:video_codecs_api", "../common_video", diff --git a/sdk/android/api/org/webrtc/VideoFrame.java b/sdk/android/api/org/webrtc/VideoFrame.java index a0a0d4eecb..49c75facfd 100644 --- a/sdk/android/api/org/webrtc/VideoFrame.java +++ b/sdk/android/api/org/webrtc/VideoFrame.java @@ -54,7 +54,6 @@ public class VideoFrame implements RefCounted { * Crops a region defined by |cropx|, |cropY|, |cropWidth| and |cropHeight|. Scales it to size * |scaleWidth| x |scaleHeight|. */ - @CalledByNative("Buffer") Buffer cropAndScale( int cropX, int cropY, int cropWidth, int cropHeight, int scaleWidth, int scaleHeight); } diff --git a/sdk/android/src/jni/video_frame.cc b/sdk/android/src/jni/video_frame.cc index d57fe8f9b7..ca33c5c009 100644 --- a/sdk/android/src/jni/video_frame.cc +++ b/sdk/android/src/jni/video_frame.cc @@ -152,19 +152,6 @@ const ScopedJavaGlobalRef& AndroidVideoBuffer::video_frame_buffer() return j_video_frame_buffer_; } -rtc::scoped_refptr AndroidVideoBuffer::CropAndScale( - JNIEnv* jni, - int crop_x, - int crop_y, - int crop_width, - int crop_height, - int scale_width, - int scale_height) { - return Adopt(jni, Java_Buffer_cropAndScale(jni, j_video_frame_buffer_, crop_x, - crop_y, crop_width, crop_height, - scale_width, scale_height)); -} - VideoFrameBuffer::Type AndroidVideoBuffer::type() const { return Type::kNative; } diff --git a/sdk/android/src/jni/video_frame.h b/sdk/android/src/jni/video_frame.h index f6b569a3e5..cb0ff0e11a 100644 --- a/sdk/android/src/jni/video_frame.h +++ b/sdk/android/src/jni/video_frame.h @@ -40,16 +40,6 @@ class AndroidVideoBuffer : public VideoFrameBuffer { const ScopedJavaGlobalRef& video_frame_buffer() const; - // Crops a region defined by |crop_x|, |crop_y|, |crop_width| and - // |crop_height|. Scales it to size |scale_width| x |scale_height|. - rtc::scoped_refptr CropAndScale(JNIEnv* jni, - int crop_x, - int crop_y, - int crop_width, - int crop_height, - int scale_width, - int scale_height); - protected: // Should not be called directly. Adopts the Java VideoFrame.Buffer. Use // Create() or Adopt() instead for clarity. diff --git a/test/BUILD.gn b/test/BUILD.gn index 58d3dab521..9fa0e006dc 100644 --- a/test/BUILD.gn +++ b/test/BUILD.gn @@ -52,7 +52,6 @@ rtc_library("frame_generator_impl") { "../api/video:encoded_image", "../api/video:video_frame", "../api/video:video_frame_i010", - "../api/video:video_frame_i420", "../api/video:video_frame_nv12", "../api/video:video_rtp_headers", "../api/video_codecs:video_codecs_api", @@ -86,7 +85,6 @@ rtc_library("frame_utils") { deps = [ "../api:scoped_refptr", "../api/video:video_frame", - "../api/video:video_frame_i420", ] } @@ -113,8 +111,6 @@ rtc_library("video_test_common") { "../api:scoped_refptr", "../api/task_queue", "../api/video:video_frame", - "../api/video:video_frame_i010", - "../api/video:video_frame_i420", "../api/video:video_rtp_headers", "../api/video_codecs:video_codecs_api", "../common_video", @@ -361,7 +357,6 @@ rtc_library("video_test_support") { "../api:scoped_refptr", "../api/video:encoded_image", "../api/video:video_frame", - "../api/video:video_frame_i420", "../api/video_codecs:video_codecs_api", "../common_video", "../media:rtc_media_base", @@ -517,7 +512,6 @@ if (rtc_include_tests) { "../api/test/video:function_video_factory", "../api/video:encoded_image", "../api/video:video_frame", - "../api/video:video_frame_i420", "../api/video_codecs:video_codecs_api", "../call:video_stream_api", "../common_video", @@ -763,7 +757,6 @@ rtc_library("fake_video_codecs") { "../api/video:encoded_image", "../api/video:video_bitrate_allocation", "../api/video:video_frame", - "../api/video:video_frame_i420", "../api/video:video_rtp_headers", "../api/video_codecs:video_codecs_api", "../api/video_codecs:vp8_temporal_layers_factory", diff --git a/test/pc/e2e/BUILD.gn b/test/pc/e2e/BUILD.gn index 5c9e259659..3901297063 100644 --- a/test/pc/e2e/BUILD.gn +++ b/test/pc/e2e/BUILD.gn @@ -124,10 +124,7 @@ if (!build_with_chromium) { "analyzer/video/simulcast_dummy_buffer_helper.cc", "analyzer/video/simulcast_dummy_buffer_helper.h", ] - deps = [ - "../../../api/video:video_frame", - "../../../api/video:video_frame_i420", - ] + deps = [ "../../../api/video:video_frame" ] } rtc_library("quality_analyzing_video_decoder") { @@ -144,7 +141,6 @@ if (!build_with_chromium) { "../../../api:video_quality_analyzer_api", "../../../api/video:encoded_image", "../../../api/video:video_frame", - "../../../api/video:video_frame_i420", "../../../api/video:video_rtp_headers", "../../../api/video_codecs:video_codecs_api", "../../../modules/video_coding:video_codec_interface", @@ -522,7 +518,6 @@ if (!build_with_chromium) { "../../../api:rtp_packet_info", "../../../api/video:encoded_image", "../../../api/video:video_frame", - "../../../api/video:video_frame_i420", "../../../common_video", "../../../modules/rtp_rtcp:rtp_rtcp_format", "../../../rtc_base:stringutils", @@ -645,7 +640,6 @@ if (!build_with_chromium) { "../../../api/units:timestamp", "../../../api/video:encoded_image", "../../../api/video:video_frame", - "../../../api/video:video_frame_i420", "../../../api/video:video_rtp_headers", "../../../common_video", "../../../rtc_base:criticalsection", diff --git a/test/scenario/BUILD.gn b/test/scenario/BUILD.gn index 2ec9d63dc8..f5c22fcafb 100644 --- a/test/scenario/BUILD.gn +++ b/test/scenario/BUILD.gn @@ -97,7 +97,6 @@ if (rtc_include_tests) { "../../api/units:timestamp", "../../api/video:builtin_video_bitrate_allocator_factory", "../../api/video:video_frame", - "../../api/video:video_frame_i420", "../../api/video:video_rtp_headers", "../../api/video_codecs:video_codecs_api", "../../audio", diff --git a/video/BUILD.gn b/video/BUILD.gn index f19588399b..115c71a005 100644 --- a/video/BUILD.gn +++ b/video/BUILD.gn @@ -86,7 +86,6 @@ rtc_library("video") { "../api/video:video_bitrate_allocator", "../api/video:video_codec_constants", "../api/video:video_frame", - "../api/video:video_frame_i420", "../api/video:video_rtp_headers", "../api/video:video_stream_encoder", "../api/video:video_stream_encoder_create", @@ -227,7 +226,6 @@ rtc_library("video_stream_encoder_impl") { "../api/video:video_bitrate_allocator_factory", "../api/video:video_codec_constants", "../api/video:video_frame", - "../api/video:video_frame_i420", "../api/video:video_rtp_headers", "../api/video:video_stream_encoder", "../api/video_codecs:video_codecs_api", @@ -597,7 +595,6 @@ if (rtc_include_tests) { "../api/video:video_adaptation", "../api/video:video_bitrate_allocation", "../api/video:video_frame", - "../api/video:video_frame_i420", "../api/video:video_frame_nv12", "../api/video:video_frame_type", "../api/video:video_rtp_headers", diff --git a/video/adaptation/BUILD.gn b/video/adaptation/BUILD.gn index 2a60eadc5e..a96f4cf36a 100644 --- a/video/adaptation/BUILD.gn +++ b/video/adaptation/BUILD.gn @@ -80,7 +80,7 @@ if (rtc_include_tests) { "../../api/task_queue:task_queue", "../../api/video:encoded_image", "../../api/video:video_adaptation", - "../../api/video:video_frame_i420", + "../../api/video:video_frame", "../../api/video_codecs:video_codecs_api", "../../call/adaptation:resource_adaptation", "../../call/adaptation:resource_adaptation_test_utilities",