summaryrefslogtreecommitdiffstats
path: root/dom/media/ipc/PRemoteDecoder.ipdl
diff options
context:
space:
mode:
Diffstat (limited to 'dom/media/ipc/PRemoteDecoder.ipdl')
-rw-r--r--dom/media/ipc/PRemoteDecoder.ipdl80
1 files changed, 80 insertions, 0 deletions
diff --git a/dom/media/ipc/PRemoteDecoder.ipdl b/dom/media/ipc/PRemoteDecoder.ipdl
new file mode 100644
index 0000000000..a0af29a9d6
--- /dev/null
+++ b/dom/media/ipc/PRemoteDecoder.ipdl
@@ -0,0 +1,80 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+include "mozilla/dom/MediaIPCUtils.h";
+
+include protocol PRemoteDecoderManager;
+
+using mozilla::MediaDataDecoder::ConversionRequired from "PlatformDecoderModule.h";
+using mozilla::TrackInfo::TrackType from "MediaInfo.h";
+using mozilla::layers::LayersBackend from "mozilla/layers/LayersTypes.h";
+using mozilla::MediaResult from "MediaResult.h";
+[RefCounted] using class mozilla::ArrayOfRemoteMediaRawData from "mozilla/RemoteMediaData.h";
+[RefCounted] using class mozilla::ArrayOfRemoteAudioData from "mozilla/RemoteMediaData.h";
+[RefCounted] using class mozilla::ArrayOfRemoteVideoData from "mozilla/RemoteMediaData.h";
+include PMediaDecoderParams;
+include LayersSurfaces;
+
+namespace mozilla {
+
+union DecodedOutputIPDL
+{
+ nullable ArrayOfRemoteAudioData;
+ nullable ArrayOfRemoteVideoData;
+};
+
+struct InitCompletionIPDL
+{
+ TrackType type;
+ nsCString decoderDescription;
+ nsCString decoderProcessName;
+ nsCString decoderCodecName;
+ bool hardware;
+ nsCString hardwareReason;
+ ConversionRequired conversion;
+};
+
+union InitResultIPDL
+{
+ MediaResult;
+ InitCompletionIPDL;
+};
+
+union DecodeResultIPDL
+{
+ MediaResult;
+ DecodedOutputIPDL;
+};
+
+// This protocol provides a way to use MediaDataDecoder across processes.
+// The parent side currently is only implemented to work with
+// RemoteDecoderModule or WindowsMediaFoundation.
+// The child side runs in the content process, and the parent side runs
+// in the RDD process or the GPU process. We run a separate IPDL thread
+// for both sides.
+[ManualDealloc]
+async protocol PRemoteDecoder
+{
+ manager PRemoteDecoderManager;
+parent:
+ async Construct() returns (MediaResult result);
+
+ async Init() returns (InitResultIPDL result);
+
+ // Each output may include a SurfaceDescriptorGPUVideo that represents the decoded
+ // frame. This SurfaceDescriptor can be used on the Layers IPDL protocol, but
+ // must be released explicitly using DeallocateSurfaceDescriptorGPUVideo
+ // on the manager protocol.
+ async Decode(nullable ArrayOfRemoteMediaRawData data) returns (DecodeResultIPDL result);
+ async Flush() returns (MediaResult error);
+ async Drain() returns (DecodeResultIPDL result);
+ async Shutdown() returns (bool unused);
+ // To clear the threshold, call with INT64_MIN.
+ async SetSeekThreshold(TimeUnit time);
+
+ async __delete__();
+};
+
+} // namespace mozilla