diff options
author | Uoti Urpala <uau@glyph.nonexistent.invalid> | 2012-08-18 16:11:45 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2012-08-18 16:36:09 +0200 |
commit | e70730045a22d053a64473df20886edfa4775e59 (patch) | |
tree | e2addee8225290b93394c51b8668fa2437c3b901 /libavcodec/h264.c | |
parent | 6c180b35c43f0738d8a3d5c08a01209b51eda569 (diff) | |
download | ffmpeg-e70730045a22d053a64473df20886edfa4775e59.tar.gz |
h264: vdpau: fix crash with unsupported colorspace
The h264_vdpau decoder crashed if output colorspace was not 8-bit 420.
Add a check to error out instead (current hardware does not support
other colorspaces, so successful decoding is not possible).
Check implemented at a different place by michael, thus blame for bugs goes to michael
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/h264.c')
-rw-r--r-- | libavcodec/h264.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/libavcodec/h264.c b/libavcodec/h264.c index c07d10afa8..42de03333f 100644 --- a/libavcodec/h264.c +++ b/libavcodec/h264.c @@ -2494,6 +2494,15 @@ static int decode_slice_header(H264Context *h, H264Context *h0) s->avctx->sample_aspect_ratio = h->sps.sar; av_assert0(s->avctx->sample_aspect_ratio.den); + if (s->avctx->codec->capabilities & CODEC_CAP_HWACCEL_VDPAU + && (h->sps.bit_depth_luma != 8 || + h->sps.chroma_format_idc > 1)) { + av_log(s->avctx, AV_LOG_ERROR, + "VDPAU decoding does not support video " + "colorspace\n"); + return -1; + } + if (s->avctx->bits_per_raw_sample != h->sps.bit_depth_luma || h->cur_chroma_format_idc != h->sps.chroma_format_idc) { if (h->sps.bit_depth_luma >= 8 && h->sps.bit_depth_luma <= 14 && h->sps.bit_depth_luma != 11 && h->sps.bit_depth_luma != 13 && |