diff --git a/media_perception/BUILD.gn b/media_perception/BUILD.gn
index 3e3a2fd..eecdb26 100644
--- a/media_perception/BUILD.gn
+++ b/media_perception/BUILD.gn
@@ -50,6 +50,7 @@
     "mojom/devices_changed_observer.mojom",
     "mojom/frame_perception.mojom",
     "mojom/geometry.mojom",
+    "mojom/hdr_metadata.mojom",
     "mojom/hotword_detection.mojom",
     "mojom/image_capture.mojom",
     "mojom/mailbox.mojom",
diff --git a/media_perception/mojo_connector.cc b/media_perception/mojo_connector.cc
index 54b6a10..8dc2387 100644
--- a/media_perception/mojo_connector.cc
+++ b/media_perception/mojo_connector.cc
@@ -361,6 +361,12 @@
   info->descriptor->device_id = video_device.id();
   info->descriptor->display_name = video_device.display_name();
   info->descriptor->capture_api = media::mojom::VideoCaptureApi::VIRTUAL_DEVICE;
+  // No PTZ controls supported.
+  info->descriptor->control_support =
+      media::mojom::VideoCaptureControlSupport::New();
+  info->descriptor->control_support->pan = false;
+  info->descriptor->control_support->tilt = false;
+  info->descriptor->control_support->zoom = false;
   producer_impl->RegisterVirtualDevice(&video_source_provider_,
                                        std::move(info));
 
diff --git a/media_perception/mojom/buffer_types.mojom b/media_perception/mojom/buffer_types.mojom
index 2f3ba36..8a8931e 100644
--- a/media_perception/mojom/buffer_types.mojom
+++ b/media_perception/mojom/buffer_types.mojom
@@ -33,7 +33,9 @@
   CAMERA_AND_CPU_READ_WRITE,
   SCANOUT_CPU_READ_WRITE,
   SCANOUT_VDA_WRITE,
+  PROTECTED_SCANOUT_VDA_WRITE,
   GPU_READ_CPU_READ_WRITE,
+  SCANOUT_VEA_CPU_READ,
   SCANOUT_VEA_READ_CAMERA_AND_CPU_READ_WRITE,
 };
 
diff --git a/media_perception/mojom/device_factory.mojom b/media_perception/mojom/device_factory.mojom
index b410a9a..b2d8864 100644
--- a/media_perception/mojom/device_factory.mojom
+++ b/media_perception/mojom/device_factory.mojom
@@ -64,6 +64,12 @@
       media.mojom.VideoCaptureDeviceInfo device_info,
       TextureVirtualDevice& virtual_device);
 
+  // Add a virtual device with video frames backed by GpuMemoryBufferHandle.
+  // The buffers are allocated and managed by the caller.
+  AddGpuMemoryBufferVirtualDevice(
+      media.mojom.VideoCaptureDeviceInfo device_info,
+      pending_receiver<GpuMemoryBufferVirtualDevice> virtual_device_receiver);
+
   // Registered observers will get notified whenever a virtual device is added
   // or removed. Note: Changes to non-virtual devices are currently being
   // monitored outside the video capture service, and therefore the service
