status = decoder_query_caps(vdctx->device, profile, &supported, &max_level,
&max_mb, &max_width, &max_height);
+#ifdef VDP_DECODER_PROFILE_H264_CONSTRAINED_BASELINE
+ if (status != VDP_STATUS_OK && profile == VDP_DECODER_PROFILE_H264_CONSTRAINED_BASELINE) {
+ /* Run-time backward compatibility for libvdpau 0.8 and earlier */
+ profile = VDP_DECODER_PROFILE_H264_MAIN;
+ status = decoder_query_caps(vdctx->device, profile, &supported,
+ &max_level, &max_mb,
+ &max_width, &max_height);
+ }
+#endif
if (status != VDP_STATUS_OK)
return vdpau_error(status);
int av_vdpau_get_profile(AVCodecContext *avctx, VdpDecoderProfile *profile)
{
-#define PROFILE(prof) \
-do { \
- *profile = prof; \
- return 0; \
+#define PROFILE(prof) \
+do { \
+ *profile = VDP_DECODER_PROFILE_##prof; \
+ return 0; \
} while (0)
switch (avctx->codec_id) {
- case AV_CODEC_ID_MPEG1VIDEO: PROFILE(VDP_DECODER_PROFILE_MPEG1);
+ case AV_CODEC_ID_MPEG1VIDEO: PROFILE(MPEG1);
case AV_CODEC_ID_MPEG2VIDEO:
switch (avctx->profile) {
- case FF_PROFILE_MPEG2_MAIN: PROFILE(VDP_DECODER_PROFILE_MPEG2_MAIN);
- case FF_PROFILE_MPEG2_SIMPLE: PROFILE(VDP_DECODER_PROFILE_MPEG2_SIMPLE);
+ case FF_PROFILE_MPEG2_MAIN: PROFILE(MPEG2_MAIN);
+ case FF_PROFILE_MPEG2_SIMPLE: PROFILE(MPEG2_SIMPLE);
default: return AVERROR(EINVAL);
}
- case AV_CODEC_ID_H263: PROFILE(VDP_DECODER_PROFILE_MPEG4_PART2_ASP);
+ case AV_CODEC_ID_H263: PROFILE(MPEG4_PART2_ASP);
case AV_CODEC_ID_MPEG4:
switch (avctx->profile) {
- case FF_PROFILE_MPEG4_SIMPLE: PROFILE(VDP_DECODER_PROFILE_MPEG4_PART2_SP);
- case FF_PROFILE_MPEG4_ADVANCED_SIMPLE: PROFILE(VDP_DECODER_PROFILE_MPEG4_PART2_ASP);
+ case FF_PROFILE_MPEG4_SIMPLE: PROFILE(MPEG4_PART2_SP);
+ case FF_PROFILE_MPEG4_ADVANCED_SIMPLE: PROFILE(MPEG4_PART2_ASP);
default: return AVERROR(EINVAL);
}
case AV_CODEC_ID_H264:
switch (avctx->profile & ~FF_PROFILE_H264_INTRA) {
- case FF_PROFILE_H264_BASELINE: PROFILE(VDP_DECODER_PROFILE_H264_BASELINE);
+ case FF_PROFILE_H264_BASELINE: PROFILE(H264_BASELINE);
case FF_PROFILE_H264_CONSTRAINED_BASELINE:
- case FF_PROFILE_H264_MAIN: PROFILE(VDP_DECODER_PROFILE_H264_MAIN);
- case FF_PROFILE_H264_HIGH: PROFILE(VDP_DECODER_PROFILE_H264_HIGH);
+ case FF_PROFILE_H264_MAIN: PROFILE(H264_MAIN);
+ case FF_PROFILE_H264_HIGH: PROFILE(H264_HIGH);
+#ifdef VDP_DECODER_PROFILE_H264_EXTENDED
+ case FF_PROFILE_H264_EXTENDED: PROFILE(H264_EXTENDED);
+#endif
default: return AVERROR(EINVAL);
}
case AV_CODEC_ID_WMV3:
case AV_CODEC_ID_VC1:
switch (avctx->profile) {
- case FF_PROFILE_VC1_SIMPLE: PROFILE(VDP_DECODER_PROFILE_VC1_SIMPLE);
- case FF_PROFILE_VC1_MAIN: PROFILE(VDP_DECODER_PROFILE_VC1_MAIN);
- case FF_PROFILE_VC1_ADVANCED: PROFILE(VDP_DECODER_PROFILE_VC1_ADVANCED);
+ case FF_PROFILE_VC1_SIMPLE: PROFILE(VC1_SIMPLE);
+ case FF_PROFILE_VC1_MAIN: PROFILE(VC1_MAIN);
+ case FF_PROFILE_VC1_ADVANCED: PROFILE(VC1_ADVANCED);
default: return AVERROR(EINVAL);
}
}
return AVERROR(EINVAL);
+#undef PROFILE
}
AVVDPAUContext *av_vdpau_alloc_context(void)