Add warning when writing colocated chroma in Y4M

BUG=aomedia:2096

Change-Id: I33ffb152cedfc32f31e24846ac27e47ffecc5f5e
diff --git a/apps/aomdec.c b/apps/aomdec.c
index 4b7fc40..8e98f0b 100644
--- a/apps/aomdec.c
+++ b/apps/aomdec.c
@@ -900,6 +900,11 @@
                   y4m_buf, sizeof(y4m_buf), aom_input_ctx.width,
                   aom_input_ctx.height, &aom_input_ctx.framerate,
                   img->monochrome, img->csp, img->fmt, img->bit_depth);
+              if (img->csp == AOM_CSP_COLOCATED) {
+                fprintf(stderr,
+                        "Warning: Y4M lacks a colorspace for colocated "
+                        "chroma. Using a placeholder.\n");
+              }
               if (do_md5) {
                 MD5Update(&md5_ctx, (md5byte *)y4m_buf, (unsigned int)len);
               } else {
diff --git a/common/y4menc.c b/common/y4menc.c
index c539b5b..e3f5d5b 100644
--- a/common/y4menc.c
+++ b/common/y4menc.c
@@ -35,6 +35,10 @@
     default:
       if (csp == AOM_CSP_VERTICAL) {
         return "C420mpeg2 XYSCSS=420MPEG2";
+      } else if (csp == AOM_CSP_COLOCATED) {
+        // Note that Y4M does not have a dedicated header for colocated chroma,
+        // and that FFMPEG interprets C420 as C420jpeg.
+        return "C420";
       } else {
         return "C420jpeg";
       }
diff --git a/common/y4minput.c b/common/y4minput.c
index 5338370..f3dfaaf 100644
--- a/common/y4minput.c
+++ b/common/y4minput.c
@@ -823,6 +823,19 @@
             "Only progressive scan handled.\n");
     return -1;
   }
+  /* Only support vertical chroma sample position if the input format is
+   * already 420mpeg2. Colocated is not supported in Y4M.
+   */
+  if (csp == AOM_CSP_VERTICAL && strcmp(_y4m->chroma_type, "420mpeg2") != 0) {
+    fprintf(stderr,
+            "Vertical chroma sample position only supported "
+            "for 420mpeg2 input\n");
+    return -1;
+  }
+  if (csp == AOM_CSP_COLOCATED) {
+    fprintf(stderr, "Colocated chroma sample position not supported in Y4M\n");
+    return -1;
+  }
   _y4m->aom_fmt = AOM_IMG_FMT_I420;
   _y4m->bps = 12;
   _y4m->bit_depth = 8;
@@ -833,10 +846,6 @@
     _y4m->dst_buf_read_sz =
         _y4m->pic_w * _y4m->pic_h +
         2 * ((_y4m->pic_w + 1) / 2) * ((_y4m->pic_h + 1) / 2);
-    if (csp == AOM_CSP_VERTICAL) {
-      fprintf(stderr, "Unsupported conversion from 420jpeg to 420mpeg2\n");
-      return -1;
-    }
     /* Natively supported: no conversion required. */
     _y4m->aux_buf_sz = _y4m->aux_buf_read_sz = 0;
     _y4m->convert = y4m_convert_null;