From ca22d1dea2842fca0422dd1d2bd09e7eb2c8f118 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Fri, 1 Nov 2013 18:37:47 +0100 Subject: vdpau: add a convenience function for getting a decoder profile. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Based on the code by RĂ©mi Denis-Courmont from VLC. --- libavcodec/vdpau.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) (limited to 'libavcodec/vdpau.c') diff --git a/libavcodec/vdpau.c b/libavcodec/vdpau.c index 9bcbc2e11b..cc0bcffc5f 100644 --- a/libavcodec/vdpau.c +++ b/libavcodec/vdpau.c @@ -90,4 +90,47 @@ int ff_vdpau_add_buffer(Picture *pic, const uint8_t *buf, uint32_t size) return 0; } +int av_vdpau_get_profile(AVCodecContext *avctx, VdpDecoderProfile *profile) +{ +#define PROFILE(prof) \ +do { \ + *profile = prof; \ + return 0; \ +} while (0) + + switch (avctx->codec_id) { + case AV_CODEC_ID_MPEG1VIDEO: PROFILE(VDP_DECODER_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); + default: return AVERROR(EINVAL); + } + case AV_CODEC_ID_H263: PROFILE(VDP_DECODER_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); + default: return AVERROR(EINVAL); + } + case AV_CODEC_ID_H264: + switch (avctx->profile) { + case FF_PROFILE_H264_CONSTRAINED_BASELINE: + case FF_PROFILE_H264_BASELINE: PROFILE(VDP_DECODER_PROFILE_H264_BASELINE); + case FF_PROFILE_H264_MAIN: PROFILE(VDP_DECODER_PROFILE_H264_MAIN); + case FF_PROFILE_H264_HIGH: PROFILE(VDP_DECODER_PROFILE_H264_HIGH); + 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); + default: return AVERROR(EINVAL); + } + } + return AVERROR(EINVAL); +} + /* @}*/ -- cgit v1.2.3