Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1180)

Unified Diff: media/gpu/media_foundation_video_encode_accelerator_win.h

Issue 2427053002: Move video encode accelerator IPC messages to GPU IO thread (Closed)
Patch Set: Fix log order. Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: media/gpu/media_foundation_video_encode_accelerator_win.h
diff --git a/media/gpu/media_foundation_video_encode_accelerator_win.h b/media/gpu/media_foundation_video_encode_accelerator_win.h
index 3060abb194cdedaa5900e5e63c78e331d8f51ccb..08dcd4d843f014cfd8bf41ef55e700489ebc16e2 100644
--- a/media/gpu/media_foundation_video_encode_accelerator_win.h
+++ b/media/gpu/media_foundation_video_encode_accelerator_win.h
@@ -28,10 +28,11 @@ namespace media {
// Media Foundation implementation of the VideoEncodeAccelerator interface for
// Windows.
// This class saves the task runner on which it is constructed and returns
-// encoded data to the client using that same task runner. This class has
-// DCHECKs to makes sure that methods are called in sequence. It starts an
-// internal encoder thread on which VideoEncodeAccelerator implementation tasks
-// are posted.
+// encoded data to the client using that same task runner. If
+// TryToSetupEncodeOnSeparateThread() is called, it uses the given
+// |encode_task_runner| instead. This class has DCHECKs to makes sure that
+// methods are called in sequence. It starts an internal encoder thread on which
+// VideoEncodeAccelerator implementation tasks are posted.
class MEDIA_GPU_EXPORT MediaFoundationVideoEncodeAccelerator
: public VideoEncodeAccelerator {
public:
@@ -50,6 +51,10 @@ class MEDIA_GPU_EXPORT MediaFoundationVideoEncodeAccelerator
void RequestEncodingParametersChange(uint32_t bitrate,
uint32_t framerate) override;
void Destroy() override;
+ bool TryToSetupEncodeOnSeparateThread(
+ const base::WeakPtr<Client>& encode_client,
+ const scoped_refptr<base::SingleThreadTaskRunner>& encode_task_runner)
+ override;
// Preload dlls required for encoding.
static void PreSandboxInitialization();
@@ -130,9 +135,15 @@ class MEDIA_GPU_EXPORT MediaFoundationVideoEncodeAccelerator
std::unique_ptr<base::WeakPtrFactory<Client>> client_ptr_factory_;
// Our original calling task runner for the child thread.
- const scoped_refptr<base::SequencedTaskRunner> client_task_runner_;
- // Sequence checker to enforce that the methods of this object are called in
- // sequence.
+ scoped_refptr<base::SequencedTaskRunner> client_task_runner_;
+
+ // Thread checker to enforce that this object created, initialized and
+ // destroyed on a specific thread. It is pinned on the thread where object is
+ // created.
+ base::ThreadChecker thread_checker_;
+
+ // Sequence checker to enforce that the encode tasks of this object are called
+ // in sequence.
base::SequenceChecker sequence_checker_;
// This thread services tasks posted from the VEA API entry points by the

Powered by Google App Engine
This is Rietveld 408576698