[mediacodec] Make FrameSink a lib.

TEST: use_media_decoder
Change-Id: I03699e80935fae3e8f70015e8de7b7c7897343cf
diff --git a/examples/media/BUILD.gn b/examples/media/BUILD.gn
index 5cf4650..9be4ff5 100644
--- a/examples/media/BUILD.gn
+++ b/examples/media/BUILD.gn
@@ -119,6 +119,7 @@
 }
 
 package("use_media_decoder") {
+  testonly = true
   deprecated_bare_package_url = "//build"
 
   deps = [
diff --git a/examples/media/use_media_decoder/BUILD.gn b/examples/media/use_media_decoder/BUILD.gn
index 0423db3..3f5dcc6 100644
--- a/examples/media/use_media_decoder/BUILD.gn
+++ b/examples/media/use_media_decoder/BUILD.gn
@@ -5,6 +5,8 @@
 import("//build/test.gni")
 
 source_set("use_media_decoder_source_set") {
+  testonly = true
+
   sources = [
     "codec_buffer.cc",
     "codec_buffer.h",
@@ -12,10 +14,6 @@
     "codec_client.h",
     "codec_output.cc",
     "codec_output.h",
-    "frame_sink.cc",
-    "frame_sink.h",
-    "frame_sink_view.cc",
-    "frame_sink_view.h",
     "use_aac_decoder.cc",
     "use_aac_decoder.h",
     "use_video_decoder.cc",
@@ -33,7 +31,9 @@
   ]
 
   deps = [
+    "//garnet/lib/media/codec_impl:fourcc",
     "//garnet/lib/media/raw_video_writer:raw_video_writer",
+    "//garnet/lib/media/test:frame_sink",
     "//garnet/lib/media/wav_writer:wav_writer",
     "//garnet/public/lib/component/cpp",
     "//garnet/public/lib/ui/base_view/cpp",
@@ -42,12 +42,14 @@
 }
 
 executable("use_media_decoder") {
+  testonly = true
   sources = [
     "main.cc",
   ]
 
   deps = [
     ":use_media_decoder_source_set",
+    "//garnet/lib/media/test:frame_sink",
     "//garnet/public/lib/component/cpp",
     "//zircon/public/lib/async-loop-cpp",
   ]
@@ -86,6 +88,8 @@
 
   deps = [
     ":use_media_decoder_source_set",
+    "//garnet/lib/media/codec_impl:fourcc",
+    "//garnet/lib/media/test:frame_sink",
     "//garnet/public/lib/component/cpp",
     "//zircon/public/lib/async-loop-cpp",
   ]
diff --git a/examples/media/use_media_decoder/main.cc b/examples/media/use_media_decoder/main.cc
index 5c9de68..d5a1d8f 100644
--- a/examples/media/use_media_decoder/main.cc
+++ b/examples/media/use_media_decoder/main.cc
@@ -5,7 +5,6 @@
 #include <stdint.h>
 #include <stdio.h>
 
-#include "frame_sink.h"
 #include "use_aac_decoder.h"
 #include "use_video_decoder.h"
 
@@ -14,6 +13,7 @@
 #include <lib/fxl/command_line.h>
 #include <lib/fxl/log_settings_command_line.h>
 #include <lib/fxl/logging.h>
+#include <lib/media/test/frame_sink.h>
 
 #include <thread>
 
diff --git a/examples/media/use_media_decoder/use_video_decoder.cc b/examples/media/use_media_decoder/use_video_decoder.cc
index bfa788c..86d6fa3 100644
--- a/examples/media/use_media_decoder/use_video_decoder.cc
+++ b/examples/media/use_media_decoder/use_video_decoder.cc
@@ -5,7 +5,6 @@
 #include "use_video_decoder.h"
 
 #include "codec_client.h"
-#include "frame_sink.h"
 #include "util.h"
 
 #include <garnet/lib/media/raw_video_writer/raw_video_writer.h>
@@ -14,6 +13,8 @@
 #include <lib/fit/defer.h>
 #include <lib/fxl/arraysize.h>
 #include <lib/fxl/logging.h>
+#include <lib/media/codec_impl/fourcc.h>
+#include <lib/media/test/frame_sink.h>
 
 #include <stdint.h>
 #include <string.h>
diff --git a/examples/media/use_media_decoder/util.h b/examples/media/use_media_decoder/util.h
index c0606be..829bf94 100644
--- a/examples/media/use_media_decoder/util.h
+++ b/examples/media/use_media_decoder/util.h
@@ -75,19 +75,4 @@
 void SHA256_Update_VideoPlane(SHA256_CTX* sha256_ctx, uint8_t* start,
                               uint32_t width, uint32_t stride, uint32_t height);
 
-static inline constexpr uint32_t make_fourcc(uint8_t a, uint8_t b, uint8_t c,
-                                             uint8_t d) {
-  return (static_cast<uint32_t>(d) << 24) | (static_cast<uint32_t>(c) << 16) |
-         (static_cast<uint32_t>(b) << 8) | static_cast<uint32_t>(a);
-}
-
-static inline std::string fourcc_to_string(uint32_t fourcc) {
-  // fourcc has first letter in the low-order byte.  We want that letter to be
-  // the first byte in memory, without regard for host endian-ness, so convert
-  // from host to little-endian which puts the low-order byte first.
-  uint32_t little_endian_fourcc = htole32(fourcc);
-  return std::string(reinterpret_cast<char*>(&little_endian_fourcc),
-                     sizeof(fourcc));
-}
-
 #endif  // GARNET_EXAMPLES_MEDIA_USE_MEDIA_DECODER_UTIL_H_
diff --git a/lib/media/codec_impl/BUILD.gn b/lib/media/codec_impl/BUILD.gn
index dedcc73..9fd8f3b 100644
--- a/lib/media/codec_impl/BUILD.gn
+++ b/lib/media/codec_impl/BUILD.gn
@@ -9,6 +9,14 @@
   include_dirs = [ "include" ]
 }
 
+source_set("fourcc") {
+  public_configs = [ ":codec_impl_include_config" ]
+
+  public = [
+    "include/lib/media/codec_impl/fourcc.h",
+  ]
+}
+
 source_set("codec_impl") {
   sources = [
     "codec_adapter.cc",
@@ -30,6 +38,7 @@
     "include/lib/media/codec_impl/codec_packet.h",
   ]
   public_deps = [
+    ":fourcc",
     "//zircon/public/lib/async-cpp",
     "//zircon/public/lib/async-loop-cpp",
     "//zircon/public/lib/fbl",
diff --git a/lib/media/codec_impl/include/lib/media/codec_impl/fourcc.h b/lib/media/codec_impl/include/lib/media/codec_impl/fourcc.h
new file mode 100644
index 0000000..1eabaae
--- /dev/null
+++ b/lib/media/codec_impl/include/lib/media/codec_impl/fourcc.h
@@ -0,0 +1,25 @@
+// Copyright 2019 The Fuchsia Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef GARNET_LIB_MEDIA_CODEC_IMPL_INCLUDE_LIB_MEDIA_CODEC_IMPL_FOURCC_H_
+#define GARNET_LIB_MEDIA_CODEC_IMPL_INCLUDE_LIB_MEDIA_CODEC_IMPL_FOURCC_H_
+
+#include <endian.h>
+
+static inline constexpr uint32_t make_fourcc(uint8_t a, uint8_t b, uint8_t c,
+                                             uint8_t d) {
+  return (static_cast<uint32_t>(d) << 24) | (static_cast<uint32_t>(c) << 16) |
+         (static_cast<uint32_t>(b) << 8) | static_cast<uint32_t>(a);
+}
+
+static inline std::string fourcc_to_string(uint32_t fourcc) {
+  // fourcc has first letter in the low-order byte.  We want that letter to be
+  // the first byte in memory, without regard for host endian-ness, so convert
+  // from host to little-endian which puts the low-order byte first.
+  uint32_t little_endian_fourcc = htole32(fourcc);
+  return std::string(reinterpret_cast<char*>(&little_endian_fourcc),
+                     sizeof(fourcc));
+}
+
+#endif  // GARNET_LIB_MEDIA_CODEC_IMPL_INCLUDE_LIB_MEDIA_CODEC_IMPL_FOURCC_H_
diff --git a/lib/media/test/BUILD.gn b/lib/media/test/BUILD.gn
new file mode 100644
index 0000000..46bf4e2
--- /dev/null
+++ b/lib/media/test/BUILD.gn
@@ -0,0 +1,43 @@
+# Copyright 2019 The Fuchsia Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("//build/package.gni")
+import("//build/test.gni")
+
+config("media_test_include_config") {
+  include_dirs = [ "include" ]
+}
+
+source_set("frame_sink") {
+  testonly = true
+
+  sources = [
+    "frame_sink.cc",
+    "frame_sink_view.cc",
+  ]
+
+  include_dirs = [ "include" ]
+
+  public_configs = [ ":media_test_include_config" ]
+
+  public = [
+    "include/lib/media/test/frame_sink.h",
+    "include/lib/media/test/frame_sink_view.h",
+  ]
+
+  public_deps = [
+    "//zircon/public/lib/async",
+    "//zircon/public/lib/async-cpp",
+    "//zircon/public/lib/async-loop-cpp",
+  ]
+
+  deps = [
+    "//garnet/lib/media/codec_impl:fourcc",
+    "//garnet/lib/media/raw_video_writer:raw_video_writer",
+    "//garnet/lib/media/wav_writer:wav_writer",
+    "//garnet/public/lib/component/cpp",
+    "//garnet/public/lib/ui/base_view/cpp",
+    "//garnet/public/lib/ui/scenic/cpp",
+  ]
+}
diff --git a/examples/media/use_media_decoder/frame_sink.cc b/lib/media/test/frame_sink.cc
similarity index 97%
rename from examples/media/use_media_decoder/frame_sink.cc
rename to lib/media/test/frame_sink.cc
index 7235aa7..e2f3521 100644
--- a/examples/media/use_media_decoder/frame_sink.cc
+++ b/lib/media/test/frame_sink.cc
@@ -2,10 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "frame_sink.h"
+#include "lib/media/test/frame_sink.h"
 
-#include "frame_sink_view.h"
-#include "util.h"
+#include "lib/media/test/frame_sink_view.h"
 
 #include <fuchsia/mediacodec/cpp/fidl.h>
 #include <lib/async-loop/cpp/loop.h>
@@ -13,6 +12,7 @@
 #include <lib/component/cpp/startup_context.h>
 #include <lib/fit/defer.h>
 #include <lib/fxl/logging.h>
+#include <lib/media/codec_impl/fourcc.h>
 #include <lib/zx/vmo.h>
 
 #include <memory>
diff --git a/examples/media/use_media_decoder/frame_sink_view.cc b/lib/media/test/frame_sink_view.cc
similarity index 98%
rename from examples/media/use_media_decoder/frame_sink_view.cc
rename to lib/media/test/frame_sink_view.cc
index a85b504..74278ef 100644
--- a/examples/media/use_media_decoder/frame_sink_view.cc
+++ b/lib/media/test/frame_sink_view.cc
@@ -2,12 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "frame_sink_view.h"
+#include "lib/media/test/frame_sink_view.h"
 
-#include "frame_sink.h"
-#include "util.h"
+#include "lib/media/test/frame_sink.h"
 
 #include <lib/fxl/logging.h>
+#include <lib/media/codec_impl/fourcc.h>
 #include <lib/ui/scenic/cpp/commands.h>
 
 #include <iomanip>
diff --git a/examples/media/use_media_decoder/frame_sink.h b/lib/media/test/include/lib/media/test/frame_sink.h
similarity index 100%
rename from examples/media/use_media_decoder/frame_sink.h
rename to lib/media/test/include/lib/media/test/frame_sink.h
diff --git a/examples/media/use_media_decoder/frame_sink_view.h b/lib/media/test/include/lib/media/test/frame_sink_view.h
similarity index 100%
rename from examples/media/use_media_decoder/frame_sink_view.h
rename to lib/media/test/include/lib/media/test/frame_sink_view.h