From 88488287086bfada4c4cfe9b1119a4459b359b9d Mon Sep 17 00:00:00 2001 From: philipel Date: Thu, 3 Nov 2016 08:56:54 -0700 Subject: [PATCH] RtpFrameObject::GetCodecHeader now return rtc::Optional Since it is unsafe to hand out a pointer to a packet that might be removed/ overwritten at any time we now return a copy of the header if it exist. BUG=webrtc:5514 Review-Url: https://codereview.webrtc.org/2468183002 Cr-Commit-Position: refs/heads/master@{#14920} --- webrtc/modules/video_coding/frame_object.cc | 8 ++++---- webrtc/modules/video_coding/frame_object.h | 3 ++- webrtc/modules/video_coding/rtp_frame_reference_finder.cc | 6 +++--- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/webrtc/modules/video_coding/frame_object.cc b/webrtc/modules/video_coding/frame_object.cc index acfb25d28d..b8031796d9 100644 --- a/webrtc/modules/video_coding/frame_object.cc +++ b/webrtc/modules/video_coding/frame_object.cc @@ -9,7 +9,6 @@ */ #include "webrtc/modules/video_coding/frame_object.h" -#include "webrtc/base/criticalsection.h" #include "webrtc/modules/video_coding/packet_buffer.h" namespace webrtc { @@ -97,11 +96,12 @@ int64_t RtpFrameObject::RenderTime() const { return _renderTimeMs; } -RTPVideoTypeHeader* RtpFrameObject::GetCodecHeader() const { +rtc::Optional RtpFrameObject::GetCodecHeader() const { + rtc::CritScope lock(&packet_buffer_->crit_); VCMPacket* packet = packet_buffer_->GetPacket(first_seq_num_); if (!packet) - return nullptr; - return &packet->video_header.codecHeader; + return rtc::Optional(); + return rtc::Optional(packet->video_header.codecHeader); } } // namespace video_coding diff --git a/webrtc/modules/video_coding/frame_object.h b/webrtc/modules/video_coding/frame_object.h index 542797226e..915224ede8 100644 --- a/webrtc/modules/video_coding/frame_object.h +++ b/webrtc/modules/video_coding/frame_object.h @@ -11,6 +11,7 @@ #ifndef WEBRTC_MODULES_VIDEO_CODING_FRAME_OBJECT_H_ #define WEBRTC_MODULES_VIDEO_CODING_FRAME_OBJECT_H_ +#include "webrtc/base/optional.h" #include "webrtc/common_types.h" #include "webrtc/modules/include/module_common_types.h" #include "webrtc/modules/video_coding/encoded_frame.h" @@ -71,7 +72,7 @@ class RtpFrameObject : public FrameObject { uint32_t Timestamp() const override; int64_t ReceivedTime() const override; int64_t RenderTime() const override; - RTPVideoTypeHeader* GetCodecHeader() const; + rtc::Optional GetCodecHeader() const; private: rtc::scoped_refptr packet_buffer_; diff --git a/webrtc/modules/video_coding/rtp_frame_reference_finder.cc b/webrtc/modules/video_coding/rtp_frame_reference_finder.cc index a64518a41e..c3d19c1a3c 100644 --- a/webrtc/modules/video_coding/rtp_frame_reference_finder.cc +++ b/webrtc/modules/video_coding/rtp_frame_reference_finder.cc @@ -205,7 +205,7 @@ void RtpFrameReferenceFinder::ManageFrameGeneric( void RtpFrameReferenceFinder::ManageFrameVp8( std::unique_ptr frame) { - RTPVideoTypeHeader* rtp_codec_header = frame->GetCodecHeader(); + rtc::Optional rtp_codec_header = frame->GetCodecHeader(); if (!rtp_codec_header) return; @@ -328,7 +328,7 @@ void RtpFrameReferenceFinder::ManageFrameVp8( void RtpFrameReferenceFinder::CompletedFrameVp8( std::unique_ptr frame) { - RTPVideoTypeHeader* rtp_codec_header = frame->GetCodecHeader(); + rtc::Optional rtp_codec_header = frame->GetCodecHeader(); if (!rtp_codec_header) return; @@ -364,7 +364,7 @@ void RtpFrameReferenceFinder::CompletedFrameVp8( void RtpFrameReferenceFinder::ManageFrameVp9( std::unique_ptr frame) { - RTPVideoTypeHeader* rtp_codec_header = frame->GetCodecHeader(); + rtc::Optional rtp_codec_header = frame->GetCodecHeader(); if (!rtp_codec_header) return;