Fix memory leak in VideoToolbox encoder.

We were leaking a fragmentation header object on each frame.

BUG=webrtc:8132

Review-Url: https://codereview.webrtc.org/3004013002
Cr-Original-Commit-Position: refs/heads/master@{#19602}
Cr-Mirrored-From: https://chromium.googlesource.com/external/webrtc
Cr-Mirrored-Commit: f8084d485b87e49a68ff8e46e07bc01d375586be
diff --git a/sdk/objc/Framework/Classes/VideoToolbox/RTCVideoEncoderH264.mm b/sdk/objc/Framework/Classes/VideoToolbox/RTCVideoEncoderH264.mm
index 44983be..a410e27 100644
--- a/sdk/objc/Framework/Classes/VideoToolbox/RTCVideoEncoderH264.mm
+++ b/sdk/objc/Framework/Classes/VideoToolbox/RTCVideoEncoderH264.mm
@@ -664,10 +664,10 @@
   std::unique_ptr<rtc::Buffer> buffer(new rtc::Buffer());
   RTCRtpFragmentationHeader *header;
   {
-    webrtc::RTPFragmentationHeader *header_cpp;
+    std::unique_ptr<webrtc::RTPFragmentationHeader> header_cpp;
     bool result =
         H264CMSampleBufferToAnnexBBuffer(sampleBuffer, isKeyframe, buffer.get(), &header_cpp);
-    header = [[RTCRtpFragmentationHeader alloc] initWithNativeFragmentationHeader:header_cpp];
+    header = [[RTCRtpFragmentationHeader alloc] initWithNativeFragmentationHeader:header_cpp.get()];
     if (!result) {
       return;
     }
diff --git a/sdk/objc/Framework/Classes/VideoToolbox/nalu_rewriter.cc b/sdk/objc/Framework/Classes/VideoToolbox/nalu_rewriter.cc
index 47afe95..2804254 100644
--- a/sdk/objc/Framework/Classes/VideoToolbox/nalu_rewriter.cc
+++ b/sdk/objc/Framework/Classes/VideoToolbox/nalu_rewriter.cc
@@ -33,10 +33,10 @@
     CMSampleBufferRef avcc_sample_buffer,
     bool is_keyframe,
     rtc::Buffer* annexb_buffer,
-    webrtc::RTPFragmentationHeader** out_header) {
+    std::unique_ptr<RTPFragmentationHeader> *out_header) {
   RTC_DCHECK(avcc_sample_buffer);
   RTC_DCHECK(out_header);
-  *out_header = nullptr;
+  out_header->reset(nullptr);
 
   // Get format description from the sample buffer.
   CMVideoFormatDescriptionRef description =
@@ -143,8 +143,7 @@
   }
   RTC_DCHECK_EQ(bytes_remaining, (size_t)0);
 
-  std::unique_ptr<webrtc::RTPFragmentationHeader> header;
-  header.reset(new webrtc::RTPFragmentationHeader());
+  std::unique_ptr<RTPFragmentationHeader> header(new RTPFragmentationHeader());
   header->VerifyAndAllocateFragmentationHeader(frag_offsets.size());
   RTC_DCHECK_EQ(frag_lengths.size(), frag_offsets.size());
   for (size_t i = 0; i < frag_offsets.size(); ++i) {
@@ -153,7 +152,7 @@
     header->fragmentationPlType[i] = 0;
     header->fragmentationTimeDiff[i] = 0;
   }
-  *out_header = header.release();
+  *out_header = std::move(header);
   CFRelease(contiguous_buffer);
   return true;
 }
diff --git a/sdk/objc/Framework/Classes/VideoToolbox/nalu_rewriter.h b/sdk/objc/Framework/Classes/VideoToolbox/nalu_rewriter.h
index 4685f08..3d7a88f 100644
--- a/sdk/objc/Framework/Classes/VideoToolbox/nalu_rewriter.h
+++ b/sdk/objc/Framework/Classes/VideoToolbox/nalu_rewriter.h
@@ -33,7 +33,7 @@
     CMSampleBufferRef avcc_sample_buffer,
     bool is_keyframe,
     rtc::Buffer* annexb_buffer,
-    webrtc::RTPFragmentationHeader** out_header);
+    std::unique_ptr<RTPFragmentationHeader> *out_header);
 
 // Converts a buffer received from RTP into a sample buffer suitable for the
 // VideoToolbox decoder. The RTP buffer is in annex b format whereas the sample
diff --git a/sdk/objc/Framework/Classes/VideoToolbox/objc_video_encoder_factory.mm b/sdk/objc/Framework/Classes/VideoToolbox/objc_video_encoder_factory.mm
index c3de9ae..75b4a34 100644
--- a/sdk/objc/Framework/Classes/VideoToolbox/objc_video_encoder_factory.mm
+++ b/sdk/objc/Framework/Classes/VideoToolbox/objc_video_encoder_factory.mm
@@ -78,7 +78,7 @@
       std::unique_ptr<RTPFragmentationHeader> fragmentationHeader =
           [header createNativeFragmentationHeader];
       EncodedImageCallback::Result res =
-          callback->OnEncodedImage(encodedImage, &codecSpecificInfo, fragmentationHeader.release());
+          callback->OnEncodedImage(encodedImage, &codecSpecificInfo, fragmentationHeader.get());
       return res.error == EncodedImageCallback::Result::OK;
     }];