RtpFrameObject::GetCodecHeader now return rtc::Optional<RTPVideoTypeHeader>

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-Original-Commit-Position: refs/heads/master@{#14920}
Cr-Mirrored-From: https://chromium.googlesource.com/external/webrtc
Cr-Mirrored-Commit: 88488287086bfada4c4cfe9b1119a4459b359b9d
diff --git a/modules/video_coding/frame_object.cc b/modules/video_coding/frame_object.cc
index acfb25d..b803179 100644
--- a/modules/video_coding/frame_object.cc
+++ b/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 @@
   return _renderTimeMs;
 }
 
-RTPVideoTypeHeader* RtpFrameObject::GetCodecHeader() const {
+rtc::Optional<RTPVideoTypeHeader> 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<RTPVideoTypeHeader>();
+  return rtc::Optional<RTPVideoTypeHeader>(packet->video_header.codecHeader);
 }
 
 }  // namespace video_coding
diff --git a/modules/video_coding/frame_object.h b/modules/video_coding/frame_object.h
index 5427972..915224e 100644
--- a/modules/video_coding/frame_object.h
+++ b/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 @@
   uint32_t Timestamp() const override;
   int64_t ReceivedTime() const override;
   int64_t RenderTime() const override;
-  RTPVideoTypeHeader* GetCodecHeader() const;
+  rtc::Optional<RTPVideoTypeHeader> GetCodecHeader() const;
 
  private:
   rtc::scoped_refptr<PacketBuffer> packet_buffer_;
diff --git a/modules/video_coding/rtp_frame_reference_finder.cc b/modules/video_coding/rtp_frame_reference_finder.cc
index a64518a..c3d19c1 100644
--- a/modules/video_coding/rtp_frame_reference_finder.cc
+++ b/modules/video_coding/rtp_frame_reference_finder.cc
@@ -205,7 +205,7 @@
 
 void RtpFrameReferenceFinder::ManageFrameVp8(
     std::unique_ptr<RtpFrameObject> frame) {
-  RTPVideoTypeHeader* rtp_codec_header = frame->GetCodecHeader();
+  rtc::Optional<RTPVideoTypeHeader> rtp_codec_header = frame->GetCodecHeader();
   if (!rtp_codec_header)
     return;
 
@@ -328,7 +328,7 @@
 
 void RtpFrameReferenceFinder::CompletedFrameVp8(
     std::unique_ptr<RtpFrameObject> frame) {
-  RTPVideoTypeHeader* rtp_codec_header = frame->GetCodecHeader();
+  rtc::Optional<RTPVideoTypeHeader> rtp_codec_header = frame->GetCodecHeader();
   if (!rtp_codec_header)
     return;
 
@@ -364,7 +364,7 @@
 
 void RtpFrameReferenceFinder::ManageFrameVp9(
     std::unique_ptr<RtpFrameObject> frame) {
-  RTPVideoTypeHeader* rtp_codec_header = frame->GetCodecHeader();
+  rtc::Optional<RTPVideoTypeHeader> rtp_codec_header = frame->GetCodecHeader();
   if (!rtp_codec_header)
     return;