static int dxva2_init_decoder(struct lavc_ctx *s, int w, int h) { DXVA2Context *ctx = s->hwdec_priv; enum AVCodecID codec = s->avctx->codec_id; int profile = s->avctx->profile; if (codec == AV_CODEC_ID_H264 && (profile & ~FF_PROFILE_H264_CONSTRAINED) > FF_PROFILE_H264_HIGH) { MP_ERR(ctx, "Unsupported H.264 profile for DXVA2 HWAccel: %d\n", profile); return -1; } if (codec == AV_CODEC_ID_HEVC && profile != FF_PROFILE_HEVC_MAIN) { MP_ERR(ctx, "Unsupported H.265 profile for DXVA2 HWAccel: %d\n", profile); return -1; } if (ctx->decoder) dxva2_destroy_decoder(s); if (dxva2_create_decoder(s, w, h, codec, profile) < 0) { MP_ERR(ctx, "Error creating the DXVA2 decoder\n"); return -1; } return 0; }
int dxva2_init(AVCodecContext *s) { HwAccelContext *hac = s->opaque; DXVA2Context *ctx; int ret; if (!hac->hwaccel_ctx) { ret = dxva2_alloc(s); if (ret < 0) return ret; } ctx = hac->hwaccel_ctx; if (s->codec_id == AV_CODEC_ID_H264 && (s->profile & ~FF_PROFILE_H264_CONSTRAINED) > FF_PROFILE_H264_HIGH) { av_log(NULL, loglevel, "Unsupported H.264 profile for DXVA2 HWAccel: %d\n", s->profile); return AVERROR(EINVAL); } if (ctx->decoder) dxva2_destroy_decoder(s); ret = dxva2_create_decoder(s); if (ret < 0) { av_log(NULL, loglevel, "Error creating the DXVA2 decoder\n"); return ret; } av_log(NULL, loglevel, "dxva2_init successfully\n"); return 0; }
int dxva2_init(AVCodecContext *s) { InputStream *ist = s->opaque; int loglevel = (ist->hwaccel_id == HWACCEL_AUTO) ? AV_LOG_VERBOSE : AV_LOG_ERROR; DXVA2Context *ctx; int ret; if (!ist->hwaccel_ctx) { ret = dxva2_alloc(s); if (ret < 0) return ret; } ctx = ist->hwaccel_ctx; if (s->codec_id == AV_CODEC_ID_H264 && (s->profile & ~FF_PROFILE_H264_CONSTRAINED) > FF_PROFILE_H264_HIGH) { av_log(NULL, loglevel, "Unsupported H.264 profile for DXVA2 HWAccel: %d\n", s->profile); return AVERROR(EINVAL); } if (ctx->decoder) dxva2_destroy_decoder(s); ret = dxva2_create_decoder(s); if (ret < 0) { av_log(NULL, loglevel, "Error creating the DXVA2 decoder\n"); return ret; } return 0; }