diff --git a/media_perception/mojom/hdr_metadata.mojom b/media_perception/mojom/hdr_metadata.mojom
new file mode 100644
index 0000000..ab72968
--- /dev/null
+++ b/media_perception/mojom/hdr_metadata.mojom
@@ -0,0 +1,24 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+module gfx.mojom;
+
+import "mojom/geometry.mojom";
+
+// This defines a mojo transport format for gfx::HDRMetadata.
+// See ui/gl/hdr_metadata.h for description.
+struct MasteringMetadata {
+    gfx.mojom.PointF primary_r;
+    gfx.mojom.PointF primary_g;
+    gfx.mojom.PointF primary_b;
+    gfx.mojom.PointF white_point;
+    float luminance_max;
+    float luminance_min;
+  };
+
+struct HDRMetadata {
+    MasteringMetadata mastering_metadata;
+    uint32 max_content_light_level;
+    uint32 max_frame_average_light_level;
+  };
diff --git a/media_perception/mojom/media_types.mojom b/media_perception/mojom/media_types.mojom
new file mode 100644
index 0000000..ab5a9ee
--- /dev/null
+++ b/media_perception/mojom/media_types.mojom
@@ -0,0 +1,446 @@
+<<<<<<< HEAD   (c245e7 camera: intel: ipu6: Use the fixed saturation factor for man)
+=======
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+module media.mojom;
+
+import "mojom/mailbox_holder.mojom";
+import "mojom/vulkan_ycbcr_info.mojom";
+import "mojom/time.mojom";
+import "mojom/values.mojom";
+import "mojom/unguessable_token.mojom";
+import "mojom/geometry.mojom";
+import "mojom/buffer_types.mojom";
+import "mojom/color_space.mojom";
+import "mojom/hdr_metadata.mojom";
+
+// See media/base/audio_codecs.h for descriptions.
+[Native]
+enum AudioCodec;
+[Native]
+enum AudioCodecProfile;
+
+// See media/base/buffering_state.h for descriptions.
+[Native]
+enum BufferingState;
+[Native]
+enum BufferingStateChangeReason;
+
+// See media/base/channel_layout.h for descriptions.
+[Native]
+enum ChannelLayout;
+
+// See media/base/decode_status.h for descriptions.
+[Native]
+enum DecodeStatus;
+
+// See media/base/status_codes.h for descriptions.
+[Native]
+enum StatusCode;
+
+// See media/base/media_log_record.h for description.
+[Native]
+struct MediaLogRecord;
+
+// See media/base/output_device_info.h for descriptions.
+[Native]
+enum OutputDeviceStatus;
+
+// See media/base/pipeline_status.h for descriptions.
+[Native]
+enum PipelineStatus;
+
+// See media/base/sample_format.h for descriptions.
+[Native]
+enum SampleFormat;
+
+// See media/base/video_codecs.h for descriptions.
+[Native]
+enum VideoCodec;
+
+// See media/base/video_codecs.h for descriptions.
+[Native]
+enum VideoCodecProfile;
+
+// See media/base/video_types.h for descriptions.
+[Native]
+enum VideoPixelFormat;
+
+// See media/base/video_transformation.h for descriptions.
+enum VideoRotation {
+  kVideoRotation0,
+  kVideoRotation90,
+  kVideoRotation180,
+  kVideoRotation270,
+};
+
+// see media/base/video_frame_metadata.h for descriptions.
+enum CopyMode {
+  kCopyToNewTexture,
+  kCopyMailboxesOnly,
+};
+
+// See media/base/video_transformation.h for descriptions.
+struct VideoTransformation {
+  VideoRotation rotation;
+  bool mirrored;
+};
+
+// See media/base/waiting.h for descriptions.
+[Native]
+enum WaitingReason;
+
+// See media/base/watch_time_keys.h for descriptions.
+[Native]
+enum WatchTimeKey;
+
+// See media/base/container_names.h for descriptions.
+[Native]
+enum MediaContainerName;
+
+// See media/base/media_status.h for description.
+[Native]
+enum MediaStatusState;
+
+// This defines a mojo transport format for media::EncryptionPattern
+// See media/base/encryption_pattern.h for description.
+struct EncryptionPattern {
+  uint32 crypt_byte_block;
+  uint32 skip_byte_block;
+};
+
+// See media/base/encryption_scheme.h for description.
+[Native]
+enum EncryptionScheme;
+
+// This defines a mojo transport format for media::VideoColorSpace.
+// See media/base/video_color_space.h for description.
+struct VideoColorSpace {
+  [Native]
+  enum PrimaryID;
+
+  [Native]
+  enum TransferID;
+
+  [Native]
+  enum MatrixID;
+
+  [Native]
+  enum RangeID;
+
+  PrimaryID primaries;
+  TransferID transfer;
+  MatrixID matrix;
+  RangeID range;
+};
+
+
+// This defines a mojo transport format for media::AudioDecoderConfig.
+// See media/base/audio_decoder_config.h for descriptions.
+struct AudioDecoderConfig {
+  AudioCodec codec;
+  AudioCodecProfile profile;
+  SampleFormat sample_format;
+  ChannelLayout channel_layout;
+  int32 samples_per_second;
+  array<uint8> extra_data;
+  mojo_base.mojom.TimeDelta seek_preroll;
+  int32 codec_delay;
+  EncryptionScheme encryption_scheme;
+};
+
+// This defines a mojo transport format for media::VideoDecoderConfig.
+// See media/base/video_decoder_config.h for descriptions.
+struct VideoDecoderConfig {
+  VideoCodec codec;
+  VideoCodecProfile profile;
+  uint32 level;
+  bool has_alpha;
+  VideoTransformation transformation;
+  gfx.mojom.Size coded_size;
+  gfx.mojom.Rect visible_rect;
+  gfx.mojom.Size natural_size;
+  array<uint8> extra_data;
+  EncryptionScheme encryption_scheme;
+  VideoColorSpace color_space_info;
+  gfx.mojom.HDRMetadata? hdr_metadata;
+};
+
+// Native struct media::SubsampleEntry;
+[Native]
+struct SubsampleEntry;
+
+// This defines a mojo transport format for media::DecryptConfig.
+// See media/base/decrypt_config.h for descriptions.
+struct DecryptConfig {
+  EncryptionScheme encryption_scheme;
+  string key_id;
+  string iv;
+  array<SubsampleEntry> subsamples;
+  EncryptionPattern? encryption_pattern;
+};
+
+// This defines a mojo transport format for media::DecoderBuffer.
+struct DecoderBuffer {
+  mojo_base.mojom.TimeDelta timestamp;
+  mojo_base.mojom.TimeDelta duration;
+
+  // Whether the buffer is an end-of-stream (EOS) buffer.
+  bool is_end_of_stream;
+
+  // The number of bytes present in this buffer. The data is not serialized
+  // along with this structure and must be read from a separate DataPipe.
+  // Note that |data_size| could be zero even for a non-EOS buffer (e.g.
+  // with non-empty |size_data|). See http://crbug.com/663438
+  uint32 data_size;
+
+  // Indicates whether or not this buffer is a random access point.
+  bool is_key_frame;
+
+  // Empty when |side_data| doesn't exist.
+  array<uint8> side_data;
+
+  // DecryptConfig for a encrypted buffer. NULL if the buffer is not encrypted.
+  DecryptConfig? decrypt_config;
+
+  // These fields indicate the amount of data to discard after decoding.
+  mojo_base.mojom.TimeDelta front_discard;
+  mojo_base.mojom.TimeDelta back_discard;
+};
+
+// This defines a mojo transport format for media::AudioBuffer.
+struct AudioBuffer {
+  // Format of the audio.
+  SampleFormat sample_format;
+
+  // How the channels are laid out.
+  ChannelLayout channel_layout;
+
+  // Number of channels.
+  int32 channel_count;
+
+  // Sample rate of the buffer.
+  int32 sample_rate;
+
+  // Number of frames in the buffer.
+  int32 frame_count;
+
+  // True if end of stream.
+  bool end_of_stream;
+
+  // Timestamp in microseconds of the first frame.
+  mojo_base.mojom.TimeDelta timestamp;
+
+  // Channel data. Will be empty for EOS buffers.
+  array<uint8> data;
+};
+
+// This defines a mojo transport format for an interleaved, signed
+// 16-bit audio buffer.
+struct AudioDataS16 {
+  // Number of channels.
+  int32 channel_count;
+
+  // Sample rate of the buffer.
+  int32 sample_rate;
+
+  // Number of frames in the buffer.
+  int32 frame_count;
+
+  // Channel data.
+  array<int16> data;
+};
+
+// See media/base/video_frame_metadata.h for a description of fields.
+// TODO(crbug.com/657632): Remove |has_*| values and use nullable types.
+struct VideoFrameMetadata {
+  bool allow_overlay;
+
+  mojo_base.mojom.TimeTicks? capture_begin_time;
+  mojo_base.mojom.TimeTicks? capture_end_time;
+
+  bool has_capture_counter;
+  int32 capture_counter;
+
+  gfx.mojom.Rect? capture_update_rect;
+
+  bool has_copy_mode;
+  CopyMode copy_mode;
+
+  bool end_of_stream;
+
+  mojo_base.mojom.TimeDelta? frame_duration;
+
+  bool has_frame_rate;
+  double frame_rate;
+
+  bool interactive_content;
+
+  mojo_base.mojom.TimeTicks? reference_time;
+
+  bool read_lock_fences_enabled;
+
+  bool has_rotation;
+  VideoRotation rotation;
+
+  bool texture_owner;
+
+  bool wants_promotion_hint;
+
+  bool protected_video;
+
+  bool hw_protected;
+
+  mojo_base.mojom.UnguessableToken? overlay_plane_id;
+
+  bool power_efficient;
+
+  bool has_device_scale_factor;
+  double device_scale_factor;
+
+  bool has_page_scale_factor;
+  double page_scale_factor;
+
+  bool has_root_scroll_offset_x;
+  double root_scroll_offset_x;
+
+  bool has_root_scroll_offset_y;
+  double root_scroll_offset_y;
+
+  bool has_top_controls_visible_height;
+  double top_controls_visible_height;
+
+  mojo_base.mojom.TimeTicks? decode_begin_time;
+  mojo_base.mojom.TimeTicks? decode_end_time;
+
+  mojo_base.mojom.TimeDelta? processing_time;
+
+  bool has_rtp_timestamp;
+  double rtp_timestamp;
+
+  mojo_base.mojom.TimeTicks? receive_time;
+
+  mojo_base.mojom.TimeDelta? wallclock_frame_duration;
+};
+
+// This defines a mojo transport format for media::VideoFrame.
+struct VideoFrame {
+  // Format of the frame.
+  VideoPixelFormat format;
+
+  // Width and height of the video frame, in pixels.
+  gfx.mojom.Size coded_size;
+
+  // Visible size of the frame.
+  gfx.mojom.Rect visible_rect;
+
+  // Natural size of the frame.
+  gfx.mojom.Size natural_size;
+
+  // Timestamp in microseconds of the associated frame.
+  mojo_base.mojom.TimeDelta timestamp;
+
+  // Contents of the video frame (or EOS marker).
+  VideoFrameData data;
+
+  // Extra properties associated with the VideoFrame.
+  VideoFrameMetadata metadata;
+
+  gfx.mojom.ColorSpace color_space;
+  gfx.mojom.HDRMetadata? hdr_metadata;
+};
+
+// Possible choices for storing VideoFrame data.
+union VideoFrameData {
+  EosVideoFrameData eos_data;
+  SharedBufferVideoFrameData shared_buffer_data;
+  DmabufVideoFrameData dmabuf_data;
+  GpuMemoryBufferVideoFrameData gpu_memory_buffer_data;
+  MailboxVideoFrameData mailbox_data;
+};
+
+// A marker for EOS frames.
+struct EosVideoFrameData {
+};
+
+// This defines video frame data stored in a Mojo shared buffer.
+struct SharedBufferVideoFrameData {
+  // Reference to the shared memory containing the frame's data.
+  handle<shared_buffer> frame_data;
+  uint64 frame_data_size;
+
+  // Stride and offsets for each plane. Offsets are relative to the start
+  // of |frame_data|.
+  array<int32> strides;
+  array<uint32> offsets;
+};
+
+// This defines video frame data stored in dmabuf.
+struct DmabufVideoFrameData {
+  // Size depends on media::VideoFrame::NumPlanes with frame format.
+  array<handle<platform>> dmabuf_fds;
+};
+
+struct GpuMemoryBufferVideoFrameData {
+  gfx.mojom.GpuMemoryBufferHandle gpu_memory_buffer_handle;
+  array<gpu.mojom.MailboxHolder, 4> mailbox_holder;
+};
+
+// This defines video frame data stored in texture mailboxes.
+struct MailboxVideoFrameData {
+  // Size must be kept in sync with media::VideoFrame::kMaxPlanes.
+  array<gpu.mojom.MailboxHolder, 4> mailbox_holder;
+  gpu.mojom.VulkanYCbCrInfo? ycbcr_data;
+};
+
+struct PipelineStatistics {
+  uint64 audio_bytes_decoded;
+  uint64 video_bytes_decoded;
+  uint32 video_frames_decoded;
+  uint32 video_frames_dropped;
+  int64 audio_memory_usage;
+  int64 video_memory_usage;
+};
+
+// Set of features for MediaCapabilities prediction.
+// TODO(liberato): consider generalizing this.
+struct PredictionFeatures {
+    // It would be nice to initialize this to VIDEO_CODEC_PROFILE_UNKNOWN (-1),
+    // but we can't do that with native enums.
+    VideoCodecProfile profile;
+    gfx.mojom.Size video_size;
+    // Frames per second may ultimately be a bucketed as an integer, but we want
+    // to do that as late as possible. Using a double avoids early truncation.
+    double frames_per_sec = 0;
+    // Name of the key system used for EME playbacks.
+    string key_system;
+    // Indicates when CDM will use HW secure decoding for EME playbacks.
+    bool use_hw_secure_codecs = false;
+};
+
+// Target values for MediaCapabilities predictions.
+// TODO(liberato): consider generalizing this.
+struct PredictionTargets {
+  uint32 frames_decoded = 0;
+  uint32 frames_dropped = 0;
+  uint32 frames_power_efficient = 0;
+};
+
+// See media/base/pipeline/status.h for descriptions.
+struct PipelineDecoderInfo {
+  string decoder_name;
+  bool is_platform_decoder = false;
+  bool has_decrypting_demuxer_stream = false;
+};
+
+// See media/base/status.h for descriptions.
+struct Status {
+  StatusCode code;
+  string? message;
+  array<mojo_base.mojom.Value> frames;
+  array<media.mojom.Status> causes;
+  mojo_base.mojom.Value? data;
+};
+>>>>>>> CHANGE (aa2bac media_perception: MPS compatibility for M88.)
diff --git a/media_perception/mojom/native_handle_types.mojom b/media_perception/mojom/native_handle_types.mojom
index c0dbf19..03f5630 100644
--- a/media_perception/mojom/native_handle_types.mojom
+++ b/media_perception/mojom/native_handle_types.mojom
@@ -15,7 +15,7 @@
   uint64 size;
 
   // A platform-specific handle the underlying memory object.
