blob: 58dabc7dc7a75856ced65ffc86b9e1f69b54e23f [file] [log] [blame]
* Copyright (c) 2011 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 "timing.h"
#include "timestamp_map.h"
#include "video_codec_interface.h"
#include "encoded_frame.h"
#include "module_common_types.h"
namespace webrtc
class VCMReceiveCallback;
enum { kDecoderFrameMemoryLength = 10 };
struct VCMFrameInformation
WebRtc_Word64 renderTimeMs;
WebRtc_Word64 decodeStartTimeMs;
void* userData;
class VCMDecodedFrameCallback : public DecodedImageCallback
VCMDecodedFrameCallback(VCMTiming& timing, TickTimeBase* clock);
virtual ~VCMDecodedFrameCallback();
void SetUserReceiveCallback(VCMReceiveCallback* receiveCallback);
virtual WebRtc_Word32 Decoded(RawImage& decodedImage);
virtual WebRtc_Word32 ReceivedDecodedReferenceFrame(const WebRtc_UWord64 pictureId);
virtual WebRtc_Word32 ReceivedDecodedFrame(const WebRtc_UWord64 pictureId);
WebRtc_UWord64 LastReceivedPictureID() const;
WebRtc_Word32 Map(WebRtc_UWord32 timestamp, VCMFrameInformation* frameInfo);
WebRtc_Word32 Pop(WebRtc_UWord32 timestamp);
CriticalSectionWrapper* _critSect;
TickTimeBase* _clock;
VideoFrame _frame;
VCMReceiveCallback* _receiveCallback;
VCMTiming& _timing;
VCMTimestampMap _timestampMap;
WebRtc_UWord64 _lastReceivedPictureID;
class VCMGenericDecoder
friend class VCMCodecDataBase;
VCMGenericDecoder(VideoDecoder& decoder, WebRtc_Word32 id = 0, bool isExternal = false);
* Initialize the decoder with the information from the VideoCodec
WebRtc_Word32 InitDecode(const VideoCodec* settings,
WebRtc_Word32 numberOfCores,
bool requireKeyFrame);
* Decode to a raw I420 frame,
* inputVideoBuffer reference to encoded video frame
WebRtc_Word32 Decode(const VCMEncodedFrame& inputFrame, int64_t nowMs);
* Free the decoder memory
WebRtc_Word32 Release();
* Reset the decoder state, prepare for a new call
WebRtc_Word32 Reset();
* Codec configuration data sent out-of-band, i.e. in SIP call setup
* buffer pointer to the configuration data
* size the size of the configuration data in bytes
WebRtc_Word32 SetCodecConfigParameters(const WebRtc_UWord8* /*buffer*/,
WebRtc_Word32 /*size*/);
WebRtc_Word32 RegisterDecodeCompleteCallback(VCMDecodedFrameCallback* callback);
bool External() const;
WebRtc_Word32 _id;
VCMDecodedFrameCallback* _callback;
VCMFrameInformation _frameInfos[kDecoderFrameMemoryLength];
WebRtc_UWord32 _nextFrameInfoIdx;
VideoDecoder& _decoder;
VideoCodecType _codecType;
bool _isExternal;
bool _requireKeyFrame;
bool _keyFrameDecoded;
} // namespace webrtc