Revert of Add _decoder CHECK to VCMGenericDecoder constructor. (patchset #2 id:20001 of https://codereview.webrtc.org/1485713002/ )
Reason for revert:
Speculative revert since a downstream test started failing with this.
Original issue's description:
> Add _decoder CHECK to VCMGenericDecoder constructor.
>
> This should never be using a null decoder, but it looks like it's
> crashing out in the field. Adding a CHECK to see if it catches any
> interesting stack traces.
>
> Also making the _decoder pointer const to show that it should never be
> changing.
>
> BUG=chromium:563299
> R=stefan@webrtc.org
>
> Committed: a443ec1a75
TBR=stefan@webrtc.org,pbos@webrtc.org
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=chromium:563299
Review URL: https://codereview.webrtc.org/1490703002
Cr-Commit-Position: refs/heads/master@{#10851}
This commit is contained in:
@ -423,7 +423,7 @@ bool VCMCodecDataBase::DeregisterExternalDecoder(uint8_t payload_type) {
|
|||||||
// because payload type may be out of date (e.g. before we decode the first
|
// because payload type may be out of date (e.g. before we decode the first
|
||||||
// frame after RegisterReceiveCodec)
|
// frame after RegisterReceiveCodec)
|
||||||
if (ptr_decoder_ != nullptr &&
|
if (ptr_decoder_ != nullptr &&
|
||||||
ptr_decoder_->_decoder == (*it).second->external_decoder_instance) {
|
&ptr_decoder_->_decoder == (*it).second->external_decoder_instance) {
|
||||||
// Release it if it was registered and in use.
|
// Release it if it was registered and in use.
|
||||||
ReleaseDecoder(ptr_decoder_);
|
ReleaseDecoder(ptr_decoder_);
|
||||||
ptr_decoder_ = nullptr;
|
ptr_decoder_ = nullptr;
|
||||||
@ -571,7 +571,7 @@ VCMGenericDecoder* VCMCodecDataBase::CreateAndInitDecoder(
|
|||||||
if (external_dec_item) {
|
if (external_dec_item) {
|
||||||
// External codec.
|
// External codec.
|
||||||
ptr_decoder = new VCMGenericDecoder(
|
ptr_decoder = new VCMGenericDecoder(
|
||||||
external_dec_item->external_decoder_instance, true);
|
*external_dec_item->external_decoder_instance, true);
|
||||||
} else {
|
} else {
|
||||||
// Create decoder.
|
// Create decoder.
|
||||||
ptr_decoder = CreateDecoder(decoder_item->settings->codecType);
|
ptr_decoder = CreateDecoder(decoder_item->settings->codecType);
|
||||||
@ -607,14 +607,14 @@ void VCMCodecDataBase::DeleteEncoder() {
|
|||||||
VCMGenericDecoder* VCMCodecDataBase::CreateDecoder(VideoCodecType type) const {
|
VCMGenericDecoder* VCMCodecDataBase::CreateDecoder(VideoCodecType type) const {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case kVideoCodecVP8:
|
case kVideoCodecVP8:
|
||||||
return new VCMGenericDecoder(VP8Decoder::Create(), false);
|
return new VCMGenericDecoder(*(VP8Decoder::Create()));
|
||||||
case kVideoCodecVP9:
|
case kVideoCodecVP9:
|
||||||
return new VCMGenericDecoder(VP9Decoder::Create(), false);
|
return new VCMGenericDecoder(*(VP9Decoder::Create()));
|
||||||
case kVideoCodecI420:
|
case kVideoCodecI420:
|
||||||
return new VCMGenericDecoder(new I420Decoder(), false);
|
return new VCMGenericDecoder(*(new I420Decoder));
|
||||||
case kVideoCodecH264:
|
case kVideoCodecH264:
|
||||||
if (H264Decoder::IsSupported()) {
|
if (H264Decoder::IsSupported()) {
|
||||||
return new VCMGenericDecoder(H264Decoder::Create(), false);
|
return new VCMGenericDecoder(*(H264Decoder::Create()));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -8,11 +8,10 @@
|
|||||||
* be found in the AUTHORS file in the root of the source tree.
|
* be found in the AUTHORS file in the root of the source tree.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "webrtc/base/checks.h"
|
|
||||||
#include "webrtc/base/logging.h"
|
#include "webrtc/base/logging.h"
|
||||||
#include "webrtc/base/trace_event.h"
|
#include "webrtc/base/trace_event.h"
|
||||||
#include "webrtc/modules/video_coding/generic_decoder.h"
|
|
||||||
#include "webrtc/modules/video_coding/include/video_coding.h"
|
#include "webrtc/modules/video_coding/include/video_coding.h"
|
||||||
|
#include "webrtc/modules/video_coding/generic_decoder.h"
|
||||||
#include "webrtc/modules/video_coding/internal_defines.h"
|
#include "webrtc/modules/video_coding/internal_defines.h"
|
||||||
#include "webrtc/system_wrappers/include/clock.h"
|
#include "webrtc/system_wrappers/include/clock.h"
|
||||||
|
|
||||||
@ -132,15 +131,16 @@ int32_t VCMDecodedFrameCallback::Pop(uint32_t timestamp)
|
|||||||
return VCM_OK;
|
return VCM_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
VCMGenericDecoder::VCMGenericDecoder(VideoDecoder* decoder, bool isExternal)
|
VCMGenericDecoder::VCMGenericDecoder(VideoDecoder& decoder, bool isExternal)
|
||||||
: _callback(NULL),
|
:
|
||||||
_frameInfos(),
|
_callback(NULL),
|
||||||
_nextFrameInfoIdx(0),
|
_frameInfos(),
|
||||||
_decoder(decoder),
|
_nextFrameInfoIdx(0),
|
||||||
_codecType(kVideoCodecUnknown),
|
_decoder(decoder),
|
||||||
_isExternal(isExternal),
|
_codecType(kVideoCodecUnknown),
|
||||||
_keyFrameDecoded(false) {
|
_isExternal(isExternal),
|
||||||
RTC_CHECK(_decoder);
|
_keyFrameDecoded(false)
|
||||||
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
VCMGenericDecoder::~VCMGenericDecoder()
|
VCMGenericDecoder::~VCMGenericDecoder()
|
||||||
@ -153,7 +153,7 @@ int32_t VCMGenericDecoder::InitDecode(const VideoCodec* settings,
|
|||||||
TRACE_EVENT0("webrtc", "VCMGenericDecoder::InitDecode");
|
TRACE_EVENT0("webrtc", "VCMGenericDecoder::InitDecode");
|
||||||
_codecType = settings->codecType;
|
_codecType = settings->codecType;
|
||||||
|
|
||||||
return _decoder->InitDecode(settings, numberOfCores);
|
return _decoder.InitDecode(settings, numberOfCores);
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t VCMGenericDecoder::Decode(const VCMEncodedFrame& frame, int64_t nowMs) {
|
int32_t VCMGenericDecoder::Decode(const VCMEncodedFrame& frame, int64_t nowMs) {
|
||||||
@ -165,7 +165,7 @@ int32_t VCMGenericDecoder::Decode(const VCMEncodedFrame& frame, int64_t nowMs) {
|
|||||||
_callback->Map(frame.TimeStamp(), &_frameInfos[_nextFrameInfoIdx]);
|
_callback->Map(frame.TimeStamp(), &_frameInfos[_nextFrameInfoIdx]);
|
||||||
|
|
||||||
_nextFrameInfoIdx = (_nextFrameInfoIdx + 1) % kDecoderFrameMemoryLength;
|
_nextFrameInfoIdx = (_nextFrameInfoIdx + 1) % kDecoderFrameMemoryLength;
|
||||||
int32_t ret = _decoder->Decode(frame.EncodedImage(),
|
int32_t ret = _decoder.Decode(frame.EncodedImage(),
|
||||||
frame.MissingFrame(),
|
frame.MissingFrame(),
|
||||||
frame.FragmentationHeader(),
|
frame.FragmentationHeader(),
|
||||||
frame.CodecSpecific(),
|
frame.CodecSpecific(),
|
||||||
@ -190,18 +190,18 @@ int32_t VCMGenericDecoder::Decode(const VCMEncodedFrame& frame, int64_t nowMs) {
|
|||||||
int32_t
|
int32_t
|
||||||
VCMGenericDecoder::Release()
|
VCMGenericDecoder::Release()
|
||||||
{
|
{
|
||||||
return _decoder->Release();
|
return _decoder.Release();
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t VCMGenericDecoder::Reset()
|
int32_t VCMGenericDecoder::Reset()
|
||||||
{
|
{
|
||||||
return _decoder->Reset();
|
return _decoder.Reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t VCMGenericDecoder::RegisterDecodeCompleteCallback(VCMDecodedFrameCallback* callback)
|
int32_t VCMGenericDecoder::RegisterDecodeCompleteCallback(VCMDecodedFrameCallback* callback)
|
||||||
{
|
{
|
||||||
_callback = callback;
|
_callback = callback;
|
||||||
return _decoder->RegisterDecodeCompleteCallback(callback);
|
return _decoder.RegisterDecodeCompleteCallback(callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool VCMGenericDecoder::External() const
|
bool VCMGenericDecoder::External() const
|
||||||
|
@ -65,7 +65,7 @@ class VCMGenericDecoder
|
|||||||
{
|
{
|
||||||
friend class VCMCodecDataBase;
|
friend class VCMCodecDataBase;
|
||||||
public:
|
public:
|
||||||
VCMGenericDecoder(VideoDecoder* decoder, bool external);
|
VCMGenericDecoder(VideoDecoder& decoder, bool isExternal = false);
|
||||||
~VCMGenericDecoder();
|
~VCMGenericDecoder();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -102,7 +102,7 @@ private:
|
|||||||
VCMDecodedFrameCallback* _callback;
|
VCMDecodedFrameCallback* _callback;
|
||||||
VCMFrameInformation _frameInfos[kDecoderFrameMemoryLength];
|
VCMFrameInformation _frameInfos[kDecoderFrameMemoryLength];
|
||||||
uint32_t _nextFrameInfoIdx;
|
uint32_t _nextFrameInfoIdx;
|
||||||
VideoDecoder* const _decoder;
|
VideoDecoder& _decoder;
|
||||||
VideoCodecType _codecType;
|
VideoCodecType _codecType;
|
||||||
bool _isExternal;
|
bool _isExternal;
|
||||||
bool _keyFrameDecoded;
|
bool _keyFrameDecoded;
|
||||||
|
Reference in New Issue
Block a user