[FFmpeg-devel] [PATCH] Export profile/level from the vc1 decoder

Kostya Shishkov kostya.shishkov
Sat Mar 12 13:02:53 CET 2011


On Fri, Mar 11, 2011 at 11:12:04PM +0100, Hendrik Leppkes wrote:
> ---
> ?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 8651938..cfbb795 100644
> --- a/libavcodec/avcodec.h
> +++ b/libavcodec/avcodec.h
> @@ -2306,6 +2306,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 7eb9576..cb1544d 100644
> --- a/libavcodec/vc1dec.c
> +++ b/libavcodec/vc1dec.c
> @@ -3104,6 +3104,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;
>
> @@ -3351,6 +3355,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",
> @@ -3364,7 +3375,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
> @@ -3380,7 +3392,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
>
> @@ -3397,7 +3410,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
>
> @@ -3414,6 +3428,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
> --

looks ok to me



More information about the ffmpeg-devel mailing list