summaryrefslogtreecommitdiff
path: root/libavcodec/h264_slice.c
diff options
context:
space:
mode:
authorwm4 <nfxjfg@googlemail.com>2015-10-15 20:19:55 +0200
committerwm4 <nfxjfg@googlemail.com>2015-10-15 20:19:55 +0200
commit17fe18d21ad9caba5dec08237b511c7fb89e88b3 (patch)
treed955bbfb3bafbcca96ee8255a543948c4a2b6664 /libavcodec/h264_slice.c
parentcdf4a13f86157155bf9518a51369f0d5c03ae707 (diff)
Revert "avcodec/h264: remove redundant and bogus get_format call"
This reverts commit be583c6fd3a6f06844b56619653b9b0e4561870d. This was not approved, and was accidentally pushed. I'm very sorry.
Diffstat (limited to 'libavcodec/h264_slice.c')
-rw-r--r--libavcodec/h264_slice.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/libavcodec/h264_slice.c b/libavcodec/h264_slice.c
index 1272319635..a346ccbc00 100644
--- a/libavcodec/h264_slice.c
+++ b/libavcodec/h264_slice.c
@@ -1129,6 +1129,17 @@ fail:
return ret;
}
+static enum AVPixelFormat non_j_pixfmt(enum AVPixelFormat a)
+{
+ switch (a) {
+ case AV_PIX_FMT_YUVJ420P: return AV_PIX_FMT_YUV420P;
+ case AV_PIX_FMT_YUVJ422P: return AV_PIX_FMT_YUV422P;
+ case AV_PIX_FMT_YUVJ444P: return AV_PIX_FMT_YUV444P;
+ default:
+ return a;
+ }
+}
+
/**
* Decode a slice header.
* This will (re)intialize the decoder and call h264_frame_start() as needed.
@@ -1312,6 +1323,9 @@ int ff_h264_decode_slice_header(H264Context *h, H264SliceContext *sl)
|| h->mb_width != h->sps.mb_width
|| h->mb_height != h->sps.mb_height * (2 - h->sps.frame_mbs_only_flag)
));
+ if (h->avctx->pix_fmt == AV_PIX_FMT_NONE
+ || (non_j_pixfmt(h->avctx->pix_fmt) != non_j_pixfmt(get_pixel_format(h, 0))))
+ must_reinit = 1;
if (first_slice && av_cmp_q(h->sps.sar, h->avctx->sample_aspect_ratio))
must_reinit = 1;