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;