-  handle buffer_handle;
+  handle<platform> buffer_handle;
 };
 
 // gfx::NativePixmapHandle
@@ -39,7 +39,7 @@
 struct AHardwareBufferHandle {
   // The actual file descriptor used to wrap the AHardwareBuffer object for
   // serialization.
-  handle buffer_handle;
+  handle<platform> buffer_handle;
 
   // A message pipe handle which tracks the lifetime of this
   // AHardwareBufferHandle. The sender may use this to observe the lifetime
@@ -56,10 +56,10 @@
   NativePixmapHandle native_pixmap_handle;
 
   [EnableIf=is_mac]
-  handle mach_port;
+  handle<platform> mach_port;
 
   [EnableIf=is_win]
-  handle dxgi_handle;
+  handle<platform> dxgi_handle;
 
   [EnableIf=is_android]
   AHardwareBufferHandle android_hardware_buffer_handle;
diff --git a/media_perception/mojom/time.mojom b/media_perception/mojom/time.mojom
index 78cde1a..f49fc18 100644
--- a/media_perception/mojom/time.mojom
+++ b/media_perception/mojom/time.mojom
@@ -10,10 +10,12 @@
   int64 internal_value;
 };
 
+[Stable]
 struct TimeDelta {
   int64 microseconds;
 };
 
