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.
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
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
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
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
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
Comment 1 by bugdroid1@chromium.org
, Aug 10