[FFmpeg-trac] #7599(avcodec:new): Add monochrome/gray pixel format to libaom-av1

FFmpeg trac at avcodec.org
Thu Jan 10 23:10:46 EET 2019


#7599: Add monochrome/gray pixel format to libaom-av1
-------------------------------------+-----------------------------------
             Reporter:  Ewout        |                    Owner:
                 Type:  enhancement  |                   Status:  new
             Priority:  wish         |                Component:  avcodec
              Version:  git-master   |               Resolution:
             Keywords:  libaom       |               Blocked By:
             Blocking:               |  Reproduced by developer:  0
Analyzed by developer:  0            |
-------------------------------------+-----------------------------------

Comment (by cehoyos):

 Does this work any better?
 {{{
 diff --git a/libavcodec/libaomenc.c b/libavcodec/libaomenc.c
 index faec61c..e8fb507 100644
 --- a/libavcodec/libaomenc.c
 +++ b/libavcodec/libaomenc.c
 @@ -248,6 +248,8 @@ static int set_pix_fmt(AVCodecContext *avctx,
 aom_codec_caps_t codec_caps,
          enccfg->g_profile = FF_PROFILE_AV1_PROFESSIONAL;
          *img_fmt = AOM_IMG_FMT_I422;
          return 0;
 +    case AV_PIX_FMT_GRAY8:
 +        ctx->rawimg.monochrome = 1;
      case AV_PIX_FMT_YUV444P:
          enccfg->g_profile = FF_PROFILE_AV1_HIGH;
          *img_fmt = AOM_IMG_FMT_I444;
 @@ -275,11 +277,14 @@ static int set_pix_fmt(AVCodecContext *avctx,
 aom_codec_caps_t codec_caps,
              return 0;
          }
          break;
 +    case AV_PIX_FMT_GRAY10:
 +    case AV_PIX_FMT_GRAY12:
 +        ctx->rawimg.monochrome = 1;
      case AV_PIX_FMT_YUV444P10:
      case AV_PIX_FMT_YUV444P12:
          if (codec_caps & AOM_CODEC_CAP_HIGHBITDEPTH) {
              enccfg->g_bit_depth = enccfg->g_input_bit_depth =
 -                avctx->pix_fmt == AV_PIX_FMT_YUV444P10 ? 10 : 12;
 +                avctx->pix_fmt == AV_PIX_FMT_YUV444P10 || avctx->pix_fmt
 == AV_PIX_FMT_GRAY10 ? 10 : 12;
              enccfg->g_profile =
                  enccfg->g_bit_depth == 10 ? FF_PROFILE_AV1_HIGH :
 FF_PROFILE_AV1_PROFESSIONAL;
              *img_fmt = AOM_IMG_FMT_I44416;
 @@ -902,11 +907,18 @@ static int aom_encode(AVCodecContext *avctx,
 AVPacket *pkt,
      if (frame) {
          rawimg                      = &ctx->rawimg;
          rawimg->planes[AOM_PLANE_Y] = frame->data[0];
 -        rawimg->planes[AOM_PLANE_U] = frame->data[1];
 -        rawimg->planes[AOM_PLANE_V] = frame->data[2];
          rawimg->stride[AOM_PLANE_Y] = frame->linesize[0];
 -        rawimg->stride[AOM_PLANE_U] = frame->linesize[1];
 -        rawimg->stride[AOM_PLANE_V] = frame->linesize[2];
 +        if (rawimg.monochrome) {
 +            rawimg->planes[AOM_PLANE_U] = frame->data[0];
 +            rawimg->planes[AOM_PLANE_V] = frame->data[0];
 +            rawimg->stride[AOM_PLANE_U] = frame->linesize[0];
 +            rawimg->stride[AOM_PLANE_V] = frame->linesize[0];
 +        } else {
 +            rawimg->planes[AOM_PLANE_U] = frame->data[1];
 +            rawimg->planes[AOM_PLANE_V] = frame->data[2];
 +            rawimg->stride[AOM_PLANE_U] = frame->linesize[1];
 +            rawimg->stride[AOM_PLANE_V] = frame->linesize[2];
 +        }
          timestamp                   = frame->pts;
          switch (frame->color_range) {
          case AVCOL_RANGE_MPEG:
 @@ -950,6 +962,7 @@ static const enum AVPixelFormat av1_pix_fmts[] = {
      AV_PIX_FMT_YUV420P,
      AV_PIX_FMT_YUV422P,
      AV_PIX_FMT_YUV444P,
 +    AV_PIX_FMT_GRAY8,
      AV_PIX_FMT_NONE
  };

 @@ -957,12 +970,15 @@ static const enum AVPixelFormat
 av1_pix_fmts_highbd[] = {
      AV_PIX_FMT_YUV420P,
      AV_PIX_FMT_YUV422P,
      AV_PIX_FMT_YUV444P,
 +    AV_PIX_FMT_GRAY8,
      AV_PIX_FMT_YUV420P10,
      AV_PIX_FMT_YUV422P10,
      AV_PIX_FMT_YUV444P10,
 +    AV_PIX_FMT_GRAY10,
      AV_PIX_FMT_YUV420P12,
      AV_PIX_FMT_YUV422P12,
      AV_PIX_FMT_YUV444P12,
 +    AV_PIX_FMT_GRAY12,
      AV_PIX_FMT_NONE
  };

 }}}

--
Ticket URL: <https://trac.ffmpeg.org/ticket/7599#comment:4>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list