X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Flibaomdec.c;h=a72ac984e72a9f7ea24227d79c1d9ce9f66e975c;hb=44085b9951b06df1cab4105dcda004213988d84f;hp=a9fd6215fcb9b9ccf170bb523b9091acf1e64afe;hpb=4897c80cc6eb50357503d5ced4b2443b39fa4263;p=ffmpeg diff --git a/libavcodec/libaomdec.c b/libavcodec/libaomdec.c index a9fd6215fcb..a72ac984e72 100644 --- a/libavcodec/libaomdec.c +++ b/libavcodec/libaomdec.c @@ -42,8 +42,7 @@ static av_cold int aom_init(AVCodecContext *avctx, { AV1DecodeContext *ctx = avctx->priv_data; struct aom_codec_dec_cfg deccfg = { - /* token partitions+1 would be a decent choice */ - .threads = FFMIN(avctx->thread_count, 16) + .threads = FFMIN(avctx->thread_count ? avctx->thread_count : av_cpu_count(), 16) }; av_log(avctx, AV_LOG_INFO, "%s\n", aom_codec_version_str()); @@ -61,9 +60,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; @@ -95,33 +95,26 @@ static int set_pix_fmt(AVCodecContext *avctx, struct aom_image *img) switch (img->fmt) { case AOM_IMG_FMT_I420: - avctx->pix_fmt = AV_PIX_FMT_YUV420P; - avctx->profile = FF_PROFILE_AV1_MAIN; - return 0; - case AOM_IMG_FMT_I422: - avctx->pix_fmt = AV_PIX_FMT_YUV422P; - avctx->profile = FF_PROFILE_AV1_PROFESSIONAL; - return 0; - case AOM_IMG_FMT_I444: - avctx->pix_fmt = AV_PIX_FMT_YUV444P; - avctx->profile = FF_PROFILE_AV1_HIGH; - return 0; 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) { - avctx->pix_fmt = AV_PIX_FMT_YUV420P10; + avctx->pix_fmt = img->monochrome ? + AV_PIX_FMT_GRAY10 : AV_PIX_FMT_YUV420P10; avctx->profile = FF_PROFILE_AV1_MAIN; return 0; } else if (img->bit_depth == 12) { - avctx->pix_fmt = AV_PIX_FMT_YUV420P12; + avctx->pix_fmt = img->monochrome ? + AV_PIX_FMT_GRAY12 : AV_PIX_FMT_YUV420P12; avctx->profile = FF_PROFILE_AV1_PROFESSIONAL; return 0; } else { return AVERROR_INVALIDDATA; } + case AOM_IMG_FMT_I422: case AOM_IMG_FMT_I42216: if (img->bit_depth == 8) { avctx->pix_fmt = AV_PIX_FMT_YUV422P; @@ -138,6 +131,7 @@ static int set_pix_fmt(AVCodecContext *avctx, struct aom_image *img) } else { return AVERROR_INVALIDDATA; } + case AOM_IMG_FMT_I444: case AOM_IMG_FMT_I44416: if (img->bit_depth == 8) { avctx->pix_fmt = AV_PIX_FMT_YUV444P;