aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2014-03-17 02:25:20 +0100
committerMichael Niedermayer <michaelni@gmx.at>2014-03-17 02:37:29 +0100
commit8e92ff25469f75f5c1fcbb9ba5721cea341ca34a (patch)
tree1125109c325bb9fbf669784266e95a6386737a46
parent9eb3f11c55d6c32cdc867fa057ab743310d7df5d (diff)
downloadffmpeg-8e92ff25469f75f5c1fcbb9ba5721cea341ca34a.tar.gz
avcodec/h264: be more tolerant on what pixel format changes trigger reinits
Fixes Ticket3260 Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r--libavcodec/h264.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/libavcodec/h264.c b/libavcodec/h264.c
index 9379b2ff4a..ec3601f994 100644
--- a/libavcodec/h264.c
+++ b/libavcodec/h264.c
@@ -3444,6 +3444,17 @@ int ff_set_ref_count(H264Context *h)
return 0;
}
+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.
@@ -3573,7 +3584,7 @@ static int decode_slice_header(H264Context *h, H264Context *h0)
|| h->mb_width != h->sps.mb_width
|| h->mb_height != h->sps.mb_height * (2 - h->sps.frame_mbs_only_flag)
));
- if (h0->avctx->pix_fmt != get_pixel_format(h0, 0))
+ if (non_j_pixfmt(h0->avctx->pix_fmt) != non_j_pixfmt(get_pixel_format(h0, 0)))
must_reinit = 1;
h->mb_width = h->sps.mb_width;