New issue
Advanced search Search tips

Issue 857111 link

Starred by 2 users

Issue metadata

Status: Assigned
Owner:
Components:
EstimatedDays: ----
NextAction: ----
OS: ----
Pri: 3
Type: Feature

Blocking:
issue 522298



Sign in to add a comment

WebRTC support for VDAv2

Project Member Reported by sande...@chromium.org, Jun 27 2018

Issue description

WebRTC should use MojoVideoDecoder for hardware decoding. Since the RTCDecoderFactory exists at the render process level, this requires a new Mojo path for creating decoders, in addition to the changes to RTCVideoDecoder.
 
Project Member

Comment 1 by bugdroid1@chromium.org, Aug 10

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/ee4a42360880ea5aff0e7154e356e60be7708ebd

commit ee4a42360880ea5aff0e7154e356e60be7708ebd
Author: Dan Sanders <sandersd@chromium.org>
Date: Fri Aug 10 19:43:39 2018

Add RTCVideoDecoderAdapter, which can use any media::VideoDecoder.

This is the main body of code required to support MojoVideoDecoder for
hardware decode of WebRTC streams. It tries to be as similar as possible
to RTCVideoDecoder so that a transition can be managed slowly.

The implementation actually supports any media::VideoDecoder, in
particular FFmpegVideoDecoder works well for testing.