+[Stable]
 struct TimeTicks {
   // The internal value is expressed in terms of microseconds since a fixed but
   // intentionally unspecified epoch.
diff --git a/media_perception/mojom/values.mojom b/media_perception/mojom/values.mojom
index ea7c1fa..5ffe845 100644
--- a/media_perception/mojom/values.mojom
+++ b/media_perception/mojom/values.mojom
@@ -8,6 +8,7 @@
 //
 // One notable caveat is that Value supports arbitrary binary data, which JSON
 // does not support natively.
+[Stable]
 union Value {
   // Null type placeholder. This field is never used.
   uint8 null_value;
@@ -29,10 +30,12 @@
 // declaration. Though both of these types are mapped to base::Value in C++,
 // the generated deserialization will guarantee that the method is only invoked
 // with a base::Value of the correct subtype.
+[Stable]
 struct DictionaryValue {
   map<string, Value> storage;
 };
 
+[Stable]
 struct ListValue {
   array<Value> storage;
 };
diff --git a/media_perception/mojom/video_capture_types.mojom b/media_perception/mojom/video_capture_types.mojom
index fecca9c..b03fb60 100644
--- a/media_perception/mojom/video_capture_types.mojom
+++ b/media_perception/mojom/video_capture_types.mojom
@@ -99,6 +99,13 @@
   kGpuMemoryBuffer
 };
 
+// Represents capture device's support for different controls.
+struct VideoCaptureControlSupport {
+  bool pan;
+  bool tilt;
+  bool zoom;
+};
+
 enum VideoCaptureError {
   kNone,
   kVideoCaptureControllerInvalidOrUnsupportedVideoCaptureParametersRequested,
@@ -222,6 +229,7 @@
   kFuchsiaSysmemInvalidBufferSize,
   kFuchsiaUnsupportedPixelFormat,
   kFuchsiaFailedToMapSysmemBuffer,
+  kCrosHalV3DeviceContextDuplicatedClient,
 };
 
 enum VideoCaptureFrameDropReason {
@@ -267,6 +275,27 @@
   bool enable_face_detection;
 };
 
+// |resource_utilization| reports that the frame incurred some fractional
+// utilization of the downstream pipeline's per-frame processing capacity.
+// See code comments in media::base::VideoFrameMetadata for a discussion of
+// how utilization is interpreted. The capturer uses this information to
+// auto-adjust the capture resolution based on performance variances in the
+// live system environment.
+// -1.0 means no value present.
+//
+// |max_framerate_fps| reports requested maximum frame-rate
+// float::inifinty used to signal no limit.
+//
+// |max_pixels| reports requested maximum resolution (in sense of image area).
+// int::max used to signal no limit.
+struct VideoFrameFeedback {
+  double resource_utilization;
+
+  float max_framerate_fps;
+
+  int32 max_pixels;
+};
+
 // Contains one stride value per image plane. Stride means the number of bytes
 // per row. If the image format uses fewer than kMaxPlanes planes, the values
 // for higher plane indices are ignored. For example, for a YUV format, plane
@@ -299,6 +328,10 @@
   string model_id;
   VideoFacingMode facing_mode;
   VideoCaptureApi capture_api;
+<<<<<<< HEAD   (c245e7 camera: intel: ipu6: Use the fixed saturation factor for man)
+=======
+  VideoCaptureControlSupport control_support;
+>>>>>>> CHANGE (aa2bac media_perception: MPS compatibility for M88.)
   VideoCaptureTransportType transport_type;
 };
 
