Introduce VideoRtpDepacketizer interface to replace RtpDepacketizer

Bug: webrtc:11152
Change-Id: I20fd81233080d45d8978e5e57d0be6b592f44f43
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/161322
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#30018}
diff --git a/modules/rtp_rtcp/BUILD.gn b/modules/rtp_rtcp/BUILD.gn
index 2bb12ce..d0f4ce8 100644
--- a/modules/rtp_rtcp/BUILD.gn
+++ b/modules/rtp_rtcp/BUILD.gn
@@ -210,6 +210,7 @@
     "source/ulpfec_header_reader_writer.h",
     "source/ulpfec_receiver_impl.cc",
     "source/ulpfec_receiver_impl.h",
+    "source/video_rtp_depacketizer.h",
   ]
 
   if (rtc_enable_bwe_test_logging) {
diff --git a/modules/rtp_rtcp/source/rtp_format.h b/modules/rtp_rtcp/source/rtp_format.h
index 1c49811..2093bfa 100644
--- a/modules/rtp_rtcp/source/rtp_format.h
+++ b/modules/rtp_rtcp/source/rtp_format.h
@@ -60,7 +60,7 @@
                                             const PayloadSizeLimits& limits);
 };
 
-// TODO(sprang): Update the depacketizer to return a std::unqie_ptr with a copy
+// TODO(bugs.webrtc.org/11152): Update the depacketizer to return a copy
 // of the parsed payload, rather than just a pointer into the incoming buffer.
 // This way we can move some parsing out from the jitter buffer into here, and
 // the jitter buffer can just store that pointer rather than doing a copy there.
diff --git a/modules/rtp_rtcp/source/video_rtp_depacketizer.h b/modules/rtp_rtcp/source/video_rtp_depacketizer.h
new file mode 100644
index 0000000..0420e4e
--- /dev/null
+++ b/modules/rtp_rtcp/source/video_rtp_depacketizer.h
@@ -0,0 +1,34 @@
+/*
+ *  Copyright (c) 2019 The WebRTC project authors. All Rights Reserved.
+ *
+ *  Use of this source code is governed by a BSD-style license
+ *  that can be found in the LICENSE file in the root of the source
+ *  tree. An additional intellectual property rights grant can be found
+ *  in the file PATENTS.  All contributing project authors may
+ *  be found in the AUTHORS file in the root of the source tree.
+ */
+
+#ifndef MODULES_RTP_RTCP_SOURCE_VIDEO_RTP_DEPACKETIZER_H_
+#define MODULES_RTP_RTCP_SOURCE_VIDEO_RTP_DEPACKETIZER_H_
+
+#include "absl/types/optional.h"
+#include "modules/rtp_rtcp/source/rtp_video_header.h"
+#include "rtc_base/copy_on_write_buffer.h"
+
+namespace webrtc {
+
+class VideoRtpDepacketizer {
+ public:
+  struct ParsedRtpPayload {
+    RTPVideoHeader video_header;
+    rtc::CopyOnWriteBuffer video_payload;
+  };
+
+  virtual ~VideoRtpDepacketizer() = default;
+  virtual absl::optional<ParsedRtpPayload> Parse(
+      rtc::CopyOnWriteBuffer rtp_payload) = 0;
+};
+
+}  // namespace webrtc
+
+#endif  // MODULES_RTP_RTCP_SOURCE_VIDEO_RTP_DEPACKETIZER_H_