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;