diff --git a/media_perception/mojom/virtual_device.mojom b/media_perception/mojom/virtual_device.mojom
index 57da046..a0186a3 100644
--- a/media_perception/mojom/virtual_device.mojom
+++ b/media_perception/mojom/virtual_device.mojom
@@ -8,6 +8,7 @@
 import "mojom/producer.mojom";
 import "mojom/scoped_access_permission.mojom";
 import "mojom/geometry.mojom";
+import "mojom/buffer_types.mojom";
 
 // Interface for a producer to feed video frames into a virtual
 // device. These frames will appear to the consumer of the device
@@ -66,3 +67,24 @@
   // while the corresponding buffer is still in use via OnFrameReadyInBuffer().
   OnBufferRetired(int32 buffer_id);
 };
+
+// Virtual capture device with video frames backed by GpuMemoryBuffer.
+interface GpuMemoryBufferVirtualDevice {
+  // Registers a GpuMemoryBufferHandle for subsequent transport of frames.
+  OnNewGpuMemoryBufferHandle(
+      int32 buffer_id, gfx.mojom.GpuMemoryBufferHandle gmb_handle);
+
+  // The invoker must guarantee that the GpuMemoryBufferHandle with |buffer_id|
+  // stay valid until |access_permission| is released by the invocation target.
+  // In |frame_info|, |visible_rect| must be equivalent to the full |coded_size|
+  // of the frame, i.e. using |visible_rect| to crop to subregions of the frame
+  // is not supported.
+  OnFrameReadyInBuffer(int32 buffer_id,
+                       pending_remote<ScopedAccessPermission> access_permission,
+                       media.mojom.VideoFrameInfo frame_info);
+
+  // Unregisters a GpuMemoryBufferHandle previously registered via
+  // OnNewGpuMemoryBufferHandle(). Note, that this should not be called while
+  // the corresponding buffer is still in use via OnFrameReadyInBuffer().
+  OnBufferRetired(int32 buffer_id);
+};
diff --git a/media_perception/output_manager.cc b/media_perception/output_manager.cc
index 00373b8..9c789fa 100644
--- a/media_perception/output_manager.cc
+++ b/media_perception/output_manager.cc
@@ -26,12 +26,30 @@
 
 }  // namespace
 
