|
|
|
@ -637,45 +637,46 @@ void ff_vdpau_mpeg4_decode_picture(Mpeg4DecContext *ctx, const uint8_t *buf, |
|
|
|
|
|
|
|
|
|
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); |
|
|
|
|
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) |
|
|
|
|