[FFmpeg-cvslog] avcodec/libaomdec: add support for monochrome files

James Almer git at videolan.org
Tue Apr 3 21:45:31 EEST 2018


ffmpeg | branch: master | James Almer <jamrial at gmail.com> | Tue Apr  3 15:33:48 2018 -0300| [f3fae82042595f6ea31c832df7b8ca2941bb9620] | committer: James Almer

avcodec/libaomdec: add support for monochrome files

All such files are signaled as I42016, as there's no monochrome value
in aom_img_fmt_t.

Signed-off-by: James Almer <jamrial at gmail.com>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=f3fae82042595f6ea31c832df7b8ca2941bb9620
---

 libavcodec/libaomdec.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/libavcodec/libaomdec.c b/libavcodec/libaomdec.c
index fdc53e4520..9991af96c8 100644
--- a/libavcodec/libaomdec.c
+++ b/libavcodec/libaomdec.c
@@ -61,9 +61,10 @@ static av_cold int aom_init(AVCodecContext *avctx,
 
 static void image_copy_16_to_8(AVFrame *pic, struct aom_image *img)
 {
+    const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pic->format);
     int i;
 
-    for (i = 0; i < 3; i++) {
+    for (i = 0; i < desc->nb_components; i++) {
         int w = img->d_w;
         int h = img->d_h;
         int x, y;
@@ -97,7 +98,8 @@ static int set_pix_fmt(AVCodecContext *avctx, struct aom_image *img)
     case AOM_IMG_FMT_I420:
     case AOM_IMG_FMT_I42016:
         if (img->bit_depth == 8) {
-            avctx->pix_fmt = AV_PIX_FMT_YUV420P;
+            avctx->pix_fmt = img->monochrome ?
+                             AV_PIX_FMT_GRAY8 : AV_PIX_FMT_YUV420P;
             avctx->profile = FF_PROFILE_AV1_MAIN;
             return 0;
         } else if (img->bit_depth == 10) {
@@ -114,7 +116,8 @@ static int set_pix_fmt(AVCodecContext *avctx, struct aom_image *img)
     case AOM_IMG_FMT_I422:
     case AOM_IMG_FMT_I42216:
         if (img->bit_depth == 8) {
-            avctx->pix_fmt = AV_PIX_FMT_YUV422P;
+            avctx->pix_fmt = img->monochrome ?
+                             AV_PIX_FMT_GRAY10 : AV_PIX_FMT_YUV420P10;
             avctx->profile = FF_PROFILE_AV1_PROFESSIONAL;
             return 0;
         } else if (img->bit_depth == 10) {
@@ -131,7 +134,8 @@ static int set_pix_fmt(AVCodecContext *avctx, struct aom_image *img)
     case AOM_IMG_FMT_I444:
     case AOM_IMG_FMT_I44416:
         if (img->bit_depth == 8) {
-            avctx->pix_fmt = AV_PIX_FMT_YUV444P;
+            avctx->pix_fmt = img->monochrome ?
+                             AV_PIX_FMT_GRAY12 : AV_PIX_FMT_YUV420P12;
             avctx->profile = FF_PROFILE_AV1_HIGH;
             return 0;
         } else if (img->bit_depth == 10) {



More information about the ffmpeg-cvslog mailing list