+OutputManager::~OutputManager() {
+  if (thread_.IsRunning()) {
+    base::WaitableEvent destruction_complete(
+        base::WaitableEvent::ResetPolicy::MANUAL,
+        base::WaitableEvent::InitialState::NOT_SIGNALED);
+    thread_.task_runner()->PostTask(
+        FROM_HERE,
+        base::BindOnce(&OutputManager::DestructDbus, base::Unretained(this),
+                       &destruction_complete));
+    destruction_complete.Wait();
+  }
+}
+
+void OutputManager::DestructDbus(base::WaitableEvent* destruction_complete) {
+  dbus_connection_.reset();
+  destruction_complete->Signal();
+}
+
 OutputManager::OutputManager(
     const std::string& configuration_name,
     std::shared_ptr<Rtanalytics> rtanalytics,
     const PerceptionInterfaces& interfaces,
-    chromeos::media_perception::mojom::PerceptionInterfacesPtr*
-        interfaces_ptr) {
+    chromeos::media_perception::mojom::PerceptionInterfacesPtr* interfaces_ptr)
+    : thread_("OutputManager Dbus Thread") {
   // Save the configuration name in case we need to reference it later.
   configuration_name_ = configuration_name;
   rtanalytics_ = rtanalytics;
@@ -257,14 +275,16 @@
                        << output.stream_name();
             continue;
           }
