if (config->pix_fmt == *fmt_ptr) {
fprintf(stderr, "Initialized '%s' hardware decoding for codec '%s'.\n",
av_hwdevice_get_type_name(type), ctx->codec->name);
+ if (ctx->profile == FF_PROFILE_H264_BASELINE) {
+ fprintf(stderr, "WARNING: Stream claims to be H.264 Baseline, which is generally poorly supported in hardware decoders.\n");
+ fprintf(stderr, " Consider encoding it as Constrained Baseline, Main or High instead.\n");
+ fprintf(stderr, " Decoding might fail and fall back to software.\n");
+ }
return config->pix_fmt;
}
}
fprintf(stderr, "Decoder '%s' does not support device type '%s'.\n", ctx->codec->name, av_hwdevice_get_type_name(type));
}
- // We found no VA-API formats, so take the best software format.
+ // We found no VA-API formats, so take the first software format.
+ for (const AVPixelFormat *fmt_ptr = fmt; *fmt_ptr != -1; ++fmt_ptr) {
+ if ((av_pix_fmt_desc_get(*fmt_ptr)->flags & AV_PIX_FMT_FLAG_HWACCEL) == 0) {
+ fprintf(stderr, "Falling back to software format %s.\n", av_get_pix_fmt_name(*fmt_ptr));
+ return *fmt_ptr;
+ }
+ }
+
+ // Fallback: Just return anything. (Should never really happen.)
return fmt[0];
}