Revert "Stop using RTPFragmentationHeader in sdk/android as unneeded"

This reverts commit 0d000c0530fcd8b0c0b0b46d60d5b39878fdef6f.

Reason for revert: CL that added API with 2 params callback was reverter: https://webrtc-review.googlesource.com/c/src/+/180821

Original change's description:
> Stop using RTPFragmentationHeader in sdk/android as unneeded
> 
> Bug: webrtc:6471
> Change-Id: I81bbea4b7fd6e0325791456bb521e9dd0a64487d
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/180806
> Reviewed-by: Sami Kalliomäki <sakal@webrtc.org>
> Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#31836}

TBR=danilchap@webrtc.org,sakal@webrtc.org

Change-Id: I15809f663fd365ab11c0667e3705314fdbb38024
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: webrtc:6471
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/180822
Reviewed-by: Artem Titov <titovartem@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31840}
diff --git a/sdk/android/src/jni/video_encoder_wrapper.cc b/sdk/android/src/jni/video_encoder_wrapper.cc
index c12f5cf..1b34e99 100644
--- a/sdk/android/src/jni/video_encoder_wrapper.cc
+++ b/sdk/android/src/jni/video_encoder_wrapper.cc
@@ -254,12 +254,13 @@
   frame_copy.SetTimestamp(frame_extra_info.timestamp_rtp);
   frame_copy.capture_time_ms_ = capture_time_ns / rtc::kNumNanosecsPerMillisec;
 
+  RTPFragmentationHeader header = ParseFragmentationHeader(frame);
   if (frame_copy.qp_ < 0)
     frame_copy.qp_ = ParseQp(frame);
 
   CodecSpecificInfo info(ParseCodecSpecificInfo(frame));
 
-  callback_->OnEncodedImage(frame_copy, &info);
+  callback_->OnEncodedImage(frame_copy, &info, &header);
 }
 
 int32_t VideoEncoderWrapper::HandleReturnCode(JNIEnv* jni,
@@ -288,6 +289,35 @@
   return WEBRTC_VIDEO_CODEC_FALLBACK_SOFTWARE;
 }
 
+RTPFragmentationHeader VideoEncoderWrapper::ParseFragmentationHeader(
+    rtc::ArrayView<const uint8_t> buffer) {
+  RTPFragmentationHeader header;
+  if (codec_settings_.codecType == kVideoCodecH264) {
+    h264_bitstream_parser_.ParseBitstream(buffer.data(), buffer.size());
+
+    // For H.264 search for start codes.
+    const std::vector<H264::NaluIndex> nalu_idxs =
+        H264::FindNaluIndices(buffer.data(), buffer.size());
+    if (nalu_idxs.empty()) {
+      RTC_LOG(LS_ERROR) << "Start code is not found!";
+      RTC_LOG(LS_ERROR) << "Data:" << buffer[0] << " " << buffer[1] << " "
+                        << buffer[2] << " " << buffer[3] << " " << buffer[4]
+                        << " " << buffer[5];
+    }
+    header.VerifyAndAllocateFragmentationHeader(nalu_idxs.size());
+    for (size_t i = 0; i < nalu_idxs.size(); i++) {
+      header.fragmentationOffset[i] = nalu_idxs[i].payload_start_offset;
+      header.fragmentationLength[i] = nalu_idxs[i].payload_size;
+    }
+  } else {
+    // Generate a header describing a single fragment.
+    header.VerifyAndAllocateFragmentationHeader(1);
+    header.fragmentationOffset[0] = 0;
+    header.fragmentationLength[0] = buffer.size();
+  }
+  return header;
+}
+
 int VideoEncoderWrapper::ParseQp(rtc::ArrayView<const uint8_t> buffer) {
   int qp;
   bool success;
@@ -299,7 +329,6 @@
       success = vp9::GetQp(buffer.data(), buffer.size(), &qp);
       break;
     case kVideoCodecH264:
-      h264_bitstream_parser_.ParseBitstream(buffer.data(), buffer.size());
       success = h264_bitstream_parser_.GetLastSliceQp(&qp);
       break;
     default:  // Default is to not provide QP.
diff --git a/sdk/android/src/jni/video_encoder_wrapper.h b/sdk/android/src/jni/video_encoder_wrapper.h
index cee3a60..0e9d37b 100644
--- a/sdk/android/src/jni/video_encoder_wrapper.h
+++ b/sdk/android/src/jni/video_encoder_wrapper.h
@@ -67,6 +67,8 @@
                            const JavaRef<jobject>& j_value,
                            const char* method_name);
 
+  RTPFragmentationHeader ParseFragmentationHeader(
+      rtc::ArrayView<const uint8_t> buffer);
   int ParseQp(rtc::ArrayView<const uint8_t> buffer);
   CodecSpecificInfo ParseCodecSpecificInfo(const EncodedImage& frame);
   ScopedJavaLocalRef<jobject> ToJavaBitrateAllocation(