-          // Setup D-Bus connection.
-          bus_ = dbus_connection_.Connect();
-          if (bus_ == nullptr) {
-            LOG(FATAL) << "Unable to connect to Dbus from OutputManager.";
+
+          if (!thread_.StartWithOptions(
+                  base::Thread::Options(base::MessagePumpType::IO, 0))) {
+            LOG(ERROR) << "Failed to create dbus thread.";
+            continue;
           }
-          dbus_proxy_ = bus_->GetObjectProxy(
-              "org.chromium.IpPeripheralService",
-              dbus::ObjectPath("/org/chromium/IpPeripheralService"));
+          dbus_connection_ = std::make_unique<brillo::DBusConnection>();
+          thread_.task_runner()->PostTask(
+              FROM_HERE, base::Bind(&OutputManager::InitializeDbus,
+                                    base::Unretained(this)));
         }
       }
       continue;
@@ -272,6 +292,16 @@
   }
 }
 
+void OutputManager::InitializeDbus() {
+  bus_ = dbus_connection_->Connect();
+  if (bus_ == nullptr) {
+    LOG(FATAL) << "Unable to connect to Dbus from OutputManager.";
+  }
+  dbus_proxy_ = bus_->GetObjectProxy(
+      "org.chromium.IpPeripheralService",
+      dbus::ObjectPath("/org/chromium/IpPeripheralService"));
+}
+
 void OutputManager::HandleFramePerception(const std::vector<uint8_t>& bytes) {
   if (!frame_perception_handler_ptr_.is_bound()) {
     LOG(WARNING) << "Got frame perception output but handler ptr is not bound.";
@@ -372,6 +402,15 @@
 
 void OutputManager::HandleIndexedTransitions(
     const std::vector<uint8_t>& bytes) {
+  thread_.task_runner()->PostTask(
+      FROM_HERE,
+      base::BindOnce(&OutputManager::HandleIndexedTransitionsOnDbusThread,
+                     base::Unretained(this), bytes));
+}
+
+void OutputManager::HandleIndexedTransitionsOnDbusThread(
+    const std::vector<uint8_t>& bytes) {
+  DCHECK(thread_.task_runner()->BelongsToCurrentThread());
   std::string falcon_ip = rtanalytics_->GetFalconIp(configuration_name_);
   std::size_t found = falcon_ip.find_last_of(".");
   if (found == -1) {
diff --git a/media_perception/output_manager.h b/media_perception/output_manager.h
index fc3ee29..c5ad5be 100644
--- a/media_perception/output_manager.h
+++ b/media_perception/output_manager.h
@@ -11,6 +11,10 @@
 #include <brillo/dbus/dbus_connection.h>
 #include <dbus/message.h>
 
+#include <base/bind.h>
+#include <base/single_thread_task_runner.h>
+#include <base/synchronization/waitable_event.h>
+#include <base/threading/thread.h>
 #include "base/memory/weak_ptr.h"
 #include "media_perception/media_perception_mojom.pb.h"
 #include "media_perception/perception_interface.pb.h"
@@ -24,7 +28,7 @@
 // output types for a particular pipeline are.
 class OutputManager {
  public:
-  OutputManager() {}
+  OutputManager() : thread_("OutputManager Dbus Thread") {}
 
   OutputManager(const std::string& configuration_name,
                 std::shared_ptr<Rtanalytics> rtanalytics,
@@ -32,6 +36,8 @@
                 chromeos::media_perception::mojom::PerceptionInterfacesPtr*
                     interfaces_ptr);
 
+  ~OutputManager();
+
   void HandleFramePerception(const std::vector<uint8_t>& bytes);
 
   void HandleHotwordDetection(const std::vector<uint8_t>& bytes);
@@ -50,12 +56,19 @@
  private:
   void HandleFalconPtzTransitionResponse(dbus::Response* response);
 
+  void InitializeDbus();
+
+  void HandleIndexedTransitionsOnDbusThread(const std::vector<uint8_t>& bytes);
+
+  void DestructDbus(base::WaitableEvent* destruction_complete);
+
   std::string configuration_name_;
 
   std::shared_ptr<Rtanalytics> rtanalytics_;
 
   // D-Bus objects for sending messages to the Falcon camera.
-  brillo::DBusConnection dbus_connection_;
+  base::Thread thread_;
+  std::unique_ptr<brillo::DBusConnection> dbus_connection_;
   scoped_refptr<::dbus::Bus> bus_;
   dbus::ObjectProxy* dbus_proxy_;
 
