@ -338,6 +338,9 @@ static int set_pix_fmt(AVCodecContext *avctx, aom_codec_caps_t codec_caps,
const AVPixFmtDescriptor * desc = av_pix_fmt_desc_get ( avctx - > pix_fmt ) ;
const AVPixFmtDescriptor * desc = av_pix_fmt_desc_get ( avctx - > pix_fmt ) ;
enccfg - > g_bit_depth = enccfg - > g_input_bit_depth = desc - > comp [ 0 ] . depth ;
enccfg - > g_bit_depth = enccfg - > g_input_bit_depth = desc - > comp [ 0 ] . depth ;
switch ( avctx - > pix_fmt ) {
switch ( avctx - > pix_fmt ) {
case AV_PIX_FMT_GRAY8 :
enccfg - > monochrome = 1 ;
/* Fall-through */
case AV_PIX_FMT_YUV420P :
case AV_PIX_FMT_YUV420P :
enccfg - > g_profile = FF_PROFILE_AV1_MAIN ;
enccfg - > g_profile = FF_PROFILE_AV1_MAIN ;
* img_fmt = AOM_IMG_FMT_I420 ;
* img_fmt = AOM_IMG_FMT_I420 ;
@ -351,6 +354,10 @@ static int set_pix_fmt(AVCodecContext *avctx, aom_codec_caps_t codec_caps,
enccfg - > g_profile = FF_PROFILE_AV1_HIGH ;
enccfg - > g_profile = FF_PROFILE_AV1_HIGH ;
* img_fmt = AOM_IMG_FMT_I444 ;
* img_fmt = AOM_IMG_FMT_I444 ;
return 0 ;
return 0 ;
case AV_PIX_FMT_GRAY10 :
case AV_PIX_FMT_GRAY12 :
enccfg - > monochrome = 1 ;
/* Fall-through */
case AV_PIX_FMT_YUV420P10 :
case AV_PIX_FMT_YUV420P10 :
case AV_PIX_FMT_YUV420P12 :
case AV_PIX_FMT_YUV420P12 :
if ( codec_caps & AOM_CODEC_CAP_HIGHBITDEPTH ) {
if ( codec_caps & AOM_CODEC_CAP_HIGHBITDEPTH ) {
@ -1158,6 +1165,15 @@ static const enum AVPixelFormat av1_pix_fmts[] = {
AV_PIX_FMT_NONE
AV_PIX_FMT_NONE
} ;
} ;
static const enum AVPixelFormat av1_pix_fmts_with_gray [ ] = {
AV_PIX_FMT_YUV420P ,
AV_PIX_FMT_YUV422P ,
AV_PIX_FMT_YUV444P ,
AV_PIX_FMT_GBRP ,
AV_PIX_FMT_GRAY8 ,
AV_PIX_FMT_NONE
} ;
static const enum AVPixelFormat av1_pix_fmts_highbd [ ] = {
static const enum AVPixelFormat av1_pix_fmts_highbd [ ] = {
AV_PIX_FMT_YUV420P ,
AV_PIX_FMT_YUV420P ,
AV_PIX_FMT_YUV422P ,
AV_PIX_FMT_YUV422P ,
@ -1174,13 +1190,35 @@ static const enum AVPixelFormat av1_pix_fmts_highbd[] = {
AV_PIX_FMT_NONE
AV_PIX_FMT_NONE
} ;
} ;
static const enum AVPixelFormat av1_pix_fmts_highbd_with_gray [ ] = {
AV_PIX_FMT_YUV420P ,
AV_PIX_FMT_YUV422P ,
AV_PIX_FMT_YUV444P ,
AV_PIX_FMT_GBRP ,
AV_PIX_FMT_YUV420P10 ,
AV_PIX_FMT_YUV422P10 ,
AV_PIX_FMT_YUV444P10 ,
AV_PIX_FMT_YUV420P12 ,
AV_PIX_FMT_YUV422P12 ,
AV_PIX_FMT_YUV444P12 ,
AV_PIX_FMT_GBRP10 ,
AV_PIX_FMT_GBRP12 ,
AV_PIX_FMT_GRAY8 ,
AV_PIX_FMT_GRAY10 ,
AV_PIX_FMT_GRAY12 ,
AV_PIX_FMT_NONE
} ;
static av_cold void av1_init_static ( AVCodec * codec )
static av_cold void av1_init_static ( AVCodec * codec )
{
{
int supports_monochrome = aom_codec_version ( ) > = 20001 ;
aom_codec_caps_t codec_caps = aom_codec_get_caps ( aom_codec_av1_cx ( ) ) ;
aom_codec_caps_t codec_caps = aom_codec_get_caps ( aom_codec_av1_cx ( ) ) ;
if ( codec_caps & AOM_CODEC_CAP_HIGHBITDEPTH )
if ( codec_caps & AOM_CODEC_CAP_HIGHBITDEPTH )
codec - > pix_fmts = av1_pix_fmts_highbd ;
codec - > pix_fmts = supports_monochrome ? av1_pix_fmts_highbd_with_gray :
av1_pix_fmts_highbd ;
else
else
codec - > pix_fmts = av1_pix_fmts ;
codec - > pix_fmts = supports_monochrome ? av1_pix_fmts_with_gray :
av1_pix_fmts ;
if ( aom_codec_version_major ( ) < 2 )
if ( aom_codec_version_major ( ) < 2 )
codec - > capabilities | = AV_CODEC_CAP_EXPERIMENTAL ;
codec - > capabilities | = AV_CODEC_CAP_EXPERIMENTAL ;