From 7eb8e9fd7b5400ef73572ee80ef29a8e4e89e12c Mon Sep 17 00:00:00 2001 From: Anders Carlsson Date: Fri, 18 May 2018 10:33:04 +0200 Subject: [PATCH] Add RegisterExternalDecoder in VideoCodingModule. In preparation for landing https://webrtc-review.googlesource.com/c/src/+/72441 a downstream project that uses the VideoCodingModule needs to be able to inject a decoder object created from the outside, just like how encoders are possible to inject. Bug: webrtc:7925 Change-Id: Ibaeffda55f84410436d79f75730e7352e298b9f0 Reviewed-on: https://webrtc-review.googlesource.com/77160 Commit-Queue: Anders Carlsson Reviewed-by: Rasmus Brandt Cr-Commit-Position: refs/heads/master@{#23297} --- modules/video_coding/include/video_coding.h | 9 +++++++++ modules/video_coding/video_coding_impl.cc | 5 +++++ 2 files changed, 14 insertions(+) diff --git a/modules/video_coding/include/video_coding.h b/modules/video_coding/include/video_coding.h index 5aeb222592..af03f1ea11 100644 --- a/modules/video_coding/include/video_coding.h +++ b/modules/video_coding/include/video_coding.h @@ -32,6 +32,7 @@ namespace webrtc { class Clock; class EncodedImageCallback; +class VideoDecoder; class VideoEncoder; struct CodecSpecificInfo; @@ -205,6 +206,14 @@ class VideoCodingModule : public Module { int32_t numberOfCores, bool requireKeyFrame = false) = 0; + // Register an external decoder object. + // + // Input: + // - externalDecoder : Decoder object to be used for decoding frames. + // - payloadType : The payload type which this decoder is bound to. + virtual void RegisterExternalDecoder(VideoDecoder* externalDecoder, + uint8_t payloadType) = 0; + // Register a receive callback. Will be called whenever there is a new frame // ready // for rendering. diff --git a/modules/video_coding/video_coding_impl.cc b/modules/video_coding/video_coding_impl.cc index 1b098ede22..a0a3a7f409 100644 --- a/modules/video_coding/video_coding_impl.cc +++ b/modules/video_coding/video_coding_impl.cc @@ -163,6 +163,11 @@ class VideoCodingModuleImpl : public VideoCodingModule { requireKeyFrame); } + void RegisterExternalDecoder(VideoDecoder* externalDecoder, + uint8_t payloadType) override { + receiver_.RegisterExternalDecoder(externalDecoder, payloadType); + } + int32_t RegisterReceiveCallback( VCMReceiveCallback* receiveCallback) override { RTC_DCHECK(construction_thread_.CalledOnValidThread());