From bd9430db691d519cf0ed3922007faa7c68a7c223 Mon Sep 17 00:00:00 2001 From: Philip Langdale Date: Wed, 13 Apr 2011 22:00:18 -0700 Subject: [PATCH] CrystalHD: Fix usage of h264 parser. I was using the wrong value to track the position of the parser in the stream. For an error-free stream, the size of the frame and number of bytes consumed will be the same, but in an error situation they can diverge. Signed-off-by: Philip Langdale --- libavcodec/crystalhd.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/libavcodec/crystalhd.c b/libavcodec/crystalhd.c index b6e67cb399..9bbb6e8bba 100644 --- a/libavcodec/crystalhd.c +++ b/libavcodec/crystalhd.c @@ -796,13 +796,19 @@ static int decode(AVCodecContext *avctx, void *data, int *data_size, AVPacket *a if (priv->parser) { uint8_t *pout; - int psize = len; + int psize; + const uint8_t *in_data = avpkt->data; + int in_len = len; H264Context *h = priv->parser->priv_data; - while (psize) - ret = av_parser_parse2(priv->parser, avctx, &pout, &psize, - avpkt->data, len, avctx->pkt->pts, - avctx->pkt->dts, len - psize); + while (in_len) { + int index; + index = av_parser_parse2(priv->parser, avctx, &pout, &psize, + in_data, in_len, avctx->pkt->pts, + avctx->pkt->dts, 0); + in_data += index; + in_len -= index; + } av_log(avctx, AV_LOG_VERBOSE, "CrystalHD: parser picture type %d\n", h->s.picture_structure);