0

Replace simple usages of media::ConvertAndScaleFrame with VFC.

As titled, this replaces simple usage of media::ConvertAndScaleFrame()
with the VideoFrameConverter class. Behavior should be identical and
result in no pixel changes.

Bug: 1519317
Change-Id: I6b97789eca6761112695210302b2028eadcdb371
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5214544
Reviewed-by: Derek Schuff <dschuff@chromium.org>
Reviewed-by: Mark Foltz <mfoltz@chromium.org>
Reviewed-by: Eugene Zemtsov <eugene@chromium.org>
Commit-Queue: Dale Curtis <dalecurtis@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1249460}
This commit is contained in:
Dale Curtis
2024-01-19 20:09:21 +00:00
committed by Chromium LUCI CQ
parent e40c8d70db
commit 9540bde903
7 changed files with 18 additions and 17 deletions
components/mirroring/service
content/renderer/pepper
third_party/blink/renderer/modules

@ -10,7 +10,6 @@
#include "build/build_config.h"
#include "media/base/video_frame.h"
#include "media/base/video_frame_pool.h"
#include "media/base/video_util.h"
#include "media/capture/mojom/video_capture_buffer.mojom.h"
#include "media/capture/mojom/video_capture_types.mojom.h"
@ -277,7 +276,7 @@ void VideoCaptureClient::OnBufferReady(media::mojom::ReadyBufferPtr buffer) {
media::PIXEL_FORMAT_I420, frame->coded_size(),
frame->visible_rect(), frame->natural_size(), frame->timestamp());
media::EncoderStatus status =
media::ConvertAndScaleFrame(*frame, *new_frame, nv12_to_i420_tmp_buf_);
frame_converter_.ConvertAndScale(*frame, *new_frame);
if (!status.is_ok()) {
LOG(DFATAL) << "Unable to convert frame to I420.";
OnStateChanged(media::mojom::VideoCaptureResult::NewErrorCode(

@ -12,6 +12,7 @@
#include "base/memory/weak_ptr.h"
#include "base/sequence_checker.h"
#include "base/time/time.h"
#include "media/base/video_frame_converter.h"
#include "media/capture/mojom/video_capture.mojom.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/receiver.h"
@ -115,7 +116,7 @@ class COMPONENT_EXPORT(MIRRORING_SERVICE) VideoCaptureClient
// these structures are used to convert them to I420 on the CPU.
// https://crbug.com/1206325
std::unique_ptr<media::VideoFramePool> nv12_to_i420_pool_;
std::vector<uint8_t> nv12_to_i420_tmp_buf_;
media::VideoFrameConverter frame_converter_;
// Indicates whether we're in the middle of switching video capture host.
bool switching_video_capture_host_ = false;

@ -167,12 +167,11 @@ void PepperVideoCaptureHost::OnFrameReady(
media::PIXEL_FORMAT_I420, frame->natural_size(),
gfx::Rect(frame->natural_size()), frame->natural_size(), dst,
buffers_[i].buffer->size(), frame->timestamp());
int uv_size = mapped_frame->coded_size().GetArea() / 2;
std::vector<uint8_t> temp_uv_buffer(uv_size);
media::EncoderStatus status = media::ConvertAndScaleFrame(
*mapped_frame, *dst_frame, temp_uv_buffer);
if (!status.is_ok())
media::EncoderStatus status =
frame_converter_.ConvertAndScale(*mapped_frame, *dst_frame);
if (!status.is_ok()) {
return;
}
} else {
DCHECK_EQ(frame->format(), media::PIXEL_FORMAT_I420);
size_t num_planes = media::VideoFrame::NumPlanes(frame->format());

@ -15,6 +15,7 @@
#include "content/public/renderer/renderer_ppapi_host.h"
#include "content/renderer/pepper/pepper_device_enumeration_host_helper.h"
#include "content/renderer/pepper/ppb_buffer_impl.h"
#include "media/base/video_frame_converter.h"
#include "media/capture/video_capture_types.h"
#include "ppapi/c/dev/ppp_video_capture_dev.h"
#include "ppapi/host/host_message_context.h"
@ -119,6 +120,8 @@ class PepperVideoCaptureHost : public ppapi::host::ResourceHost {
ppapi::host::ReplyMessageContext open_reply_context_;
PepperDeviceEnumerationHostHelper enumeration_helper_;
media::VideoFrameConverter frame_converter_;
};
} // namespace content

@ -8,7 +8,7 @@
#include "base/run_loop.h"
#include "base/test/gmock_callback_support.h"
#include "media/base/limits.h"
#include "media/base/video_util.h"
#include "media/base/video_frame_converter.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/blink/public/platform/scheduler/test/renderer_scheduler_test_support.h"
@ -123,9 +123,7 @@ class CanvasCaptureHandlerTest
auto i420_frame = media::VideoFrame::CreateFrame(
converted_format, size, gfx::Rect(size), size,
video_frame->timestamp());
std::vector<uint8_t> tmp_buf;
auto status =
media::ConvertAndScaleFrame(*video_frame, *i420_frame, tmp_buf);
auto status = converter_.ConvertAndScale(*video_frame, *i420_frame);
EXPECT_TRUE(status.is_ok());
video_frame = i420_frame;
}
@ -159,6 +157,7 @@ class CanvasCaptureHandlerTest
std::unique_ptr<StaticBitmapImageToVideoFrameCopier> copier_;
// The Class under test. Needs to be scoped_ptr to force its destruction.
std::unique_ptr<CanvasCaptureHandler> canvas_capture_handler_;
media::VideoFrameConverter converter_;
protected:
VideoCapturerSource* GetVideoCapturerSource(

@ -530,10 +530,8 @@ VideoTrackRecorderImpl::Encoder::MaybeProvideEncodableFrame(
is_opaque ? media::PIXEL_FORMAT_I420 : media::PIXEL_FORMAT_I420A,
visible_rect.size(), visible_rect, visible_rect.size(),
video_frame->timestamp());
if (!frame ||
!media::ConvertAndScaleFrame(*video_frame, *frame, resize_buffer_)
.is_ok()) {
!frame_converter_.ConvertAndScale(*video_frame, *frame).is_ok()) {
// Send black frames (yuv = {0, 127, 127}).
DLOG(ERROR) << "Can't convert RGB to I420";
frame = media::VideoFrame::CreateColorFrame(

@ -16,6 +16,7 @@
#include "base/time/time.h"
#include "build/build_config.h"
#include "media/base/video_encoder.h"
#include "media/base/video_frame_converter.h"
#include "media/base/video_frame_pool.h"
#include "media/muxers/webm_muxer.h"
#include "media/renderers/paint_canvas_video_renderer.h"
@ -248,11 +249,12 @@ class VideoTrackRecorder : public TrackRecorder<MediaStreamVideoSink> {
std::unique_ptr<WebGraphicsContext3DProvider> encoder_thread_context_;
KeyFrameRequestProcessor key_frame_processor_;
bool awaiting_first_frame_ = true;
std::vector<uint8_t> resize_buffer_
ALLOW_DISCOURAGED_TYPE("Avoids conversion when passed to media:: code");
std::unique_ptr<media::VideoEncoderMetricsProvider> metrics_provider_;
media::VideoFramePool frame_pool_;
// Handle frame format conversions.
media::VideoFrameConverter frame_converter_;
};
// Class to encapsulate the enumeration of CodecIds/VideoCodecProfiles