const std::string& thread_name,
Ts&&... args) {
auto decoder_thread = std::make_unique<base::Thread>(thread_name);
- if (!decoder_thread->Start()) {
+ if (!decoder_thread->IsRunning() &&
+ !decoder_thread->StartWithOptions(
+ base::Thread::Options(base::MessagePumpType::IO, 0))) {
return;
}
#include "base/memory/scoped_refptr.h"
#include "base/memory/weak_ptr.h"
#include "base/task/bind_post_task.h"
+#include "base/task/current_thread.h"
#include "base/task/sequenced_task_runner.h"
#include "base/task/single_thread_task_runner.h"
#include "base/task/task_runner.h"
void TTvdVideoDecoderImpl::BindReceiver(
mojo::PendingReceiver<gfx::mojom::TizenOverlayCollection>
pending_receiver) {
- if (receiver_.is_bound()) {
- receiver_.reset();
+ if (mojo::IsDirectReceiverSupported()) {
+ TIZEN_MEDIA_LOG(INFO) << "Use direct receiver";
+ auto& receiver =
+ receiver_
+ .emplace<mojo::DirectReceiver<gfx::mojom::TizenOverlayCollection>>(
+ mojo::DirectReceiverKey{}, this);
+ receiver.Bind(std::move(pending_receiver));
+ } else {
+ TIZEN_MEDIA_LOG(INFO) << "Use standard receiver";
+ auto& receiver =
+ receiver_.emplace<mojo::Receiver<gfx::mojom::TizenOverlayCollection>>(
+ this);
+ receiver.Bind(std::move(pending_receiver));
}
- receiver_.Bind(std::move(pending_receiver));
}
void TTvdVideoDecoderImpl::NotifyPlaneCollectionAboutTexturingChange() {
#include <deque>
#include <map>
#include <string>
+#include <variant>
#include <vector>
#include "absl/types/optional.h"
#include "media/mojo/mojom/ttvd_media_provider.mojom.h"
#include "media/mojo/services/mojo_cdm_service_context.h"
#include "mojo/public/cpp/bindings/associated_remote.h"
+#include "mojo/public/cpp/bindings/direct_receiver.h"
#include "mojo/public/cpp/bindings/pending_associated_remote.h"
#include "mojo/public/cpp/bindings/receiver.h"
#include "mojo/public/cpp/bindings/remote.h"
mojo::Receiver<suspend_resume::mojom::SuspendResumeObserver>
suspend_resume_observer_{this};
- mojo::Receiver<gfx::mojom::TizenOverlayCollection> receiver_{this};
+ std::variant<std::monostate,
+ mojo::Receiver<gfx::mojom::TizenOverlayCollection>,
+ mojo::DirectReceiver<gfx::mojom::TizenOverlayCollection>>
+ receiver_;
base::flat_map<base::UnguessableToken, scoped_refptr<VideoFrame>>
video_frames_;
class AsyncLayerTreeFrameSink;
}
+namespace media {
+class TTvdVideoDecoderImpl;
+}
+
namespace mojo {
namespace internal {
friend class cc::mojo_embedder::AsyncLayerTreeFrameSink;
friend class mojo::test::direct_receiver_unittest::ServiceImpl;
friend class blink::WidgetInputHandlerImpl;
+ friend class media::TTvdVideoDecoderImpl;
};
// DirectReceiver is a wrapper around the standard Receiver<T> type that always