Create public EncodedFrame interface.

The plan is to:
 1. Move FrameObject to api/video.
 2. Rename FrameObject to EncodedFrame.
 3. Move EncodedFrame out of the video_coding namespace.

This is the 1st CL.

Bug: webrtc:8909
Change-Id: I2e5100eda6c51bcefb32295e03b73cf1f5c213a4
Reviewed-on: https://webrtc-review.googlesource.com/55560
Commit-Queue: Tommi <tommi@webrtc.org>
Reviewed-by: Tommi <tommi@webrtc.org>
Reviewed-by: Niels Moller <nisse@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22135}
diff --git a/modules/video_coding/BUILD.gn b/modules/video_coding/BUILD.gn
index 1b7b511..3269276 100644
--- a/modules/video_coding/BUILD.gn
+++ b/modules/video_coding/BUILD.gn
@@ -8,6 +8,34 @@
 
 import("../../webrtc.gni")
 
+rtc_static_library("encoded_frame") {
+  visibility = [ "*" ]
+  sources = [
+    "encoded_frame.cc",
+    "encoded_frame.h",
+  ]
+  deps = [
+    ":video_codec_interface",
+    "../../:webrtc_common",
+    "../../api:optional",
+    "../../api:video_frame_api_i420",
+    "../../common_video:common_video",
+    "../../modules:module_api",
+    "../../modules:module_api_public",
+    "../../modules/video_coding:video_coding_utility",
+    "../../rtc_base:checks",
+    "../../rtc_base:rtc_base_approved",
+    "../../rtc_base/experiments:alr_experiment",
+    "../../system_wrappers:field_trial_api",
+    "../../system_wrappers:system_wrappers",
+  ]
+
+  if (!build_with_chromium && is_clang) {
+    # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
+    suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
+  }
+}
+
 rtc_static_library("video_coding") {
   visibility = [ "*" ]
   deps = []
@@ -19,8 +47,6 @@
     "decoder_database.h",
     "decoding_state.cc",
     "decoding_state.h",
-    "encoded_frame.cc",
-    "encoded_frame.h",
     "encoder_database.cc",
     "encoder_database.h",
     "fec_controller_default.cc",
@@ -110,6 +136,7 @@
 
   deps += [
     ":codec_globals_headers",
+    ":encoded_frame",
     ":video_codec_interface",
     ":video_coding_utility",
     ":webrtc_h264",
@@ -118,6 +145,7 @@
     "..:module_api_public",
     "../..:webrtc_common",
     "../../:typedefs",
+    "../../api:encoded_frame_api",
     "../../api:fec_controller_api",
     "../../api:optional",
     "../../api:video_frame_api",
@@ -715,6 +743,7 @@
       sources += [ "codecs/h264/h264_encoder_impl_unittest.cc" ]
     }
     deps = [
+      ":encoded_frame",
       ":mock_headers",
       ":simulcast_test_utility",
       ":video_codec_interface",
diff --git a/modules/video_coding/encoded_frame.cc b/modules/video_coding/encoded_frame.cc
index 9950012..e390557 100644
--- a/modules/video_coding/encoded_frame.cc
+++ b/modules/video_coding/encoded_frame.cc
@@ -8,10 +8,7 @@
  *  be found in the AUTHORS file in the root of the source tree.
  */
 
-#include "modules/video_coding/include/video_coding_defines.h"
 #include "modules/video_coding/encoded_frame.h"
-#include "modules/video_coding/generic_encoder.h"
-#include "modules/video_coding/jitter_buffer_common.h"
 
 namespace webrtc {
 
diff --git a/modules/video_coding/frame_object.cc b/modules/video_coding/frame_object.cc
index 6a31cfd..3bb5283 100644
--- a/modules/video_coding/frame_object.cc
+++ b/modules/video_coding/frame_object.cc
@@ -17,13 +17,6 @@
 namespace webrtc {
 namespace video_coding {
 
-FrameObject::FrameObject()
-    : picture_id(0),
-      spatial_layer(0),
-      timestamp(0),
-      num_references(0),
-      inter_layer_predicted(false) {}
-
 RtpFrameObject::RtpFrameObject(PacketBuffer* packet_buffer,
                                uint16_t first_seq_num,
                                uint16_t last_seq_num,
diff --git a/modules/video_coding/frame_object.h b/modules/video_coding/frame_object.h
index 6f31c1a..72b719c 100644
--- a/modules/video_coding/frame_object.h
+++ b/modules/video_coding/frame_object.h
@@ -12,54 +12,13 @@
 #define MODULES_VIDEO_CODING_FRAME_OBJECT_H_
 
 #include "api/optional.h"
+#include "api/video/encoded_frame.h"
 #include "common_types.h"  // NOLINT(build/include)
 #include "modules/include/module_common_types.h"
-#include "modules/video_coding/encoded_frame.h"
 
 namespace webrtc {
 namespace video_coding {
 
-class FrameObject : public webrtc::VCMEncodedFrame {
- public:
-  static const uint8_t kMaxFrameReferences = 5;
-
-  FrameObject();
-  virtual ~FrameObject() {}
-
-  virtual bool GetBitstream(uint8_t* destination) const = 0;
-
-  // The capture timestamp of this frame.
-  virtual uint32_t Timestamp() const = 0;
-
-  // When this frame was received.
-  virtual int64_t ReceivedTime() const = 0;
-
-  // When this frame should be rendered.
-  virtual int64_t RenderTime() const = 0;
-
-  // This information is currently needed by the timing calculation class.
-  // TODO(philipel): Remove this function when a new timing class has
-  //                 been implemented.
-  virtual bool delayed_by_retransmission() const { return 0; }
-
-  size_t size() const { return _length; }
-
-  bool is_keyframe() const { return num_references == 0; }
-
-  // The tuple (|picture_id|, |spatial_layer|) uniquely identifies a frame
-  // object. For codec types that don't necessarily have picture ids they
-  // have to be constructed from the header data relevant to that codec.
-  int64_t picture_id;
-  uint8_t spatial_layer;
-  uint32_t timestamp;
-
-  // TODO(philipel): Add simple modify/access functions to prevent adding too
-  // many |references|.
-  size_t num_references;
-  int64_t references[kMaxFrameReferences];
-  bool inter_layer_predicted;
-};
-
 class PacketBuffer;
 
 class RtpFrameObject : public FrameObject {