Bug: 857111
Change-Id: I0a4dc37a0a133b4c112a55a215aba8058cca598b
Reviewed-on: https://chromium-review.googlesource.com/1117837
Commit-Queue: Dan Sanders <sandersd@chromium.org>
Reviewed-by: Henrik Boström <hbos@chromium.org>
Cr-Commit-Position: refs/heads/master@{#582291}
[modify] https://crrev.com/ee4a42360880ea5aff0e7154e356e60be7708ebd/content/renderer/BUILD.gn
[add] https://crrev.com/ee4a42360880ea5aff0e7154e356e60be7708ebd/content/renderer/media/webrtc/rtc_video_decoder_adapter.cc
[add] https://crrev.com/ee4a42360880ea5aff0e7154e356e60be7708ebd/content/renderer/media/webrtc/rtc_video_decoder_adapter.h
[add] https://crrev.com/ee4a42360880ea5aff0e7154e356e60be7708ebd/content/renderer/media/webrtc/rtc_video_decoder_adapter_unittest.cc
[modify] https://crrev.com/ee4a42360880ea5aff0e7154e356e60be7708ebd/content/test/BUILD.gn

Project Member

Comment 2 by bugdroid1@chromium.org, Aug 14

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/cd69bc1a04dd9dcd5af49f1d52085ab684707bd5

commit cd69bc1a04dd9dcd5af49f1d52085ab684707bd5
Author: Dan Sanders <sandersd@chromium.org>
Date: Tue Aug 14 01:16:12 2018

Add VideoDecoderProxy to RenderProcessHost registry.

This path is similar to MediaInterfaceProxy registered in
RenderFrameHost, except that VideoDecoderProxy only supports creating
video decoders. This will enable WebRTC's RTCVideoDecoderFactory to
create hardware video decoders using MojoVideoDecoder.

Bug: 857111
Change-Id: If960000688e636ade49d749bc99e9217f784e853
Reviewed-on: https://chromium-review.googlesource.com/1117214
Reviewed-by: Ken Buchanan <kenrb@chromium.org>
Reviewed-by: Xiaohan Wang <xhwang@chromium.org>
Commit-Queue: Dan Sanders <sandersd@chromium.org>
Cr-Commit-Position: refs/heads/master@{#582779}
[modify] https://crrev.com/cd69bc1a04dd9dcd5af49f1d52085ab684707bd5/content/browser/BUILD.gn
[add] https://crrev.com/cd69bc1a04dd9dcd5af49f1d52085ab684707bd5/content/browser/media/video_decoder_proxy.cc
[add] https://crrev.com/cd69bc1a04dd9dcd5af49f1d52085ab684707bd5/content/browser/media/video_decoder_proxy.h
[modify] https://crrev.com/cd69bc1a04dd9dcd5af49f1d52085ab684707bd5/content/browser/renderer_host/render_process_host_impl.cc
[modify] https://crrev.com/cd69bc1a04dd9dcd5af49f1d52085ab684707bd5/content/browser/renderer_host/render_process_host_impl.h

Project Member

Comment 3 by bugdroid1@chromium.org, Sep 14

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/ae7fcf8346b6c53a35d3166609e1733c2cd34ad2

commit ae7fcf8346b6c53a35d3166609e1733c2cd34ad2
Author: Dan Sanders <sandersd@chromium.org>
Date: Fri Sep 14 22:53:52 2018

[media] Enable RTCVideoDecoderAdapter.

This CL completes plumbing a path for creating a MojoVideoDecoder via a
render thread, and uses it to construct an RTCVideoDecoderAdapter if
--enable-features=RTCVideoDecoderAdapter,MojoVideoDecoder is configured.

Bug: 857111
Change-Id: Ia40b571c07cb7070150ec7c3d35320e051eb75ca
Reviewed-on: https://chromium-review.googlesource.com/1226430
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Reviewed-by: Xiaohan Wang <xhwang@chromium.org>
Reviewed-by: Ken Buchanan <kenrb@chromium.org>
Commit-Queue: Dan Sanders <sandersd@chromium.org>
Cr-Commit-Position: refs/heads/master@{#591510}
[modify] https://crrev.com/ae7fcf8346b6c53a35d3166609e1733c2cd34ad2/content/browser/media/android/browser_gpu_video_accelerator_factories.cc
[modify] https://crrev.com/ae7fcf8346b6c53a35d3166609e1733c2cd34ad2/content/browser/media/android/browser_gpu_video_accelerator_factories.h
[modify] https://crrev.com/ae7fcf8346b6c53a35d3166609e1733c2cd34ad2/content/browser/renderer_host/render_process_host_impl.cc
[modify] https://crrev.com/ae7fcf8346b6c53a35d3166609e1733c2cd34ad2/content/public/app/mojo/content_browser_manifest.json
[modify] https://crrev.com/ae7fcf8346b6c53a35d3166609e1733c2cd34ad2/content/renderer/media/gpu/gpu_video_accelerator_factories_impl.cc
[modify] https://crrev.com/ae7fcf8346b6c53a35d3166609e1733c2cd34ad2/content/renderer/media/gpu/gpu_video_accelerator_factories_impl.h
[modify] https://crrev.com/ae7fcf8346b6c53a35d3166609e1733c2cd34ad2/content/renderer/media/webrtc/rtc_video_decoder_adapter.cc
[modify] https://crrev.com/ae7fcf8346b6c53a35d3166609e1733c2cd34ad2/content/renderer/media/webrtc/rtc_video_decoder_adapter.h
[modify] https://crrev.com/ae7fcf8346b6c53a35d3166609e1733c2cd34ad2/content/renderer/media/webrtc/rtc_video_decoder_adapter_unittest.cc
[modify] https://crrev.com/ae7fcf8346b6c53a35d3166609e1733c2cd34ad2/content/renderer/media/webrtc/rtc_video_decoder_factory.cc
[modify] https://crrev.com/ae7fcf8346b6c53a35d3166609e1733c2cd34ad2/content/renderer/render_thread_impl.cc
[modify] https://crrev.com/ae7fcf8346b6c53a35d3166609e1733c2cd34ad2/media/base/media_switches.cc
[modify] https://crrev.com/ae7fcf8346b6c53a35d3166609e1733c2cd34ad2/media/base/media_switches.h
[modify] https://crrev.com/ae7fcf8346b6c53a35d3166609e1733c2cd34ad2/media/video/gpu_video_accelerator_factories.h
[modify] https://crrev.com/ae7fcf8346b6c53a35d3166609e1733c2cd34ad2/media/video/mock_gpu_video_accelerator_factories.h

Project Member

Comment 4 by bugdroid1@chromium.org, Dec 4

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/9421312f06c1296851fb7e37d0935c77ee0209ca

commit 9421312f06c1296851fb7e37d0935c77ee0209ca
Author: Dan Sanders <sandersd@chromium.org>
Date: Tue Dec 04 21:11:19 2018

[media] Enable RTCVideoDecoderAdapter by default.

RTCVideoDecoderAdapter enables WebRTC to use MojoVideoDecoder for
decoding.

Note that it is possible to enable RTCVideoDecoderAdapter without
enabling MojoVideoDecoder, in which case RTCVideoDecoderAdapter will
use GpuVideoDecoder. This is an unsupported configuration.

Bug: 857111
Change-Id: Ife0df5030af966d3a3a13572acc19ac4ffff9225
Reviewed-on: https://chromium-review.googlesource.com/c/1334930
Commit-Queue: Dan Sanders <sandersd@chromium.org>
Reviewed-by: Henrik Boström <hbos@chromium.org>
Cr-Commit-Position: refs/heads/master@{#613690}
[modify] https://crrev.com/9421312f06c1296851fb7e37d0935c77ee0209ca/content/renderer/media/webrtc/rtc_video_decoder_adapter.cc
[modify] https://crrev.com/9421312f06c1296851fb7e37d0935c77ee0209ca/media/base/media_switches.cc

Project Member

Comment 5 by bugdroid1@chromium.org, Dec 22

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/be28a6470d35fdf50f9eaa7e10462621be9783fe

commit be28a6470d35fdf50f9eaa7e10462621be9783fe
Author: Dan Sanders <sandersd@chromium.org>
Date: Sat Dec 22 02:06:26 2018

[media] Do not use SupportedProfiles for RTCVideoDecoderAdapter.

SupportedProfiles is a VDA feature and should not be used for
MojoVideoDecoder paths. This CL adds a replacement check via
GpuVideoAcceleratorFactories::IsDecoderConfigSupported(), and
deprecates RTCVideoDecoderFactory::GetSupportedFormats().

If RTC wants to add a dependency on
RTCVideoDecoderFactory::GetSupportedFormats() in the future, there
are a number of challenges related to asynchronicity that must be
solved. For example, reporting 'all supported' before the
GpuVideoAcceleratorFactories cache is filled can totally break a
connection in cases where there is no software fallback.

Bug: 857111
Change-Id: Iae5122f5c119dfe30e7d15e183dd21305214c4fb
Reviewed-on: https://chromium-review.googlesource.com/c/1372888
Commit-Queue: Dan Sanders <sandersd@chromium.org>
Reviewed-by: Emircan Uysaler <emircan@chromium.org>
Cr-Commit-Position: refs/heads/master@{#618711}
[modify] https://crrev.com/be28a6470d35fdf50f9eaa7e10462621be9783fe/content/renderer/media/gpu/gpu_video_accelerator_factories_impl.cc
[modify] https://crrev.com/be28a6470d35fdf50f9eaa7e10462621be9783fe/content/renderer/media/gpu/gpu_video_accelerator_factories_impl.h
[modify] https://crrev.com/be28a6470d35fdf50f9eaa7e10462621be9783fe/content/renderer/media/webrtc/rtc_video_decoder_adapter.cc
[modify] https://crrev.com/be28a6470d35fdf50f9eaa7e10462621be9783fe/content/renderer/media/webrtc/rtc_video_decoder_adapter.h
[modify] https://crrev.com/be28a6470d35fdf50f9eaa7e10462621be9783fe/content/renderer/media/webrtc/rtc_video_decoder_adapter_unittest.cc
[modify] https://crrev.com/be28a6470d35fdf50f9eaa7e10462621be9783fe/content/renderer/media/webrtc/rtc_video_decoder_factory.cc
[modify] https://crrev.com/be28a6470d35fdf50f9eaa7e10462621be9783fe/content/renderer/media/webrtc/video_codec_factory.cc
[modify] https://crrev.com/be28a6470d35fdf50f9eaa7e10462621be9783fe/media/video/gpu_video_accelerator_factories.h

Sign in to add a comment