From 0215006ab75be1f49fa8eacf2c6d3c1bd22edfc7 Mon Sep 17 00:00:00 2001 From: Hendrik Leppkes Date: Fri, 11 Mar 2011 23:12:04 +0100 Subject: [PATCH] VC1: Export profile/level Signed-off-by: Mans Rullgard --- libavcodec/avcodec.h | 5 +++++ libavcodec/vc1dec.c | 23 +++++++++++++++++++---- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index d323e6635e..12cca6ff97 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -2314,6 +2314,11 @@ typedef struct AVCodecContext { #define FF_PROFILE_H264_HIGH_444_INTRA (244|FF_PROFILE_H264_INTRA) #define FF_PROFILE_H264_CAVLC_444 44 +#define FF_PROFILE_VC1_SIMPLE 0 +#define FF_PROFILE_VC1_MAIN 1 +#define FF_PROFILE_VC1_COMPLEX 2 +#define FF_PROFILE_VC1_ADVANCED 3 + /** * level * - encoding: Set by user. diff --git a/libavcodec/vc1dec.c b/libavcodec/vc1dec.c index b27b6d01c1..1a437a892a 100644 --- a/libavcodec/vc1dec.c +++ b/libavcodec/vc1dec.c @@ -3098,6 +3098,10 @@ static av_cold int vc1_decode_init(AVCodecContext *avctx) return -1; } } + avctx->profile = v->profile; + if (v->profile == PROFILE_ADVANCED) + avctx->level = v->level; + avctx->has_b_frames= !!(avctx->max_b_frames); s->low_delay = !avctx->has_b_frames; @@ -3345,6 +3349,13 @@ static av_cold int vc1_decode_end(AVCodecContext *avctx) return 0; } +static const AVProfile profiles[] = { + { FF_PROFILE_VC1_SIMPLE, "Simple" }, + { FF_PROFILE_VC1_MAIN, "Main" }, + { FF_PROFILE_VC1_COMPLEX, "Complex" }, + { FF_PROFILE_VC1_ADVANCED, "Advanced" }, + { FF_PROFILE_UNKNOWN }, +}; AVCodec ff_vc1_decoder = { "vc1", @@ -3358,7 +3369,8 @@ AVCodec ff_vc1_decoder = { CODEC_CAP_DR1 | CODEC_CAP_DELAY, NULL, .long_name = NULL_IF_CONFIG_SMALL("SMPTE VC-1"), - .pix_fmts = ff_hwaccel_pixfmt_list_420 + .pix_fmts = ff_hwaccel_pixfmt_list_420, + .profiles = NULL_IF_CONFIG_SMALL(profiles) }; #if CONFIG_WMV3_DECODER @@ -3374,7 +3386,8 @@ AVCodec ff_wmv3_decoder = { CODEC_CAP_DR1 | CODEC_CAP_DELAY, NULL, .long_name = NULL_IF_CONFIG_SMALL("Windows Media Video 9"), - .pix_fmts = ff_hwaccel_pixfmt_list_420 + .pix_fmts = ff_hwaccel_pixfmt_list_420, + .profiles = NULL_IF_CONFIG_SMALL(profiles) }; #endif @@ -3391,7 +3404,8 @@ AVCodec ff_wmv3_vdpau_decoder = { CODEC_CAP_DR1 | CODEC_CAP_DELAY | CODEC_CAP_HWACCEL_VDPAU, NULL, .long_name = NULL_IF_CONFIG_SMALL("Windows Media Video 9 VDPAU"), - .pix_fmts = (const enum PixelFormat[]){PIX_FMT_VDPAU_WMV3, PIX_FMT_NONE} + .pix_fmts = (const enum PixelFormat[]){PIX_FMT_VDPAU_WMV3, PIX_FMT_NONE}, + .profiles = NULL_IF_CONFIG_SMALL(profiles) }; #endif @@ -3408,6 +3422,7 @@ AVCodec ff_vc1_vdpau_decoder = { CODEC_CAP_DR1 | CODEC_CAP_DELAY | CODEC_CAP_HWACCEL_VDPAU, NULL, .long_name = NULL_IF_CONFIG_SMALL("SMPTE VC-1 VDPAU"), - .pix_fmts = (const enum PixelFormat[]){PIX_FMT_VDPAU_VC1, PIX_FMT_NONE} + .pix_fmts = (const enum PixelFormat[]){PIX_FMT_VDPAU_VC1, PIX_FMT_NONE}, + .profiles = NULL_IF_CONFIG_SMALL(profiles) }; #endif