Commit 347f14d6 authored by Wez's avatar Wez Committed by Commit Bot

[media] Remove CancelableTaskTracker from VaapiImageProcessor.

Bug: 1025372
Change-Id: I0489b76bf859ab097f5c4e62a55938cbdd7064e0
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1957174
Commit-Queue: Scott Violet <sky@chromium.org>
Reviewed-by: default avatarScott Violet <sky@chromium.org>
Auto-Submit: Wez <wez@chromium.org>
Cr-Commit-Position: refs/heads/master@{#723389}
parent 26b32bba
...@@ -71,6 +71,28 @@ bool IsSupported(uint32_t input_va_fourcc, ...@@ -71,6 +71,28 @@ bool IsSupported(uint32_t input_va_fourcc,
return true; return true;
} }
void ProcessFrame(scoped_refptr<VaapiWrapper> vaapi_wrapper,
scoped_refptr<VideoFrame> input_frame,
scoped_refptr<VideoFrame> output_frame,
scoped_refptr<base::SequencedTaskRunner> client_task_runner,
ImageProcessor::FrameReadyCB cb) {
DVLOGF(4);
auto src_va_surface =
vaapi_wrapper->CreateVASurfaceForVideoFrame(input_frame.get());
auto dst_va_surface =
vaapi_wrapper->CreateVASurfaceForVideoFrame(output_frame.get());
if (!src_va_surface || !dst_va_surface) {
// Failed to create VASurface for frames. |cb| isn't executed in the case.
return;
}
// VA-API performs pixel format conversion and scaling without any filters.
vaapi_wrapper->BlitSurface(std::move(src_va_surface),
std::move(dst_va_surface));
client_task_runner->PostTask(
FROM_HERE, base::BindOnce(std::move(cb), std::move(output_frame)));
}
} // namespace } // namespace
// static // static
...@@ -154,7 +176,6 @@ VaapiImageProcessor::VaapiImageProcessor( ...@@ -154,7 +176,6 @@ VaapiImageProcessor::VaapiImageProcessor(
base::TaskTraits{base::ThreadPool()})), base::TaskTraits{base::ThreadPool()})),
vaapi_wrapper_(std::move(vaapi_wrapper)) { vaapi_wrapper_(std::move(vaapi_wrapper)) {
DETACH_FROM_SEQUENCE(client_sequence_checker_); DETACH_FROM_SEQUENCE(client_sequence_checker_);
DETACH_FROM_SEQUENCE(processor_sequence_checker_);
} }
VaapiImageProcessor::~VaapiImageProcessor() { VaapiImageProcessor::~VaapiImageProcessor() {
...@@ -168,41 +189,27 @@ bool VaapiImageProcessor::ProcessInternal( ...@@ -168,41 +189,27 @@ bool VaapiImageProcessor::ProcessInternal(
DVLOGF(4); DVLOGF(4);
DCHECK_CALLED_ON_VALID_SEQUENCE(client_sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(client_sequence_checker_);
// TODO(akahuang): Use WeakPtr to replace base::Unretained(this). FrameReadyCB on_frame_ready =
process_task_tracker_.PostTask( base::BindOnce(&VaapiImageProcessor::OnOutputFrameReady,
processor_task_runner_.get(), FROM_HERE, weak_factory_.GetWeakPtr(), std::move(cb));
base::BindOnce(&VaapiImageProcessor::ProcessTask, base::Unretained(this), processor_task_runner_->PostTask(
std::move(input_frame), std::move(output_frame), FROM_HERE,
std::move(cb))); base::BindOnce(&ProcessFrame, vaapi_wrapper_, std::move(input_frame),
std::move(output_frame), client_task_runner_,
std::move(on_frame_ready)));
return true; return true;
} }
void VaapiImageProcessor::ProcessTask(scoped_refptr<VideoFrame> input_frame, void VaapiImageProcessor::OnOutputFrameReady(FrameReadyCB cb,
scoped_refptr<VideoFrame> output_frame, scoped_refptr<VideoFrame> frame) {
FrameReadyCB cb) { std::move(cb).Run(std::move(frame));
DVLOGF(4);
DCHECK_CALLED_ON_VALID_SEQUENCE(processor_sequence_checker_);
auto src_va_surface =
vaapi_wrapper_->CreateVASurfaceForVideoFrame(input_frame.get());
auto dst_va_surface =
vaapi_wrapper_->CreateVASurfaceForVideoFrame(output_frame.get());
if (!src_va_surface || !dst_va_surface) {
// Failed to create VASurface for frames. |cb| isn't executed in the case.
return;
}
// VA-API performs pixel format conversion and scaling without any filters.
vaapi_wrapper_->BlitSurface(std::move(src_va_surface),
std::move(dst_va_surface));
client_task_runner_->PostTask(
FROM_HERE, base::BindOnce(std::move(cb), std::move(output_frame)));
} }
bool VaapiImageProcessor::Reset() { bool VaapiImageProcessor::Reset() {
VLOGF(2); VLOGF(2);
DCHECK_CALLED_ON_VALID_SEQUENCE(client_sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(client_sequence_checker_);
process_task_tracker_.TryCancelAll(); weak_factory_.InvalidateWeakPtrs();
return true; return true;
} }
} // namespace media } // namespace media
...@@ -9,9 +9,8 @@ ...@@ -9,9 +9,8 @@
#include "base/callback_forward.h" #include "base/callback_forward.h"
#include "base/macros.h" #include "base/macros.h"
#include "base/sequence_checker.h" #include "base/memory/weak_ptr.h"
#include "base/sequenced_task_runner.h" #include "base/sequenced_task_runner.h"
#include "base/task/cancelable_task_tracker.h"
#include "build/build_config.h" #include "build/build_config.h"
#include "media/gpu/chromeos/image_processor.h" #include "media/gpu/chromeos/image_processor.h"
...@@ -51,21 +50,16 @@ class VaapiImageProcessor : public ImageProcessor { ...@@ -51,21 +50,16 @@ class VaapiImageProcessor : public ImageProcessor {
scoped_refptr<VideoFrame> output_frame, scoped_refptr<VideoFrame> output_frame,
FrameReadyCB cb) override; FrameReadyCB cb) override;
void ProcessTask(scoped_refptr<VideoFrame> input_frame, // Callback invoked on completion of VAAPI frame processing tasks.
scoped_refptr<VideoFrame> output_frame, void OnOutputFrameReady(FrameReadyCB cb, scoped_refptr<VideoFrame> frame);
FrameReadyCB cb);
// Sequence task runner in which the buffer conversion is performed. // Sequence task runner in which the buffer conversion is performed.
const scoped_refptr<base::SequencedTaskRunner> processor_task_runner_; const scoped_refptr<base::SequencedTaskRunner> processor_task_runner_;
SEQUENCE_CHECKER(processor_sequence_checker_);
// CancelableTaskTracker for posted tasks to |processor_task_runner_|. We
// can't use CancelableCallback or WeakPtr because we may need to cancel tasks
// from outside |processor_task_runner_|.
base::CancelableTaskTracker process_task_tracker_;
const scoped_refptr<VaapiWrapper> vaapi_wrapper_; const scoped_refptr<VaapiWrapper> vaapi_wrapper_;
base::WeakPtrFactory<VaapiImageProcessor> weak_factory_{this};
DISALLOW_COPY_AND_ASSIGN(VaapiImageProcessor); DISALLOW_COPY_AND_ASSIGN(VaapiImageProcessor);
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment