| Index: webrtc/modules/video_coding/generic_decoder.h
|
| diff --git a/webrtc/modules/video_coding/generic_decoder.h b/webrtc/modules/video_coding/generic_decoder.h
|
| index 48e25196e93d74b3618792c64d70a8239b2c5231..891ec893ff2cd98e8337152ecbc64d355a04c2ff 100644
|
| --- a/webrtc/modules/video_coding/generic_decoder.h
|
| +++ b/webrtc/modules/video_coding/generic_decoder.h
|
| @@ -11,9 +11,11 @@
|
| #ifndef WEBRTC_MODULES_VIDEO_CODING_GENERIC_DECODER_H_
|
| #define WEBRTC_MODULES_VIDEO_CODING_GENERIC_DECODER_H_
|
|
|
| +#include "webrtc/base/criticalsection.h"
|
| +#include "webrtc/base/thread_checker.h"
|
| #include "webrtc/modules/include/module_common_types.h"
|
| -#include "webrtc/modules/video_coding/include/video_codec_interface.h"
|
| #include "webrtc/modules/video_coding/encoded_frame.h"
|
| +#include "webrtc/modules/video_coding/include/video_codec_interface.h"
|
| #include "webrtc/modules/video_coding/timestamp_map.h"
|
| #include "webrtc/modules/video_coding/timing.h"
|
|
|
| @@ -33,32 +35,38 @@ struct VCMFrameInformation {
|
| class VCMDecodedFrameCallback : public DecodedImageCallback {
|
| public:
|
| VCMDecodedFrameCallback(VCMTiming* timing, Clock* clock);
|
| - virtual ~VCMDecodedFrameCallback();
|
| - void SetUserReceiveCallback(VCMReceiveCallback* receiveCallback);
|
| - VCMReceiveCallback* UserReceiveCallback();
|
| + ~VCMDecodedFrameCallback() override;
|
| + void SetUserReceiveCallback(VCMReceiveCallback* receiveCallback);
|
| + VCMReceiveCallback* UserReceiveCallback();
|
|
|
| - int32_t Decoded(VideoFrame& decodedImage) override;
|
| - int32_t Decoded(VideoFrame& decodedImage, int64_t decode_time_ms) override;
|
| - void Decoded(VideoFrame& decodedImage,
|
| - rtc::Optional<int32_t> decode_time_ms,
|
| - rtc::Optional<uint8_t> qp) override;
|
| - int32_t ReceivedDecodedReferenceFrame(const uint64_t pictureId) override;
|
| - int32_t ReceivedDecodedFrame(const uint64_t pictureId) override;
|
| + int32_t Decoded(VideoFrame& decodedImage) override;
|
| + int32_t Decoded(VideoFrame& decodedImage, int64_t decode_time_ms) override;
|
| + void Decoded(VideoFrame& decodedImage,
|
| + rtc::Optional<int32_t> decode_time_ms,
|
| + rtc::Optional<uint8_t> qp) override;
|
| + int32_t ReceivedDecodedReferenceFrame(const uint64_t pictureId) override;
|
| + int32_t ReceivedDecodedFrame(const uint64_t pictureId) override;
|
|
|
| - uint64_t LastReceivedPictureID() const;
|
| - void OnDecoderImplementationName(const char* implementation_name);
|
| + uint64_t LastReceivedPictureID() const;
|
| + void OnDecoderImplementationName(const char* implementation_name);
|
|
|
| - void Map(uint32_t timestamp, VCMFrameInformation* frameInfo);
|
| - int32_t Pop(uint32_t timestamp);
|
| + void Map(uint32_t timestamp, VCMFrameInformation* frameInfo);
|
| + int32_t Pop(uint32_t timestamp);
|
|
|
| private:
|
| - // Protect |_receiveCallback| and |_timestampMap|.
|
| - CriticalSectionWrapper* _critSect;
|
| - Clock* _clock;
|
| - VCMReceiveCallback* _receiveCallback GUARDED_BY(_critSect);
|
| - VCMTiming* _timing;
|
| - VCMTimestampMap _timestampMap GUARDED_BY(_critSect);
|
| - uint64_t _lastReceivedPictureID;
|
| + rtc::ThreadChecker construction_thread_;
|
| + // Protect |_timestampMap|.
|
| + Clock* const _clock;
|
| + // This callback must be set before the decoder thread starts running
|
| + // and must only be unset when external threads (e.g decoder thread)
|
| + // have been stopped. Due to that, the variable should regarded as const
|
| + // while there are more than one threads involved, it must be set
|
| + // from the same thread, and therfore a lock is not required to access it.
|
| + VCMReceiveCallback* _receiveCallback = nullptr;
|
| + VCMTiming* _timing;
|
| + rtc::CriticalSection lock_;
|
| + VCMTimestampMap _timestampMap GUARDED_BY(lock_);
|
| + uint64_t _lastReceivedPictureID;
|
| };
|
|
|
| class VCMGenericDecoder {
|
|
|