| Index: webrtc/modules/video_coding/main/source/generic_decoder.cc
|
| diff --git a/webrtc/modules/video_coding/main/source/generic_decoder.cc b/webrtc/modules/video_coding/main/source/generic_decoder.cc
|
| deleted file mode 100644
|
| index 790bf130a12e9fb5ea64f20f99c1d3e650520990..0000000000000000000000000000000000000000
|
| --- a/webrtc/modules/video_coding/main/source/generic_decoder.cc
|
| +++ /dev/null
|
| @@ -1,212 +0,0 @@
|
| -/*
|
| - * Copyright (c) 2012 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.
|
| - */
|
| -
|
| -#include "webrtc/base/logging.h"
|
| -#include "webrtc/base/trace_event.h"
|
| -#include "webrtc/modules/video_coding/main/interface/video_coding.h"
|
| -#include "webrtc/modules/video_coding/main/source/generic_decoder.h"
|
| -#include "webrtc/modules/video_coding/main/source/internal_defines.h"
|
| -#include "webrtc/system_wrappers/include/clock.h"
|
| -
|
| -namespace webrtc {
|
| -
|
| -VCMDecodedFrameCallback::VCMDecodedFrameCallback(VCMTiming& timing,
|
| - Clock* clock)
|
| -:
|
| -_critSect(CriticalSectionWrapper::CreateCriticalSection()),
|
| -_clock(clock),
|
| -_receiveCallback(NULL),
|
| -_timing(timing),
|
| -_timestampMap(kDecoderFrameMemoryLength),
|
| -_lastReceivedPictureID(0)
|
| -{
|
| -}
|
| -
|
| -VCMDecodedFrameCallback::~VCMDecodedFrameCallback()
|
| -{
|
| - delete _critSect;
|
| -}
|
| -
|
| -void VCMDecodedFrameCallback::SetUserReceiveCallback(
|
| - VCMReceiveCallback* receiveCallback)
|
| -{
|
| - CriticalSectionScoped cs(_critSect);
|
| - _receiveCallback = receiveCallback;
|
| -}
|
| -
|
| -VCMReceiveCallback* VCMDecodedFrameCallback::UserReceiveCallback()
|
| -{
|
| - CriticalSectionScoped cs(_critSect);
|
| - return _receiveCallback;
|
| -}
|
| -
|
| -int32_t VCMDecodedFrameCallback::Decoded(VideoFrame& decodedImage) {
|
| - return Decoded(decodedImage, -1);
|
| -}
|
| -
|
| -int32_t VCMDecodedFrameCallback::Decoded(VideoFrame& decodedImage,
|
| - int64_t decode_time_ms) {
|
| - TRACE_EVENT_INSTANT1("webrtc", "VCMDecodedFrameCallback::Decoded",
|
| - "timestamp", decodedImage.timestamp());
|
| - // TODO(holmer): We should improve this so that we can handle multiple
|
| - // callbacks from one call to Decode().
|
| - VCMFrameInformation* frameInfo;
|
| - VCMReceiveCallback* callback;
|
| - {
|
| - CriticalSectionScoped cs(_critSect);
|
| - frameInfo = _timestampMap.Pop(decodedImage.timestamp());
|
| - callback = _receiveCallback;
|
| - }
|
| -
|
| - if (frameInfo == NULL) {
|
| - LOG(LS_WARNING) << "Too many frames backed up in the decoder, dropping "
|
| - "this one.";
|
| - return WEBRTC_VIDEO_CODEC_OK;
|
| - }
|
| -
|
| - const int64_t now_ms = _clock->TimeInMilliseconds();
|
| - if (decode_time_ms < 0) {
|
| - decode_time_ms =
|
| - static_cast<int32_t>(now_ms - frameInfo->decodeStartTimeMs);
|
| - }
|
| - _timing.StopDecodeTimer(
|
| - decodedImage.timestamp(),
|
| - decode_time_ms,
|
| - now_ms,
|
| - frameInfo->renderTimeMs);
|
| -
|
| - if (callback != NULL)
|
| - {
|
| - decodedImage.set_render_time_ms(frameInfo->renderTimeMs);
|
| - decodedImage.set_rotation(frameInfo->rotation);
|
| - callback->FrameToRender(decodedImage);
|
| - }
|
| - return WEBRTC_VIDEO_CODEC_OK;
|
| -}
|
| -
|
| -int32_t
|
| -VCMDecodedFrameCallback::ReceivedDecodedReferenceFrame(
|
| - const uint64_t pictureId)
|
| -{
|
| - CriticalSectionScoped cs(_critSect);
|
| - if (_receiveCallback != NULL)
|
| - {
|
| - return _receiveCallback->ReceivedDecodedReferenceFrame(pictureId);
|
| - }
|
| - return -1;
|
| -}
|
| -
|
| -int32_t
|
| -VCMDecodedFrameCallback::ReceivedDecodedFrame(const uint64_t pictureId)
|
| -{
|
| - _lastReceivedPictureID = pictureId;
|
| - return 0;
|
| -}
|
| -
|
| -uint64_t VCMDecodedFrameCallback::LastReceivedPictureID() const
|
| -{
|
| - return _lastReceivedPictureID;
|
| -}
|
| -
|
| -void VCMDecodedFrameCallback::Map(uint32_t timestamp,
|
| - VCMFrameInformation* frameInfo) {
|
| - CriticalSectionScoped cs(_critSect);
|
| - _timestampMap.Add(timestamp, frameInfo);
|
| -}
|
| -
|
| -int32_t VCMDecodedFrameCallback::Pop(uint32_t timestamp)
|
| -{
|
| - CriticalSectionScoped cs(_critSect);
|
| - if (_timestampMap.Pop(timestamp) == NULL)
|
| - {
|
| - return VCM_GENERAL_ERROR;
|
| - }
|
| - return VCM_OK;
|
| -}
|
| -
|
| -VCMGenericDecoder::VCMGenericDecoder(VideoDecoder& decoder, bool isExternal)
|
| -:
|
| -_callback(NULL),
|
| -_frameInfos(),
|
| -_nextFrameInfoIdx(0),
|
| -_decoder(decoder),
|
| -_codecType(kVideoCodecUnknown),
|
| -_isExternal(isExternal),
|
| -_keyFrameDecoded(false)
|
| -{
|
| -}
|
| -
|
| -VCMGenericDecoder::~VCMGenericDecoder()
|
| -{
|
| -}
|
| -
|
| -int32_t VCMGenericDecoder::InitDecode(const VideoCodec* settings,
|
| - int32_t numberOfCores)
|
| -{
|
| - TRACE_EVENT0("webrtc", "VCMGenericDecoder::InitDecode");
|
| - _codecType = settings->codecType;
|
| -
|
| - return _decoder.InitDecode(settings, numberOfCores);
|
| -}
|
| -
|
| -int32_t VCMGenericDecoder::Decode(const VCMEncodedFrame& frame, int64_t nowMs) {
|
| - TRACE_EVENT1("webrtc", "VCMGenericDecoder::Decode", "timestamp",
|
| - frame.EncodedImage()._timeStamp);
|
| - _frameInfos[_nextFrameInfoIdx].decodeStartTimeMs = nowMs;
|
| - _frameInfos[_nextFrameInfoIdx].renderTimeMs = frame.RenderTimeMs();
|
| - _frameInfos[_nextFrameInfoIdx].rotation = frame.rotation();
|
| - _callback->Map(frame.TimeStamp(), &_frameInfos[_nextFrameInfoIdx]);
|
| -
|
| - _nextFrameInfoIdx = (_nextFrameInfoIdx + 1) % kDecoderFrameMemoryLength;
|
| - int32_t ret = _decoder.Decode(frame.EncodedImage(),
|
| - frame.MissingFrame(),
|
| - frame.FragmentationHeader(),
|
| - frame.CodecSpecific(),
|
| - frame.RenderTimeMs());
|
| -
|
| - if (ret < WEBRTC_VIDEO_CODEC_OK)
|
| - {
|
| - LOG(LS_WARNING) << "Failed to decode frame with timestamp "
|
| - << frame.TimeStamp() << ", error code: " << ret;
|
| - _callback->Pop(frame.TimeStamp());
|
| - return ret;
|
| - }
|
| - else if (ret == WEBRTC_VIDEO_CODEC_NO_OUTPUT ||
|
| - ret == WEBRTC_VIDEO_CODEC_REQUEST_SLI)
|
| - {
|
| - // No output
|
| - _callback->Pop(frame.TimeStamp());
|
| - }
|
| - return ret;
|
| -}
|
| -
|
| -int32_t
|
| -VCMGenericDecoder::Release()
|
| -{
|
| - return _decoder.Release();
|
| -}
|
| -
|
| -int32_t VCMGenericDecoder::Reset()
|
| -{
|
| - return _decoder.Reset();
|
| -}
|
| -
|
| -int32_t VCMGenericDecoder::RegisterDecodeCompleteCallback(VCMDecodedFrameCallback* callback)
|
| -{
|
| - _callback = callback;
|
| - return _decoder.RegisterDecodeCompleteCallback(callback);
|
| -}
|
| -
|
| -bool VCMGenericDecoder::External() const
|
| -{
|
| - return _isExternal;
|
| -}
|
| -
|
| -} // namespace
|
|
|