webrtc_m130/media/engine/videodecodersoftwarefallbackwrapper.h

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

65 lines
2.1 KiB
C
Raw Normal View History

/*
* Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#ifndef MEDIA_ENGINE_VIDEODECODERSOFTWAREFALLBACKWRAPPER_H_
#define MEDIA_ENGINE_VIDEODECODERSOFTWAREFALLBACKWRAPPER_H_
#include <memory>
#include <string>
#include "api/video_codecs/video_decoder.h"
namespace webrtc {
// Class used to wrap external VideoDecoders to provide a fallback option on
// software decoding when a hardware decoder fails to decode a stream due to
// hardware restrictions, such as max resolution.
Reland of Prepare for injectable SW decoders (patchset #1 id:1 of https://codereview.webrtc.org/3010953002/ ) Reason for revert: Fix bug introduced by keeping the allocated decoders in a map. Original issue's description: > Revert of Prepare for injectable SW decoders (patchset #3 id:40001 of https://codereview.webrtc.org/3009973002/ ) > > Reason for revert: > Tentative revert since it seems to cause problems in Chrome, MAC. > > https://build.chromium.org/p/chromium.webrtc.fyi/builders/Mac%20Tester/builds/42684 > > > > Original issue's description: > > Prepare for injectable SW decoders > > > > Pretty much mirrors the work done on the encoding side in CLs: > > > > "Clean up ownership of webrtc::VideoEncoder" > > https://codereview.webrtc.org/3007643002/ > > > > "Let VideoEncoderSoftwareFallbackWrapper own the wrapped encoder" > > https://codereview.webrtc.org/3007683002/ > > > > "WebRtcVideoEngine: Encapsulate logic for unifying internal and external video codecs" > > https://codereview.webrtc.org/3006713002/ > > > > BUG=webrtc:7925 > > > > Review-Url: https://codereview.webrtc.org/3009973002 > > Cr-Commit-Position: refs/heads/master@{#19641} > > Committed: https://chromium.googlesource.com/external/webrtc/+/084c55a63a2d9bdc71579458406d44f8bab9f454 > > TBR=magjed@webrtc.org,andersc@webrtc.org > # Not skipping CQ checks because original CL landed more than 1 days ago. > BUG=webrtc:7925 > > Review-Url: https://codereview.webrtc.org/3010953002 > Cr-Commit-Position: refs/heads/master@{#19647} > Committed: https://chromium.googlesource.com/external/webrtc/+/1f88531038c24c5ce3b0f4cfc682b970770a71f6 TBR=magjed@webrtc.org,perkj@webrtc.org # Not skipping CQ checks because original CL landed more than 1 days ago. BUG=webrtc:7925 Review-Url: https://codereview.webrtc.org/3005363002 Cr-Commit-Position: refs/heads/master@{#19782}
2017-09-11 11:50:51 -07:00
class VideoDecoderSoftwareFallbackWrapper : public VideoDecoder {
public:
Reland "Update internal video decoder factory to new interface" This reverts commit 267d84baf0597f89a3d1f66d323db754bc5d9239. Reason for reland: Fix the bug; decoder is not allowed to ever be null and we need to use a NullVideoDecoder that ignores calls instead. Original change's description: > Revert "Update internal video decoder factory to new interface" > > This reverts commit b2fc9b1b104240e68047901309deaee3e8b94bea. > > Reason for revert: Suspected to cause failures on Android bots on webrtc.fyi, see https://build.chromium.org/p/chromium.webrtc.fyi/builders/Android%20Tests%20%28dbg%29%20%28K%20Nexus5%29/builds/21051 > > Original change's description: > > Update internal video decoder factory to new interface > > > > We want to move away from cricket::WebRtcVideoDecoderFactory and this CL > > updates the internal factory. Also, VideoDecoderSoftwareFallbackWrapper > > is updated to take a VideoDecoder as argument instead of a factory so it > > can be used with external SW decoders. > > > > Bug: webrtc:7925 > > Change-Id: Ie6dc6c24f8610a2129620c6e2b42e3cebb2ddef7 > > Reviewed-on: https://webrtc-review.googlesource.com/7301 > > Reviewed-by: Rasmus Brandt <brandtr@webrtc.org> > > Reviewed-by: Anders Carlsson <andersc@webrtc.org> > > Commit-Queue: Magnus Jedvert <magjed@webrtc.org> > > Cr-Commit-Position: refs/heads/master@{#20597} > > TBR=brandtr@webrtc.org,magjed@webrtc.org,andersc@webrtc.org > > Change-Id: I0a12c98fdc30f00d58c85ee7e088f50160d39724 > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Bug: webrtc:7925 > Reviewed-on: https://webrtc-review.googlesource.com/21420 > Reviewed-by: Christian Fremerey <chfremer@webrtc.org> > Commit-Queue: Christian Fremerey <chfremer@webrtc.org> > Cr-Commit-Position: refs/heads/master@{#20605} TBR=brandtr@webrtc.org,magjed@webrtc.org,andersc@webrtc.org,chfremer@webrtc.org,chfremer@google.com Change-Id: I6cf5794dc3fadfa86809a94da80b69dbb4c56f52 No-Try: true Bug: webrtc:7925 Reviewed-on: https://webrtc-review.googlesource.com/21541 Commit-Queue: Magnus Jedvert <magjed@webrtc.org> Reviewed-by: Magnus Jedvert <magjed@webrtc.org> Cr-Commit-Position: refs/heads/master@{#20623}
2017-11-09 13:43:42 +01:00
VideoDecoderSoftwareFallbackWrapper(
std::unique_ptr<VideoDecoder> sw_fallback_decoder,
std::unique_ptr<VideoDecoder> hw_decoder);
int32_t InitDecode(const VideoCodec* codec_settings,
int32_t number_of_cores) override;
int32_t Decode(const EncodedImage& input_image,
bool missing_frames,
const RTPFragmentationHeader* fragmentation,
const CodecSpecificInfo* codec_specific_info,
int64_t render_time_ms) override;
int32_t RegisterDecodeCompleteCallback(
DecodedImageCallback* callback) override;
int32_t Release() override;
bool PrefersLateDecoding() const override;
const char* ImplementationName() const override;
private:
bool InitFallbackDecoder();
Reland "Update internal video decoder factory to new interface" This reverts commit 267d84baf0597f89a3d1f66d323db754bc5d9239. Reason for reland: Fix the bug; decoder is not allowed to ever be null and we need to use a NullVideoDecoder that ignores calls instead. Original change's description: > Revert "Update internal video decoder factory to new interface" > > This reverts commit b2fc9b1b104240e68047901309deaee3e8b94bea. > > Reason for revert: Suspected to cause failures on Android bots on webrtc.fyi, see https://build.chromium.org/p/chromium.webrtc.fyi/builders/Android%20Tests%20%28dbg%29%20%28K%20Nexus5%29/builds/21051 > > Original change's description: > > Update internal video decoder factory to new interface > > > > We want to move away from cricket::WebRtcVideoDecoderFactory and this CL > > updates the internal factory. Also, VideoDecoderSoftwareFallbackWrapper > > is updated to take a VideoDecoder as argument instead of a factory so it > > can be used with external SW decoders. > > > > Bug: webrtc:7925 > > Change-Id: Ie6dc6c24f8610a2129620c6e2b42e3cebb2ddef7 > > Reviewed-on: https://webrtc-review.googlesource.com/7301 > > Reviewed-by: Rasmus Brandt <brandtr@webrtc.org> > > Reviewed-by: Anders Carlsson <andersc@webrtc.org> > > Commit-Queue: Magnus Jedvert <magjed@webrtc.org> > > Cr-Commit-Position: refs/heads/master@{#20597} > > TBR=brandtr@webrtc.org,magjed@webrtc.org,andersc@webrtc.org > > Change-Id: I0a12c98fdc30f00d58c85ee7e088f50160d39724 > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Bug: webrtc:7925 > Reviewed-on: https://webrtc-review.googlesource.com/21420 > Reviewed-by: Christian Fremerey <chfremer@webrtc.org> > Commit-Queue: Christian Fremerey <chfremer@webrtc.org> > Cr-Commit-Position: refs/heads/master@{#20605} TBR=brandtr@webrtc.org,magjed@webrtc.org,andersc@webrtc.org,chfremer@webrtc.org,chfremer@google.com Change-Id: I6cf5794dc3fadfa86809a94da80b69dbb4c56f52 No-Try: true Bug: webrtc:7925 Reviewed-on: https://webrtc-review.googlesource.com/21541 Commit-Queue: Magnus Jedvert <magjed@webrtc.org> Reviewed-by: Magnus Jedvert <magjed@webrtc.org> Cr-Commit-Position: refs/heads/master@{#20623}
2017-11-09 13:43:42 +01:00
// Determines if we are trying to use the HW or SW decoder.
bool use_hw_decoder_;
std::unique_ptr<VideoDecoder> hw_decoder_;
bool hw_decoder_initialized_;
VideoCodec codec_settings_;
int32_t number_of_cores_;
Reland "Update internal video decoder factory to new interface" This reverts commit 267d84baf0597f89a3d1f66d323db754bc5d9239. Reason for reland: Fix the bug; decoder is not allowed to ever be null and we need to use a NullVideoDecoder that ignores calls instead. Original change's description: > Revert "Update internal video decoder factory to new interface" > > This reverts commit b2fc9b1b104240e68047901309deaee3e8b94bea. > > Reason for revert: Suspected to cause failures on Android bots on webrtc.fyi, see https://build.chromium.org/p/chromium.webrtc.fyi/builders/Android%20Tests%20%28dbg%29%20%28K%20Nexus5%29/builds/21051 > > Original change's description: > > Update internal video decoder factory to new interface > > > > We want to move away from cricket::WebRtcVideoDecoderFactory and this CL > > updates the internal factory. Also, VideoDecoderSoftwareFallbackWrapper > > is updated to take a VideoDecoder as argument instead of a factory so it > > can be used with external SW decoders. > > > > Bug: webrtc:7925 > > Change-Id: Ie6dc6c24f8610a2129620c6e2b42e3cebb2ddef7 > > Reviewed-on: https://webrtc-review.googlesource.com/7301 > > Reviewed-by: Rasmus Brandt <brandtr@webrtc.org> > > Reviewed-by: Anders Carlsson <andersc@webrtc.org> > > Commit-Queue: Magnus Jedvert <magjed@webrtc.org> > > Cr-Commit-Position: refs/heads/master@{#20597} > > TBR=brandtr@webrtc.org,magjed@webrtc.org,andersc@webrtc.org > > Change-Id: I0a12c98fdc30f00d58c85ee7e088f50160d39724 > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Bug: webrtc:7925 > Reviewed-on: https://webrtc-review.googlesource.com/21420 > Reviewed-by: Christian Fremerey <chfremer@webrtc.org> > Commit-Queue: Christian Fremerey <chfremer@webrtc.org> > Cr-Commit-Position: refs/heads/master@{#20605} TBR=brandtr@webrtc.org,magjed@webrtc.org,andersc@webrtc.org,chfremer@webrtc.org,chfremer@google.com Change-Id: I6cf5794dc3fadfa86809a94da80b69dbb4c56f52 No-Try: true Bug: webrtc:7925 Reviewed-on: https://webrtc-review.googlesource.com/21541 Commit-Queue: Magnus Jedvert <magjed@webrtc.org> Reviewed-by: Magnus Jedvert <magjed@webrtc.org> Cr-Commit-Position: refs/heads/master@{#20623}
2017-11-09 13:43:42 +01:00
const std::unique_ptr<VideoDecoder> fallback_decoder_;
const std::string fallback_implementation_name_;
DecodedImageCallback* callback_;
};
} // namespace webrtc
#endif // MEDIA_ENGINE_VIDEODECODERSOFTWAREFALLBACKWRAPPER_H_